diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bb54c3b..c57d1217 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human - Version: **3.1.2** + Version: **3.2.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 ** @@ -9,7 +9,14 @@ ## Changelog -### **HEAD -> main** 2023/09/18 mandic00@live.com +### **3.2.0** 2023/12/06 mandic00@live.com + + +### **origin/main** 2023/12/06 aug@iterative.day + +- https://github.com/vladmandic/human/issues/402 + +### **release: 3.1.2** 2023/09/18 mandic00@live.com - full rebuild diff --git a/demo/README.md b/demo/README.md index 8e551852..c40e74c8 100644 --- a/demo/README.md +++ b/demo/README.md @@ -8,6 +8,7 @@ For details on other demos see Wiki: [**Demos**](https://github.com/vladmandic/h `index.html`: Full demo using `Human` ESM module running in Browsers, Includes: + - Selectable inputs: - Sample images - Image via drag & drop diff --git a/demo/facedetect/facedetect.js b/demo/facedetect/facedetect.js index 432ea8de..7b80a17b 100644 --- a/demo/facedetect/facedetect.js +++ b/demo/facedetect/facedetect.js @@ -93,7 +93,7 @@ function addFace(face, source) { e.preventDefault(); document.getElementById('description').innerHTML = canvas.title; }; - human.tf.browser.toPixels(face.tensor, canvas); + human.tf.browser.draw(face.tensor, canvas); human.tf.dispose(face.tensor); return canvas; } diff --git a/demo/faceid/index.js b/demo/faceid/index.js index 37f2e0ac..a05fb4f5 100644 --- a/demo/faceid/index.js +++ b/demo/faceid/index.js @@ -5,5 +5,5 @@ */ 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 z(){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,z(),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.toPixels(c.face.tensor,t.canvas),await b()===0)return d("face database is empty: nothing to compare face with"),document.body.style.background="black",t.delete.style.display="none",!1;let a=await C(),n=a.map(w=>w.descriptor).filter(w=>w.length>0),o=s.match.find(c.face.embedding,n,B);return c.record=a[o.index]||null,c.record&&(d(`best match: ${c.record.name} | id: ${c.record.id} | similarity: ${Math.round(1e3*o.similarity)/10}%`),t.name.value=c.record.name,t.source.style.display="",(k=t.source.getContext("2d"))==null||k.putImageData(c.record.image,0,0)),document.body.style.background=o.similarity>r.threshold?"darkgreen":"maroon",o.similarity>r.threshold}async function M(){var a,n,o,i;return e.faceCount.status=!1,e.faceConfidence.status=!1,e.facingCenter.status=!1,e.blinkDetected.status=!1,e.faceSize.status=!1,e.antispoofCheck.status=!1,e.livenessCheck.status=!1,e.age.status=!1,e.gender.status=!1,e.elapsedMs.val=0,t.match.style.display="none",t.retry.style.display="none",t.source.style.display="none",t.canvas.style.height="50%",document.body.style.background="black",await H(),await T(),I=s.now(),c.face=await R(),t.canvas.width=((n=(a=c.face)==null?void 0:a.tensor)==null?void 0:n.shape[1])||r.minSize,t.canvas.height=((i=(o=c.face)==null?void 0:o.tensor)==null?void 0:i.shape[0])||r.minSize,t.source.width=t.canvas.width,t.source.height=t.canvas.height,t.canvas.style.width="",t.match.style.display="flex",t.save.style.display="flex",t.delete.style.display="flex",t.retry.style.display="block",E()?$():(d("did not find valid face"),!1)}async function q(){var a,n;d("human version:",s.version,"| tfjs version:",s.tf.version["tfjs-core"]),d("options:",JSON.stringify(r).replace(/{|}|"|\[|\]/g,"").replace(/,/g," ")),d("initializing webcam..."),await H(),d("loading human models..."),await s.load(),d("initializing human..."),d("face embedding model:",g.face.description.enabled?"faceres":"",(a=g.face.mobilefacenet)!=null&&a.enabled?"mobilefacenet":"",(n=g.face.insightface)!=null&&n.enabled?"insightface":""),d("loading face database..."),d("known face records:",await b()),t.retry.addEventListener("click",M),t.save.addEventListener("click",F),t.delete.addEventListener("click",j),await s.warmup(),await M()}window.onload=q; +`,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; //# sourceMappingURL=index.js.map diff --git a/demo/faceid/index.js.map b/demo/faceid/index.js.map index 28a18c93..cb1d7b8c 100644 --- a/demo/faceid/index.js.map +++ b/demo/faceid/index.js.map @@ -1,7 +1,7 @@ { "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.toPixels(current.face.tensor, dom.canvas);\n if (await indexDb.count() === 0) {\n log('face database is empty: nothing to compare face with');\n document.body.style.background = 'black';\n dom.delete.style.display = 'none';\n return false;\n }\n const db = await indexDb.load();\n const descriptors = db.map((rec) => rec.descriptor).filter((desc) => desc.length > 0);\n const res = human.match.find(current.face.embedding, descriptors, matchOptions);\n current.record = db[res.index] || null;\n if (current.record) {\n log(`best match: ${current.record.name} | id: ${current.record.id} | similarity: ${Math.round(1000 * res.similarity) / 10}%`);\n dom.name.value = current.record.name;\n dom.source.style.display = '';\n dom.source.getContext('2d')?.putImageData(current.record.image, 0, 0);\n }\n document.body.style.background = res.similarity > options.threshold ? 'darkgreen' : 'maroon';\n return res.similarity > options.threshold;\n}\n\nasync function main() { // main entry point\n ok.faceCount.status = false;\n ok.faceConfidence.status = false;\n ok.facingCenter.status = false;\n ok.blinkDetected.status = false;\n ok.faceSize.status = false;\n ok.antispoofCheck.status = false;\n ok.livenessCheck.status = false;\n ok.age.status = false;\n ok.gender.status = false;\n ok.elapsedMs.val = 0;\n dom.match.style.display = 'none';\n dom.retry.style.display = 'none';\n dom.source.style.display = 'none';\n dom.canvas.style.height = '50%';\n document.body.style.background = 'black';\n await webCam();\n await detectionLoop(); // start detection loop\n startTime = human.now();\n current.face = await validationLoop(); // start validation loop\n dom.canvas.width = current.face?.tensor?.shape[1] || options.minSize;\n dom.canvas.height = current.face?.tensor?.shape[0] || options.minSize;\n dom.source.width = dom.canvas.width;\n dom.source.height = dom.canvas.height;\n dom.canvas.style.width = '';\n dom.match.style.display = 'flex';\n dom.save.style.display = 'flex';\n dom.delete.style.display = 'flex';\n dom.retry.style.display = 'block';\n if (!allOk()) { // is all criteria met?\n log('did not find valid face');\n return false;\n }\n return detectFace();\n}\n\nasync function init() {\n log('human version:', human.version, '| tfjs version:', human.tf.version['tfjs-core']);\n log('options:', JSON.stringify(options).replace(/{|}|\"|\\[|\\]/g, '').replace(/,/g, ' '));\n log('initializing webcam...');\n await webCam(); // start webcam\n log('loading human models...');\n await human.load(); // preload all models\n log('initializing human...');\n log('face embedding model:', humanConfig.face.description.enabled ? 'faceres' : '', humanConfig.face['mobilefacenet']?.enabled ? 'mobilefacenet' : '', humanConfig.face['insightface']?.enabled ? 'insightface' : '');\n log('loading face database...');\n log('known face records:', await indexDb.count());\n dom.retry.addEventListener('click', main);\n dom.save.addEventListener('click', saveRecords);\n dom.delete.addEventListener('click', deleteRecord);\n await human.warmup(); // warmup function to initialize backend for future faster detection\n await main();\n}\n\nwindow.onload = init;\n", "let db: IDBDatabase; // instance of indexdb\n\nconst database = 'human';\nconst table = 'person';\n\nexport interface FaceRecord { id: number, name: string, descriptor: number[], image: ImageData }\n\nconst log = (...msg) => console.log('indexdb', ...msg); // eslint-disable-line no-console\n\nexport async function open() {\n if (db) return true;\n return new Promise((resolve) => {\n const request: IDBOpenDBRequest = indexedDB.open(database, 1);\n request.onerror = (evt) => log('error:', evt);\n request.onupgradeneeded = (evt: IDBVersionChangeEvent) => { // create if doesnt exist\n log('create:', evt.target);\n db = (evt.target as IDBOpenDBRequest).result;\n db.createObjectStore(table, { keyPath: 'id', autoIncrement: true });\n };\n request.onsuccess = (evt) => { // open\n db = (evt.target as IDBOpenDBRequest).result;\n log('open:', db);\n resolve(true);\n };\n });\n}\n\nexport async function load(): Promise {\n const faceDB: FaceRecord[] = [];\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const cursor: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).openCursor(null, 'next');\n cursor.onerror = (evt) => log('load error:', evt);\n cursor.onsuccess = (evt) => {\n if ((evt.target as IDBRequest).result) {\n faceDB.push((evt.target as IDBRequest).result.value);\n (evt.target as IDBRequest).result.continue();\n } else {\n resolve(faceDB);\n }\n };\n });\n}\n\nexport async function count(): Promise {\n if (!db) await open(); // open or create if not already done\n return new Promise((resolve) => {\n const store: IDBRequest = db.transaction([table], 'readwrite').objectStore(table).count();\n store.onerror = (evt) => log('count error:', evt);\n store.onsuccess = () => resolve(store.result);\n });\n}\n\nexport async function save(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n const newRecord = { name: faceRecord.name, descriptor: faceRecord.descriptor, image: faceRecord.image }; // omit id as its autoincrement\n db.transaction([table], 'readwrite').objectStore(table).put(newRecord);\n log('save:', newRecord);\n}\n\nexport async function remove(faceRecord: FaceRecord) {\n if (!db) await open(); // open or create if not already done\n db.transaction([table], 'readwrite').objectStore(table).delete(faceRecord.id); // delete based on id\n log('delete:', faceRecord);\n}\n"], - "mappings": "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", + "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"] } diff --git a/demo/faceid/index.ts b/demo/faceid/index.ts index d460ecf2..77b3efd0 100644 --- a/demo/faceid/index.ts +++ b/demo/faceid/index.ts @@ -240,7 +240,7 @@ async function detectFace() { if (!current?.face?.tensor || !current?.face?.embedding) return false; console.log('face record:', current.face); // eslint-disable-line no-console 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`); - await human.tf.browser.toPixels(current.face.tensor, dom.canvas); + await human.tf.browser.draw(current.face.tensor, dom.canvas); if (await indexDb.count() === 0) { log('face database is empty: nothing to compare face with'); document.body.style.background = 'black'; diff --git a/demo/facematch/facematch.js b/demo/facematch/facematch.js index 4d340ff0..5a444aa8 100644 --- a/demo/facematch/facematch.js +++ b/demo/facematch/facematch.js @@ -70,7 +70,7 @@ async function selectFaceCanvas(face) { if (face.tensor) { title('Sorting Faces by Similarity'); const c = document.getElementById('orig'); - await human.tf.browser.toPixels(face.tensor, c); + await human.tf.browser.draw(face.tensor, c); const arr = db.map((rec) => rec.embedding); const res = await human.match.find(face.embedding, arr); log('Match:', db[res.index].name); @@ -97,7 +97,7 @@ async function selectFaceCanvas(face) { canvas.tag.similarity = similarity; // get best match // draw the canvas - await human.tf.browser.toPixels(current.tensor, canvas); + await human.tf.browser.draw(current.tensor, canvas); const ctx = canvas.getContext('2d'); ctx.font = 'small-caps 1rem "Lato"'; ctx.fillStyle = 'rgba(0, 0, 0, 1)'; @@ -144,7 +144,7 @@ async function addFaceCanvas(index, res, fileName) { gender: ${Math.round(100 * res.face[i].genderScore)}% ${res.face[i].gender} emotion: ${emotion} `.replace(/ /g, ' '); - await human.tf.browser.toPixels(res.face[i].tensor, canvas); + await human.tf.browser.draw(res.face[i].tensor, canvas); const ctx = canvas.getContext('2d'); if (!ctx) return; ctx.font = 'small-caps 0.8rem "Lato"'; diff --git a/demo/index.js b/demo/index.js index 934d159b..b25436f0 100644 --- a/demo/index.js +++ b/demo/index.js @@ -223,7 +223,7 @@ async function calcSimmilarity(result) { log('setting face compare baseline:', result.face[0]); if (result.face[0].tensor) { const c = document.getElementById('orig'); - human.tf.browser.toPixels(result.face[0].tensor, c); + human.tf.browser.draw(result.face[0].tensor, c); } else { document.getElementById('compare-canvas').getContext('2d').drawImage(compare.original.canvas, 0, 0, 200, 200); } diff --git a/demo/segmentation/index.js b/demo/segmentation/index.js index 1040e70e..aa4912a9 100644 --- a/demo/segmentation/index.js +++ b/demo/segmentation/index.js @@ -85,7 +85,7 @@ async function main() { return; } dom.fps.innerText = `fps: ${Math.round(10000 / (t1 - t0)) / 10}`; // mark performance - human.tf.browser.toPixels(rgba, dom.output); // draw raw output + human.tf.browser.draw(rgba, dom.output); // draw raw output human.tf.dispose(rgba); // dispose tensors ctxMerge.globalCompositeOperation = 'source-over'; ctxMerge.drawImage(dom.background, 0, 0); // draw original video to first stacked canvas diff --git a/demo/tracker/index.js.map b/demo/tracker/index.js.map index f154bcd2..d23e1158 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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", + "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"] } diff --git a/demo/typescript/index.js.map b/demo/typescript/index.js.map index 66c7c38d..0d0679e0 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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", + "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"] } diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index dc3875dd..60cc769b 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -4,7 +4,7 @@ author: ' */ -var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Object.getOwnPropertyNames;var _n=Object.prototype.hasOwnProperty;var $n=(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})},Z5=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Qn(t))!_n.call(e,s)&&s!==n&&at(e,s,{get:()=>t[s],enumerable:!(o=Jn(t,s))||o.enumerable});return e},E=(e,t,n)=>(Z5(e,t,"default"),n&&Z5(n,t,"default"));var z=(e,t,n)=>($n(e,typeof t!="symbol"?t+"":t,n),n),X5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var E0=(e,t,n)=>(X5(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)=>(X5(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var r={};oe(r,{version:()=>Je});E(r,RA);E(r,MA);E(r,PA);E(r,kA);E(r,wA);E(r,EA);import*as RA from"@tensorflow/tfjs-core/dist/index.js";import*as MA from"@tensorflow/tfjs-converter/dist/index.js";import*as PA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as kA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as wA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as EA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var q5="4.11.0",eo="4.11.0",to="4.11.0",no="4.11.0",oo="4.11.0",ro="4.11.0",Je={tfjs:q5,"tfjs-core":q5,"tfjs-converter":eo,"tfjs-backend-cpu":to,"tfjs-backend-webgl":no,"tfjs-backend-wasm":oo,"tfjs-backend-webgpu":ro};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 U5(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 it(e,t,n="config",o=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")it(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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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 Y5=` +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,r)=>{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:!(r=Qn(t,s))||r.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,r)=>(q5(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);var o={};oe(o,{node:()=>it,version:()=>Je});w(o,MA);w(o,PA);w(o,kA);w(o,wA);w(o,EA);w(o,zA);import*as MA from"@tensorflow/tfjs-core/dist/index.js";import*as PA from"@tensorflow/tfjs-converter/dist/index.js";import*as kA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as wA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as EA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as zA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var U5="4.14.0",to="4.14.0",no="4.14.0",oo="4.14.0",ro="4.14.0",so="4.14.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",r=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")lt(e[s],t[s],s,r);else{let A=e&&typeof e[s]!="undefined";A||r.push({reason:"unknown property",where:`${n}.${s} = ${t[s]}`});let a=e&&typeof e[s]==typeof t[s];A&&!a&&r.push({reason:"property type mismatch",where:`${n}.${s} = ${t[s]}`,expected:typeof e[s]})}return t.debug&&n==="config"&&r.length>0&&b("invalid configuration",r),r}function Q(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,r)=>(Object.keys(r||{}).forEach(s=>{let A=n[s],a=r[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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -14,7 +14,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Objec vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var K5=` +`;var J5=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -26,7 +26,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=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]; } -`,J5=` +`,Q5=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -38,7 +38,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Objec gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,Q5=` +`,_5=` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -51,7 +51,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Objec vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,_5=` +`,$5=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -74,7 +74,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=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; } -`,$5=` +`,e1=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -96,12 +96,12 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Objec c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var lt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(s,A)=>(n[A]=0,s))},ct=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),lt(n,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);lt(n,"uniform",this.uniform),lt(o,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function e1(){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 m(T,u){if(!(T===c.width&&u===c.height)){if(c.width=T,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(T,u){let g=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,g);let w=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,w);let k=l.createTexture();return l.bindTexture(l.TEXTURE_2D,k),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,T,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(T){return s[T]=s[T]||x(c.width,c.height),s[T]}function f(T=0){if(!i)return;let u=null,g=null,w=!1;e===0?u=t:u=p(o).texture||null,e++,n&&!(T&y.INTERMEDIATE)?(g=null,w=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,w?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function h(T){if(d[T])return i=d[T],l.useProgram((i?i.id:null)||null),i;if(i=new ct(l,Y5,T),!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[T]=i,i}let v={colorMatrix:T=>{let u=new Float32Array(T);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?J5:K5,w=h(g);w&&(l.uniform1fv(w.uniform.m,u),f())},brightness:T=>{let u=(T||0)+1;v.colorMatrix([u,0,0,0,0,0,u,0,0,0,0,0,u,0,0,0,0,0,1,0])},saturation:T=>{let u=(T||0)*2/3+1,g=(u-1)*-.5;v.colorMatrix([u,g,g,0,0,g,u,g,0,0,g,g,u,0,0,0,0,0,1,0])},desaturate:()=>{v.saturation(-1)},contrast:T=>{let u=(T||0)+1,g=-128*(u-1);v.colorMatrix([u,0,0,0,g,0,u,0,0,g,0,0,u,0,g,0,0,0,1,0])},negative:()=>{v.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let u=Math.cos(T),g=Math.sin(T),w=.213,k=.715,N=.072;v.colorMatrix([w+u*(1-w)+g*-w,k+u*-k+g*-k,N+u*-N+g*(1-N),0,0,w+u*-w+g*.143,k+u*(1-k)+g*.14,N+u*-N+g*-.283,0,0,w+u*-w+g*-(1-w),k+u*-k+g*k,N+u*(1-N)+g*N,0,0,0,0,0,1,0])},desaturateLuminance:()=>{v.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:()=>{v.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let u=new Float32Array(T),g=1/c.width,w=1/c.height,k=h($5);k&&(l.uniform1fv(k.uniform.m,u),l.uniform2f(k.uniform.px,g,w),f())},detectEdges:()=>{v.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{v.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{v.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let u=T||1;v.convolution.call(this,[0,-1*u,0,-1*u,1+4*u,-1*u,0,-1*u,0])},emboss:T=>{let u=T||1;v.convolution.call(this,[-2*u,-1*u,0,-1*u,1,1*u,0,1*u,2*u])},blur:T=>{let u=T/7/c.width,g=T/7/c.height,w=h(_5);w&&(l.uniform2f(w.uniform.px,0,g),f(y.INTERMEDIATE),l.uniform2f(w.uniform.px,u,0),f())},pixelate:T=>{let u=T/c.width,g=T/c.height,w=h(Q5);w&&(l.uniform2f(w.uniform.size,u,g),f())}};this.add=function(T){let u=Array.prototype.slice.call(arguments,1),g=v[T];A.push({func:g,args:u})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(T){m(T.width,T.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,T);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])],m=[r.mul(y[0],c),r.mul(y[1],c),r.mul(y[2],c)],x=r.stack([m[0],m[1],m[2]],2);d=r.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),r.dispose([...y,...l,...m,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 dt(){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 m,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 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=r.expandDims(e,0);else if(e.shape[2]===4){let h=r.slice3d(e,[0,0,0],[-1,-1,3]);f=r.expandDims(h,0),r.dispose(h)}}else e.shape.length===4&&(e.shape[3]===3?f=r.clone(e):e.shape[3]===4&&(f=r.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 h=r.cast(f,"float32");r.dispose(f),f=h}return{tensor:f,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)),(((m=t.filter)==null?void 0:m.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 e1: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 f=new Uint8Array(e.data.buffer);c=r.tensor(f,[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 v=y2(c0).getContext("2d").getImageData(0,0,A,a);d=v.data.length/A/a;let T=new Uint8Array(v.data.buffer);c=r.tensor(T,[A,a,d])}if(d===4){let f=r.slice3d(c,[0,0,0],[-1,-1,3]);r.dispose(c),c=f}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 f=r.max(l),h=await f.data();t.filter.brightness=h[0]>1?1-h[0]/255:1-h[0],r.dispose(f)}return{tensor:l,canvas:t.filter.return?c0:null}}async function t1(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 n1(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",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 xt={};oe(xt,{"affectnet-mobilenet":()=>To,age:()=>vo,"anti-spoofing":()=>er,antispoof:()=>io,blazeface:()=>lo,"blazeface-back":()=>Ro,"blazeface-front":()=>Mo,"blazepose-detector":()=>Po,"blazepose-full":()=>ko,"blazepose-heavy":()=>wo,"blazepose-lite":()=>Eo,centernet:()=>co,default:()=>yr,efficientpose:()=>zo,"efficientpose-i-lite":()=>tr,"efficientpose-ii-lite":()=>nr,"efficientpose-iv":()=>or,emotion:()=>xo,faceboxes:()=>So,facemesh:()=>yo,"facemesh-attention":()=>Io,"facemesh-attention-pinto":()=>jo,"facemesh-detection-full":()=>No,"facemesh-detection-short":()=>Lo,faceres:()=>fo,"faceres-deep":()=>Oo,gear:()=>Do,"gear-e1":()=>Co,"gear-e2":()=>Wo,gender:()=>Bo,"gender-ssrnet-imdb":()=>Fo,handdetect:()=>Ho,"handlandmark-full":()=>Go,"handlandmark-lite":()=>mo,"handlandmark-sparse":()=>Vo,handskeleton:()=>Zo,handtrack:()=>po,"insightface-efficientnet-b0":()=>rr,"insightface-ghostnet-strides1":()=>sr,"insightface-ghostnet-strides2":()=>Ar,"insightface-mobilenet-emore":()=>ar,"insightface-mobilenet-swish":()=>ir,iris:()=>uo,liveness:()=>ho,meet:()=>Xo,mobileface:()=>qo,mobilefacenet:()=>Uo,models:()=>bo,"movenet-lightning":()=>go,"movenet-multipose":()=>Yo,"movenet-thunder":()=>Ko,nanodet:()=>Jo,"nanodet-e":()=>lr,"nanodet-g":()=>cr,"nanodet-m":()=>dr,"nanodet-t":()=>xr,posenet:()=>Qo,rvm:()=>_o,selfie:()=>$o});var io=853098,lo=538928,co=4030290,xo=820516,yo=1477958,fo=6978814,mo=2023432,po=2964837,uo=2599092,ho=592976,bo=0,go=4650216,To=6920630,vo=161240,Ro=538928,Mo=402048,Po=5928856,ko=6339202,wo=27502466,Eo=2726402,zo=5651240,So=2013002,jo=2387598,Io=2382414,No=1026192,Lo=201268,Oo=13957620,Co=112438,Wo=112438,Do=1498916,Fo=161236,Bo=201808,Ho=3515612,Go=5431368,Vo=5286322,Zo=5502280,Xo=372228,qo=2183192,Uo=5171976,Yo=9448838,Ko=12477112,Jo=7574558,Qo=5032780,_o=3739355,$o=212886,er=853098,tr=2269064,nr=5651240,or=25643252,rr=13013224,sr=8093408,Ar=8049584,ar=6938536,ir=12168584,lr=12319156,cr=7574558,dr=1887474,xr=5294216,yr={antispoof:io,blazeface:lo,centernet:co,emotion:xo,facemesh:yo,faceres:fo,"handlandmark-lite":mo,handtrack:po,iris:uo,liveness:ho,models:bo,"movenet-lightning":go,"affectnet-mobilenet":To,age:vo,"blazeface-back":Ro,"blazeface-front":Mo,"blazepose-detector":Po,"blazepose-full":ko,"blazepose-heavy":wo,"blazepose-lite":Eo,efficientpose:zo,faceboxes:So,"facemesh-attention-pinto":jo,"facemesh-attention":Io,"facemesh-detection-full":No,"facemesh-detection-short":Lo,"faceres-deep":Oo,"gear-e1":Co,"gear-e2":Wo,gear:Do,"gender-ssrnet-imdb":Fo,gender:Bo,handdetect:Ho,"handlandmark-full":Go,"handlandmark-sparse":Vo,handskeleton:Zo,meet:Xo,mobileface:qo,mobilefacenet:Uo,"movenet-multipose":Yo,"movenet-thunder":Ko,nanodet:Jo,posenet:Qo,rvm:_o,selfie:$o,"anti-spoofing":er,"efficientpose-i-lite":tr,"efficientpose-ii-lite":nr,"efficientpose-iv":or,"insightface-efficientnet-b0":rr,"insightface-ghostnet-strides1":sr,"insightface-ghostnet-strides2":Ar,"insightface-mobilenet-emore":ar,"insightface-mobilenet-swish":ir,"nanodet-e":lr,"nanodet-g":cr,"nanodet-m":dr,"nanodet-t":xr};var T0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},p0={};async function fr(e,t){return T0.debug&&b("load model fetch:",e,t),fetch(e,t)}function o1(e){T0.cacheModels=e.cacheModels,T0.verbose=e.debug,T0.modelBasePath=e.modelBasePath}async function L(e){var d,y,l,m;let t=U5(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:xt[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)=>fr(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=((m=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:m.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 yt="3.1.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 ur(){let e=Y.gl;e&&(Y.extensions=e.getSupportedExtensions())}function r1(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}ur();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 s1(){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 gr(){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 Tr(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 gr()),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")&&(r1(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(),s1(),e.performance.initBackend=Math.trunc(R()-s),e.config.backend=r.getBackend(),await M.updateBackend(),Tr(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 Tt={};oe(Tt,{all:()=>_r,body:()=>g2,canvas:()=>Qr,face:()=>b2,gesture:()=>R2,hand:()=>T2,init:()=>gt,object:()=>v2,options:()=>n0,person:()=>Jr});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 ft(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 i1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){ft(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;ot2[e]),JA=Rr.map(e=>t2[e]),QA=Mr.map(e=>t2[e]);function re(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Pr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],kr=[[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]],wr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Er=[[474,475],[475,476],[476,477],[477,474]],zr=[[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]],Sr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],jr=[[469,470],[470,471],[471,472],[472,469]],Ir=[[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]],_A={lips:re(Pr),leftEye:re(kr),leftEyebrow:re(wr),leftIris:re(Er),rightEye:re(zr),rightEyebrow:re(Sr),rightIris:re(jr),faceOval:re(Ir)};var Nr=[[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]],Lr=[[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]],Or=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Cr=[[474,475],[475,476],[476,477],[477,474]],Wr=[[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]],Dr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Fr=[[469,470],[470,471],[471,472],[472,469]],Br=[[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 Hr={lips:se(Nr),leftEye:se(Lr),leftEyebrow:se(Or),leftIris:se(Cr),rightEye:se(Wr),rightEyebrow:se(Dr),rightIris:se(Fr),faceOval:se(Br)},Gr=Object.entries(Hr).map(([e,t])=>t.map(n=>[n,e])).flat(),$A=new Map(Gr),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 Vr(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 m=e.emotion.map(x=>`${Math.trunc(100*x.score)}% ${x.emotion}`);m.length>3&&(m.length=3),n=H(n,"[emotions]",m.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 Zr(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 Xr(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(` +`;var ct=(e,t,n)=>{let r=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(r,(s,A)=>(n[A]=0,s))},dt=class{constructor(t,n,r){z(this,"uniform",{});z(this,"attribute",{});z(this,"gl");z(this,"id");z(this,"compile",(t,n)=>{let r=this.gl.createShader(n);return r?(this.gl.shaderSource(r,t),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(b(`filter: gl compile failed: ${this.gl.getShaderInfoLog(r)||"unknown"}`),null)):(b("filter: could not create shader"),null)});this.gl=t;let s=this.compile(n,this.gl.VERTEX_SHADER),A=this.compile(r,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(r,"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,r=-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 m(T,u){if(!(T===c.width&&u===c.height)){if(c.width=T,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(T,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,T,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(T){return s[T]=s[T]||x(c.width,c.height),s[T]}function f(T=0){if(!i)return;let u=null,g=null,E=!1;e===0?u=t:u=p(r).texture||null,e++,n&&!(T&y.INTERMEDIATE)?(g=null,E=e%2===0):(r=(r+1)%2,g=p(r).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(T){if(d[T])return i=d[T],l.useProgram((i?i.id:null)||null),i;if(i=new dt(l,K5,T),!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[T]=i,i}let v={colorMatrix:T=>{let u=new Float32Array(T);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),f())},brightness:T=>{let u=(T||0)+1;v.colorMatrix([u,0,0,0,0,0,u,0,0,0,0,0,u,0,0,0,0,0,1,0])},saturation:T=>{let u=(T||0)*2/3+1,g=(u-1)*-.5;v.colorMatrix([u,g,g,0,0,g,u,g,0,0,g,g,u,0,0,0,0,0,1,0])},desaturate:()=>{v.saturation(-1)},contrast:T=>{let u=(T||0)+1,g=-128*(u-1);v.colorMatrix([u,0,0,0,g,0,u,0,0,g,0,0,u,0,g,0,0,0,1,0])},negative:()=>{v.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let u=Math.cos(T),g=Math.sin(T),E=.213,k=.715,N=.072;v.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:()=>{v.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:()=>{v.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.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:()=>{v.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let u=new Float32Array(T),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),f())},detectEdges:()=>{v.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{v.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{v.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let u=T||1;v.convolution.call(this,[0,-1*u,0,-1*u,1+4*u,-1*u,0,-1*u,0])},emboss:T=>{let u=T||1;v.convolution.call(this,[-2*u,-1*u,0,-1*u,1,1*u,0,1*u,2*u])},blur:T=>{let u=T/7/c.width,g=T/7/c.height,E=h($5);E&&(l.uniform2f(E.uniform.px,0,g),f(y.INTERMEDIATE),l.uniform2f(E.uniform.px,u,0),f())},pixelate:T=>{let u=T/c.width,g=T/c.height,E=h(_5);E&&(l.uniform2f(E.uniform.size,u,g),f())}};this.add=function(T){let u=Array.prototype.slice.call(arguments,1),g=v[T];A.push({func:g,args:u})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(T){m(T.width,T.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,T);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=[o.sub(n[0],r[0]),o.sub(n[1],r[1]),o.sub(n[2],r[2])],l=[o.sub(s[0],r[0]),o.sub(s[1],r[1]),o.sub(s[2],r[2])],m=[o.mul(y[0],c),o.mul(y[1],c),o.mul(y[2],c)],x=o.stack([m[0],m[1],m[2]],2);d=o.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),o.dispose([...y,...l,...m,x])}else d=o.expandDims(t,0);return o.dispose([...n,...r,...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 m,x,p;if(!e)return t.debug&&b("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof o.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 o.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=o.expandDims(e,0);else if(e.shape[2]===4){let h=o.slice3d(e,[0,0,0],[-1,-1,3]);f=o.expandDims(h,0),o.dispose(h)}}else e.shape.length===4&&(e.shape[3]===3?f=o.clone(e):e.shape[3]===4&&(f=o.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 h=o.cast(f,"float32");o.dispose(f),f=h}return{tensor:f,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 r=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(!r||!s)return t.debug&&b("cannot determine input dimensions"),{tensor:null,canvas:l0};let A=r,a=s;if(A>x2&&(A=x2,a=Math.trunc(A*s/r)),a>x2&&(a=x2,A=Math.trunc(a*r/s)),(((m=t.filter)==null?void 0:m.width)||0)>0?A=t.filter.width:(((x=t.filter)==null?void 0:x.height)||0)>0&&(A=r*((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)/r)),!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(r,0),i.scale(-1,1),i.drawImage(e,0,0,r,s,0,0,l0.width,l0.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,r,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&&o.browser)c=o.browser?o.browser.fromPixels(e):null;else{d=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);c=o.tensor(f,[e.height,e.width,d],"int32")}else if((!We||c0.width!==We.width||c0.height!==We.height)&&(We=D0(c0.width,c0.height)),o.browser&&M.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?c=o.browser.fromPixels(c0):(We=y2(c0),c=o.browser.fromPixels(We));else{let v=y2(c0).getContext("2d").getImageData(0,0,A,a);d=v.data.length/A/a;let T=new Uint8Array(v.data.buffer);c=o.tensor(T,[A,a,d])}if(d===4){let f=o.slice3d(c,[0,0,0],[-1,-1,3]);o.dispose(c),c=f}if(!c)throw new Error("input error: cannot create tensor");let y=o.cast(c,"float32"),l=t.filter.equalization?await d2(y):o.expandDims(y,0);if(o.dispose([c,y]),t.filter.autoBrightness){let f=o.max(l),h=await f.data();t.filter.brightness=h[0]>1?1-h[0]/255:1-h[0],o.dispose(f)}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=o.clone(t);else if(L0.inputTensor.shape[1]!==t.shape[1]||L0.inputTensor.shape[2]!==t.shape[2])o.dispose(L0.inputTensor),L0.inputTensor=o.clone(t);else{let r={};r.diff=o.sub(t,L0.inputTensor),r.squared=o.mul(r.diff,r.diff),r.sum=o.sum(r.squared);let A=(await r.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;o.dispose([L0.inputTensor,r.diff,r.squared,r.sum]),L0.inputTensor=o.clone(t),n=A<=(e.cacheSensitivity||0)}return n}async function o1(e,t,n){let r={};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;r.input1=o.clone(t),r.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?o.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):o.clone(n),r.diff=o.sub(r.input1,r.input2),r.squared=o.mul(r.diff,r.diff),r.sum=o.sum(r.squared);let A=(await r.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return o.dispose([r.input1,r.input2,r.diff,r.squared,r.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 r=n[0].match(/\(([^()]+)\)/g);this.platform=r!=null&&r[0]?r[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(o.engine().registryFactory);try{this.tensorflow={version:o.backend().binding?o.backend().binding.TF_Version:void 0,gpu:o.backend().binding?o.backend().binding.isUsingGpuDevice():void 0}}catch(r){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await o.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await o.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 r=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(r==null?void 0:r.requestAdapterInfo())}}catch(r){this.webgpu.supported=!1}try{this.kernels=o.getKernelsForBackend(o.getBackend()).map(r=>r.kernelName.toLowerCase())}catch(r){}}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,m;let t=Y5(T0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),r=n[n.length-1].replace(".json",""),s="indexeddb://"+r;p0[r]={name:r,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:yt[r],inCache:!1,url:""},T0.cacheSupported=typeof indexedDB!="undefined";let A={};try{A=T0.cacheSupported&&T0.cacheModels?await o.io.listModels():{}}catch(x){T0.cacheSupported=!1}p0[r].inCache=T0.cacheSupported&&T0.cacheModels&&Object.keys(A).includes(s),p0[r].url=p0[r].inCache?s:t;let a=typeof fetch=="undefined"?{}:{fetchFunc:(x,p)=>mr(x,p)},i=new o.GraphModel(p0[r].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[r].sizeFromManifest=((y=x==null?void 0:x.weightData)==null?void 0:y.byteLength)||0,x?i.loadSync(x):i=await o.loadGraphModel(p0[r].inCache?s:t,a),p0[r].sizeLoadedWeights=((m=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:m.byteLength)||0,T0.verbose&&b("load:",{model:r,url:i.modelUrl,bytes:p0[r].sizeLoadedWeights}),c=!0}catch(x){b("error loading model:",t,x)}if(c&&T0.cacheModels&&T0.cacheSupported&&!p0[r].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.0";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 o.engine().registry&&!((t=Y==null?void 0:Y.gl)!=null&&t.getParameter(Y.gl.VERSION))&&(b("humangl error: backend invalid context"),e.models.reset()),!o.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{o.setWebGLContext(2,Y.gl)}catch(s){b("humangl error: cannot set webgl context:",s);return}try{let s=new o.GPGPUContext(Y.gl);o.registerBackend(Y.name,()=>new o.MathBackendWebGL(s),Y.priority)}catch(s){b("humangl error: cannot register webgl backend:",s);return}try{o.getKernelsForBackend("webgl").forEach(A=>{let a={...A,backendName:Y.name};o.registerKernel(a)})}catch(s){b("humangl error: cannot update webgl backend registration:",s);return}try{o.env().flagRegistry.WEBGL_VERSION&&o.env().set("WEBGL_VERSION",2)}catch(s){b("humangl error: cannot set WebGL backend flags:",s);return}hr();let n=o.backend(),r=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;r?e.config.debug&&b("humangl backend registered:",{webgl:r.getParameter(r.VERSION),renderer:r.getParameter(r.RENDERER)}):b("humangl error: no current gl context:",r,Y.gl)}}var O={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function A1(){O.tf255=o.scalar(255,"float32"),O.tf1=o.scalar(1,"float32"),O.tf2=o.scalar(2,"float32"),O.tf05=o.scalar(.5,"float32"),O.tf127=o.scalar(127.5,"float32"),O.rgb=o.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:o.getBackend(),kernelFunc:r=>o.tidy(()=>o.sub(r.inputs.a,o.mul(o.div(r.inputs.a,r.inputs.b),r.inputs.b)))};o.registerKernel(n),M.kernels.push("mod"),t.push("mod")}if(!M.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:o.getBackend(),kernelFunc:r=>o.tidy(()=>o.add(o.mul(o.floorDiv(r.inputs.a,r.inputs.b),r.inputs.b),o.mod(r.inputs.a,r.inputs.b)))};o.registerKernel(n),M.kernels.push("floormod"),t.push("floormod")}if(!M.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:o.getBackend(),kernelFunc:r=>o.tidy(()=>{let s=o.getBackend();o.setBackend("cpu");let A=o.image.rotateWithOffset(r.inputs.image,r.attrs.radians,r.attrs.fillValue,r.attrs.center);return o.setBackend(s),A})};o.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,r;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&&o.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"&&((r=navigator==null?void 0:navigator.userAgent)!=null&&r.toLowerCase().includes("electron"))&&e.config.debug&&b("running inside electron");let A=Object.keys(o.engine().registryFactory);if(e.config.backend==="humangl"&&!A.includes("humangl")&&(s1(e),A=Object.keys(o.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(o.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&o.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&b("wasm path:",e.config.wasmPath),typeof o.setWasmPaths!="undefined")o.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 o.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await o.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 o.setBackend(e.config.backend),await o.ready()}catch(a){return b("error: cannot set backend:",e.config.backend,a),!1}e.config.debug&&(a1=JSON.parse(JSON.stringify(o.env().flags)))}if((o.getBackend()==="humangl"||o.getBackend()==="webgl")&&(o.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&o.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),o.env().flagRegistry.WEBGL_EXP_CONV&&o.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),o.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),o.getBackend(),e.config.debug){let A=o.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:",o.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))o.env().set(A,a)}o.enableProdMode(),A1(),e.performance.initBackend=Math.trunc(R()-s),e.config.backend=o.getBackend(),await M.updateBackend(),vr(e.config)}return!0}function h2(e,t){for(let n of e){let r={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}};o.registerKernel(r)}M.kernels=o.getKernelsForBackend(o.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,r,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+r;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,r,s){e.fillStyle=Te(r,s),e.beginPath(),e.arc(t,n,s.pointSize,0,2*Math.PI),e.fill()}function Y0(e,t,n,r,s,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let a=(t+t+r)/2,i=(n+n+s)/2;e.ellipse(a,i,r/2,s/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,n),e.lineTo(t+r-A.roundRect,n),e.quadraticCurveTo(t+r,n,t+r,n+A.roundRect),e.lineTo(t+r,n+s-A.roundRect),e.quadraticCurveTo(t+r,n+s,t+r-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 r of t)e.strokeStyle=Te(r[2]||0,n),e.lineTo(Math.trunc(r[0]),Math.trunc(r[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 r=0;rt2[e]),QA=Mr.map(e=>t2[e]),_A=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]],$A={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(),ea=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 r,s,A,a,i,c,d,y,l;if(!B.drawLabels||((r=B.faceLabels)==null?void 0:r.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 m=e.emotion.map(x=>`${Math.trunc(100*x.score)}% ${x.emotion}`);m.length>3&&(m.length=3),n=H(n,"[emotions]",m.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,r,s,A;if((n=e.annotations)!=null&&n.leftEyeIris&&((r=e.annotations)!=null&&r.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 r=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]} C - ${o} ${e.box[1]}, - ${o} ${e.box[1]+e.box[3]}, + ${r} ${e.box[1]}, + ${r} ${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} @@ -109,7 +109,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=Objec ${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 qr(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]];mt(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]];mt(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[s[0],s[1]],4)}}function Ur(e,t){if(B.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let n=0;ne.mesh[s]);ft(t,o,B)}Zr(e,t)}}function Yr(e,t){if(B.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let n=0;n0&&(Yr(s,o),Ur(s,o),Xr(s,o),qr(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)i1(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 + `);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 r=[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]],[r[0],r[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,r,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,r),Yr(s,r),qr(s,r),Ur(s,r))}}function g2(e,t,n){var A,a;let r=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round";for(let i=0;i0)){let c=r.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],r)}if(r.drawPoints&&t[i].keypoints)for(let c=0;c0&&t[i].keypoints){s.font=r.font;for(let c of t[i].keypoints){if(!c.score||c.score===0)continue;let d=r.bodyPartLabels.slice();d=H(d,"[label]",c.part),d=H(d,"[score]",100*c.score),C0(s,d,c.position[0],c.position[1],r)}}if(r.drawPolygons&&t[i].keypoints&&t[i].annotations)for(let c of Object.values(t[i].annotations))for(let d of c)l1(s,d,r)}}}function T2(e,t,n){var A,a;let r=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=r.font;for(let i of t){if(r.drawBoxes){if(s.strokeStyle=r.color,s.fillStyle=r.color,Y0(s,i.box[0],i.box[1],i.box[2],i.box[3],r),r.drawLabels&&((A=r.handLabels)==null?void 0:A.length)>0){let c=r.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],r)}s.stroke()}if(r.drawPoints&&i.keypoints&&i.keypoints.length>0)for(let c of i.keypoints)s.fillStyle=Te(c[2],r),U0(s,c[0],c[1],0,r);if(r.drawLabels&&i.annotations&&((a=r.fingerLabels)==null?void 0:a.length)>0)for(let[c,d]of Object.entries(i.annotations)){let y=r.fingerLabels.slice();y=H(y,"[label]",c),C0(s,y,d[d.length-1][0],d[d.length-1][1],r)}if(r.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=r.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 r=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=r.font;for(let a of t)if(r.drawBoxes){if(s.strokeStyle=r.color,s.fillStyle=r.color,Y0(s,a.box[0],a.box[1],a.box[2],a.box[3],r),r.drawLabels&&((A=r.objectLabels)==null?void 0:A.length)>0){let i=r.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],r)}s.stroke()}}}function R2(e,t,n){var s;let r=Q(n0,n);if(!(!t||!e)&&r.drawGestures&&((s=r.gestureLabels)==null?void 0:s.length)>0){let A=O0(e);if(!A)return;A.font=r.font,A.fillStyle=r.color;let a=1;for(let i=0;i1&&d[1].length>0){let y=c[1]>0?`#${c[1]}`:"",l=r.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*r.lineHeight,r),a+=1}}}}var Ae={face:`face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -118,7 +118,7 @@ var at=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Qn=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 bt=0;function Jr(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;ARt,kpt:()=>vt});var vt=["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"],Rt={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,d1,$r=5,P2=[8,16,32,32,32];function es(){let e=[],t=0;for(;t<$r;){let n=0,o=t;for(;on.x)),y:r.tensor1d(e.map(n=>n.y))}}async function x1(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 es(),W0}var c1=[5,5];function ts(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),c1[0]),a=r.mul(r.div(a,ke),c1[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 ns(e,t,n,o){var d,y;let s=[],A={};A.boxes=ts(e,d1),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 m=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])],f={score:m,boxRaw:x,box:p};s.push(f)}return Object.keys(A).forEach(l=>r.dispose(A[l])),s}async function y1(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 ns(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 f1(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,Pt=256,Mt=Number.MAX_SAFE_INTEGER,os={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},E2=[],ie=[[0,0],[0,0],[0,0],[0,0]],m1=0,p1=e=>1-1/(1+Math.exp(e)),h1=e=>x1(e);async function b1(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;Pt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return P0}function u1(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 rs(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 ss(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,os.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]]),m={};for(let[p,f]of Object.entries(Rt)){let h=[];for(let v=0;vg.part===f[v]),u=d.find(g=>g.part===f[v+1]);T&&u&&h.push([T.position,u.position])}m[p]=h}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:d,annotations:m}}async function kt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>R()-m1,s=Mt<(t.body.skipFrames||0);if(t.skipAllowed&&o&&s&&E2!==null)Mt++;else{let c=[];if((a=(A=t.body)==null?void 0:A.detector)!=null&&a.enabled){let d=u1(e,224);c=await y1(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 zt(e,t){if(!(k0!=null&&k0.executor))return[];let n=(t.object.skipTime||0)>R()-T1,o=Et<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&wt.length>0?(Et++,wt):(Et=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;T1=R(),r.dispose(a);let c=await as(i,A,t);wt=c,s(c)}))}var z2={};oe(z2,{connected:()=>jt,kpt:()=>St});var St=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],jt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var _,M1=0,v0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},It=Number.MAX_SAFE_INTEGER;async function P1(e){return M.initial&&(_=null),_?e.debug&&b("cached model:",_.modelUrl):_=await L(e.body.modelPath),_}async function is(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 Nt(e,t){if(!(_!=null&&_.executor)||!(_!=null&&_.inputs[0].shape))return[];let n=(t.body.skipTime||0)>R()-M1,o=It<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(v0.keypoints).length>0?(It++,[v0]):(It=0,new Promise(async s=>{let A=r.tidy(()=>{var p,f;let l=r.image.resizeBilinear(e,[((p=_==null?void 0:_.inputs[0].shape)==null?void 0:p[2])||0,((f=_==null?void 0:_.inputs[0].shape)==null?void 0:f[1])||0],!1),m=r.mul(l,O.tf2);return r.sub(m,O.tf1)}),a;if(t.body.enabled&&(a=_==null?void 0:_.execute(A)),M1=R(),r.dispose(A),a){v0.keypoints.length=0;let l=r.squeeze(a);r.dispose(a);let m=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:St[x],positionRaw:[p/_.inputs[0].shape[2],f/_.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/_.inputs[0].shape[2]),Math.round(e.shape[1]*f/_.inputs[0].shape[1])]})}m.forEach(x=>r.dispose(x))}v0.score=v0.keypoints.reduce((l,m)=>m.score>l?m.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,m]of Object.entries(jt)){let x=[];for(let p=0;pv.part===m[p]),h=v0.keypoints.find(v=>v.part===m[p+1]);f&&h&&f.score>(t.body.minConfidence||0)&&h.score>(t.body.minConfidence||0)&&x.push([f.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],z1=(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}},Lt=(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])]}},S1=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}},Ot=[[1,0,0],[0,1,0],[0,0,1]],ls=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),cs=(e,t)=>ls(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var w1=(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=w1(t[0],t[1]),a=E1(A,s),i=w1(-t[0],-t[1]);return E1(a,i)},xs=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]]},ys=(e,t)=>[Ee(e,t[0]),Ee(e,t[1])];function I1(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?j1(n,[0,0]):Ot,d=i?a.map(x=>[...ys(x,c),x[2]]):a,y=i?xs(o):Ot,l=S2(t),m=[Ee(l,y[0]),Ee(l,y[1])];return d.map(x=>[Math.trunc(x[0]+m[0]),Math.trunc(x[1]+m[1]),Math.trunc(x[2]||0)])}function L1(e,t,n,o){let s=t.landmarks.length>=pt.count?pt.symmetryLine:ve.symmetryLine,A=0,a=Ot,i;if(e&&M.kernels.includes("rotatewithoffset"))if(A=cs(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=j1(-A,d),i=Lt(t,l,[o,o]),r.dispose(l)}else i=Lt(t,n,[o,o]);else i=Lt(t,n,[o,o]);return[A,a,i]}var fs=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]},O1=(e,t)=>{let n=fs(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 C1=6,ms=1.4,G0,O2=null,le=0,Be=null,W1=()=>le;async function D1(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(I1(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 F1(e,t){var i,c,d,y,l,m;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.tf05);let o=G0==null?void 0:G0.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let x=o.sort((p,f)=>p.size-f.size);n.concat384=r.concat([x[0],x[2]],2),n.concat512=r.concat([x[1],x[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 x=0;x(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let f={};f.bbox=r.slice(n.boxes,[s[x],0],[1,-1]),f.slice=r.slice(n.batch,[s[x],C1-1],[1,-1]),f.squeeze=r.squeeze(f.slice),f.landmarks=r.reshape(f.squeeze,[C1,-1]);let h=await f.bbox.data(),v={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await f.landmarks.array(),confidence:p};f.anchor=r.slice(O2,[s[x],0],[1,2]);let T=await f.anchor.data(),u=z1(v,[(e.shape[2]||0)/le,(e.shape[1]||0)/le],T),g=N2(u,t.face.scale||ms),w=L2(g);w.size[0]>(((l=t.face.detector)==null?void 0:l.minSize)||0)&&w.size[1]>(((m=t.face.detector)==null?void 0:m.minSize)||0)&&A.push(w),Object.keys(f).forEach(k=>r.dispose(f[k]))}}return Object.keys(n).forEach(x=>r.dispose(n[x])),A}var z0,ce=0,us=2.3,Wt=F0.leftEyeLower0,Dt=F0.rightEyeLower0,He={leftBounds:[Wt[0],Wt[Wt.length-1]],rightBounds:[Dt[0],Dt[Dt.length-1]]},Ge={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function Z1(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},H1=(e,t,n,o,s,A=!1)=>{let a=L2(N2(S1([e[n],e[o]]),us)),i=Fe(a),c=r.image.cropAndResize(t,[[a.startPoint[1]/s,a.startPoint[0]/s,a.endPoint[1]/s,a.endPoint[0]/s]],[0],[ce,ce]);if(A&&M.kernels.includes("flipleftright")){let d=r.image.flipLeftRight(c);r.dispose(c),c=d}return{box:a,boxSize:i,crop:c}},G1=(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 X1(e,t,n){if(!(z0!=null&&z0.executor))return e;let{box:o,boxSize:s,crop:A}=H1(e,t,He.leftBounds[0],He.leftBounds[1],n,!0),{box:a,boxSize:i,crop:c}=H1(e,t,He.rightBounds[0],He.rightBounds[1],n,!0),d=r.concat([A,c]);r.dispose(A),r.dispose(c);let y=z0.execute(d);r.dispose(d);let l=await y.data();r.dispose(y);let m=l.slice(0,Ge.numCoordinates*3),{rawCoords:x,iris:p}=G1(m,o,s,!0),f=l.slice(Ge.numCoordinates*3),{rawCoords:h,iris:v}=G1(f,a,i,!1),T=hs(e);Math.abs(T)<30?(C2(e,x,"left",null),C2(e,h,"right",null)):T<1?C2(e,x,"left",["EyeUpper0","EyeLower0"]):C2(e,h,"right",["EyeUpper0","EyeLower0"]);let u=V1(e,p,"left"),g=V1(e,v,"right");return e.concat(u).concat(g)}async function U1(e,t){var A,a,i,c,d,y,l,m,x,p;let n={lips:await((a=(A=t.filter(f=>f.size===160))==null?void 0:A[0])==null?void 0:a.data()),irisL:await((c=(i=t.filter(f=>f.size===10))==null?void 0:i[0])==null?void 0:c.data()),eyeL:await((y=(d=t.filter(f=>f.size===142))==null?void 0:d[0])==null?void 0:y.data()),irisR:await((m=(l=t.filter(f=>f.size===10))==null?void 0:l[1])==null?void 0:m.data()),eyeR:await((p=(x=t.filter(f=>f.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let f of Object.values(n))if(!f)return e;let o=Me.reduce((f,h)=>f+=e[h][2],0)/Me.length;for(let f=0;ff+=e[h][2],0)/Pe.length;for(let f=0;fR()-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 F1(e,t),K0.timestamp=R(),K0.skipped=0):K0.skipped++;let s=[],A=[],a=0,i=o2;for(let T=0;T[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),(f=t.face.attention)!=null&&f.enabled?J=await U1(J,N):(h=t.face.iris)!=null&&h.enabled&&(J=await X1(J,k.tensor,o2)),k.mesh=N1(J,u,g,w,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={...O1(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>(((v=t.face.detector)==null?void 0:v.minConfidence)||1)?s.push(k):r.dispose(k.tensor)}return K0.boxes=A,s}async function K1(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 J1=Re,Q1=t2;var Ht=[],d0,W2=[],_1=0,$1=0,Bt=Number.MAX_SAFE_INTEGER,Gt=!1;async function e3(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),Gt=((o=(n=d0==null?void 0:d0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,Gt?Ht=["angry","disgust","fear","happy","neutral","sad","surprise"]:Ht=["angry","disgust","fear","happy","sad","surprise","neutral"]),d0}async function Vt(e,t,n,o){var a,i;if(!d0)return[];let s=Bt<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),A=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>R()-$1;return t.skipAllowed&&A&&s&&_1===o&&W2[n]&&W2[n].length>0?(Bt++,W2[n]):(Bt=0,new Promise(async c=>{var y,l,m;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=(m=t.face.emotion)==null?void 0:m.crop,v=[[h,h,1-h,1-h]];x.resize=r.image.cropAndResize(e,v,[0],[p,p])}else x.resize=r.image.resizeBilinear(e,[p,p],!1);Gt?(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)),$1=R();let f=await x.emotion.data();for(let h=0;h(t.face.emotion.minConfidence||0)&&d.push({score:Math.min(.99,Math.trunc(100*f[h])/100),emotion:Ht[h]});d.sort((h,v)=>v.score-h.score),Object.keys(x).forEach(h=>r.dispose(x[h]))}W2[n]=d,_1=o,c(d)}))}var x0,de=[],n3=0,o3=0,Zt=Number.MAX_SAFE_INTEGER;async function r3(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 gs(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 Xt(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=Zt<(((i=t.face.description)==null?void 0:i.skipFrames)||0),a=(((c=t.face.description)==null?void 0:c.skipTime)||0)>R()-n3;return t.skipAllowed&&A&&a&&o3===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?(Zt++,de[n]):(Zt=0,new Promise(async l=>{var m;if((m=t.face.description)!=null&&m.enabled){let x=gs(e,t),p=x0==null?void 0:x0.execute(x);n3=R(),r.dispose(x);let h=await p.find(W=>W.shape[1]===1).data(),v=Math.trunc(200*Math.abs(h[0]-.5))/100;v>(t.face.description.minConfidence||0)&&(s.gender=h[0]<=.5?"female":"male",s.genderScore=Math.min(.99,v));let T=r.argMax(p.find(W=>W.shape[1]===100),1),u=(await T.data())[0];r.dispose(T);let w=await p.find(W=>W.shape[1]===100).data();s.age=Math.round(w[u-1]>w[u+1]?10*u-100*w[u-1]:10*u+100*w[u+1])/10,(Number.isNaN(h[0])||Number.isNaN(w[0]))&&b("faceres error:",{model:x0,result:p});let k=p.find(W=>W.shape[1]===1024),N=k?await k.data():[];s.descriptor=Array.from(N),p.forEach(W=>r.dispose(W))}de[n]=s,o3=o,l(s)}))}var Ve=.1,qt=.5;function Ts(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()-i3,A=Ut<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&a3===o&&D2[n]?(Ut++,D2[n]):(Ut=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,a3=o,i3=R(),r.dispose([d,y]),c(D2[n])}))}var f0,F2=[],Kt=Number.MAX_SAFE_INTEGER,d3=0,x3=0;async function y3(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 Jt(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()-x3,A=Kt<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&d3===o&&F2[n]?(Kt++,F2[n]):(Kt=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,d3=o,x3=R(),r.dispose([d,y]),c(F2[n])}))}var B0,Qt=[],Rs=["white","black","asian","indian","other"],Ms=[15,23,28,35.5,45.5,55.5,65],m3=0,p3=0,_t=Number.MAX_SAFE_INTEGER;async function u3(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 $t(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()-p3;return t.skipAllowed&&A&&s&&m3===o&&Qt[n]?(_t++,Qt[n]):(_t=0,new Promise(async c=>{var v,T,u,g;if(!(B0!=null&&B0.inputs[0].shape))return;let d={},y=[[0,.1,.9,.9]];if(((v=t.face.gear)==null?void 0:v.crop)>0){let w=(T=t.face.gear)==null?void 0:T.crop;y=[[w,w,1-w,1-w]]}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 m=await d.gender.data();l.gender=m[0]>m[1]?"male":"female",l.genderScore=Math.round(100*(m[0]>m[1]?m[0]:m[1]))/100;let x=await d.race.data();for(let w=0;w(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[w])/100,race:Rs[w]});l.race.sort((w,k)=>k.score-w.score);let f=Array.from(await d.age.data()).map((w,k)=>[Ms[k],w]).sort((w,k)=>k[1]-w[1]),h=f[0][0];for(let w=1;wr.dispose(d[w])),Qt[n]=l,m3=o,p3=R(),c(l)}))}var R0,B2=[],b3=0,g3=0,e5=Number.MAX_SAFE_INTEGER;async function T3(e){return M.initial&&(R0=null),R0?e.debug&&b("cached model:",R0.modelUrl):R0=await L(e.face.ssrnet.modelPathAge),R0}async function t5(e,t,n,o){var a,i,c,d;if(!R0)return{age:0};let s=e5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-g3;return t.skipAllowed&&s&&A&&b3===o&&((c=B2[n])!=null&&c.age)&&((d=B2[n])==null?void 0:d.age)>0?(e5++,B2[n]):(e5=0,new Promise(async y=>{var x,p,f;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,v=[[h,h,1-h,1-h]];l.resize=r.image.cropAndResize(e,v,[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 m={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(l.age=R0.execute(l.enhance)),l.age){let h=await l.age.data();m.age=Math.trunc(10*h[0])/10}Object.keys(l).forEach(h=>r.dispose(l[h])),B2[n]=m,b3=o,g3=R(),y(m)}))}var u0,H2=[],R3=0,M3=0,n5=Number.MAX_SAFE_INTEGER,o5=[.2989,.587,.114];async function P3(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 r5(e,t,n,o){var a,i,c,d;if(!u0)return{gender:"unknown",genderScore:0};let s=n5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-M3;return t.skipAllowed&&s&&A&&R3===o&&((c=H2[n])!=null&&c.gender)&&((d=H2[n])==null?void 0:d.genderScore)>0?(n5++,H2[n]):(n5=0,new Promise(async y=>{var p,f,h;if(!(u0!=null&&u0.inputs[0].shape))return;let l={};if(((p=t.face.ssrnet)==null?void 0:p.crop)>0){let v=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[v,v,1-v,1-v]];l.resize=r.image.cropAndResize(e,T,[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 T,u;let v;if(((u=(T=u0==null?void 0:u0.inputs)==null?void 0:T[0].shape)==null?void 0:u[3])===1){let[g,w,k]=r.split(l.resize,3,3),N=r.mul(g,o5[0]),W=r.mul(w,o5[1]),V=r.mul(k,o5[2]),D=r.addN([N,W,V]);v=r.mul(r.sub(D,O.tf05),2)}else v=r.mul(r.sub(l.resize,O.tf05),2);return v});let m={gender:"unknown",genderScore:0};(h=t.face.ssrnet)!=null&&h.enabled&&(l.gender=u0.execute(l.enhance));let x=await l.gender.data();m.gender=x[0]>x[1]?"female":"male",m.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(v=>r.dispose(l[v])),H2[n]=m,R3=o,M3=R(),y(m)}))}var S0,s5=[],w3=0,E3=0,z3=Number.MAX_SAFE_INTEGER;async function S3(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=z3<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>R()-E3;return t.skipAllowed&&A&&s&&w3===o&&s5[n]?(z3++,s5[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 m=await l.data.data();d=Array.from(m),Object.keys(l).forEach(x=>r.dispose(l[x]))}s5[n]=d,w3=o,E3=R(),c(d)})}var j0,a5=[],I3=0,N3=0,L3=Number.MAX_SAFE_INTEGER;async function O3(e){return M.initial&&(j0=null),j0?e.debug&&b("cached model:",j0.modelUrl):j0=await L(e.face.insightface.modelPath),j0}async function i5(e,t,n,o){var a,i;if(!(j0!=null&&j0.executor))return[];let s=L3<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),A=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>R()-N3;return t.skipAllowed&&A&&s&&I3===o&&a5[n]?(L3++,a5[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 m=await l.data.data();d=Array.from(m),Object.keys(l).forEach(x=>r.dispose(l[x]))}a5[n]=d,I3=o,N3=R(),c(d)})}var Ps=e=>{let t=(l,m)=>Math.atan2(l[1]-m[1],l[0]-m[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}},W3=(e,t)=>{let n=f=>{let h=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=h,f[1]/=h,f[2]/=h,f},o=(f,h)=>{let v=f[0]-h[0],T=f[1]-h[1],u=f[2]-h[2];return[v,T,u]},s=(f,h)=>{let v=f[1]*h[2]-f[2]*h[1],T=f[2]*h[0]-f[0]*h[2],u=f[0]*h[1]-f[1]*h[0];return[v,T,u]},A=f=>{let[h,v,T,u,g,w,k,N,W]=f,V,D,Z;return u<1?u>-1?(Z=Math.asin(u),D=Math.atan2(-k,h),V=Math.atan2(-w,g)):(Z=-Math.PI/2,D=-Math.atan2(N,W),V=0):(Z=Math.PI/2,D=Math.atan2(N,W),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(f=>[f[0]*t[0]/i,f[1]*t[1]/i,f[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 m=[y[0],y[1],y[2],d[0],d[1],d[2],l[0],l[1],l[2]],x=A(m),p=a.length===478?Ps(e):{bearing:0,strength:0};return{angle:x,matrix:m,gaze:p}};function D3(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 l5=async(e,t)=>{var p,f,h,v,T,u,g,w,k,N,W,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;let n=R(),o,s,A,a,i,c,d,y,l,m=[];e.state="run:face";let x=await Y1(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?W3(x[S],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?a=(f=e.config.face.emotion)!=null&&f.enabled?Vt(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 Vt(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=(v=e.config.face.antispoof)!=null&&v.enabled?Yt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:antispoof",n=R(),d=(T=e.config.face.antispoof)!=null&&T.enabled?await Yt(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?Jt(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 Jt(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=(w=e.config.face.gear)!=null&&w.enabled?$t(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 $t(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?t5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(W=e.config.face.ssrnet)!=null&&W.enabled?r5(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 t5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(D=e.config.face.ssrnet)!=null&&D.enabled?await r5(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?i5(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 i5(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=Xt(x[S].tensor||r.tensor([]),e.config,S,x.length):(e.state="run:description",n=R(),l=await Xt(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?D3(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),C&&(t0.rotation=C),w0&&(t0.tensor=w0),m.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),m};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:ws,full:X0}=ye,{verticalUp:Ze,verticalDown:oi,horizontalLeft:c5,horizontalRight:Es,diagonalUpRight:zs,diagonalUpLeft:Xe,diagonalDownRight:ri,diagonalDownLeft:si}=$,fe=new xe("thumbs up");fe.curl(V0,Z0,1);fe.direction(V0,Ze,1);fe.direction(V0,Xe,.25);fe.direction(V0,zs,.25);for(let e of[M0.index,M0.middle,M0.ring,M0.pinky])fe.curl(e,X0,1),fe.direction(e,c5,1),fe.direction(e,Es,1);var s0=new xe("victory");s0.curl(V0,ws,.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,c5,.2);s0.curl(Se,X0,1);s0.direction(Se,Ze,.2);s0.direction(Se,Xe,1);s0.direction(Se,c5,.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 F3=[fe,s0,me,pe,qe];var Ss=.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 B3(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 G3(e,t){if(!e||!t)return[0,0];let n=B3(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=B3(e[1],e[2],t[1],t[2]);return[n,o]}function H3(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 js(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],m=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),f=(p*p+m*m-x*x)/(2*p*m);f>1?f=1:f<-1&&(f=-1);let h=Math.acos(f);h=57.2958*h%180;let v;return h>je.NO_CURL_START_LIMIT?v=ye.none:h>je.HALF_CURL_START_LIMIT?v=ye.half:v=ye.full,v}function V3(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 Z3(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 Is(e,t,n,o,s,A,a,i){let c,d=Z3(e,t,n,o),y=V3(s,A,a,i);return d===$.verticalUp?y===$.horizontalLeft?c=$.diagonalUpLeft:c=$.diagonalUpRight:y===$.horizontalLeft?c=$.diagonalDownLeft:c=$.diagonalDownRight,c}function Ns(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)),m=0,x=0,p=0,f=l/(y+1e-5);f>1.5?m+=je.DISTANCE_VOTE_POWER:f>.66?x+=je.DISTANCE_VOTE_POWER:p+=je.DISTANCE_VOTE_POWER;let h=Math.sqrt(s*s+i*i),v=Math.sqrt(A*A+c*c),T=Math.sqrt(a*a+d*d),u=Math.max(h,v,T),g=e[0],w=e[1],k=n[0],N=n[1];u===h?(k=n[0],N=n[1]):u===T&&(g=t[0],w=t[1]);let D=G3([g,w],[k,N]),Z=H3(D,je.TOTAL_ANGLE_VOTE_POWER);m+=Z[0],x+=Z[1],p+=Z[2];for(let q of o){let U=H3(q,je.SINGLE_ANGLE_VOTE_POWER);m+=U[0],x+=U[1],p+=U[2]}let J;return m===Math.max(m,x,p)?J=Z3(c,i,d,l):p===Math.max(x,p)?J=V3(A,s,a,y):J=Is(c,i,d,l,A,s,a,y),J}function X3(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]],m=G3(y,l),x=m[0],p=m[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=js(c,d,y),m=Ns(c,d,y,t[A].slice(a));o[A]=l,s[A]=m}return{curls:o,directions:s}}function G2(e){if(!e||e.length===0)return null;let t=X3(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 q3(e){let t=[];if(!e||e.length===0)return t;let n=X3(e);for(let o of F3){let s=o.matchAgainst(n.curls,n.directions);s>=Ss&&t.push({name:o.name,confidence:s})}return t}var U3=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},Y3=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},K3=e=>{var n,o,s,A;if(!e)return[];let t=[];for(let a=0;a.06||h>.06)&&(x=!1),f>h?h>.04&&t.push({iris:a,gesture:"looking right"}):f>.04&&t.push({iris:a,gesture:"looking left"});let v=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||v<.01||T>.022||v>.022)&&(x=!1),(T<.01||v<.01)&&t.push({iris:a,gesture:"looking down"}),(T>.022||v>.022)&&t.push({iris:a,gesture:"looking up"}),x&&t.push({iris:a,gesture:"looking center"})}return t},J3=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 Os(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function tn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Os(n)}var Q3=(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),m=y.slice(2,4),x=await d.palmLandmarks.array(),p={startPoint:l,endPoint:m,palmLandmarks:x,confidence:s[c]},f=en(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(f),Object.keys(d).forEach(h=>r.dispose(d[h]))}return Object.keys(o).forEach(c=>r.dispose(o[c])),a}};var Fs=5,sn=1.65,An=[0,5,9,13,17,1,2],Bs=0,Hs=2,an=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=>y5([...A,1],n)),s=this.calculateLandmarksBoundingBox(o);return Z2(X2(s),Fs)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Z2(X2(n),sn);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=x5(o,[0,0]),d=i.map(x=>[...y5(x,c),x[2]]),y=nn(s),l=[...r2(n),1],m=[ue(l,y[0]),ue(l,y[1])];return d.map(x=>[Math.trunc(x[0]+m[0]),Math.trunc(x[1]+m[1]),Math.trunc(x[2])])}async estimateHands(t,n){let o=!1,s,A=(n.hand.skipTime||0)>R()-an,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 w=r.reshape(u,[-1,3]),k=await w.array();r.dispose(u),r.dispose(w);let N=this.transformRawCoords(k,f,y,p),W=this.getBoxForHandLandmarks(N);this.storedBoxes[c]={...W,confidence:g};let V={landmarks:N,confidence:g,boxConfidence:d.confidence,fingerConfidence:g,box:{topLeft:W.startPoint,bottomRight:W.endPoint}};i.push(V)}else this.storedBoxes[c]=null;r.dispose(u)}else{let y=Z2(X2(d),sn),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 ln={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,f5;function Vs(){let e=Ie?new q2(Ie):void 0;e&&Ne&&(f5=new U2(e,Ne))}async function m5(e,t){f5||Vs();let n=await f5.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 cn(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 dn(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],Zs=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],he=[[0,0],[0,0]],Xs=["hand","fist","pinch","point","face","tip","pinchtip"],yn=4,fn=1.6,qs=512,Us=1.4,Y2=Number.MAX_SAFE_INTEGER,p5=0,ee=[0,0],o0={boxes:[],hands:[]},mn={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 pn(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 un(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 Ys(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,qs),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,Zs),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[yn]),i.splice(yn,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 m of Array.from(d)){let x=r.slice(o.boxes,m,1),p=await x.data();r.dispose(x);let f=[p[1],p[0],p[3]-p[1],p[2]-p[0]],h=k2(f,Us),v=[Math.trunc(f[0]*ee[0]),Math.trunc(f[1]*ee[1]),Math.trunc(f[2]*ee[0]),Math.trunc(f[3]*ee[1])],T=y[m],u=Xs[l[m]],g={id:c++,score:T,box:v,boxRaw:h,label:u};n.push(g)}return Object.keys(o).forEach(m=>r.dispose(o[m])),n.sort((m,x)=>x.score-m.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function u5(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(mn))o.annotations[l]=mn[l].map(m=>o.landmarks&&o.keypoints[m]?o.keypoints[m]:null)}Object.keys(s).forEach(c=>r.dispose(s[c]))}return o}async function h5(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()-p5,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()-p5,c=Y2<3*(t.hand.skipFrames||0);t.skipAllowed&&o0.hands.length===t.hand.maxDetected?o0.hands=await Promise.all(o0.boxes.map(y=>u5(e,y,t))):t.skipAllowed&&i&&c&&o0.hands.length>0?o0.hands=await Promise.all(o0.boxes.map(y=>u5(e,y,t))):(o0.boxes=await Ys(e,t),p5=R(),o0.hands=await Promise.all(o0.boxes.map(y=>u5(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 m=k2(l.box,fn),x=k2(l.boxRaw,fn);o0.boxes.push({...d[y],box:m,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:()=>b5,kpt:()=>K2,relative:()=>T5,vertical:()=>g5});var K2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],b5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],g5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],T5=[[["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(),v5=0;function bn(e,t){var a,i,c,d,y,l,m,x,p,f,h,v,T,u,g,w,k,N,W,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]+C)/s),g0=e.body[P].boxRaw.map((C,F)=>((s-1)*j.body[P].boxRaw[F]+C)/s),e0=e.body[P].keypoints.map((C,F)=>{var w0,t0,ne,Ke,Oe,B5,H5,G5,V5;return{score:C.score,part:C.part,position:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[0]||0)+(C.position[0]||0))/s:C.position[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[1]||0)+(C.position[1]||0))/s:C.position[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[2]||0)+(C.position[2]||0))/s:C.position[2]],positionRaw:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[0]||0)+(C.positionRaw[0]||0))/s:C.positionRaw[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[1]||0)+(C.positionRaw[1]||0))/s:C.positionRaw[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[2]||0)+(C.positionRaw[2]||0))/s:C.positionRaw[2]],distance:[j.body[P].keypoints[F]?((s-1)*(((w0=j.body[P].keypoints[F].distance)==null?void 0:w0[0])||0)+(((t0=C.distance)==null?void 0:t0[0])||0))/s:(ne=C.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=C.distance)==null?void 0:Oe[1])||0))/s:(B5=C.distance)==null?void 0:B5[1],j.body[P].keypoints[F]?((s-1)*(((H5=j.body[P].keypoints[F].distance)==null?void 0:H5[2])||0)+(((G5=C.distance)==null?void 0:G5[2])||0))/s:(V5=C.distance)==null?void 0:V5[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[C,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[C]=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[C]+S)/s),g0=e.hand[P].boxRaw.map((S,C)=>((s-1)*j.hand[P].boxRaw[C]+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,C)=>S.map((F,w0)=>((s-1)*(j.hand[P].keypoints[C][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((C,F)=>C.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=(m=e.face[P])==null?void 0:m.annotations)==null?void 0:x[G])!=null&&p[0]?e.face[P].annotations[G].map((S,C)=>S.map((F,w0)=>((s-1)*j.face[P].annotations[G][C][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=(f=e.face[P].rotation)==null?void 0:f.matrix,G.angle={roll:((s-1)*(((v=(h=j.face[P].rotation)==null?void 0:h.angle)==null?void 0:v.roll)||0)+(((u=(T=e.face[P].rotation)==null?void 0:T.angle)==null?void 0:u.roll)||0))/s,yaw:((s-1)*(((w=(g=j.face[P].rotation)==null?void 0:g.angle)==null?void 0:w.yaw)||0)+(((N=(k=e.face[P].rotation)==null?void 0:k.angle)==null?void 0:N.yaw)||0))/s,pitch:((s-1)*(((V=(W=j.face[P].rotation)==null?void 0:W.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 v5=M.perfadd?v5+Math.round(A-n):Math.round(A-n),e.performance&&(j.performance={...e.performance,interpolate:v5}),j}var h0;async function R5(e){return!h0||M.initial?h0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",h0.modelUrl),h0}async function gn(e,t){var s;if(h0||(h0=await R5(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 P5={};oe(P5,{distance:()=>M5,find:()=>Qs,similarity:()=>Js});function M5(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 Js(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=M5(e,t,n);return vn(o,n.order||2,n.min||0,n.max||1)}function Qs(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 Rn=.005,I0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function k5(e){for(let t of b5){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 Mn(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=r.pad(e,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 kn(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,w5=Number.MAX_SAFE_INTEGER,Le={boxes:[],bodies:[],last:0};async function wn(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 m=[];for(let x=0;xh.part===l[x]),f=s.find(h=>h.part===l[x+1]);p&&f&&p.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&m.push([p.position,f.position])}c[y]=m}let d={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return k5(d),a.push(d),a}function eA(e,t,n){let o=[];for(let s=0;st.body.minConfidence){let i=[];for(let m=0;m<17;m++){let x=A[3*m+2];if(x>t.body.minConfidence){let p=[A[3*m+1],A[3*m+0]];i.push({part:K2[m],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[51+1],A[51+0],A[51+3]-A[51+1],A[51+2]-A[51+0]],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[m,x]of Object.entries(J2)){let p=[];for(let f=0;fT.part===x[f]),v=i.find(T=>T.part===x[f+1]);h&&v&&h.score>(t.body.minConfidence||0)&&v.score>(t.body.minConfidence||0)&&p.push([h.position,v.position])}y[m]=p}let l={id:s,score:a,box:d,boxRaw:c,keypoints:[...i],annotations:y};k5(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 E5(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),w5++;let n=(t.body.skipTime||0)>R()-Le.last,o=w5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?Le.bodies:new Promise(async A=>{let a={};w5=0,a.input=Pn(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):eA(i,t,e);for(let c of Le.bodies)kn(c,[e.shape[2]||1,e.shape[1]||1]),Mn(c.keypoints);Object.keys(a).forEach(c=>r.dispose(a[c])),A(Le.bodies)})}var H0,_2=[],zn=0,z5=Number.MAX_SAFE_INTEGER,et=0,$2=2.5;async function Sn(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 tA(e,t,n){var d,y;let o=0,s=[],A=et;for(let l of[1,2,4]){let m=l*13,x=r.squeeze(e.find(u=>u.shape[1]===m**2&&(u.shape[2]||0)===De.length)),p=await x.array(),f=r.squeeze(e.find(u=>u.shape[1]===m**2&&(u.shape[2]||0)(n.object.minConfidence||0)&&g!==61){let k=(.5+Math.trunc(u%m))/m,N=(.5+Math.trunc(u/m))/m,W=T[u].map(P=>P*(m/l/A)),[V,D]=[k-$2/l*W[0],N-$2/l*W[1]],[Z,J]=[k+$2/l*W[2]-V,N+$2/l*W[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*w)/100,class:g+1,label:De[g].label,box:U.map(P=>Math.trunc(P)),boxRaw:q};s.push(m0)}}r.dispose([x,f,h,v])}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,m)=>c.includes(m)).sort((l,m)=>m.score-l.score),s}async function S5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>R()-zn,o=z5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&_2.length>0?(z5++,_2):(z5=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)),zn=R();let y=await tA(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"],nA=a2.length,A2=a2.reduce((e,t,n)=>(e[t]=n,e),{}),oA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Qi=oA.map(([e,t])=>[A2[e],A2[t]]),In=[["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 Nn(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 Ln(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:m,position:x})=>({score:l,part:m,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 On(e,t,n,o){let s=n-e,A=o-t;return s*s+A*A}function L5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,sA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],nt=1,Ue=16,AA=50**2;function Cn(e,t,n,o,s,A,a=2){let i=v=>({y:A.get(v.y,v.x,e),x:A.get(v.y,v.x,A.shape[2]/2+e)}),c=(v,T,u)=>({y:N5(Math.round(v.y/Ue),0,T-1),x:N5(Math.round(v.x/Ue),0,u-1)}),[d,y]=o.shape,l=c(t.position,d,y),m=i(l),p=L5(t.position,m);for(let v=0;v[A2[m],A2[x]]),a=A.map(([,m])=>m),i=A.map(([m])=>m),c=t.shape[2],d=a.length,y=new Array(c),l=I5(e.part,Ue,n);y[e.part.id]={score:e.score,part:a2[e.part.id],position:l};for(let m=d-1;m>=0;--m){let x=a[m],p=i[m];y[x]&&!y[p]&&(y[p]=Cn(m,y[x],p,t,n,s))}for(let m=0;mt){i=!1;break}if(!i)break}return i}function lA(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?On(n,t,A.y,A.x)<=AA:!1})}function cA(e,t){return t.reduce((o,{position:s,score:A},a)=>(Wn(e,s,a)||(o+=A),o),0)/t.length}function dA(e,t,n,o,s,A){let a=[],i=lA(A,t);for(;a.lengthx.score>A);let l=cA(a,y),m=Nn(y);l>A&&a.push({keypoints:y,box:m,score:Math.round(100*l)/100})}return a}async function O5(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,sA).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=dA(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?Ln(s,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function Dn(e){return!N0||M.initial?N0=await L(e.body.modelPath):e.debug&&b("cached model:",N0.modelUrl),N0}var J0,xA=["fgr","pha","r1o","r2o","r3o","r4o"],a0={},W5=0;function Hn(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),W5=e.segmentation.ratio||.5,a0.downsample_ratio=r.tensor(W5)}async function D5(e){return!J0||M.initial?J0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",J0.modelUrl),Hn(e),J0}var Bn=e=>r.tidy(()=>{let t=r.squeeze(e,[0]),n=r.mul(t,O.tf255);return r.cast(n,"int32")});function C5(e,t){let n=e?Bn(e):r.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?Bn(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 yA(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 Gn(e,t){if(J0||(J0=await D5(t)),!(J0!=null&&J0.executor))return null;a0.src=r.div(e,255),W5!==t.segmentation.ratio&&Hn(t);let[n,o,s,A,a,i]=await J0.executeAsync(a0,xA),c;switch(t.segmentation.mode||"default"){case"default":c=C5(n,o);break;case"alpha":c=C5(null,o);break;case"foreground":c=C5(n,null);break;case"state":c=yA(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 F5(e){return!b0||M.initial?b0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",b0.modelUrl),b0}async function Zn(e,t){var s;if(b0||(b0=await F5(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 m=l.op.toLowerCase();A.includes(m)||A.push(m)}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,m,x,p,f,h,v,T,u,g,w,k,N,W,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?D1(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?l3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((s=this.instance.config.face.liveness)!=null&&s.enabled)&&!this.models.liveness?y3(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((A=this.instance.config.face.description)!=null&&A.enabled)&&!this.models.faceres?r3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((a=this.instance.config.face.emotion)!=null&&a.enabled)&&!this.models.emotion?e3(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?Z1(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((d=this.instance.config.face.mesh)!=null&&d.enabled)&&!this.models.facemesh?K1(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((y=this.instance.config.face.gear)!=null&&y.enabled)&&!this.models.gear?u3(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((l=this.instance.config.face.ssrnet)!=null&&l.enabled)&&!this.models.ssrnetage?T3(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((m=this.instance.config.face.ssrnet)!=null&&m.enabled)&&!this.models.ssrnetgender?P3(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((x=this.instance.config.face.mobilefacenet)!=null&&x.enabled)&&!this.models.mobilefacenet?S3(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((p=this.instance.config.face.insightface)!=null&&p.enabled)&&!this.models.insightface?O3(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?b1(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?h1(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((h=this.instance.config.body.modelPath)!=null&&h.includes("efficientpose"))?P1(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((v=this.instance.config.body.modelPath)!=null&&v.includes("movenet"))?wn(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Dn(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"))?pn(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((k=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)!=null&&k.includes("handtrack"))?un(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((W=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&W.includes("handdetect"))&&(n.handdetect=cn(this.instance.config),n.handskeleton=dn(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((V=this.instance.config.object.modelPath)!=null&&V.includes("centernet"))?v1(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((D=this.instance.config.object.modelPath)!=null&&D.includes("nanodet"))?Sn(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((Z=this.instance.config.segmentation.modelPath)!=null&&Z.includes("selfie"))?F5(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((J=this.instance.config.segmentation.modelPath)!=null&&J.includes("meet"))?R5(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((q=this.instance.config.segmentation.modelPath)!=null&&q.includes("rvm"))?D5(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 Un(e,t,n,o,s){var i,c,d,y,l,m;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&&(f.push(g[0],g[0]+g[2]),h.push(g[1],g[1]+g[3]))};v(p.face.box),v((y=p.body)==null?void 0:y.box),v((l=p.hands.left)==null?void 0:l.box),v((m=p.hands.right)==null?void 0:m.box);let T=Math.min(...f),u=Math.min(...h);p.box=[T,u,Math.max(...f)-T,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]"};var gt=0;function Qr(e,t,n){let r=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=r.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:o.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 o.tidy(()=>{let n=o.split(e,12,1),r=o.squeeze(n[0]),s=o.squeeze(n[1]),A=o.squeeze(n[2]),a=o.squeeze(n[3]);r=o.add(o.div(r,ke),t.x),s=o.add(o.div(s,ke),t.y),A=o.mul(o.div(A,ke),d1[0]),a=o.mul(o.div(a,ke),d1[1]);let i=o.sub(r,o.div(A,2)),c=o.sub(s,o.div(a,2)),d=o.add(i,A),y=o.add(c,a);return o.stack([i,c,d,y],1)})}async function os(e,t,n,r){var d,y;let s=[],A={};A.boxes=ns(e,x1),A.scores=o.sigmoid(t),A.nms=await o.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 m=i[l],x=c[l],p=[Math.round(x[0]*r[0]),Math.round(x[1]*r[1]),Math.round(x[2]*r[0]),Math.round(x[3]*r[1])],f={score:m,boxRaw:x,box:p};s.push(f)}return Object.keys(A).forEach(l=>o.dispose(A[l])),s}async function f1(e,t,n){let r={};r.res=W0==null?void 0:W0.execute(e,["Identity"]),r.logitsRaw=o.slice(r.res,[0,0,0],[1,-1,1]),r.boxesRaw=o.slice(r.res,[0,0,1],[1,-1,-1]),r.logits=o.squeeze(r.logitsRaw),r.boxes=o.squeeze(r.boxesRaw);let s=await os(r.boxes,r.logits,t,n);return Object.keys(r).forEach(A=>o.dispose(r[A])),s}function ae(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],r=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[r[0],r[1],s[0]-r[0],s[1]-r[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])],r=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[(r[0]+s[0])/2,(r[1]+s[1])/2],a=Math.max(A[0]-r[0],A[1]-r[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 r={};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&&(r.cropped=o.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]],r.pad=o.pad(r.cropped||e,ie),r.resize=o.image.resizeBilinear(r.pad,[t,t]),s=o.div(r.resize,O.tf255)}else e.shape[1]!==t?(r.resize=o.image.resizeBilinear(r.cropped||e,[t,t]),s=o.div(r.resize,O.tf255)):s=o.div(r.cropped||e,O.tf255);return Object.keys(r).forEach(i=>o.dispose(r[i])),s}function ss(e,t,n){for(let r of e)r.position=[Math.trunc(r.position[0]*(t[0]+ie[2][0]+ie[2][1])/t[0]-ie[2][0]),Math.trunc(r.position[1]*(t[1]+ie[1][0]+ie[1][1])/t[1]-ie[1][0]),r.position[2]],r.positionRaw=[r.position[0]/t[0],r.position[1]/t[1],2*r.position[2]/(t[0]+t[1])];if(n){let r=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]/r+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"),r=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(r.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 r={};[r.ld,r.segmentation,r.heatmap,r.world,r.poseflag]=P0==null?void 0:P0.execute(e,rs.landmarks);let s=(await r.poseflag.data())[0],A=await r.ld.data(),a=await r.world.data();Object.keys(r).forEach(p=>o.dispose(r[p]));let i=[],c=5;for(let p=0;pp.position),l=ae(y,[n[0],n[1]]),m={};for(let[p,f]of Object.entries(Mt)){let h=[];for(let v=0;vg.part===f[v]),u=d.find(g=>g.part===f[v+1]);T&&u&&h.push([T.position,u.position])}m[p]=h}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:d,annotations:m}}async function wt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],r=(t.body.skipTime||0)>R()-p1,s=Pt<(t.body.skipFrames||0);if(t.skipAllowed&&r&&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),o.dispose(d)}else c=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let d=0;do.dispose(r[d])),s}async function St(e,t){if(!(k0!=null&&k0.executor))return[];let n=(t.object.skipTime||0)>R()-v1,r=zt<(t.object.skipFrames||0);return t.skipAllowed&&n&&r&&Et.length>0?(zt++,Et):(zt=0,new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=o.image.resizeBilinear(e,[we,we]),i=t.object.enabled?k0==null?void 0:k0.execute(a,["tower_0/detections"]):null;v1=R(),o.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,r]=e.shape,s=o.reshape(e,[r*n]),A=o.max(s,0),a=(await A.data())[0];if(a>t){let i=o.argMax(s,0),c=o.mod(i,n),d=(await c.data())[0],y=o.div(i,n),l=(await y.data())[0];return o.dispose([s,A,i,c,y]),[d,l,a]}return o.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,r=Nt<(t.body.skipFrames||0);return t.skipAllowed&&n&&r&&Object.keys(v0.keypoints).length>0?(Nt++,[v0]):(Nt=0,new Promise(async s=>{let A=o.tidy(()=>{var p,f;let l=o.image.resizeBilinear(e,[((p=_==null?void 0:_.inputs[0].shape)==null?void 0:p[2])||0,((f=_==null?void 0:_.inputs[0].shape)==null?void 0:f[1])||0],!1),m=o.mul(l,O.tf2);return o.sub(m,O.tf1)}),a;if(t.body.enabled&&(a=_==null?void 0:_.execute(A)),P1=R(),o.dispose(A),a){v0.keypoints.length=0;let l=o.squeeze(a);o.dispose(a);let m=o.unstack(l,2);o.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],f/_.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/_.inputs[0].shape[2]),Math.round(e.shape[1]*f/_.inputs[0].shape[1])]})}m.forEach(x=>o.dispose(x))}v0.score=v0.keypoints.reduce((l,m)=>m.score>l?m.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,m]of Object.entries(It)){let x=[];for(let p=0;pv.part===m[p]),h=v0.keypoints.find(v=>v.part===m[p+1]);f&&h&&f.score>(t.body.minConfidence||0)&&h.score>(t.body.minConfidence||0)&&x.push([f.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 r=[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:r,endPoint:s,landmarks:A,confidence:e.confidence}},Ot=(e,t,n)=>{let r=t.shape[1],s=t.shape[2],A=[e.startPoint[1]/r,e.startPoint[0]/s,e.endPoint[1]/r,e.endPoint[0]/s],a=o.image.cropAndResize(t,[A],[0],n),i=o.div(a,O.tf255);return o.dispose(a),i},N2=(e,t)=>{let n=S2(e),r=Fe(e),s=[t*r[0]/2,t*r[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:r}},L2=e=>{let t=S2(e),n=Fe(e),r=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-r),Math.round(t[1]-r)],endPoint:[Math.round(t[0]+r),Math.round(t[1]+r)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},j1=e=>{let t=e.map(r=>r[0]),n=e.map(r=>r[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 r=0;r{let n=[];for(let r=0;r{let n=[],r=e.length;for(let s=0;s{let n=Math.cos(e),r=Math.sin(e),s=[[n,-r,0],[r,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]],r=[-Ee(t[0],n),-Ee(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[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 r=0;r[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(r):Ct,l=S2(t),m=[Ee(l,y[0]),Ee(l,y[1])];return d.map(x=>[Math.trunc(x[0]+m[0]),Math.trunc(x[1]+m[1]),Math.trunc(x[2]||0)])}function O1(e,t,n,r){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=o.image.rotateWithOffset(n,A,0,[y[0],y[1]]);a=I1(-A,d),i=Ot(t,l,[r,r]),o.dispose(l)}else i=Ot(t,n,[r,r]);else i=Ot(t,n,[r,r]);return[A,a,i]}var ms=e=>{let t=e.map(r=>r[0]),n=e.map(r=>r[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),r=Fe(t);return{startPoint:[n[0]-r[0]/2,n[1]-r[1]/2],endPoint:[n[0]+r[0]/2,n[1]+r[1]/2]}};var W1=6,ps=1.4,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=o.scalar(le,"int32"),O2=o.tensor2d(N1(le)),G0}function us(e){if(!O2||!Be)return o.zeros([0,0]);let t={};t.boxStarts=o.slice(e,[0,1],[-1,2]),t.centers=o.add(t.boxStarts,O2),t.boxSizes=o.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=o.div(t.boxSizes,Be),t.centersNormalized=o.div(t.centers,Be),t.halfBoxSize=o.div(t.boxSizesNormalized,O.tf2),t.starts=o.sub(t.centersNormalized,t.halfBoxSize),t.ends=o.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=o.mul(t.starts,Be),t.endNormalized=o.mul(t.ends,Be);let n=o.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(r=>o.dispose(t[r])),n}async function B1(e,t){var i,c,d,y,l,m;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,[le,le]),n.div=o.div(n.resized,O.tf127),n.normalized=o.sub(n.div,O.tf05);let r=G0==null?void 0:G0.execute(n.normalized);if(Array.isArray(r)&&r.length>2){let x=r.sort((p,f)=>p.size-f.size);n.concat384=o.concat([x[0],x[2]],2),n.concat512=o.concat([x[1],x[3]],2),n.concat=o.concat([n.concat512,n.concat384],1),n.batch=o.squeeze(n.concat,[0])}else Array.isArray(r)?n.batch=o.squeeze(r[0]):n.batch=o.squeeze(r);o.dispose(r),n.boxes=us(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,((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 x=0;x(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let f={};f.bbox=o.slice(n.boxes,[s[x],0],[1,-1]),f.slice=o.slice(n.batch,[s[x],W1-1],[1,-1]),f.squeeze=o.squeeze(f.slice),f.landmarks=o.reshape(f.squeeze,[W1,-1]);let h=await f.bbox.data(),v={startPoint:[h[0],h[1]],endPoint:[h[2],h[3]],landmarks:await f.landmarks.array(),confidence:p};f.anchor=o.slice(O2,[s[x],0],[1,2]);let T=await f.anchor.data(),u=S1(v,[(e.shape[2]||0)/le,(e.shape[1]||0)/le],T),g=N2(u,t.face.scale||ps),E=L2(g);E.size[0]>(((l=t.face.detector)==null?void 0:l.minSize)||0)&&E.size[1]>(((m=t.face.detector)==null?void 0:m.minSize)||0)&&A.push(E),Object.keys(f).forEach(k=>o.dispose(f[k]))}}return Object.keys(n).forEach(x=>o.dispose(n[x])),A}var z0,ce=0,hs=2.3,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,r){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,r,s,A=!1)=>{let a=L2(N2(j1([e[n],e[r]]),hs)),i=Fe(a),c=o.image.cropAndResize(t,[[a.startPoint[1]/s,a.startPoint[0]/s,a.endPoint[1]/s,a.endPoint[0]/s]],[0],[ce,ce]);if(A&&M.kernels.includes("flipleftright")){let d=o.image.flipLeftRight(c);o.dispose(c),c=d}return{box:a,boxSize:i,crop:c}},V1=(e,t,n,r=!1)=>{let s=[];for(let A=0;A{let r=e[F0[`${n}EyeUpper0`][Ge.upperCenter]][2],s=e[F0[`${n}EyeLower0`][Ge.lowerCenter]][2],A=(r+s)/2;return t.map((a,i)=>{let c=A;return i===2?c=r:i===4&&(c=s),[a[0],a[1],c]})};async function q1(e,t,n){if(!(z0!=null&&z0.executor))return e;let{box:r,boxSize:s,crop:A}=G1(e,t,He.leftBounds[0],He.leftBounds[1],n,!0),{box:a,boxSize:i,crop:c}=G1(e,t,He.rightBounds[0],He.rightBounds[1],n,!0),d=o.concat([A,c]);o.dispose(A),o.dispose(c);let y=z0.execute(d);o.dispose(d);let l=await y.data();o.dispose(y);let m=l.slice(0,Ge.numCoordinates*3),{rawCoords:x,iris:p}=V1(m,r,s,!0),f=l.slice(Ge.numCoordinates*3),{rawCoords:h,iris:v}=V1(f,a,i,!1),T=bs(e);Math.abs(T)<30?(C2(e,x,"left",null),C2(e,h,"right",null)):T<1?C2(e,x,"left",["EyeUpper0","EyeLower0"]):C2(e,h,"right",["EyeUpper0","EyeLower0"]);let u=Z1(e,p,"left"),g=Z1(e,v,"right");return e.concat(u).concat(g)}async function Y1(e,t){var A,a,i,c,d,y,l,m,x,p;let n={lips:await((a=(A=t.filter(f=>f.size===160))==null?void 0:A[0])==null?void 0:a.data()),irisL:await((c=(i=t.filter(f=>f.size===10))==null?void 0:i[0])==null?void 0:c.data()),eyeL:await((y=(d=t.filter(f=>f.size===142))==null?void 0:d[0])==null?void 0:y.data()),irisR:await((m=(l=t.filter(f=>f.size===10))==null?void 0:l[1])==null?void 0:m.data()),eyeR:await((p=(x=t.filter(f=>f.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let f of Object.values(n))if(!f)return e;let r=Me.reduce((f,h)=>f+=e[h][2],0)/Me.length;for(let f=0;ff+=e[h][2],0)/Pe.length;for(let f=0;fR()-K0.timestamp,r=K0.skipped<(((d=t.face.detector)==null?void 0:d.skipFrames)||0);!t.skipAllowed||!n||!r||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 T=0;T[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,o.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=o.reshape(D,[-1,3]),J=await Z.array();o.dispose(Z),(f=t.face.attention)!=null&&f.enabled?J=await Y1(J,N):(h=t.face.iris)!=null&&h.enabled&&(J=await q1(J,k.tensor,o2)),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)}o.dispose(N)}k.score>(((v=t.face.detector)==null?void 0:v.minConfidence)||1)?s.push(k):o.dispose(k.tensor)}return K0.boxes=A,s}async function J1(e){var t,n,r,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):(r=e.face.attention)!=null&&r.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,r;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=((r=(n=d0==null?void 0:d0.inputs)==null?void 0:n[0].shape)==null?void 0:r[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,r){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===r&&W2[n]&&W2[n].length>0?(Ht++,W2[n]):(Ht=0,new Promise(async c=>{var y,l,m;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=(m=t.face.emotion)==null?void 0:m.crop,v=[[h,h,1-h,1-h]];x.resize=o.image.cropAndResize(e,v,[0],[p,p])}else x.resize=o.image.resizeBilinear(e,[p,p],!1);Vt?(x.mul=o.mul(x.resize,255),x.normalize=o.sub(x.mul,[103.939,116.779,123.68]),x.emotion=d0==null?void 0:d0.execute(x.normalize)):(x.channels=o.mul(x.resize,O.rgb),x.grayscale=o.sum(x.channels,3,!0),x.grayscaleSub=o.sub(x.grayscale,O.tf05),x.grayscaleMul=o.mul(x.grayscaleSub,O.tf2),x.emotion=d0==null?void 0:d0.execute(x.grayscaleMul)),e3=R();let f=await x.emotion.data();for(let h=0;h(t.face.emotion.minConfidence||0)&&d.push({score:Math.min(.99,Math.trunc(100*f[h])/100),emotion:Gt[h]});d.sort((h,v)=>v.score-h.score),Object.keys(x).forEach(h=>o.dispose(x[h]))}W2[n]=d,$1=r,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 Ts(e,t){var A,a;let n=e.image||e.tensor||e;if(!(x0!=null&&x0.inputs[0].shape))return n;let r;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]];r=o.image.cropAndResize(n,c,[0],[x0.inputs[0].shape[2],x0.inputs[0].shape[1]])}else r=o.image.resizeBilinear(n,[x0.inputs[0].shape[2],x0.inputs[0].shape[1]],!1);let s=o.mul(r,O.tf255);return o.dispose(r),s}async function qt(e,t,n,r){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===r&&((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 m;if((m=t.face.description)!=null&&m.enabled){let x=Ts(e,t),p=x0==null?void 0:x0.execute(x);o3=R(),o.dispose(x);let h=await p.find(W=>W.shape[1]===1).data(),v=Math.trunc(200*Math.abs(h[0]-.5))/100;v>(t.face.description.minConfidence||0)&&(s.gender=h[0]<=.5?"female":"male",s.genderScore=Math.min(.99,v));let T=o.argMax(p.find(W=>W.shape[1]===100),1),u=(await T.data())[0];o.dispose(T);let E=await p.find(W=>W.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(W=>W.shape[1]===1024),N=k?await k.data():[];s.descriptor=Array.from(N),p.forEach(W=>o.dispose(W))}de[n]=s,r3=r,l(s)}))}var Ve=.1,Ut=.5;function vs(e,t,n){let r=!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&&(r=!r);return r}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,r=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===r&&D2[n]?(Yt++,D2[n]):(Yt=0,new Promise(async c=>{let d=o.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=r,l3=R(),o.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,r){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===r&&F2[n]?(Jt++,F2[n]):(Jt=0,new Promise(async c=>{let d=o.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=r,y3=R(),o.dispose([d,y]),c(F2[n])}))}var B0,_t=[],Ms=["white","black","asian","indian","other"],Ps=[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,r){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===r&&_t[n]?($t++,_t[n]):($t=0,new Promise(async c=>{var v,T,u,g;if(!(B0!=null&&B0.inputs[0].shape))return;let d={},y=[[0,.1,.9,.9]];if(((v=t.face.gear)==null?void 0:v.crop)>0){let E=(T=t.face.gear)==null?void 0:T.crop;y=[[E,E,1-E,1-E]]}d.resize=o.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 m=await d.gender.data();l.gender=m[0]>m[1]?"male":"female",l.genderScore=Math.round(100*(m[0]>m[1]?m[0]:m[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:Ms[E]});l.race.sort((E,k)=>k.score-E.score);let f=Array.from(await d.age.data()).map((E,k)=>[Ps[k],E]).sort((E,k)=>k[1]-E[1]),h=f[0][0];for(let E=1;Eo.dispose(d[E])),_t[n]=l,p3=r,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,r){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===r&&((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,f;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,v=[[h,h,1-h,1-h]];l.resize=o.image.cropAndResize(e,v,[0],[R0.inputs[0].shape[2],R0.inputs[0].shape[1]])}else l.resize=o.image.resizeBilinear(e,[R0.inputs[0].shape[2],R0.inputs[0].shape[1]],!1);l.enhance=o.mul(l.resize,O.tf255);let m={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(l.age=R0.execute(l.enhance)),l.age){let h=await l.age.data();m.age=Math.trunc(10*h[0])/10}Object.keys(l).forEach(h=>o.dispose(l[h])),B2[n]=m,g3=r,T3=R(),y(m)}))}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,r){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===r&&((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,f,h;if(!(u0!=null&&u0.inputs[0].shape))return;let l={};if(((p=t.face.ssrnet)==null?void 0:p.crop)>0){let v=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[v,v,1-v,1-v]];l.resize=o.image.cropAndResize(e,T,[0],[u0.inputs[0].shape[2],u0.inputs[0].shape[1]])}else l.resize=o.image.resizeBilinear(e,[u0.inputs[0].shape[2],u0.inputs[0].shape[1]],!1);l.enhance=o.tidy(()=>{var T,u;let v;if(((u=(T=u0==null?void 0:u0.inputs)==null?void 0:T[0].shape)==null?void 0:u[3])===1){let[g,E,k]=o.split(l.resize,3,3),N=o.mul(g,r5[0]),W=o.mul(E,r5[1]),V=o.mul(k,r5[2]),D=o.addN([N,W,V]);v=o.mul(o.sub(D,O.tf05),2)}else v=o.mul(o.sub(l.resize,O.tf05),2);return v});let m={gender:"unknown",genderScore:0};(h=t.face.ssrnet)!=null&&h.enabled&&(l.gender=u0.execute(l.enhance));let x=await l.gender.data();m.gender=x[0]>x[1]?"female":"male",m.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(v=>o.dispose(l[v])),H2[n]=m,M3=r,P3=R(),y(m)}))}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,r){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===r&&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=o.image.resizeBilinear(e,[S0.inputs[0].shape[2],S0.inputs[0].shape[1]],!1),l.data=S0.execute(l.crop);let m=await l.data.data();d=Array.from(m),Object.keys(l).forEach(x=>o.dispose(l[x]))}A5[n]=d,E3=r,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,r){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===r&&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=o.image.resizeBilinear(e,[j0.inputs[0].shape[2],j0.inputs[0].shape[1]],!1),l.data=j0.execute(l.crop);let m=await l.data.data();d=Array.from(m),Object.keys(l).forEach(x=>o.dispose(l[x]))}i5[n]=d,N3=r,L3=R(),c(d)})}var ks=e=>{let t=(l,m)=>Math.atan2(l[1]-m[1],l[0]-m[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],r=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],r*(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=f=>{let h=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=h,f[1]/=h,f[2]/=h,f},r=(f,h)=>{let v=f[0]-h[0],T=f[1]-h[1],u=f[2]-h[2];return[v,T,u]},s=(f,h)=>{let v=f[1]*h[2]-f[2]*h[1],T=f[2]*h[0]-f[0]*h[2],u=f[0]*h[1]-f[1]*h[0];return[v,T,u]},A=f=>{let[h,v,T,u,g,E,k,N,W]=f,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,W),V=0):(Z=Math.PI/2,D=Math.atan2(N,W),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(f=>[f[0]*t[0]/i,f[1]*t[1]/i,f[2]]),d=n(r(c[1],c[0])),y=n(r(c[3],c[2])),l=n(s(y,d));y=s(d,l);let m=[y[0],y[1],y[2],d[0],d[1],d[2],l[0],l[1],l[2]],x=A(m),p=a.length===478?ks(e):{bearing:0,strength:0};return{angle:x,matrix:m,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 r=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/r)/100}var c5=async(e,t)=>{var p,f,h,v,T,u,g,E,k,N,W,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;let n=R(),r,s,A,a,i,c,d,y,l,m=[];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=(f=e.config.face.emotion)!=null&&f.enabled?Zt(x[S].tensor||o.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||o.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=(v=e.config.face.antispoof)!=null&&v.enabled?Kt(x[S].tensor||o.tensor([]),e.config,S,x.length):0:(e.state="run:antispoof",n=R(),d=(T=e.config.face.antispoof)!=null&&T.enabled?await Kt(x[S].tensor||o.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||o.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||o.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||o.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||o.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?(r=(N=e.config.face.ssrnet)!=null&&N.enabled?n5(x[S].tensor||o.tensor([]),e.config,S,x.length):null,A=(W=e.config.face.ssrnet)!=null&&W.enabled?s5(x[S].tensor||o.tensor([]),e.config,S,x.length):null):(e.state="run:ssrnet",n=R(),r=(V=e.config.face.ssrnet)!=null&&V.enabled?await n5(x[S].tensor||o.tensor([]),e.config,S,x.length):null,A=(D=e.config.face.ssrnet)!=null&&D.enabled?await s5(x[S].tensor||o.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||o.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||o.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||o.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||o.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||o.tensor([]),e.config,S,x.length):(e.state="run:description",n=R(),l=await qt(x[S].tensor||o.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&&([r,A,a,i,c,l,s,d,y]=await Promise.all([r,A,a,i,c,l,s,d,y])),e.analyze("Finish Face:"),(m0=e.config.face.ssrnet)!=null&&m0.enabled&&r&&A&&(l={...l,age:r.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?o.squeeze(x[S].tensor):null;o.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),C&&(t0.rotation=C),w0&&(t0.tensor=w0),m.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),m};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,r){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,r])}direction(t,n,r){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,r])}weight(t,n){this.weights[t]=n;let r=this.weights.reduce((s,A)=>s+A,0);this.weightsRelative=this.weights.map(s=>s*5/r)}matchAgainst(t,n){let r=0;for(let s in t){let A=t[s],a=this.curls[s];if(typeof a=="undefined"){r+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){r+=c*this.weightsRelative[s];break}}for(let s in n){let A=n[s],a=this.directions[s];if(typeof a=="undefined"){r+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){r+=c*this.weightsRelative[s];break}}return r/10}};var{thumb:V0,index:_0,middle:$0,ring:ze,pinky:Se}=M0,{none:Z0,half:Es,full:X0}=ye,{verticalUp:Ze,verticalDown:ri,horizontalLeft:d5,horizontalRight:zs,diagonalUpRight:Ss,diagonalUpLeft:Xe,diagonalDownRight:si,diagonalDownLeft:Ai}=$,fe=new xe("thumbs up");fe.curl(V0,Z0,1);fe.direction(V0,Ze,1);fe.direction(V0,Xe,.25);fe.direction(V0,Ss,.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,zs,1);var s0=new xe("victory");s0.curl(V0,Es,.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 js=.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,r){let s=(t-r)/(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 r=H3(e[1],e[2],t[1],t[2]);return[n,r]}function G3(e,t=1){let n=0,r=0,s=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?r=1*t:s=1*t,[n,r,s]}function Is(e,t,n){let r=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],m=Math.sqrt(r*r+a*a+d*d),x=Math.sqrt(s*s+i*i+y*y),p=Math.sqrt(A*A+c*c+l*l),f=(p*p+m*m-x*x)/(2*p*m);f>1?f=1:f<-1&&(f=-1);let h=Math.acos(f);h=57.2958*h%180;let v;return h>je.NO_CURL_START_LIMIT?v=ye.none:h>je.HALF_CURL_START_LIMIT?v=ye.half:v=ye.full,v}function Z3(e,t,n,r){let s;return r===Math.abs(e)?e>0?s=$.horizontalLeft:s=$.horizontalRight:r===Math.abs(t)?t>0?s=$.horizontalLeft:s=$.horizontalRight:n>0?s=$.horizontalLeft:s=$.horizontalRight,s}function X3(e,t,n,r){let s;return r===Math.abs(e)?e<0?s=$.verticalDown:s=$.verticalUp:r===Math.abs(t)?t<0?s=$.verticalDown:s=$.verticalUp:n<0?s=$.verticalDown:s=$.verticalUp,s}function Ns(e,t,n,r,s,A,a,i){let c,d=X3(e,t,n,r),y=Z3(s,A,a,i);return d===$.verticalUp?y===$.horizontalLeft?c=$.diagonalUpLeft:c=$.diagonalUpRight:y===$.horizontalLeft?c=$.diagonalDownLeft:c=$.diagonalDownRight,c}function Ls(e,t,n,r){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)),m=0,x=0,p=0,f=l/(y+1e-5);f>1.5?m+=je.DISTANCE_VOTE_POWER:f>.66?x+=je.DISTANCE_VOTE_POWER:p+=je.DISTANCE_VOTE_POWER;let h=Math.sqrt(s*s+i*i),v=Math.sqrt(A*A+c*c),T=Math.sqrt(a*a+d*d),u=Math.max(h,v,T),g=e[0],E=e[1],k=n[0],N=n[1];u===h?(k=n[0],N=n[1]):u===T&&(g=t[0],E=t[1]);let D=V3([g,E],[k,N]),Z=G3(D,je.TOTAL_ANGLE_VOTE_POWER);m+=Z[0],x+=Z[1],p+=Z[2];for(let q of r){let U=G3(q,je.SINGLE_ANGLE_VOTE_POWER);m+=U[0],x+=U[1],p+=U[2]}let J;return m===Math.max(m,x,p)?J=X3(c,i,d,l):p===Math.max(x,p)?J=Z3(A,s,a,y):J=Ns(c,i,d,l,A,s,a,y),J}function q3(e){let t=[],n=[],r=[],s=[];if(!e)return{curls:r,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]],m=V3(y,l),x=m[0],p=m[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=Is(c,d,y),m=Ls(c,d,y,t[A].slice(a));r[A]=l,s[A]=m}return{curls:r,directions:s}}function G2(e){if(!e||e.length===0)return null;let t=q3(e),n={};for(let r of M0.all)n[M0.getName(r)]={curl:ye.getName(t.curls[r]),direction:$.getName(t.directions[r])};return n}function U3(e){let t=[];if(!e||e.length===0)return t;let n=q3(e);for(let r of B3){let s=r.matchAgainst(n.curls,n.directions);s>=js&&t.push({name:r.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&&r&&s&&r.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 r=(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(r/s)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${r<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,r,s,A;if(!e)return[];let t=[];for(let a=0;a.06||h>.06)&&(x=!1),f>h?h>.04&&t.push({iris:a,gesture:"looking right"}):f>.04&&t.push({iris:a,gesture:"looking left"});let v=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||v<.01||T>.022||v>.022)&&(x=!1),(T<.01||v<.01)&&t.push({iris:a,gesture:"looking down"}),(T>.022||v>.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=r.reduce((a,i)=>(a.position[2]||0)<(i.position[2]||0)?a:i);t.push({hand:n,gesture:`${s.name} forward`});let A=r.reduce((a,i)=>a.position[1][A[0]*t[0],A[1]*t[1]]);return{startPoint:n,endPoint:r,palmLandmarks:s,confidence:e.confidence}}function Z2(e,t=1.5){let n=r2(e),r=V2(e),s=[t*r[0]/2,t*r[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 Cs(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 Cs(n)}var _3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ue(e,t){let n=0;for(let r=0;r[a.x,a.y]),this.anchorsTensor=o.tensor2d(this.anchors),this.inputSize=((A=(s=(r=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:r[0])==null?void 0:s.shape)==null?void 0:A[2])||0,this.inputSizeTensor=o.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=o.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=o.slice(t,[0,0],[-1,2]),n.boxSizes=o.slice(t,[0,2],[-1,2]),n.div=o.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=o.add(n.div,this.anchorsTensor),n.halfBoxSizes=o.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=o.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=o.mul(n.sub,this.inputSizeTensor),n.add=o.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=o.mul(n.add,this.inputSizeTensor);let r=o.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(s=>o.dispose(n[s])),r}normalizeLandmarks(t,n){let r={};r.reshape=o.reshape(t,[-1,7,2]),r.div=o.div(r.reshape,this.inputSizeTensor),r.landmarks=o.add(r.div,this.anchors[n]?this.anchors[n]:0);let s=o.mul(r.landmarks,this.inputSizeTensor);return Object.keys(r).forEach(A=>o.dispose(r[A])),s}async predict(t,n){var i;let r={};r.resize=o.image.resizeBilinear(t,[this.inputSize,this.inputSize]),r.div=o.div(r.resize,O.tf127),r.image=o.sub(r.div,O.tf1),r.batched=this.model.execute(r.image),r.predictions=o.squeeze(r.batched),r.slice=o.slice(r.predictions,[0,0],[-1,1]),r.sigmoid=o.sigmoid(r.slice),r.scores=o.squeeze(r.sigmoid);let s=await r.scores.data();r.boxes=o.slice(r.predictions,[0,1],[-1,4]),r.norm=this.normalizeBoxes(r.boxes),r.nms=await o.image.nonMaxSuppressionAsync(r.norm,r.scores,3*(((i=n.hand)==null?void 0:i.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let A=await r.nms.array(),a=[];for(let c of A){let d={};d.box=o.slice(r.norm,[c,0],[1,-1]),d.slice=o.slice(r.predictions,[c,5],[1,14]),d.norm=this.normalizeLandmarks(d.slice,c),d.palmLandmarks=o.reshape(d.norm,[-1,2]);let y=await d.box.data(),l=y.slice(0,2),m=y.slice(2,4),x=await d.palmLandmarks.array(),p={startPoint:l,endPoint:m,palmLandmarks:x,confidence:s[c]},f=tn(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(f),Object.keys(d).forEach(h=>o.dispose(d[h]))}return Object.keys(r).forEach(c=>o.dispose(r[c])),a}};var Bs=5,An=1.65,an=[0,5,9,13,17,1,2],Hs=0,Gs=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 r,s,A;this.handDetector=t,this.handPoseModel=n,this.inputSize=((A=(s=(r=this.handPoseModel)==null?void 0:r.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]),r=t.map(a=>a[1]),s=[Math.min(...n),Math.min(...r)],A=[Math.max(...n),Math.max(...r)];return{startPoint:s,endPoint:A}}getBoxForPalmLandmarks(t,n){let r=t.map(A=>f5([...A,1],n)),s=this.calculateLandmarksBoundingBox(r);return Z2(X2(s),Bs)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),r=Z2(X2(n),An);r.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(r,[0,0]),d=i.map(x=>[...f5(x,c),x[2]]),y=on(s),l=[...r2(n),1],m=[ue(l,y[0]),ue(l,y[1])];return d.map(x=>[Math.trunc(x[0]+m[0]),Math.trunc(x[1]+m[1]),Math.trunc(x[2])])}async estimateHands(t,n){let r=!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&&(r=!0));let i=[];for(let c=0;c=n.hand.minConfidence/4){let E=o.reshape(u,[-1,3]),k=await E.array();o.dispose(u),o.dispose(E);let N=this.transformRawCoords(k,f,y,p),W=this.getBoxForHandLandmarks(N);this.storedBoxes[c]={...W,confidence:g};let V={landmarks:N,confidence:g,boxConfidence:d.confidence,fingerConfidence:g,box:{topLeft:W.startPoint,bottomRight:W.endPoint}};i.push(V)}else this.storedBoxes[c]=null;o.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 Zs(){let e=Ie?new q2(Ie):void 0;e&&Ne&&(m5=new U2(e,Ne))}async function p5(e,t){m5||Zs();let n=await m5.estimateHands(e,t);if(!n)return[];let r=[];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);r.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 r}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],Xs=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],he=[[0,0],[0,0]],qs=["hand","fist","pinch","point","face","tip","pinchtip"],fn=4,mn=1.6,Us=512,Ys=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 Ks(e,t){let n=[];if(!e||!r0[0])return n;let r={},s=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,Us),a=Math.round(A*s/8)*8;r.resize=o.image.resizeBilinear(e,[A,a]),r.cast=o.cast(r.resize,"int32"),[r.rawScores,r.rawBoxes]=await r0[0].executeAsync(r.cast,Xs),r.boxes=o.squeeze(r.rawBoxes,[0,2]),r.scores=o.squeeze(r.rawScores,[0]);let i=o.unstack(r.scores,1);o.dispose(i[fn]),i.splice(fn,1),r.filtered=o.stack(i,1),o.dispose(i),r.max=o.max(r.filtered,1),r.argmax=o.argMax(r.filtered,1);let c=0;r.nms=await o.image.nonMaxSuppressionAsync(r.boxes,r.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let d=await r.nms.data(),y=await r.max.data(),l=await r.argmax.data();for(let m of Array.from(d)){let x=o.slice(r.boxes,m,1),p=await x.data();o.dispose(x);let f=[p[1],p[0],p[3]-p[1],p[2]-p[0]],h=k2(f,Ys),v=[Math.trunc(f[0]*ee[0]),Math.trunc(f[1]*ee[1]),Math.trunc(f[2]*ee[0]),Math.trunc(f[3]*ee[1])],T=y[m],u=qs[l[m]],g={id:c++,score:T,box:v,boxRaw:h,label:u};n.push(g)}return Object.keys(r).forEach(m=>o.dispose(r[m])),n.sort((m,x)=>x.score-m.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function h5(e,t,n){let r={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=o.image.cropAndResize(e,[A],[0],[he[1][0],he[1][1]],"bilinear"),s.div=o.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)){r.fingerScore=i,s.reshaped=o.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]);r.keypoints=y.map(l=>[ee[0]*(l[0]+t.boxRaw[0]),ee[1]*(l[1]+t.boxRaw[1]),l[2]||0]),r.landmarks=G2(r.keypoints);for(let l of Object.keys(pn))r.annotations[l]=pn[l].map(m=>r.landmarks&&r.keypoints[m]?r.keypoints[m]:null)}Object.keys(s).forEach(c=>o.dispose(s[c]))}return r}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,r=Y2<(t.hand.skipFrames||0);return t.skipAllowed&&n&&r?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 Ks(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 m=k2(l.box,mn),x=k2(l.boxRaw,mn);o0.boxes.push({...d[y],box:m,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,m,x,p,f,h,v,T,u,g,E,k,N,W,V,D,Z,J,q,U,m0;let n=R();if(!e)return te();let r=Date.now()-e.timestamp,s=r<1e3?8-Math.log(r+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]+C)/s),g0=e.body[P].boxRaw.map((C,F)=>((s-1)*j.body[P].boxRaw[F]+C)/s),e0=e.body[P].keypoints.map((C,F)=>{var w0,t0,ne,Ke,Oe,H5,G5,V5,Z5;return{score:C.score,part:C.part,position:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[0]||0)+(C.position[0]||0))/s:C.position[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[1]||0)+(C.position[1]||0))/s:C.position[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[2]||0)+(C.position[2]||0))/s:C.position[2]],positionRaw:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[0]||0)+(C.positionRaw[0]||0))/s:C.positionRaw[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[1]||0)+(C.positionRaw[1]||0))/s:C.positionRaw[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[2]||0)+(C.positionRaw[2]||0))/s:C.positionRaw[2]],distance:[j.body[P].keypoints[F]?((s-1)*(((w0=j.body[P].keypoints[F].distance)==null?void 0:w0[0])||0)+(((t0=C.distance)==null?void 0:t0[0])||0))/s:(ne=C.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=C.distance)==null?void 0:Oe[1])||0))/s:(H5=C.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=C.distance)==null?void 0:V5[2])||0))/s:(Z5=C.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[C,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[C]=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[C]+S)/s),g0=e.hand[P].boxRaw.map((S,C)=>((s-1)*j.hand[P].boxRaw[C]+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,C)=>S.map((F,w0)=>((s-1)*(j.hand[P].keypoints[C][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((C,F)=>C.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=(m=e.face[P])==null?void 0:m.annotations)==null?void 0:x[G])!=null&&p[0]?e.face[P].annotations[G].map((S,C)=>S.map((F,w0)=>((s-1)*j.face[P].annotations[G][C][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=(f=e.face[P].rotation)==null?void 0:f.matrix,G.angle={roll:((s-1)*(((v=(h=j.face[P].rotation)==null?void 0:h.angle)==null?void 0:v.roll)||0)+(((u=(T=e.face[P].rotation)==null?void 0:T.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=(W=j.face[P].rotation)==null?void 0:W.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=o.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=o.div(n.resize,O.tf255),n.res=h0.execute(n.norm),n.squeeze=o.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=o.unstack(n.squeeze,2),n.fg=o.softmax(n.fgRaw),n.mul=o.mul(n.fg,O.tf255),n.expand=o.expandDims(n.mul,2),n.output=o.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let r;switch(t.segmentation.mode||"default"){case"default":n.input=o.squeeze(e),n.concat=o.concat([n.input,n.output],-1),r=o.cast(n.concat,"int32");break;case"alpha":r=o.cast(n.output,"int32");break;default:r=o.tensor(0)}return Object.keys(n).forEach(A=>o.dispose(n[A])),r}var k5={};oe(k5,{distance:()=>P5,find:()=>_s,similarity:()=>Qs});function P5(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let r=0;for(let s=0;s{if(e===0)return 1;let A=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(r-n);return Math.max(Math.min(A,1),0)};function Qs(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let r=P5(e,t,n);return Rn(r,n.order||2,n.min||0,n.max||1)}function _s(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 r=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]),r=e.keypoints.findIndex(s=>s.part===t[1]);if(e.keypoints[n]&&e.keypoints[r]&&e.keypoints[n].position[0]s&&s.part===t[0]),r=e.keypoints.findIndex(s=>s&&s.part===t[1]);e.keypoints[n]&&e.keypoints[r]&&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[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[r].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[r];e.keypoints[r]=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=o.pad(e,I0.padding),n.resize=o.image.resizeBilinear(n.pad,[t,t]);let r=o.cast(n.resize,"int32");return Object.keys(n).forEach(a=>o.dispose(n[a])),r}function wn(e,t){e.keypoints=e.keypoints.filter(r=>r==null?void 0:r.position);for(let r of e.keypoints)r.position=[r.position[0]*(t[0]+I0.padding[2][0]+I0.padding[2][1])/t[0]-I0.padding[2][0],r.position[1]*(t[1]+I0.padding[1][0]+I0.padding[1][1])/t[1]-I0.padding[1][0]],r.positionRaw=[r.position[0]/t[0],r.position[1]/t[1]];let n=ae(e.keypoints.map(r=>r.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),o.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&o.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),A0}function eA(e,t,n){let r=e[0][0],s=[],A=0;for(let y=0;yt.body.minConfidence){let l=[r[y][1],r[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 m=[];for(let x=0;xh.part===l[x]),f=s.find(h=>h.part===l[x+1]);p&&f&&p.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&m.push([p.position,f.position])}c[y]=m}let d={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return w5(d),a.push(d),a}function tA(e,t,n){let r=[];for(let s=0;st.body.minConfidence){let i=[];for(let m=0;m<17;m++){let x=A[3*m+2];if(x>t.body.minConfidence){let p=[A[3*m+1],A[3*m+0]];i.push({part:K2[m],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[m,x]of Object.entries(J2)){let p=[];for(let f=0;fT.part===x[f]),v=i.find(T=>T.part===x[f+1]);h&&v&&h.score>(t.body.minConfidence||0)&&v.score>(t.body.minConfidence||0)&&p.push([h.position,v.position])}y[m]=p}let l={id:s,score:a,box:d,boxRaw:c,keypoints:[...i],annotations:y};w5(l),r.push(l)}}return r.sort((s,A)=>A.score-s.score),r.length>t.body.maxDetected&&(r.length=t.body.maxDetected),r}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,r=E5<(t.body.skipFrames||0);return t.skipAllowed&&n&&r?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?eA(i,t,e):tA(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=>o.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 nA(e,t,n){var d,y;let r=0,s=[],A=et;for(let l of[1,2,4]){let m=l*13,x=o.squeeze(e.find(u=>u.shape[1]===m**2&&(u.shape[2]||0)===De.length)),p=await x.array(),f=o.squeeze(e.find(u=>u.shape[1]===m**2&&(u.shape[2]||0)(n.object.minConfidence||0)&&g!==61){let k=(.5+Math.trunc(u%m))/m,N=(.5+Math.trunc(u/m))/m,W=T[u].map(P=>P*(m/l/A)),[V,D]=[k-$2/l*W[0],N-$2/l*W[1]],[Z,J]=[k+$2/l*W[2]-V,N+$2/l*W[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:r++,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)}}o.dispose([x,f,h,v])}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 o.image.nonMaxSuppressionAsync(a,i,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);c=Array.from(await l.data()),o.dispose(l)}return s=s.filter((l,m)=>c.includes(m)).sort((l,m)=>m.score-l.score),s}async function j5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>R()-Sn,r=S5<(t.object.skipFrames||0);return t.skipAllowed&&n&&r&&_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=o.image.resizeBilinear(e,[et,et],!1),i=o.div(a,O.tf255),c=o.transpose(i,[0,3,1,2]),d;t.object.enabled&&(d=H0.execute(c)),Sn=R();let y=await nA(d,A,t);_2=y,o.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"],oA=a2.length,A2=a2.reduce((e,t,n)=>(e[t]=n,e),{}),rA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],_i=rA.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:r,minX:s,minY:A},{position:{x:a,y:i}})=>({maxX:Math.max(n,a),maxY:Math.max(r,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],[r,s]){let A=t/r,a=n/s,i=(d,y)=>({id:y,score:d.score,boxRaw:[d.box[0]/s,d.box[1]/r,d.box[2]/s,d.box[3]/r],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:m,position:x})=>({score:l,part:m,position:[Math.trunc(x.x*a),Math.trunc(x.y*A)],positionRaw:[x.x/r,x.y/r]})),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,r){let s=n-e,A=r-t;return s*s+A*A}function O5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,AA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],nt=1,Ue=16,aA=50**2;function Wn(e,t,n,r,s,A,a=2){let i=v=>({y:A.get(v.y,v.x,e),x:A.get(v.y,v.x,A.shape[2]/2+e)}),c=(v,T,u)=>({y:L5(Math.round(v.y/Ue),0,T-1),x:L5(Math.round(v.x/Ue),0,u-1)}),[d,y]=r.shape,l=c(t.position,d,y),m=i(l),p=O5(t.position,m);for(let v=0;v[A2[m],A2[x]]),a=A.map(([,m])=>m),i=A.map(([m])=>m),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 m=d-1;m>=0;--m){let x=a[m],p=i[m];y[x]&&!y[p]&&(y[p]=Wn(m,y[x],p,t,n,s))}for(let m=0;mt){i=!1;break}if(!i)break}return i}function cA(e,t){let[n,r,s]=t.shape,A=new tt(n*r*s,({score:a})=>a);for(let a=0;a{var a;let A=(a=s[r])==null?void 0:a.position;return A?Cn(n,t,A.y,A.x)<=aA:!1})}function dA(e,t){return t.reduce((r,{position:s,score:A},a)=>(Dn(e,s,a)||(r+=A),r),0)/t.length}function xA(e,t,n,r,s,A){let a=[],i=cA(A,t);for(;a.lengthx.score>A);let l=dA(a,y),m=Ln(y);l>A&&a.push({keypoints:y,box:m,score:Math.round(100*l)/100})}return a}async function C5(e,t){if(!(N0!=null&&N0.executor))return[];let n=o.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=o.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=o.sub(o.div(o.cast(a,"float32"),127.5),1),d=N0.execute(i,AA).map(y=>o.squeeze(y,[0]));return d[1]=o.sigmoid(d[1]),d}),r=await Promise.all(n.map(a=>a.buffer()));for(let a of n)o.dispose(a);let s=xA(r[0],r[1],r[2],r[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,yA=["fgr","pha","r1o","r2o","r3o","r4o"],a0={},D5=0;function Gn(e){o.dispose([a0.r1i,a0.r2i,a0.r3i,a0.r4i,a0.downsample_ratio]),a0.r1i=o.tensor(0),a0.r2i=o.tensor(0),a0.r3i=o.tensor(0),a0.r4i=o.tensor(0),D5=e.segmentation.ratio||.5,a0.downsample_ratio=o.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=>o.tidy(()=>{let t=o.squeeze(e,[0]),n=o.mul(t,O.tf255);return o.cast(n,"int32")});function W5(e,t){let n=e?Hn(e):o.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),r=t?Hn(t):o.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),s=o.concat([n,r],-1);return o.dispose([n,r]),s}function fA(e){return o.tidy(()=>{let t={};return t.unstack=o.unstack(e,-1),t.concat=o.concat(t.unstack,1),t.split=o.split(t.concat,4,1),t.stack=o.concat(t.split,2),t.squeeze=o.squeeze(t.stack,[0]),t.expand=o.expandDims(t.squeeze,-1),t.add=o.add(t.expand,1),t.mul=o.mul(t.add,127.5),t.cast=o.cast(t.mul,"int32"),t.tile=o.tile(t.cast,[1,1,3]),t.alpha=o.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),o.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=o.div(e,255),D5!==t.segmentation.ratio&&Gn(t);let[n,r,s,A,a,i]=await J0.executeAsync(a0,yA),c;switch(t.segmentation.mode||"default"){case"default":c=W5(n,r);break;case"alpha":c=W5(null,r);break;case"foreground":c=W5(n,null);break;case"state":c=fA(s);break;default:c=o.tensor(0)}return o.dispose([a0.src,n,r,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=o.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=o.div(n.resize,O.tf255),n.res=b0.execute(n.norm),n.squeeze=o.squeeze(n.res,[0]),n.alpha=o.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=o.mul(n.alpha,O.tf255);let r;switch(t.segmentation.mode||"default"){case"default":n.input=o.squeeze(e),n.concat=o.concat([n.input,n.mul],-1),r=o.cast(n.concat,"int32");break;case"alpha":r=o.cast(n.mul,"int32");break;default:r=o.tensor(0)}return Object.keys(n).forEach(A=>o.dispose(n[A])),r}function ot(e,t,n){var d,y;if(!t||!((d=e==null?void 0:e.config)!=null&&d.validateModels))return null;let r=["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 m=l.op.toLowerCase();A.includes(m)||A.push(m)}else!c&&e.config.debug&&b("model not loaded",n);for(let l of A)!r.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,r=0;for(let A of Object.values(p0))t+=A.sizeFromManifest,n+=A.sizeLoadedWeights,r+=A.sizeDesired;let s=r>0?n/r:0;return{numLoadedModels:Object.values(p0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:s,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:r,modelStats:Object.values(p0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var r,s,A,a,i,c,d,y,l,m,x,p,f,h,v,T,u,g,E,k,N,W,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&&((r=this.instance.config.face.antispoof)!=null&&r.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&&((m=this.instance.config.face.ssrnet)!=null&&m.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&&((f=this.instance.config.body.modelPath)!=null&&f.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&&((v=this.instance.config.body.modelPath)!=null&&v.includes("movenet"))?En(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.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&&((W=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&W.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 r;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(r=this.models[n])==null?void 0:r.modelUrl:null}});for(let n of t){let r=Object.keys(p0).find(s=>s.startsWith(n.name));r&&(n.size=p0[r].sizeLoadedWeights,n.url=p0[r].url)}return t}loaded(){return this.list().filter(r=>r.loaded).map(r=>r.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let r=this.models[n];if(!r)continue;let s=ot(this.instance,r,n);s&&t.push(s)}return t}};function Yn(e,t,n,r,s){var i,c,d,y,l,m;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&&(f.push(g[0],g[0]+g[2]),h.push(g[1],g[1]+g[3]))};v(p.face.box),v((y=p.body)==null?void 0:y.box),v((l=p.hands.left)==null?void 0:l.box),v((m=p.hands.right)==null?void 0:m.box);let T=Math.min(...f),u=Math.min(...h);p.box=[T,u,Math.max(...f)-T,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=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -837,4 +837,4 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function pA(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 uA(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 hA(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=r.node.decodeJpeg(n),A=r.expandDims(s,0);e.tf.dispose(s),o=await e.detect(A,e.config),e.tf.dispose(A)}else e.config.debug&&b("Warmup tfjs-node not loaded");return o}async function bA(e){let t;return typeof createImageBitmap=="function"?t=await pA(e):typeof Image!="undefined"||M.Canvas!==void 0?t=await uA(e):t=await hA(e),t}async function gA(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,m]of Object.entries(e.models.models)){if(!m)continue;let x=m!=null&&m.modelSignature&&((c=(i=m==null?void 0:m.inputs)==null?void 0:i[0])!=null&&c.shape)?[...m.inputs[0].shape]:[1,64,64,3],p=m!=null&&m.modelSignature&&((y=(d=m==null?void 0:m.inputs)==null?void 0:d[0])!=null&&y.dtype)?m.inputs[0].dtype:"float32";for(let h=0;hr.dispose(v)):r.dispose(h)}catch(h){e.config.debug&&b("compile fail model:",l)}r.dispose(f)}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 Yn(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 gA(e);let s=await bA(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,Kn=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",Tt);z(this,"match",P5);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=yt,Object.defineProperty(this,"version",{value:yt}),this.config=JSON.parse(JSON.stringify(Ce)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Q(this.config,t)),o1(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),gt(),this.result=te(),this.process={tensor:null,canvas:null},this.faceTriangulation=J1,this.faceUVMap=Q1,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,dt(),M.initial=!0}validate(t){let n=it(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 Gn(o.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("meet")&&(s=await gn(o.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("selfie")&&(s=await Zn(o.tensor,this.config)),r.dispose(o.tensor),s}compare(t,n){return n1(this.config,t,n)}async init(){await e2(this,!0),await this.tf.ready(),dt()}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 bn(t,this.config)}async warmup(t){let n=R(),o=await Yn(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,v,T,u,g,w,k,N,W,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 t1(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?l5(this,i.tensor):[],this.performance.face&&delete this.performance.face):(s=R(),c=this.config.face.enabled?await l5(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 m=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?O5(i.tensor,m):[]:(v=this.config.body.modelPath)!=null&&v.includes("blazepose")?d=this.config.body.enabled?kt(i.tensor,m):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?d=this.config.body.enabled?Nt(i.tensor,m):[]:(u=this.config.body.modelPath)!=null&&u.includes("movenet")&&(d=this.config.body.enabled?E5(i.tensor,m):[]),this.performance.body&&delete this.performance.body):(s=R(),(g=this.config.body.modelPath)!=null&&g.includes("posenet")?d=this.config.body.enabled?await O5(i.tensor,m):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?d=this.config.body.enabled?await kt(i.tensor,m):[]:(k=this.config.body.modelPath)!=null&&k.includes("efficientpose")?d=this.config.body.enabled?await Nt(i.tensor,m):[]:(N=this.config.body.modelPath)!=null&&N.includes("movenet")&&(d=this.config.body.enabled?await E5(i.tensor,m):[]),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=(W=this.config.hand.detector)==null?void 0:W.modelPath)!=null&&V.includes("handdetect")?y=this.config.hand.enabled?m5(i.tensor,x):[]:(Z=(D=this.config.hand.detector)==null?void 0:D.modelPath)!=null&&Z.includes("handtrack")&&(y=this.config.hand.enabled?h5(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 m5(i.tensor,x):[]:(m0=(U=this.config.hand.detector)==null?void 0:U.modelPath)!=null&&m0.includes("handtrack")&&(y=this.config.hand.enabled?await h5(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?S5(i.tensor,this.config):[]:(i0=this.config.object.modelPath)!=null&&i0.includes("centernet")&&(l=this.config.object.enabled?zt(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 S5(i.tensor,this.config):[]:(e0=this.config.object.modelPath)!=null&&e0.includes("centernet")&&(l=this.config.object.enabled?await zt(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=[...Y3(c),...U3(d),...J3(y),...K3(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 f=((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:f[2],height:f[1],get persons(){return Un(c,d,y,p,f)}},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,Kn as Human,Kn as default,Ce as defaults,Tt as draw,te as empty,M as env,P5 as match,qn as models}; +2Q==`;async function uA(e){let t=(s,A="application/octet-stream")=>fetch(`data:${A};base64,${s}`).then(a=>a.blob()),n,r;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);r=await e.detect(s,e.config),s.close()}return r}async function hA(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 r;if(typeof Image!="undefined")r=new Image;else if(M.Image)r=new M.Image;else{t(void 0);return}r.onload=async()=>{let s=D0(r.naturalWidth,r.naturalHeight);if(!s)b("Warmup: Canvas not found"),t(void 0);else{let A=s.getContext("2d");A&&A.drawImage(r,0,0);let a=await e.image(s,!0),i=a.tensor?await e.detect(a.tensor,e.config):void 0;t(i)}},n?r.src=n:t(void 0)})}async function bA(e){let t=s=>Buffer.from(s,"base64"),n;e.config.warmup==="face"?n=t(rt):n=t(st);let r;if("node"in o&&o.getBackend()==="tensorflow"){let s=it.decodeJpeg(n),A=o.expandDims(s,0);e.tf.dispose(s),r=await e.detect(A,e.config),e.tf.dispose(A)}else e.config.debug&&b("Warmup tfjs-node not loaded");return r}async function gA(e){let t;return typeof createImageBitmap=="function"?t=await uA(e):typeof Image!="undefined"||M.Canvas!==void 0?t=await hA(e):t=await bA(e),t}async function TA(e){var i,c,d,y;if(!o.env().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=o.getBackend(),n=o.backend();if(t!=="webgl"&&t!=="humangl"||!(n!=null&&n.checkCompileCompletion))return;o.env().set("ENGINE_COMPILE_ONLY",!0);let r=o.engine().state.numTensors,s=[];for(let[l,m]of Object.entries(e.models.models)){if(!m)continue;let x=m!=null&&m.modelSignature&&((c=(i=m==null?void 0:m.inputs)==null?void 0:i[0])!=null&&c.shape)?[...m.inputs[0].shape]:[1,64,64,3],p=m!=null&&m.modelSignature&&((y=(d=m==null?void 0:m.inputs)==null?void 0:d[0])!=null&&y.dtype)?m.inputs[0].dtype:"float32";for(let h=0;ho.dispose(v)):o.dispose(h)}catch(h){e.config.debug&&b("compile fail model:",l)}o.dispose(f)}let A=await n.checkCompileCompletionAsync();n.getUniformLocations(),e.config.debug&&b("compile pass:",{models:s,kernels:A.length}),o.env().set("ENGINE_COMPILE_ONLY",!1);let a=o.engine().state.numTensors;a-r>0&&b("tensor leak:",a-r)}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 r=>{await e.models.load(),await TA(e);let s=await gA(e),A=R();e.config.debug&&b("warmup",e.config.warmup,Math.round(A-n),"ms"),e.emit("warmup"),r(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,r=E0(this,Ye);Q0(this,Ye,n);let s=n-r;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 o.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||o.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=o,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 r=JSON.parse(JSON.stringify(this.env));delete r.kernels,delete r.initial,delete r.perfadd,this.config.debug&&b("environment:",r)}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 r=await f2(t,this.config);if(!r.tensor)return null;let s=null;return(A=this.config.segmentation.modelPath)!=null&&A.includes("rvm")&&(s=await Vn(r.tensor,this.config)),(a=this.config.segmentation.modelPath)!=null&&a.includes("meet")&&(s=await Tn(r.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("selfie")&&(s=await Xn(r.tensor,this.config)),o.dispose(r.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(),r=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 o.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!==r&&(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(),r=await Kn(this,t),s=R();return this.performance.warmup=Math.trunc(s-n),r}async profile(t,n){let r=await this.tf.profile(()=>this.detect(t,n)),s={},A=0;for(let i of r.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 r=>{var h,v,T,u,g,E,k,N,W,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"),r(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"),r(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 m=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,m):[]:(v=this.config.body.modelPath)!=null&&v.includes("blazepose")?d=this.config.body.enabled?wt(i.tensor,m):[]:(T=this.config.body.modelPath)!=null&&T.includes("efficientpose")?d=this.config.body.enabled?Lt(i.tensor,m):[]:(u=this.config.body.modelPath)!=null&&u.includes("movenet")&&(d=this.config.body.enabled?z5(i.tensor,m):[]),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,m):[]:(E=this.config.body.modelPath)!=null&&E.includes("blazepose")?d=this.config.body.enabled?await wt(i.tensor,m):[]:(k=this.config.body.modelPath)!=null&&k.includes("efficientpose")?d=this.config.body.enabled?await Lt(i.tensor,m):[]:(N=this.config.body.modelPath)!=null&&N.includes("movenet")&&(d=this.config.body.enabled?await z5(i.tensor,m):[]),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=(W=this.config.hand.detector)==null?void 0:W.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 f=((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:f[2],height:f[1],get persons(){return Yn(c,d,y,p,f)}},o.dispose(i.tensor),this.emit("detect"),this.state="idle",r(this.result)})}async sleep(t){return new Promise(n=>{setTimeout(n,t)})}async video(t,n=!0,r=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),r>0&&await this.sleep(r),E0(this,be)[t.id]&&requestAnimationFrame(()=>this.video(t,n,r))):(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}; diff --git a/dist/human.esm.js b/dist/human.esm.js index c6b6e0d8..a87c081a 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -37,487 +37,488 @@ var __privateSet = (obj, member, value, setter) => { var tfjs_esm_exports = {}; __export(tfjs_esm_exports, { Abs: () => Xs, - Acos: () => Wo, - Acosh: () => Uo, - AdadeltaOptimizer: () => np, - AdagradOptimizer: () => sp, - AdamOptimizer: () => ap, - AdamaxOptimizer: () => ip, - Add: () => uo, - AddN: () => Go, - All: () => Ho, - Any: () => Ko, + Acos: () => Vo, + Acosh: () => Wo, + AdadeltaOptimizer: () => Qu, + AdagradOptimizer: () => Zu, + AdamOptimizer: () => Ju, + AdamaxOptimizer: () => ep, + Add: () => io, + AddN: () => Uo, + All: () => Go, + Any: () => Ho, ArgMax: () => Ys, ArgMin: () => Qs, - Asin: () => qo, - Asinh: () => jo, - Atan: () => Xo, - Atan2: () => Qo, - Atanh: () => Yo, - AvgPool: () => Zo, + Asin: () => Ko, + Asinh: () => qo, + Atan: () => jo, + Atan2: () => Yo, + Atanh: () => Xo, + AvgPool: () => Qo, AvgPool3D: () => Zs, - AvgPool3DGrad: () => Ai, - AvgPoolGrad: () => Di, - BackendWasm: () => pm, - BatchMatMul: () => Jo, + AvgPool3DGrad: () => Ei, + AvgPoolGrad: () => $i, + BackendWasm: () => im, + BatchMatMul: () => Zo, BatchToSpaceND: () => Js, - Bincount: () => en, - BitwiseAnd: () => ja, + Bincount: () => Jo, + BitwiseAnd: () => qa, BroadcastArgs: () => ea, BroadcastTo: () => Bce, - Cast: () => bo, - Ceil: () => tn, - ClipByValue: () => Co, - Complex: () => Fi, - ComplexAbs: () => Pi, + Cast: () => yo, + Ceil: () => en, + ClipByValue: () => bo, + Complex: () => Ri, + ComplexAbs: () => Di, Concat: () => ta, - Conv2D: () => rn, - Conv2DBackpropFilter: () => Oi, - Conv2DBackpropInput: () => on, - Conv3D: () => nn, - Conv3DBackpropFilterV2: () => Xa, - Conv3DBackpropInputV2: () => sn, - Cos: () => an, - Cosh: () => un, - CropAndResize: () => ln, - Cumprod: () => pn, - Cumsum: () => cn, - DataStorage: () => zo, + Conv2D: () => tn, + Conv2DBackpropFilter: () => Ai, + Conv2DBackpropInput: () => rn, + Conv3D: () => on, + Conv3DBackpropFilterV2: () => ja, + Conv3DBackpropInputV2: () => nn, + Cos: () => sn, + Cosh: () => an, + CropAndResize: () => cn, + Cumprod: () => un, + Cumsum: () => pn, + DataStorage: () => Bo, DenseBincount: () => ra, - DepthToSpace: () => mn, - DepthwiseConv2dNative: () => dn, - DepthwiseConv2dNativeBackpropFilter: () => Mi, - DepthwiseConv2dNativeBackpropInput: () => Li, + DepthToSpace: () => ln, + DepthwiseConv2dNative: () => mn, + DepthwiseConv2dNativeBackpropFilter: () => Fi, + DepthwiseConv2dNativeBackpropInput: () => Pi, Diag: () => oa, - Dilation2D: () => fn, - Dilation2DBackpropFilter: () => zi, - Dilation2DBackpropInput: () => Bi, - Draw: () => Pu, - ENV: () => nw, - Einsum: () => Vi, - Elu: () => gn, - EluGrad: () => Ya, - Environment: () => hl, - Equal: () => yn, - Erf: () => xn, - Exp: () => bn, + Dilation2D: () => dn, + Dilation2DBackpropFilter: () => Mi, + Dilation2DBackpropInput: () => Oi, + Draw: () => _u, + ENV: () => ow, + Einsum: () => Li, + Elu: () => hn, + EluGrad: () => Xa, + Environment: () => ll, + Equal: () => xn, + Erf: () => gn, + Exp: () => yn, ExpandDims: () => na, - Expm1: () => Cn, - FFT: () => Wi, + Expm1: () => bn, + FFT: () => Bi, Fill: () => sa, - FlipLeftRight: () => wn, - Floor: () => Sn, - FloorDiv: () => In, - FromPixels: () => Mu, - FusedBatchNorm: () => vn, - FusedConv2D: () => vo, - FusedDepthwiseConv2D: () => ko, - GPGPUContext: () => kp, - GatherNd: () => kn, + FlipLeftRight: () => Cn, + Floor: () => wn, + FloorDiv: () => Sn, + FromPixels: () => Eu, + FusedBatchNorm: () => In, + FusedConv2D: () => Io, + FusedDepthwiseConv2D: () => vo, + GPGPUContext: () => xp, + GatherNd: () => vn, GatherV2: () => aa, - GraphModel: () => Bl, - Greater: () => Nn, - GreaterEqual: () => Tn, - IFFT: () => Ui, - Identity: () => wo, - Imag: () => Gi, - IsFinite: () => _n, - IsInf: () => $n, - IsNan: () => En, - KernelBackend: () => ao, - LRN: () => zn, - LRNGrad: () => Qa, - LeakyRelu: () => Rn, - Less: () => Dn, - LessEqual: () => An, - LinSpace: () => Fn, - Log: () => Pn, - Log1p: () => On, + GraphModel: () => Ml, + Greater: () => kn, + GreaterEqual: () => Nn, + IFFT: () => zi, + Identity: () => Co, + Imag: () => Vi, + IsFinite: () => Tn, + IsInf: () => _n, + IsNan: () => $n, + KernelBackend: () => so, + LRN: () => Bn, + LRNGrad: () => Ya, + LeakyRelu: () => En, + Less: () => Rn, + LessEqual: () => Dn, + LinSpace: () => An, + Log: () => Fn, + Log1p: () => Pn, LogSoftmax: () => zce, - LogicalAnd: () => Mn, - LogicalNot: () => Ln, - LogicalOr: () => Bn, - LogicalXor: () => $0, + LogicalAnd: () => On, + LogicalNot: () => Mn, + LogicalOr: () => Ln, + LogicalXor: () => E0, LowerBound: () => Vce, - MathBackendCPU: () => xu, - MathBackendWebGL: () => wu, + MathBackendCPU: () => hc, + MathBackendWebGL: () => Oc, MatrixBandPart: () => Wce, - Max: () => Vn, - MaxPool: () => Un, + Max: () => zn, + MaxPool: () => Wn, MaxPool3D: () => ia, - MaxPool3DGrad: () => Ki, - MaxPoolGrad: () => Hi, + MaxPool3DGrad: () => Ui, + MaxPoolGrad: () => Wi, MaxPoolWithArgmax: () => ua, - Maximum: () => Wn, - Mean: () => Gn, - Min: () => Hn, - Minimum: () => Kn, - MirrorPad: () => qn, - Mod: () => jn, - MomentumOptimizer: () => up, - Multinomial: () => Xn, - Multiply: () => Yn, + Maximum: () => Vn, + Mean: () => Un, + Min: () => Gn, + Minimum: () => Hn, + MirrorPad: () => Kn, + Mod: () => qn, + MomentumOptimizer: () => tp, + Multinomial: () => jn, + Multiply: () => Xn, Neg: () => pa, - NonMaxSuppressionV3: () => Zn, - NonMaxSuppressionV4: () => Za, - NonMaxSuppressionV5: () => Jn, - NotEqual: () => Qn, + NonMaxSuppressionV3: () => Qn, + NonMaxSuppressionV4: () => Qa, + NonMaxSuppressionV5: () => Zn, + NotEqual: () => Yn, OP_SCOPE_SUFFIX: () => kw, - OneHot: () => es, + OneHot: () => Jn, OnesLike: () => ca, - Optimizer: () => Nr, - OptimizerConstructors: () => Pl, + Optimizer: () => kr, + OptimizerConstructors: () => Dl, Pack: () => la, - PadV2: () => ts, + PadV2: () => es, Pool: () => Uce, - Pow: () => rs, - Prelu: () => os, - Prod: () => ns, - RMSPropOptimizer: () => pp, - RaggedGather: () => Qp, - RaggedRange: () => Zp, - RaggedTensorToTensor: () => Jp, + Pow: () => ts, + Prelu: () => rs, + Prod: () => os, + RMSPropOptimizer: () => rp, + RaggedGather: () => Up, + RaggedRange: () => Gp, + RaggedTensorToTensor: () => Hp, Range: () => ma, Rank: () => hw, - Real: () => qi, - RealDiv: () => hn, - Reciprocal: () => ss, - Reduction: () => Rt, - Relu: () => as, - Relu6: () => ps, + Real: () => Gi, + RealDiv: () => fn, + Reciprocal: () => ns, + Reduction: () => Et, + Relu: () => ss, + Relu6: () => us, Reshape: () => da, - ResizeBilinear: () => us, - ResizeBilinearGrad: () => ei, - ResizeNearestNeighbor: () => is, - ResizeNearestNeighborGrad: () => Ja, - Reverse: () => cs, - RotateWithOffset: () => As, - Round: () => ls, - Rsqrt: () => ms, - SGDOptimizer: () => mi, - ScatterNd: () => ds, - SearchSorted: () => hs, + ResizeBilinear: () => is, + ResizeBilinearGrad: () => Ja, + ResizeNearestNeighbor: () => as, + ResizeNearestNeighborGrad: () => Za, + Reverse: () => ps, + RotateWithOffset: () => Ds, + Round: () => cs, + Rsqrt: () => ls, + SGDOptimizer: () => li, + ScatterNd: () => ms, + SearchSorted: () => fs, Select: () => fa, - Selu: () => gs, - Sigmoid: () => Cs, - Sign: () => bs, - Sin: () => xs, - Sinh: () => ys, + Selu: () => hs, + Sigmoid: () => bs, + Sign: () => ys, + Sin: () => gs, + Sinh: () => xs, Slice: () => ha, - Softmax: () => vs, - Softplus: () => ws, + Softmax: () => Is, + Softplus: () => Cs, SpaceToBatchND: () => ga, - SparseFillEmptyRows: () => ji, - SparseReshape: () => ti, + SparseFillEmptyRows: () => Hi, + SparseReshape: () => ei, SparseSegmentMean: () => ya, SparseSegmentSum: () => ba, - SparseToDense: () => ks, + SparseToDense: () => vs, SplitV: () => xa, - Sqrt: () => Ss, - Square: () => Xi, - SquaredDifference: () => Ns, - StaticRegexReplace: () => Ou, - Step: () => So, - StridedSlice: () => Ts, + Sqrt: () => ws, + Square: () => Ki, + SquaredDifference: () => ks, + StaticRegexReplace: () => $u, + Step: () => wo, + StridedSlice: () => Ns, StringNGrams: () => Ca, - StringSplit: () => Yi, - StringToHashBucketFast: () => Qi, - Sub: () => _s, - Sum: () => Is, - Tan: () => $s, - Tanh: () => Es, - Tensor: () => ut, + StringSplit: () => qi, + StringToHashBucketFast: () => ji, + Sub: () => Ts, + Sum: () => Ss, + Tan: () => _s, + Tanh: () => $s, + Tensor: () => mt, TensorBuffer: () => tt, - TensorScatterUpdate: () => fs, - Tile: () => po, - TopK: () => Rs, - Transform: () => Ds, - Transpose: () => co, - Unique: () => Zi, + TensorScatterUpdate: () => ds, + Tile: () => uo, + TopK: () => Es, + Transform: () => Rs, + Transpose: () => po, + Unique: () => Xi, Unpack: () => wa, - UnsortedSegmentSum: () => Ji, + UnsortedSegmentSum: () => Yi, UpperBound: () => Gce, - Variable: () => oi, - WebGPUBackend: () => Tu, + Variable: () => ri, + WebGPUBackend: () => Kc, ZerosLike: () => Sa, - _FusedMatMul: () => Io, - abs: () => Jt, - acos: () => kk, - acosh: () => Nk, + _FusedMatMul: () => So, + abs: () => Qt, + acos: () => Nk, + acosh: () => Tk, add: () => Ce, - addN: () => Tk, - all: () => _k, - any: () => $k, - argMax: () => Ek, - argMin: () => Rk, - asin: () => Dk, - asinh: () => Ak, - atan: () => Fk, - atan2: () => Pk, - atanh: () => Ok, - avgPool: () => fd, - avgPool3d: () => Bk, + addN: () => _k, + all: () => $k, + any: () => Ek, + argMax: () => Rk, + argMin: () => Dk, + asin: () => Ak, + asinh: () => Fk, + atan: () => Pk, + atan2: () => Ok, + atanh: () => Mk, + avgPool: () => md, + avgPool3d: () => zk, backend: () => vde, backend_util: () => w, - basicLSTMCell: () => zk, - batchNorm: () => au, - batchNorm2d: () => Wk, - batchNorm3d: () => Uk, - batchNorm4d: () => Gk, - batchToSpaceND: () => hd, - bincount: () => gd, - bitwiseAnd: () => Hk, + basicLSTMCell: () => Vk, + batchNorm: () => ru, + batchNorm2d: () => Uk, + batchNorm3d: () => Gk, + batchNorm4d: () => Hk, + batchToSpaceND: () => dd, + bincount: () => fd, + bitwiseAnd: () => Kk, booleanMaskAsync: () => E6, - broadcastArgs: () => Kk, - broadcastTo: () => iu, - broadcast_util: () => Ir, - browser: () => oT, + broadcastArgs: () => qk, + broadcastTo: () => ou, + broadcast_util: () => Sr, + browser: () => nT, buffer: () => me, cast: () => We, - ceil: () => qk, - clipByValue: () => jk, - clone: () => Ur, - complex: () => Er, - concat: () => bt, - concat1d: () => Xk, - concat2d: () => Yk, - concat3d: () => Qk, - concat4d: () => Zk, - conv1d: () => Jk, - conv2d: () => uu, - conv2dTranspose: () => e2, - conv3d: () => t2, - conv3dTranspose: () => o2, + ceil: () => jk, + clipByValue: () => Xk, + clone: () => Wr, + complex: () => $r, + concat: () => yt, + concat1d: () => Yk, + concat2d: () => Qk, + concat3d: () => Zk, + concat4d: () => Jk, + conv1d: () => e2, + conv2d: () => nu, + conv2dTranspose: () => t2, + conv3d: () => r22, + conv3dTranspose: () => n2, copyRegisteredKernels: () => Zce, - cos: () => n2, - cosh: () => s2, - cosineWindow: () => Rl, - cumprod: () => a2, - cumsum: () => i2, - customGrad: () => vr, - denseBincount: () => u2, + cos: () => s2, + cosh: () => a2, + cosineWindow: () => _l, + cumprod: () => i2, + cumsum: () => u2, + customGrad: () => Ir, + denseBincount: () => p2, deprecationWarn: () => Pw, - depthToSpace: () => p2, - depthwiseConv2d: () => lc, + depthToSpace: () => c2, + depthwiseConv2d: () => oc, deregisterOp: () => A5, - device_util: () => ou, - diag: () => c2, - dilation2d: () => l2, + device_util: () => Ji, + diag: () => l2, + dilation2d: () => m2, disableDeprecationWarnings: () => dde, - dispose: () => Mt, + dispose: () => Ot, disposeVariables: () => fde, div: () => je, - divNoNan: () => d2, - dot: () => f2, + divNoNan: () => f2, + dot: () => h2, dropout: () => W6, - einsum: () => pu, - elu: () => Cd, + einsum: () => su, + elu: () => yd, enableDebugMode: () => mde, enableProdMode: () => lde, enclosingPowerOfTwo: () => Qw, - engine: () => pr, - ensureShape: () => h2, + engine: () => ur, + ensureShape: () => g2, env: () => A, - equal: () => bd, - erf: () => g2, - euclideanNorm: () => b2, - exp: () => $o, + equal: () => xd, + erf: () => x2, + euclideanNorm: () => C2, + exp: () => _o, expandDims: () => Ms, - expm1: () => C2, - eye: () => wd, - fft: () => fc, + expm1: () => w2, + eye: () => bd, + fft: () => ac, fill: () => Ea, findBackend: () => Sde, findBackendFactory: () => Ide, - floor: () => Sd, - floorDiv: () => dd, - forceHalfFloat: () => MD, + floor: () => Cd, + floorDiv: () => ld, + forceHalfFloat: () => LD, fused: () => Zw, - gather: () => Id, + gather: () => wd, gatherND: () => z6, - gather_util: () => af, + gather_util: () => sf, getBackend: () => Cde, - getGradient: () => iw, - getKernel: () => tc, - getKernelsForBackend: () => Ym, + getGradient: () => aw, + getKernel: () => qp, + getKernelsForBackend: () => jm, getThreadsCount: () => Zse, - gpgpu_util: () => cv, + gpgpu_util: () => lv, grad: () => AK, grads: () => FK, - greater: () => qu, - greaterEqual: () => vd, - ifft: () => Ju, - imag: () => lu, + greater: () => zu, + greaterEqual: () => Sd, + ifft: () => Ku, + imag: () => iu, image: () => Kj, inTopKAsync: () => G6, - io: () => fi, - irfft: () => Kd, - isFinite: () => w2, - isInf: () => S2, - isNaN: () => I2, - keep: () => Rr, - kernel_impls: () => Wt, - leakyRelu: () => kd, - less: () => _l, - lessEqual: () => mc, + io: () => mi, + irfft: () => Gd, + isFinite: () => S2, + isInf: () => I2, + isNaN: () => v2, + keep: () => Er, + kernel_impls: () => Vt, + leakyRelu: () => Id, + less: () => kl, + lessEqual: () => nc, linalg: () => qj, - linspace: () => v2, + linspace: () => k2, loadGraphModel: () => $8, loadGraphModelSync: () => E8, - localResponseNormalization: () => k2, - log: () => pi, - log1p: () => Nd, - logSigmoid: () => N2, - logSoftmax: () => T2, - logSumExp: () => $d, - logicalAnd: () => ju, - logicalNot: () => Ed, - logicalOr: () => Rd, - logicalXor: () => _2, + localResponseNormalization: () => N2, + log: () => ui, + log1p: () => vd, + logSigmoid: () => T2, + logSoftmax: () => _2, + logSumExp: () => Td, + logicalAnd: () => Vu, + logicalNot: () => _d, + logicalOr: () => $d, + logicalXor: () => $2, losses: () => jj, - lowerBound: () => $2, + lowerBound: () => E2, matMul: () => Ze, - math: () => JN, + math: () => eT, max: () => Ra, - maxPool: () => Ad, - maxPool3d: () => E2, - maxPoolWithArgmax: () => R2, - maximum: () => Fd, - mean: () => Xu, + maxPool: () => Rd, + maxPool3d: () => R2, + maxPoolWithArgmax: () => D2, + maximum: () => Dd, + mean: () => Wu, memory: () => hde, - meshgrid: () => D2, - min: () => Tl, - minimum: () => Yu, - mirrorPad: () => A2, - mod: () => F2, - moments: () => P2, + meshgrid: () => A2, + min: () => vl, + minimum: () => Uu, + mirrorPad: () => F2, + mod: () => P2, + moments: () => O2, movingAverage: () => A6, mul: () => se, - multiRNNCell: () => O2, - multinomial: () => M2, - neg: () => cr, + multiRNNCell: () => M2, + multinomial: () => L2, + neg: () => pr, nextFrame: () => pS, - norm: () => Ku, - notEqual: () => Pd, - oneHot: () => El, + node: () => bQt, + norm: () => Bu, + notEqual: () => Ad, + oneHot: () => Tl, ones: () => Da, - onesLike: () => L2, + onesLike: () => B2, op: () => N, - outerProduct: () => B2, + outerProduct: () => z2, pad: () => Aa, - pad1d: () => z2, - pad2d: () => V2, - pad3d: () => W2, - pad4d: () => U2, - pool: () => G2, - pow: () => ui, - prelu: () => Md, - print: () => md, - prod: () => H2, + pad1d: () => V2, + pad2d: () => W2, + pad3d: () => U2, + pad4d: () => G2, + pool: () => H2, + pow: () => ii, + prelu: () => Pd, + print: () => cd, + prod: () => K2, profile: () => gde, - raggedGather: () => K2, - raggedRange: () => q2, - raggedTensorToTensor: () => j2, - rand: () => X2, - randomGamma: () => g1, - randomNormal: () => Ud, - randomStandardNormal: () => x1, - randomUniform: () => dc, - randomUniformInt: () => y1, - range: () => mu, + raggedGather: () => q2, + raggedRange: () => j2, + raggedTensorToTensor: () => X2, + rand: () => Y2, + randomGamma: () => x1, + randomNormal: () => Vd, + randomStandardNormal: () => y1, + randomUniform: () => sc, + randomUniformInt: () => b1, + range: () => uu, ready: () => bde, - real: () => ci, - reciprocal: () => b1, - registerBackend: () => su, + real: () => pi, + reciprocal: () => C1, + registerBackend: () => tu, registerGradient: () => Xce, - registerKernel: () => ri, + registerKernel: () => ti, registerOp: () => D5, - relu: () => du, - relu6: () => Gd, + relu: () => pu, + relu6: () => Wd, removeBackend: () => wde, reshape: () => W, - reverse: () => mo, - reverse1d: () => C1, - reverse2d: () => w1, - reverse3d: () => S1, - reverse4d: () => I1, - rfft: () => hc, - round: () => Hd, - rsqrt: () => v1, + reverse: () => lo, + reverse1d: () => w1, + reverse2d: () => S1, + reverse3d: () => I1, + reverse4d: () => v1, + rfft: () => ic, + round: () => Ud, + rsqrt: () => k1, scalar: () => ke, scatterND: () => P6, - scatter_util: () => hu, - searchSorted: () => $l, - selu: () => k1, - separableConv2d: () => N1, - serialization: () => WN, + scatter_util: () => lu, + searchSorted: () => Nl, + selu: () => N1, + separableConv2d: () => T1, + serialization: () => UN, setBackend: () => yde, setPlatform: () => kde, setThreadsCount: () => Qse, setWasmPath: () => Xse, setWasmPaths: () => Yse, - setWebGLContext: () => vI, - setdiff1dAsync: () => T1, - shared: () => Tc, + setWebGLContext: () => kI, + setdiff1dAsync: () => _1, + shared: () => wc, sigmoid: () => $a, - sign: () => _1, + sign: () => $1, signal: () => Hj, - sin: () => $1, - sinh: () => E1, + sin: () => E1, + sinh: () => R1, slice: () => Xe, - slice1d: () => R1, - slice2d: () => D1, - slice3d: () => A1, - slice4d: () => F1, - slice_util: () => ct, - softmax: () => P1, - softplus: () => _d, - spaceToBatchND: () => Od, + slice1d: () => D1, + slice2d: () => A1, + slice3d: () => F1, + slice4d: () => P1, + slice_util: () => pt, + softmax: () => O1, + softplus: () => Nd, + spaceToBatchND: () => Fd, sparse: () => Xj, sparseToDense: () => L6, spectral: () => Gj, - split: () => li, - sqrt: () => Dr, - square: () => er, - squaredDifference: () => qd, - squeeze: () => gc, - stack: () => kr, - step: () => jd, - stridedSlice: () => O1, + split: () => ci, + sqrt: () => Rr, + square: () => Zt, + squaredDifference: () => Hd, + squeeze: () => uc, + stack: () => vr, + step: () => Kd, + stridedSlice: () => M1, string: () => Yj, sub: () => Te, sum: () => ot, - sumOutType: () => ni, - tan: () => M1, - tanh: () => Nl, - tensor: () => ur, - tensor1d: () => tr, - tensor2d: () => fu, - tensor3d: () => Xd, - tensor4d: () => L1, - tensor5d: () => B1, - tensor6d: () => z1, - tensorScatterUpdate: () => W1, - tensor_util: () => ek, - test_util: () => h1, + sumOutType: () => oi, + tan: () => L1, + tanh: () => Il, + tensor: () => ar, + tensor1d: () => Jt, + tensor2d: () => cu, + tensor3d: () => qd, + tensor4d: () => B1, + tensor5d: () => z1, + tensor6d: () => V1, + tensorScatterUpdate: () => U1, + tensor_util: () => tk, + test_util: () => g1, tidy: () => De, - tile: () => cu, + tile: () => au, time: () => xde, - topk: () => U1, + topk: () => G1, train: () => TGe, - transpose: () => yc, - truncatedNormal: () => G1, - unique: () => H1, + transpose: () => cc, + truncatedNormal: () => H1, + unique: () => K1, unregisterGradient: () => Qce, unregisterKernel: () => Yce, - unsortedSegmentSum: () => K1, - unstack: () => fo, + unsortedSegmentSum: () => q1, + unstack: () => mo, upcastType: () => dt, - upperBound: () => q1, + upperBound: () => j1, util: () => y, valueAndGrad: () => PK, valueAndGrads: () => OK, - variable: () => j1, + variable: () => X1, variableGrads: () => zw, version: () => Ace, version_converter: () => D8, @@ -526,124 +527,124 @@ __export(tfjs_esm_exports, { version_wasm: () => Jse, version_webgl: () => s9, webgl: () => Cat, - webgl_util: () => Ac, - webgpu_util: () => Yv, - where: () => lo, - whereAsync: () => Qd, - zeros: () => Gr, - zerosLike: () => Ht + webgl_util: () => Tc, + webgpu_util: () => Qv, + where: () => co, + whereAsync: () => Xd, + zeros: () => Ur, + zerosLike: () => Gt }); -var wG = Object.create; -var QC = Object.defineProperty; -var SG = Object.getOwnPropertyDescriptor; -var IG = Object.getOwnPropertyNames; -var vG = Object.getPrototypeOf; -var kG = Object.prototype.hasOwnProperty; -var qt = (r, t8) => () => (t8 || r((t8 = { exports: {} }).exports, t8), t8.exports); -var qe = (r, t8) => { +var SG = Object.create; +var YC = Object.defineProperty; +var IG = Object.getOwnPropertyDescriptor; +var vG = Object.getOwnPropertyNames; +var kG = Object.getPrototypeOf; +var NG = Object.prototype.hasOwnProperty; +var Kt = (r15, t8) => () => (t8 || r15((t8 = { exports: {} }).exports, t8), t8.exports); +var qe = (r15, t8) => { for (var e in t8) - QC(r, e, { get: t8[e], enumerable: true }); + YC(r15, e, { get: t8[e], enumerable: true }); }; -var NG = (r, t8, e, o) => { +var TG = (r15, t8, e, o) => { if (t8 && typeof t8 == "object" || typeof t8 == "function") - for (let n of IG(t8)) - !kG.call(r, n) && n !== e && QC(r, n, { get: () => t8[n], enumerable: !(o = SG(t8, n)) || o.enumerable }); - return r; + for (let n of vG(t8)) + !NG.call(r15, n) && n !== e && YC(r15, n, { get: () => t8[n], enumerable: !(o = IG(t8, n)) || o.enumerable }); + return r15; }; -var Kp = (r, t8, e) => (e = r != null ? wG(vG(r)) : {}, NG(t8 || !r || !r.__esModule ? QC(e, "default", { value: r, enumerable: true }) : e, r)); -var V0 = qt((tle, z0) => { - z0.exports = Nt; - var No = null; +var Lp = (r15, t8, e) => (e = r15 != null ? SG(kG(r15)) : {}, TG(t8 || !r15 || !r15.__esModule ? YC(e, "default", { value: r15, enumerable: true }) : e, r15)); +var W0 = Kt((tle, V0) => { + V0.exports = kt; + var ko = null; try { - No = 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) { + 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 (r15) { } - function Nt(r, t8, e) { - this.low = r | 0, this.high = t8 | 0, this.unsigned = !!e; + function kt(r15, t8, e) { + this.low = r15 | 0, this.high = t8 | 0, this.unsigned = !!e; } - Nt.prototype.__isLong__; - Object.defineProperty(Nt.prototype, "__isLong__", { value: true }); - function Wr(r) { - return (r && r.__isLong__) === true; + kt.prototype.__isLong__; + Object.defineProperty(kt.prototype, "__isLong__", { value: true }); + function Vr(r15) { + return (r15 && r15.__isLong__) === true; } - Nt.isLong = Wr; - var R0 = {}, D0 = {}; - function Bu(r, t8) { + kt.isLong = Vr; + var D0 = {}, A0 = {}; + function Du(r15, t8) { var e, o, n; - return t8 ? (r >>>= 0, (n = 0 <= r && r < 256) && (o = D0[r], o) ? o : (e = Tt(r, (r | 0) < 0 ? -1 : 0, true), n && (D0[r] = e), e)) : (r |= 0, (n = -128 <= r && r < 128) && (o = R0[r], o) ? o : (e = Tt(r, r < 0 ? -1 : 0, false), n && (R0[r] = e), e)); + return t8 ? (r15 >>>= 0, (n = 0 <= r15 && r15 < 256) && (o = A0[r15], o) ? o : (e = Nt(r15, (r15 | 0) < 0 ? -1 : 0, true), n && (A0[r15] = e), e)) : (r15 |= 0, (n = -128 <= r15 && r15 < 128) && (o = D0[r15], o) ? o : (e = Nt(r15, r15 < 0 ? -1 : 0, false), n && (D0[r15] = e), e)); } - Nt.fromInt = Bu; - function To(r, t8) { - if (isNaN(r)) - return t8 ? Lu : _o; + kt.fromInt = Du; + function No(r15, t8) { + if (isNaN(r15)) + return t8 ? Ru : To; if (t8) { - if (r < 0) - return Lu; - if (r >= O0) - return B0; + if (r15 < 0) + return Ru; + if (r15 >= M0) + return z0; } else { - if (r <= -F0) - return Vr; - if (r + 1 >= F0) - return L0; + if (r15 <= -P0) + return zr; + if (r15 + 1 >= P0) + return B0; } - return r < 0 ? To(-r, t8).neg() : Tt(r % oc | 0, r / oc | 0, t8); + return r15 < 0 ? No(-r15, t8).neg() : Nt(r15 % Xp | 0, r15 / Xp | 0, t8); } - Nt.fromNumber = To; - function Tt(r, t8, e) { - return new Nt(r, t8, e); + kt.fromNumber = No; + function Nt(r15, t8, e) { + return new kt(r15, t8, e); } - Nt.fromBits = Tt; - var Zm = Math.pow; - function cw(r, t8, e) { - if (r.length === 0) + kt.fromBits = Nt; + var Ym = Math.pow; + function pw(r15, t8, e) { + if (r15.length === 0) throw Error("empty string"); - if (r === "NaN" || r === "Infinity" || r === "+Infinity" || r === "-Infinity") - return _o; + if (r15 === "NaN" || r15 === "Infinity" || r15 === "+Infinity" || r15 === "-Infinity") + return To; if (typeof t8 == "number" ? (e = t8, t8 = false) : t8 = !!t8, e = e || 10, e < 2 || 36 < e) throw RangeError("radix"); var o; - if ((o = r.indexOf("-")) > 0) + if ((o = r15.indexOf("-")) > 0) throw Error("interior hyphen"); if (o === 0) - return cw(r.substring(1), t8, e).neg(); - for (var n = To(Zm(e, 8)), s = _o, a = 0; a < r.length; a += 8) { - var i = Math.min(8, r.length - a), p = parseInt(r.substring(a, a + i), e); + return pw(r15.substring(1), t8, e).neg(); + for (var n = No(Ym(e, 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), e); if (i < 8) { - var u = To(Zm(e, i)); - s = s.mul(u).add(To(p)); + var u = No(Ym(e, i)); + s = s.mul(u).add(No(p)); } else - s = s.mul(n), s = s.add(To(p)); + s = s.mul(n), s = s.add(No(p)); } return s.unsigned = t8, s; } - Nt.fromString = cw; - function Fs(r, t8) { - return typeof r == "number" ? To(r, t8) : typeof r == "string" ? cw(r, t8) : Tt(r.low, r.high, typeof t8 == "boolean" ? t8 : r.unsigned); + kt.fromString = pw; + function As(r15, t8) { + return typeof r15 == "number" ? No(r15, t8) : typeof r15 == "string" ? pw(r15, t8) : Nt(r15.low, r15.high, typeof t8 == "boolean" ? t8 : r15.unsigned); } - Nt.fromValue = Fs; - var A0 = 65536, XG = 1 << 24, oc = A0 * A0, O0 = oc * oc, F0 = O0 / 2, P0 = Bu(XG), _o = Bu(0); - Nt.ZERO = _o; - var Lu = Bu(0, true); - Nt.UZERO = Lu; - var rc = Bu(1); - Nt.ONE = rc; - var M0 = Bu(1, true); - Nt.UONE = M0; - var pw = Bu(-1); - Nt.NEG_ONE = pw; - var L0 = Tt(-1, 2147483647, false); - Nt.MAX_VALUE = L0; - var B0 = Tt(-1, -1, true); - Nt.MAX_UNSIGNED_VALUE = B0; - var Vr = Tt(0, -2147483648, false); - Nt.MIN_VALUE = Vr; - var de = Nt.prototype; + kt.fromValue = As; + var F0 = 65536, YG = 1 << 24, Xp = F0 * F0, M0 = Xp * Xp, P0 = M0 / 2, O0 = Du(YG), To = Du(0); + kt.ZERO = To; + var Ru = Du(0, true); + kt.UZERO = Ru; + var jp = Du(1); + kt.ONE = jp; + var L0 = Du(1, true); + kt.UONE = L0; + var uw = Du(-1); + kt.NEG_ONE = uw; + var B0 = Nt(-1, 2147483647, false); + kt.MAX_VALUE = B0; + var z0 = Nt(-1, -1, true); + kt.MAX_UNSIGNED_VALUE = z0; + var zr = Nt(0, -2147483648, false); + kt.MIN_VALUE = zr; + var de = kt.prototype; de.toInt = function() { return this.unsigned ? this.low >>> 0 : this.low; }; de.toNumber = function() { - return this.unsigned ? (this.high >>> 0) * oc + (this.low >>> 0) : this.high * oc + (this.low >>> 0); + return this.unsigned ? (this.high >>> 0) * Xp + (this.low >>> 0) : this.high * Xp + (this.low >>> 0); }; de.toString = function(t8) { if (t8 = t8 || 10, t8 < 2 || 36 < t8) @@ -651,12 +652,12 @@ var V0 = qt((tle, z0) => { if (this.isZero()) return "0"; if (this.isNegative()) - if (this.eq(Vr)) { - var e = To(t8), o = this.div(e), n = o.mul(e).sub(this); + if (this.eq(zr)) { + var e = No(t8), o = this.div(e), n = o.mul(e).sub(this); return o.toString(t8) + n.toInt().toString(t8); } else return "-" + this.neg().toString(t8); - for (var s = To(Zm(t8, 6), this.unsigned), a = this, i = ""; ; ) { + for (var s = No(Ym(t8, 6), this.unsigned), a = this, i = ""; ; ) { var p = a.div(s), u = a.sub(p.mul(s)).toInt() >>> 0, c = u.toString(t8); if (a = p, a.isZero()) return c + i; @@ -679,7 +680,7 @@ var V0 = qt((tle, z0) => { }; de.getNumBitsAbs = function() { if (this.isNegative()) - return this.eq(Vr) ? 64 : this.neg().getNumBitsAbs(); + return this.eq(zr) ? 64 : this.neg().getNumBitsAbs(); for (var t8 = this.high != 0 ? this.high : this.low, e = 31; e > 0 && !(t8 & 1 << e); e--) ; return this.high != 0 ? e + 33 : e + 1; @@ -701,7 +702,7 @@ var V0 = qt((tle, z0) => { return (this.low & 1) === 0; }; de.equals = function(t8) { - return Wr(t8) || (t8 = Fs(t8)), this.unsigned !== t8.unsigned && this.high >>> 31 === 1 && t8.high >>> 31 === 1 ? false : this.high === t8.high && this.low === t8.low; + return Vr(t8) || (t8 = As(t8)), this.unsigned !== t8.unsigned && this.high >>> 31 === 1 && t8.high >>> 31 === 1 ? false : this.high === t8.high && this.low === t8.low; }; de.eq = de.equals; de.notEquals = function(t8) { @@ -728,137 +729,137 @@ var V0 = qt((tle, z0) => { de.gte = de.greaterThanOrEqual; de.ge = de.greaterThanOrEqual; de.compare = function(t8) { - if (Wr(t8) || (t8 = Fs(t8)), this.eq(t8)) + if (Vr(t8) || (t8 = As(t8)), this.eq(t8)) return 0; var e = this.isNegative(), o = t8.isNegative(); return e && !o ? -1 : !e && o ? 1 : this.unsigned ? t8.high >>> 0 > this.high >>> 0 || t8.high === this.high && t8.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(t8).isNegative() ? -1 : 1; }; de.comp = de.compare; de.negate = function() { - return !this.unsigned && this.eq(Vr) ? Vr : this.not().add(rc); + return !this.unsigned && this.eq(zr) ? zr : this.not().add(jp); }; de.neg = de.negate; de.add = function(t8) { - Wr(t8) || (t8 = Fs(t8)); + Vr(t8) || (t8 = As(t8)); var e = this.high >>> 16, o = this.high & 65535, n = this.low >>> 16, s = this.low & 65535, a = t8.high >>> 16, i = t8.high & 65535, p = t8.low >>> 16, u = t8.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 += e + a, c &= 65535, Tt(m << 16 | d, c << 16 | l, this.unsigned); + 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 += e + a, c &= 65535, Nt(m << 16 | d, c << 16 | l, this.unsigned); }; de.subtract = function(t8) { - return Wr(t8) || (t8 = Fs(t8)), this.add(t8.neg()); + return Vr(t8) || (t8 = As(t8)), this.add(t8.neg()); }; de.sub = de.subtract; de.multiply = function(t8) { if (this.isZero()) - return _o; - if (Wr(t8) || (t8 = Fs(t8)), No) { - var e = No.mul(this.low, this.high, t8.low, t8.high); - return Tt(e, No.get_high(), this.unsigned); + return To; + if (Vr(t8) || (t8 = As(t8)), ko) { + var e = ko.mul(this.low, this.high, t8.low, t8.high); + return Nt(e, ko.get_high(), this.unsigned); } if (t8.isZero()) - return _o; - if (this.eq(Vr)) - return t8.isOdd() ? Vr : _o; - if (t8.eq(Vr)) - return this.isOdd() ? Vr : _o; + return To; + if (this.eq(zr)) + return t8.isOdd() ? zr : To; + if (t8.eq(zr)) + return this.isOdd() ? zr : To; if (this.isNegative()) return t8.isNegative() ? this.neg().mul(t8.neg()) : this.neg().mul(t8).neg(); if (t8.isNegative()) return this.mul(t8.neg()).neg(); - if (this.lt(P0) && t8.lt(P0)) - return To(this.toNumber() * t8.toNumber(), this.unsigned); + if (this.lt(O0) && t8.lt(O0)) + return No(this.toNumber() * t8.toNumber(), this.unsigned); var o = this.high >>> 16, n = this.high & 65535, s = this.low >>> 16, a = this.low & 65535, i = t8.high >>> 16, p = t8.high & 65535, u = t8.low >>> 16, c = t8.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, Tt(d << 16 | f, l << 16 | m, this.unsigned); + 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(t8) { - if (Wr(t8) || (t8 = Fs(t8)), t8.isZero()) + if (Vr(t8) || (t8 = As(t8)), t8.isZero()) throw Error("division by zero"); - if (No) { + if (ko) { if (!this.unsigned && this.high === -2147483648 && t8.low === -1 && t8.high === -1) return this; - var e = (this.unsigned ? No.div_u : No.div_s)(this.low, this.high, t8.low, t8.high); - return Tt(e, No.get_high(), this.unsigned); + var e = (this.unsigned ? ko.div_u : ko.div_s)(this.low, this.high, t8.low, t8.high); + return Nt(e, ko.get_high(), this.unsigned); } if (this.isZero()) - return this.unsigned ? Lu : _o; + return this.unsigned ? Ru : To; var o, n, s; if (this.unsigned) { if (t8.unsigned || (t8 = t8.toUnsigned()), t8.gt(this)) - return Lu; + return Ru; if (t8.gt(this.shru(1))) - return M0; - s = Lu; + return L0; + s = Ru; } else { - if (this.eq(Vr)) { - if (t8.eq(rc) || t8.eq(pw)) - return Vr; - if (t8.eq(Vr)) - return rc; + if (this.eq(zr)) { + if (t8.eq(jp) || t8.eq(uw)) + return zr; + if (t8.eq(zr)) + return jp; var a = this.shr(1); - return o = a.div(t8).shl(1), o.eq(_o) ? t8.isNegative() ? rc : pw : (n = this.sub(t8.mul(o)), s = o.add(n.div(t8)), s); - } else if (t8.eq(Vr)) - return this.unsigned ? Lu : _o; + return o = a.div(t8).shl(1), o.eq(To) ? t8.isNegative() ? jp : uw : (n = this.sub(t8.mul(o)), s = o.add(n.div(t8)), s); + } else if (t8.eq(zr)) + return this.unsigned ? Ru : To; if (this.isNegative()) return t8.isNegative() ? this.neg().div(t8.neg()) : this.neg().div(t8).neg(); if (t8.isNegative()) return this.div(t8.neg()).neg(); - s = _o; + s = To; } for (n = this; n.gte(t8); ) { o = Math.max(1, Math.floor(n.toNumber() / t8.toNumber())); - for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Zm(2, i - 48), u = To(o), c = u.mul(t8); c.isNegative() || c.gt(n); ) - o -= p, u = To(o, this.unsigned), c = u.mul(t8); - u.isZero() && (u = rc), s = s.add(u), n = n.sub(c); + for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Ym(2, i - 48), u = No(o), c = u.mul(t8); c.isNegative() || c.gt(n); ) + o -= p, u = No(o, this.unsigned), c = u.mul(t8); + u.isZero() && (u = jp), s = s.add(u), n = n.sub(c); } return s; }; de.div = de.divide; de.modulo = function(t8) { - if (Wr(t8) || (t8 = Fs(t8)), No) { - var e = (this.unsigned ? No.rem_u : No.rem_s)(this.low, this.high, t8.low, t8.high); - return Tt(e, No.get_high(), this.unsigned); + if (Vr(t8) || (t8 = As(t8)), ko) { + var e = (this.unsigned ? ko.rem_u : ko.rem_s)(this.low, this.high, t8.low, t8.high); + return Nt(e, ko.get_high(), this.unsigned); } return this.sub(this.div(t8).mul(t8)); }; de.mod = de.modulo; de.rem = de.modulo; de.not = function() { - return Tt(~this.low, ~this.high, this.unsigned); + return Nt(~this.low, ~this.high, this.unsigned); }; de.and = function(t8) { - return Wr(t8) || (t8 = Fs(t8)), Tt(this.low & t8.low, this.high & t8.high, this.unsigned); + return Vr(t8) || (t8 = As(t8)), Nt(this.low & t8.low, this.high & t8.high, this.unsigned); }; de.or = function(t8) { - return Wr(t8) || (t8 = Fs(t8)), Tt(this.low | t8.low, this.high | t8.high, this.unsigned); + return Vr(t8) || (t8 = As(t8)), Nt(this.low | t8.low, this.high | t8.high, this.unsigned); }; de.xor = function(t8) { - return Wr(t8) || (t8 = Fs(t8)), Tt(this.low ^ t8.low, this.high ^ t8.high, this.unsigned); + return Vr(t8) || (t8 = As(t8)), Nt(this.low ^ t8.low, this.high ^ t8.high, this.unsigned); }; de.shiftLeft = function(t8) { - return Wr(t8) && (t8 = t8.toInt()), (t8 &= 63) === 0 ? this : t8 < 32 ? Tt(this.low << t8, this.high << t8 | this.low >>> 32 - t8, this.unsigned) : Tt(0, this.low << t8 - 32, this.unsigned); + return Vr(t8) && (t8 = t8.toInt()), (t8 &= 63) === 0 ? this : t8 < 32 ? Nt(this.low << t8, this.high << t8 | this.low >>> 32 - t8, this.unsigned) : Nt(0, this.low << t8 - 32, this.unsigned); }; de.shl = de.shiftLeft; de.shiftRight = function(t8) { - return Wr(t8) && (t8 = t8.toInt()), (t8 &= 63) === 0 ? this : t8 < 32 ? Tt(this.low >>> t8 | this.high << 32 - t8, this.high >> t8, this.unsigned) : Tt(this.high >> t8 - 32, this.high >= 0 ? 0 : -1, this.unsigned); + return Vr(t8) && (t8 = t8.toInt()), (t8 &= 63) === 0 ? this : t8 < 32 ? Nt(this.low >>> t8 | this.high << 32 - t8, this.high >> t8, this.unsigned) : Nt(this.high >> t8 - 32, this.high >= 0 ? 0 : -1, this.unsigned); }; de.shr = de.shiftRight; de.shiftRightUnsigned = function(t8) { - if (Wr(t8) && (t8 = t8.toInt()), t8 &= 63, t8 === 0) + if (Vr(t8) && (t8 = t8.toInt()), t8 &= 63, t8 === 0) return this; var e = this.high; if (t8 < 32) { var o = this.low; - return Tt(o >>> t8 | e << 32 - t8, e >>> t8, this.unsigned); + return Nt(o >>> t8 | e << 32 - t8, e >>> t8, this.unsigned); } else - return t8 === 32 ? Tt(e, 0, this.unsigned) : Tt(e >>> t8 - 32, 0, this.unsigned); + return t8 === 32 ? Nt(e, 0, this.unsigned) : Nt(e >>> t8 - 32, 0, this.unsigned); }; de.shru = de.shiftRightUnsigned; de.shr_u = de.shiftRightUnsigned; de.toSigned = function() { - return this.unsigned ? Tt(this.low, this.high, false) : this; + return this.unsigned ? Nt(this.low, this.high, false) : this; }; de.toUnsigned = function() { - return this.unsigned ? this : Tt(this.low, this.high, true); + return this.unsigned ? this : Nt(this.low, this.high, true); }; de.toBytes = function(t8) { return t8 ? this.toBytesLE() : this.toBytesBE(); @@ -871,22 +872,22 @@ var V0 = qt((tle, z0) => { var t8 = this.high, e = this.low; return [t8 >>> 24, t8 >>> 16 & 255, t8 >>> 8 & 255, t8 & 255, e >>> 24, e >>> 16 & 255, e >>> 8 & 255, e & 255]; }; - Nt.fromBytes = function(t8, e, o) { - return o ? Nt.fromBytesLE(t8, e) : Nt.fromBytesBE(t8, e); + kt.fromBytes = function(t8, e, o) { + return o ? kt.fromBytesLE(t8, e) : kt.fromBytesBE(t8, e); }; - Nt.fromBytesLE = function(t8, e) { - return new Nt(t8[0] | t8[1] << 8 | t8[2] << 16 | t8[3] << 24, t8[4] | t8[5] << 8 | t8[6] << 16 | t8[7] << 24, e); + kt.fromBytesLE = function(t8, e) { + return new kt(t8[0] | t8[1] << 8 | t8[2] << 16 | t8[3] << 24, t8[4] | t8[5] << 8 | t8[6] << 16 | t8[7] << 24, e); }; - Nt.fromBytesBE = function(t8, e) { - return new Nt(t8[4] << 24 | t8[5] << 16 | t8[6] << 8 | t8[7], t8[0] << 24 | t8[1] << 16 | t8[2] << 8 | t8[3], e); + kt.fromBytesBE = function(t8, e) { + return new kt(t8[4] << 24 | t8[5] << 16 | t8[6] << 8 | t8[7], t8[0] << 24 | t8[1] << 16 | t8[2] << 8 | t8[3], e); }; }); -var Ik = qt(() => { +var vk = Kt(() => { }); -var vk = qt(() => { +var kk = Kt(() => { }); -var Q2 = qt((Y2, Vw) => { - (function(r, t8, e) { +var Z2 = Kt((Q2, Vw) => { + (function(r15, t8, e) { function o(i) { var p = this, u = a(); p.next = function() { @@ -922,10 +923,10 @@ var Q2 = qt((Y2, Vw) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.alea = s; - })(Y2, typeof Vw == "object" && Vw, typeof define == "function" && define); + })(Q2, typeof Vw == "object" && Vw, typeof define == "function" && define); }); -var J2 = qt((Z2, Ww) => { - (function(r, t8, e) { +var e1 = Kt((J2, Ww) => { + (function(r15, t8, e) { function o(a) { var i = this, p = ""; i.x = 0, i.y = 0, i.z = 0, i.w = 0, i.next = function() { @@ -954,10 +955,10 @@ var J2 = qt((Z2, Ww) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.xor128 = s; - })(Z2, typeof Ww == "object" && Ww, typeof define == "function" && define); + })(J2, typeof Ww == "object" && Ww, typeof define == "function" && define); }); -var t1 = qt((e1, Uw) => { - (function(r, t8, e) { +var r1 = Kt((t1, Uw) => { + (function(r15, t8, e) { function o(a) { var i = this, p = ""; i.next = function() { @@ -986,10 +987,10 @@ var t1 = qt((e1, Uw) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.xorwow = s; - })(e1, typeof Uw == "object" && Uw, typeof define == "function" && define); + })(t1, typeof Uw == "object" && Uw, typeof define == "function" && define); }); -var o1 = qt((r1, Gw) => { - (function(r, t8, e) { +var n1 = Kt((o1, Gw) => { + (function(r15, t8, e) { function o(a) { var i = this; i.next = function() { @@ -1032,10 +1033,10 @@ var o1 = qt((r1, Gw) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.xorshift7 = s; - })(r1, typeof Gw == "object" && Gw, typeof define == "function" && define); + })(o1, typeof Gw == "object" && Gw, typeof define == "function" && define); }); -var s1 = qt((n1, Hw) => { - (function(r, t8, e) { +var a1 = Kt((s1, Hw) => { + (function(r15, t8, e) { function o(a) { var i = this; i.next = function() { @@ -1072,10 +1073,10 @@ var s1 = qt((n1, Hw) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.xor4096 = s; - })(n1, typeof Hw == "object" && Hw, typeof define == "function" && define); + })(s1, typeof Hw == "object" && Hw, typeof define == "function" && define); }); -var i1 = qt((a1, Kw) => { - (function(r, t8, e) { +var u1 = Kt((i1, Kw) => { + (function(r15, t8, e) { function o(a) { var i = this, p = ""; i.next = function() { @@ -1104,12 +1105,12 @@ var i1 = qt((a1, Kw) => { t8 && t8.exports ? t8.exports = s : e && e.amd ? e(function() { return s; }) : this.tychei = s; - })(a1, typeof Kw == "object" && Kw, typeof define == "function" && define); + })(i1, typeof Kw == "object" && Kw, typeof define == "function" && define); }); -var u1 = qt(() => { +var p1 = Kt(() => { }); -var c1 = qt((p1, Ld) => { - (function(r, t8, e) { +var l1 = Kt((c1, Od) => { + (function(r15, t8, e) { var o = 256, n = 6, s = 52, a = "random", i = e.pow(o, n), p = e.pow(2, s), u = p * 2, c = o - 1, l; function m(C, S, k) { var _ = []; @@ -1164,72 +1165,72 @@ var c1 = qt((p1, Ld) => { function x() { try { var C; - return l && (C = l.randomBytes) ? C = C(o) : (C = new Uint8Array(o), (r.crypto || r.msCrypto).getRandomValues(C)), b(C); + return l && (C = l.randomBytes) ? C = C(o) : (C = new Uint8Array(o), (r15.crypto || r15.msCrypto).getRandomValues(C)), b(C); } catch (_) { - var S = r.navigator, k = S && S.plugins; - return [+/* @__PURE__ */ new Date(), r, k, r.screen, b(t8)]; + var S = r15.navigator, k = S && S.plugins; + return [+/* @__PURE__ */ new Date(), r15, k, r15.screen, b(t8)]; } } function b(C) { return String.fromCharCode.apply(0, C); } - if (g(e.random(), t8), typeof Ld == "object" && Ld.exports) { - Ld.exports = m; + if (g(e.random(), t8), typeof Od == "object" && Od.exports) { + Od.exports = m; try { - l = u1(); + l = p1(); } catch (C) { } } else typeof define == "function" && define.amd ? define(function() { return m; }) : e["seed" + a] = m; - })(typeof self != "undefined" ? self : p1, [], Math); + })(typeof self != "undefined" ? self : c1, [], Math); }); -var qw = qt((Y2e, l1) => { - var vq = Q2(), kq = J2(), Nq = t1(), Tq = o1(), _q = s1(), $q = i1(), Qu = c1(); - Qu.alea = vq; - Qu.xor128 = kq; - Qu.xorwow = Nq; - Qu.xorshift7 = Tq; - Qu.xor4096 = _q; - Qu.tychei = $q; - l1.exports = Qu; +var qw = Kt((Y2e, m1) => { + var vq = Z2(), kq = e1(), Nq = r1(), Tq = n1(), _q = a1(), $q = u1(), Gu = l1(); + Gu.alea = vq; + Gu.xor128 = kq; + Gu.xorwow = Nq; + Gu.xorshift7 = Tq; + Gu.xor4096 = _q; + Gu.tychei = $q; + m1.exports = Gu; }); -var Bv = qt(() => { +var zv = Kt(() => { }); -var zv = qt(() => { +var Vv = Kt(() => { }); -var RB = qt(() => { +var DB = Kt(() => { }); -var DB = qt(() => { +var AB = Kt(() => { }); -var AB = qt(() => { +var FB = Kt(() => { }); -var FB = qt((Wg, Wv) => { - var Vv = (() => { - var r = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; - return typeof __filename != "undefined" && (r = r || __filename), function(t8) { +var PB = Kt((Vg, Uv) => { + var Wv = (() => { + var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; + return typeof __filename != "undefined" && (r15 = r15 || __filename), function(t8) { t8 = t8 || {}; function e() { - return oe.buffer != Ge && _t(oe.buffer), mt; + return oe.buffer != Ge && Tt(oe.buffer), lt; } function o() { - return oe.buffer != Ge && _t(oe.buffer), it; + return oe.buffer != Ge && Tt(oe.buffer), it; } function n() { - return oe.buffer != Ge && _t(oe.buffer), gt; + return oe.buffer != Ge && Tt(oe.buffer), ht; } function s() { - return oe.buffer != Ge && _t(oe.buffer), Lr; + return oe.buffer != Ge && Tt(oe.buffer), Mr; } function a() { - return oe.buffer != Ge && _t(oe.buffer), Lt; + return oe.buffer != Ge && Tt(oe.buffer), Mt; } function i() { - return oe.buffer != Ge && _t(oe.buffer), to; + return oe.buffer != Ge && Tt(oe.buffer), eo; } function p() { - return oe.buffer != Ge && _t(oe.buffer), nr; + return oe.buffer != Ge && Tt(oe.buffer), rr; } var u = typeof t8 != "undefined" ? t8 : {}, c, l; u.ready = new Promise(function(F, V) { @@ -1245,26 +1246,26 @@ var FB = qt((Wg, Wv) => { } var E, R, D, P; function O(F) { - if (F instanceof Eu) + if (F instanceof Iu) return; j("exiting due to exception: " + F); } if (C) { - var M = Bv(), L = zv(); - b ? k = L.dirname(k) + "/" : k = __dirname + "/", E = (V, ue) => (V = zp(V) ? new URL(V) : L.normalize(V), M.readFileSync(V, ue ? void 0 : "utf8")), D = (V) => { + var M = zv(), L = Vv(); + b ? k = L.dirname(k) + "/" : k = __dirname + "/", E = (V, ue) => (V = Dp(V) ? new URL(V) : L.normalize(V), M.readFileSync(V, ue ? void 0 : "utf8")), D = (V) => { var ue = E(V, true); return ue.buffer || (ue = new Uint8Array(ue)), ue; }, R = (V, ue, Ee) => { - V = zp(V) ? new URL(V) : L.normalize(V), M.readFile(V, function(Be, Le) { + V = Dp(V) ? new URL(V) : L.normalize(V), M.readFile(V, function(Be, Le) { Be ? Ee(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 Eu)) + if (!(V instanceof Iu)) throw V; }), process.on("unhandledRejection", function(V) { throw V; }), g = (V, ue) => { - if (Bo()) + if (Lo()) throw process.exitCode = V, ue; O(ue), process.exit(V); }, u.inspect = function() { @@ -1272,13 +1273,13 @@ var FB = qt((Wg, Wv) => { }; let F; try { - F = RB(); + F = DB(); } 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 || (E = (F) => { + (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 || (E = (F) => { var V = new XMLHttpRequest(); return V.open("GET", F, false), V.send(null), V.responseText; }, b && (D = (F) => { @@ -1294,7 +1295,7 @@ var FB = qt((Wg, Wv) => { ue(); }, Ee.onerror = ue, Ee.send(null); }), P = (F) => document.title = F); - C && typeof performance == "undefined" && (global.performance = DB().performance); + C && typeof performance == "undefined" && (global.performance = AB().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 + ` @@ -1304,10 +1305,10 @@ var FB = qt((Wg, Wv) => { var q = 4, Y = Atomics.load, J = Atomics.store, re = Atomics.compareExchange, ne; u.wasmBinary && (ne = u.wasmBinary); var ee = u.noExitRuntime || true; - typeof WebAssembly != "object" && $u("no native wasm support detected"); + typeof WebAssembly != "object" && Su("no native wasm support detected"); var oe, ie, le = false, be; function _e(F, V) { - F || $u(V); + F || Su(V); } var ve = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; function Fe(F, V, ue) { @@ -1327,12 +1328,12 @@ var FB = qt((Wg, Wv) => { Le += String.fromCharCode((ge & 31) << 6 | Ne); continue; } - var Pt = F[V++] & 63; - if ((ge & 240) == 224 ? ge = (ge & 15) << 12 | Ne << 6 | Pt : ge = (ge & 7) << 18 | Ne << 12 | Pt << 6 | F[V++] & 63, ge < 65536) + 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); else { - var so = ge - 65536; - Le += String.fromCharCode(55296 | so >> 10, 56320 | so & 1023); + var no = ge - 65536; + Le += String.fromCharCode(55296 | no >> 10, 56320 | no & 1023); } } return Le; @@ -1346,8 +1347,8 @@ var FB = qt((Wg, Wv) => { for (var Be = ue, Le = ue + Ee - 1, ge = 0; ge < F.length; ++ge) { var Ne = F.charCodeAt(ge); if (Ne >= 55296 && Ne <= 57343) { - var Pt = F.charCodeAt(++ge); - Ne = 65536 + ((Ne & 1023) << 10) | Pt & 1023; + var Ft = F.charCodeAt(++ge); + Ne = 65536 + ((Ne & 1023) << 10) | Ft & 1023; } if (Ne <= 127) { if (ue >= Le) @@ -1369,139 +1370,139 @@ var FB = qt((Wg, Wv) => { } return V[ue >>> 0] = 0, ue - Be; } - function lt(F, V, ue) { + function ct(F, V, ue) { return st(F, o(), V, ue); } - var Ge, mt, it, gt, xt, Lr, Lt, to, nr; + var Ge, lt, it, ht, gt, Mr, Mt, eo, rr; S && (Ge = u.buffer); - function _t(F) { - Ge = F, u.HEAP8 = mt = new Int8Array(F), u.HEAP16 = gt = new Int16Array(F), u.HEAP32 = Lr = new Int32Array(F), u.HEAPU8 = it = new Uint8Array(F), u.HEAPU16 = xt = new Uint16Array(F), u.HEAPU32 = Lt = new Uint32Array(F), u.HEAPF32 = to = new Float32Array(F), u.HEAPF64 = nr = new Float64Array(F); + function Tt(F) { + Ge = F, u.HEAP8 = lt = new Int8Array(F), u.HEAP16 = ht = new Int16Array(F), u.HEAP32 = Mr = new Int32Array(F), u.HEAPU8 = it = new Uint8Array(F), u.HEAPU16 = gt = new Uint16Array(F), u.HEAPU32 = Mt = new Uint32Array(F), u.HEAPF32 = eo = new Float32Array(F), u.HEAPF64 = rr = new Float64Array(F); } - var sr = u.INITIAL_MEMORY || 16777216; + var or = u.INITIAL_MEMORY || 16777216; if (S) oe = u.wasmMemory, Ge = u.buffer; else if (u.wasmMemory) oe = u.wasmMemory; - else if (oe = new WebAssembly.Memory({ initial: sr / 65536, maximum: 65536, shared: true }), !(oe.buffer instanceof SharedArrayBuffer)) + 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 && (Ge = oe.buffer), sr = Ge.byteLength, _t(Ge); - var ar, ro = [], oo = [], hr = [], Wa = false; - function Bo() { + oe && (Ge = oe.buffer), or = Ge.byteLength, Tt(Ge); + var nr, to = [], ro = [], fr = [], Va = false; + function Lo() { return ee; } function Ks() { if (u.preRun) for (typeof u.preRun == "function" && (u.preRun = [u.preRun]); u.preRun.length; ) - sl(u.preRun.shift()); - ul(ro); + tl(u.preRun.shift()); + nl(to); } - function Yt() { - Wa = true, !S && ul(oo); + function Xt() { + Va = true, !S && nl(ro); } - function Ua() { + function Wa() { if (!S) { if (u.postRun) for (typeof u.postRun == "function" && (u.postRun = [u.postRun]); u.postRun.length; ) - l0(u.postRun.shift()); - ul(hr); + m0(u.postRun.shift()); + nl(fr); } } - function sl(F) { + function tl(F) { + to.unshift(F); + } + function rl(F) { ro.unshift(F); } - function al(F) { - oo.unshift(F); + function m0(F) { + fr.unshift(F); } - function l0(F) { - hr.unshift(F); + var vi = 0, Rp = null, Ua = null; + function by(F) { + vi++, u.monitorRunDependencies && u.monitorRunDependencies(vi); } - var Ti = 0, Bp = null, Ga = null; - function Cy(F) { - Ti++, u.monitorRunDependencies && u.monitorRunDependencies(Ti); - } - function wm(F) { - if (Ti--, u.monitorRunDependencies && u.monitorRunDependencies(Ti), Ti == 0 && (Bp !== null && (clearInterval(Bp), Bp = null), Ga)) { - var V = Ga; - Ga = null, V(); + function bm(F) { + if (vi--, u.monitorRunDependencies && u.monitorRunDependencies(vi), vi == 0 && (Rp !== null && (clearInterval(Rp), Rp = null), Ua)) { + var V = Ua; + Ua = null, V(); } } - function $u(F) { + function Su(F) { u.onAbort && u.onAbort(F), F = "Aborted(" + F + ")", j(F), le = true, 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); + var Cy = "data:application/octet-stream;base64,"; + function Cm(F) { + return F.startsWith(Cy); } - function zp(F) { + function Dp(F) { return F.startsWith("file://"); } - var gr; - gr = "tfjs-backend-wasm-threaded-simd.wasm", Sm(gr) || (gr = _(gr)); - function Im(F) { + var hr; + hr = "tfjs-backend-wasm-threaded-simd.wasm", Cm(hr) || (hr = _(hr)); + function wm(F) { try { - if (F == gr && ne) + 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) { - $u(V); + Su(V); } } - function Sy() { + function wy() { if (!ne && (x || b)) { - if (typeof fetch == "function" && !zp(gr)) - return fetch(gr, { credentials: "same-origin" }).then(function(F) { + if (typeof fetch == "function" && !Dp(hr)) + return fetch(hr, { credentials: "same-origin" }).then(function(F) { if (!F.ok) - throw "failed to load wasm binary file at '" + gr + "'"; + throw "failed to load wasm binary file at '" + hr + "'"; return F.arrayBuffer(); }).catch(function() { - return Im(gr); + return wm(hr); }); if (R) return new Promise(function(F, V) { - R(gr, function(ue) { + R(hr, function(ue) { F(new Uint8Array(ue)); }, V); }); } return Promise.resolve().then(function() { - return Im(gr); + return wm(hr); }); } - function Iy() { - var F = { env: Om, wasi_snapshot_preview1: Om }; + function Sy() { + var F = { env: Fm, wasi_snapshot_preview1: Fm }; function V(ge, Ne) { - var Pt = ge.exports; - if (u.asm = Pt, Dy(u.asm._emscripten_tls_init), ar = u.asm.__indirect_function_table, al(u.asm.__wasm_call_ctors), ie = Ne, !S) { - var so = Me.unusedWorkers.length; - Me.unusedWorkers.forEach(function(Ka) { - Me.loadWasmModuleToWorker(Ka, function() { - --so || wm("wasm-instantiate"); + var Ft = ge.exports; + if (u.asm = Ft, Ry(u.asm._emscripten_tls_init), nr = u.asm.__indirect_function_table, rl(u.asm.__wasm_call_ctors), ie = Ne, !S) { + var no = Me.unusedWorkers.length; + Me.unusedWorkers.forEach(function(Ha) { + Me.loadWasmModuleToWorker(Ha, function() { + --no || bm("wasm-instantiate"); }); }); } } - S || Cy("wasm-instantiate"); + S || by("wasm-instantiate"); function ue(ge) { V(ge.instance, ge.module); } function Ee(ge) { - return Sy().then(function(Ne) { + return wy().then(function(Ne) { return WebAssembly.instantiate(Ne, F); }).then(function(Ne) { return Ne; }).then(ge, function(Ne) { - j("failed to asynchronously prepare wasm: " + Ne), $u(Ne); + j("failed to asynchronously prepare wasm: " + Ne), Su(Ne); }); } function Be() { - return !ne && typeof WebAssembly.instantiateStreaming == "function" && !Sm(gr) && !zp(gr) && !C && typeof fetch == "function" ? fetch(gr, { credentials: "same-origin" }).then(function(ge) { + return !ne && typeof WebAssembly.instantiateStreaming == "function" && !Cm(hr) && !Dp(hr) && !C && typeof fetch == "function" ? fetch(hr, { credentials: "same-origin" }).then(function(ge) { var Ne = WebAssembly.instantiateStreaming(ge, F); - return Ne.then(ue, function(Pt) { - return j("wasm streaming compile failed: " + Pt), j("falling back to ArrayBuffer instantiation"), Ee(ue); + return Ne.then(ue, function(Ft) { + return j("wasm streaming compile failed: " + Ft), j("falling back to ArrayBuffer instantiation"), Ee(ue); }); }) : Ee(ue); } @@ -1514,23 +1515,23 @@ var FB = qt((Wg, Wv) => { } return Be().catch(l), {}; } - var m0, d0, vm = {}; - function Eu(F) { + var d0, f0, Sm = {}; + function Iu(F) { this.name = "ExitStatus", this.message = "Program terminated with exit(" + F + ")", this.status = F; } + function Iy(F) { + var V = Me.pthreads[F]; + delete Me.pthreads[F], V.terminate(), qC(F), Me.runningWorkers.splice(Me.runningWorkers.indexOf(V), 1), V.pthread_ptr = 0; + } 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 il(F) { + function ol(F) { var V = Me.pthreads[F]; _e(V), Me.returnWorkerToPool(V); } - function Ny(F) { + function ky(F) { var V = Me.getNewWorker(); if (!V) return 6; @@ -1540,27 +1541,27 @@ var FB = qt((Wg, Wv) => { 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]; + var Im = { varargs: void 0, get: function() { + Im.varargs += 4; + var F = s()[Im.varargs - 4 >>> 2]; return F; }, getStr: function(F) { var V = Pe(F); return V; } }; - function Nm(F) { + function vm(F) { if (S) - return _i(1, 1, F); - be = F, Bo() || (Me.terminateAllThreads(), u.onExit && u.onExit(F), le = true), g(F, new Eu(F)); + return ki(1, 1, F); + be = F, Lo() || (Me.terminateAllThreads(), u.onExit && u.onExit(F), le = true), g(F, new Iu(F)); } - function Ty(F, V) { + function Ny(F, V) { if (be = F, !V && S) - throw _m(F), "unwind"; - Nm(F); + throw Nm(F), "unwind"; + vm(F); } - var Tm = Ty; - function _y(F) { - if (F instanceof Eu || F == "unwind") + var km = Ny; + function Ty(F) { + if (F instanceof Iu || F == "unwind") return be; g(1, F); } @@ -1581,19 +1582,19 @@ var FB = qt((Wg, Wv) => { 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); + delete Me.pthreads[V], Me.unusedWorkers.push(F), Me.runningWorkers.splice(Me.runningWorkers.indexOf(F), 1), F.pthread_ptr = 0, C && F.unref(), qC(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 Pt = Me.pthreads[ge.targetThread]; - Pt ? Pt.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; + if (F.pthread_ptr && (Me.currentProxiedOperationCallerThread = F.pthread_ptr), ge.targetThread && ge.targetThread != zm()) { + 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" ? pl(ge.queue) : Ne === "spawnThread" ? Ny(ge) : Ne === "cleanupThread" ? il(ge.thread) : Ne === "killThread" ? vy(ge.thread) : Ne === "cancelThread" ? ky(ge.thread) : Ne === "loaded" ? (F.loaded = true, 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; + Ne === "processProxyingQueue" ? sl(ge.queue) : Ne === "spawnThread" ? ky(ge) : Ne === "cleanupThread" ? ol(ge.thread) : Ne === "killThread" ? Iy(ge.thread) : Ne === "cancelThread" ? vy(ge.thread) : Ne === "loaded" ? (F.loaded = true, 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; @@ -1606,7 +1607,7 @@ var FB = qt((Wg, Wv) => { var ue = [], Ee = ["onExit", "onAbort", "print", "printErr"]; for (var Be of Ee) u.hasOwnProperty(Be) && ue.push(Be); - F.postMessage({ cmd: "load", handlers: ue, urlOrBlob: u.mainScriptUrlOrBlob || r, wasmMemory: oe, wasmModule: ie }); + 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"); F = new Worker(V), Me.unusedWorkers.push(F); @@ -1614,71 +1615,71 @@ var FB = qt((Wg, Wv) => { return Me.unusedWorkers.length == 0 && (Me.allocateUnusedWorker(), Me.loadWasmModuleToWorker(Me.unusedWorkers[0])), Me.unusedWorkers.pop(); } }; u.PThread = Me; - function ul(F) { + function nl(F) { for (; F.length > 0; ) F.shift()(u); } - function $y() { - var F = Wm(), V = s()[F + 52 >>> 2], ue = s()[F + 56 >>> 2], Ee = V - ue; - b0(V, Ee), Um(V); + function _y() { + var F = zm(), V = s()[F + 52 >>> 2], ue = s()[F + 56 >>> 2], Ee = V - ue; + C0(V, Ee), Vm(V); } - u.establishStackSpace = $y; - function _m(F) { + u.establishStackSpace = _y; + function Nm(F) { if (S) - return _i(2, 0, F); + return ki(2, 0, F); try { - Tm(F); + km(F); } catch (V) { - _y(V); + Ty(V); } } - var Vp = []; - function Ey(F) { - var V = Vp[F]; - return V || (F >= Vp.length && (Vp.length = F + 1), Vp[F] = V = ar.get(F)), V; + var Ap = []; + function $y(F) { + var V = Ap[F]; + return V || (F >= Ap.length && (Ap.length = F + 1), Ap[F] = V = nr.get(F)), V; } - function Ry(F, V) { - var ue = Ey(F)(V); - Bo() ? Me.setExitStatus(ue) : y0(ue); + function Ey(F, V) { + var ue = $y(F)(V); + Lo() ? Me.setExitStatus(ue) : b0(ue); } - u.invokeEntryPoint = Ry; - function Dy(F) { + u.invokeEntryPoint = Ey; + function Ry(F) { Me.tlsInitFunctions.push(F); } + function Dy(F) { + g0(F, !b, 1, !x), Me.threadInitTLS(); + } function Ay(F) { - h0(F, !b, 1, !x), Me.threadInitTLS(); + S ? postMessage({ cmd: "cleanupThread", thread: F }) : ol(F); } - function Fy(F) { - S ? postMessage({ cmd: "cleanupThread", thread: F }) : il(F); + function Tm(F, V, ue, Ee) { + return S ? ki(3, 1, F, V, ue, Ee) : _m(F, V, ue, Ee); } - function $m(F, V, ue, Ee) { - return S ? _i(3, 1, F, V, ue, Ee) : Em(F, V, ue, Ee); - } - function Em(F, V, ue, Ee) { + function _m(F, V, ue, Ee) { 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 $m(F, V, ue, Ee); + return Tm(F, V, ue, Ee); if (Le) return Le; var ge = { startRoutine: ue, pthread_ptr: F, arg: Ee, transferList: Be }; - return S ? (ge.cmd = "spawnThread", postMessage(ge, Be), 0) : Ny(ge); + return S ? (ge.cmd = "spawnThread", postMessage(ge, Be), 0) : ky(ge); } - function Py() { + function Fy() { return 65536; } - var Oy = true; - function My() { - return Oy; + var Py = true; + function Oy() { + return Py; } - function pl(F) { - Atomics.store(s(), F >> 2, 1), Wm() && x0(F), Atomics.compareExchange(s(), F >> 2, 1, 0); + function sl(F) { + Atomics.store(s(), F >> 2, 1), zm() && y0(F), Atomics.compareExchange(s(), F >> 2, 1, 0); } - u.executeNotifiedProxyingQueue = pl; - function Ly(F, V, ue, Ee) { + u.executeNotifiedProxyingQueue = sl; + function My(F, V, ue, Ee) { if (F == V) - setTimeout(() => pl(Ee)); + setTimeout(() => sl(Ee)); else if (S) postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: Ee }); else { @@ -1689,361 +1690,361 @@ var FB = qt((Wg, Wv) => { } return 1; } - function By(F, V, ue) { + function Ly(F, V, ue) { return -1; } - function zy() { - $u(""); + function By() { + Su(""); } - function Ru(F) { - Ru.shown || (Ru.shown = {}), Ru.shown[F] || (Ru.shown[F] = 1, C && (F = "warning: " + F), j(F)); + function vu(F) { + vu.shown || (vu.shown = {}), vu.shown[F] || (vu.shown[F] = 1, C && (F = "warning: " + F), j(F)); + } + function zy() { + C || b || vu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); } function Vy() { - C || b || Ru("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() { + function $m() { return 4294901760; } - function Uy() { - return Rm(); + function Wy() { + return $m(); } - var cl; - C ? cl = () => { + var al; + C ? al = () => { var F = process.hrtime(); return F[0] * 1e3 + F[1] / 1e6; - } : cl = () => performance.timeOrigin + performance.now(); - function Gy(F, V, ue) { + } : al = () => performance.timeOrigin + performance.now(); + function Uy(F, V, ue) { o().copyWithin(F >>> 0, V >>> 0, V + ue >>> 0); } - function Hy() { - return C ? AB().cpus().length : navigator.hardwareConcurrency; + function Gy() { + return C ? FB().cpus().length : navigator.hardwareConcurrency; } - function Ky(F) { - var V = XC(), ue = F(); - return Um(V), ue; + function Hy(F) { + var V = jC(), ue = F(); + return Vm(V), ue; } - function _i(F, V) { + function ki(F, V) { var ue = arguments.length - 2, Ee = arguments; - return Ky(() => { - for (var Be = ue, Le = Gm(Be * 8), ge = Le >> 3, Ne = 0; Ne < ue; Ne++) { - var Pt = Ee[2 + Ne]; - p()[ge + Ne >>> 0] = Pt; + return Hy(() => { + for (var Be = ue, Le = Wm(Be * 8), ge = Le >> 3, Ne = 0; Ne < ue; Ne++) { + var Ft = Ee[2 + Ne]; + p()[ge + Ne >>> 0] = Ft; } - return g0(F, Be, Le, V); + return x0(F, Be, Le, V); }); } - var ll = []; - function qy(F, V, ue) { - ll.length = V; + var il = []; + function Ky(F, V, ue) { + il.length = V; for (var Ee = ue >> 3, Be = 0; Be < V; Be++) - ll[Be] = p()[Ee + Be >>> 0]; - var Le = F < 0, ge = Le ? vm[-F - 1] : rb[F]; - return ge.apply(null, ll); + il[Be] = p()[Ee + Be >>> 0]; + var Le = F < 0, ge = Le ? Sm[-F - 1] : tb[F]; + return ge.apply(null, il); } - function jy(F) { + function qy(F) { try { - return oe.grow(F - Ge.byteLength + 65535 >>> 16), _t(oe.buffer), 1; + return oe.grow(F - Ge.byteLength + 65535 >>> 16), Tt(oe.buffer), 1; } catch (V) { } } - function Xy(F) { + function jy(F) { var V = o().length; if (F = F >>> 0, F <= V) return false; - var ue = Rm(); + var ue = $m(); if (F > ue) return false; - let Ee = (Pt, so) => Pt + (so - Pt % so) % so; + let Ee = (Ft, no) => Ft + (no - Ft % no) % no; 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, Ee(Math.max(F, Le), 65536)), Ne = jy(ge); + var ge = Math.min(ue, Ee(Math.max(F, Le), 65536)), Ne = qy(ge); if (Ne) return true; } return false; } - function Yy() { + function Xy() { throw "unwind"; } - function Dm(F) { - return S ? _i(4, 1, F) : 52; + function Em(F) { + return S ? ki(4, 1, F) : 52; } - function Am(F, V, ue, Ee, Be) { - return S ? _i(5, 1, F, V, ue, Ee, Be) : 70; + function Rm(F, V, ue, Ee, Be) { + return S ? ki(5, 1, F, V, ue, Ee, Be) : 70; } - var Qy = [null, [], []]; - function Zy(F, V) { - var ue = Qy[F]; + var Yy = [null, [], []]; + function Qy(F, V) { + var ue = Yy[F]; V === 0 || V === 10 ? ((F === 1 ? U : j)(Fe(ue, 0)), ue.length = 0) : ue.push(V); } - function Fm(F, V, ue, Ee) { + function Dm(F, V, ue, Ee) { if (S) - return _i(6, 1, F, V, ue, Ee); + return ki(6, 1, F, V, ue, Ee); for (var Be = 0, Le = 0; Le < ue; Le++) { var ge = a()[V >>> 2], Ne = a()[V + 4 >>> 2]; V += 8; - for (var Pt = 0; Pt < Ne; Pt++) - Zy(F, o()[ge + Pt >>> 0]); + for (var Ft = 0; Ft < Ne; Ft++) + Qy(F, o()[ge + Ft >>> 0]); Be += Ne; } return a()[Ee >>> 2] = Be, 0; } - function Pm(F) { + function Am(F) { var V = u["_" + F]; return V; } - function Jy(F, V) { + function Zy(F, V) { e().set(F, V >>> 0); } - function eb(F, V, ue, Ee, Be) { - var Le = { string: (Br) => { - var Hp = 0; - if (Br != null && Br !== 0) { - var S0 = (Br.length << 2) + 1; - Hp = Gm(S0), lt(Br, Hp, S0); + function Jy(F, V, ue, Ee, Be) { + var Le = { string: (Lr) => { + var Mp = 0; + if (Lr != null && Lr !== 0) { + var I0 = (Lr.length << 2) + 1; + Mp = Wm(I0), ct(Lr, Mp, I0); } - return Hp; - }, array: (Br) => { - var Hp = Gm(Br.length); - return Jy(Br, Hp), Hp; + return Mp; + }, array: (Lr) => { + var Mp = Wm(Lr.length); + return Zy(Lr, Mp), Mp; } }; - function ge(Br) { - return V === "string" ? Pe(Br) : V === "boolean" ? !!Br : Br; + function ge(Lr) { + return V === "string" ? Pe(Lr) : V === "boolean" ? !!Lr : Lr; } - var Ne = Pm(F), Pt = [], so = 0; + var Ne = Am(F), Ft = [], no = 0; if (Ee) - for (var Ka = 0; Ka < Ee.length; Ka++) { - var w0 = Le[ue[Ka]]; - w0 ? (so === 0 && (so = XC()), Pt[Ka] = w0(Ee[Ka])) : Pt[Ka] = Ee[Ka]; + for (var Ha = 0; Ha < Ee.length; Ha++) { + var S0 = Le[ue[Ha]]; + S0 ? (no === 0 && (no = jC()), Ft[Ha] = S0(Ee[Ha])) : Ft[Ha] = Ee[Ha]; } - var YC = Ne.apply(null, Pt); - function CG(Br) { - return so !== 0 && Um(so), ge(Br); + var XC = Ne.apply(null, Ft); + function wG(Lr) { + return no !== 0 && Vm(no), ge(Lr); } - return YC = CG(YC), YC; + return XC = wG(XC), XC; } - function tb(F, V, ue, Ee) { + function eb(F, V, ue, Ee) { ue = ue || []; var Be = ue.every((ge) => ge === "number" || ge === "boolean"), Le = V !== "string"; - return Le && Be && !Ee ? Pm(F) : function() { - return eb(F, V, ue, arguments, Ee); + return Le && Be && !Ee ? Am(F) : function() { + return Jy(F, V, ue, arguments, Ee); }; } Me.init(); - var rb = [null, Nm, _m, $m, Dm, Am, Fm], Om = { __emscripten_init_main_thread_js: Ay, __emscripten_thread_cleanup: Fy, __pthread_create_js: Em, _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: cl, 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 }, f0 = 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); - }, $b = u._Bincount = function() { - return ($b = u._Bincount = u.asm.Bincount).apply(null, arguments); - }, Eb = u._BitwiseAnd = function() { - return (Eb = 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); - }, $C = u._MaxPool3D = function() { - return ($C = u._MaxPool3D = u.asm.MaxPool3D).apply(null, arguments); - }, EC = u._MaxPool3DGrad = function() { - return (EC = 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); - }, ml = u._OneHot = function() { - return (ml = 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); - }, Wp = u._Prelu = function() { - return (Wp = u._Prelu = u.asm.Prelu).apply(null, arguments); - }, Bm = u._Prod = function() { - return (Bm = u._Prod = u.asm.Prod).apply(null, arguments); - }, Up = u._RealDiv = function() { - return (Up = u._RealDiv = u.asm.RealDiv).apply(null, arguments); - }, Gp = u._Reciprocal = function() { - return (Gp = u._Reciprocal = u.asm.Reciprocal).apply(null, arguments); - }, KC = u._Relu = function() { - return (KC = u._Relu = u.asm.Relu).apply(null, arguments); + var tb = [null, vm, Nm, Tm, Em, Rm, Dm], Fm = { __emscripten_init_main_thread_js: Dy, __emscripten_thread_cleanup: Ay, __pthread_create_js: _m, _emscripten_default_pthread_stack_size: Fy, _emscripten_get_now_is_monotonic: Oy, _emscripten_notify_task_queue: My, _emscripten_set_offscreencanvas_size: Ly, abort: By, emscripten_check_blocking_allowed: zy, emscripten_date_now: Vy, emscripten_get_heap_max: Wy, emscripten_get_now: al, emscripten_memcpy_big: Uy, emscripten_num_logical_cores: Gy, emscripten_receive_on_main_thread_js: Ky, emscripten_resize_heap: jy, emscripten_unwind_to_js_event_loop: Xy, exit: km, fd_close: Em, fd_seek: Rm, fd_write: Dm, memory: oe || u.wasmMemory }, h0 = Sy(), rb = u.___wasm_call_ctors = function() { + return (rb = u.___wasm_call_ctors = u.asm.__wasm_call_ctors).apply(null, arguments); + }, ob = u._init = function() { + return (ob = u._init = u.asm.init).apply(null, arguments); + }, nb = u._init_with_threads_count = function() { + return (nb = u._init_with_threads_count = u.asm.init_with_threads_count).apply(null, arguments); + }, sb = u._get_threads_count = function() { + return (sb = u._get_threads_count = u.asm.get_threads_count).apply(null, arguments); + }, ab = u._register_tensor = function() { + return (ab = u._register_tensor = u.asm.register_tensor).apply(null, arguments); + }, ib = u._dispose_data = function() { + return (ib = u._dispose_data = u.asm.dispose_data).apply(null, arguments); + }, ub = u._dispose = function() { + return (ub = u._dispose = u.asm.dispose).apply(null, arguments); + }, pb = u._Abs = function() { + return (pb = u._Abs = u.asm.Abs).apply(null, arguments); + }, cb = u._Acos = function() { + return (cb = u._Acos = u.asm.Acos).apply(null, arguments); + }, lb = u._Acosh = function() { + return (lb = u._Acosh = u.asm.Acosh).apply(null, arguments); + }, mb = u._Add = function() { + return (mb = u._Add = u.asm.Add).apply(null, arguments); + }, db = u._AddN = function() { + return (db = u._AddN = u.asm.AddN).apply(null, arguments); + }, fb = u._All = function() { + return (fb = u._All = u.asm.All).apply(null, arguments); + }, hb = u._Any = function() { + return (hb = u._Any = u.asm.Any).apply(null, arguments); + }, gb = u._ArgMax = function() { + return (gb = u._ArgMax = u.asm.ArgMax).apply(null, arguments); + }, xb = u._ArgMin = function() { + return (xb = u._ArgMin = u.asm.ArgMin).apply(null, arguments); + }, yb = u._Asin = function() { + return (yb = u._Asin = u.asm.Asin).apply(null, arguments); + }, bb = u._Asinh = function() { + return (bb = u._Asinh = u.asm.Asinh).apply(null, arguments); + }, Cb = u._Atan = function() { + return (Cb = u._Atan = u.asm.Atan).apply(null, arguments); + }, wb = u._Atan2 = function() { + return (wb = u._Atan2 = u.asm.Atan2).apply(null, arguments); + }, Sb = u._Atanh = function() { + return (Sb = u._Atanh = u.asm.Atanh).apply(null, arguments); + }, Ib = u._AvgPool = function() { + return (Ib = u._AvgPool = u.asm.AvgPool).apply(null, arguments); + }, vb = u._AvgPool3D = function() { + return (vb = u._AvgPool3D = u.asm.AvgPool3D).apply(null, arguments); + }, kb = u._AvgPool3DGrad = function() { + return (kb = u._AvgPool3DGrad = u.asm.AvgPool3DGrad).apply(null, arguments); + }, Nb = u._AvgPoolGrad = function() { + return (Nb = u._AvgPoolGrad = u.asm.AvgPoolGrad).apply(null, arguments); + }, Tb = u._BatchMatMul = function() { + return (Tb = u._BatchMatMul = u.asm.BatchMatMul).apply(null, arguments); + }, _b = u._Bincount = function() { + return (_b = u._Bincount = u.asm.Bincount).apply(null, arguments); + }, $b = u._BitwiseAnd = function() { + return ($b = u._BitwiseAnd = u.asm.BitwiseAnd).apply(null, arguments); + }, Eb = u._Ceil = function() { + return (Eb = u._Ceil = u.asm.Ceil).apply(null, arguments); + }, Rb = u._ClipByValue = function() { + return (Rb = u._ClipByValue = u.asm.ClipByValue).apply(null, arguments); + }, Db = u._Conv2D = function() { + return (Db = u._Conv2D = u.asm.Conv2D).apply(null, arguments); + }, Ab = u._Conv2DBackpropInput = function() { + return (Ab = u._Conv2DBackpropInput = u.asm.Conv2DBackpropInput).apply(null, arguments); + }, Fb = u._Conv3D = function() { + return (Fb = u._Conv3D = u.asm.Conv3D).apply(null, arguments); + }, Pb = u._Conv3DBackpropFilterV2 = function() { + return (Pb = u._Conv3DBackpropFilterV2 = u.asm.Conv3DBackpropFilterV2).apply(null, arguments); + }, Ob = u._Conv3DBackpropInputV2 = function() { + return (Ob = u._Conv3DBackpropInputV2 = u.asm.Conv3DBackpropInputV2).apply(null, arguments); + }, Mb = u._Cos = function() { + return (Mb = u._Cos = u.asm.Cos).apply(null, arguments); + }, Lb = u._Cosh = function() { + return (Lb = u._Cosh = u.asm.Cosh).apply(null, arguments); + }, Bb = u._CropAndResize = function() { + return (Bb = u._CropAndResize = u.asm.CropAndResize).apply(null, arguments); + }, zb = u._Cumprod = function() { + return (zb = u._Cumprod = u.asm.Cumprod).apply(null, arguments); + }, Vb = u._Cumsum = function() { + return (Vb = u._Cumsum = u.asm.Cumsum).apply(null, arguments); + }, Wb = u._DenseBincount = function() { + return (Wb = u._DenseBincount = u.asm.DenseBincount).apply(null, arguments); + }, Ub = u._DepthToSpace = function() { + return (Ub = u._DepthToSpace = u.asm.DepthToSpace).apply(null, arguments); + }, Gb = u._DepthwiseConv2dNative = function() { + return (Gb = u._DepthwiseConv2dNative = u.asm.DepthwiseConv2dNative).apply(null, arguments); + }, Hb = u._Diag = function() { + return (Hb = u._Diag = u.asm.Diag).apply(null, arguments); + }, Kb = u._Dilation2D = function() { + return (Kb = u._Dilation2D = u.asm.Dilation2D).apply(null, arguments); + }, qb = u._Dilation2DBackpropFilter = function() { + return (qb = u._Dilation2DBackpropFilter = u.asm.Dilation2DBackpropFilter).apply(null, arguments); + }, jb = u._Dilation2DBackpropInput = function() { + return (jb = u._Dilation2DBackpropInput = u.asm.Dilation2DBackpropInput).apply(null, arguments); + }, Xb = u._Elu = function() { + return (Xb = u._Elu = u.asm.Elu).apply(null, arguments); + }, Yb = u._EluGrad = function() { + return (Yb = u._EluGrad = u.asm.EluGrad).apply(null, arguments); + }, Qb = u._Equal = function() { + return (Qb = u._Equal = u.asm.Equal).apply(null, arguments); + }, Zb = u._Erf = function() { + return (Zb = u._Erf = u.asm.Erf).apply(null, arguments); + }, Jb = u._Exp = function() { + return (Jb = u._Exp = u.asm.Exp).apply(null, arguments); + }, eC = u._Expm1 = function() { + return (eC = u._Expm1 = u.asm.Expm1).apply(null, arguments); + }, tC = u._FlipLeftRight = function() { + return (tC = u._FlipLeftRight = u.asm.FlipLeftRight).apply(null, arguments); + }, rC = u._Floor = function() { + return (rC = u._Floor = u.asm.Floor).apply(null, arguments); + }, oC = u._FloorDiv = function() { + return (oC = u._FloorDiv = u.asm.FloorDiv).apply(null, arguments); + }, nC = u._FusedBatchNorm = function() { + return (nC = u._FusedBatchNorm = u.asm.FusedBatchNorm).apply(null, arguments); + }, sC = u._FusedConv2D = function() { + return (sC = u._FusedConv2D = u.asm.FusedConv2D).apply(null, arguments); + }, aC = u._FusedDepthwiseConv2D = function() { + return (aC = u._FusedDepthwiseConv2D = u.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, iC = u._Gather = function() { + return (iC = u._Gather = u.asm.Gather).apply(null, arguments); + }, uC = u._GatherNd = function() { + return (uC = u._GatherNd = u.asm.GatherNd).apply(null, arguments); + }, pC = u._Greater = function() { + return (pC = u._Greater = u.asm.Greater).apply(null, arguments); + }, cC = u._GreaterEqual = function() { + return (cC = u._GreaterEqual = u.asm.GreaterEqual).apply(null, arguments); + }, lC = u._IsFinite = function() { + return (lC = u._IsFinite = u.asm.IsFinite).apply(null, arguments); + }, mC = u._IsInf = function() { + return (mC = u._IsInf = u.asm.IsInf).apply(null, arguments); + }, dC = u._IsNan = function() { + return (dC = u._IsNan = u.asm.IsNan).apply(null, arguments); + }, fC = u._LRN = function() { + return (fC = u._LRN = u.asm.LRN).apply(null, arguments); + }, hC = u._LRNGrad = function() { + return (hC = u._LRNGrad = u.asm.LRNGrad).apply(null, arguments); + }, gC = u._LeakyRelu = function() { + return (gC = u._LeakyRelu = u.asm.LeakyRelu).apply(null, arguments); + }, xC = u._Less = function() { + return (xC = u._Less = u.asm.Less).apply(null, arguments); + }, yC = u._LessEqual = function() { + return (yC = u._LessEqual = u.asm.LessEqual).apply(null, arguments); + }, bC = u._LinSpace = function() { + return (bC = u._LinSpace = u.asm.LinSpace).apply(null, arguments); + }, CC = u._Log = function() { + return (CC = u._Log = u.asm.Log).apply(null, arguments); + }, wC = u._Log1p = function() { + return (wC = u._Log1p = u.asm.Log1p).apply(null, arguments); + }, SC = u._LogicalAnd = function() { + return (SC = u._LogicalAnd = u.asm.LogicalAnd).apply(null, arguments); + }, IC = u._LogicalNot = function() { + return (IC = u._LogicalNot = u.asm.LogicalNot).apply(null, arguments); + }, vC = u._LogicalOr = function() { + return (vC = u._LogicalOr = u.asm.LogicalOr).apply(null, arguments); + }, kC = u._LogicalXor = function() { + return (kC = u._LogicalXor = u.asm.LogicalXor).apply(null, arguments); + }, NC = u._Max = function() { + return (NC = u._Max = u.asm.Max).apply(null, arguments); + }, TC = u._MaxPool = function() { + return (TC = u._MaxPool = u.asm.MaxPool).apply(null, arguments); + }, _C = u._MaxPool3D = function() { + return (_C = u._MaxPool3D = u.asm.MaxPool3D).apply(null, arguments); + }, $C = u._MaxPool3DGrad = function() { + return ($C = u._MaxPool3DGrad = u.asm.MaxPool3DGrad).apply(null, arguments); + }, EC = u._MaxPoolGrad = function() { + return (EC = u._MaxPoolGrad = u.asm.MaxPoolGrad).apply(null, arguments); + }, RC = u._MaxPoolWithArgmax = function() { + return (RC = u._MaxPoolWithArgmax = u.asm.MaxPoolWithArgmax).apply(null, arguments); + }, DC = u._Maximum = function() { + return (DC = u._Maximum = u.asm.Maximum).apply(null, arguments); + }, AC = u._Mean = function() { + return (AC = u._Mean = u.asm.Mean).apply(null, arguments); + }, FC = u._Min = function() { + return (FC = u._Min = u.asm.Min).apply(null, arguments); + }, PC = u._Minimum = function() { + return (PC = u._Minimum = u.asm.Minimum).apply(null, arguments); + }, OC = u._MirrorPad = function() { + return (OC = u._MirrorPad = u.asm.MirrorPad).apply(null, arguments); + }, MC = u._Mod = function() { + return (MC = u._Mod = u.asm.Mod).apply(null, arguments); + }, LC = u._Multinomial = function() { + return (LC = u._Multinomial = u.asm.Multinomial).apply(null, arguments); + }, BC = u._Multiply = function() { + return (BC = u._Multiply = u.asm.Multiply).apply(null, arguments); + }, zC = u._Neg = function() { + return (zC = u._Neg = u.asm.Neg).apply(null, arguments); + }, VC = u._NonMaxSuppressionV3 = function() { + return (VC = u._NonMaxSuppressionV3 = u.asm.NonMaxSuppressionV3).apply(null, arguments); + }, WC = u._NonMaxSuppressionV4 = function() { + return (WC = u._NonMaxSuppressionV4 = u.asm.NonMaxSuppressionV4).apply(null, arguments); + }, Pm = u._NonMaxSuppressionV5 = function() { + return (Pm = u._NonMaxSuppressionV5 = u.asm.NonMaxSuppressionV5).apply(null, arguments); + }, Om = u._NotEqual = function() { + return (Om = u._NotEqual = u.asm.NotEqual).apply(null, arguments); + }, ul = u._OneHot = function() { + return (ul = u._OneHot = u.asm.OneHot).apply(null, arguments); + }, UC = u._PadV2 = function() { + return (UC = u._PadV2 = u.asm.PadV2).apply(null, arguments); + }, GC = u._Pow = function() { + return (GC = u._Pow = u.asm.Pow).apply(null, arguments); + }, Fp = u._Prelu = function() { + return (Fp = u._Prelu = u.asm.Prelu).apply(null, arguments); + }, Mm = u._Prod = function() { + return (Mm = u._Prod = u.asm.Prod).apply(null, arguments); + }, Pp = u._RealDiv = function() { + return (Pp = u._RealDiv = u.asm.RealDiv).apply(null, arguments); + }, Op = u._Reciprocal = function() { + return (Op = u._Reciprocal = u.asm.Reciprocal).apply(null, arguments); + }, HC = u._Relu = function() { + return (HC = 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() { @@ -2052,131 +2053,131 @@ var FB = qt((Wg, Wv) => { return ($e = 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); + }, _t = u._ResizeNearestNeighborGrad = function() { + return (_t = u._ResizeNearestNeighborGrad = u.asm.ResizeNearestNeighborGrad).apply(null, arguments); + }, $t = u._Reverse = function() { + return ($t = 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); - }, Gt = u._Rsqrt = function() { - return (Gt = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); - }, no = u._ScatterNd = function() { - return (no = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); - }, Ha = u._SearchSorted = function() { - return (Ha = u._SearchSorted = u.asm.SearchSorted).apply(null, arguments); - }, zm = u._SelectV2 = function() { - return (zm = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); - }, dl = u._Selu = function() { - return (dl = u._Selu = u.asm.Selu).apply(null, arguments); - }, qC = u._Sigmoid = function() { - return (qC = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); - }, br = u._Sign = function() { - return (br = u._Sign = u.asm.Sign).apply(null, arguments); - }, $i = u._Sin = function() { - return ($i = u._Sin = u.asm.Sin).apply(null, arguments); - }, Vm = u._Sinh = function() { - return (Vm = u._Sinh = u.asm.Sinh).apply(null, arguments); - }, WU = u._Softmax = function() { - return (WU = u._Softmax = u.asm.Softmax).apply(null, arguments); - }, UU = u._Softplus = function() { - return (UU = u._Softplus = u.asm.Softplus).apply(null, arguments); - }, GU = u._SparseFillEmptyRows = function() { - return (GU = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); - }, HU = u._SparseReshape = function() { - return (HU = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); - }, KU = u._SparseSegmentReduction = function() { - return (KU = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); - }, qU = u._SparseToDense = function() { - return (qU = u._SparseToDense = u.asm.SparseToDense).apply(null, arguments); - }, jU = u._Sqrt = function() { - return (jU = u._Sqrt = u.asm.Sqrt).apply(null, arguments); - }, XU = u._Square = function() { - return (XU = u._Square = u.asm.Square).apply(null, arguments); - }, YU = u._SquaredDifference = function() { - return (YU = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); - }, QU = u._Step = function() { - return (QU = u._Step = u.asm.Step).apply(null, arguments); - }, ZU = u._StridedSlice = function() { - return (ZU = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); - }, JU = u._Sub = function() { - return (JU = u._Sub = u.asm.Sub).apply(null, arguments); - }, eG = u._Sum = function() { - return (eG = u._Sum = u.asm.Sum).apply(null, arguments); - }, tG = u._Tan = function() { - return (tG = u._Tan = u.asm.Tan).apply(null, arguments); - }, rG = u._Tanh = function() { - return (rG = u._Tanh = u.asm.Tanh).apply(null, arguments); - }, oG = u._TensorScatterUpdate = function() { - return (oG = u._TensorScatterUpdate = u.asm.TensorScatterUpdate).apply(null, arguments); - }, nG = u._Tile = function() { - return (nG = u._Tile = u.asm.Tile).apply(null, arguments); - }, sG = u._TopK = function() { - return (sG = u._TopK = u.asm.TopK).apply(null, arguments); - }, aG = u._Transform = function() { - return (aG = u._Transform = u.asm.Transform).apply(null, arguments); - }, iG = u._Transpose = function() { - return (iG = u._Transpose = u.asm.Transpose).apply(null, arguments); - }, uG = u.__FusedMatMul = function() { - return (uG = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); - }, pG = u._malloc = function() { - return (pG = u._malloc = u.asm.malloc).apply(null, arguments); - }, cG = u._free = function() { - return (cG = u._free = u.asm.free).apply(null, arguments); - }, lG = u.__emscripten_tls_init = function() { - return (lG = 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); - }, mG = u.___errno_location = function() { - return (mG = u.___errno_location = u.asm.__errno_location).apply(null, arguments); - }, h0 = u.__emscripten_thread_init = function() { - return (h0 = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); - }, dG = u.__emscripten_thread_crashed = function() { - return (dG = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); - }, fG = u._emscripten_main_thread_process_queued_calls = function() { - return (fG = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); - }, hG = u._emscripten_main_browser_thread_id = function() { - return (hG = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); - }, g0 = u._emscripten_run_in_main_runtime_thread_js = function() { - return (g0 = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); - }, gG = u._emscripten_dispatch_to_thread_ = function() { - return (gG = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); - }, x0 = u.__emscripten_proxy_execute_task_queue = function() { - return (x0 = 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); - }, y0 = u.__emscripten_thread_exit = function() { - return (y0 = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); - }, b0 = u._emscripten_stack_set_limits = function() { - return (b0 = 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); - }, xG = u.dynCall_iijjiiii = function() { - return (xG = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); - }, yG = u.dynCall_jiji = function() { - return (yG = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); + }, Ut = u._Rsqrt = function() { + return (Ut = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); + }, oo = u._ScatterNd = function() { + return (oo = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); + }, Ga = u._SearchSorted = function() { + return (Ga = u._SearchSorted = u.asm.SearchSorted).apply(null, arguments); + }, Lm = u._SelectV2 = function() { + return (Lm = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); + }, pl = u._Selu = function() { + return (pl = u._Selu = u.asm.Selu).apply(null, arguments); + }, KC = u._Sigmoid = function() { + return (KC = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); + }, yr = u._Sign = function() { + return (yr = u._Sign = u.asm.Sign).apply(null, arguments); + }, Ni = u._Sin = function() { + return (Ni = u._Sin = u.asm.Sin).apply(null, arguments); + }, Bm = u._Sinh = function() { + return (Bm = u._Sinh = u.asm.Sinh).apply(null, arguments); + }, UU = u._Softmax = function() { + return (UU = u._Softmax = u.asm.Softmax).apply(null, arguments); + }, GU = u._Softplus = function() { + return (GU = u._Softplus = u.asm.Softplus).apply(null, arguments); + }, HU = u._SparseFillEmptyRows = function() { + return (HU = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); + }, KU = u._SparseReshape = function() { + return (KU = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); + }, qU = u._SparseSegmentReduction = function() { + return (qU = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); + }, jU = u._SparseToDense = function() { + return (jU = u._SparseToDense = u.asm.SparseToDense).apply(null, arguments); + }, XU = u._Sqrt = function() { + return (XU = u._Sqrt = u.asm.Sqrt).apply(null, arguments); + }, YU = u._Square = function() { + return (YU = u._Square = u.asm.Square).apply(null, arguments); + }, QU = u._SquaredDifference = function() { + return (QU = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); + }, ZU = u._Step = function() { + return (ZU = u._Step = u.asm.Step).apply(null, arguments); + }, JU = u._StridedSlice = function() { + return (JU = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); + }, eG = u._Sub = function() { + return (eG = u._Sub = u.asm.Sub).apply(null, arguments); + }, tG = u._Sum = function() { + return (tG = u._Sum = u.asm.Sum).apply(null, arguments); + }, rG = u._Tan = function() { + return (rG = u._Tan = u.asm.Tan).apply(null, arguments); + }, oG = u._Tanh = function() { + return (oG = u._Tanh = u.asm.Tanh).apply(null, arguments); + }, nG = u._TensorScatterUpdate = function() { + return (nG = u._TensorScatterUpdate = u.asm.TensorScatterUpdate).apply(null, arguments); + }, sG = u._Tile = function() { + return (sG = u._Tile = u.asm.Tile).apply(null, arguments); + }, aG = u._TopK = function() { + return (aG = u._TopK = u.asm.TopK).apply(null, arguments); + }, iG = u._Transform = function() { + return (iG = u._Transform = u.asm.Transform).apply(null, arguments); + }, uG = u._Transpose = function() { + return (uG = u._Transpose = u.asm.Transpose).apply(null, arguments); + }, pG = u.__FusedMatMul = function() { + return (pG = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); + }, cG = u._malloc = function() { + return (cG = u._malloc = u.asm.malloc).apply(null, arguments); + }, lG = u._free = function() { + return (lG = u._free = u.asm.free).apply(null, arguments); + }, mG = u.__emscripten_tls_init = function() { + return (mG = u.__emscripten_tls_init = u.asm._emscripten_tls_init).apply(null, arguments); + }, zm = u._pthread_self = function() { + return (zm = u._pthread_self = u.asm.pthread_self).apply(null, arguments); + }, dG = u.___errno_location = function() { + return (dG = u.___errno_location = u.asm.__errno_location).apply(null, arguments); + }, g0 = u.__emscripten_thread_init = function() { + return (g0 = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); + }, fG = u.__emscripten_thread_crashed = function() { + return (fG = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); + }, hG = u._emscripten_main_thread_process_queued_calls = function() { + return (hG = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); + }, gG = u._emscripten_main_browser_thread_id = function() { + return (gG = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); + }, x0 = u._emscripten_run_in_main_runtime_thread_js = function() { + return (x0 = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); + }, xG = u._emscripten_dispatch_to_thread_ = function() { + return (xG = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); + }, y0 = u.__emscripten_proxy_execute_task_queue = function() { + return (y0 = u.__emscripten_proxy_execute_task_queue = u.asm._emscripten_proxy_execute_task_queue).apply(null, arguments); + }, qC = u.__emscripten_thread_free_data = function() { + return (qC = u.__emscripten_thread_free_data = u.asm._emscripten_thread_free_data).apply(null, arguments); + }, b0 = u.__emscripten_thread_exit = function() { + return (b0 = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); + }, C0 = u._emscripten_stack_set_limits = function() { + return (C0 = u._emscripten_stack_set_limits = u.asm.emscripten_stack_set_limits).apply(null, arguments); + }, jC = u.stackSave = function() { + return (jC = u.stackSave = u.asm.stackSave).apply(null, arguments); + }, Vm = u.stackRestore = function() { + return (Vm = u.stackRestore = u.asm.stackRestore).apply(null, arguments); + }, Wm = u.stackAlloc = function() { + return (Wm = u.stackAlloc = u.asm.stackAlloc).apply(null, arguments); + }, yG = u.dynCall_iijjiiii = function() { + return (yG = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); + }, bG = u.dynCall_jiji = function() { + return (bG = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); }; - u.keepRuntimeAlive = Bo, u.wasmMemory = oe, u.cwrap = tb, u.ExitStatus = Eu, u.PThread = Me; - var Hm; - Ga = function F() { - Hm || C0(), Hm || (Ga = F); + u.keepRuntimeAlive = Lo, u.wasmMemory = oe, u.cwrap = eb, u.ExitStatus = Iu, u.PThread = Me; + var Um; + Ua = function F() { + Um || w0(), Um || (Ua = F); }; - function C0(F) { - if (F = F || f, Ti > 0) + function w0(F) { + if (F = F || f, vi > 0) return; if (S) { - c(u), Yt(), startWorker(u); + c(u), Xt(), startWorker(u); return; } - if (Ks(), Ti > 0) + if (Ks(), vi > 0) return; function V() { - Hm || (Hm = true, u.calledRun = true, !le && (Yt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Ua())); + Um || (Um = true, u.calledRun = true, !le && (Xt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Wa())); } u.setStatus ? (u.setStatus("Running..."), setTimeout(function() { setTimeout(function() { @@ -2187,26 +2188,26 @@ var FB = qt((Wg, Wv) => { if (u.preInit) for (typeof u.preInit == "function" && (u.preInit = [u.preInit]); u.preInit.length > 0; ) u.preInit.pop()(); - C0(); - var Km; - m && (Km = { uncaughtException: process.listeners("uncaughtException").filter(function(F) { + w0(); + var Gm; + m && (Gm = { 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; + var Hm; if (typeof WasmBackendModule != "undefined") - qm = WasmBackendModule; + Hm = WasmBackendModule; else if (typeof t8 != "undefined") - qm = t8; + Hm = t8; else throw new Error("Could not find wasm module in post.js"); - if (Km) { - var bG = qm._dispose; - qm._dispose = function() { - bG(), Km.uncaughtException.forEach(function(F) { + if (Gm) { + var CG = Hm._dispose; + Hm._dispose = function() { + CG(), Gm.uncaughtException.forEach(function(F) { process.removeListener("uncaughtException", F); - }), Km.unhandledRejection.forEach(function(F) { + }), Gm.unhandledRejection.forEach(function(F) { process.removeListener("unhandledRejection", F); }); }; @@ -2214,18 +2215,18 @@ var FB = qt((Wg, Wv) => { return t8.ready; }; })(); - typeof Wg == "object" && typeof Wv == "object" ? Wv.exports = Vv : typeof define == "function" && define.amd ? define([], function() { - return Vv; - }) : typeof Wg == "object" && (Wg.WasmBackendModuleThreadedSimd = Vv); + typeof Vg == "object" && typeof Uv == "object" ? Uv.exports = Wv : typeof define == "function" && define.amd ? define([], function() { + return Wv; + }) : typeof Vg == "object" && (Vg.WasmBackendModuleThreadedSimd = Wv); }); -var OB = qt((UFt, PB) => { - PB.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+" +var MB = Kt((GFt, OB) => { + OB.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 MB = qt((Ug, Gv) => { - var Uv = (() => { - var r = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; - return typeof __filename != "undefined" && (r = r || __filename), function(t8) { +var LB = Kt((Wg, Hv) => { + var Gv = (() => { + var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; + return typeof __filename != "undefined" && (r15 = r15 || __filename), function(t8) { t8 = t8 || {}; var e = typeof t8 != "undefined" ? t8 : {}, o, n; e.ready = new Promise(function(K, ae) { @@ -2241,21 +2242,21 @@ var MB = qt((Ug, Gv) => { } var h, g, x, b; function C(K) { - if (K instanceof Bp) + if (K instanceof Rp) return; E("exiting due to exception: " + K); } if (m) { - var S = Bv(), k = zv(); + var S = zv(), k = Vv(); 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, true); return ae.buffer || (ae = new Uint8Array(ae)), ae; }, g = (K, ae, $e) => { - K = Ks(K) ? new URL(K) : k.normalize(K), S.readFile(K, function(at, $t) { - at ? $e(at) : ae($t.buffer); + K = Ks(K) ? new URL(K) : k.normalize(K), S.readFile(K, function(at, _t) { + at ? $e(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 Bp)) + if (!(K instanceof Rp)) throw K; }), process.on("unhandledRejection", function(K) { throw K; @@ -2267,7 +2268,7 @@ var MB = qt((Ug, Gv) => { 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) => { + (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) => { @@ -2288,38 +2289,38 @@ var MB = qt((Ug, Gv) => { var R = 4, D; e.wasmBinary && (D = e.wasmBinary); var P = e.noExitRuntime || true; - typeof WebAssembly != "object" && hr("no native wasm support detected"); + typeof WebAssembly != "object" && fr("no native wasm support detected"); var O, M = false, L; function B(K, ae) { - K || hr(ae); + K || fr(ae); } var z = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; function U(K, ae, $e) { ae >>>= 0; - for (var at = ae + $e, $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; ) { + for (var at = ae + $e, _t = ae; K[_t] && !(_t >= at); ) + ++_t; + if (_t - ae > 16 && K.buffer && z) + return z.decode(K.subarray(ae, _t)); + for (var $t = ""; ae < _t; ) { var Qe = K[ae++]; if (!(Qe & 128)) { - Et += String.fromCharCode(Qe); + $t += String.fromCharCode(Qe); continue; } var Ke = K[ae++] & 63; if ((Qe & 224) == 192) { - Et += String.fromCharCode((Qe & 31) << 6 | Ke); + $t += String.fromCharCode((Qe & 31) << 6 | Ke); continue; } - var Gt = K[ae++] & 63; - if ((Qe & 240) == 224 ? Qe = (Qe & 15) << 12 | Ke << 6 | Gt : Qe = (Qe & 7) << 18 | Ke << 12 | Gt << 6 | K[ae++] & 63, Qe < 65536) - Et += String.fromCharCode(Qe); + 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) + $t += String.fromCharCode(Qe); else { - var no = Qe - 65536; - Et += String.fromCharCode(55296 | no >> 10, 56320 | no & 1023); + var oo = Qe - 65536; + $t += String.fromCharCode(55296 | oo >> 10, 56320 | oo & 1023); } } - return Et; + return $t; } function j(K, ae) { return K >>>= 0, K ? U(ne, K, ae) : ""; @@ -2327,31 +2328,31 @@ var MB = qt((Ug, Gv) => { function q(K, ae, $e, at) { if ($e >>>= 0, !(at > 0)) return 0; - for (var $t = $e, Et = $e + at - 1, Qe = 0; Qe < K.length; ++Qe) { + for (var _t = $e, $t = $e + at - 1, Qe = 0; Qe < K.length; ++Qe) { var Ke = K.charCodeAt(Qe); if (Ke >= 55296 && Ke <= 57343) { - var Gt = K.charCodeAt(++Qe); - Ke = 65536 + ((Ke & 1023) << 10) | Gt & 1023; + var Ut = K.charCodeAt(++Qe); + Ke = 65536 + ((Ke & 1023) << 10) | Ut & 1023; } if (Ke <= 127) { - if ($e >= Et) + if ($e >= $t) break; ae[$e++ >>> 0] = Ke; } else if (Ke <= 2047) { - if ($e + 1 >= Et) + if ($e + 1 >= $t) break; ae[$e++ >>> 0] = 192 | Ke >> 6, ae[$e++ >>> 0] = 128 | Ke & 63; } else if (Ke <= 65535) { - if ($e + 2 >= Et) + if ($e + 2 >= $t) break; ae[$e++ >>> 0] = 224 | Ke >> 12, ae[$e++ >>> 0] = 128 | Ke >> 6 & 63, ae[$e++ >>> 0] = 128 | Ke & 63; } else { - if ($e + 3 >= Et) + if ($e + 3 >= $t) break; ae[$e++ >>> 0] = 240 | Ke >> 18, ae[$e++ >>> 0] = 128 | Ke >> 12 & 63, ae[$e++ >>> 0] = 128 | Ke >> 6 & 63, ae[$e++ >>> 0] = 128 | Ke & 63; } } - return ae[$e >>> 0] = 0, $e - $t; + return ae[$e >>> 0] = 0, $e - _t; } function Y(K, ae, $e) { return q(K, ne, ae, $e); @@ -2360,551 +2361,551 @@ var MB = qt((Ug, Gv) => { function ve(K) { J = K, e.HEAP8 = re = new Int8Array(K), e.HEAP16 = ee = new Int16Array(K), e.HEAP32 = ie = new Int32Array(K), e.HEAPU8 = ne = new Uint8Array(K), e.HEAPU16 = oe = new Uint16Array(K), e.HEAPU32 = le = new Uint32Array(K), e.HEAPF32 = be = new Float32Array(K), e.HEAPF64 = _e = new Float64Array(K); } - var Fe = e.INITIAL_MEMORY || 16777216, Pe, st = [], lt = [], Ge = [], mt = false; + var Fe = e.INITIAL_MEMORY || 16777216, Pe, st = [], ct = [], Ge = [], lt = false; function it() { return P; } - function gt() { + function ht() { if (e.preRun) for (typeof e.preRun == "function" && (e.preRun = [e.preRun]); e.preRun.length; ) - Lt(e.preRun.shift()); - Ga(st); + Mt(e.preRun.shift()); + Ua(st); } - function xt() { - mt = true, Ga(lt); + function gt() { + lt = true, Ua(ct); } - function Lr() { + function Mr() { if (e.postRun) for (typeof e.postRun == "function" && (e.postRun = [e.postRun]); e.postRun.length; ) - nr(e.postRun.shift()); - Ga(Ge); + rr(e.postRun.shift()); + Ua(Ge); } - function Lt(K) { + function Mt(K) { st.unshift(K); } - function to(K) { - lt.unshift(K); + function eo(K) { + ct.unshift(K); } - function nr(K) { + function rr(K) { Ge.unshift(K); } - var _t = 0, sr = null, ar = null; - function ro(K) { - _t++, e.monitorRunDependencies && e.monitorRunDependencies(_t); + var Tt = 0, or = null, nr = null; + function to(K) { + Tt++, e.monitorRunDependencies && e.monitorRunDependencies(Tt); } - function oo(K) { - if (_t--, e.monitorRunDependencies && e.monitorRunDependencies(_t), _t == 0 && (sr !== null && (clearInterval(sr), sr = null), ar)) { - var ae = ar; - ar = null, ae(); + function ro(K) { + if (Tt--, e.monitorRunDependencies && e.monitorRunDependencies(Tt), Tt == 0 && (or !== null && (clearInterval(or), or = null), nr)) { + var ae = nr; + nr = null, ae(); } } - function hr(K) { + function fr(K) { e.onAbort && e.onAbort(K), K = "Aborted(" + K + ")", E(K), M = true, L = 1, K += ". Build with -sASSERTIONS for more info."; var ae = new WebAssembly.RuntimeError(K); throw n(ae), ae; } - var Wa = "data:application/octet-stream;base64,"; - function Bo(K) { - return K.startsWith(Wa); + var Va = "data:application/octet-stream;base64,"; + function Lo(K) { + return K.startsWith(Va); } function Ks(K) { return K.startsWith("file://"); } - var Yt; - Yt = "tfjs-backend-wasm.wasm", Bo(Yt) || (Yt = f(Yt)); - function Ua(K) { + var Xt; + Xt = "tfjs-backend-wasm.wasm", Lo(Xt) || (Xt = f(Xt)); + function Wa(K) { try { - if (K == Yt && D) + 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) { - hr(ae); + fr(ae); } } - function sl() { + function tl() { if (!D && (c || l)) { - if (typeof fetch == "function" && !Ks(Yt)) - return fetch(Yt, { credentials: "same-origin" }).then(function(K) { + 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 '" + Yt + "'"; + throw "failed to load wasm binary file at '" + Xt + "'"; return K.arrayBuffer(); }).catch(function() { - return Ua(Yt); + return Wa(Xt); }); if (g) return new Promise(function(K, ae) { - g(Yt, function($e) { + g(Xt, function($e) { K(new Uint8Array($e)); }, ae); }); } return Promise.resolve().then(function() { - return Ua(Yt); + return Wa(Xt); }); } - function al() { - var K = { env: il, wasi_snapshot_preview1: il }; + function rl() { + var K = { env: ol, wasi_snapshot_preview1: ol }; function ae(Qe, Ke) { - var Gt = Qe.exports; - e.asm = Gt, O = e.asm.memory, ve(O.buffer), Pe = e.asm.__indirect_function_table, to(e.asm.__wasm_call_ctors), oo("wasm-instantiate"); + var Ut = Qe.exports; + e.asm = Ut, O = e.asm.memory, ve(O.buffer), Pe = e.asm.__indirect_function_table, eo(e.asm.__wasm_call_ctors), ro("wasm-instantiate"); } - ro("wasm-instantiate"); + to("wasm-instantiate"); function $e(Qe) { ae(Qe.instance); } function at(Qe) { - return sl().then(function(Ke) { + return tl().then(function(Ke) { return WebAssembly.instantiate(Ke, K); }).then(function(Ke) { return Ke; }).then(Qe, function(Ke) { - E("failed to asynchronously prepare wasm: " + Ke), hr(Ke); + E("failed to asynchronously prepare wasm: " + Ke), fr(Ke); }); } - function $t() { - return !D && typeof WebAssembly.instantiateStreaming == "function" && !Bo(Yt) && !Ks(Yt) && !m && typeof fetch == "function" ? fetch(Yt, { credentials: "same-origin" }).then(function(Qe) { + 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($e, function(Gt) { - return E("wasm streaming compile failed: " + Gt), E("falling back to ArrayBuffer instantiation"), at($e); + return Ke.then($e, function(Ut) { + return E("wasm streaming compile failed: " + Ut), E("falling back to ArrayBuffer instantiation"), at($e); }); }) : at($e); } if (e.instantiateWasm) try { - var Et = e.instantiateWasm(K, ae); - return Et; + var $t = e.instantiateWasm(K, ae); + return $t; } catch (Qe) { E("Module.instantiateWasm callback failed with error: " + Qe), n(Qe); } - return $t().catch(n), {}; + return _t().catch(n), {}; } - var l0, Ti; - function Bp(K) { + var m0, vi; + function Rp(K) { this.name = "ExitStatus", this.message = "Program terminated with exit(" + K + ")", this.status = K; } - function Ga(K) { + function Ua(K) { for (; K.length > 0; ) K.shift()(e); } - function Cy() { - hr(""); + function by() { + fr(""); } - function wm() { + function bm() { return 4294901760; } - function $u() { - return wm(); + function Su() { + return bm(); } - function wy(K, ae, $e) { + function Cy(K, ae, $e) { ne.copyWithin(K >>> 0, ae >>> 0, ae + $e >>> 0); } - function Sm(K) { + function Cm(K) { try { return O.grow(K - J.byteLength + 65535 >>> 16), ve(O.buffer), 1; } catch (ae) { } } - function zp(K) { + function Dp(K) { var ae = ne.length; K = K >>> 0; - var $e = wm(); + var $e = bm(); if (K > $e) return false; - let at = (Gt, no) => Gt + (no - Gt % 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($e, at(Math.max(K, Et), 65536)), Ke = Sm(Qe); + let at = (Ut, oo) => Ut + (oo - Ut % oo) % oo; + for (var _t = 1; _t <= 4; _t *= 2) { + var $t = ae * (1 + 0.2 / _t); + $t = Math.min($t, K + 100663296); + var Qe = Math.min($e, at(Math.max(K, $t), 65536)), Ke = Cm(Qe); if (Ke) return true; } return false; } - var gr = { varargs: void 0, get: function() { - gr.varargs += 4; - var K = ie[gr.varargs - 4 >>> 2]; + 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) { + function wm(K) { return 52; } - function Sy(K, ae, $e, at, $t) { + function wy(K, ae, $e, at, _t) { return 70; } - var Iy = [null, [], []]; - function m0(K, ae) { - var $e = Iy[K]; + var Sy = [null, [], []]; + function d0(K, ae) { + var $e = Sy[K]; ae === 0 || ae === 10 ? ((K === 1 ? _ : E)(U($e, 0)), $e.length = 0) : $e.push(ae); } - function d0(K, ae, $e, at) { - for (var $t = 0, Et = 0; Et < $e; Et++) { + function f0(K, ae, $e, at) { + for (var _t = 0, $t = 0; $t < $e; $t++) { var Qe = le[ae >>> 2], Ke = le[ae + 4 >>> 2]; ae += 8; - for (var Gt = 0; Gt < Ke; Gt++) - m0(K, ne[Qe + Gt >>> 0]); - $t += Ke; + for (var Ut = 0; Ut < Ke; Ut++) + d0(K, ne[Qe + Ut >>> 0]); + _t += Ke; } - return le[at >>> 2] = $t, 0; + return le[at >>> 2] = _t, 0; } - function vm(K) { + function Sm(K) { var ae = e["_" + K]; return ae; } - function Eu(K, ae) { + function Iu(K, ae) { re.set(K, ae >>> 0); } - function vy(K, ae, $e, at, $t) { - var Et = { string: (br) => { - var $i = 0; - if (br != null && br !== 0) { - var Vm = (br.length << 2) + 1; - $i = ml(Vm), Y(br, $i, Vm); + function Iy(K, ae, $e, at, _t) { + var $t = { string: (yr) => { + var Ni = 0; + if (yr != null && yr !== 0) { + var Bm = (yr.length << 2) + 1; + Ni = ul(Bm), Y(yr, Ni, Bm); } - return $i; - }, array: (br) => { - var $i = ml(br.length); - return Eu(br, $i), $i; + return Ni; + }, array: (yr) => { + var Ni = ul(yr.length); + return Iu(yr, Ni), Ni; } }; - function Qe(br) { - return ae === "string" ? j(br) : ae === "boolean" ? !!br : br; + function Qe(yr) { + return ae === "string" ? j(yr) : ae === "boolean" ? !!yr : yr; } - var Ke = vm(K), Gt = [], no = 0; + var Ke = Sm(K), Ut = [], oo = 0; if (at) - for (var Ha = 0; Ha < at.length; Ha++) { - var zm = Et[$e[Ha]]; - zm ? (no === 0 && (no = Mm()), Gt[Ha] = zm(at[Ha])) : Gt[Ha] = at[Ha]; + for (var Ga = 0; Ga < at.length; Ga++) { + var Lm = $t[$e[Ga]]; + Lm ? (oo === 0 && (oo = Pm()), Ut[Ga] = Lm(at[Ga])) : Ut[Ga] = at[Ga]; } - var dl = Ke.apply(null, Gt); - function qC(br) { - return no !== 0 && Lm(no), Qe(br); + var pl = Ke.apply(null, Ut); + function KC(yr) { + return oo !== 0 && Om(oo), Qe(yr); } - return dl = qC(dl), dl; + return pl = KC(pl), pl; } - function ky(K, ae, $e, at) { + function vy(K, ae, $e, at) { $e = $e || []; - var $t = $e.every((Qe) => Qe === "number" || Qe === "boolean"), Et = ae !== "string"; - return Et && $t && !at ? vm(K) : function() { - return vy(K, ae, $e, arguments, at); + var _t = $e.every((Qe) => Qe === "number" || Qe === "boolean"), $t = ae !== "string"; + return $t && _t && !at ? Sm(K) : function() { + return Iy(K, ae, $e, arguments, at); }; } - var il = { abort: Cy, emscripten_get_heap_max: $u, emscripten_memcpy_big: wy, emscripten_resize_heap: zp, fd_close: Im, fd_seek: Sy, fd_write: d0 }, Ny = al(), km = e.___wasm_call_ctors = function() { - return (km = e.___wasm_call_ctors = e.asm.__wasm_call_ctors).apply(null, arguments); - }, Nm = e._init = function() { - return (Nm = e._init = e.asm.init).apply(null, arguments); - }, Ty = e._init_with_threads_count = function() { - return (Ty = e._init_with_threads_count = e.asm.init_with_threads_count).apply(null, arguments); - }, Tm = e._get_threads_count = function() { - return (Tm = e._get_threads_count = e.asm.get_threads_count).apply(null, arguments); - }, _y = e._register_tensor = function() { - return (_y = e._register_tensor = e.asm.register_tensor).apply(null, arguments); + var ol = { abort: by, emscripten_get_heap_max: Su, emscripten_memcpy_big: Cy, emscripten_resize_heap: Dp, fd_close: wm, fd_seek: wy, fd_write: f0 }, ky = rl(), Im = e.___wasm_call_ctors = function() { + return (Im = e.___wasm_call_ctors = e.asm.__wasm_call_ctors).apply(null, arguments); + }, vm = e._init = function() { + return (vm = e._init = e.asm.init).apply(null, arguments); + }, Ny = e._init_with_threads_count = function() { + return (Ny = e._init_with_threads_count = e.asm.init_with_threads_count).apply(null, arguments); + }, km = e._get_threads_count = function() { + return (km = e._get_threads_count = e.asm.get_threads_count).apply(null, arguments); + }, Ty = e._register_tensor = function() { + return (Ty = e._register_tensor = e.asm.register_tensor).apply(null, arguments); }, Me = e._dispose_data = function() { return (Me = e._dispose_data = e.asm.dispose_data).apply(null, arguments); - }, ul = e._dispose = function() { - return (ul = e._dispose = e.asm.dispose).apply(null, arguments); - }, $y = e._Abs = function() { - return ($y = e._Abs = e.asm.Abs).apply(null, arguments); - }, _m = e._Acos = function() { - return (_m = e._Acos = e.asm.Acos).apply(null, arguments); - }, Vp = e._Acosh = function() { - return (Vp = e._Acosh = e.asm.Acosh).apply(null, arguments); - }, Ey = e._Add = function() { - return (Ey = e._Add = e.asm.Add).apply(null, arguments); - }, Ry = e._AddN = function() { - return (Ry = e._AddN = e.asm.AddN).apply(null, arguments); - }, Dy = e._All = function() { - return (Dy = e._All = e.asm.All).apply(null, arguments); - }, Ay = e._Any = function() { - return (Ay = e._Any = e.asm.Any).apply(null, arguments); - }, Fy = e._ArgMax = function() { - return (Fy = e._ArgMax = e.asm.ArgMax).apply(null, arguments); - }, $m = e._ArgMin = function() { - return ($m = e._ArgMin = e.asm.ArgMin).apply(null, arguments); - }, Em = e._Asin = function() { - return (Em = e._Asin = e.asm.Asin).apply(null, arguments); - }, Py = e._Asinh = function() { - return (Py = e._Asinh = e.asm.Asinh).apply(null, arguments); - }, Oy = e._Atan = function() { - return (Oy = e._Atan = e.asm.Atan).apply(null, arguments); - }, My = e._Atan2 = function() { - return (My = e._Atan2 = e.asm.Atan2).apply(null, arguments); - }, pl = e._Atanh = function() { - return (pl = e._Atanh = e.asm.Atanh).apply(null, arguments); - }, Ly = e._AvgPool = function() { - return (Ly = e._AvgPool = e.asm.AvgPool).apply(null, arguments); - }, By = e._AvgPool3D = function() { - return (By = e._AvgPool3D = e.asm.AvgPool3D).apply(null, arguments); - }, zy = e._AvgPool3DGrad = function() { - return (zy = e._AvgPool3DGrad = e.asm.AvgPool3DGrad).apply(null, arguments); - }, Ru = e._AvgPoolGrad = function() { - return (Ru = e._AvgPoolGrad = e.asm.AvgPoolGrad).apply(null, arguments); - }, Vy = e._BatchMatMul = function() { - return (Vy = e._BatchMatMul = e.asm.BatchMatMul).apply(null, arguments); - }, Wy = e._Bincount = function() { - return (Wy = e._Bincount = e.asm.Bincount).apply(null, arguments); - }, Rm = e._BitwiseAnd = function() { - return (Rm = e._BitwiseAnd = e.asm.BitwiseAnd).apply(null, arguments); - }, Uy = e._Ceil = function() { - return (Uy = e._Ceil = e.asm.Ceil).apply(null, arguments); - }, cl = e._ClipByValue = function() { - return (cl = e._ClipByValue = e.asm.ClipByValue).apply(null, arguments); - }, Gy = e._Conv2D = function() { - return (Gy = e._Conv2D = e.asm.Conv2D).apply(null, arguments); - }, Hy = e._Conv2DBackpropInput = function() { - return (Hy = e._Conv2DBackpropInput = e.asm.Conv2DBackpropInput).apply(null, arguments); - }, Ky = e._Conv3D = function() { - return (Ky = e._Conv3D = e.asm.Conv3D).apply(null, arguments); - }, _i = e._Conv3DBackpropFilterV2 = function() { - return (_i = e._Conv3DBackpropFilterV2 = e.asm.Conv3DBackpropFilterV2).apply(null, arguments); - }, ll = e._Conv3DBackpropInputV2 = function() { - return (ll = e._Conv3DBackpropInputV2 = e.asm.Conv3DBackpropInputV2).apply(null, arguments); - }, qy = e._Cos = function() { - return (qy = e._Cos = e.asm.Cos).apply(null, arguments); - }, jy = e._Cosh = function() { - return (jy = e._Cosh = e.asm.Cosh).apply(null, arguments); - }, Xy = e._CropAndResize = function() { - return (Xy = e._CropAndResize = e.asm.CropAndResize).apply(null, arguments); - }, Yy = e._Cumprod = function() { - return (Yy = e._Cumprod = e.asm.Cumprod).apply(null, arguments); - }, Dm = e._Cumsum = function() { - return (Dm = e._Cumsum = e.asm.Cumsum).apply(null, arguments); - }, Am = e._DenseBincount = function() { - return (Am = e._DenseBincount = e.asm.DenseBincount).apply(null, arguments); - }, Qy = e._DepthToSpace = function() { - return (Qy = e._DepthToSpace = e.asm.DepthToSpace).apply(null, arguments); - }, Zy = e._DepthwiseConv2dNative = function() { - return (Zy = e._DepthwiseConv2dNative = e.asm.DepthwiseConv2dNative).apply(null, arguments); - }, Fm = e._Diag = function() { - return (Fm = e._Diag = e.asm.Diag).apply(null, arguments); - }, Pm = e._Dilation2D = function() { - return (Pm = e._Dilation2D = e.asm.Dilation2D).apply(null, arguments); - }, Jy = e._Dilation2DBackpropFilter = function() { - return (Jy = e._Dilation2DBackpropFilter = e.asm.Dilation2DBackpropFilter).apply(null, arguments); - }, eb = e._Dilation2DBackpropInput = function() { - return (eb = e._Dilation2DBackpropInput = e.asm.Dilation2DBackpropInput).apply(null, arguments); - }, tb = e._Elu = function() { - return (tb = e._Elu = e.asm.Elu).apply(null, arguments); - }, rb = e._EluGrad = function() { - return (rb = e._EluGrad = e.asm.EluGrad).apply(null, arguments); - }, Om = e._Equal = function() { - return (Om = e._Equal = e.asm.Equal).apply(null, arguments); - }, f0 = e._Erf = function() { - return (f0 = e._Erf = e.asm.Erf).apply(null, arguments); - }, ob = e._Exp = function() { - return (ob = e._Exp = e.asm.Exp).apply(null, arguments); - }, nb = e._Expm1 = function() { - return (nb = e._Expm1 = e.asm.Expm1).apply(null, arguments); - }, sb = e._FlipLeftRight = function() { - return (sb = e._FlipLeftRight = e.asm.FlipLeftRight).apply(null, arguments); - }, ab = e._Floor = function() { - return (ab = e._Floor = e.asm.Floor).apply(null, arguments); - }, ib = e._FloorDiv = function() { - return (ib = e._FloorDiv = e.asm.FloorDiv).apply(null, arguments); - }, ub = e._FusedBatchNorm = function() { - return (ub = e._FusedBatchNorm = e.asm.FusedBatchNorm).apply(null, arguments); - }, pb = e._FusedConv2D = function() { - return (pb = e._FusedConv2D = e.asm.FusedConv2D).apply(null, arguments); - }, cb = e._FusedDepthwiseConv2D = function() { - return (cb = e._FusedDepthwiseConv2D = e.asm.FusedDepthwiseConv2D).apply(null, arguments); - }, lb = e._Gather = function() { - return (lb = e._Gather = e.asm.Gather).apply(null, arguments); - }, mb = e._GatherNd = function() { - return (mb = e._GatherNd = e.asm.GatherNd).apply(null, arguments); - }, db = e._Greater = function() { - return (db = e._Greater = e.asm.Greater).apply(null, arguments); - }, fb = e._GreaterEqual = function() { - return (fb = e._GreaterEqual = e.asm.GreaterEqual).apply(null, arguments); - }, hb = e._IsFinite = function() { - return (hb = e._IsFinite = e.asm.IsFinite).apply(null, arguments); - }, gb = e._IsInf = function() { - return (gb = e._IsInf = e.asm.IsInf).apply(null, arguments); - }, xb = e._IsNan = function() { - return (xb = e._IsNan = e.asm.IsNan).apply(null, arguments); - }, yb = e._LRN = function() { - return (yb = e._LRN = e.asm.LRN).apply(null, arguments); - }, bb = e._LRNGrad = function() { - return (bb = e._LRNGrad = e.asm.LRNGrad).apply(null, arguments); - }, Cb = e._LeakyRelu = function() { - return (Cb = e._LeakyRelu = e.asm.LeakyRelu).apply(null, arguments); - }, wb = e._Less = function() { - return (wb = e._Less = e.asm.Less).apply(null, arguments); - }, Sb = e._LessEqual = function() { - return (Sb = e._LessEqual = e.asm.LessEqual).apply(null, arguments); - }, Ib = e._LinSpace = function() { - return (Ib = e._LinSpace = e.asm.LinSpace).apply(null, arguments); - }, vb = e._Log = function() { - return (vb = e._Log = e.asm.Log).apply(null, arguments); - }, kb = e._Log1p = function() { - return (kb = e._Log1p = e.asm.Log1p).apply(null, arguments); - }, Nb = e._LogicalAnd = function() { - return (Nb = e._LogicalAnd = e.asm.LogicalAnd).apply(null, arguments); - }, Tb = e._LogicalNot = function() { - return (Tb = e._LogicalNot = e.asm.LogicalNot).apply(null, arguments); - }, _b = e._LogicalOr = function() { - return (_b = e._LogicalOr = e.asm.LogicalOr).apply(null, arguments); - }, $b = e._LogicalXor = function() { - return ($b = e._LogicalXor = e.asm.LogicalXor).apply(null, arguments); - }, Eb = e._Max = function() { - return (Eb = e._Max = e.asm.Max).apply(null, arguments); - }, Rb = e._MaxPool = function() { - return (Rb = e._MaxPool = e.asm.MaxPool).apply(null, arguments); - }, Db = e._MaxPool3D = function() { - return (Db = e._MaxPool3D = e.asm.MaxPool3D).apply(null, arguments); - }, Ab = e._MaxPool3DGrad = function() { - return (Ab = e._MaxPool3DGrad = e.asm.MaxPool3DGrad).apply(null, arguments); - }, Fb = e._MaxPoolGrad = function() { - return (Fb = e._MaxPoolGrad = e.asm.MaxPoolGrad).apply(null, arguments); - }, Pb = e._MaxPoolWithArgmax = function() { - return (Pb = e._MaxPoolWithArgmax = e.asm.MaxPoolWithArgmax).apply(null, arguments); - }, Ob = e._Maximum = function() { - return (Ob = e._Maximum = e.asm.Maximum).apply(null, arguments); - }, Mb = e._Mean = function() { - return (Mb = e._Mean = e.asm.Mean).apply(null, arguments); - }, Lb = e._Min = function() { - return (Lb = e._Min = e.asm.Min).apply(null, arguments); - }, Bb = e._Minimum = function() { - return (Bb = e._Minimum = e.asm.Minimum).apply(null, arguments); - }, zb = e._MirrorPad = function() { - return (zb = e._MirrorPad = e.asm.MirrorPad).apply(null, arguments); - }, Vb = e._Mod = function() { - return (Vb = e._Mod = e.asm.Mod).apply(null, arguments); - }, Wb = e._Multinomial = function() { - return (Wb = e._Multinomial = e.asm.Multinomial).apply(null, arguments); - }, Ub = e._Multiply = function() { - return (Ub = e._Multiply = e.asm.Multiply).apply(null, arguments); - }, Gb = e._Neg = function() { - return (Gb = e._Neg = e.asm.Neg).apply(null, arguments); - }, Hb = e._NonMaxSuppressionV3 = function() { - return (Hb = e._NonMaxSuppressionV3 = e.asm.NonMaxSuppressionV3).apply(null, arguments); - }, Kb = e._NonMaxSuppressionV4 = function() { - return (Kb = e._NonMaxSuppressionV4 = e.asm.NonMaxSuppressionV4).apply(null, arguments); - }, qb = e._NonMaxSuppressionV5 = function() { - return (qb = e._NonMaxSuppressionV5 = e.asm.NonMaxSuppressionV5).apply(null, arguments); - }, jb = e._NotEqual = function() { - return (jb = e._NotEqual = e.asm.NotEqual).apply(null, arguments); - }, Xb = e._OneHot = function() { - return (Xb = e._OneHot = e.asm.OneHot).apply(null, arguments); - }, Yb = e._PadV2 = function() { - return (Yb = e._PadV2 = e.asm.PadV2).apply(null, arguments); - }, Qb = e._Pow = function() { - return (Qb = e._Pow = e.asm.Pow).apply(null, arguments); - }, Zb = e._Prelu = function() { - return (Zb = e._Prelu = e.asm.Prelu).apply(null, arguments); - }, Jb = e._Prod = function() { - return (Jb = e._Prod = e.asm.Prod).apply(null, arguments); - }, eC = e._RealDiv = function() { - return (eC = e._RealDiv = e.asm.RealDiv).apply(null, arguments); - }, tC = e._Reciprocal = function() { - return (tC = e._Reciprocal = e.asm.Reciprocal).apply(null, arguments); - }, rC = e._Relu = function() { - return (rC = e._Relu = e.asm.Relu).apply(null, arguments); - }, oC = e._Relu6 = function() { - return (oC = e._Relu6 = e.asm.Relu6).apply(null, arguments); - }, nC = e._ResizeBilinear = function() { - return (nC = e._ResizeBilinear = e.asm.ResizeBilinear).apply(null, arguments); - }, sC = e._ResizeBilinearGrad = function() { - return (sC = e._ResizeBilinearGrad = e.asm.ResizeBilinearGrad).apply(null, arguments); - }, aC = e._ResizeNearestNeighbor = function() { - return (aC = e._ResizeNearestNeighbor = e.asm.ResizeNearestNeighbor).apply(null, arguments); - }, iC = e._ResizeNearestNeighborGrad = function() { - return (iC = e._ResizeNearestNeighborGrad = e.asm.ResizeNearestNeighborGrad).apply(null, arguments); - }, uC = e._Reverse = function() { - return (uC = e._Reverse = e.asm.Reverse).apply(null, arguments); - }, pC = e._RotateWithOffset = function() { - return (pC = e._RotateWithOffset = e.asm.RotateWithOffset).apply(null, arguments); - }, cC = e._Round = function() { - return (cC = e._Round = e.asm.Round).apply(null, arguments); - }, lC = e._Rsqrt = function() { - return (lC = e._Rsqrt = e.asm.Rsqrt).apply(null, arguments); - }, mC = e._ScatterNd = function() { - return (mC = e._ScatterNd = e.asm.ScatterNd).apply(null, arguments); - }, dC = e._SearchSorted = function() { - return (dC = e._SearchSorted = e.asm.SearchSorted).apply(null, arguments); - }, fC = e._SelectV2 = function() { - return (fC = e._SelectV2 = e.asm.SelectV2).apply(null, arguments); - }, hC = e._Selu = function() { - return (hC = e._Selu = e.asm.Selu).apply(null, arguments); - }, gC = e._Sigmoid = function() { - return (gC = e._Sigmoid = e.asm.Sigmoid).apply(null, arguments); - }, xC = e._Sign = function() { - return (xC = e._Sign = e.asm.Sign).apply(null, arguments); - }, yC = e._Sin = function() { - return (yC = e._Sin = e.asm.Sin).apply(null, arguments); - }, bC = e._Sinh = function() { - return (bC = e._Sinh = e.asm.Sinh).apply(null, arguments); - }, CC = e._Softmax = function() { - return (CC = e._Softmax = e.asm.Softmax).apply(null, arguments); - }, wC = e._Softplus = function() { - return (wC = e._Softplus = e.asm.Softplus).apply(null, arguments); - }, SC = e._SparseFillEmptyRows = function() { - return (SC = e._SparseFillEmptyRows = e.asm.SparseFillEmptyRows).apply(null, arguments); - }, IC = e._SparseReshape = function() { - return (IC = e._SparseReshape = e.asm.SparseReshape).apply(null, arguments); - }, vC = e._SparseSegmentReduction = function() { - return (vC = e._SparseSegmentReduction = e.asm.SparseSegmentReduction).apply(null, arguments); - }, kC = e._SparseToDense = function() { - return (kC = e._SparseToDense = e.asm.SparseToDense).apply(null, arguments); - }, NC = e._Sqrt = function() { - return (NC = e._Sqrt = e.asm.Sqrt).apply(null, arguments); - }, TC = e._Square = function() { - return (TC = e._Square = e.asm.Square).apply(null, arguments); - }, _C = e._SquaredDifference = function() { - return (_C = e._SquaredDifference = e.asm.SquaredDifference).apply(null, arguments); - }, $C = e._Step = function() { - return ($C = e._Step = e.asm.Step).apply(null, arguments); - }, EC = e._StridedSlice = function() { - return (EC = e._StridedSlice = e.asm.StridedSlice).apply(null, arguments); - }, RC = e._Sub = function() { - return (RC = e._Sub = e.asm.Sub).apply(null, arguments); - }, DC = e._Sum = function() { - return (DC = e._Sum = e.asm.Sum).apply(null, arguments); - }, AC = e._Tan = function() { - return (AC = e._Tan = e.asm.Tan).apply(null, arguments); - }, FC = e._Tanh = function() { - return (FC = e._Tanh = e.asm.Tanh).apply(null, arguments); - }, PC = e._TensorScatterUpdate = function() { - return (PC = e._TensorScatterUpdate = e.asm.TensorScatterUpdate).apply(null, arguments); - }, OC = e._Tile = function() { - return (OC = e._Tile = e.asm.Tile).apply(null, arguments); - }, MC = e._TopK = function() { - return (MC = e._TopK = e.asm.TopK).apply(null, arguments); - }, LC = e._Transform = function() { - return (LC = e._Transform = e.asm.Transform).apply(null, arguments); - }, BC = e._Transpose = function() { - return (BC = e._Transpose = e.asm.Transpose).apply(null, arguments); - }, zC = e.__FusedMatMul = function() { - return (zC = e.__FusedMatMul = e.asm._FusedMatMul).apply(null, arguments); - }, VC = e._malloc = function() { - return (VC = e._malloc = e.asm.malloc).apply(null, arguments); - }, WC = e._free = function() { - return (WC = e._free = e.asm.free).apply(null, arguments); - }, UC = e.___errno_location = function() { - return (UC = e.___errno_location = e.asm.__errno_location).apply(null, arguments); - }, Mm = e.stackSave = function() { - return (Mm = e.stackSave = e.asm.stackSave).apply(null, arguments); - }, Lm = e.stackRestore = function() { - return (Lm = e.stackRestore = e.asm.stackRestore).apply(null, arguments); - }, ml = e.stackAlloc = function() { - return (ml = e.stackAlloc = e.asm.stackAlloc).apply(null, arguments); - }, GC = e.dynCall_iijjiiii = function() { - return (GC = e.dynCall_iijjiiii = e.asm.dynCall_iijjiiii).apply(null, arguments); - }, HC = e.dynCall_jiji = function() { - return (HC = e.dynCall_jiji = e.asm.dynCall_jiji).apply(null, arguments); + }, nl = e._dispose = function() { + return (nl = e._dispose = e.asm.dispose).apply(null, arguments); + }, _y = e._Abs = function() { + return (_y = e._Abs = e.asm.Abs).apply(null, arguments); + }, Nm = e._Acos = function() { + return (Nm = e._Acos = e.asm.Acos).apply(null, arguments); + }, Ap = e._Acosh = function() { + return (Ap = e._Acosh = e.asm.Acosh).apply(null, arguments); + }, $y = e._Add = function() { + return ($y = e._Add = e.asm.Add).apply(null, arguments); + }, Ey = e._AddN = function() { + return (Ey = e._AddN = e.asm.AddN).apply(null, arguments); + }, Ry = e._All = function() { + return (Ry = e._All = e.asm.All).apply(null, arguments); + }, Dy = e._Any = function() { + return (Dy = e._Any = e.asm.Any).apply(null, arguments); + }, Ay = e._ArgMax = function() { + return (Ay = e._ArgMax = e.asm.ArgMax).apply(null, arguments); + }, Tm = e._ArgMin = function() { + return (Tm = e._ArgMin = e.asm.ArgMin).apply(null, arguments); + }, _m = e._Asin = function() { + return (_m = e._Asin = e.asm.Asin).apply(null, arguments); + }, Fy = e._Asinh = function() { + return (Fy = e._Asinh = e.asm.Asinh).apply(null, arguments); + }, Py = e._Atan = function() { + return (Py = e._Atan = e.asm.Atan).apply(null, arguments); + }, Oy = e._Atan2 = function() { + return (Oy = e._Atan2 = e.asm.Atan2).apply(null, arguments); + }, sl = e._Atanh = function() { + return (sl = e._Atanh = e.asm.Atanh).apply(null, arguments); + }, My = e._AvgPool = function() { + return (My = e._AvgPool = e.asm.AvgPool).apply(null, arguments); + }, Ly = e._AvgPool3D = function() { + return (Ly = e._AvgPool3D = e.asm.AvgPool3D).apply(null, arguments); + }, By = e._AvgPool3DGrad = function() { + return (By = e._AvgPool3DGrad = e.asm.AvgPool3DGrad).apply(null, arguments); + }, vu = e._AvgPoolGrad = function() { + return (vu = e._AvgPoolGrad = e.asm.AvgPoolGrad).apply(null, arguments); + }, zy = e._BatchMatMul = function() { + return (zy = e._BatchMatMul = e.asm.BatchMatMul).apply(null, arguments); + }, Vy = e._Bincount = function() { + return (Vy = e._Bincount = e.asm.Bincount).apply(null, arguments); + }, $m = e._BitwiseAnd = function() { + return ($m = e._BitwiseAnd = e.asm.BitwiseAnd).apply(null, arguments); + }, Wy = e._Ceil = function() { + return (Wy = e._Ceil = e.asm.Ceil).apply(null, arguments); + }, al = e._ClipByValue = function() { + return (al = e._ClipByValue = e.asm.ClipByValue).apply(null, arguments); + }, Uy = e._Conv2D = function() { + return (Uy = e._Conv2D = e.asm.Conv2D).apply(null, arguments); + }, Gy = e._Conv2DBackpropInput = function() { + return (Gy = e._Conv2DBackpropInput = e.asm.Conv2DBackpropInput).apply(null, arguments); + }, Hy = e._Conv3D = function() { + return (Hy = e._Conv3D = e.asm.Conv3D).apply(null, arguments); + }, ki = e._Conv3DBackpropFilterV2 = function() { + return (ki = e._Conv3DBackpropFilterV2 = e.asm.Conv3DBackpropFilterV2).apply(null, arguments); + }, il = e._Conv3DBackpropInputV2 = function() { + return (il = e._Conv3DBackpropInputV2 = e.asm.Conv3DBackpropInputV2).apply(null, arguments); + }, Ky = e._Cos = function() { + return (Ky = e._Cos = e.asm.Cos).apply(null, arguments); + }, qy = e._Cosh = function() { + return (qy = e._Cosh = e.asm.Cosh).apply(null, arguments); + }, jy = e._CropAndResize = function() { + return (jy = e._CropAndResize = e.asm.CropAndResize).apply(null, arguments); + }, Xy = e._Cumprod = function() { + return (Xy = e._Cumprod = e.asm.Cumprod).apply(null, arguments); + }, Em = e._Cumsum = function() { + return (Em = e._Cumsum = e.asm.Cumsum).apply(null, arguments); + }, Rm = e._DenseBincount = function() { + return (Rm = e._DenseBincount = e.asm.DenseBincount).apply(null, arguments); + }, Yy = e._DepthToSpace = function() { + return (Yy = e._DepthToSpace = e.asm.DepthToSpace).apply(null, arguments); + }, Qy = e._DepthwiseConv2dNative = function() { + return (Qy = e._DepthwiseConv2dNative = e.asm.DepthwiseConv2dNative).apply(null, arguments); + }, Dm = e._Diag = function() { + return (Dm = e._Diag = e.asm.Diag).apply(null, arguments); + }, Am = e._Dilation2D = function() { + return (Am = e._Dilation2D = e.asm.Dilation2D).apply(null, arguments); + }, Zy = e._Dilation2DBackpropFilter = function() { + return (Zy = e._Dilation2DBackpropFilter = e.asm.Dilation2DBackpropFilter).apply(null, arguments); + }, Jy = e._Dilation2DBackpropInput = function() { + return (Jy = e._Dilation2DBackpropInput = e.asm.Dilation2DBackpropInput).apply(null, arguments); + }, eb = e._Elu = function() { + return (eb = e._Elu = e.asm.Elu).apply(null, arguments); + }, tb = e._EluGrad = function() { + return (tb = e._EluGrad = e.asm.EluGrad).apply(null, arguments); + }, Fm = e._Equal = function() { + return (Fm = e._Equal = e.asm.Equal).apply(null, arguments); + }, h0 = e._Erf = function() { + return (h0 = e._Erf = e.asm.Erf).apply(null, arguments); + }, rb = e._Exp = function() { + return (rb = e._Exp = e.asm.Exp).apply(null, arguments); + }, ob = e._Expm1 = function() { + return (ob = e._Expm1 = e.asm.Expm1).apply(null, arguments); + }, nb = e._FlipLeftRight = function() { + return (nb = e._FlipLeftRight = e.asm.FlipLeftRight).apply(null, arguments); + }, sb = e._Floor = function() { + return (sb = e._Floor = e.asm.Floor).apply(null, arguments); + }, ab = e._FloorDiv = function() { + return (ab = e._FloorDiv = e.asm.FloorDiv).apply(null, arguments); + }, ib = e._FusedBatchNorm = function() { + return (ib = e._FusedBatchNorm = e.asm.FusedBatchNorm).apply(null, arguments); + }, ub = e._FusedConv2D = function() { + return (ub = e._FusedConv2D = e.asm.FusedConv2D).apply(null, arguments); + }, pb = e._FusedDepthwiseConv2D = function() { + return (pb = e._FusedDepthwiseConv2D = e.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, cb = e._Gather = function() { + return (cb = e._Gather = e.asm.Gather).apply(null, arguments); + }, lb = e._GatherNd = function() { + return (lb = e._GatherNd = e.asm.GatherNd).apply(null, arguments); + }, mb = e._Greater = function() { + return (mb = e._Greater = e.asm.Greater).apply(null, arguments); + }, db = e._GreaterEqual = function() { + return (db = e._GreaterEqual = e.asm.GreaterEqual).apply(null, arguments); + }, fb = e._IsFinite = function() { + return (fb = e._IsFinite = e.asm.IsFinite).apply(null, arguments); + }, hb = e._IsInf = function() { + return (hb = e._IsInf = e.asm.IsInf).apply(null, arguments); + }, gb = e._IsNan = function() { + return (gb = e._IsNan = e.asm.IsNan).apply(null, arguments); + }, xb = e._LRN = function() { + return (xb = e._LRN = e.asm.LRN).apply(null, arguments); + }, yb = e._LRNGrad = function() { + return (yb = e._LRNGrad = e.asm.LRNGrad).apply(null, arguments); + }, bb = e._LeakyRelu = function() { + return (bb = e._LeakyRelu = e.asm.LeakyRelu).apply(null, arguments); + }, Cb = e._Less = function() { + return (Cb = e._Less = e.asm.Less).apply(null, arguments); + }, wb = e._LessEqual = function() { + return (wb = e._LessEqual = e.asm.LessEqual).apply(null, arguments); + }, Sb = e._LinSpace = function() { + return (Sb = e._LinSpace = e.asm.LinSpace).apply(null, arguments); + }, Ib = e._Log = function() { + return (Ib = e._Log = e.asm.Log).apply(null, arguments); + }, vb = e._Log1p = function() { + return (vb = e._Log1p = e.asm.Log1p).apply(null, arguments); + }, kb = e._LogicalAnd = function() { + return (kb = e._LogicalAnd = e.asm.LogicalAnd).apply(null, arguments); + }, Nb = e._LogicalNot = function() { + return (Nb = e._LogicalNot = e.asm.LogicalNot).apply(null, arguments); + }, Tb = e._LogicalOr = function() { + return (Tb = e._LogicalOr = e.asm.LogicalOr).apply(null, arguments); + }, _b = e._LogicalXor = function() { + return (_b = e._LogicalXor = e.asm.LogicalXor).apply(null, arguments); + }, $b = e._Max = function() { + return ($b = e._Max = e.asm.Max).apply(null, arguments); + }, Eb = e._MaxPool = function() { + return (Eb = e._MaxPool = e.asm.MaxPool).apply(null, arguments); + }, Rb = e._MaxPool3D = function() { + return (Rb = e._MaxPool3D = e.asm.MaxPool3D).apply(null, arguments); + }, Db = e._MaxPool3DGrad = function() { + return (Db = e._MaxPool3DGrad = e.asm.MaxPool3DGrad).apply(null, arguments); + }, Ab = e._MaxPoolGrad = function() { + return (Ab = e._MaxPoolGrad = e.asm.MaxPoolGrad).apply(null, arguments); + }, Fb = e._MaxPoolWithArgmax = function() { + return (Fb = e._MaxPoolWithArgmax = e.asm.MaxPoolWithArgmax).apply(null, arguments); + }, Pb = e._Maximum = function() { + return (Pb = e._Maximum = e.asm.Maximum).apply(null, arguments); + }, Ob = e._Mean = function() { + return (Ob = e._Mean = e.asm.Mean).apply(null, arguments); + }, Mb = e._Min = function() { + return (Mb = e._Min = e.asm.Min).apply(null, arguments); + }, Lb = e._Minimum = function() { + return (Lb = e._Minimum = e.asm.Minimum).apply(null, arguments); + }, Bb = e._MirrorPad = function() { + return (Bb = e._MirrorPad = e.asm.MirrorPad).apply(null, arguments); + }, zb = e._Mod = function() { + return (zb = e._Mod = e.asm.Mod).apply(null, arguments); + }, Vb = e._Multinomial = function() { + return (Vb = e._Multinomial = e.asm.Multinomial).apply(null, arguments); + }, Wb = e._Multiply = function() { + return (Wb = e._Multiply = e.asm.Multiply).apply(null, arguments); + }, Ub = e._Neg = function() { + return (Ub = e._Neg = e.asm.Neg).apply(null, arguments); + }, Gb = e._NonMaxSuppressionV3 = function() { + return (Gb = e._NonMaxSuppressionV3 = e.asm.NonMaxSuppressionV3).apply(null, arguments); + }, Hb = e._NonMaxSuppressionV4 = function() { + return (Hb = e._NonMaxSuppressionV4 = e.asm.NonMaxSuppressionV4).apply(null, arguments); + }, Kb = e._NonMaxSuppressionV5 = function() { + return (Kb = e._NonMaxSuppressionV5 = e.asm.NonMaxSuppressionV5).apply(null, arguments); + }, qb = e._NotEqual = function() { + return (qb = e._NotEqual = e.asm.NotEqual).apply(null, arguments); + }, jb = e._OneHot = function() { + return (jb = e._OneHot = e.asm.OneHot).apply(null, arguments); + }, Xb = e._PadV2 = function() { + return (Xb = e._PadV2 = e.asm.PadV2).apply(null, arguments); + }, Yb = e._Pow = function() { + return (Yb = e._Pow = e.asm.Pow).apply(null, arguments); + }, Qb = e._Prelu = function() { + return (Qb = e._Prelu = e.asm.Prelu).apply(null, arguments); + }, Zb = e._Prod = function() { + return (Zb = e._Prod = e.asm.Prod).apply(null, arguments); + }, Jb = e._RealDiv = function() { + return (Jb = e._RealDiv = e.asm.RealDiv).apply(null, arguments); + }, eC = e._Reciprocal = function() { + return (eC = e._Reciprocal = e.asm.Reciprocal).apply(null, arguments); + }, tC = e._Relu = function() { + return (tC = e._Relu = e.asm.Relu).apply(null, arguments); + }, rC = e._Relu6 = function() { + return (rC = e._Relu6 = e.asm.Relu6).apply(null, arguments); + }, oC = e._ResizeBilinear = function() { + return (oC = e._ResizeBilinear = e.asm.ResizeBilinear).apply(null, arguments); + }, nC = e._ResizeBilinearGrad = function() { + return (nC = e._ResizeBilinearGrad = e.asm.ResizeBilinearGrad).apply(null, arguments); + }, sC = e._ResizeNearestNeighbor = function() { + return (sC = e._ResizeNearestNeighbor = e.asm.ResizeNearestNeighbor).apply(null, arguments); + }, aC = e._ResizeNearestNeighborGrad = function() { + return (aC = e._ResizeNearestNeighborGrad = e.asm.ResizeNearestNeighborGrad).apply(null, arguments); + }, iC = e._Reverse = function() { + return (iC = e._Reverse = e.asm.Reverse).apply(null, arguments); + }, uC = e._RotateWithOffset = function() { + return (uC = e._RotateWithOffset = e.asm.RotateWithOffset).apply(null, arguments); + }, pC = e._Round = function() { + return (pC = e._Round = e.asm.Round).apply(null, arguments); + }, cC = e._Rsqrt = function() { + return (cC = e._Rsqrt = e.asm.Rsqrt).apply(null, arguments); + }, lC = e._ScatterNd = function() { + return (lC = e._ScatterNd = e.asm.ScatterNd).apply(null, arguments); + }, mC = e._SearchSorted = function() { + return (mC = e._SearchSorted = e.asm.SearchSorted).apply(null, arguments); + }, dC = e._SelectV2 = function() { + return (dC = e._SelectV2 = e.asm.SelectV2).apply(null, arguments); + }, fC = e._Selu = function() { + return (fC = e._Selu = e.asm.Selu).apply(null, arguments); + }, hC = e._Sigmoid = function() { + return (hC = e._Sigmoid = e.asm.Sigmoid).apply(null, arguments); + }, gC = e._Sign = function() { + return (gC = e._Sign = e.asm.Sign).apply(null, arguments); + }, xC = e._Sin = function() { + return (xC = e._Sin = e.asm.Sin).apply(null, arguments); + }, yC = e._Sinh = function() { + return (yC = e._Sinh = e.asm.Sinh).apply(null, arguments); + }, bC = e._Softmax = function() { + return (bC = e._Softmax = e.asm.Softmax).apply(null, arguments); + }, CC = e._Softplus = function() { + return (CC = e._Softplus = e.asm.Softplus).apply(null, arguments); + }, wC = e._SparseFillEmptyRows = function() { + return (wC = e._SparseFillEmptyRows = e.asm.SparseFillEmptyRows).apply(null, arguments); + }, SC = e._SparseReshape = function() { + return (SC = e._SparseReshape = e.asm.SparseReshape).apply(null, arguments); + }, IC = e._SparseSegmentReduction = function() { + return (IC = e._SparseSegmentReduction = e.asm.SparseSegmentReduction).apply(null, arguments); + }, vC = e._SparseToDense = function() { + return (vC = e._SparseToDense = e.asm.SparseToDense).apply(null, arguments); + }, kC = e._Sqrt = function() { + return (kC = e._Sqrt = e.asm.Sqrt).apply(null, arguments); + }, NC = e._Square = function() { + return (NC = e._Square = e.asm.Square).apply(null, arguments); + }, TC = e._SquaredDifference = function() { + return (TC = e._SquaredDifference = e.asm.SquaredDifference).apply(null, arguments); + }, _C = e._Step = function() { + return (_C = e._Step = e.asm.Step).apply(null, arguments); + }, $C = e._StridedSlice = function() { + return ($C = e._StridedSlice = e.asm.StridedSlice).apply(null, arguments); + }, EC = e._Sub = function() { + return (EC = e._Sub = e.asm.Sub).apply(null, arguments); + }, RC = e._Sum = function() { + return (RC = e._Sum = e.asm.Sum).apply(null, arguments); + }, DC = e._Tan = function() { + return (DC = e._Tan = e.asm.Tan).apply(null, arguments); + }, AC = e._Tanh = function() { + return (AC = e._Tanh = e.asm.Tanh).apply(null, arguments); + }, FC = e._TensorScatterUpdate = function() { + return (FC = e._TensorScatterUpdate = e.asm.TensorScatterUpdate).apply(null, arguments); + }, PC = e._Tile = function() { + return (PC = e._Tile = e.asm.Tile).apply(null, arguments); + }, OC = e._TopK = function() { + return (OC = e._TopK = e.asm.TopK).apply(null, arguments); + }, MC = e._Transform = function() { + return (MC = e._Transform = e.asm.Transform).apply(null, arguments); + }, LC = e._Transpose = function() { + return (LC = e._Transpose = e.asm.Transpose).apply(null, arguments); + }, BC = e.__FusedMatMul = function() { + return (BC = e.__FusedMatMul = e.asm._FusedMatMul).apply(null, arguments); + }, zC = e._malloc = function() { + return (zC = e._malloc = e.asm.malloc).apply(null, arguments); + }, VC = e._free = function() { + return (VC = e._free = e.asm.free).apply(null, arguments); + }, WC = e.___errno_location = function() { + return (WC = e.___errno_location = e.asm.__errno_location).apply(null, arguments); + }, Pm = e.stackSave = function() { + return (Pm = e.stackSave = e.asm.stackSave).apply(null, arguments); + }, Om = e.stackRestore = function() { + return (Om = e.stackRestore = e.asm.stackRestore).apply(null, arguments); + }, ul = e.stackAlloc = function() { + return (ul = e.stackAlloc = e.asm.stackAlloc).apply(null, arguments); + }, UC = e.dynCall_iijjiiii = function() { + return (UC = e.dynCall_iijjiiii = e.asm.dynCall_iijjiiii).apply(null, arguments); + }, GC = e.dynCall_jiji = function() { + return (GC = e.dynCall_jiji = e.asm.dynCall_jiji).apply(null, arguments); }; - e.cwrap = ky; - var Wp; - ar = function K() { - Wp || Bm(), Wp || (ar = K); + e.cwrap = vy; + var Fp; + nr = function K() { + Fp || Mm(), Fp || (nr = K); }; - function Bm(K) { - if (K = K || i, _t > 0 || (gt(), _t > 0)) + function Mm(K) { + if (K = K || i, Tt > 0 || (ht(), Tt > 0)) return; function ae() { - Wp || (Wp = true, e.calledRun = true, !M && (xt(), o(e), e.onRuntimeInitialized && e.onRuntimeInitialized(), Lr())); + Fp || (Fp = true, e.calledRun = true, !M && (gt(), o(e), e.onRuntimeInitialized && e.onRuntimeInitialized(), Mr())); } e.setStatus ? (e.setStatus("Running..."), setTimeout(function() { setTimeout(function() { @@ -2915,26 +2916,26 @@ var MB = qt((Ug, Gv) => { if (e.preInit) for (typeof e.preInit == "function" && (e.preInit = [e.preInit]); e.preInit.length > 0; ) e.preInit.pop()(); - Bm(); - var Up; - s && (Up = { uncaughtException: process.listeners("uncaughtException").filter(function(K) { + Mm(); + var Pp; + s && (Pp = { 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 Gp; + var Op; if (typeof t8 != "undefined") - Gp = t8; + Op = t8; else if (typeof WasmBackendModuleThreadedSimd != "undefined") - Gp = WasmBackendModuleThreadedSimd; + Op = WasmBackendModuleThreadedSimd; else throw new Error("Could not find wasm module in post.js"); - if (Up) { - var KC = Gp._dispose; - Gp._dispose = function() { - KC(), Up.uncaughtException.forEach(function(K) { + if (Pp) { + var HC = Op._dispose; + Op._dispose = function() { + HC(), Pp.uncaughtException.forEach(function(K) { process.removeListener("uncaughtException", K); - }), Up.unhandledRejection.forEach(function(K) { + }), Pp.unhandledRejection.forEach(function(K) { process.removeListener("unhandledRejection", K); }); }; @@ -2942,11 +2943,11 @@ var MB = qt((Ug, Gv) => { return t8.ready; }; })(); - typeof Ug == "object" && typeof Gv == "object" ? Gv.exports = Uv : typeof define == "function" && define.amd ? define([], function() { - return Uv; - }) : typeof Ug == "object" && (Ug.WasmBackendModule = Uv); + typeof Wg == "object" && typeof Hv == "object" ? Hv.exports = Gv : typeof define == "function" && define.amd ? define([], function() { + return Gv; + }) : typeof Wg == "object" && (Wg.WasmBackendModule = Gv); }); -var zo = class { +var Bo = class { constructor(t8, e) { this.backend = t8, this.dataMover = e, this.data = /* @__PURE__ */ new WeakMap(), this.dataIdsCount = 0; } @@ -2966,172 +2967,172 @@ var zo = class { return this.dataIdsCount; } }; -var ao = class { +var so = class { refCount(t8) { - return zr("refCount"); + return Br("refCount"); } incRef(t8) { - return zr("incRef"); + return Br("incRef"); } timerAvailable() { return true; } time(t8) { - return zr("time"); + return Br("time"); } read(t8) { - return zr("read"); + return Br("read"); } readSync(t8) { - return zr("readSync"); + return Br("readSync"); } readToGPU(t8, e) { - return zr("readToGPU"); + return Br("readToGPU"); } numDataIds() { - return zr("numDataIds"); + return Br("numDataIds"); } disposeData(t8, e) { - return zr("disposeData"); + return Br("disposeData"); } write(t8, e, o) { - return zr("write"); + return Br("write"); } move(t8, e, o, n, s) { - return zr("move"); + return Br("move"); } createTensorFromGPUData(t8, e, o) { - return zr("createTensorFromGPUData"); + return Br("createTensorFromGPUData"); } memory() { - return zr("memory"); + return Br("memory"); } floatPrecision() { - return zr("floatPrecision"); + return Br("floatPrecision"); } epsilon() { return this.floatPrecision() === 32 ? 1e-7 : 1e-4; } dispose() { - return zr("dispose"); + return Br("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 Br(r15) { + throw new Error(`'${r15}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); } -function I0(r) { - let t8 = r.length, e = 0; +function v0(r15) { + let t8 = r15.length, e = 0; for (; t8 > 0; ) - e = Math.random() * t8 | 0, t8--, jm(r, t8, e); + e = Math.random() * t8 | 0, t8--, Km(r15, t8, e); } -function TG(r, t8) { - if (r.length !== t8.length) - throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t8.length}`); - let e = r.length, o = 0; +function _G(r15, t8) { + if (r15.length !== t8.length) + throw new Error(`Array sizes must match to be shuffled together First array length was ${r15.length}Second array length was ${t8.length}`); + let e = r15.length, o = 0; for (; e > 0; ) - o = Math.random() * e | 0, e--, jm(r, e, o), jm(t8, e, o); + o = Math.random() * e | 0, e--, Km(r15, e, o), Km(t8, e, o); } -function qp(r, t8, e) { - return Math.max(r, Math.min(t8, e)); +function Bp(r15, t8, e) { + return Math.max(r15, Math.min(t8, e)); } -function _G(r) { - return r % 2 === 0 ? r : r + 1; +function $G(r15) { + return r15 % 2 === 0 ? r15 : r15 + 1; } -function jm(r, t8, e) { - let o = r[t8]; - r[t8] = r[e], r[e] = o; +function Km(r15, t8, e) { + let o = r15[t8]; + r15[t8] = r15[e], r15[e] = o; } -function $G(r) { +function EG(r15) { let t8 = 0; - for (let e = 0; e < r.length; e++) - t8 += r[e]; + for (let e = 0; e < r15.length; e++) + t8 += r15[e]; return t8; } -function EG(r, t8) { +function RG(r15, t8) { let e = Math.random(); - return t8 * e + (1 - e) * r; + return t8 * e + (1 - e) * r15; } -function RG(r, t8) { +function DG(r15, t8) { let e = 0; - for (let o = 0; o < r.length; o++) { - let n = Number(r[o]) - Number(t8[o]); + for (let o = 0; o < r15.length; o++) { + let n = Number(r15[o]) - Number(t8[o]); e += n * n; } return e; } -function $(r, t8) { - if (!r) +function $(r15, t8) { + if (!r15) throw new Error(typeof t8 == "string" ? t8 : t8()); } -function yt(r, t8, e = "") { - $(Cr(r, t8), () => e + ` Shapes ${r} and ${t8} must match`); +function xt(r15, t8, e = "") { + $(br(r15, t8), () => e + ` Shapes ${r15} and ${t8} must match`); } -function io(r) { - $(r != null, () => "The input to the tensor constructor must be a non-null value."); +function ao(r15) { + $(r15 != null, () => "The input to the tensor constructor must be a non-null value."); } -function He(r) { - if (r.length === 0) +function He(r15) { + if (r15.length === 0) return 1; - let t8 = r[0]; - for (let e = 1; e < r.length; e++) - t8 *= r[e]; + let t8 = r15[0]; + for (let e = 1; e < r15.length; e++) + t8 *= r15[e]; return t8; } -function DG(r) { - return r.length === 0; +function AG(r15) { + return r15.length === 0; } -function ZC(r, t8) { - if (r === t8) +function QC(r15, t8) { + if (r15 === t8) return true; - if (r == null || t8 == null || r.length !== t8.length) + if (r15 == null || t8 == null || r15.length !== t8.length) return false; - for (let e = 0; e < r.length; e++) - if (r[e] !== null && t8[e] !== null && r[e] !== t8[e]) + for (let e = 0; e < r15.length; e++) + if (r15[e] !== null && t8[e] !== null && r15[e] !== t8[e]) return false; return true; } -function Cr(r, t8) { - if (r === t8) +function br(r15, t8) { + if (r15 === t8) return true; - if (r == null || t8 == null || r.length !== t8.length) + if (r15 == null || t8 == null || r15.length !== t8.length) return false; - for (let e = 0; e < r.length; e++) - if (r[e] !== t8[e]) + for (let e = 0; e < r15.length; e++) + if (r15[e] !== t8[e]) return false; return true; } -function qa(r) { - return r % 1 === 0; +function Ka(r15) { + return r15 % 1 === 0; } -function AG(r) { +function FG(r15) { if (Math.tanh != null) - return Math.tanh(r); - if (r === 1 / 0) + return Math.tanh(r15); + if (r15 === 1 / 0) return 1; - if (r === -1 / 0) + if (r15 === -1 / 0) return -1; { - let t8 = Math.exp(2 * r); + let t8 = Math.exp(2 * r15); return (t8 - 1) / (t8 + 1); } } -function FG(r) { - let t8 = Math.ceil(Math.sqrt(r)); - return [t8, Math.ceil(r / t8)]; +function PG(r15) { + let t8 = Math.ceil(Math.sqrt(r15)); + return [t8, Math.ceil(r15 / t8)]; } -function PG(r) { - let t8 = new Uint32Array(r); - for (let e = 0; e < r; ++e) +function OG(r15) { + let t8 = new Uint32Array(r15); + for (let e = 0; e < r15; ++e) t8[e] = e; - return I0(t8), t8; + return v0(t8), t8; } -function Au(r, t8) { - return t8 <= r.length ? r : r + " ".repeat(t8 - r.length); +function Nu(r15, t8) { + return t8 <= r15.length ? r15 : r15 + " ".repeat(t8 - r15.length); } -function OG(r, t8 = (n) => 0, e, o) { +function MG(r15, t8 = (n) => 0, e, o) { return new Promise((n, s) => { let a = 0, i = () => { - if (r()) { + if (r15()) { n(); return; } @@ -3146,212 +3147,212 @@ function OG(r, t8 = (n) => 0, e, o) { i(); }); } -function MG(r, t8) { +function LG(r15, t8) { let e = 1, o = -1; - for (let s = 0; s < r.length; ++s) - if (r[s] >= 0) - e *= r[s]; - else if (r[s] === -1) { + for (let s = 0; s < r15.length; ++s) + if (r15[s] >= 0) + e *= 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 (r[s] < 0) - throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`); + } else if (r15[s] < 0) + throw Error(`Shapes can not be < 0. Found ${r15[s]} at dim ${s}`); if (o === -1) { if (t8 > 0 && t8 !== e) - throw Error(`Size(${t8}) must match the product of shape ${r}`); - return r; + throw Error(`Size(${t8}) must match the product of shape ${r15}`); + return r15; } if (e === 0) - throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`); + throw Error(`Cannot infer the missing size in [${r15}] when there are 0 elements`); if (t8 % e !== 0) throw Error(`The implicit shape can't be a fractional number. Got ${t8} / ${e}`); - let n = r.slice(); + let n = r15.slice(); return n[o] = t8 / e, n; } -function Ei(r, t8) { +function Ti(r15, t8) { let e = t8.length; - return r = r == null ? t8.map((o, n) => n) : [].concat(r), $(r.every((o) => o >= -e && o < e), () => `All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`), $(r.every((o) => qa(o)), () => `All values in axis param must be integers but got axis ${r}`), r.map((o) => o < 0 ? e + o : o); + return r15 = r15 == null ? t8.map((o, n) => n) : [].concat(r15), $(r15.every((o) => o >= -e && o < e), () => `All values in axis param must be in range [-${e}, ${e}) but got axis ${r15}`), $(r15.every((o) => Ka(o)), () => `All values in axis param must be integers but got axis ${r15}`), r15.map((o) => o < 0 ? e + o : o); } -function JC(r, t8) { - let e = [], o = [], n = t8 != null && Array.isArray(t8) && t8.length === 0, s = t8 == null || n ? null : Ei(t8, r).sort(), a = 0; - for (let i = 0; i < r.length; ++i) { +function ZC(r15, t8) { + let e = [], o = [], n = t8 != null && Array.isArray(t8) && t8.length === 0, s = t8 == null || n ? null : Ti(t8, r15).sort(), a = 0; + for (let i = 0; i < r15.length; ++i) { if (s != null) { - if (s[a] === i && r[i] !== 1) - throw new Error(`Can't squeeze axis ${i} since its dim '${r[i]}' is not 1`); - (s[a] == null || s[a] > i) && r[i] === 1 && (e.push(r[i]), o.push(i)), s[a] <= i && a++; + 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 && (e.push(r15[i]), o.push(i)), s[a] <= i && a++; } - r[i] !== 1 && (e.push(r[i]), o.push(i)); + r15[i] !== 1 && (e.push(r15[i]), o.push(i)); } return { newShape: e, keptDims: o }; } -function ew(r, t8) { - return Xm(r, t8); +function JC(r15, t8) { + return qm(r15, t8); } -function Xm(r, t8) { +function qm(r15, t8) { let e = null; - if (r == null || r === "float32") + if (r15 == null || r15 === "float32") e = new Float32Array(t8); - else if (r === "int32") + else if (r15 === "int32") e = new Int32Array(t8); - else if (r === "bool") + else if (r15 === "bool") e = new Uint8Array(t8); - else if (r === "string") + else if (r15 === "string") e = new Array(t8); else - throw new Error(`Unknown data type ${r}`); + throw new Error(`Unknown data type ${r15}`); return e; } -function tw(r, t8) { - for (let e = 0; e < r.length; e++) { - let o = r[e]; +function ew(r15, t8) { + for (let e = 0; e < r15.length; e++) { + let o = r15[e]; if (isNaN(o) || !isFinite(o)) throw Error(`A tensor of type ${t8} being uploaded contains ${o}.`); } } -function rw(r) { - return r === "bool" || r === "complex64" || r === "float32" || r === "int32" || r === "string"; +function tw(r15) { + return r15 === "bool" || r15 === "complex64" || r15 === "float32" || r15 === "int32" || r15 === "string"; } -function LG(r, t8) { - return !(t8 === "complex64" || t8 === "float32" && r !== "complex64" || t8 === "int32" && r !== "float32" && r !== "complex64" || t8 === "bool" && r === "bool"); +function BG(r15, t8) { + return !(t8 === "complex64" || t8 === "float32" && r15 !== "complex64" || t8 === "int32" && r15 !== "float32" && r15 !== "complex64" || t8 === "bool" && r15 === "bool"); } -function jp(r) { - if (r === "float32" || r === "int32") +function zp(r15) { + if (r15 === "float32" || r15 === "int32") return 4; - if (r === "complex64") + if (r15 === "complex64") return 8; - if (r === "bool") + if (r15 === "bool") return 1; - throw new Error(`Unknown dtype ${r}`); + throw new Error(`Unknown dtype ${r15}`); } -function ow(r) { - if (r == null) +function rw(r15) { + if (r15 == null) return 0; let t8 = 0; - return r.forEach((e) => t8 += e.length), t8; + return r15.forEach((e) => t8 += e.length), t8; } -function Vo(r) { - return typeof r == "string" || r instanceof String; +function zo(r15) { + return typeof r15 == "string" || r15 instanceof String; } -function v0(r) { - return typeof r == "boolean"; +function k0(r15) { + return typeof r15 == "boolean"; } -function k0(r) { - return typeof r == "number"; +function N0(r15) { + return typeof r15 == "number"; } -function Ri(r) { - return Array.isArray(r) ? Ri(r[0]) : r instanceof Float32Array ? "float32" : r instanceof Int32Array || r instanceof Uint8Array || r instanceof Uint8ClampedArray ? "int32" : k0(r) ? "float32" : Vo(r) ? "string" : v0(r) ? "bool" : "float32"; +function _i(r15) { + return Array.isArray(r15) ? _i(r15[0]) : r15 instanceof Float32Array ? "float32" : r15 instanceof Int32Array || r15 instanceof Uint8Array || r15 instanceof Uint8ClampedArray ? "int32" : N0(r15) ? "float32" : zo(r15) ? "string" : k0(r15) ? "bool" : "float32"; } -function qs(r) { - return !!(r && r.constructor && r.call && r.apply); +function qs(r15) { + return !!(r15 && r15.constructor && r15.call && r15.apply); } -function Xp(r, t8) { - for (let e = t8; e < r; ++e) - if (r % e === 0) +function Vp(r15, t8) { + for (let e = t8; e < r15; ++e) + if (r15 % e === 0) return e; - return r; + return r15; } -function js(r) { - let t8 = r.length; +function js(r15) { + let t8 = r15.length; if (t8 < 2) return []; let e = new Array(t8 - 1); - e[t8 - 2] = r[t8 - 1]; + e[t8 - 2] = r15[t8 - 1]; for (let o = t8 - 3; o >= 0; --o) - e[o] = e[o + 1] * r[o + 1]; + e[o] = e[o + 1] * r15[o + 1]; return e; } -function N0(r, t8, e, o = false) { +function T0(r15, t8, e, o = false) { let n = new Array(); if (t8.length === 1) { let s = t8[0] * (o ? 2 : 1); for (let a = 0; a < s; a++) - n[a] = e[r + a]; + n[a] = e[r15 + a]; } else { let s = t8[0], a = t8.slice(1), i = a.reduce((p, u) => p * u) * (o ? 2 : 1); for (let p = 0; p < s; p++) - n[p] = N0(r + p * i, a, e, o); + n[p] = T0(r15 + p * i, a, e, o); } return n; } -function Du(r, t8, e = false) { - if (r.length === 0) +function ku(r15, t8, e = false) { + if (r15.length === 0) return t8[0]; - let o = r.reduce((n, s) => n * s) * (e ? 2 : 1); + let o = r15.reduce((n, s) => n * s) * (e ? 2 : 1); if (o === 0) return []; if (o !== t8.length) - throw new Error(`[${r}] does not match the input size ${t8.length}${e ? " for a complex tensor" : ""}.`); - return N0(0, r, t8, e); + throw new Error(`[${r15}] does not match the input size ${t8.length}${e ? " for a complex tensor" : ""}.`); + return T0(0, r15, t8, e); } -function BG(r, t8) { - if (Array.isArray(r)) - return r; +function zG(r15, t8) { + if (Array.isArray(r15)) + return r15; if (t8 === "float32") - return r instanceof Float32Array ? r : new Float32Array(r); + return r15 instanceof Float32Array ? r15 : new Float32Array(r15); if (t8 === "int32") - return r instanceof Int32Array ? r : new Int32Array(r); + return r15 instanceof Int32Array ? r15 : new Int32Array(r15); if (t8 === "bool" || t8 === "string") - return Uint8Array.from(new Int32Array(r)); + return Uint8Array.from(new Int32Array(r15)); throw new Error(`Unknown dtype ${t8}`); } -function fl(r, t8) { - let e = Yp(r, t8); +function cl(r15, t8) { + let e = Wp(r15, t8); for (let o = 0; o < e.length; o++) e[o] = 1; return e; } -function Yp(r, t8) { +function Wp(r15, t8) { if (t8 == null || t8 === "float32" || t8 === "complex64") - return new Float32Array(r); + return new Float32Array(r15); if (t8 === "int32") - return new Int32Array(r); + return new Int32Array(r15); if (t8 === "bool") - return new Uint8Array(r); + return new Uint8Array(r15); throw new Error(`Unknown data type ${t8}`); } -function zG(r, t8) { - let e = r.reduce((o, n) => o * n, 1); +function VG(r15, t8) { + let e = r15.reduce((o, n) => o * n, 1); if (t8 == null || t8 === "float32") - return Du(r, new Float32Array(e)); + return ku(r15, new Float32Array(e)); if (t8 === "int32") - return Du(r, new Int32Array(e)); + return ku(r15, new Int32Array(e)); if (t8 === "bool") - return Du(r, new Uint8Array(e)); + return ku(r15, new Uint8Array(e)); throw new Error(`Unknown data type ${t8}`); } -function wt(r) { - r.forEach((t8) => { - $(Number.isInteger(t8) && t8 >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r}].`); +function Ct(r15) { + r15.forEach((t8) => { + $(Number.isInteger(t8) && t8 >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r15}].`); }); } -function VG(r, t8, e) { +function WG(r15, t8, e) { if (t8 === 0) return 0; if (t8 === 1) - return r[0]; - let o = r[r.length - 1]; - for (let n = 0; n < r.length - 1; ++n) - o += e[n] * r[n]; + return r15[0]; + let o = r15[r15.length - 1]; + for (let n = 0; n < r15.length - 1; ++n) + o += e[n] * r15[n]; return o; } -function WG(r, t8, e) { +function UG(r15, t8, e) { if (t8 === 0) return []; if (t8 === 1) - return [r]; + return [r15]; let o = new Array(t8); for (let n = 0; n < o.length - 1; ++n) - o[n] = Math.floor(r / e[n]), r -= o[n] * e[n]; - return o[o.length - 1] = r, o; + o[n] = Math.floor(r15 / e[n]), r15 -= o[n] * e[n]; + return o[o.length - 1] = r15, o; } -function Fu(r) { - return r && r.then && typeof r.then == "function"; +function Tu(r15) { + return r15 && r15.then && typeof r15.then == "function"; } -var T0 = "tfjsflags"; -var hl = class { +var _0 = "tfjsflags"; +var ll = class { constructor(t8) { - this.global = t8, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = GG, this.populateURLFlags(); + this.global = t8, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = HG, this.populateURLFlags(); } setPlatform(t8, e) { this.platform != null && (A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${t8}.`)), this.platformName = t8, this.platform = e; @@ -3369,7 +3370,7 @@ var hl = class { if (t8 in this.flags) return this.flags[t8]; let e = this.evaluateFlag(t8); - if (Fu(e)) + if (Tu(e)) throw new Error(`Flag ${t8} cannot be synchronously evaluated. Please use getAsync() instead.`); return this.flags[t8] = e, this.flags[t8]; } @@ -3408,450 +3409,450 @@ var hl = class { if (typeof this.global == "undefined" || typeof this.global.location == "undefined" || typeof this.global.location.search == "undefined") return; let t8 = this.getQueryParams(this.global.location.search); - T0 in t8 && t8[T0].split(",").forEach((o) => { + _0 in t8 && t8[_0].split(",").forEach((o) => { let [n, s] = o.split(":"); - this.urlFlags[n] = KG(n, s); + this.urlFlags[n] = qG(n, s); }); } }; -function GG(r) { +function HG(r15) { let t8 = {}; - return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (e, ...o) => (HG(t8, o[0], o[1]), o.join("="))), t8; + return r15.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (e, ...o) => (KG(t8, o[0], o[1]), o.join("="))), t8; } -function HG(r, t8, e) { - r[decodeURIComponent(t8)] = decodeURIComponent(e || ""); +function KG(r15, t8, e) { + r15[decodeURIComponent(t8)] = decodeURIComponent(e || ""); } -function KG(r, t8) { +function qG(r15, t8) { let e = t8.toLowerCase(); return e === "true" || e === "false" ? e === "true" : `${+e}` === e ? +e : t8; } function A() { - return nw; + return ow; } -var nw = null; -function _0(r) { - nw = r; +var ow = null; +function $0(r15) { + ow = r15; } -var sw; -function aw() { - if (sw == null) { - let r; +var nw; +function sw() { + if (nw == null) { + let r15; if (typeof window != "undefined") - r = window; + r15 = window; else if (typeof global != "undefined") - r = global; + r15 = global; else if (typeof process != "undefined") - r = process; + r15 = process; else if (typeof self != "undefined") - r = self; + r15 = self; else throw new Error("Could not find a global object"); - sw = r; + nw = r15; } - return sw; + return nw; } -function qG() { - let r = aw(); - return r._tfGlobals == null && (r._tfGlobals = /* @__PURE__ */ new Map()), r._tfGlobals; +function jG() { + let r15 = sw(); + return r15._tfGlobals == null && (r15._tfGlobals = /* @__PURE__ */ new Map()), r15._tfGlobals; } -function gl(r, t8) { - let e = qG(); - if (e.has(r)) - return e.get(r); +function ml(r15, t8) { + let e = jG(); + if (e.has(r15)) + return e.get(r15); { let o = t8(); - return e.set(r, o), e.get(r); + return e.set(r15, o), e.get(r15); } } var Xs = "Abs"; -var Wo = "Acos"; -var Uo = "Acosh"; -var uo = "Add"; -var Go = "AddN"; -var Ho = "All"; -var Ko = "Any"; +var Vo = "Acos"; +var Wo = "Acosh"; +var io = "Add"; +var Uo = "AddN"; +var Go = "All"; +var Ho = "Any"; var Ys = "ArgMax"; var Qs = "ArgMin"; -var qo = "Asin"; -var jo = "Asinh"; -var Xo = "Atan"; -var Yo = "Atanh"; -var Qo = "Atan2"; -var Zo = "AvgPool"; -var Di = "AvgPoolGrad"; +var Ko = "Asin"; +var qo = "Asinh"; +var jo = "Atan"; +var Xo = "Atanh"; +var Yo = "Atan2"; +var Qo = "AvgPool"; +var $i = "AvgPoolGrad"; var Zs = "AvgPool3D"; -var Ai = "AvgPool3DGrad"; -var Jo = "BatchMatMul"; +var Ei = "AvgPool3DGrad"; +var Zo = "BatchMatMul"; var Js = "BatchToSpaceND"; -var en = "Bincount"; -var ja = "BitwiseAnd"; +var Jo = "Bincount"; +var qa = "BitwiseAnd"; var Bce = "BroadcastTo"; var ea = "BroadcastArgs"; -var bo = "Cast"; -var tn = "Ceil"; -var Co = "ClipByValue"; -var Fi = "Complex"; -var Pi = "ComplexAbs"; +var yo = "Cast"; +var en = "Ceil"; +var bo = "ClipByValue"; +var Ri = "Complex"; +var Di = "ComplexAbs"; var ta = "Concat"; -var rn = "Conv2D"; -var Oi = "Conv2DBackpropFilter"; -var on = "Conv2DBackpropInput"; -var nn = "Conv3D"; -var Xa = "Conv3DBackpropFilterV2"; -var sn = "Conv3DBackpropInputV2"; -var an = "Cos"; -var un = "Cosh"; -var pn = "Cumprod"; -var cn = "Cumsum"; -var ln = "CropAndResize"; +var tn = "Conv2D"; +var Ai = "Conv2DBackpropFilter"; +var rn = "Conv2DBackpropInput"; +var on = "Conv3D"; +var ja = "Conv3DBackpropFilterV2"; +var nn = "Conv3DBackpropInputV2"; +var sn = "Cos"; +var an = "Cosh"; +var un = "Cumprod"; +var pn = "Cumsum"; +var cn = "CropAndResize"; var ra = "DenseBincount"; -var mn = "DepthToSpace"; -var dn = "DepthwiseConv2dNative"; -var Mi = "DepthwiseConv2dNativeBackpropFilter"; -var Li = "DepthwiseConv2dNativeBackpropInput"; +var ln = "DepthToSpace"; +var mn = "DepthwiseConv2dNative"; +var Fi = "DepthwiseConv2dNativeBackpropFilter"; +var Pi = "DepthwiseConv2dNativeBackpropInput"; var oa = "Diag"; -var fn = "Dilation2D"; -var Bi = "Dilation2DBackpropInput"; -var zi = "Dilation2DBackpropFilter"; -var Pu = "Draw"; -var hn = "RealDiv"; -var Vi = "Einsum"; -var gn = "Elu"; -var Ya = "EluGrad"; -var xn = "Erf"; -var yn = "Equal"; -var bn = "Exp"; +var dn = "Dilation2D"; +var Oi = "Dilation2DBackpropInput"; +var Mi = "Dilation2DBackpropFilter"; +var _u = "Draw"; +var fn = "RealDiv"; +var Li = "Einsum"; +var hn = "Elu"; +var Xa = "EluGrad"; +var gn = "Erf"; +var xn = "Equal"; +var yn = "Exp"; var na = "ExpandDims"; -var Cn = "Expm1"; -var Wi = "FFT"; +var bn = "Expm1"; +var Bi = "FFT"; var sa = "Fill"; -var wn = "FlipLeftRight"; -var Sn = "Floor"; -var In = "FloorDiv"; -var vn = "FusedBatchNorm"; +var Cn = "FlipLeftRight"; +var wn = "Floor"; +var Sn = "FloorDiv"; +var In = "FusedBatchNorm"; var aa = "GatherV2"; -var kn = "GatherNd"; -var Nn = "Greater"; -var Tn = "GreaterEqual"; -var wo = "Identity"; -var Ui = "IFFT"; -var Gi = "Imag"; -var _n = "IsFinite"; -var $n = "IsInf"; -var En = "IsNan"; -var Rn = "LeakyRelu"; -var Dn = "Less"; -var An = "LessEqual"; -var Fn = "LinSpace"; -var Pn = "Log"; -var On = "Log1p"; -var Mn = "LogicalAnd"; -var Ln = "LogicalNot"; -var Bn = "LogicalOr"; -var $0 = "LogicalXor"; +var vn = "GatherNd"; +var kn = "Greater"; +var Nn = "GreaterEqual"; +var Co = "Identity"; +var zi = "IFFT"; +var Vi = "Imag"; +var Tn = "IsFinite"; +var _n = "IsInf"; +var $n = "IsNan"; +var En = "LeakyRelu"; +var Rn = "Less"; +var Dn = "LessEqual"; +var An = "LinSpace"; +var Fn = "Log"; +var Pn = "Log1p"; +var On = "LogicalAnd"; +var Mn = "LogicalNot"; +var Ln = "LogicalOr"; +var E0 = "LogicalXor"; var zce = "LogSoftmax"; var Vce = "LowerBound"; -var zn = "LRN"; -var Qa = "LRNGrad"; +var Bn = "LRN"; +var Ya = "LRNGrad"; var Wce = "MatrixBandPart"; -var Vn = "Max"; -var Wn = "Maximum"; -var Un = "MaxPool"; -var Hi = "MaxPoolGrad"; +var zn = "Max"; +var Vn = "Maximum"; +var Wn = "MaxPool"; +var Wi = "MaxPoolGrad"; var ia = "MaxPool3D"; -var Ki = "MaxPool3DGrad"; +var Ui = "MaxPool3DGrad"; var ua = "MaxPoolWithArgmax"; -var Gn = "Mean"; -var Hn = "Min"; -var Kn = "Minimum"; -var qn = "MirrorPad"; -var jn = "Mod"; -var Xn = "Multinomial"; -var Yn = "Multiply"; +var Un = "Mean"; +var Gn = "Min"; +var Hn = "Minimum"; +var Kn = "MirrorPad"; +var qn = "Mod"; +var jn = "Multinomial"; +var Xn = "Multiply"; var pa = "Neg"; -var Qn = "NotEqual"; -var Zn = "NonMaxSuppressionV3"; -var Za = "NonMaxSuppressionV4"; -var Jn = "NonMaxSuppressionV5"; +var Yn = "NotEqual"; +var Qn = "NonMaxSuppressionV3"; +var Qa = "NonMaxSuppressionV4"; +var Zn = "NonMaxSuppressionV5"; var ca = "OnesLike"; -var es = "OneHot"; +var Jn = "OneHot"; var la = "Pack"; -var ts = "PadV2"; +var es = "PadV2"; var Uce = "Pool"; -var rs = "Pow"; -var os = "Prelu"; -var ns = "Prod"; -var Qp = "RaggedGather"; -var Zp = "RaggedRange"; -var Jp = "RaggedTensorToTensor"; +var ts = "Pow"; +var rs = "Prelu"; +var os = "Prod"; +var Up = "RaggedGather"; +var Gp = "RaggedRange"; +var Hp = "RaggedTensorToTensor"; var ma = "Range"; -var qi = "Real"; -var ss = "Reciprocal"; -var as = "Relu"; +var Gi = "Real"; +var ns = "Reciprocal"; +var ss = "Relu"; var da = "Reshape"; -var is = "ResizeNearestNeighbor"; -var Ja = "ResizeNearestNeighborGrad"; -var us = "ResizeBilinear"; -var ei = "ResizeBilinearGrad"; -var ps = "Relu6"; -var cs = "Reverse"; -var ls = "Round"; -var ms = "Rsqrt"; -var ds = "ScatterNd"; -var fs = "TensorScatterUpdate"; -var hs = "SearchSorted"; +var as = "ResizeNearestNeighbor"; +var Za = "ResizeNearestNeighborGrad"; +var is = "ResizeBilinear"; +var Ja = "ResizeBilinearGrad"; +var us = "Relu6"; +var ps = "Reverse"; +var cs = "Round"; +var ls = "Rsqrt"; +var ms = "ScatterNd"; +var ds = "TensorScatterUpdate"; +var fs = "SearchSorted"; var fa = "Select"; -var gs = "Selu"; +var hs = "Selu"; var ha = "Slice"; -var xs = "Sin"; -var ys = "Sinh"; -var bs = "Sign"; -var Cs = "Sigmoid"; -var ws = "Softplus"; -var Ss = "Sqrt"; -var Is = "Sum"; +var gs = "Sin"; +var xs = "Sinh"; +var ys = "Sign"; +var bs = "Sigmoid"; +var Cs = "Softplus"; +var ws = "Sqrt"; +var Ss = "Sum"; var ga = "SpaceToBatchND"; var xa = "SplitV"; -var vs = "Softmax"; -var ji = "SparseFillEmptyRows"; -var ti = "SparseReshape"; +var Is = "Softmax"; +var Hi = "SparseFillEmptyRows"; +var ei = "SparseReshape"; var ya = "SparseSegmentMean"; var ba = "SparseSegmentSum"; -var ks = "SparseToDense"; -var Ns = "SquaredDifference"; -var Xi = "Square"; -var Ou = "StaticRegexReplace"; -var Ts = "StridedSlice"; +var vs = "SparseToDense"; +var ks = "SquaredDifference"; +var Ki = "Square"; +var $u = "StaticRegexReplace"; +var Ns = "StridedSlice"; var Ca = "StringNGrams"; -var Yi = "StringSplit"; -var Qi = "StringToHashBucketFast"; -var _s = "Sub"; -var $s = "Tan"; -var Es = "Tanh"; -var po = "Tile"; -var Rs = "TopK"; -var Ds = "Transform"; -var co = "Transpose"; -var Zi = "Unique"; +var qi = "StringSplit"; +var ji = "StringToHashBucketFast"; +var Ts = "Sub"; +var _s = "Tan"; +var $s = "Tanh"; +var uo = "Tile"; +var Es = "TopK"; +var Rs = "Transform"; +var po = "Transpose"; +var Xi = "Unique"; var wa = "Unpack"; -var Ji = "UnsortedSegmentSum"; +var Yi = "UnsortedSegmentSum"; var Gce = "UpperBound"; var Sa = "ZerosLike"; -var So = "Step"; -var Mu = "FromPixels"; -var As = "RotateWithOffset"; -var Io = "_FusedMatMul"; -var vo = "FusedConv2D"; -var ko = "FusedDepthwiseConv2D"; -function Ia(...r) { - A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(...r); +var wo = "Step"; +var Eu = "FromPixels"; +var Ds = "RotateWithOffset"; +var So = "_FusedMatMul"; +var Io = "FusedConv2D"; +var vo = "FusedDepthwiseConv2D"; +function Ia(...r15) { + A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(...r15); } -function jG(...r) { - A().getBool("IS_TEST") || A().getBool("PROD") || console.log(...r); +function XG(...r15) { + A().getBool("IS_TEST") || A().getBool("PROD") || console.log(...r15); } -var ec = gl("kernelRegistry", () => /* @__PURE__ */ new Map()); -var xl = gl("gradRegistry", () => /* @__PURE__ */ new Map()); -function tc(r, t8) { - let e = uw(r, t8); - return ec.get(e); +var Kp = ml("kernelRegistry", () => /* @__PURE__ */ new Map()); +var dl = ml("gradRegistry", () => /* @__PURE__ */ new Map()); +function qp(r15, t8) { + let e = iw(r15, t8); + return Kp.get(e); } -function iw(r) { - return xl.get(r); +function aw(r15) { + return dl.get(r15); } -function Ym(r) { - let t8 = ec.entries(), e = []; +function jm(r15) { + let t8 = Kp.entries(), e = []; for (; ; ) { let { done: o, value: n } = t8.next(); if (o) break; let [s, a] = n, [i] = s.split("_"); - i === r && e.push(a); + i === r15 && e.push(a); } return e; } -function ri(r) { - let { kernelName: t8, backendName: e } = r, o = uw(t8, e); - ec.has(o) && Ia(`The kernel '${t8}' for backend '${e}' is already registered`), ec.set(o, r); +function ti(r15) { + let { kernelName: t8, backendName: e } = r15, o = iw(t8, e); + Kp.has(o) && Ia(`The kernel '${t8}' for backend '${e}' is already registered`), Kp.set(o, r15); } -function Xce(r) { - let { kernelName: t8 } = r; - xl.has(t8) && A().getBool("DEBUG") && Ia(`Overriding the gradient for '${t8}'`), xl.set(t8, r); +function Xce(r15) { + let { kernelName: t8 } = r15; + dl.has(t8) && A().getBool("DEBUG") && Ia(`Overriding the gradient for '${t8}'`), dl.set(t8, r15); } -function Yce(r, t8) { - let e = uw(r, t8); - if (!ec.has(e)) - throw new Error(`The kernel '${r}' for backend '${t8}' is not registered`); - ec.delete(e); +function Yce(r15, t8) { + let e = iw(r15, t8); + if (!Kp.has(e)) + throw new Error(`The kernel '${r15}' for backend '${t8}' is not registered`); + Kp.delete(e); } -function Qce(r) { - if (!xl.has(r)) - throw new Error(`The gradient '${r}' for backend is not registered`); - xl.delete(r); +function Qce(r15) { + if (!dl.has(r15)) + throw new Error(`The gradient '${r15}' for backend is not registered`); + dl.delete(r15); } -function Zce(r, t8) { - Ym(r).forEach((o) => { +function Zce(r15, t8) { + jm(r15).forEach((o) => { let n = Object.assign({}, o, { backendName: t8 }); - ri(n); + ti(n); }); } -function uw(r, t8) { - return `${t8}_${r}`; +function iw(r15, t8) { + return `${t8}_${r15}`; } var y = {}; -qe(y, { arraysEqual: () => Cr, arraysEqualWithNull: () => ZC, assert: () => $, assertNonNegativeIntegerDimensions: () => wt, assertNonNull: () => io, assertShapesMatch: () => yt, bytesFromStringArray: () => ow, bytesPerElement: () => jp, checkConversionForErrors: () => tw, clamp: () => qp, computeStrides: () => js, convertBackendValuesAndArrayBuffer: () => BG, createScalarValue: () => t4, createShuffledIndices: () => PG, decodeString: () => sc, distSquared: () => RG, encodeString: () => tu, fetch: () => o4, fingerPrint64: () => e4, flatten: () => Ps, getArrayFromDType: () => Xm, getTypedArrayFromDType: () => ew, hasEncodingLoss: () => LG, hexToLong: () => yl, indexToLoc: () => WG, inferDtype: () => Ri, inferFromImplicitShape: () => MG, isBoolean: () => v0, isFunction: () => qs, isInt: () => qa, isNumber: () => k0, isPromise: () => Fu, isScalarShape: () => DG, isString: () => Vo, isTypedArray: () => Ot, isValidDtype: () => rw, locToIndex: () => VG, makeOnesTypedArray: () => fl, makeZerosNestedTypedArray: () => zG, makeZerosTypedArray: () => Yp, nearestDivisor: () => Xp, nearestLargerEven: () => _G, now: () => Wu, parseAxisParam: () => Ei, randUniform: () => EG, repeatedTry: () => OG, rightPad: () => Au, shuffle: () => I0, shuffleCombo: () => TG, sizeFromShape: () => He, sizeToSquarishShape: () => FG, squeezeShape: () => JC, sum: () => $G, swap: () => jm, tanh: () => AG, toNestedArray: () => Du, toTypedArray: () => nc }); -function Qm(r) { - return r instanceof Float32Array || r instanceof Int32Array || r instanceof Uint8Array || r instanceof Uint8ClampedArray; +qe(y, { arraysEqual: () => br, arraysEqualWithNull: () => QC, assert: () => $, assertNonNegativeIntegerDimensions: () => Ct, assertNonNull: () => ao, assertShapesMatch: () => xt, bytesFromStringArray: () => rw, bytesPerElement: () => zp, checkConversionForErrors: () => ew, clamp: () => Bp, computeStrides: () => js, convertBackendValuesAndArrayBuffer: () => zG, createScalarValue: () => r4, createShuffledIndices: () => OG, decodeString: () => Qp, distSquared: () => DG, encodeString: () => Zi, fetch: () => n4, fingerPrint64: () => t4, flatten: () => Fs, getArrayFromDType: () => qm, getTypedArrayFromDType: () => JC, hasEncodingLoss: () => BG, hexToLong: () => fl, indexToLoc: () => UG, inferDtype: () => _i, inferFromImplicitShape: () => LG, isBoolean: () => k0, isFunction: () => qs, isInt: () => Ka, isNumber: () => N0, isPromise: () => Tu, isScalarShape: () => AG, isString: () => zo, isTypedArray: () => Pt, isValidDtype: () => tw, locToIndex: () => WG, makeOnesTypedArray: () => cl, makeZerosNestedTypedArray: () => VG, makeZerosTypedArray: () => Wp, nearestDivisor: () => Vp, nearestLargerEven: () => $G, now: () => Pu, parseAxisParam: () => Ti, randUniform: () => RG, repeatedTry: () => MG, rightPad: () => Nu, shuffle: () => v0, shuffleCombo: () => _G, sizeFromShape: () => He, sizeToSquarishShape: () => PG, squeezeShape: () => ZC, sum: () => EG, swap: () => Km, tanh: () => FG, toNestedArray: () => ku, toTypedArray: () => Yp }); +function Xm(r15) { + return r15 instanceof Float32Array || r15 instanceof Int32Array || r15 instanceof Uint8Array || r15 instanceof Uint8ClampedArray; } -var mw = Kp(V0()); -var Vu = mw.default || mw; -function yl(r) { - return Vu.fromString(r, true, 16); +var lw = Lp(W0()); +var Fu = lw.default || lw; +function fl(r15) { + return Fu.fromString(r15, true, 16); } -var U0 = yl("c3a5c85c97cb3127"); -var zu = yl("b492b66fbe98f273"); -var wr = yl("9ae16a3b2f90404f"); -function lw(r) { - return r.xor(r.shru(47)); +var G0 = fl("c3a5c85c97cb3127"); +var Au = fl("b492b66fbe98f273"); +var Cr = fl("9ae16a3b2f90404f"); +function cw(r15) { + return r15.xor(r15.shru(47)); } -function G0(r, t8, e) { - let o = r.slice(t8, t8 + e); - return Vu.fromBytes(Array.from(o), true, true); +function H0(r15, t8, e) { + let o = r15.slice(t8, t8 + e); + return Fu.fromBytes(Array.from(o), true, true); } -function St(r, t8) { - return G0(r, t8, 8); +function wt(r15, t8) { + return H0(r15, t8, 8); } -function W0(r, t8) { - return G0(r, t8, 4); +function U0(r15, t8) { + return H0(r15, t8, 4); } -function Qt(r, t8) { - return t8 === 0 ? r : r.shru(t8).or(r.shl(64 - t8)); +function Yt(r15, t8) { + return t8 === 0 ? r15 : r15.shru(t8).or(r15.shl(64 - t8)); } -function eu(r, t8, e = yl("9ddfea08eb382d69")) { - let o = r.xor(t8).mul(e); +function Qi(r15, t8, e = fl("9ddfea08eb382d69")) { + let o = r15.xor(t8).mul(e); o = o.xor(o.shru(47)); let n = t8.xor(o).mul(e); return n = n.xor(n.shru(47)), n = n.mul(e), n; } -function YG(r, t8, e, o, n, s) { - n = n.add(r), s = Qt(s.add(n).add(o), 21); +function QG(r15, t8, e, o, n, s) { + n = n.add(r15), s = Yt(s.add(n).add(o), 21); let a = n; - return n = n.add(t8), n = n.add(e), s = s.add(Qt(n, 44)), [n.add(o), s.add(a)]; + return n = n.add(t8), n = n.add(e), s = s.add(Yt(n, 44)), [n.add(o), s.add(a)]; } -function Jm(r, t8, e, o) { - return YG(St(r, t8), St(r, t8 + 8), St(r, t8 + 16), St(r, t8 + 24), e, o); +function Qm(r15, t8, e, o) { + return QG(wt(r15, t8), wt(r15, t8 + 8), wt(r15, t8 + 16), wt(r15, t8 + 24), e, o); } -function QG(r, t8 = r.length) { +function ZG(r15, t8 = r15.length) { if (t8 >= 8) { - let e = wr.add(t8 * 2), o = St(r, 0).add(wr), n = St(r, t8 - 8), s = Qt(n, 37).mul(e).add(o), a = Qt(o, 25).add(n).mul(e); - return eu(s, a, e); + let e = Cr.add(t8 * 2), o = wt(r15, 0).add(Cr), n = wt(r15, t8 - 8), s = Yt(n, 37).mul(e).add(o), a = Yt(o, 25).add(n).mul(e); + return Qi(s, a, e); } if (t8 >= 4) { - let e = wr.add(t8 * 2), o = W0(r, 0); - return eu(o.shl(3).add(t8), W0(r, t8 - 4), e); + let e = Cr.add(t8 * 2), o = U0(r15, 0); + return Qi(o.shl(3).add(t8), U0(r15, t8 - 4), e); } if (t8 > 0) { - let e = r[0], o = r[t8 >> 1], n = r[t8 - 1], s = e + (o << 8), a = t8 + (n << 2); - return lw(wr.mul(s).xor(U0.mul(a))).mul(wr); + let e = r15[0], o = r15[t8 >> 1], n = r15[t8 - 1], s = e + (o << 8), a = t8 + (n << 2); + return cw(Cr.mul(s).xor(G0.mul(a))).mul(Cr); } - return wr; + return Cr; } -function ZG(r, t8 = r.length) { - let e = wr.add(t8 * 2), o = St(r, 0).mul(zu), n = St(r, 8), s = St(r, t8 - 8).mul(e), a = St(r, t8 - 16).mul(wr); - return eu(Qt(o.add(n), 43).add(Qt(s, 30)).add(a), o.add(Qt(n.add(wr), 18)).add(s), e); +function JG(r15, t8 = r15.length) { + let e = Cr.add(t8 * 2), o = wt(r15, 0).mul(Au), n = wt(r15, 8), s = wt(r15, t8 - 8).mul(e), a = wt(r15, t8 - 16).mul(Cr); + return Qi(Yt(o.add(n), 43).add(Yt(s, 30)).add(a), o.add(Yt(n.add(Cr), 18)).add(s), e); } -function JG(r, t8 = r.length) { - let e = wr.add(t8 * 2), o = St(r, 0).mul(wr), n = St(r, 8), s = St(r, t8 - 8).mul(e), a = St(r, t8 - 16).mul(wr), i = Qt(o.add(n), 43).add(Qt(s, 30)).add(a), p = eu(i, o.add(Qt(n.add(wr), 18)).add(s), e), u = St(r, 16).mul(e), c = St(r, 24), l = i.add(St(r, t8 - 32)).mul(e), m = p.add(St(r, t8 - 24)).mul(e); - return eu(Qt(u.add(c), 43).add(Qt(l, 30)).add(m), u.add(Qt(c.add(o), 18)).add(l), e); +function e4(r15, t8 = r15.length) { + let e = Cr.add(t8 * 2), o = wt(r15, 0).mul(Cr), n = wt(r15, 8), s = wt(r15, t8 - 8).mul(e), a = wt(r15, t8 - 16).mul(Cr), i = Yt(o.add(n), 43).add(Yt(s, 30)).add(a), p = Qi(i, o.add(Yt(n.add(Cr), 18)).add(s), e), u = wt(r15, 16).mul(e), c = wt(r15, 24), l = i.add(wt(r15, t8 - 32)).mul(e), m = p.add(wt(r15, t8 - 24)).mul(e); + return Qi(Yt(u.add(c), 43).add(Yt(l, 30)).add(m), u.add(Yt(c.add(o), 18)).add(l), e); } -function e4(r, t8 = r.length) { - let e = Vu.fromNumber(81, true); +function t4(r15, t8 = r15.length) { + let e = Fu.fromNumber(81, true); if (t8 <= 32) - return t8 <= 16 ? QG(r, t8) : ZG(r, t8); + return t8 <= 16 ? ZG(r15, t8) : JG(r15, t8); if (t8 <= 64) - return JG(r, t8); - let o = e, n = e.mul(zu).add(113), s = lw(n.mul(wr).add(113)).mul(wr), a = [Vu.UZERO, Vu.UZERO], i = [Vu.UZERO, Vu.UZERO]; - o = o.mul(wr).add(St(r, 0)); + return e4(r15, t8); + let o = e, n = e.mul(Au).add(113), s = cw(n.mul(Cr).add(113)).mul(Cr), a = [Fu.UZERO, Fu.UZERO], i = [Fu.UZERO, Fu.UZERO]; + o = o.mul(Cr).add(wt(r15, 0)); let p = 0, u = (t8 - 1 >> 6) * 64, c = u + (t8 - 1 & 63) - 63; do - o = Qt(o.add(n).add(a[0]).add(St(r, p + 8)), 37).mul(zu), n = Qt(n.add(a[1]).add(St(r, p + 48)), 42).mul(zu), o = o.xor(i[1]), n = n.add(a[0]).add(St(r, p + 40)), s = Qt(s.add(i[0]), 33).mul(zu), a = Jm(r, p, a[1].mul(zu), o.add(i[0])), i = Jm(r, p + 32, s.add(i[1]), n.add(St(r, p + 16))), [s, o] = [o, s], p += 64; + o = Yt(o.add(n).add(a[0]).add(wt(r15, p + 8)), 37).mul(Au), n = Yt(n.add(a[1]).add(wt(r15, p + 48)), 42).mul(Au), o = o.xor(i[1]), n = n.add(a[0]).add(wt(r15, p + 40)), s = Yt(s.add(i[0]), 33).mul(Au), a = Qm(r15, p, a[1].mul(Au), o.add(i[0])), i = Qm(r15, p + 32, s.add(i[1]), n.add(wt(r15, p + 16))), [s, o] = [o, s], p += 64; while (p !== u); - let l = zu.add(s.and(255).shl(1)); - return p = c, i[0] = i[0].add(t8 - 1 & 63), a[0] = a[0].add(i[0]), i[0] = i[0].add(a[0]), o = Qt(o.add(n).add(a[0]).add(St(r, p + 8)), 37).mul(l), n = Qt(n.add(a[1]).add(St(r, p + 48)), 42).mul(l), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(St(r, p + 40))), s = Qt(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(St(r, p + 16))), [s, o] = [o, s], eu(eu(a[0], i[0], l).add(lw(n).mul(U0)).add(s), eu(a[1], i[1], l).add(o), l); + let l = Au.add(s.and(255).shl(1)); + return p = c, i[0] = i[0].add(t8 - 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(r15, p + 8)), 37).mul(l), n = Yt(n.add(a[1]).add(wt(r15, p + 48)), 42).mul(l), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(wt(r15, p + 40))), s = Yt(s.add(i[0]), 33).mul(l), a = Qm(r15, p, a[1].mul(l), o.add(i[0])), i = Qm(r15, p + 32, s.add(i[1]), n.add(wt(r15, p + 16))), [s, o] = [o, s], Qi(Qi(a[0], i[0], l).add(cw(n).mul(G0)).add(s), Qi(a[1], i[1], l).add(o), l); } -function t4(r, t8) { - return t8 === "string" ? tu(r) : nc([r], t8); +function r4(r15, t8) { + return t8 === "string" ? Zi(r15) : Yp([r15], t8); } -function r4(r, t8) { - return r instanceof Float32Array && t8 === "float32" || r instanceof Int32Array && t8 === "int32" || r instanceof Uint8Array && t8 === "bool"; +function o4(r15, t8) { + return r15 instanceof Float32Array && t8 === "float32" || r15 instanceof Int32Array && t8 === "int32" || r15 instanceof Uint8Array && t8 === "bool"; } -function nc(r, t8) { +function Yp(r15, t8) { if (t8 === "string") throw new Error("Cannot convert a string[] to a TypedArray"); - if (Array.isArray(r) && (r = Ps(r)), A().getBool("DEBUG") && tw(r, t8), r4(r, t8)) - return r; + if (Array.isArray(r15) && (r15 = Fs(r15)), A().getBool("DEBUG") && ew(r15, t8), o4(r15, t8)) + return r15; if (t8 == null || t8 === "float32" || t8 === "complex64") - return new Float32Array(r); + return new Float32Array(r15); if (t8 === "int32") - return new Int32Array(r); + return new Int32Array(r15); if (t8 === "bool") { - let e = new Uint8Array(r.length); + let e = new Uint8Array(r15.length); for (let o = 0; o < e.length; ++o) - Math.round(r[o]) !== 0 && (e[o] = 1); + Math.round(r15[o]) !== 0 && (e[o] = 1); return e; } else throw new Error(`Unknown data type ${t8}`); } -function Wu() { +function Pu() { return A().platform.now(); } -function o4(r, t8) { - return A().platform.fetch(r, t8); +function n4(r15, t8) { + return A().platform.fetch(r15, t8); } -function tu(r, t8 = "utf-8") { - return t8 = t8 || "utf-8", A().platform.encode(r, t8); +function Zi(r15, t8 = "utf-8") { + return t8 = t8 || "utf-8", A().platform.encode(r15, t8); } -function sc(r, t8 = "utf-8") { - return t8 = t8 || "utf-8", A().platform.decode(r, t8); +function Qp(r15, t8 = "utf-8") { + return t8 = t8 || "utf-8", A().platform.decode(r15, t8); } -function Ot(r) { - return A().platform.isTypedArray != null ? A().platform.isTypedArray(r) : Qm(r); +function Pt(r15) { + return A().platform.isTypedArray != null ? A().platform.isTypedArray(r15) : Xm(r15); } -function Ps(r, t8 = [], e = false) { - if (t8 == null && (t8 = []), typeof r == "boolean" || typeof r == "number" || typeof r == "string" || Fu(r) || r == null || Ot(r) && e) - t8.push(r); - else if (Array.isArray(r) || Ot(r)) - for (let o = 0; o < r.length; ++o) - Ps(r[o], t8, e); +function Fs(r15, t8 = [], e = false) { + if (t8 == null && (t8 = []), typeof r15 == "boolean" || typeof r15 == "number" || typeof r15 == "string" || Tu(r15) || r15 == null || Pt(r15) && e) + t8.push(r15); + else if (Array.isArray(r15) || Pt(r15)) + for (let o = 0; o < r15.length; ++o) + Fs(r15[o], t8, e); else { let o = -1; - for (let n of Object.keys(r)) + 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++) - Ps(r[n], t8, e); + Fs(r15[n], t8, e); } return t8; } -var ed = class { +var Zm = class { constructor(t8, e) { - this.backendTimer = t8, this.logger = e, e == null && (this.logger = new dw()); + this.backendTimer = t8, this.logger = e, e == null && (this.logger = new mw()); } profileKernel(t8, e, o) { let n, s = () => { n = o(); - }, a, i = Wu(); + }, a, i = Pu(); if (this.backendTimer.timerAvailable()) a = this.backendTimer.time(s); else { s(); for (let u of n) u.dataSync(); - a = Promise.resolve({ kernelMs: Wu() - i }); + a = Promise.resolve({ kernelMs: Pu() - i }); } if (A().getBool("CHECK_COMPUTATION_FOR_ERRORS")) for (let u = 0; u < n.length; u++) { let c = n[u]; c.data().then((l) => { - n4(l, c.dtype, t8); + s4(l, c.dtype, t8); }); } return { kernelName: t8, outputs: n, inputs: e, timeMs: a.then((u) => u.kernelMs), extraInfo: a.then((u) => u.getExtraProfileInfo != null ? u.getExtraProfileInfo() : "") }; @@ -3865,19 +3866,19 @@ var ed = class { }); } }; -function n4(r, t8, e) { +function s4(r15, t8, e) { if (t8 !== "float32") return false; - for (let o = 0; o < r.length; o++) { - let n = r[o]; + 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 '${e}'`), true; } return false; } -var dw = class { +var mw = class { logKernelProfile(t8, e, o, n, s, a) { - let i = typeof n == "number" ? Au(`${n}ms`, 9) : n.error, p = Au(t8, 25), u = e.rank, c = e.size, l = Au(e.shape.toString(), 14), m = ""; + let i = typeof n == "number" ? Nu(`${n}ms`, 9) : n.error, p = Nu(t8, 25), u = e.rank, c = e.size, l = Nu(e.shape.toString(), 14), m = ""; for (let d in s) { let f = s[d]; if (f != null) { @@ -3888,12 +3889,12 @@ var dw = class { 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 H0(r, t8, e) { +function K0(r15, t8, e) { let o = {}, n = {}; for (let p = 0; p < t8.length; p++) o[t8[p].id] = true; - for (let p = 0; p < r.length; p++) { - let u = r[p], c = u.inputs; + 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 < t8.length; f++) @@ -3908,8 +3909,8 @@ function H0(r, t8, e) { let s = {}; s[e.id] = true; let a = {}; - for (let p = r.length - 1; p >= 0; p--) { - let u = r[p], c = u.inputs; + 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) @@ -3918,8 +3919,8 @@ function H0(r, t8, e) { } } let i = []; - for (let p = 0; p < r.length; p++) { - let u = r[p]; + for (let p = 0; p < r15.length; p++) { + let u = r15[p]; if (n[u.id] && a[u.id]) { let c = {}; for (let m in u.inputs) { @@ -3932,11 +3933,11 @@ function H0(r, t8, e) { } return i; } -function K0(r, t8, e, o) { +function q0(r15, t8, e, o) { for (let n = t8.length - 1; n >= 0; n--) { let s = t8[n], a = []; if (s.outputs.forEach((p) => { - let u = r[p.id]; + 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}.`); @@ -3948,74 +3949,74 @@ function K0(r, t8, e, o) { 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 (!Cr(u.shape, c.shape)) + 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; + if (r15[c.id] == null) + r15[c.id] = u; else { - let l = r[c.id]; - r[c.id] = o(l, u), l.dispose(); + let l = r15[c.id]; + r15[c.id] = o(l, u), l.dispose(); } } } } -var q0 = 20; -var bl = 3; -var fw = 7; -function j0(r, t8, e, o) { - let n = js(t8), s = s4(r, t8, e, n), a = t8.length, i = td(r, t8, e, n, s), p = ["Tensor"]; +var j0 = 20; +var hl = 3; +var dw = 7; +function X0(r15, t8, e, o) { + let n = js(t8), s = a4(r15, t8, e, n), a = t8.length, i = Jm(r15, t8, e, n, s), p = ["Tensor"]; return o && (p.push(` dtype: ${e}`), p.push(` rank: ${a}`), p.push(` shape: [${t8}]`), p.push(" values:")), p.push(i.map((u) => " " + u).join(` `)), p.join(` `); } -function s4(r, t8, e, o) { - let n = He(t8), s = o[o.length - 1], a = new Array(s).fill(0), i = t8.length, p = e === "complex64" ? wl(r) : r; +function a4(r15, t8, e, o) { + let n = He(t8), s = o[o.length - 1], a = new Array(s).fill(0), i = t8.length, p = e === "complex64" ? xl(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], Cl(p[c + l], 0, e).length); + a[l] = Math.max(a[l], gl(p[c + l], 0, e).length); } return a; } -function Cl(r, t8, e) { +function gl(r15, t8, e) { let o; - return Array.isArray(r) ? o = `${parseFloat(r[0].toFixed(fw))} + ${parseFloat(r[1].toFixed(fw))}j` : Vo(r) ? o = `'${r}'` : e === "bool" ? o = X0(r) : o = parseFloat(r.toFixed(fw)).toString(), Au(o, t8); + return Array.isArray(r15) ? o = `${parseFloat(r15[0].toFixed(dw))} + ${parseFloat(r15[1].toFixed(dw))}j` : zo(r15) ? o = `'${r15}'` : e === "bool" ? o = Y0(r15) : o = parseFloat(r15.toFixed(dw)).toString(), Nu(o, t8); } -function X0(r) { - return r === 0 ? "false" : "true"; +function Y0(r15) { + return r15 === 0 ? "false" : "true"; } -function td(r, t8, e, o, n, s = true) { +function Jm(r15, t8, e, o, n, s = true) { let a = e === "complex64" ? 2 : 1, i = t8[0], p = t8.length; if (p === 0) { if (e === "complex64") { - let h = wl(r); - return [Cl(h[0], 0, e)]; + let h = xl(r15); + return [gl(h[0], 0, e)]; } - return e === "bool" ? [X0(r[0])] : [r[0].toString()]; + return e === "bool" ? [Y0(r15[0])] : [r15[0].toString()]; } if (p === 1) { - if (i > q0) { - let g = bl * a, x = Array.from(r.slice(0, g)), b = Array.from(r.slice((i - bl) * a, i * a)); - return e === "complex64" && (x = wl(x), b = wl(b)), ["[" + x.map((C, S) => Cl(C, n[S], e)).join(", ") + ", ..., " + b.map((C, S) => Cl(C, n[i - bl + S], e)).join(", ") + "]"]; + if (i > j0) { + let g = hl * a, x = Array.from(r15.slice(0, g)), b = Array.from(r15.slice((i - hl) * a, i * a)); + return e === "complex64" && (x = xl(x), b = xl(b)), ["[" + x.map((C, S) => gl(C, n[S], e)).join(", ") + ", ..., " + b.map((C, S) => gl(C, n[i - hl + S], e)).join(", ") + "]"]; } - return ["[" + (e === "complex64" ? wl(r) : Array.from(r)).map((g, x) => Cl(g, n[x], e)).join(", ") + "]"]; + return ["[" + (e === "complex64" ? xl(r15) : Array.from(r15)).map((g, x) => gl(g, n[x], e)).join(", ") + "]"]; } let u = t8.slice(1), c = o.slice(1), l = o[0] * a, m = []; - if (i > q0) { - for (let h = 0; h < bl; h++) { + if (i > j0) { + for (let h = 0; h < hl; h++) { let g = h * l, x = g + l; - m.push(...td(r.slice(g, x), u, e, c, n, false)); + m.push(...Jm(r15.slice(g, x), u, e, c, n, false)); } m.push("..."); - for (let h = i - bl; h < i; h++) { + for (let h = i - hl; h < i; h++) { let g = h * l, x = g + l; - m.push(...td(r.slice(g, x), u, e, c, n, h === i - 1)); + m.push(...Jm(r15.slice(g, x), u, e, c, n, h === i - 1)); } } else for (let h = 0; h < i; h++) { let g = h * l, x = g + l; - m.push(...td(r.slice(g, x), u, e, c, n, h === i - 1)); + m.push(...Jm(r15.slice(g, x), u, e, c, n, h === i - 1)); } let d = p === 2 ? "," : ""; m[0] = "[" + (i > 0 ? m[0] + d : ""); @@ -4028,10 +4029,10 @@ function td(r, t8, e, o, n, s = true) { `; return m[m.length - 1] = " " + m[m.length - 1] + "]" + (s ? "" : f), m; } -function wl(r) { +function xl(r15) { let t8 = []; - for (let e = 0; e < r.length; e += 2) - t8.push([r[e], r[e + 1]]); + for (let e = 0; e < r15.length; e += 2) + t8.push([r15[e], r15[e + 1]]); return t8; } var tt = class { @@ -4042,7 +4043,7 @@ var tt = class { } if (e === "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(e, this.size), this.strides = js(t8); + this.values = o || qm(e, this.size), this.strides = js(t8); } set(t8, ...e) { e.length === 0 && (e = [0]), $(e.length === this.rank, () => `The number of provided coordinates (${e.length}) must match the rank (${this.rank})`); @@ -4088,22 +4089,22 @@ var tt = class { return this.shape.length; } toTensor() { - return Os().makeTensor(this.values, this.shape, this.dtype); + return Ps().makeTensor(this.values, this.shape, this.dtype); } }; -var Os = null; -var ac = null; -var a4 = null; -function Y0(r) { - Os = r; +var Ps = null; +var Zp = null; +var i4 = null; +function Q0(r15) { + Ps = r15; } -function Q0(r) { - ac = r; +function Z0(r15) { + Zp = r15; } -function Z0(r) { - a4 = r; +function J0(r15) { + i4 = r15; } -var ut = class { +var mt = class { constructor(t8, e, o, n) { this.kept = false, this.isDisposedInternal = false, this.shape = t8.slice(), this.dtype = e || "float32", this.size = He(t8), this.strides = js(t8), this.dataId = o, this.id = n, this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; } @@ -4112,25 +4113,25 @@ var ut = class { } async buffer() { let t8 = await this.data(); - return ac.buffer(this.shape, this.dtype, t8); + return Zp.buffer(this.shape, this.dtype, t8); } bufferSync() { - return ac.buffer(this.shape, this.dtype, this.dataSync()); + return Zp.buffer(this.shape, this.dtype, this.dataSync()); } async array() { let t8 = await this.data(); - return Du(this.shape, t8, this.dtype === "complex64"); + return ku(this.shape, t8, this.dtype === "complex64"); } arraySync() { - return Du(this.shape, this.dataSync(), this.dtype === "complex64"); + return ku(this.shape, this.dataSync(), this.dtype === "complex64"); } async data() { this.throwIfDisposed(); - let t8 = Os().read(this.dataId); + let t8 = Ps().read(this.dataId); if (this.dtype === "string") { let e = await t8; try { - return e.map((o) => sc(o)); + return e.map((o) => Qp(o)); } catch (o) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } @@ -4138,14 +4139,14 @@ var ut = class { return t8; } dataToGPU(t8) { - return this.throwIfDisposed(), Os().readToGPU(this.dataId, t8); + return this.throwIfDisposed(), Ps().readToGPU(this.dataId, t8); } dataSync() { this.throwIfDisposed(); - let t8 = Os().readSync(this.dataId); + let t8 = Ps().readSync(this.dataId); if (this.dtype === "string") try { - return t8.map((e) => sc(e)); + return t8.map((e) => Qp(e)); } catch (e) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } @@ -4153,11 +4154,11 @@ var ut = class { } async bytes() { this.throwIfDisposed(); - let t8 = await Os().read(this.dataId); + let t8 = await Ps().read(this.dataId); return this.dtype === "string" ? t8 : new Uint8Array(t8.buffer); } dispose() { - this.isDisposed || (this.kerasMask && this.kerasMask.dispose(), Os().disposeTensor(this), this.isDisposedInternal = true); + this.isDisposed || (this.kerasMask && this.kerasMask.dispose(), Ps().disposeTensor(this), this.isDisposedInternal = true); } get isDisposed() { return this.isDisposedInternal; @@ -4167,121 +4168,121 @@ var ut = class { throw new Error("Tensor is disposed."); } print(t8 = false) { - return ac.print(this, t8); + return Zp.print(this, t8); } clone() { - return this.throwIfDisposed(), ac.clone(this); + return this.throwIfDisposed(), Zp.clone(this); } toString(t8 = false) { let e = this.dataSync(); - return j0(e, this.shape, this.dtype, t8); + return X0(e, this.shape, this.dtype, t8); } cast(t8) { - return this.throwIfDisposed(), ac.cast(this, t8); + return this.throwIfDisposed(), Zp.cast(this, t8); } variable(t8 = true, e, o) { - return this.throwIfDisposed(), Os().makeVariable(this, t8, e, o); + return this.throwIfDisposed(), Ps().makeVariable(this, t8, e, o); } }; -Object.defineProperty(ut, Symbol.hasInstance, { value: (r) => !!r && r.data != null && r.dataSync != null && r.throwIfDisposed != null }); -function i4() { - return gl("Tensor", () => ut); +Object.defineProperty(mt, Symbol.hasInstance, { value: (r15) => !!r15 && r15.data != null && r15.dataSync != null && r15.throwIfDisposed != null }); +function fw() { + return ml("Tensor", () => mt); } -i4(); -var oi = class extends ut { +fw(); +var ri = class extends mt { constructor(t8, e, o, n) { super(t8.shape, t8.dtype, t8.dataId, n), this.trainable = e, this.name = o; } assign(t8) { if (t8.dtype !== this.dtype) throw new Error(`dtype of the new value (${t8.dtype}) and previous value (${this.dtype}) must match`); - if (!Cr(t8.shape, this.shape)) + if (!br(t8.shape, this.shape)) throw new Error(`shape of the new value (${t8.shape}) and previous value (${this.shape}) must match`); - Os().disposeTensor(this), this.dataId = t8.dataId, Os().incRef(this, null); + Ps().disposeTensor(this), this.dataId = t8.dataId, Ps().incRef(this, null); } dispose() { - Os().disposeVariable(this), this.isDisposedInternal = true; + Ps().disposeVariable(this), this.isDisposedInternal = true; } }; -Object.defineProperty(oi, Symbol.hasInstance, { value: (r) => r instanceof ut && r.assign != null && r.assign instanceof Function }); -var ek = {}; -qe(ek, { assertTypesMatch: () => Cw, getTensorsInContainer: () => Sl, isTensorInList: () => p4, makeTypesMatch: () => Oe }); +Object.defineProperty(ri, Symbol.hasInstance, { value: (r15) => r15 instanceof mt && r15.assign != null && r15.assign instanceof Function }); +var tk = {}; +qe(tk, { assertTypesMatch: () => Cw, getTensorsInContainer: () => yl, isTensorInList: () => p4, makeTypesMatch: () => Oe }); var hw; -(function(r) { - r.R0 = "R0", r.R1 = "R1", r.R2 = "R2", r.R3 = "R3", r.R4 = "R4", r.R5 = "R5", r.R6 = "R6"; +(function(r15) { + r15.R0 = "R0", r15.R1 = "R1", r15.R2 = "R2", r15.R3 = "R3", r15.R4 = "R4", r15.R5 = "R5", r15.R6 = "R6"; })(hw || (hw = {})); var gw; -(function(r) { - r.float32 = "float32", r.int32 = "int32", r.bool = "int32", r.complex64 = "complex64"; +(function(r15) { + r15.float32 = "float32", r15.int32 = "int32", r15.bool = "int32", r15.complex64 = "complex64"; })(gw || (gw = {})); var xw; -(function(r) { - r.float32 = "float32", r.int32 = "int32", r.bool = "bool", r.complex64 = "complex64"; +(function(r15) { + r15.float32 = "float32", r15.int32 = "int32", r15.bool = "bool", r15.complex64 = "complex64"; })(xw || (xw = {})); var yw; -(function(r) { - r.float32 = "float32", r.int32 = "float32", r.bool = "float32", r.complex64 = "complex64"; +(function(r15) { + r15.float32 = "float32", r15.int32 = "float32", r15.bool = "float32", r15.complex64 = "complex64"; })(yw || (yw = {})); var bw; -(function(r) { - r.float32 = "complex64", r.int32 = "complex64", r.bool = "complex64", r.complex64 = "complex64"; +(function(r15) { + r15.float32 = "complex64", r15.int32 = "complex64", r15.bool = "complex64", r15.complex64 = "complex64"; })(bw || (bw = {})); var u4 = { float32: yw, int32: gw, bool: xw, complex64: bw }; -function dt(r, t8) { - if (r === "string" || t8 === "string") { - if (r === "string" && t8 === "string") +function dt(r15, t8) { + if (r15 === "string" || t8 === "string") { + if (r15 === "string" && t8 === "string") return "string"; - throw new Error(`Can not upcast ${r} with ${t8}`); + throw new Error(`Can not upcast ${r15} with ${t8}`); } - return u4[r][t8]; + return u4[r15][t8]; } -function ni(r) { - return dt(r, "int32"); +function oi(r15) { + return dt(r15, "int32"); } -function rd(r) { - return r != null && typeof r == "object" && "texture" in r && r.texture instanceof WebGLTexture; +function ed(r15) { + return r15 != null && typeof r15 == "object" && "texture" in r15 && r15.texture instanceof WebGLTexture; } -function od(r) { - return typeof GPUBuffer != "undefined" && r != null && typeof r == "object" && "buffer" in r && r.buffer instanceof GPUBuffer; +function td(r15) { + return typeof GPUBuffer != "undefined" && r15 != null && typeof r15 == "object" && "buffer" in r15 && r15.buffer instanceof GPUBuffer; } -function Oe(r, t8) { - if (r.dtype === t8.dtype) - return [r, t8]; - let e = dt(r.dtype, t8.dtype); - return [r.cast(e), t8.cast(e)]; +function Oe(r15, t8) { + if (r15.dtype === t8.dtype) + return [r15, t8]; + let e = dt(r15.dtype, t8.dtype); + return [r15.cast(e), t8.cast(e)]; } -function Cw(r, t8) { - $(r.dtype === t8.dtype, () => `The dtypes of the first(${r.dtype}) and second(${t8.dtype}) input must match`); +function Cw(r15, t8) { + $(r15.dtype === t8.dtype, () => `The dtypes of the first(${r15.dtype}) and second(${t8.dtype}) input must match`); } -function p4(r, t8) { - return t8.some((e) => e.id === r.id); +function p4(r15, t8) { + return t8.some((e) => e.id === r15.id); } -function Sl(r) { +function yl(r15) { let t8 = []; - return J0(r, t8, /* @__PURE__ */ new Set()), t8; + return ek(r15, t8, /* @__PURE__ */ new Set()), t8; } -function J0(r, t8, e) { - if (r == null) +function ek(r15, t8, e) { + if (r15 == null) return; - if (r instanceof ut) { - t8.push(r); + if (r15 instanceof mt) { + t8.push(r15); return; } - if (!c4(r)) + if (!c4(r15)) return; - let o = r; + let o = r15; for (let n in o) { let s = o[n]; - e.has(s) || (e.add(s), J0(s, t8, e)); + e.has(s) || (e.add(s), ek(s, t8, e)); } } -function c4(r) { - return Array.isArray(r) || typeof r == "object"; +function c4(r15) { + return Array.isArray(r15) || typeof r15 == "object"; } -function ww(r) { - return r.kernelName != null; +function ww(r15) { + return r15.kernelName != null; } -var nd = class { +var rd = class { constructor() { this.registeredVariables = {}, this.nextTapeNodeId = 0, this.numBytes = 0, this.numTensors = 0, this.numStringTensors = 0, this.numDataBuffers = 0, this.gradientDepth = 0, this.kernelDepth = 0, this.scopeStack = [], this.numDataMovesStack = [], this.nextScopeId = 0, this.tensorInfo = /* @__PURE__ */ new WeakMap(), this.profiling = false, this.activeProfile = { newBytes: 0, newTensors: 0, peakBytes: 0, kernels: [], result: null, get kernelNames() { return Array.from(new Set(this.kernels.map((t8) => t8.name))); @@ -4292,9 +4293,9 @@ var nd = class { this.registeredVariables[t8].dispose(); } }; -var ru = class { +var bl = class r { constructor(t8) { - this.ENV = t8, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new nd(); + this.ENV = t8, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new rd(); } async ready() { if (this.pendingBackendInit != null) @@ -4351,15 +4352,15 @@ var ru = class { if (!(o ? await e : e)) return false; } - return this.backendInstance = this.registry[t8], this.setupRegisteredKernels(), this.profiler = new ed(this.backendInstance), true; + return this.backendInstance = this.registry[t8], this.setupRegisteredKernels(), this.profiler = new Zm(this.backendInstance), true; } setupRegisteredKernels() { - Ym(this.backendName).forEach((e) => { + jm(this.backendName).forEach((e) => { e.setupFunc != null && e.setupFunc(this.backendInstance); }); } disposeRegisteredKernels(t8) { - Ym(t8).forEach((o) => { + jm(t8).forEach((o) => { o.disposeFunc != null && o.disposeFunc(this.registry[t8]); }); } @@ -4369,7 +4370,7 @@ var ru = class { throw new Error(`Cannot initialize backend ${t8}, no registration found.`); try { let o = e.factory(); - if (o && !(o instanceof ao) && typeof o.then == "function") { + if (o && !(o instanceof so) && typeof o.then == "function") { let n = ++this.pendingBackendInitId, s = o.then((a) => n < this.pendingBackendInitId ? false : (this.registry[t8] = a, this.pendingBackendInit = null, true)).catch((a) => (n < this.pendingBackendInitId || (this.pendingBackendInit = null, Ia(`Initialization of backend ${t8} failed`), Ia(a.stack || a.message)), false)); return this.pendingBackendInit = s, { success: s, asyncInit: true }; } else @@ -4427,20 +4428,20 @@ var ru = class { } } nextTensorId() { - return ru.nextTensorId++; + return r.nextTensorId++; } nextVariableId() { - return ru.nextVariableId++; + return r.nextVariableId++; } clone(t8) { - let e = T.runKernel(wo, { x: t8 }), o = { x: t8 }, n = (a) => ({ x: () => { + let e = T.runKernel(Co, { x: t8 }), o = { x: t8 }, n = (a) => ({ x: () => { let i = "float32", p = { x: a }, u = { dtype: i }; - return T.runKernel(bo, p, u); + return T.runKernel(yo, p, u); } }), s = []; return this.addTapeNode(this.state.activeScope.name, o, [e], n, s, {}), e; } runKernel(t8, e, o) { - if (this.backendName == null && this.backend, !(tc(t8, this.backendName) != null)) + if (this.backendName == null && this.backend, !(qp(t8, this.backendName) != null)) throw new Error(`Kernel '${t8}' not registered for backend '${this.backendName}'`); return this.runKernelFunc({ kernelName: t8, inputs: e, attrs: o }); } @@ -4465,7 +4466,7 @@ var ru = class { if (ww(t8)) { let { kernelName: f, inputs: h, attrs: g } = t8; this.backendName == null && this.backend; - let x = tc(f, this.backendName); + let x = qp(f, this.backendName); $(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 }); @@ -4498,7 +4499,7 @@ var ru = class { return t8.map((o) => this.keep(this.clone(o))); } getTensorsForGradient(t8, e, o) { - let n = iw(t8); + let n = aw(t8); if (n != null) { let s = n.inputsToSave || [], a = n.outputsToSave || [], i; n.saveAllInputs ? ($(Array.isArray(e), () => "saveAllInputs is true, expected inputs to be an array."), i = Object.keys(e).map((u) => e[u])) : i = s.map((u) => e[u]); @@ -4512,10 +4513,10 @@ var ru = class { throw new Error("Values passed to engine.makeTensor() are null"); o = o || "float32", n = n || this.backend; let s = t8; - o === "string" && Vo(t8[0]) && (s = t8.map((p) => tu(p))); - let a = n.write(s, e, o), i = new ut(e, o, a, this.nextTensorId()); + o === "string" && zo(t8[0]) && (s = t8.map((p) => Zi(p))); + let a = n.write(s, e, o), i = new mt(e, o, a, this.nextTensorId()); if (this.trackTensor(i, n), o === "string") { - let p = this.state.tensorInfo.get(a), u = ow(s); + let p = this.state.tensorInfo.get(a), u = rw(s); this.state.numBytes += u - p.bytes, p.bytes = u; } return i; @@ -4526,12 +4527,12 @@ var ru = class { return this.makeTensorFromTensorInfo(s, n); } makeTensorFromTensorInfo(t8, e) { - let { dataId: o, shape: n, dtype: s } = t8, a = new ut(n, s, o, this.nextTensorId()); + let { dataId: o, shape: n, dtype: s } = t8, a = new mt(n, s, o, this.nextTensorId()); return this.trackTensor(a, e), a; } makeVariable(t8, e = true, o, n) { o = o || this.nextVariableId().toString(), n != null && n !== t8.dtype && (t8 = t8.cast(n)); - let s = new oi(t8, e, o, this.nextTensorId()); + let s = new ri(t8, e, 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; @@ -4539,7 +4540,7 @@ var ru = class { trackTensor(t8, e) { this.state.numTensors++, t8.dtype === "string" && this.state.numStringTensors++; let o = 0; - t8.dtype !== "complex64" && t8.dtype !== "string" && (o = t8.size * jp(t8.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(t8.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(t8.dataId, { backend: e || this.backend, dtype: t8.dtype, shape: t8.shape, bytes: o })), t8 instanceof oi || this.track(t8); + t8.dtype !== "complex64" && t8.dtype !== "string" && (o = t8.size * zp(t8.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(t8.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(t8.dataId, { backend: e || this.backend, dtype: t8.dtype, shape: t8.shape, bytes: o })), t8 instanceof ri || this.track(t8); } incRef(t8, e) { this.trackTensor(t8, e), this.backend.incRef(t8.dataId); @@ -4552,7 +4553,7 @@ var ru = class { return; let e = this.state.tensorInfo.get(t8.dataId); if (this.state.numTensors--, t8.dtype === "string" && (this.state.numStringTensors--, this.state.numBytes -= e.bytes), t8.dtype !== "complex64" && t8.dtype !== "string") { - let o = t8.size * jp(t8.dtype); + let o = t8.size * zp(t8.dtype); this.state.numBytes -= o; } e.backend.disposeData(t8.dataId) && this.removeDataId(t8.dataId, e.backend); @@ -4582,10 +4583,10 @@ var ru = class { return this.state.gradientDepth > 0 && this.state.kernelDepth === 0; } addTapeNode(t8, e, o, n, s, a) { - let i = { id: this.state.nextTapeNodeId++, kernelName: t8, inputs: e, outputs: o, saved: s }, p = iw(t8); + let i = { id: this.state.nextTapeNodeId++, kernelName: t8, inputs: e, outputs: o, saved: s }, p = aw(t8); p != null && (n = p.gradFunc), n != null && (i.gradient = (u) => (u = u.map((c, l) => { if (c == null) { - let m = o[l], d = Yp(m.size, m.dtype); + let m = o[l], d = Wp(m.size, m.dtype); return this.makeTensor(d, m.shape, m.dtype); } return c; @@ -4605,7 +4606,7 @@ var ru = class { t8 && (e.name = t8), this.state.scopeStack.push(e), this.state.activeScope = e; } endScope(t8) { - let e = Sl(t8), o = new Set(e.map((s) => s.id)); + let e = yl(t8), o = new Set(e.map((s) => s.id)); for (let s = 0; s < this.state.activeScope.track.length; s++) { let a = this.state.activeScope.track[s]; !a.kept && !o.has(a.id) && a.dispose(); @@ -4619,13 +4620,13 @@ var ru = class { if ($(e.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", t8)); - $(s instanceof ut, () => "The result y returned by f() must be a tensor."); - let a = H0(this.state.activeTape, e, s); + $(s instanceof mt, () => "The result y returned by f() must be a tensor."); + let a = K0(this.state.activeTape, e, s); if (!n && a.length === 0 && e.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 ? l4(s.shape) : o, K0(i, a, (u) => this.tidy(u), m4); + i[s.id] = o == null ? l4(s.shape) : o, q0(i, a, (u) => this.tidy(u), m4); let p = e.map((u) => i[u.id]); return this.state.gradientDepth === 0 && (this.state.activeTape.forEach((u) => { for (let c of u.saved) @@ -4635,14 +4636,14 @@ var ru = class { } customGrad(t8) { return $(qs(t8), () => "The f passed in customGrad(f) must be a function."), (...e) => { - $(e.every((i) => i instanceof ut), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); + $(e.every((i) => i instanceof mt), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); let o, n = {}; e.forEach((i, p) => { n[p] = i; }); - let s = (i, p) => (o = t8(...e, p), $(o.value instanceof ut, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), $(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 s = (i, p) => (o = t8(...e, p), $(o.value instanceof mt, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), $(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]; - $(c.length === e.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."), $(c.every((m) => m instanceof ut), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."); + $(c.length === e.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."), $(c.every((m) => m instanceof 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; @@ -4661,8 +4662,8 @@ var ru = class { return this.state.tensorInfo.get(t8).backend.readToGPU(t8, e); } async time(t8) { - let e = Wu(), o = await this.backend.time(t8); - return o.wallMs = Wu() - e, o; + let e = Pu(), o = await this.backend.time(t8); + return o.wallMs = Pu() - e, o; } track(t8) { return this.state.activeScope != null && (t8.scopeId = this.state.activeScope.id, this.state.activeScope.track.push(t8)), t8; @@ -4671,49 +4672,49 @@ var ru = class { return this.state.registeredVariables; } reset() { - this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new nd(); + this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new rd(); for (let t8 in this.registry) this.disposeRegisteredKernels(t8), this.registry[t8].dispose(), delete this.registry[t8]; this.backendName = null, this.backendInstance = null, this.pendingBackendInit = null; } }; -ru.nextTensorId = 0; -ru.nextVariableId = 0; -function l4(r) { - let t8 = fl(He(r), "float32"); - return T.makeTensor(t8, r, "float32"); +bl.nextTensorId = 0; +bl.nextVariableId = 0; +function l4(r15) { + let t8 = cl(He(r15), "float32"); + return T.makeTensor(t8, r15, "float32"); } function Sw() { - let r = aw(); - if (r._tfengine == null) { - let t8 = new hl(r); - r._tfengine = new ru(t8); + let r15 = sw(); + if (r15._tfengine == null) { + let t8 = new ll(r15); + r15._tfengine = new bl(t8); } - return _0(r._tfengine.ENV), Y0(() => r._tfengine), r._tfengine; + return $0(r15._tfengine.ENV), Q0(() => r15._tfengine), r15._tfengine; } var T = Sw(); -function m4(r, t8) { - let e = { a: r, b: t8 }; - return T.runKernel(uo, e); +function m4(r15, t8) { + let e = { a: r15, b: t8 }; + return T.runKernel(io, e); } -var ou = {}; -qe(ou, { isBrowser: () => vw, isMobile: () => h4, mockIsMobile: () => f4 }); +var Ji = {}; +qe(Ji, { isBrowser: () => vw, isMobile: () => h4, mockIsMobile: () => f4 }); function d4() { return typeof navigator != "undefined" && navigator != null; } var Iw; -function f4(r) { - Iw = r; +function f4(r15) { + Iw = r15; } -function h4(r) { +function h4(r15) { if (Iw !== void 0) return Iw; - if (r || d4()) { - if (r || (r = navigator), r.product === "ReactNative") + if (r15 || d4()) { + if (r15 || (r15 = navigator), r15.product === "ReactNative") return true; - let t8 = r.userAgent || r.vendor || (typeof window != "undefined" ? window.opera : ""); + let t8 = r15.userAgent || r15.vendor || (typeof window != "undefined" ? window.opera : ""); if (!t8) { - let e = r; + let e = r15; return e.userAgentData && e.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(t8) || /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(t8.substr(0, 4)); @@ -4723,113 +4724,113 @@ function h4(r) { function vw() { return typeof window != "undefined" && window.document != null || typeof WorkerGlobalScope != "undefined"; } -var $r = A(); -$r.registerFlag("DEBUG", () => false, (r) => { - r && console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance."); +var _r = A(); +_r.registerFlag("DEBUG", () => false, (r15) => { + r15 && 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", () => vw()); -$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", () => false); -$r.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => $r.getBool("DEBUG")); -$r.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); -$r.registerFlag("IS_TEST", () => false); -$r.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => $r.getBool("DEBUG")); -$r.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); -$r.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); -$r.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); -function ir(r, t8) { - let e = r; - if (Ot(r)) - return t8 === "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 / (t8 == null ? 4 : jp(t8))]; - if (!Array.isArray(r)) +_r.registerFlag("IS_BROWSER", () => vw()); +_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", () => false); +_r.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => _r.getBool("DEBUG")); +_r.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); +_r.registerFlag("IS_TEST", () => false); +_r.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => _r.getBool("DEBUG")); +_r.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); +_r.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); +_r.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); +function sr(r15, t8) { + let e = r15; + if (Pt(r15)) + return t8 === "string" ? [] : [r15.length]; + if (ed(r15)) { + let n = r15.channels || "RGBA"; + return [r15.height, r15.width * n.length]; + } else if (td(r15)) + return [r15.buffer.size / (t8 == null ? 4 : zp(t8))]; + if (!Array.isArray(r15)) return []; let o = []; - for (; Array.isArray(e) || Ot(e) && t8 !== "string"; ) + for (; Array.isArray(e) || Pt(e) && t8 !== "string"; ) o.push(e.length), e = e[0]; - return Array.isArray(r) && A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && rk(r, o, []), o; + return Array.isArray(r15) && A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && ok(r15, o, []), o; } -function rk(r, t8, e) { - if (e = e || [], !Array.isArray(r) && !Ot(r)) { +function ok(r15, t8, e) { + if (e = e || [], !Array.isArray(r15) && !Pt(r15)) { $(t8.length === 0, () => `Element arr[${e.join("][")}] is a primitive, but should be an array/TypedArray of ${t8[0]} elements`); return; } - $(t8.length > 0, () => `Element arr[${e.join("][")}] should be a primitive, but is an array of ${r.length} elements`), $(r.length === t8[0], () => `Element arr[${e.join("][")}] should have ${t8[0]} elements, but has ${r.length} elements`); + $(t8.length > 0, () => `Element arr[${e.join("][")}] should be a primitive, but is an array of ${r15.length} elements`), $(r15.length === t8[0], () => `Element arr[${e.join("][")}] should have ${t8[0]} elements, but has ${r15.length} elements`); let o = t8.slice(1); - for (let n = 0; n < r.length; ++n) - rk(r[n], o, e.concat(n)); + for (let n = 0; n < r15.length; ++n) + ok(r15[n], o, e.concat(n)); } -function tk(r, t8, e, o) { - if (r !== "string_or_numeric") { - if (r == null) +function rk(r15, t8, e, o) { + if (r15 !== "string_or_numeric") { + if (r15 == null) throw new Error("Expected dtype cannot be null."); - if (r !== "numeric" && r !== t8 || r === "numeric" && t8 === "string") - throw new Error(`Argument '${e}' passed to '${o}' must be ${r} tensor, but got ${t8} tensor`); + if (r15 !== "numeric" && r15 !== t8 || r15 === "numeric" && t8 === "string") + throw new Error(`Argument '${e}' passed to '${o}' must be ${r15} tensor, but got ${t8} tensor`); } } -function v(r, t8, e, o = "numeric") { - if (r instanceof ut) - return tk(o, r.dtype, t8, e), r; - let n = Ri(r); - if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), tk(o, n, t8, e), r == null || !Ot(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") { - let p = r == null ? "null" : r.constructor.name; +function v(r15, t8, e, o = "numeric") { + if (r15 instanceof fw()) + return rk(o, r15.dtype, t8, e), r15; + let n = _i(r15); + if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), rk(o, n, t8, e), r15 == null || !Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "string") { + let p = r15 == null ? "null" : r15.constructor.name; throw new Error(`Argument '${t8}' passed to '${e}' must be a Tensor or TensorLike, but got '${p}'`); } - let s = ir(r, n); - !Ot(r) && !Array.isArray(r) && (r = [r]); - let i = n !== "string" ? nc(r, n) : Ps(r, [], true); + let s = sr(r15, n); + !Pt(r15) && !Array.isArray(r15) && (r15 = [r15]); + let i = n !== "string" ? Yp(r15, n) : Fs(r15, [], true); return T.makeTensor(i, s, n); } -function si(r, t8, e, o = "numeric") { - if (!Array.isArray(r)) +function ni(r15, t8, e, o = "numeric") { + if (!Array.isArray(r15)) throw new Error(`Argument ${t8} passed to ${e} must be a \`Tensor[]\` or \`TensorLike[]\``); - return r.map((s, a) => v(s, `${t8}[${a}]`, e, o)); + return r15.map((s, a) => v(s, `${t8}[${a}]`, e, o)); } var kw = "__op"; -function N(r) { - let t8 = Object.keys(r); +function N(r15) { + let t8 = Object.keys(r15); if (t8.length !== 1) throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t8.length} keys.`); - let e = t8[0], o = r[e]; + let e = t8[0], o = r15[e]; e.endsWith("_") && (e = e.substring(0, e.length - 1)), e = e + kw; let n = (...s) => { T.startScope(e); try { let a = o(...s); - return Fu(a) && console.error("Cannot return a Promise inside of tidy."), T.endScope(a), a; + return Tu(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: e, configurable: true }), n; } -function g4(r, t8) { - let e = v(r, "real", "complex"), o = v(t8, "imag", "complex"); - yt(e.shape, o.shape, `real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`); +function g4(r15, t8) { + let e = v(r15, "real", "complex"), o = v(t8, "imag", "complex"); + xt(e.shape, o.shape, `real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`); let n = { real: e, imag: o }; - return T.runKernel(Fi, n); + return T.runKernel(Ri, n); } -var Er = N({ complex_: g4 }); -function Sr(r, t8, e, o) { +var $r = N({ complex_: g4 }); +function wr(r15, t8, e, o) { if (o == null) - o = Ri(r); + o = _i(r15); 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 (td(r15) || ed(r15)) { 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, t8 || e, o); + return T.backend.createTensorFromGPUData(r15, t8 || e, o); } - if (!Ot(r) && !Array.isArray(r) && typeof r != "number" && typeof r != "boolean" && typeof r != "string") + 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 (t8 != null) { - wt(t8); + Ct(t8); let n = He(t8), s = He(e); $(n === s, () => `Based on the provided shape, [${t8}], the tensor should have ${n} values but has ${s}`); for (let a = 0; a < e.length; ++a) { @@ -4837,19 +4838,19 @@ function Sr(r, t8, e, o) { $(e[a] === t8[a] || !p, () => `Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t8}). `); } } - return !Ot(r) && !Array.isArray(r) && (r = [r]), t8 = t8 || e, r = o !== "string" ? nc(r, o) : Ps(r, [], true), T.makeTensor(r, t8, o); + return !Pt(r15) && !Array.isArray(r15) && (r15 = [r15]), t8 = t8 || e, r15 = o !== "string" ? Yp(r15, o) : Fs(r15, [], true), T.makeTensor(r15, t8, o); } -function ur(r, t8, e) { - let o = ir(r, e); - return Sr(r, t8, o, e); +function ar(r15, t8, e) { + let o = sr(r15, e); + return wr(r15, t8, o, e); } -var Il = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; -var jt = class { +var Cl = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; +var ir = class r2 { static join(t8) { - return new jt(t8).slice(); + return new r2(t8).slice(); } constructor(t8) { - if (this.shards = [], this.previousShardIndex = 0, t8 == null || (t8 instanceof Array || (t8 = [t8]), t8 = t8.map((o) => Ot(o) ? o.buffer : o), t8.length === 0)) + if (this.shards = [], this.previousShardIndex = 0, t8 == null || (t8 instanceof Array || (t8 = [t8]), t8 = t8.map((o) => Pt(o) ? o.buffer : o), t8.length === 0)) return; this.bufferUniformSize = t8[0].byteLength; let e = 0; @@ -4891,30 +4892,30 @@ var jt = class { return o === -1 ? -1 : (this.previousShardIndex = o, this.previousShardIndex); } }; -function x4(r, t8) { - let e = 0, o = r.length; +function x4(r15, t8) { + let e = 0, o = r15.length; for (; e <= o; ) { - let n = Math.floor((o - e) / 2) + e, s = t8(r[n]); + let n = Math.floor((o - e) / 2) + e, s = t8(r15[n]); if (s === 0) return n; s < 0 ? o = n : e = n + 1; } return -1; } -var sd = 4; -async function nk(r, t8) { - let e = [], o = [], n = Array.isArray(r) ? r.map((a) => a.name) : Object.keys(r); +var od = 4; +async function sk(r15, t8) { + let e = [], 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(r) ? r[a].tensor : r[i]; + 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}`); let u = { name: i, shape: p.shape, dtype: p.dtype }; if (p.dtype === "string") { let c = new Promise(async (l) => { - let m = await p.bytes(), d = m.reduce((g, x) => g + x.length, 0) + sd * m.length, f = new Uint8Array(d), h = 0; + let m = await p.bytes(), d = m.reduce((g, x) => g + x.length, 0) + od * m.length, f = new Uint8Array(d), h = 0; for (let g = 0; g < m.length; g++) { let x = m[g], b = new Uint8Array(new Uint32Array([x.length]).buffer); - f.set(b, h), h += sd, f.set(x, h), h += x.length; + f.set(b, h), h += od, f.set(x, h), h += x.length; } l(f); }); @@ -4926,8 +4927,8 @@ async function nk(r, t8) { let s = await Promise.all(o); return { data: y4(s), specs: e }; } -function ad(r, t8) { - let e = new jt(r), o = {}, n, s = 0; +function nd(r15, t8) { + let e = new ir(r15), o = {}, n, s = 0; for (let a of t8) { let i = a.name, p = a.dtype, u = a.shape, c = He(u), l; if ("quantization" in a) { @@ -4940,7 +4941,7 @@ function ad(r, t8) { throw new Error(`Weight ${a.name} is quantized with ${m.dtype} which only supports weights of type float32 not ${p}.`); } else throw new Error(`Weight ${a.name} has unknown quantization dtype ${m.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); - let d = Il[m.dtype], f = e.slice(s, s + c * d), h = m.dtype === "uint8" ? new Uint8Array(f) : new Uint16Array(f); + let d = Cl[m.dtype], f = e.slice(s, s + c * d), h = m.dtype === "uint8" ? new Uint8Array(f) : new Uint16Array(f); if (p === "float32") if (m.dtype === "uint8" || m.dtype === "uint16") { l = new Float32Array(h.length); @@ -4967,13 +4968,13 @@ function ad(r, t8) { let m = He(a.shape); l = []; for (let d = 0; d < m; d++) { - let f = new Uint32Array(e.slice(s, s + sd))[0]; - s += sd; + let f = new Uint32Array(e.slice(s, s + od))[0]; + s += od; let h = new Uint8Array(e.slice(s, s + f)); l.push(h), s += f; } } else { - let m = Il[p], d = e.slice(s, s + c * m); + let m = Cl[p], d = e.slice(s, s + c * m); if (p === "float32") l = new Float32Array(d); else if (p === "int32") @@ -4985,21 +4986,21 @@ function ad(r, t8) { let f = new Float32Array(l.length / 2), h = new Float32Array(l.length / 2); for (let b = 0; b < f.length; b++) f[b] = l[b * 2], h[b] = l[b * 2 + 1]; - let g = ur(f, u, "float32"), x = ur(h, u, "float32"); - o[i] = Er(g, x), g.dispose(), x.dispose(); + let g = ar(f, u, "float32"), x = ar(h, u, "float32"); + o[i] = $r(g, x), g.dispose(), x.dispose(); } else throw new Error(`Unsupported dtype in weight '${i}': ${p}`); s += c * m; } - p !== "complex64" && (o[i] = ur(l, u, p)); + p !== "complex64" && (o[i] = ar(l, u, p)); } return o; } -function y4(r) { - if (r === null) - throw new Error(`Invalid input value: ${JSON.stringify(r)}`); +function y4(r15) { + if (r15 === null) + throw new Error(`Invalid input value: ${JSON.stringify(r15)}`); let t8 = 0, e = []; - r.forEach((s) => { + r15.forEach((s) => { if (t8 += s.byteLength, e.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}`); }); @@ -5009,69 +5010,69 @@ function y4(r) { }), o.buffer; } var Nw = typeof Buffer != "undefined" && (typeof Blob == "undefined" || typeof atob == "undefined" || typeof btoa == "undefined"); -function ok(r) { - return Nw ? Buffer.byteLength(r, "utf8") : new Blob([r]).size; +function nk(r15) { + return Nw ? Buffer.byteLength(r15, "utf8") : new Blob([r15]).size; } -function sk(r) { +function ak(r15) { if (Nw) - return Buffer.from(r).toString("base64"); - let t8 = new Uint8Array(r), e = ""; + return Buffer.from(r15).toString("base64"); + let t8 = new Uint8Array(r15), e = ""; for (let o = 0, n = t8.length; o < n; o++) e += String.fromCharCode(t8[o]); return btoa(e); } -function ak(r) { +function ik(r15) { if (Nw) { - let o = Buffer.from(r, "base64"); + let o = Buffer.from(r15, "base64"); return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength); } - let t8 = atob(r), e = new Uint8Array(t8.length); + let t8 = atob(r15), e = new Uint8Array(t8.length); for (let o = 0; o < t8.length; ++o) e.set([t8.charCodeAt(o)], o); return e.buffer; } -function ik(r) { - return jt.join(r); +function uk(r15) { + return ir.join(r15); } -function Tw(r) { +function Tw(r15) { let t8 = "/"; - for (r = r.trim(); r.endsWith(t8); ) - r = r.slice(0, r.length - 1); - let e = r.split(t8); + for (r15 = r15.trim(); r15.endsWith(t8); ) + r15 = r15.slice(0, r15.length - 1); + let e = r15.split(t8); return e[e.length - 1]; } -function id(r, t8) { - let e = { modelTopology: r.modelTopology, format: r.format, generatedBy: r.generatedBy, convertedBy: r.convertedBy, weightsManifest: t8 }; - return r.signature != null && (e.signature = r.signature), r.userDefinedMetadata != null && (e.userDefinedMetadata = r.userDefinedMetadata), r.modelInitializer != null && (e.modelInitializer = r.modelInitializer), r.initializerSignature != null && (e.initializerSignature = r.initializerSignature), r.trainingConfig != null && (e.trainingConfig = r.trainingConfig), e; +function sd(r15, t8) { + let e = { modelTopology: r15.modelTopology, format: r15.format, generatedBy: r15.generatedBy, convertedBy: r15.convertedBy, weightsManifest: t8 }; + return r15.signature != null && (e.signature = r15.signature), r15.userDefinedMetadata != null && (e.userDefinedMetadata = r15.userDefinedMetadata), r15.modelInitializer != null && (e.modelInitializer = r15.modelInitializer), r15.initializerSignature != null && (e.initializerSignature = r15.initializerSignature), r15.trainingConfig != null && (e.trainingConfig = r15.trainingConfig), e; } -function _w(r, t8, e) { - let o = { modelTopology: r.modelTopology, format: r.format, generatedBy: r.generatedBy, convertedBy: r.convertedBy }; - if (r.trainingConfig != null && (o.trainingConfig = r.trainingConfig), r.weightsManifest != null) { +function _w(r15, t8, e) { + 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 (!t8) throw new Error("modelJSON has weightsManifest but weightSpecs is null"); if (!e) throw new Error("modelJSON has weightsManifest but weightData is null"); o.weightSpecs = t8, o.weightData = e; } - return r.signature != null && (o.signature = r.signature), r.userDefinedMetadata != null && (o.userDefinedMetadata = r.userDefinedMetadata), r.modelInitializer != null && (o.modelInitializer = r.modelInitializer), r.initializerSignature != null && (o.initializerSignature = r.initializerSignature), o; + 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; } -async function ic(r, t8) { +async function Jp(r15, t8) { let e, o; - return r.weightsManifest != null && ([e, o] = await t8(r.weightsManifest)), _w(r, e, o); + return r15.weightsManifest != null && ([e, o] = await t8(r15.weightsManifest)), _w(r15, e, o); } -function va(r) { - if (r.modelTopology instanceof ArrayBuffer) +function va(r15) { + if (r15.modelTopology instanceof ArrayBuffer) throw new Error("Expected JSON model topology, received ArrayBuffer."); - return { dateSaved: /* @__PURE__ */ new Date(), modelTopologyType: "JSON", modelTopologyBytes: r.modelTopology == null ? 0 : ok(JSON.stringify(r.modelTopology)), weightSpecsBytes: r.weightSpecs == null ? 0 : ok(JSON.stringify(r.weightSpecs)), weightDataBytes: r.weightData == null ? 0 : new jt(r.weightData).byteLength }; + return { dateSaved: /* @__PURE__ */ new Date(), modelTopologyType: "JSON", modelTopologyBytes: r15.modelTopology == null ? 0 : nk(JSON.stringify(r15.modelTopology)), weightSpecsBytes: r15.weightSpecs == null ? 0 : nk(JSON.stringify(r15.weightSpecs)), weightDataBytes: r15.weightData == null ? 0 : new ir(r15.weightData).byteLength }; } -function ud(r) { +function ad(r15) { let t8 = []; - for (let e of r) + for (let e of r15) t8.push(...e.weights); return t8; } function b4() { - let r = (e) => { + let r15 = (e) => { let o = e << 13, n = 0; for (; !(o & 8388608); ) n -= 8388608, o <<= 1; @@ -5079,87 +5080,87 @@ function b4() { }, t8 = new Uint32Array(2048); t8[0] = 0; for (let e = 1; e < 1024; e++) - t8[e] = r(e); + t8[e] = r15(e); for (let e = 1024; e < 2048; e++) t8[e] = 939524096 + (e - 1024 << 13); return t8; } function C4() { - let r = new Uint32Array(64); - r[0] = 0, r[31] = 1199570944, r[32] = 2147483648, r[63] = 3347054592; + let r15 = new Uint32Array(64); + r15[0] = 0, r15[31] = 1199570944, r15[32] = 2147483648, r15[63] = 3347054592; for (let t8 = 1; t8 < 31; t8++) - r[t8] = t8 << 23; + r15[t8] = t8 << 23; for (let t8 = 33; t8 < 63; t8++) - r[t8] = 2147483648 + (t8 - 32 << 23); - return r; + r15[t8] = 2147483648 + (t8 - 32 << 23); + return r15; } function w4() { - let r = new Uint32Array(64); + let r15 = new Uint32Array(64); for (let t8 = 0; t8 < 64; t8++) - r[t8] = 1024; - return r[0] = r[32] = 0, r; + r15[t8] = 1024; + return r15[0] = r15[32] = 0, r15; } function S4() { - let r = b4(), t8 = C4(), e = w4(); + let r15 = b4(), t8 = C4(), e = w4(); return (o) => { let n = new ArrayBuffer(4 * o.length), s = new Uint32Array(n); for (let a = 0; a < o.length; a++) { - let i = o[a], p = r[e[i >> 10] + (i & 1023)] + t8[i >> 10]; + let i = o[a], p = r15[e[i >> 10] + (i & 1023)] + t8[i >> 10]; s[a] = p; } return new Float32Array(n); }; } -var ft = class { +var qt = class r3 { constructor() { this.saveRouters = [], this.loadRouters = []; } static getInstance() { - return ft.instance == null && (ft.instance = new ft()), ft.instance; + return r3.instance == null && (r3.instance = new r3()), r3.instance; } static registerSaveRouter(t8) { - ft.getInstance().saveRouters.push(t8); + r3.getInstance().saveRouters.push(t8); } static registerLoadRouter(t8) { - ft.getInstance().loadRouters.push(t8); + r3.getInstance().loadRouters.push(t8); } static getSaveHandlers(t8) { - return ft.getHandlers(t8, "save"); + return r3.getHandlers(t8, "save"); } static getLoadHandlers(t8, e) { - return ft.getHandlers(t8, "load", e); + return r3.getHandlers(t8, "load", e); } static getHandlers(t8, e, o) { let n = []; - return (e === "load" ? ft.getInstance().loadRouters : ft.getInstance().saveRouters).forEach((a) => { + return (e === "load" ? r3.getInstance().loadRouters : r3.getInstance().saveRouters).forEach((a) => { let i = a(t8, o); i !== null && n.push(i); }), n; } }; -var uk = (r) => ft.registerSaveRouter(r); -var pk = (r) => ft.registerLoadRouter(r); -var ck = (r) => ft.getSaveHandlers(r); -var lk = (r, t8) => ft.getLoadHandlers(r, t8); +var pk = (r15) => qt.registerSaveRouter(r15); +var ck = (r15) => qt.registerLoadRouter(r15); +var lk = (r15) => qt.getSaveHandlers(r15); +var mk = (r15, t8) => qt.getLoadHandlers(r15, t8); var $w = "tensorflowjs"; var Ew = 1; -var Uu = "models_store"; -var nu = "model_info_store"; -function mk() { +var Ou = "models_store"; +var eu = "model_info_store"; +function dk() { 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, t8 = r.indexedDB || r.mozIndexedDB || r.webkitIndexedDB || r.msIndexedDB || r.shimIndexedDB; + let r15 = typeof window == "undefined" ? self : window, t8 = r15.indexedDB || r15.mozIndexedDB || r15.webkitIndexedDB || r15.msIndexedDB || r15.shimIndexedDB; if (t8 == null) throw new Error("The current browser does not appear to support IndexedDB."); return t8; } -function Rw(r) { - let t8 = r.result; - t8.createObjectStore(Uu, { keyPath: "modelPath" }), t8.createObjectStore(nu, { keyPath: "modelPath" }); +function Rw(r15) { + let t8 = r15.result; + t8.createObjectStore(Ou, { keyPath: "modelPath" }), t8.createObjectStore(eu, { keyPath: "modelPath" }); } var ka = class { constructor(t8) { - if (this.indexedDB = mk(), t8 == null || !t8) + if (this.indexedDB = dk(), t8 == null || !t8) throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); this.modelPath = t8; } @@ -5177,15 +5178,15 @@ var ka = class { s.onupgradeneeded = () => Rw(s), s.onsuccess = () => { let a = s.result; if (e == null) { - let i = a.transaction(Uu, "readonly"), u = i.objectStore(Uu).get(this.modelPath); + let i = a.transaction(Ou, "readonly"), u = i.objectStore(Ou).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 { - e.weightData = jt.join(e.weightData); - let i = va(e), p = a.transaction(nu, "readwrite"), u = p.objectStore(nu), c; + e.weightData = ir.join(e.weightData); + let i = va(e), p = a.transaction(eu, "readwrite"), u = p.objectStore(eu), c; try { c = u.put({ modelPath: this.modelPath, modelArtifactsInfo: i }); } catch (m) { @@ -5193,15 +5194,15 @@ var ka = class { } let l; c.onsuccess = () => { - l = a.transaction(Uu, "readwrite"); - let m = l.objectStore(Uu), d; + l = a.transaction(Ou, "readwrite"); + let m = l.objectStore(Ou), d; try { d = m.put({ modelPath: this.modelPath, modelArtifacts: e, modelArtifactsInfo: i }); } catch (f) { return n(f); } d.onsuccess = () => o({ modelArtifactsInfo: i }), d.onerror = (f) => { - u = p.objectStore(nu); + u = p.objectStore(eu); let h = u.delete(this.modelPath); h.onsuccess = () => (a.close(), n(d.error)), h.onerror = (g) => (a.close(), n(d.error)); }; @@ -5214,24 +5215,24 @@ var ka = class { } }; ka.URL_SCHEME = "indexeddb://"; -var dk = (r) => A().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(ka.URL_SCHEME) ? I4(r.slice(ka.URL_SCHEME.length)) : null; -ft.registerSaveRouter(dk); -ft.registerLoadRouter(dk); -function I4(r) { - return new ka(r); +var fk = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(ka.URL_SCHEME) ? I4(r15.slice(ka.URL_SCHEME.length)) : null; +qt.registerSaveRouter(fk); +qt.registerLoadRouter(fk); +function I4(r15) { + return new ka(r15); } -function v4(r) { - return r.startsWith(ka.URL_SCHEME) ? r.slice(ka.URL_SCHEME.length) : r; +function v4(r15) { + return r15.startsWith(ka.URL_SCHEME) ? r15.slice(ka.URL_SCHEME.length) : r15; } -var pd = class { +var id = class { constructor() { - this.indexedDB = mk(); + this.indexedDB = dk(); } async listModels() { return new Promise((t8, e) => { let o = this.indexedDB.open($w, Ew); o.onupgradeneeded = () => Rw(o), o.onsuccess = () => { - let n = o.result, s = n.transaction(nu, "readonly"), i = s.objectStore(nu).getAll(); + let n = o.result, s = n.transaction(eu, "readonly"), i = s.objectStore(eu).getAll(); i.onsuccess = () => { let p = {}; for (let u of i.result) @@ -5245,14 +5246,14 @@ var pd = class { return t8 = v4(t8), new Promise((e, o) => { let n = this.indexedDB.open($w, Ew); n.onupgradeneeded = () => Rw(n), n.onsuccess = () => { - let s = n.result, a = s.transaction(nu, "readwrite"), i = a.objectStore(nu), p = i.get(t8), u; + let s = n.result, a = s.transaction(eu, "readwrite"), i = a.objectStore(eu), p = i.get(t8), u; p.onsuccess = () => { if (p.result == null) return s.close(), o(new Error(`Cannot find model with path '${t8}' in IndexedDB.`)); { let c = i.delete(t8), l = () => { - u = s.transaction(Uu, "readwrite"); - let d = u.objectStore(Uu).delete(t8); + u = s.transaction(Ou, "readwrite"); + let d = u.objectStore(Ou).delete(t8); d.onsuccess = () => e(p.result.modelArtifactsInfo), d.onerror = (f) => o(p.error); }; c.onsuccess = l, c.onerror = (m) => (l(), s.close(), o(p.error)); @@ -5264,28 +5265,28 @@ var pd = class { }); } }; -var ai = "/"; -var uc = "tensorflowjs_models"; -var fk = "info"; +var si = "/"; +var ec = "tensorflowjs_models"; +var hk = "info"; var k4 = "model_topology"; var N4 = "weight_specs"; var T4 = "weight_data"; var _4 = "model_metadata"; -function hk(r) { - return { info: [uc, r, fk].join(ai), topology: [uc, r, k4].join(ai), weightSpecs: [uc, r, N4].join(ai), weightData: [uc, r, T4].join(ai), modelMetadata: [uc, r, _4].join(ai) }; +function gk(r15) { + return { info: [ec, r15, hk].join(si), topology: [ec, r15, k4].join(si), weightSpecs: [ec, r15, N4].join(si), weightData: [ec, r15, T4].join(si), modelMetadata: [ec, r15, _4].join(si) }; } -function gk(r) { - for (let t8 of Object.values(r)) +function xk(r15) { + for (let t8 of Object.values(r15)) window.localStorage.removeItem(t8); } -function $4(r) { - let t8 = r.split(ai); +function $4(r15) { + let t8 = r15.split(si); if (t8.length < 3) - throw new Error(`Invalid key format: ${r}`); - return t8.slice(1, t8.length - 1).join(ai); + throw new Error(`Invalid key format: ${r15}`); + return t8.slice(1, t8.length - 1).join(si); } -function E4(r) { - return r.startsWith(Na.URL_SCHEME) ? r.slice(Na.URL_SCHEME.length) : r; +function E4(r15) { + return r15.startsWith(Na.URL_SCHEME) ? r15.slice(Na.URL_SCHEME.length) : r15; } var Na = class { constructor(t8) { @@ -5293,19 +5294,19 @@ var Na = class { throw new Error("The current environment does not support local storage."); if (this.LS = window.localStorage, t8 == null || !t8) throw new Error("For local storage, modelPath must not be null, undefined or empty."); - this.modelPath = t8, this.keys = hk(this.modelPath); + this.modelPath = t8, this.keys = gk(this.modelPath); } async save(t8) { if (t8.modelTopology instanceof ArrayBuffer) throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); { - let e = JSON.stringify(t8.modelTopology), o = JSON.stringify(t8.weightSpecs), n = va(t8), s = jt.join(t8.weightData); + let e = JSON.stringify(t8.modelTopology), o = JSON.stringify(t8.weightSpecs), n = va(t8), s = ir.join(t8.weightData); try { - this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, e), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, sk(s)); + this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, e), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, ak(s)); let a = { format: t8.format, generatedBy: t8.generatedBy, convertedBy: t8.convertedBy, signature: t8.signature != null ? t8.signature : void 0, userDefinedMetadata: t8.userDefinedMetadata != null ? t8.userDefinedMetadata : void 0, modelInitializer: t8.modelInitializer != null ? t8.modelInitializer : void 0, initializerSignature: t8.initializerSignature != null ? t8.initializerSignature : void 0, trainingConfig: t8.trainingConfig != null ? t8.trainingConfig : void 0 }; return this.LS.setItem(this.keys.modelMetadata, JSON.stringify(a)), { modelArtifactsInfo: n }; } catch (a) { - throw gk(this.keys), new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`); + throw xk(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}.`); } } } @@ -5331,22 +5332,22 @@ var Na = class { 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 e.weightData = ak(a), e; + return e.weightData = ik(a), e; } }; Na.URL_SCHEME = "localstorage://"; -var xk = (r) => A().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(Na.URL_SCHEME) ? R4(r.slice(Na.URL_SCHEME.length)) : null; -ft.registerSaveRouter(xk); -ft.registerLoadRouter(xk); -function R4(r) { - return new Na(r); +var yk = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(Na.URL_SCHEME) ? R4(r15.slice(Na.URL_SCHEME.length)) : null; +qt.registerSaveRouter(yk); +qt.registerLoadRouter(yk); +function R4(r15) { + return new Na(r15); } -var cd = class { +var ud = class { constructor() { $(A().getBool("IS_BROWSER"), () => "Current environment is not a web browser"), $(typeof window == "undefined" || typeof window.localStorage != "undefined", () => "Current browser does not appear to support localStorage"), this.LS = window.localStorage; } async listModels() { - let t8 = {}, e = uc + ai, o = ai + fk; + let t8 = {}, e = ec + si, o = si + hk; for (let n = 0; n < this.LS.length; ++n) { let s = this.LS.key(n); if (s.startsWith(e) && s.endsWith(o)) { @@ -5358,72 +5359,72 @@ var cd = class { } async removeModel(t8) { t8 = E4(t8); - let e = hk(t8); + let e = gk(t8); if (this.LS.getItem(e.info) == null) throw new Error(`Cannot find model at path '${t8}'`); let o = JSON.parse(this.LS.getItem(e.info)); - return gk(e), o; + return xk(e), o; } }; -var pc = "://"; -var Zt = class { +var tc = "://"; +var Os = class r5 { constructor() { this.managers = {}; } static getInstance() { - return Zt.instance == null && (Zt.instance = new Zt()), Zt.instance; + return r5.instance == null && (r5.instance = new r5()), r5.instance; } static registerManager(t8, e) { - $(t8 != null, () => "scheme must not be undefined or null."), t8.endsWith(pc) && (t8 = t8.slice(0, t8.indexOf(pc))), $(t8.length > 0, () => "scheme must not be an empty string."); - let o = Zt.getInstance(); + $(t8 != null, () => "scheme must not be undefined or null."), t8.endsWith(tc) && (t8 = t8.slice(0, t8.indexOf(tc))), $(t8.length > 0, () => "scheme must not be an empty string."); + let o = r5.getInstance(); $(o.managers[t8] == null, () => `A model store manager is already registered for scheme '${t8}'.`), o.managers[t8] = e; } static getManager(t8) { - let e = Zt.getInstance().managers[t8]; + let e = r5.getInstance().managers[t8]; if (e == null) throw new Error(`Cannot find model manager for scheme '${t8}'`); return e; } static getSchemes() { - return Object.keys(Zt.getInstance().managers); + return Object.keys(r5.getInstance().managers); } }; -function ld(r) { - if (r.indexOf(pc) === -1) - throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Zt.getSchemes().join(",")}`); - return { scheme: r.split(pc)[0], path: r.split(pc)[1] }; +function pd(r15) { + if (r15.indexOf(tc) === -1) + throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`); + return { scheme: r15.split(tc)[0], path: r15.split(tc)[1] }; } -async function yk(r, t8, e = false) { - $(r !== t8, () => `Old path and new path are the same: '${r}'`); - let o = ft.getLoadHandlers(r); - $(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r}.`), $(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`); - let n = o[0], s = ft.getSaveHandlers(t8); +async function bk(r15, t8, e = false) { + $(r15 !== t8, () => `Old path and new path are the same: '${r15}'`); + let o = qt.getLoadHandlers(r15); + $(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r15}.`), $(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r15}.`); + let n = o[0], s = qt.getSaveHandlers(t8); $(s.length > 0, () => `Copying failed because no save handler is found for destination URL ${t8}.`), $(s.length < 2, () => `Copying failed because more than one (${o.length}) save handlers for destination URL ${t8}.`); - let a = s[0], i = ld(r).scheme, p = ld(r).path, u = i === ld(r).scheme, c = await n.load(); - e && u && await Zt.getManager(i).removeModel(p); + let a = s[0], i = pd(r15).scheme, p = pd(r15).path, u = i === pd(r15).scheme, c = await n.load(); + e && u && await Os.getManager(i).removeModel(p); let l = await a.save(c); - return e && !u && await Zt.getManager(i).removeModel(p), l.modelArtifactsInfo; + return e && !u && await Os.getManager(i).removeModel(p), l.modelArtifactsInfo; } -async function bk() { - let r = Zt.getSchemes(), t8 = {}; - for (let e of r) { - let o = await Zt.getManager(e).listModels(); +async function Ck() { + let r15 = Os.getSchemes(), t8 = {}; + for (let e of r15) { + let o = await Os.getManager(e).listModels(); for (let n in o) { - let s = e + pc + n; + let s = e + tc + n; t8[s] = o[n]; } } return t8; } -async function Ck(r) { - let t8 = ld(r); - return Zt.getManager(t8.scheme).removeModel(t8.path); +async function wk(r15) { + let t8 = pd(r15); + return Os.getManager(t8.scheme).removeModel(t8.path); } -async function wk(r, t8) { - return yk(r, t8, false); +async function Sk(r15, t8) { + return bk(r15, t8, false); } -async function Sk(r, t8) { - return yk(r, t8, true); +async function Ik(r15, t8) { + return bk(r15, t8, true); } var Dw = class { constructor() { @@ -5459,25 +5460,25 @@ var Dw = class { }, true)); } isTypedArray(t8) { - return Qm(t8); + return Xm(t8); } }; if (A().get("IS_BROWSER")) { A().setPlatform("browser", new Dw()); try { - Zt.registerManager(Na.URL_SCHEME, new cd()); - } catch (r) { + Os.registerManager(Na.URL_SCHEME, new ud()); + } catch (r15) { } try { - Zt.registerManager(ka.URL_SCHEME, new pd()); - } catch (r) { + Os.registerManager(ka.URL_SCHEME, new id()); + } catch (r15) { } } -var D4 = { importFetch: () => Ik() }; +var D4 = { importFetch: () => vk() }; var Aw; var Fw = class { constructor() { - this.util = vk(), this.textEncoder = new this.util.TextEncoder(); + this.util = kk(), this.textEncoder = new this.util.TextEncoder(); } fetch(t8, e) { return A().global.fetch != null ? A().global.fetch(t8, e) : (Aw == null && (Aw = D4.importFetch()), Aw(t8, e)); @@ -5499,30 +5500,30 @@ var Fw = class { } }; A().get("IS_NODE") && !A().get("IS_BROWSER") && A().setPlatform("node", new Fw()); -function me(r, t8 = "float32", e) { - return t8 = t8 || "float32", wt(r), new tt(r, t8, e); +function me(r15, t8 = "float32", e) { + return t8 = t8 || "float32", Ct(r15), new tt(r15, t8, e); } -function A4(r, t8) { - let e = v(r, "x", "cast"); - if (!rw(t8)) +function A4(r15, t8) { + let e = v(r15, "x", "cast"); + if (!tw(t8)) throw new Error(`Failed to cast to unknown dtype ${t8}`); if (t8 === "string" && e.dtype !== "string" || t8 !== "string" && e.dtype === "string") throw new Error("Only strings can be casted to strings"); let o = { x: e }, n = { dtype: t8 }; - return T.runKernel(bo, o, n); + return T.runKernel(yo, o, n); } var We = N({ cast_: A4 }); -function F4(r) { - let e = { x: v(r, "x", "clone", "string_or_numeric") }; - return T.runKernel(wo, e); +function F4(r15) { + let e = { x: v(r15, "x", "clone", "string_or_numeric") }; + return T.runKernel(Co, e); } -var Ur = N({ clone_: F4 }); -function md(r, t8 = false) { - console.log(r.toString(t8)); +var Wr = N({ clone_: F4 }); +function cd(r15, t8 = false) { + console.log(r15.toString(t8)); } Sw(); -var P4 = { buffer: me, cast: We, clone: Ur, print: md }; -Q0(P4); +var P4 = { buffer: me, cast: We, clone: Wr, print: cd }; +Z0(P4); function lde() { A().set("PROD", true); } @@ -5532,36 +5533,36 @@ function mde() { function dde() { A().set("DEPRECATION_WARNINGS_ENABLED", false), console.warn("TensorFlow.js deprecation warnings have been disabled."); } -function Pw(r) { - A().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); +function Pw(r15) { + A().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r15 + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); } -Z0(Pw); +J0(Pw); function fde() { T.disposeVariables(); } -function pr() { +function ur() { return T; } function hde() { return T.memory(); } -function gde(r) { - return T.profile(r); +function gde(r15) { + return T.profile(r15); } -function De(r, t8) { - return T.tidy(r, t8); +function De(r15, t8) { + return T.tidy(r15, t8); } -function Mt(r) { - Sl(r).forEach((e) => e.dispose()); +function Ot(r15) { + yl(r15).forEach((e) => e.dispose()); } -function Rr(r) { - return T.keep(r); +function Er(r15) { + return T.keep(r15); } -function xde(r) { - return T.time(r); +function xde(r15) { + return T.time(r15); } -function yde(r) { - return T.setBackend(r); +function yde(r15) { + return T.setBackend(r15); } function bde() { return T.ready(); @@ -5569,411 +5570,411 @@ function bde() { function Cde() { return T.backendName; } -function wde(r) { - T.removeBackend(r); +function wde(r15) { + T.removeBackend(r15); } -function Sde(r) { - return T.findBackend(r); +function Sde(r15) { + return T.findBackend(r15); } -function Ide(r) { - return T.findBackendFactory(r); +function Ide(r15) { + return T.findBackendFactory(r15); } -function su(r, t8, e = 1) { - return T.registerBackend(r, t8, e); +function tu(r15, t8, e = 1) { + return T.registerBackend(r15, t8, e); } function vde() { return T.backend; } -function kde(r, t8) { - A().setPlatform(r, t8); +function kde(r15, t8) { + A().setPlatform(r15, t8); } -function O4(r, t8) { - let e = v(r, "a", "add"), o = v(t8, "b", "add"); +function O4(r15, t8) { + let e = v(r15, "a", "add"), o = v(t8, "b", "add"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(uo, n); + return T.runKernel(io, n); } var Ce = N({ add_: O4 }); -function M4(r, t8) { - let e = v(r, "a", "floorDiv"), o = v(t8, "b", "floorDiv"); +function M4(r15, t8) { + let e = v(r15, "a", "floorDiv"), o = v(t8, "b", "floorDiv"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(In, n); + return T.runKernel(Sn, n); } -var dd = N({ floorDiv_: M4 }); -function L4(r, t8) { - let e = v(r, "a", "div"), o = v(t8, "b", "div"); +var ld = N({ floorDiv_: M4 }); +function L4(r15, t8) { + let e = v(r15, "a", "div"), o = v(t8, "b", "div"); if ([e, o] = Oe(e, o), e.dtype === "int32" && o.dtype === "int32") - return dd(e, o); + return ld(e, o); let n = { a: e, b: o }, s = {}; - return T.runKernel(hn, n, s); + return T.runKernel(fn, n, s); } var je = N({ div_: L4 }); -function B4(r, t8) { - let e = v(r, "a", "mul"), o = v(t8, "b", "mul"); +function B4(r15, t8) { + let e = v(r15, "a", "mul"), o = v(t8, "b", "mul"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(Yn, n); + return T.runKernel(Xn, n); } var se = N({ mul_: B4 }); -function z4(r) { - let t8 = v(r, "x", "abs"); +function z4(r15) { + let t8 = v(r15, "x", "abs"); if (t8.dtype === "complex64") { let e = { x: t8 }; - return T.runKernel(Pi, e); + return T.runKernel(Di, e); } else { let e = { x: t8 }; return T.runKernel(Xs, e); } } -var Jt = N({ abs_: z4 }); -function V4(r) { - let e = { x: v(r, "x", "acos") }; +var Qt = N({ abs_: z4 }); +function V4(r15) { + let e = { x: v(r15, "x", "acos") }; + return T.runKernel(Vo, e); +} +var Nk = N({ acos_: V4 }); +function W4(r15) { + let e = { x: v(r15, "x", "acosh") }; return T.runKernel(Wo, e); } -var kk = N({ acos_: V4 }); -function W4(r) { - let e = { x: v(r, "x", "acosh") }; - return T.runKernel(Uo, e); -} -var Nk = N({ acosh_: W4 }); -function U4(r) { - $(Array.isArray(r), () => "The argument passed to tf.addN() must be a list of tensors"), $(r.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r.length}`); - let t8 = r.map((n, s) => v(n, `tensors${s}`, "addN")), e = t8[0]; +var Tk = N({ acosh_: W4 }); +function U4(r15) { + $(Array.isArray(r15), () => "The argument passed to tf.addN() must be a list of tensors"), $(r15.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r15.length}`); + let t8 = r15.map((n, s) => v(n, `tensors${s}`, "addN")), e = t8[0]; t8.forEach((n) => { if (n.dtype !== e.dtype) throw new Error("All tensors passed to tf.addN() must have the same dtype"); }), t8.forEach((n) => { - if (!Cr(n.shape, e.shape)) + if (!br(n.shape, e.shape)) throw new Error("All tensors passed to tf.addN() must have the same shape"); }); let o = t8; - return T.runKernel(Go, o); + return T.runKernel(Uo, o); } -var Tk = N({ addN_: U4 }); -function G4(r, t8 = null, e = false) { - let n = { x: v(r, "x", "all", "bool") }, s = { axis: t8, keepDims: e }; +var _k = N({ addN_: U4 }); +function G4(r15, t8 = null, e = false) { + let n = { x: v(r15, "x", "all", "bool") }, s = { axis: t8, keepDims: e }; + return T.runKernel(Go, n, s); +} +var $k = N({ all_: G4 }); +function H4(r15, t8 = null, e = false) { + let n = { x: v(r15, "x", "any", "bool") }, s = { axis: t8, keepDims: e }; return T.runKernel(Ho, n, s); } -var _k = N({ all_: G4 }); -function H4(r, t8 = null, e = false) { - let n = { x: v(r, "x", "any", "bool") }, s = { axis: t8, keepDims: e }; - return T.runKernel(Ko, n, s); -} -var $k = N({ any_: H4 }); -function K4(r, t8 = 0) { - let o = { x: v(r, "x", "argMax") }, n = { axis: t8 }; +var Ek = N({ any_: H4 }); +function K4(r15, t8 = 0) { + let o = { x: v(r15, "x", "argMax") }, n = { axis: t8 }; return T.runKernel(Ys, o, n); } -var Ek = N({ argMax_: K4 }); -function q4(r, t8 = 0) { - let o = { x: v(r, "x", "argMin") }, n = { axis: t8 }; +var Rk = N({ argMax_: K4 }); +function q4(r15, t8 = 0) { + let o = { x: v(r15, "x", "argMin") }, n = { axis: t8 }; return T.runKernel(Qs, o, n); } -var Rk = N({ argMin_: q4 }); -function j4(r) { - let e = { x: v(r, "x", "asin") }; +var Dk = N({ argMin_: q4 }); +function j4(r15) { + let e = { x: v(r15, "x", "asin") }; + return T.runKernel(Ko, e); +} +var Ak = N({ asin_: j4 }); +function X4(r15) { + let e = { x: v(r15, "x", "asinh") }; return T.runKernel(qo, e); } -var Dk = N({ asin_: j4 }); -function X4(r) { - let e = { x: v(r, "x", "asinh") }; +var Fk = N({ asinh_: X4 }); +function Y4(r15) { + let e = { x: v(r15, "x", "atan") }; return T.runKernel(jo, e); } -var Ak = N({ asinh_: X4 }); -function Y4(r) { - let e = { x: v(r, "x", "atan") }; - return T.runKernel(Xo, e); -} -var Fk = N({ atan_: Y4 }); -function Q4(r, t8) { - let e = v(r, "a", "atan2"), o = v(t8, "b", "atan2"); +var Pk = N({ atan_: Y4 }); +function Q4(r15, t8) { + let e = v(r15, "a", "atan2"), o = v(t8, "b", "atan2"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(Qo, n); + return T.runKernel(Yo, n); } -var Pk = N({ atan2_: Q4 }); -function Z4(r) { - let e = { x: v(r, "x", "atanh") }; - return T.runKernel(Yo, e); +var Ok = N({ atan2_: Q4 }); +function Z4(r15) { + let e = { x: v(r15, "x", "atanh") }; + return T.runKernel(Xo, e); } -var Ok = N({ atanh_: Z4 }); -function J4(r, t8, e, o, n = "NHWC", s) { - let a = r[3], i = [...t8, a], p = Lk(n); - return Hu(r, i, e, s, o, null, null, p); +var Mk = N({ atanh_: Z4 }); +function J4(r15, t8, e, o, n = "NHWC", s) { + let a = r15[3], i = [...t8, a], p = Bk(n); + return Lu(r15, i, e, s, o, null, null, p); } -function Mw(r, t8, e, o, n, s, a = "channelsLast") { - let [i, p] = vl(t8), u; +function Mw(r15, t8, e, o, n, s, a = "channelsLast") { + let [i, p] = wl(t8), u; if (a === "channelsLast") - u = [i, p, r[3], r[3]]; + u = [i, p, r15[3], r15[3]]; else if (a === "channelsFirst") - u = [i, p, r[1], r[1]]; + u = [i, p, r15[1], r15[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return Hu(r, u, e, o, n, s, false, a); + return Lu(r15, u, e, o, n, s, false, a); } -function eH(r, t8, e, o, n, s, a = "NDHWC") { +function eH(r15, t8, e, o, n, s, a = "NDHWC") { let [i, p, u] = Ow(t8), c, l; if (a === "NDHWC") - l = "channelsLast", c = [i, p, u, r[4], r[4]]; + l = "channelsLast", c = [i, p, u, r15[4], r15[4]]; else if (a === "NCDHW") - l = "channelsFirst", c = [i, p, u, r[1], r[1]]; + l = "channelsFirst", c = [i, p, u, r15[1], r15[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return Mk(r, c, e, o, n, false, l, s); + return Lk(r15, c, e, o, n, false, l, s); } -function Hu(r, t8, e, o, n, s, a = false, i = "channelsLast") { +function Lu(r15, t8, e, o, n, s, a = false, i = "channelsLast") { let [p, u, c, l] = [-1, -1, -1, -1]; if (i === "channelsLast") - [p, u, c, l] = r; + [p, u, c, l] = r15; else if (i === "channelsFirst") - [p, l, u, c] = r; + [p, l, u, c] = r15; else throw new Error(`Unknown dataFormat ${i}`); - let [m, d, , f] = t8, [h, g] = vl(e), [x, b] = vl(o), C = cc(m, x), S = cc(d, b), { padInfo: k, outHeight: _, outWidth: E } = oH(n, u, c, h, g, C, S, s, i), R = a ? f * l : f, D; - return i === "channelsFirst" ? D = [p, R, _, E] : i === "channelsLast" && (D = [p, _, E, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: E, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: C, effectiveFilterWidth: S, dilationHeight: x, dilationWidth: b, inShape: r, outShape: D, filterShape: t8 }; + let [m, d, , f] = t8, [h, g] = wl(e), [x, b] = wl(o), C = rc(m, x), S = rc(d, b), { padInfo: k, outHeight: _, outWidth: E } = oH(n, u, c, h, g, C, S, s, i), R = a ? f * l : f, D; + return i === "channelsFirst" ? D = [p, R, _, E] : i === "channelsLast" && (D = [p, _, E, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: E, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: C, effectiveFilterWidth: S, dilationHeight: x, dilationWidth: b, inShape: r15, outShape: D, filterShape: t8 }; } -function Mk(r, t8, e, o, n, s = false, a = "channelsLast", i) { +function Lk(r15, t8, e, o, n, s = false, a = "channelsLast", i) { let [p, u, c, l, m] = [-1, -1, -1, -1, -1]; if (a === "channelsLast") - [p, u, c, l, m] = r; + [p, u, c, l, m] = r15; else if (a === "channelsFirst") - [p, m, u, c, l] = r; + [p, m, u, c, l] = r15; else throw new Error(`Unknown dataFormat ${a}`); - let [d, f, h, , g] = t8, [x, b, C] = Ow(e), [S, k, _] = Ow(o), E = cc(d, S), R = cc(f, k), D = cc(h, _), { padInfo: P, outDepth: O, outHeight: M, outWidth: L } = nH(n, u, c, l, x, b, C, E, 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: E, effectiveFilterHeight: R, effectiveFilterWidth: D, dilationDepth: S, dilationHeight: k, dilationWidth: _, inShape: r, outShape: z, filterShape: t8 }; + let [d, f, h, , g] = t8, [x, b, C] = Ow(e), [S, k, _] = Ow(o), E = rc(d, S), R = rc(f, k), D = rc(h, _), { padInfo: P, outDepth: O, outHeight: M, outWidth: L } = nH(n, u, c, l, x, b, C, E, 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: E, effectiveFilterHeight: R, effectiveFilterWidth: D, dilationDepth: S, dilationHeight: k, dilationWidth: _, inShape: r15, outShape: z, filterShape: t8 }; } -function tH(r, t8, e, o, n) { - o == null && (o = Lw(r, t8, e)); - let s = r[0], a = r[1], i = kl((s - t8 + 2 * o) / e + 1, n), p = kl((a - t8 + 2 * o) / e + 1, n); +function tH(r15, t8, e, o, n) { + o == null && (o = Lw(r15, t8, e)); + let s = r15[0], a = r15[1], i = Sl((s - t8 + 2 * o) / e + 1, n), p = Sl((a - t8 + 2 * o) / e + 1, n); return [i, p]; } -function rH(r, t8, e, o, n, s) { - n == null && (n = Lw(r, t8[0], o[0])); +function rH(r15, t8, e, o, n, s) { + n == null && (n = Lw(r15, t8[0], o[0])); let a = [0, 0, 0, e]; for (let i = 0; i < 3; i++) - r[i] + 2 * n >= t8[i] && (a[i] = kl((r[i] - t8[i] + 2 * n) / o[i] + 1, s)); + r15[i] + 2 * n >= t8[i] && (a[i] = Sl((r15[i] - t8[i] + 2 * n) / o[i] + 1, s)); return a; } -function Lw(r, t8, e, o = 1) { - let n = cc(t8, o); - return Math.floor((r[0] * (e - 1) - e + n) / 2); +function Lw(r15, t8, e, o = 1) { + let n = rc(t8, o); + return Math.floor((r15[0] * (e - 1) - e + n) / 2); } -function vl(r) { - return typeof r == "number" ? [r, r, r] : r.length === 2 ? [r[0], r[1], 1] : r; +function wl(r15) { + return typeof r15 == "number" ? [r15, r15, r15] : r15.length === 2 ? [r15[0], r15[1], 1] : r15; } -function Ow(r) { - return typeof r == "number" ? [r, r, r] : r; +function Ow(r15) { + return typeof r15 == "number" ? [r15, r15, r15] : r15; } -function cc(r, t8) { - return t8 <= 1 ? r : r + (r - 1) * (t8 - 1); +function rc(r15, t8) { + return t8 <= 1 ? r15 : r15 + (r15 - 1) * (t8 - 1); } -function oH(r, t8, e, o, n, s, a, i, p) { +function oH(r15, t8, e, 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 = tH([t8, e], s, o, r, i); + if (typeof r15 == "number") { + u = { top: r15, bottom: r15, left: r15, right: r15, type: r15 === 0 ? "VALID" : "NUMBER" }; + let d = tH([t8, e], s, o, r15, i); c = d[0], l = d[1]; - } else if (r === "same") { + } else if (r15 === "same") { c = Math.ceil(t8 / o), l = Math.ceil(e / n); let m = Math.max(0, (c - 1) * o + s - t8), d = Math.max(0, (l - 1) * n + a - e), 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") + } else if (r15 === "valid") u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }, c = Math.ceil((t8 - s + 1) / o), l = Math.ceil((e - 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 = kl((t8 - s + m + d) / o + 1, i), l = kl((e - a + f + h) / n + 1, i); + 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 = Sl((t8 - s + m + d) / o + 1, i), l = Sl((e - a + f + h) / n + 1, i); } else - throw Error(`Unknown padding parameter: ${r}`); + throw Error(`Unknown padding parameter: ${r15}`); return { padInfo: u, outHeight: c, outWidth: l }; } -function nH(r, t8, e, o, n, s, a, i, p, u, c) { +function nH(r15, t8, e, 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 = rH([t8, e, o, 1], [i, p, u], 1, [n, s, a], r, c); + if (r15 === "valid" && (r15 = 0), typeof r15 == "number") { + l = { top: r15, bottom: r15, left: r15, right: r15, front: r15, back: r15, type: r15 === 0 ? "VALID" : "NUMBER" }; + let g = rH([t8, e, o, 1], [i, p, u], 1, [n, s, a], r15, c); m = g[0], d = g[1], f = g[2]; - } else if (r === "same") { + } else if (r15 === "same") { m = Math.ceil(t8 / n), d = Math.ceil(e / s), f = Math.ceil(o / a); let h = (m - 1) * n + i - t8, g = (d - 1) * s + p - e, 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), E = x - _; l = { top: S, bottom: k, left: _, right: E, front: b, back: C, type: "SAME" }; } else - throw Error(`Unknown padding parameter: ${r}`); + throw Error(`Unknown padding parameter: ${r15}`); return { padInfo: l, outDepth: m, outHeight: d, outWidth: f }; } -function kl(r, t8) { +function Sl(r15, t8) { if (!t8) - return Math.trunc(r); + return Math.trunc(r15); switch (t8) { case "round": - return Math.round(r); + return Math.round(r15); case "ceil": - return Math.ceil(r); + return Math.ceil(r15); case "floor": - return Math.floor(r); + return Math.floor(r15); default: throw new Error(`Unknown roundingMode ${t8}`); } } -function Gu(r) { - let [t8, e, o] = vl(r); +function Mu(r15) { + let [t8, e, o] = wl(r15); return t8 === 1 && e === 1 && o === 1; } -function xr(r, t8) { - return Gu(r) || Gu(t8); +function gr(r15, t8) { + return Mu(r15) || Mu(t8); } -function Ta(r) { - return vl(r).every((t8) => t8 > 0); +function Ta(r15) { + return wl(r15).every((t8) => t8 > 0); } -function Lk(r) { - if (r === "NHWC") +function Bk(r15) { + if (r15 === "NHWC") return "channelsLast"; - if (r === "NCHW") + if (r15 === "NCHW") return "channelsFirst"; - throw new Error(`Unknown dataFormat ${r}`); + throw new Error(`Unknown dataFormat ${r15}`); } -function Bt(r, t8, e) { +function Lt(r15, t8, e) { if (e != null) { if (typeof t8 == "string") - throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t8}.`); + throw Error(`Error in ${r15}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t8}.`); if (typeof t8 == "number") - $(qa(t8), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t8}.`); + $(Ka(t8), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t8}.`); else if (typeof t8 == "object") t8.forEach((o) => { o.forEach((n) => { - $(qa(n), () => `Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`); + $(Ka(n), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`); }); }); else - throw Error(`Error in ${r}: Unknown padding parameter: ${t8}`); + throw Error(`Error in ${r15}: Unknown padding parameter: ${t8}`); } } -function sH(r, t8) { - let o = { x: v(r, "x", "reshape", "string_or_numeric") }, n = { shape: t8 }; +function sH(r15, t8) { + let o = { x: v(r15, "x", "reshape", "string_or_numeric") }, n = { shape: t8 }; return T.runKernel(da, o, n); } var W = N({ reshape_: sH }); -function aH(r, t8, e, o, n) { - let s = v(r, "x", "avgPool", "float32"), a = 1; - $(xr(e, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`); +function aH(r15, t8, e, o, n) { + let s = v(r15, "x", "avgPool", "float32"), a = 1; + $(gr(e, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`); let i = s, p = false; - s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), Bt("avgPool", o, n); - let u = { x: i }, c = { filterSize: t8, strides: e, pad: o, dimRoundingMode: n }, l = T.runKernel(Zo, u, c); + s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), Lt("avgPool", o, n); + let u = { x: i }, c = { filterSize: t8, strides: e, pad: o, dimRoundingMode: n }, l = T.runKernel(Qo, u, c); return l = We(l, s.dtype), p ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; } -var fd = N({ avgPool_: aH }); -function iH(r, t8, e, o, n, s = "NDHWC") { - let a = v(r, "x", "avgPool3d", "float32"), i = a, p = false; - a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), $(typeof e == "number" && e > 0 || Array.isArray(e) && e[0] > 0 && e[1] > 0 && e[2] > 0, () => `Error in avgPool3d: Stride must be > 0, but got '${e}'`), Bt("avgPool3d", o, n); +var md = N({ avgPool_: aH }); +function iH(r15, t8, e, o, n, s = "NDHWC") { + let a = v(r15, "x", "avgPool3d", "float32"), i = a, p = false; + a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), $(typeof e == "number" && e > 0 || Array.isArray(e) && e[0] > 0 && e[1] > 0 && e[2] > 0, () => `Error in avgPool3d: Stride must be > 0, but got '${e}'`), Lt("avgPool3d", o, n); let u = { x: i }, c = { filterSize: t8, strides: e, pad: o, dimRoundingMode: n, dataFormat: s }, l = T.runKernel(Zs, u, c); return l = We(l, i.dtype), p ? W(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; } -var Bk = N({ avgPool3d_: iH }); -function uH(r, t8 = 0) { - $(r.length >= 1, () => "Pass at least one tensor to concat"); - let e = si(r, "tensors", "concat", "string_or_numeric"); +var zk = N({ avgPool3d_: iH }); +function uH(r15, t8 = 0) { + $(r15.length >= 1, () => "Pass at least one tensor to concat"); + let e = ni(r15, "tensors", "concat", "string_or_numeric"); if (e[0].dtype === "complex64" && e.forEach((s) => { if (s.dtype !== "complex64") throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${s.dtype}. `); }), e.length === 1) - return Ur(e[0]); + return Wr(e[0]); let o = e, n = { axis: t8 }; return T.runKernel(ta, o, n); } -var bt = N({ concat_: uH }); -function pH(r, t8, e = false, o = false) { - let n = v(r, "a", "matMul"), s = v(t8, "b", "matMul"); +var yt = N({ concat_: uH }); +function pH(r15, t8, e = false, o = false) { + let n = v(r15, "a", "matMul"), s = v(t8, "b", "matMul"); [n, s] = Oe(n, s); let a = { a: n, b: s }, i = { transposeA: e, transposeB: o }; - return T.runKernel(Jo, a, i); + return T.runKernel(Zo, a, i); } var Ze = N({ matMul_: pH }); -function cH(r) { - let e = { x: v(r, "x", "sigmoid", "float32") }; - return T.runKernel(Cs, e); +function cH(r15) { + let e = { x: v(r15, "x", "sigmoid", "float32") }; + return T.runKernel(bs, e); } var $a = N({ sigmoid_: cH }); -function lH(r, t8, e) { - let o = v(r, "x", "slice", "string_or_numeric"); +function lH(r15, t8, e) { + let o = v(r15, "x", "slice", "string_or_numeric"); if (o.rank === 0) throw new Error("Slicing scalar is not possible"); let n = { x: o }, s = { begin: t8, size: e }; return T.runKernel(ha, n, s); } var Xe = N({ slice_: lH }); -function mH(r) { - let e = { x: v(r, "x", "tanh", "float32") }; - return T.runKernel(Es, e); +function mH(r15) { + let e = { x: v(r15, "x", "tanh", "float32") }; + return T.runKernel($s, e); } -var Nl = N({ tanh_: mH }); -function dH(r, t8, e, o, n, s) { - let a = v(r, "forgetBias", "basicLSTMCell"), i = v(t8, "lstmKernel", "basicLSTMCell"), p = v(e, "lstmBias", "basicLSTMCell"), u = v(o, "data", "basicLSTMCell"), c = v(n, "c", "basicLSTMCell"), l = v(s, "h", "basicLSTMCell"), m = bt([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($a(b), Nl(C)), se(c, $a(Ce(a, S)))), E = se(Nl(_), $a(k)); +var Il = N({ tanh_: mH }); +function dH(r15, t8, e, o, n, s) { + let a = v(r15, "forgetBias", "basicLSTMCell"), i = v(t8, "lstmKernel", "basicLSTMCell"), p = v(e, "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($a(b), Il(C)), se(c, $a(Ce(a, S)))), E = se(Il(_), $a(k)); return [_, E]; } -var zk = N({ basicLSTMCell_: dH }); -function fH(r, t8, e) { - let o = v(r, "x", "batchToSpaceND"), n = t8.reduce((i, p) => i * p); +var Vk = N({ basicLSTMCell_: dH }); +function fH(r15, t8, e) { + let o = v(r15, "x", "batchToSpaceND"), n = t8.reduce((i, p) => i * p); $(o.rank >= 1 + t8.length, () => `input rank is ${o.rank} but should be > than blockShape.length ${t8.length}`), $(e.length === t8.length, () => `crops.length is ${e.length} but should be equal to blockShape.length ${t8.length}`), $(o.shape[0] % n === 0, () => `input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${t8.join(" * ")} === ${n}`); let s = { x: o }, a = { blockShape: t8, crops: e }; return T.runKernel(Js, s, a); } -var hd = N({ batchToSpaceND_: fH }); -function Vk(r) { +var dd = N({ batchToSpaceND_: fH }); +function Wk(r15) { let t8; - return r.rank === 0 || r.rank === 1 ? t8 = W(r, [1, 1, 1, r.size]) : r.rank === 2 ? t8 = W(r, [1, 1, r.shape[0], r.shape[1]]) : r.rank === 3 ? t8 = W(r, [1, r.shape[0], r.shape[1], r.shape[2]]) : t8 = r, t8; + return r15.rank === 0 || r15.rank === 1 ? t8 = W(r15, [1, 1, 1, r15.size]) : r15.rank === 2 ? t8 = W(r15, [1, 1, r15.shape[0], r15.shape[1]]) : r15.rank === 3 ? t8 = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]]) : t8 = r15, t8; } -function hH(r, t8, e, o, n, s) { +function hH(r15, t8, e, o, n, s) { s == null && (s = 1e-3); - let a = v(r, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; + let a = v(r15, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; o != null && (c = v(o, "offset", "batchNorm")), $(i.rank === p.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."), $(c == null || i.rank === c.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."), $(u == null || i.rank === u.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); - let m = { x: Vk(a), scale: u, offset: c, mean: i, variance: p }, d = { varianceEpsilon: s }, f = T.runKernel(vn, m, d); + let m = { x: Wk(a), scale: u, offset: c, mean: i, variance: p }, d = { varianceEpsilon: s }, f = T.runKernel(In, m, d); return W(f, a.shape); } -var au = N({ batchNorm_: hH }); -function gH(r, t8, e, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; +var ru = N({ batchNorm_: hH }); +function gH(r15, t8, e, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), $(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), $(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 2 || c.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`), au(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), $(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), $(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 2 || c.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`), ru(a, i, p, c, u, s); } -var Wk = N({ batchNorm2d_: gH }); -function xH(r, t8, e, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; +var Uk = N({ batchNorm2d_: gH }); +function xH(r15, t8, e, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), $(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), $(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 3 || c.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`), au(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), $(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), $(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 3 || c.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`), ru(a, i, p, c, u, s); } -var Uk = N({ batchNorm3d_: xH }); -function yH(r, t8, e, o, n, s) { - let a = v(r, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; +var Gk = N({ batchNorm3d_: xH }); +function yH(r15, t8, e, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(t8, "mean", "batchNorm"), p = v(e, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); let c; - return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), $(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), $(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 4 || c.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`), au(a, i, p, c, u, s); + return o != null && (c = v(o, "offset", "batchNorm")), $(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), $(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), $(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), c != null && $(c.rank === 4 || c.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`), ru(a, i, p, c, u, s); } -var Gk = N({ batchNorm4d_: yH }); -function bH(r, t8, e) { - let o = v(r, "x", "bincount"), n = v(t8, "weights", "bincount"); +var Hk = N({ batchNorm4d_: yH }); +function bH(r15, t8, e) { + let o = v(r15, "x", "bincount"), n = v(t8, "weights", "bincount"); $(o.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${o.dtype}`), $(e >= 0, () => `size must be non-negative, but got ${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: e }; - return T.runKernel(en, s, a); + return T.runKernel(Jo, s, a); } -var gd = N({ bincount_: bH }); -function CH(r, t8) { - let e = v(r, "x", "bitwiseAnd"), o = v(t8, "y", "bitwiseAnd"); - if (!Cr(e.shape, o.shape)) +var fd = N({ bincount_: bH }); +function CH(r15, t8) { + let e = v(r15, "x", "bitwiseAnd"), o = v(t8, "y", "bitwiseAnd"); + if (!br(e.shape, o.shape)) throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${e.shape}, y: ${o.shape}`); if (e.dtype !== "int32" || o.dtype !== "int32") throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${e.dtype} and type of y: ${o.dtype}`); let n = { a: e, b: o }; - return T.runKernel(ja, n); + return T.runKernel(qa, n); } -var Hk = N({ bitwiseAnd_: CH }); -function wH(r, t8) { - let e = v(r, "s0", "broadcastArgs", "int32"), o = v(t8, "s1", "broadcastArgs", "int32"); +var Kk = N({ bitwiseAnd_: CH }); +function wH(r15, t8) { + let e = v(r15, "s0", "broadcastArgs", "int32"), o = v(t8, "s1", "broadcastArgs", "int32"); if (e.rank !== 1) throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`); if (o.rank !== 1) @@ -5981,10 +5982,10 @@ function wH(r, t8) { let n = { s0: e, s1: o }; return T.runKernel(ea, n); } -var Kk = N({ broadcastArgs_: wH }); -function SH(r, t8) { - let e = v(r, "broadcastTo", "x"), o = e.shape; - if (wt(t8), t8.length < e.rank) +var qk = N({ broadcastArgs_: wH }); +function SH(r15, t8) { + let e = v(r15, "broadcastTo", "x"), o = e.shape; + if (Ct(t8), t8.length < e.rank) throw new Error(`broadcastTo(): shape.length=${t8.length} < input.rank=${e.rank}.`); if (t8.length > e.rank) { let u = e.shape.slice(); @@ -5999,181 +6000,181 @@ function SH(r, t8) { else if (e.shape[u] !== 1) throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${t8}].`); if (s.map((u, c) => u > 1 ? c : -1).filter((u) => u >= 0).length === 0) - return Ur(e); + return Wr(e); let i = { x: e }, p = { reps: s }; - return T.runKernel(po, i, p); + return T.runKernel(uo, i, p); } -var iu = N({ broadcastTo_: SH }); -function IH(r) { - let e = { x: v(r, "x", "ceil", "float32") }; - return T.runKernel(tn, e); +var ou = N({ broadcastTo_: SH }); +function IH(r15) { + let e = { x: v(r15, "x", "ceil", "float32") }; + return T.runKernel(en, e); } -var qk = N({ ceil_: IH }); -function Ea(r, t8, e) { - wt(r), e = e || Ri(t8); - let o = { shape: r, value: t8, dtype: e }; +var jk = N({ ceil_: IH }); +function Ea(r15, t8, e) { + Ct(r15), e = e || _i(t8); + let o = { shape: r15, value: t8, dtype: e }; return T.runKernel(sa, {}, o); } -function vH(r, t8, e) { - let o = v(r, "x", "clipByValue"); +function vH(r15, t8, e) { + let o = v(r15, "x", "clipByValue"); if ($(t8 <= e, () => `Error in clip: min (${t8}) must be less than or equal to max (${e}).`), t8 === e) return Ea(o.shape, t8, o.dtype); let n = { x: o }, s = { clipValueMin: t8, clipValueMax: e }; - return T.runKernel(Co, n, s); + return T.runKernel(bo, n, s); } -var jk = N({ clipByValue_: vH }); -function kH(r) { - return bt(r, 0); +var Xk = N({ clipByValue_: vH }); +function kH(r15) { + return yt(r15, 0); } -var Xk = N({ concat1d_: kH }); -function NH(r, t8) { - return bt(r, t8); +var Yk = N({ concat1d_: kH }); +function NH(r15, t8) { + return yt(r15, t8); } -var Yk = N({ concat2d_: NH }); -function TH(r, t8) { - return bt(r, t8); +var Qk = N({ concat2d_: NH }); +function TH(r15, t8) { + return yt(r15, t8); } -var Qk = N({ concat3d_: TH }); -function _H(r, t8) { - return bt(r, t8); +var Zk = N({ concat3d_: TH }); +function _H(r15, t8) { + return yt(r15, t8); } -var Zk = N({ concat4d_: _H }); -function $H(r, t8, e, o, n = "NHWC", s = [1, 1], a) { - let i = v(r, "x", "conv2d", "float32"), p = v(t8, "filter", "conv2d", "float32"), u = i, c = false; - i.rank === 3 && (c = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), Bt("conv2d", o, a); +var Jk = N({ concat4d_: _H }); +function $H(r15, t8, e, o, n = "NHWC", s = [1, 1], a) { + let i = v(r15, "x", "conv2d", "float32"), p = v(t8, "filter", "conv2d", "float32"), u = i, c = false; + i.rank === 3 && (c = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), Lt("conv2d", o, a); let l = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(l === p.shape[2], () => `Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`), $(xr(e, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), $(Ta(s), () => "Error in conv2D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv2D: Strides should be larger than 0."); - let m = { x: u, filter: p }, d = { strides: e, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(rn, m, d); + $(l === p.shape[2], () => `Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`), $(gr(e, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), $(Ta(s), () => "Error in conv2D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv2D: Strides should be larger than 0."); + let m = { x: u, filter: p }, d = { strides: e, 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 uu = N({ conv2d_: $H }); -function EH(r, t8, e, o, n = "NWC", s = 1, a) { - let i = v(r, "x", "conv1d"), p = v(t8, "filter", "conv1d"), u = i, c = false; - i.rank === 2 && (c = true, u = W(i, [1, i.shape[0], i.shape[1]])), $(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), $(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), Bt("conv1d", o, a), $(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), $(xr(e, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`), $(Ta(s), () => "Error in conv1D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv1D: Stride should be larger than 0."), $(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 = uu(m, l, [1, e], o, "NHWC", [1, s], a); +var nu = N({ conv2d_: $H }); +function EH(r15, t8, e, o, n = "NWC", s = 1, a) { + let i = v(r15, "x", "conv1d"), p = v(t8, "filter", "conv1d"), u = i, c = false; + i.rank === 2 && (c = true, u = W(i, [1, i.shape[0], i.shape[1]])), $(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), $(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), Lt("conv1d", o, a), $(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), $(gr(e, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`), $(Ta(s), () => "Error in conv1D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv1D: Stride should be larger than 0."), $(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 = nu(m, l, [1, e], 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 Jk = N({ conv1d_: EH }); -function RH(r, t8, e, o, n, s = "NHWC", a) { - $(r.length === t8.rank, () => `Length of inShape (${r.length}) and rank of dy (${t8.rank}) must match`); - let i = r, p = t8, u = false; - t8.rank === 3 && (u = true, p = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2]]), i = [1, r[0], r[1], r[2]]), $(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), $(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), $(e.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`); +var e2 = N({ conv1d_: EH }); +function RH(r15, t8, e, o, n, s = "NHWC", a) { + $(r15.length === t8.rank, () => `Length of inShape (${r15.length}) and rank of dy (${t8.rank}) must match`); + let i = r15, p = t8, u = false; + t8.rank === 3 && (u = true, p = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2]]), i = [1, r15[0], r15[1], r15[2]]), $(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), $(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), $(e.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`); let c = s === "NHWC" ? i[3] : i[1], l = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(c === e.shape[2], () => `Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`), $(l === e.shape[3], () => `Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`), Bt("conv2dDerInput", n, a); - let m = { dy: p, filter: e }, d = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, inputShape: i }, f = T.runKernel(on, m, d); + $(c === e.shape[2], () => `Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`), $(l === e.shape[3], () => `Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`), Lt("conv2dDerInput", n, a); + let m = { dy: p, filter: e }, 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 xd = N({ conv2DBackpropInput_: RH }); -function DH(r, t8, e, o, n, s) { - let a = v(r, "x", "conv2dTranspose"), i = v(t8, "filter", "conv2dTranspose"); - return xd(e, a, i, o, n, "NHWC", s); +var hd = N({ conv2DBackpropInput_: RH }); +function DH(r15, t8, e, o, n, s) { + let a = v(r15, "x", "conv2dTranspose"), i = v(t8, "filter", "conv2dTranspose"); + return hd(e, a, i, o, n, "NHWC", s); } -var e2 = N({ conv2dTranspose_: DH }); -function AH(r, t8, e, o, n = "NDHWC", s = [1, 1, 1]) { - let a = v(r, "x", "conv3d"), i = v(t8, "filter", "conv3d"), p = a, u = false; - a.rank === 4 && (u = true, p = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), $(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), $(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), $(xr(e, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), $(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`), $(Ta(s), () => "Error in conv3D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv3D: Strides should be larger than 0."); - let c = { x: p, filter: i }, l = { strides: e, pad: o, dataFormat: n, dilations: s }, m = T.runKernel(nn, c, l); +var t2 = N({ conv2dTranspose_: DH }); +function AH(r15, t8, e, o, n = "NDHWC", s = [1, 1, 1]) { + let a = v(r15, "x", "conv3d"), i = v(t8, "filter", "conv3d"), p = a, u = false; + a.rank === 4 && (u = true, p = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), $(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), $(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), $(gr(e, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), $(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`), $(Ta(s), () => "Error in conv3D: Dilated rates should be larger than 0."), $(Ta(e), () => "Error in conv3D: Strides should be larger than 0."); + let c = { x: p, filter: i }, l = { strides: e, 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 t2 = N({ conv3d_: AH }); -function FH(r, t8, e, o, n) { - $(r.length === t8.rank, () => `Length of inShape (${r.length}) and rank of dy (${t8.rank}) must match`); - let s = r, a = t8, i = false; - t8.rank === 4 && (i = true, a = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2], t8.shape[3]]), s = [1, r[0], r[1], r[2], r[3]]); +var r22 = N({ conv3d_: AH }); +function FH(r15, t8, e, o, n) { + $(r15.length === t8.rank, () => `Length of inShape (${r15.length}) and rank of dy (${t8.rank}) must match`); + let s = r15, a = t8, i = false; + t8.rank === 4 && (i = true, a = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2], t8.shape[3]]), s = [1, r15[0], r15[1], r15[2], r15[3]]); let p = s[4], u = a.shape[4]; $(s.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`), $(a.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`), $(e.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`), $(p === e.shape[3], () => `Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${e.shape[3]}.`), $(u === e.shape[4], () => `Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${e.shape[4]}.`); - let c = { dy: a, filter: e }, l = { pad: n, strides: o, inputShape: s }, m = T.runKernel(sn, c, l); + let c = { dy: a, filter: e }, 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 r2 = N({ conv3DBackpropInput_: FH }); -function PH(r, t8, e, o, n) { - let s = v(r, "x", "conv3dTranspose"), a = v(t8, "filter", "conv3dTranspose"); - return r2(e, s, a, o, n); +var o2 = N({ conv3DBackpropInput_: FH }); +function PH(r15, t8, e, o, n) { + let s = v(r15, "x", "conv3dTranspose"), a = v(t8, "filter", "conv3dTranspose"); + return o2(e, s, a, o, n); } -var o2 = N({ conv3dTranspose_: PH }); -function OH(r) { - let e = { x: v(r, "x", "cos", "float32") }; +var n2 = N({ conv3dTranspose_: PH }); +function OH(r15) { + let e = { x: v(r15, "x", "cos", "float32") }; + return T.runKernel(sn, e); +} +var s2 = N({ cos_: OH }); +function MH(r15) { + let e = { x: v(r15, "x", "cosh", "float32") }; return T.runKernel(an, e); } -var n2 = N({ cos_: OH }); -function MH(r) { - let e = { x: v(r, "x", "cosh", "float32") }; - return T.runKernel(un, e); +var a2 = N({ cosh_: MH }); +function LH(r15, t8 = 0, e = false, o = false) { + let s = { x: v(r15, "x", "cumprod") }, a = { axis: t8, exclusive: e, reverse: o }; + return T.runKernel(un, s, a); } -var s2 = N({ cosh_: MH }); -function LH(r, t8 = 0, e = false, o = false) { - let s = { x: v(r, "x", "cumprod") }, a = { axis: t8, exclusive: e, reverse: o }; +var i2 = N({ cumprod_: LH }); +function BH(r15, t8 = 0, e = false, o = false) { + let s = { x: v(r15, "x", "cumsum") }, a = { axis: t8, exclusive: e, reverse: o }; return T.runKernel(pn, s, a); } -var a2 = N({ cumprod_: LH }); -function BH(r, t8 = 0, e = false, o = false) { - let s = { x: v(r, "x", "cumsum") }, a = { axis: t8, exclusive: e, reverse: o }; - return T.runKernel(cn, s, a); -} -var i2 = N({ cumsum_: BH }); -function zH(r, t8, e, o = false) { - let n = v(r, "x", "denseBincount"), s = v(t8, "weights", "denseBincount"); +var u2 = N({ cumsum_: BH }); +function zH(r15, t8, e, o = false) { + let n = v(r15, "x", "denseBincount"), s = v(t8, "weights", "denseBincount"); $(n.dtype === "int32", () => `Error in denseBincount: input dtype must be int32, but got ${n.dtype}`), $(n.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`), $(e >= 0, () => `size must be non-negative, but got ${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: e, binaryOutput: o }; return T.runKernel(ra, a, i); } -var u2 = N({ denseBincount_: zH }); -function VH(r, t8, e = "NHWC") { - let o = v(r, "x", "depthToSpace", "float32"), n = e === "NHWC" ? o.shape[1] : o.shape[2], s = e === "NHWC" ? o.shape[2] : o.shape[3], a = e === "NHWC" ? o.shape[3] : o.shape[1]; +var p2 = N({ denseBincount_: zH }); +function VH(r15, t8, e = "NHWC") { + let o = v(r15, "x", "depthToSpace", "float32"), n = e === "NHWC" ? o.shape[1] : o.shape[2], s = e === "NHWC" ? o.shape[2] : o.shape[3], a = e === "NHWC" ? o.shape[3] : o.shape[1]; $(t8 > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${t8}`), $(n * t8 >= 0, () => `Negative dimension size caused by overflow when multiplying ${n} and ${t8} for depthToSpace with input shape ${o.shape}`), $(s * t8 >= 0, () => `Negative dimension size caused by overflow when multiplying ${s} and ${t8} for depthToSpace with input shape ${o.shape}`), $(a % (t8 * t8) === 0, () => `Dimension size must be evenly divisible by ${t8 * t8} but is ${a} for depthToSpace with input shape ${o.shape}`); let i = { x: o }, p = { blockSize: t8, dataFormat: e }; - return T.runKernel(mn, i, p); + return T.runKernel(ln, i, p); } -var p2 = N({ depthToSpace_: VH }); -function WH(r, t8, e, o, n = "NHWC", s = [1, 1], a) { - let i = v(r, "x", "depthwiseConv2d", "float32"), p = v(t8, "filter", "depthwiseConv2d", "float32"), u = i, c = false; +var c2 = N({ depthToSpace_: VH }); +function WH(r15, t8, e, o, n = "NHWC", s = [1, 1], a) { + let i = v(r15, "x", "depthwiseConv2d", "float32"), p = v(t8, "filter", "depthwiseConv2d", "float32"), u = i, c = false; i.rank === 3 && (c = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`); let l = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(l === p.shape[2], () => `Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`), Bt("depthwiseConv2d", o, a); - let m = { x: u, filter: p }, d = { strides: e, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(dn, m, d); + $(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: e, 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 lc = N({ depthwiseConv2d_: WH }); -function UH(r) { - let e = { x: v(r, "x", "diag") }; +var oc = N({ depthwiseConv2d_: WH }); +function UH(r15) { + let e = { x: v(r15, "x", "diag") }; return T.runKernel(oa, e); } -var c2 = N({ diag_: UH }); -function GH(r, t8, e, o, n = [1, 1], s = "NHWC") { - let a = v(r, "x", "dilation2d"), i = v(t8, "filter", "dilation2d"); +var l2 = N({ diag_: UH }); +function GH(r15, t8, e, o, n = [1, 1], s = "NHWC") { + let a = v(r15, "x", "dilation2d"), i = v(t8, "filter", "dilation2d"); $(a.rank === 3 || a.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`), $(i.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`), $(s === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`); let p = a, u = false; a.rank === 3 && (p = W(a, [1, a.shape[0], a.shape[1], a.shape[2]]), u = true), $(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: e, pad: o, dilations: n }, m = T.runKernel(fn, c, l); + let c = { x: p, filter: i }, l = { strides: e, 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 l2 = N({ dilation2d_: GH }); -var Ir = {}; -qe(Ir, { assertAndGetBroadcastShape: () => rt, getBroadcastDims: () => m2, getReductionAxes: () => yd }); -function m2(r, t8) { - let e = r.length, o = []; +var m2 = N({ dilation2d_: GH }); +var Sr = {}; +qe(Sr, { assertAndGetBroadcastShape: () => rt, getBroadcastDims: () => d2, getReductionAxes: () => gd }); +function d2(r15, t8) { + let e = r15.length, o = []; for (let n = 0; n < e; n++) { - let s = e - 1 - n, a = r[s] || 1; + let s = e - 1 - n, a = r15[s] || 1; (t8[t8.length - 1 - n] || 1) > 1 && a === 1 && o.unshift(s); } return o; } -function yd(r, t8) { +function gd(r15, t8) { let e = []; for (let o = 0; o < t8.length; o++) { - let n = r[r.length - o - 1], s = t8.length - o - 1, a = t8[s]; + let n = r15[r15.length - o - 1], s = t8.length - o - 1, a = t8[s]; (n == null || n === 1 && a > 1) && e.unshift(s); } return e; } -function rt(r, t8) { - let e = Math.max(r.length, t8.length), o = new Array(e); +function rt(r15, t8) { + let e = Math.max(r15.length, t8.length), o = new Array(e); for (let n = 0; n < e; n++) { - let s = r[r.length - n - 1]; + let s = r15[r15.length - n - 1]; s == null && (s = 1); let a = t8[t8.length - n - 1]; if (a == null && (a = 1), s === 1) @@ -6181,39 +6182,39 @@ function rt(r, t8) { else if (a === 1) o[e - n - 1] = s; else if (s !== a) { - let i = `Operands could not be broadcast together with shapes ${r} and ${t8}.`; + let i = `Operands could not be broadcast together with shapes ${r15} and ${t8}.`; throw Error(i); } else o[e - n - 1] = s; } return o; } -function HH(r, t8) { - let e = v(r, "a", "equal", "string_or_numeric"), o = v(t8, "b", "equal", "string_or_numeric"); +function HH(r15, t8) { + let e = v(r15, "a", "equal", "string_or_numeric"), o = v(t8, "b", "equal", "string_or_numeric"); [e, o] = Oe(e, o), rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(yn, n); + return T.runKernel(xn, n); } -var bd = N({ equal_: HH }); -function KH(r, t8, e) { - let o = v(t8, "a", "where"), n = v(e, "b", "where"), s = v(r, "condition", "where", "bool"), a = rt(rt(s.shape, o.shape), n.shape), i = iu(s, a), p = iu(o, a), u = iu(n, a), c = { condition: i, t: p, e: u }; +var xd = N({ equal_: HH }); +function KH(r15, t8, e) { + let o = v(t8, "a", "where"), n = v(e, "b", "where"), s = v(r15, "condition", "where", "bool"), a = rt(rt(s.shape, o.shape), n.shape), i = ou(s, a), p = ou(o, a), u = ou(n, a), c = { condition: i, t: p, e: u }; return T.runKernel(fa, c); } -var lo = N({ where_: KH }); -function qH(r) { - let e = { x: v(r, "x", "zerosLike") }; +var co = N({ where_: KH }); +function qH(r15) { + let e = { x: v(r15, "x", "zerosLike") }; return T.runKernel(Sa, e); } -var Ht = N({ zerosLike_: qH }); -function jH(r, t8) { - let e = v(r, "a", "div"), o = v(t8, "b", "div"); +var Gt = N({ zerosLike_: qH }); +function jH(r15, t8) { + let e = v(r15, "a", "div"), o = v(t8, "b", "div"); [e, o] = Oe(e, o); - let n = je(e, o), s = Ht(n), a = bd(o, s); - return lo(a, s, n); + let n = je(e, o), s = Gt(n), a = xd(o, s); + return co(a, s, n); } -var d2 = N({ divNoNan_: jH }); -function XH(r, t8) { - let e = v(r, "t1", "dot"), o = v(t8, "t2", "dot"); +var f2 = N({ divNoNan_: jH }); +function XH(r15, t8) { + let e = v(r15, "t1", "dot"), o = v(t8, "t2", "dot"); $((e.rank === 1 || e.rank === 2) && (o.rank === 1 || o.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${o.rank}.`); let n = e.rank === 1 ? e.size : e.shape[1], s = o.rank === 1 ? o.size : o.shape[0]; if ($(n === s, () => `Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`), e.rank === 1 && o.rank === 1) { @@ -6230,323 +6231,323 @@ function XH(r, t8) { return Ze(e, a); } } -var f2 = N({ dot_: XH }); -function YH(r, ...t8) { - let e = t8.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r }; - return T.runKernel(Vi, e, o); +var h2 = N({ dot_: XH }); +function YH(r15, ...t8) { + let e = t8.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r15 }; + return T.runKernel(Li, e, o); } -var pu = N({ einsum_: YH }); -function QH(r) { - let e = { x: v(r, "x", "elu", "float32") }; - return T.runKernel(gn, e); +var su = N({ einsum_: YH }); +function QH(r15) { + let e = { x: v(r15, "x", "elu", "float32") }; + return T.runKernel(hn, e); } -var Cd = N({ elu_: QH }); -function ZH(r, t8) { - let e = v(r, "x", "ensureShape", "string_or_numeric"); - if (!ZC(e.shape, t8)) +var yd = N({ elu_: QH }); +function ZH(r15, t8) { + let e = v(r15, "x", "ensureShape", "string_or_numeric"); + if (!QC(e.shape, t8)) throw new Error(`EnsureShape: Shape of tensor ${e.shape} is not compatible with expected shape ${t8}`); - return r; + return r15; } -var h2 = N({ ensureShape_: ZH }); -function JH(r) { - let t8 = v(r, "x", "erf"); +var g2 = N({ ensureShape_: ZH }); +function JH(r15) { + let t8 = v(r15, "x", "erf"); $(t8.dtype === "int32" || t8.dtype === "float32", () => "Input dtype must be `int32` or `float32`."), t8.dtype === "int32" && (t8 = We(t8, "float32")); let e = { x: t8 }; - return T.runKernel(xn, e); + return T.runKernel(gn, e); } -var g2 = N({ erf_: JH }); -function Bw(r, t8) { - for (let e = 0; e < r.length; ++e) - if (r[r.length - e - 1] !== t8 - 1 - e) +var x2 = N({ erf_: JH }); +function Bw(r15, t8) { + for (let e = 0; e < r15.length; ++e) + if (r15[r15.length - e - 1] !== t8 - 1 - e) return false; return true; } -function x2(r, t8, e) { - let o = r.length + t8.length, n = [], s = 0, a = 0; +function y2(r15, t8, e) { + let o = r15.length + t8.length, n = [], s = 0, a = 0; for (let i = 0; i < o; i++) - e.indexOf(i) === -1 ? n.push(r[s++]) : n.push(t8[a++]); + e.indexOf(i) === -1 ? n.push(r15[s++]) : n.push(t8[a++]); return n; } -function eK(r, t8) { - let e = [], o = r.length; +function eK(r15, t8) { + let e = [], o = r15.length; for (let s = 0; s < o; s++) - t8.indexOf(s) === -1 && e.push(r[s]); - let n = t8.map((s) => r[s]); + t8.indexOf(s) === -1 && e.push(r15[s]); + let n = t8.map((s) => r15[s]); return [e, n]; } -function ii(r, t8) { +function ai(r15, t8) { let e = t8.map((o) => 1); - return x2(r, e, t8); + return y2(r15, e, t8); } -function tK(r, t8, e) { - $(Bw(t8, e), () => `${r} supports only inner-most axes for now. Got axes ${t8} and rank-${e} input.`); +function tK(r15, t8, e) { + $(Bw(t8, e), () => `${r15} supports only inner-most axes for now. Got axes ${t8} and rank-${e} input.`); } -function rK(r, t8) { - if (Bw(r, t8)) +function rK(r15, t8) { + if (Bw(r15, t8)) return null; let e = []; for (let o = 0; o < t8; ++o) - r.indexOf(o) === -1 && e.push(o); - return r.forEach((o) => e.push(o)), e; + r15.indexOf(o) === -1 && e.push(o); + return r15.forEach((o) => e.push(o)), e; } -function oK(r) { - return r.map((t8, e) => [e, t8]).sort((t8, e) => t8[1] - e[1]).map((t8) => t8[0]); +function oK(r15) { + return r15.map((t8, e) => [e, t8]).sort((t8, e) => t8[1] - e[1]).map((t8) => t8[0]); } -function nK(r, t8) { +function nK(r15, t8) { let e = []; - for (let o = t8 - r; o < t8; ++o) + for (let o = t8 - r15; o < t8; ++o) e.push(o); return e; } -function aK(r, t8 = null, e = false) { - let n = { x: v(r, "x", "max") }, s = { reductionIndices: t8, keepDims: e }; - return T.runKernel(Vn, n, s); +function aK(r15, t8 = null, e = false) { + let n = { x: v(r15, "x", "max") }, s = { reductionIndices: t8, keepDims: e }; + return T.runKernel(zn, n, s); } var Ra = N({ max_: aK }); -function iK(r, t8 = null, e = false) { - let n = { x: v(r, "x", "min") }, s = { axis: t8, keepDims: e }; - return T.runKernel(Hn, n, s); +function iK(r15, t8 = null, e = false) { + let n = { x: v(r15, "x", "min") }, s = { axis: t8, keepDims: e }; + return T.runKernel(Gn, n, s); } -var Tl = N({ min_: iK }); -function uK(r, t8) { - let e = v(r, "base", "pow"), o = v(t8, "exp", "pow"); +var vl = N({ min_: iK }); +function uK(r15, t8) { + let e = v(r15, "base", "pow"), o = v(t8, "exp", "pow"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(rs, n); + return T.runKernel(ts, n); } -var ui = N({ pow_: uK }); -function ke(r, t8) { - if ((Ot(r) && t8 !== "string" || Array.isArray(r)) && t8 !== "complex64") +var ii = N({ pow_: uK }); +function ke(r15, t8) { + if ((Pt(r15) && t8 !== "string" || Array.isArray(r15)) && t8 !== "complex64") throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); - if (t8 === "string" && Ot(r) && !(r instanceof Uint8Array)) + if (t8 === "string" && Pt(r15) && !(r15 instanceof Uint8Array)) throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); - return Sr(r, [], [], t8); + return wr(r15, [], [], t8); } -function pK(r) { - let e = { x: v(r, "x", "sqrt", "float32") }; - return T.runKernel(Ss, e); +function pK(r15) { + let e = { x: v(r15, "x", "sqrt", "float32") }; + return T.runKernel(ws, e); } -var Dr = N({ sqrt_: pK }); -function cK(r) { - let t8 = v(r, "x", "square"), e = {}; +var Rr = N({ sqrt_: pK }); +function cK(r15) { + let t8 = v(r15, "x", "square"), e = {}; return T.runKernel("Square", { x: t8 }, e); } -var er = N({ square_: cK }); -function lK(r, t8 = null, e = false) { - let o = v(r, "x", "sum"); +var Zt = N({ square_: cK }); +function lK(r15, t8 = null, e = false) { + let o = v(r15, "x", "sum"); o.dtype === "bool" && (o = We(o, "int32")); let n = { x: o }, s = { axis: t8, keepDims: e }; - return T.runKernel(Is, n, s); + return T.runKernel(Ss, n, s); } var ot = N({ sum_: lK }); -function mK(r, t8 = "euclidean", e = null, o = false) { - r = v(r, "x", "norm"); - let n = y2(r, t8, e), s = n.shape; +function mK(r15, t8 = "euclidean", e = null, o = false) { + r15 = v(r15, "x", "norm"); + let n = b2(r15, t8, e), s = n.shape; if (o) { - let a = Ei(e, r.shape); - s = ii(n.shape, a); + let a = Ti(e, r15.shape); + s = ai(n.shape, a); } return W(n, s); } -function y2(r, t8, e = null) { - if (r.rank === 0) - return Jt(r); - if (r.rank !== 1 && e === null) - return y2(W(r, [-1]), t8, e); - if (r.rank === 1 || typeof e == "number" || Array.isArray(e) && e.length === 1) { +function b2(r15, t8, e = null) { + if (r15.rank === 0) + return Qt(r15); + if (r15.rank !== 1 && e === null) + return b2(W(r15, [-1]), t8, e); + if (r15.rank === 1 || typeof e == "number" || Array.isArray(e) && e.length === 1) { if (t8 === 1) - return ot(Jt(r), e); + return ot(Qt(r15), e); if (t8 === 1 / 0) - return Ra(Jt(r), e); + return Ra(Qt(r15), e); if (t8 === -1 / 0) - return Tl(Jt(r), e); + return vl(Qt(r15), e); if (t8 === "euclidean" || t8 === 2) - return Dr(ot(ui(Jt(r), ke(2, "int32")), e)); + return Rr(ot(ii(Qt(r15), ke(2, "int32")), e)); throw new Error(`Error in norm: invalid ord value: ${t8}`); } if (Array.isArray(e) && e.length === 2) { if (t8 === 1) - return Ra(ot(Jt(r), e[0]), e[1] - 1); + return Ra(ot(Qt(r15), e[0]), e[1] - 1); if (t8 === 1 / 0) - return Ra(ot(Jt(r), e[1]), e[0]); + return Ra(ot(Qt(r15), e[1]), e[0]); if (t8 === -1 / 0) - return Tl(ot(Jt(r), e[1]), e[0]); + return vl(ot(Qt(r15), e[1]), e[0]); if (t8 === "fro" || t8 === "euclidean") - return Dr(ot(er(r), e)); + return Rr(ot(Zt(r15), e)); throw new Error(`Error in norm: invalid ord value: ${t8}`); } throw new Error(`Error in norm: invalid axis: ${e}`); } -var Ku = N({ norm_: mK }); -function dK(r, t8 = null, e = false) { - return Ku(r, "euclidean", t8, e); +var Bu = N({ norm_: mK }); +function dK(r15, t8 = null, e = false) { + return Bu(r15, "euclidean", t8, e); } -var b2 = N({ euclideanNorm_: dK }); -function fK(r) { - let e = { x: v(r, "x", "exp") }; - return T.runKernel(bn, e); +var C2 = N({ euclideanNorm_: dK }); +function fK(r15) { + let e = { x: v(r15, "x", "exp") }; + return T.runKernel(yn, e); } -var $o = N({ exp_: fK }); -function hK(r, t8 = 0) { - let e = v(r, "x", "expandDims", "string_or_numeric"); +var _o = N({ exp_: fK }); +function hK(r15, t8 = 0) { + let e = v(r15, "x", "expandDims", "string_or_numeric"); $(t8 <= e.rank, () => "Axis must be <= rank of the tensor"); let o = { input: e }, n = { dim: t8 }; return T.runKernel(na, o, n); } var Ms = N({ expandDims_: hK }); -function gK(r) { - let e = { x: v(r, "x", "expm1") }; - return T.runKernel(Cn, e); +function gK(r15) { + let e = { x: v(r15, "x", "expm1") }; + return T.runKernel(bn, e); } -var C2 = N({ expm1_: gK }); -function xK(r, t8) { - let e = v(r, "x", "tile", "string_or_numeric"); +var w2 = N({ expm1_: gK }); +function xK(r15, t8) { + let e = v(r15, "x", "tile", "string_or_numeric"); $(e.rank === t8.length, () => `Error in transpose: rank of input ${e.rank} must match length of reps ${t8}.`); let o = { x: e }, n = { reps: t8 }; - return T.runKernel(po, o, n); + return T.runKernel(uo, o, n); } -var cu = N({ tile_: xK }); -function yK(r, t8, e, o = "float32") { - t8 == null && (t8 = r); - let n = me([r, t8], o), s = r <= t8 ? r : t8; +var au = N({ tile_: xK }); +function yK(r15, t8, e, o = "float32") { + t8 == null && (t8 = r15); + let n = me([r15, t8], o), s = r15 <= t8 ? r15 : t8; for (let i = 0; i < s; ++i) n.set(1, i, i); - let a = W(n.toTensor(), [r, t8]); + let a = W(n.toTensor(), [r15, t8]); if (e == null) return a; if (e.length === 1) - return cu(Ms(a, 0), [e[0], 1, 1]); + return au(Ms(a, 0), [e[0], 1, 1]); if (e.length === 2) - return cu(Ms(Ms(a, 0), 0), [e[0], e[1], 1, 1]); + return au(Ms(Ms(a, 0), 0), [e[0], e[1], 1, 1]); if (e.length === 3) - return cu(Ms(Ms(Ms(a, 0), 0), 0), [e[0], e[1], e[2], 1, 1]); + return au(Ms(Ms(Ms(a, 0), 0), 0), [e[0], e[1], e[2], 1, 1]); throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${e.length}D.`); } -var wd = N({ eye_: yK }); -function bK(r) { - let e = { x: v(r, "x", "floor", "float32") }; - return T.runKernel(Sn, e); +var bd = N({ eye_: yK }); +function bK(r15) { + let e = { x: v(r15, "x", "floor", "float32") }; + return T.runKernel(wn, e); } -var Sd = N({ floor_: bK }); -function CK(r, t8, e = 0, o = 0) { - let n = v(r, "x", "gather"), s = v(t8, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: e, batchDims: o }; +var Cd = N({ floor_: bK }); +function CK(r15, t8, e = 0, o = 0) { + let n = v(r15, "x", "gather"), s = v(t8, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: e, batchDims: o }; return T.runKernel(aa, a, i); } -var Id = N({ gather_: CK }); -function wK(r, t8) { - let e = v(r, "a", "greater", "string_or_numeric"), o = v(t8, "b", "greater", "string_or_numeric"); +var wd = N({ gather_: CK }); +function wK(r15, t8) { + let e = v(r15, "a", "greater", "string_or_numeric"), o = v(t8, "b", "greater", "string_or_numeric"); + [e, o] = Oe(e, o), rt(e.shape, o.shape); + let n = { a: e, b: o }; + return T.runKernel(kn, n); +} +var zu = N({ greater_: wK }); +function SK(r15, t8) { + let e = v(r15, "a", "greaterEqual", "string_or_numeric"), o = v(t8, "b", "greaterEqual", "string_or_numeric"); [e, o] = Oe(e, o), rt(e.shape, o.shape); let n = { a: e, b: o }; return T.runKernel(Nn, n); } -var qu = N({ greater_: wK }); -function SK(r, t8) { - let e = v(r, "a", "greaterEqual", "string_or_numeric"), o = v(t8, "b", "greaterEqual", "string_or_numeric"); - [e, o] = Oe(e, o), rt(e.shape, o.shape); - let n = { a: e, b: o }; - return T.runKernel(Tn, n); +var Sd = N({ greaterEqual_: SK }); +function IK(r15) { + let e = { input: v(r15, "input", "imag") }; + return T.runKernel(Vi, e); } -var vd = N({ greaterEqual_: SK }); -function IK(r) { - let e = { input: v(r, "input", "imag") }; - return T.runKernel(Gi, e); +var iu = N({ imag_: IK }); +function vK(r15) { + let e = { x: v(r15, "x", "isFinite") }; + return T.runKernel(Tn, e); } -var lu = N({ imag_: IK }); -function vK(r) { - let e = { x: v(r, "x", "isFinite") }; +var S2 = N({ isFinite_: vK }); +function kK(r15) { + let e = { x: v(r15, "x", "isInf") }; return T.runKernel(_n, e); } -var w2 = N({ isFinite_: vK }); -function kK(r) { - let e = { x: v(r, "x", "isInf") }; +var I2 = N({ isInf_: kK }); +function NK(r15) { + let e = { x: v(r15, "x", "isNaN") }; return T.runKernel($n, e); } -var S2 = N({ isInf_: kK }); -function NK(r) { - let e = { x: v(r, "x", "isNaN") }; - return T.runKernel(En, e); +var v2 = N({ isNaN_: NK }); +function TK(r15, t8 = 0.2) { + let o = { x: v(r15, "x", "leakyRelu") }, n = { alpha: t8 }; + return T.runKernel(En, o, n); } -var I2 = N({ isNaN_: NK }); -function TK(r, t8 = 0.2) { - let o = { x: v(r, "x", "leakyRelu") }, n = { alpha: t8 }; - return T.runKernel(Rn, o, n); +var Id = N({ leakyRelu_: TK }); +function _K(r15, t8) { + let e = v(r15, "a", "less", "string_or_numeric"), o = v(t8, "b", "less", "string_or_numeric"); + [e, o] = Oe(e, o), rt(e.shape, o.shape); + let n = { a: e, b: o }; + return T.runKernel(Rn, n); } -var kd = N({ leakyRelu_: TK }); -function _K(r, t8) { - let e = v(r, "a", "less", "string_or_numeric"), o = v(t8, "b", "less", "string_or_numeric"); +var kl = N({ less_: _K }); +function $K(r15, t8) { + let e = v(r15, "a", "lessEqual", "string_or_numeric"), o = v(t8, "b", "lessEqual", "string_or_numeric"); [e, o] = Oe(e, o), rt(e.shape, o.shape); let n = { a: e, b: o }; return T.runKernel(Dn, n); } -var _l = N({ less_: _K }); -function $K(r, t8) { - let e = v(r, "a", "lessEqual", "string_or_numeric"), o = v(t8, "b", "lessEqual", "string_or_numeric"); - [e, o] = Oe(e, o), rt(e.shape, o.shape); - let n = { a: e, b: o }; - return T.runKernel(An, n); -} -var mc = N({ lessEqual_: $K }); -function v2(r, t8, e) { +var nc = N({ lessEqual_: $K }); +function k2(r15, t8, e) { if (e <= 0) throw new Error("The number of values should be positive."); - let o = { start: r, stop: t8, num: e }; - return T.runKernel(Fn, {}, o); + let o = { start: r15, stop: t8, num: e }; + return T.runKernel(An, {}, o); } -function EK(r, t8 = 5, e = 1, o = 1, n = 0.5) { - let s = v(r, "x", "localResponseNormalization"); +function EK(r15, t8 = 5, e = 1, o = 1, n = 0.5) { + let s = v(r15, "x", "localResponseNormalization"); $(s.rank === 4 || s.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`), $(qa(t8), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t8}.`); + rank ${s.rank}.`), $(Ka(t8), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t8}.`); let a = s, i = false; s.rank === 3 && (i = true, a = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])); - let p = { x: a }, u = { depthRadius: t8, bias: e, alpha: o, beta: n }, c = T.runKernel(zn, p, u); + let p = { x: a }, u = { depthRadius: t8, bias: e, 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 k2 = N({ localResponseNormalization_: EK }); -function RK(r) { - let e = { x: v(r, "x", "log", "float32") }; +var N2 = N({ localResponseNormalization_: EK }); +function RK(r15) { + let e = { x: v(r15, "x", "log", "float32") }; + return T.runKernel(Fn, e); +} +var ui = N({ log_: RK }); +function DK(r15) { + let e = { x: v(r15, "x", "log1p") }; return T.runKernel(Pn, e); } -var pi = N({ log_: RK }); -function DK(r) { - let e = { x: v(r, "x", "log1p") }; - return T.runKernel(On, e); -} -var Nd = N({ log1p_: DK }); -function AK(r) { - return $(qs(r), () => "The f passed in grad(f) must be a function"), (t8, e) => { +var vd = N({ log1p_: DK }); +function AK(r15) { + return $(qs(r15), () => "The f passed in grad(f) must be a function"), (t8, e) => { let o = v(t8, "x", "tf.grad", "string_or_numeric"), n = e != null ? v(e, "dy", "tf.grad") : null; return T.tidy(() => { - let { value: s, grads: a } = T.gradients(() => r(o), [o], n); - return n != null && yt(s.shape, n.shape, "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"), Td(a), a[0]; + let { value: s, grads: a } = T.gradients(() => r15(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)"), kd(a), a[0]; }); }; } -function FK(r) { - return $(qs(r), () => "The f passed in grads(f) must be a function"), (t8, e) => { +function FK(r15) { + return $(qs(r15), () => "The f passed in grads(f) must be a function"), (t8, e) => { $(Array.isArray(t8), () => "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"); - let o = si(t8, "args", "tf.grads", "string_or_numeric"), n = e != null ? v(e, "dy", "tf.grads") : null; + let o = ni(t8, "args", "tf.grads", "string_or_numeric"), n = e != null ? v(e, "dy", "tf.grads") : null; return T.tidy(() => { - let { value: s, grads: a } = T.gradients(() => r(...o), o, n); - return n != null && yt(s.shape, n.shape, "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Td(a), a; + let { value: s, grads: a } = T.gradients(() => r15(...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,...])"), kd(a), a; }); }; } -function PK(r) { - return $(qs(r), () => "The f passed in valueAndGrad(f) must be a function"), (t8, e) => { - $(t8 instanceof ut, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), $(e == null || e instanceof ut, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); - let { grads: o, value: n } = T.gradients(() => r(t8), [t8], e); - return Td(o), { grad: o[0], value: n }; +function PK(r15) { + return $(qs(r15), () => "The f passed in valueAndGrad(f) must be a function"), (t8, e) => { + $(t8 instanceof mt, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), $(e == null || e instanceof mt, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); + let { grads: o, value: n } = T.gradients(() => r15(t8), [t8], e); + return kd(o), { grad: o[0], value: n }; }; } -function OK(r) { - return $(qs(r), () => "The f passed in valueAndGrads(f) must be a function"), (t8, e) => { - $(Array.isArray(t8) && t8.every((n) => n instanceof ut), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), $(e == null || e instanceof ut, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); - let o = T.gradients(() => r(...t8), t8, e); - return e != null && yt(o.value.shape, e.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Td(o.grads), o; +function OK(r15) { + return $(qs(r15), () => "The f passed in valueAndGrads(f) must be a function"), (t8, e) => { + $(Array.isArray(t8) && t8.every((n) => n instanceof mt), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), $(e == null || e instanceof mt, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); + let o = T.gradients(() => r15(...t8), t8, e); + return e != null && xt(o.value.shape, e.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), kd(o.grads), o; }; } -function zw(r, t8) { - $(qs(r), () => "The f passed in variableGrads(f) must be a function"), $(t8 == null || Array.isArray(t8) && t8.every((u) => u instanceof oi), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); +function zw(r15, t8) { + $(qs(r15), () => "The f passed in variableGrads(f) must be a function"), $(t8 == null || Array.isArray(t8) && t8.every((u) => u instanceof ri), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); let e = t8 != null; if (!e) { t8 = []; @@ -6555,175 +6556,175 @@ function zw(r, t8) { } let o = e ? t8.filter((u) => !u.trainable) : null, n = t8.length; t8 = t8.filter((u) => u.trainable), $(t8.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); - let s = true, { value: a, grads: i } = T.gradients(r, t8, null, s); + let s = true, { value: a, grads: i } = T.gradients(r15, t8, null, s); $(i.some((u) => u != null), () => "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."), $(a.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`); let p = {}; return t8.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 vr(r) { - return T.customGrad(r); +function Ir(r15) { + return T.customGrad(r15); } -function Td(r) { - if (r.filter((e) => e == null).length > 0) +function kd(r15) { + if (r15.filter((e) => e == 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 MK(r) { - let e = { x: v(r, "x", "neg") }; +function MK(r15) { + let e = { x: v(r15, "x", "neg") }; return T.runKernel(pa, e); } -var cr = N({ neg_: MK }); -function LK(r) { - let e = { x: v(r, "x", "softplus") }; - return T.runKernel(ws, e); +var pr = N({ neg_: MK }); +function LK(r15) { + let e = { x: v(r15, "x", "softplus") }; + return T.runKernel(Cs, e); } -var _d = N({ softplus_: LK }); -function BK(r) { - let t8 = v(r, "x", "logSigmoid"); - return vr((o) => ({ value: cr(_d(cr(o))), gradFunc: (a) => se(a, $a(cr(o))) }))(t8); +var Nd = N({ softplus_: LK }); +function BK(r15) { + let t8 = v(r15, "x", "logSigmoid"); + return Ir((o) => ({ value: pr(Nd(pr(o))), gradFunc: (a) => se(a, $a(pr(o))) }))(t8); } -var N2 = N({ logSigmoid_: BK }); -function zK(r, t8) { - let e = v(r, "a", "sub"), o = v(t8, "b", "sub"); +var T2 = N({ logSigmoid_: BK }); +function zK(r15, t8) { + let e = v(r15, "a", "sub"), o = v(t8, "b", "sub"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(_s, n); + return T.runKernel(Ts, n); } var Te = N({ sub_: zK }); -function VK(r, t8 = -1) { - let e = v(r, "logits", "logSoftmax"); +function VK(r15, t8 = -1) { + let e = v(r15, "logits", "logSoftmax"); if (t8 === -1 && (t8 = e.rank - 1), t8 !== e.rank - 1) throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t8}`); - return vr((n, s) => { - let i = Ra(n, t8, true), p = Te(n, i), u = Te(We(p, "float32"), pi(ot($o(p), t8, true))); + return Ir((n, s) => { + let i = Ra(n, t8, true), p = Te(n, i), u = Te(We(p, "float32"), ui(ot(_o(p), t8, true))); return s([u]), { value: u, gradFunc: (l, m) => { - let [d] = m, f = true, h = $o(d); + let [d] = m, f = true, h = _o(d); return Te(l, se(ot(l, t8, f), h)); } }; })(e); } -var T2 = N({ logSoftmax_: VK }); -function WK(r, t8 = null, e = false) { - let o = v(r, "x", "logSumExp"), n = Ei(t8, o.shape), s = Ra(o, n, true), a = Te(o, s), i = $o(a), p = ot(i, n), u = pi(p), c = Ce(W(s, u.shape), u); +var _2 = N({ logSoftmax_: VK }); +function WK(r15, t8 = null, e = false) { + let o = v(r15, "x", "logSumExp"), n = Ti(t8, o.shape), s = Ra(o, n, true), a = Te(o, s), i = _o(a), p = ot(i, n), u = ui(p), c = Ce(W(s, u.shape), u); if (e) { - let l = ii(c.shape, n); + let l = ai(c.shape, n); return W(c, l); } return c; } -var $d = N({ logSumExp_: WK }); -function UK(r, t8) { - let e = v(r, "a", "logicalAnd", "bool"), o = v(t8, "b", "logicalAnd", "bool"); +var Td = N({ logSumExp_: WK }); +function UK(r15, t8) { + let e = v(r15, "a", "logicalAnd", "bool"), o = v(t8, "b", "logicalAnd", "bool"); rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(Mn, n); + return T.runKernel(On, n); } -var ju = N({ logicalAnd_: UK }); -function GK(r) { - let e = { x: v(r, "x", "logicalNot", "bool") }; - return T.runKernel(Ln, e); +var Vu = N({ logicalAnd_: UK }); +function GK(r15) { + let e = { x: v(r15, "x", "logicalNot", "bool") }; + return T.runKernel(Mn, e); } -var Ed = N({ logicalNot_: GK }); -function HK(r, t8) { - let e = v(r, "a", "logicalOr", "bool"), o = v(t8, "b", "logicalOr", "bool"); +var _d = N({ logicalNot_: GK }); +function HK(r15, t8) { + let e = v(r15, "a", "logicalOr", "bool"), o = v(t8, "b", "logicalOr", "bool"); rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(Bn, n); + return T.runKernel(Ln, n); } -var Rd = N({ logicalOr_: HK }); -function KK(r, t8) { - let e = v(r, "a", "logicalXor", "bool"), o = v(t8, "b", "logicalXor", "bool"); - return rt(e.shape, o.shape), ju(Rd(r, t8), Ed(ju(r, t8))); +var $d = N({ logicalOr_: HK }); +function KK(r15, t8) { + let e = v(r15, "a", "logicalXor", "bool"), o = v(t8, "b", "logicalXor", "bool"); + return rt(e.shape, o.shape), Vu($d(r15, t8), _d(Vu(r15, t8))); } -var _2 = N({ logicalXor_: KK }); -var Dd = 2147483648; -function qK(r, t8, e = "left") { - let o = v(r, "sortedSequence", "searchSorted"), n = v(t8, "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]); +var $2 = N({ logicalXor_: KK }); +var Ed = 2147483648; +function qK(r15, t8, e = "left") { + let o = v(r15, "sortedSequence", "searchSorted"), n = v(t8, "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 (He(p.shape) >= Dd) - throw new Error(`values tensor size must less than ${Dd}`); - if (i.shape[1] >= Dd) - throw new Error(`trailing dim_size must less than ${Dd} for int32 output type, was ${i.shape[1]}`); + if (He(p.shape) >= Ed) + throw new Error(`values tensor size must less than ${Ed}`); + if (i.shape[1] >= Ed) + throw new Error(`trailing dim_size must less than ${Ed} for int32 output type, was ${i.shape[1]}`); let u = { sortedSequence: i, values: p }, c = { side: e }; - return T.runKernel(hs, u, c); + return T.runKernel(fs, u, c); } -var $l = N({ searchSorted_: qK }); -function $2(r, t8) { - return $l(r, t8, "left"); +var Nl = N({ searchSorted_: qK }); +function E2(r15, t8) { + return Nl(r15, t8, "left"); } -function jK(r, t8, e, o, n) { - let s = v(r, "x", "maxPool"), a = 1, i = s, p = false; - s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), $(xr(e, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`), Bt("maxPool", o, n); - let u = { x: i }, c = { filterSize: t8, strides: e, pad: o, dimRoundingMode: n }, l = T.runKernel(Un, u, c); +function jK(r15, t8, e, o, n) { + let s = v(r15, "x", "maxPool"), a = 1, i = s, p = false; + s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), $(gr(e, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`), Lt("maxPool", o, n); + let u = { x: i }, c = { filterSize: t8, strides: e, 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 Ad = N({ maxPool_: jK }); -function XK(r, t8 = [1, 1, 1], e, o, n, s = "NDHWC") { - let a = v(r, "x", "maxPool3d"), i = a, p = false; - a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Bt("maxPool3d", o, n); +var Rd = N({ maxPool_: jK }); +function XK(r15, t8 = [1, 1, 1], e, o, n, s = "NDHWC") { + let a = v(r15, "x", "maxPool3d"), i = a, p = false; + a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Lt("maxPool3d", o, n); let u = { x: i }, c = { filterSize: t8, strides: e, 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 E2 = N({ maxPool3d_: XK }); -function YK(r, t8, e, o, n = false) { - let a = { x: v(r, "x", "maxPoolWithArgmax") }, i = { filterSize: t8, strides: e, pad: o, includeBatchInIndex: n }, p = T.runKernel(ua, a, i); +var R2 = N({ maxPool3d_: XK }); +function YK(r15, t8, e, o, n = false) { + let a = { x: v(r15, "x", "maxPoolWithArgmax") }, i = { filterSize: t8, strides: e, pad: o, includeBatchInIndex: n }, p = T.runKernel(ua, a, i); return { result: p[0], indexes: p[1] }; } -var R2 = N({ maxPoolWithArgmax_: YK }); -function QK(r, t8) { - let e = v(r, "a", "maximum"), o = v(t8, "b", "maximum"); +var D2 = N({ maxPoolWithArgmax_: YK }); +function QK(r15, t8) { + let e = v(r15, "a", "maximum"), o = v(t8, "b", "maximum"); [e, o] = Oe(e, o), e.dtype === "bool" && (e = We(e, "int32"), o = We(o, "int32")), rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(Wn, n); + return T.runKernel(Vn, n); } -var Fd = N({ maximum_: QK }); -function ZK(r, t8 = null, e = false) { - let n = { x: v(r, "x", "mean") }, s = { axis: t8, keepDims: e }; - return T.runKernel(Gn, n, s); +var Dd = N({ maximum_: QK }); +function ZK(r15, t8 = null, e = false) { + let n = { x: v(r15, "x", "mean") }, s = { axis: t8, keepDims: e }; + return T.runKernel(Un, n, s); } -var Xu = N({ mean_: ZK }); -function Gr(r, t8 = "float32") { - if (wt(r), t8 === "complex64") { - let o = Gr(r, "float32"), n = Gr(r, "float32"); - return Er(o, n); +var Wu = N({ mean_: ZK }); +function Ur(r15, t8 = "float32") { + if (Ct(r15), t8 === "complex64") { + let o = Ur(r15, "float32"), n = Ur(r15, "float32"); + return $r(o, n); } - let e = Yp(He(r), t8); - return T.makeTensor(e, r, t8); + let e = Wp(He(r15), t8); + return T.makeTensor(e, r15, t8); } -function Da(r, t8 = "float32") { - if (wt(r), t8 === "complex64") { - let o = Da(r, "float32"), n = Gr(r, "float32"); - return Er(o, n); +function Da(r15, t8 = "float32") { + if (Ct(r15), t8 === "complex64") { + let o = Da(r15, "float32"), n = Ur(r15, "float32"); + return $r(o, n); } - let e = fl(He(r), t8); - return T.makeTensor(e, r, t8); + let e = cl(He(r15), t8); + return T.makeTensor(e, r15, t8); } -function D2(r, t8, { indexing: e = "xy" } = {}) { +function A2(r15, t8, { indexing: e = "xy" } = {}) { if (e !== "xy" && e !== "ij") throw new TypeError(`${e} is not a valid third argument to meshgrid`); - if (r === void 0) + if (r15 === void 0) return []; - let o = v(r, "x", "meshgrid", r instanceof ut ? r.dtype : "float32"); + let o = v(r15, "x", "meshgrid", r15 instanceof mt ? r15.dtype : "float32"); if (t8 === void 0) return [o]; - let n = v(t8, "y", "meshgrid", t8 instanceof ut ? t8.dtype : "float32"), s = He(o.shape), a = He(n.shape); + let n = v(t8, "y", "meshgrid", t8 instanceof mt ? t8.dtype : "float32"), s = He(o.shape), a = He(n.shape); return e === "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 JK(r, t8) { - let e = v(r, "a", "minimum"), o = v(t8, "b", "minimum"); +function JK(r15, t8) { + let e = v(r15, "a", "minimum"), o = v(t8, "b", "minimum"); [e, o] = Oe(e, o), e.dtype === "bool" && (e = We(e, "int32"), o = We(o, "int32")), rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(Kn, n); + return T.runKernel(Hn, n); } -var Yu = N({ minimum_: JK }); -function eq(r, t8, e) { +var Uu = N({ minimum_: JK }); +function eq(r15, t8, e) { $(e === "reflect" || e === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`); - let o = v(r, "x", "mirrorPad"); + let o = v(r15, "x", "mirrorPad"); if (o.rank === 0) throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad"); $(t8.length === o.rank, () => `Padding doesn't match input. Must be ${o.rank}. Got ${t8.length}.`); @@ -6731,28 +6732,28 @@ function eq(r, t8, e) { for (let i = 0; i < o.rank; i++) $(t8[i].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), $(t8[i][0] >= 0 && t8[i][0] <= o.shape[i] - n && t8[i][1] >= 0 && t8[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: t8, mode: e }, a = { x: o }; - return T.runKernel(qn, a, s); + return T.runKernel(Kn, a, s); } -var A2 = N({ mirrorPad_: eq }); -function tq(r, t8) { - let e = v(r, "a", "mod"), o = v(t8, "b", "mod"); +var F2 = N({ mirrorPad_: eq }); +function tq(r15, t8) { + let e = v(r15, "a", "mod"), o = v(t8, "b", "mod"); [e, o] = Oe(e, o); let n = { a: e, b: o }; - return T.runKernel(jn, n); + return T.runKernel(qn, n); } -var F2 = N({ mod_: tq }); -function rq(r, t8 = null, e = false) { - r = v(r, "x", "moments"); - let o = Ei(t8, r.shape), n = Xu(r, o, e), s = n.shape; - e || (s = ii(n.shape, o)); - let a = er(Te(We(r, "float32"), W(n, s))), i = Xu(a, o, e); +var P2 = N({ mod_: tq }); +function rq(r15, t8 = null, e = false) { + r15 = v(r15, "x", "moments"); + let o = Ti(t8, r15.shape), n = Wu(r15, o, e), s = n.shape; + e || (s = ai(n.shape, o)); + let a = Zt(Te(We(r15, "float32"), W(n, s))), i = Wu(a, o, e); return { mean: n, variance: i }; } -var P2 = N({ moments_: rq }); -function oq(r, t8, e, o) { - let n = v(t8, "data", "multiRNNCell"), s = si(e, "c", "multiRNNCell"), a = si(o, "h", "multiRNNCell"), i = n, p = []; - for (let l = 0; l < r.length; l++) { - let m = r[l](i, s[l], a[l]); +var O2 = N({ moments_: rq }); +function oq(r15, t8, e, o) { + let n = v(t8, "data", "multiRNNCell"), s = ni(e, "c", "multiRNNCell"), a = ni(o, "h", "multiRNNCell"), i = n, p = []; + for (let l = 0; l < r15.length; l++) { + let m = r15[l](i, s[l], a[l]); p.push(m[0]), p.push(m[1]), i = m[1]; } let u = [], c = []; @@ -6760,123 +6761,123 @@ function oq(r, t8, e, o) { u.push(p[l]), c.push(p[l + 1]); return [u, c]; } -var O2 = N({ multiRNNCell_: oq }); -function nq(r, t8, e, o = false) { - let n = v(r, "logits", "multinomial"), s = n.size, a = n.rank; +var M2 = N({ multiRNNCell_: oq }); +function nq(r15, t8, e, 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}`); e = e || Math.random(); - let p = { logits: a === 1 ? W(n, [1, -1]) : n }, u = { numSamples: t8, seed: e, normalized: o }, c = T.runKernel(Xn, p, u); + let p = { logits: a === 1 ? W(n, [1, -1]) : n }, u = { numSamples: t8, seed: e, normalized: o }, c = T.runKernel(jn, p, u); return a === 1 ? W(c, [c.size]) : c; } -var M2 = N({ multinomial_: nq }); -function sq(r, t8) { - let e = v(r, "a", "notEqual", "string_or_numeric"), o = v(t8, "b", "notEqual", "string_or_numeric"); +var L2 = N({ multinomial_: nq }); +function sq(r15, t8) { + let e = v(r15, "a", "notEqual", "string_or_numeric"), o = v(t8, "b", "notEqual", "string_or_numeric"); [e, o] = Oe(e, o), rt(e.shape, o.shape); let n = { a: e, b: o }; - return T.runKernel(Qn, n); + return T.runKernel(Yn, n); } -var Pd = N({ notEqual_: sq }); -function aq(r, t8, e = 1, o = 0, n = "int32") { +var Ad = N({ notEqual_: sq }); +function aq(r15, t8, e = 1, o = 0, n = "int32") { if (t8 < 2) throw new Error(`Error in oneHot: depth must be >=2, but it is ${t8}`); - let a = { indices: v(r, "indices", "oneHot", "int32") }, i = { dtype: n, depth: t8, onValue: e, offValue: o }; - return T.runKernel(es, a, i); + let a = { indices: v(r15, "indices", "oneHot", "int32") }, i = { dtype: n, depth: t8, onValue: e, offValue: o }; + return T.runKernel(Jn, a, i); } -var El = N({ oneHot_: aq }); -function iq(r) { - let e = { x: v(r, "x", "onesLike") }; +var Tl = N({ oneHot_: aq }); +function iq(r15) { + let e = { x: v(r15, "x", "onesLike") }; return T.runKernel(ca, e); } -var L2 = N({ onesLike_: iq }); -function uq(r, t8) { - let e = v(r, "v1", "outerProduct"), o = v(t8, "v2", "outerProduct"); +var B2 = N({ onesLike_: iq }); +function uq(r15, t8) { + let e = v(r15, "v1", "outerProduct"), o = v(t8, "v2", "outerProduct"); $(e.rank === 1 && o.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${o.rank}.`); let n = W(e, [-1, 1]), s = W(o, [1, -1]); return Ze(n, s); } -var B2 = N({ outerProduct_: uq }); -function pq(r, t8, e = 0) { - let o = v(r, "x", "pad"); +var z2 = N({ outerProduct_: uq }); +function pq(r15, t8, e = 0) { + let o = v(r15, "x", "pad"); if (o.rank === 0) throw new Error("pad(scalar) is not defined. Pass non-scalar to pad"); let n = { paddings: t8, constantValue: e }, s = { x: o }; - return T.runKernel(ts, s, n); + return T.runKernel(es, s, n); } var Aa = N({ pad_: pq }); -function cq(r, t8, e = 0) { - return $(t8.length === 2, () => "Invalid number of paddings. Must be length of 2."), Aa(r, [t8], e); +function cq(r15, t8, e = 0) { + return $(t8.length === 2, () => "Invalid number of paddings. Must be length of 2."), Aa(r15, [t8], e); } -var z2 = N({ pad1d_: cq }); -function lq(r, t8, e = 0) { - return $(t8.length === 2 && t8[0].length === 2 && t8[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r, t8, e); +var V2 = N({ pad1d_: cq }); +function lq(r15, t8, e = 0) { + return $(t8.length === 2 && t8[0].length === 2 && t8[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, t8, e); } -var V2 = N({ pad2d_: lq }); -function mq(r, t8, e = 0) { - return $(t8.length === 3 && t8[0].length === 2 && t8[1].length === 2 && t8[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r, t8, e); +var W2 = N({ pad2d_: lq }); +function mq(r15, t8, e = 0) { + return $(t8.length === 3 && t8[0].length === 2 && t8[1].length === 2 && t8[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, t8, e); } -var W2 = N({ pad3d_: mq }); -function dq(r, t8, e = 0) { - return $(t8.length === 4 && t8[0].length === 2 && t8[1].length === 2 && t8[2].length === 2 && t8[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r, t8, e); +var U2 = N({ pad3d_: mq }); +function dq(r15, t8, e = 0) { + return $(t8.length === 4 && t8[0].length === 2 && t8[1].length === 2 && t8[2].length === 2 && t8[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, t8, e); } -var U2 = N({ pad4d_: dq }); -function fq(r, t8, e) { - let o = v(r, "x", "spaceToBatchND"); +var G2 = N({ pad4d_: dq }); +function fq(r15, t8, e) { + let o = v(r15, "x", "spaceToBatchND"); $(o.rank >= 1 + t8.length, () => `input rank ${o.rank} should be > than [blockShape] ${t8.length}`), $(e.length === t8.length, () => `paddings.shape[0] ${e.length} must be equal to [blockShape] ${t8.length}`), $(o.shape.reduce((a, i, p) => p > 0 && p <= t8.length ? a && (i + e[p - 1][0] + e[p - 1][1]) % t8[p - 1] === 0 : a, true), () => `input spatial dimensions ${o.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t8.toString()}`); let n = { x: o }, s = { blockShape: t8, paddings: e }; return T.runKernel(ga, n, s); } -var Od = N({ spaceToBatchND_: fq }); -function hq(r, t8, e, o, n, s, a) { +var Fd = N({ spaceToBatchND_: fq }); +function hq(r15, t8, e, o, n, s, a) { n == null && (n = [1, 1]), s == null && (s = 1), o === 0 && (o = "valid"); - let i = v(r, "x", "maxPool"), p = i, u = false; - i.rank === 3 && (u = true, p = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(xr(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); + let i = v(r15, "x", "maxPool"), p = i, u = false; + i.rank === 3 && (u = true, p = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(gr(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); let c = Mw(p.shape, t8, s, n, o), l = [c.dilationHeight, c.dilationWidth], m; o === "same" ? m = xq([c.filterHeight, c.filterWidth], l) : m = [[0, 0], [0, 0]]; - let d = l[0] === 1 && l[1] === 1, [f, h] = gq([c.inHeight, c.inWidth], l, m), g = d ? o : "valid", x = d ? p : Od(p, l, f), C = (e === "avg" ? () => fd(x, t8, s, g, a) : () => Ad(x, t8, s, g, a))(), S = d ? C : hd(C, l, h); + let d = l[0] === 1 && l[1] === 1, [f, h] = gq([c.inHeight, c.inWidth], l, m), g = d ? o : "valid", x = d ? p : Fd(p, l, f), C = (e === "avg" ? () => md(x, t8, s, g, a) : () => Rd(x, t8, s, g, a))(), S = d ? C : dd(C, l, h); return u ? W(S, [S.shape[1], S.shape[2], S.shape[3]]) : S; } -function gq(r, t8, e) { - let o = e.map((c) => c[0]), n = e.map((c) => c[1]), s = r.concat(o, n), a = t8.map((c, l) => (c - s[l] % c) % c), i = n.map((c, l) => c + a[l]), p = t8.map((c, l) => [o[l], i[l]]), u = t8.map((c, l) => [0, a[l]]); +function gq(r15, t8, e) { + let o = e.map((c) => c[0]), n = e.map((c) => c[1]), s = r15.concat(o, n), a = t8.map((c, l) => (c - s[l] % c) % c), i = n.map((c, l) => c + a[l]), p = t8.map((c, l) => [o[l], i[l]]), u = t8.map((c, l) => [0, a[l]]); return [p, u]; } -function xq(r, t8) { - let o = r.map((a, i) => a + (a - 1) * (t8[i] - 1)).map((a) => a - 1), n = o.map((a) => Math.floor(a / 2)), s = o.map((a, i) => a - n[i]); +function xq(r15, t8) { + let o = r15.map((a, i) => a + (a - 1) * (t8[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 G2 = N({ pool_: hq }); -function yq(r, t8) { - let e = v(r, "x", "prelu"), o = v(t8, "alpha", "prelu"), n = { x: e, alpha: o }; - return T.runKernel(os, n); +var H2 = N({ pool_: hq }); +function yq(r15, t8) { + let e = v(r15, "x", "prelu"), o = v(t8, "alpha", "prelu"), n = { x: e, alpha: o }; + return T.runKernel(rs, n); } -var Md = N({ prelu_: yq }); -function bq(r, t8 = null, e = false) { - let o = v(r, "x", "prod"); +var Pd = N({ prelu_: yq }); +function bq(r15, t8 = null, e = false) { + let o = v(r15, "x", "prod"); o.dtype === "bool" && (o = We(o, "int32")); let n = { x: o }, s = { axis: t8, keepDims: e }; - return T.runKernel(ns, n, s); + return T.runKernel(os, n, s); } -var H2 = N({ prod_: bq }); -function Cq(r, t8, e, o) { - let n = r.map((c, l) => v(c, `tensors${l}`, "raggedGather", "int32")), s = v(t8, "paramsDenseValues", "raggedGather"), a = v(e, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = T.runKernel(Qp, i, p); +var K2 = N({ prod_: bq }); +function Cq(r15, t8, e, o) { + let n = r15.map((c, l) => v(c, `tensors${l}`, "raggedGather", "int32")), s = v(t8, "paramsDenseValues", "raggedGather"), a = v(e, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = T.runKernel(Up, i, p); return { outputNestedSplits: u.slice(0, u.length - 1), outputDenseValues: u[u.length - 1] }; } -var K2 = N({ raggedGather_: Cq }); -function wq(r, t8, e) { - let o = v(r, "starts", "raggedRange"), n = v(t8, "limits", "raggedRange", o.dtype), s = v(e, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = T.runKernel(Zp, a); +var q2 = N({ raggedGather_: Cq }); +function wq(r15, t8, e) { + let o = v(r15, "starts", "raggedRange"), n = v(t8, "limits", "raggedRange", o.dtype), s = v(e, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = T.runKernel(Gp, a); return { rtNestedSplits: i[0], rtDenseValues: i[1] }; } -var q2 = N({ raggedRange_: wq }); -function Sq(r, t8, e, o, n) { - let s = v(r, "shape", "raggedTensorToTensor", "int32"), a = v(t8, "values", "raggedTensorToTensor"), i = v(e, "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(Jp, u, c); +var j2 = N({ raggedRange_: wq }); +function Sq(r15, t8, e, o, n) { + let s = v(r15, "shape", "raggedTensorToTensor", "int32"), a = v(t8, "values", "raggedTensorToTensor"), i = v(e, "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(Hp, u, c); } -var j2 = N({ raggedTensorToTensor_: Sq }); -function Iq(r, t8, e) { - wt(r); - let o = He(r), n = null; +var X2 = N({ raggedTensorToTensor_: Sq }); +function Iq(r15, t8, e) { + Ct(r15); + let o = He(r15), n = null; if (e == null || e === "float32") n = new Float32Array(o); else if (e === "int32") @@ -6887,33 +6888,33 @@ function Iq(r, t8, e) { throw new Error(`Unknown data type ${e}`); for (let s = 0; s < o; s++) n[s] = t8(); - return T.makeTensor(n, r, e); + return T.makeTensor(n, r15, e); } -var X2 = N({ rand_: Iq }); -var Wd = Kp(qw()); -var h1 = {}; -qe(h1, { TEST_EPSILON_FLOAT16: () => m1, createVideoElement: () => Oq, encodeStrings: () => f1, expectArrayBuffersEqual: () => Pq, expectArraysClose: () => Rq, expectArraysEqual: () => Aq, expectNumbersClose: () => d1, expectPromiseToFail: () => Dq, expectValuesInRange: () => Fq, play: () => Mq, testEpsilon: () => Bd }); +var Y2 = N({ rand_: Iq }); +var zd = Lp(qw()); +var g1 = {}; +qe(g1, { TEST_EPSILON_FLOAT16: () => d1, createVideoElement: () => Oq, encodeStrings: () => h1, expectArrayBuffersEqual: () => Pq, expectArraysClose: () => Rq, expectArraysEqual: () => Aq, expectNumbersClose: () => f1, expectPromiseToFail: () => Dq, expectValuesInRange: () => Fq, play: () => Mq, testEpsilon: () => Md }); var Eq = 1e-3; -var m1 = 0.1; -function Rq(r, t8, e) { - return e == null && (e = Bd()), jw(r, t8, (o, n) => Xw(o, n, e)); +var d1 = 0.1; +function Rq(r15, t8, e) { + return e == null && (e = Md()), jw(r15, t8, (o, n) => Xw(o, n, e)); } -function Bd() { - return T.backend.floatPrecision() === 32 ? Eq : m1; +function Md() { + return T.backend.floatPrecision() === 32 ? Eq : d1; } -function jw(r, t8, e) { +function jw(r15, t8, e) { let o = true; - if ((Ot(r) || Ot(t8)) && (o = false), Ot(r) && Ot(t8) && (o = true), o) { - let a = r.constructor.name, i = t8.constructor.name; + if ((Pt(r15) || Pt(t8)) && (o = false), Pt(r15) && Pt(t8) && (o = true), o) { + let a = r15.constructor.name, i = t8.constructor.name; if (a !== i) throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`); } - if (Array.isArray(r) && Array.isArray(t8)) { - let a = ir(r), i = ir(t8); - if (!Cr(a, i)) + if (Array.isArray(r15) && Array.isArray(t8)) { + let a = sr(r15), i = sr(t8); + if (!br(a, i)) throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`); } - let n = Ot(r) ? r : Ps(r), s = Ot(t8) ? t8 : Ps(t8); + let n = Pt(r15) ? r15 : Fs(r15), s = Pt(t8) ? t8 : Fs(t8); if (n.length !== s.length) throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. Actual: ${n}. @@ -6927,57 +6928,57 @@ Expected: ${s}.`); } typeof expect != "undefined" && expect().nothing(); } -function Dq(r, t8) { - r().then(() => t8.fail(), () => t8()), typeof expect != "undefined" && expect().nothing(); +function Dq(r15, t8) { + r15().then(() => t8.fail(), () => t8()), typeof expect != "undefined" && expect().nothing(); } -function Aq(r, t8) { +function Aq(r15, t8) { let e = typeof t8 == "string" || typeof t8 == "number" || typeof t8 == "boolean" ? [t8] : t8; - return Vo(r) || Vo(r[0]) || Vo(t8) || Vo(t8[0]) ? jw(r, e, (o, n) => o == n) : jw(r, t8, (o, n) => Xw(o, n, 0)); + return zo(r15) || zo(r15[0]) || zo(t8) || zo(t8[0]) ? jw(r15, e, (o, n) => o == n) : jw(r15, t8, (o, n) => Xw(o, n, 0)); } -function d1(r, t8, e) { - if (e == null && (e = Bd()), !Xw(r, t8, e)) - throw new Error(`Numbers differ: actual === ${r}, expected === ${t8}`); +function f1(r15, t8, e) { + if (e == null && (e = Md()), !Xw(r15, t8, e)) + throw new Error(`Numbers differ: actual === ${r15}, expected === ${t8}`); typeof expect != "undefined" && expect().nothing(); } -function Xw(r, t8, e) { - return !isFinite(r) && !isFinite(t8) ? true : !(isNaN(r) || isNaN(t8) || Math.abs(r - t8) > e); +function Xw(r15, t8, e) { + return !isFinite(r15) && !isFinite(t8) ? true : !(isNaN(r15) || isNaN(t8) || Math.abs(r15 - t8) > e); } -function Fq(r, t8, e) { - for (let o = 0; o < r.length; o++) - if (r[o] < t8 || r[o] > e) - throw new Error(`Value out of range:${r[o]} low: ${t8}, high: ${e}`); +function Fq(r15, t8, e) { + for (let o = 0; o < r15.length; o++) + if (r15[o] < t8 || r15[o] > e) + throw new Error(`Value out of range:${r15[o]} low: ${t8}, high: ${e}`); } -function Pq(r, t8) { - let e = new Float32Array(r), o = new Float32Array(t8); +function Pq(r15, t8) { + let e = new Float32Array(r15), o = new Float32Array(t8); if (e.length !== o.length) throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${e.length}`); for (let n = 0; n < o.length; n++) if (e[n] !== o[n]) throw new Error(`Expected ArrayBuffer value at ${n} to be ${o[n]} but got ${e[n]} instead`); } -function f1(r) { - for (let t8 = 0; t8 < r.length; t8++) { - let e = r[t8]; - Array.isArray(e) ? f1(e) : r[t8] = tu(e); +function h1(r15) { + for (let t8 = 0; t8 < r15.length; t8++) { + let e = r15[t8]; + Array.isArray(e) ? h1(e) : r15[t8] = Zi(e); } - return r; + return r15; } -function Oq(r) { +function Oq(r15) { let t8 = document.createElement("video"); - return "playsInline" in t8 && (t8.playsInline = true), t8.muted = true, t8.loop = true, t8.style.position = "fixed", t8.style.left = "0px", t8.style.top = "0px", t8.preload = "auto", t8.appendChild(r), new Promise((e) => { + return "playsInline" in t8 && (t8.playsInline = true), t8.muted = true, t8.loop = true, t8.style.position = "fixed", t8.style.left = "0px", t8.style.top = "0px", t8.preload = "auto", t8.appendChild(r15), new Promise((e) => { t8.addEventListener("loadeddata", (o) => e(t8)), t8.load(); }); } -async function Mq(r) { - await r.play(), "requestVideoFrameCallback" in r && await new Promise((t8) => { - r.requestVideoFrameCallback(t8); +async function Mq(r15) { + await r15.play(), "requestVideoFrameCallback" in r15 && await new Promise((t8) => { + r15.requestVideoFrameCallback(t8); }); } -var Zu = class { +var Hu = class { constructor(t8, e, o, n, s) { this.mean = t8, this.stdDev = e, 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 = Wd.alea(a.toString()); + this.random = zd.alea(a.toString()); } nextValue() { if (!isNaN(this.nextVal)) { @@ -7002,11 +7003,11 @@ var Zu = class { return t8 <= this.upper && t8 >= this.lower; } }; -var zd = class { +var Ld = class { constructor(t8, e, o, n) { this.alpha = t8, this.beta = 1 / e, this.dtype = o; let s = n || Math.random(); - this.randu = Wd.alea(s.toString()), this.randn = new Zu(0, 1, o, false, this.randu()), t8 < 1 ? this.d = t8 + 2 / 3 : this.d = t8 - 1 / 3, this.c = 1 / Math.sqrt(9 * this.d); + this.randu = zd.alea(s.toString()), this.randn = new Hu(0, 1, o, false, this.randu()), t8 < 1 ? this.d = t8 + 2 / 3 : this.d = t8 - 1 / 3, this.c = 1 / Math.sqrt(9 * this.d); } nextValue() { let t8, e, o, n, s, a; @@ -7023,11 +7024,11 @@ var zd = class { return this.dtype === "float32" ? t8 : Math.round(t8); } }; -var Vd = class { +var Bd = class { constructor(t8 = 0, e = 1, o, n) { if (this.canReturnFloat = () => this.dtype == null || this.dtype === "float32", this.min = t8, this.range = e - t8, 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 ${t8} - ${e} <= 1 and dtype is not float`); - this.random = Wd.alea(n); + this.random = zd.alea(n); } convertValue(t8) { return this.canReturnFloat() ? t8 : Math.round(t8); @@ -7036,121 +7037,121 @@ var Vd = class { return this.convertValue(this.min + this.range * this.random()); } }; -function Lq(r, t8, e = 1, o = "float32", n) { - if (wt(r), e == null && (e = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") +function Lq(r15, t8, e = 1, o = "float32", n) { + if (Ct(r15), e == null && (e = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") throw new Error(`Unsupported data type ${o}`); - let s = new zd(t8, e, o, n), a = me(r, o); + let s = new Ld(t8, e, o, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var g1 = N({ randomGamma_: Lq }); -function Bq(r, t8 = 0, e = 1, o, n) { - if (wt(r), o != null && o === "bool") +var x1 = N({ randomGamma_: Lq }); +function Bq(r15, t8 = 0, e = 1, o, n) { + if (Ct(r15), o != null && o === "bool") throw new Error(`Unsupported data type ${o}`); - let s = new Zu(t8, e, o, false, n), a = me(r, o); + let s = new Hu(t8, e, o, false, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var Ud = N({ randomNormal_: Bq }); -function zq(r, t8, e) { +var Vd = N({ randomNormal_: Bq }); +function zq(r15, t8, e) { if (t8 != null && t8 === "bool") throw new Error(`Unsupported data type ${t8}`); - return Ud(r, 0, 1, t8, e); + return Vd(r15, 0, 1, t8, e); } -var x1 = N({ randomStandardNormal_: zq }); -function Vq(r, t8 = 0, e = 1, o = "float32", n) { - wt(r); - let s = me(r, o), a = new Vd(t8, e, null, n); +var y1 = N({ randomStandardNormal_: zq }); +function Vq(r15, t8 = 0, e = 1, o = "float32", n) { + Ct(r15); + let s = me(r15, o), a = new Bd(t8, e, null, n); for (let i = 0; i < s.values.length; i++) s.values[i] = a.nextValue(); return s.toTensor(); } -var dc = N({ randomUniform_: Vq }); -function Wq(r, t8, e, o) { - return dc(r, t8, e, "int32", o); +var sc = N({ randomUniform_: Vq }); +function Wq(r15, t8, e, o) { + return sc(r15, t8, e, "int32", o); } -var y1 = N({ randomUniformInt_: Wq }); -function mu(r, t8, e = 1, o = "float32") { +var b1 = N({ randomUniformInt_: Wq }); +function uu(r15, t8, e = 1, o = "float32") { if (e === 0) throw new Error("Cannot have a step of zero"); - let n = { start: r, stop: t8, step: e, dtype: o }; + let n = { start: r15, stop: t8, step: e, dtype: o }; return T.runKernel(ma, {}, n); } -function Uq(r) { - let e = { input: v(r, "input", "real") }; - return T.runKernel(qi, e); +function Uq(r15) { + let e = { input: v(r15, "input", "real") }; + return T.runKernel(Gi, e); } -var ci = N({ real_: Uq }); -function Gq(r) { - let e = { x: v(r, "x", "reciprocal") }; +var pi = N({ real_: Uq }); +function Gq(r15) { + let e = { x: v(r15, "x", "reciprocal") }; + return T.runKernel(ns, e); +} +var C1 = N({ reciprocal_: Gq }); +function Hq(r15) { + let e = { x: v(r15, "x", "relu") }; return T.runKernel(ss, e); } -var b1 = N({ reciprocal_: Gq }); -function Hq(r) { - let e = { x: v(r, "x", "relu") }; - return T.runKernel(as, e); +var pu = N({ relu_: Hq }); +function Kq(r15) { + let e = { x: v(r15, "x", "relu6") }; + return T.runKernel(us, e); } -var du = N({ relu_: Hq }); -function Kq(r) { - let e = { x: v(r, "x", "relu6") }; - return T.runKernel(ps, e); +var Wd = N({ relu6_: Kq }); +function qq(r15, t8) { + let o = { x: v(r15, "x", "reverse") }, n = { dims: t8 }; + return T.runKernel(ps, o, n); } -var Gd = N({ relu6_: Kq }); -function qq(r, t8) { - let o = { x: v(r, "x", "reverse") }, n = { dims: t8 }; - return T.runKernel(cs, o, n); +var lo = N({ reverse_: qq }); +function jq(r15) { + let t8 = v(r15, "x", "reverse"); + return $(t8.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${t8.rank}.`), lo(t8, 0); } -var mo = N({ reverse_: qq }); -function jq(r) { - let t8 = v(r, "x", "reverse"); - return $(t8.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${t8.rank}.`), mo(t8, 0); +var w1 = N({ reverse1d_: jq }); +function Xq(r15, t8) { + let e = v(r15, "x", "reverse"); + return $(e.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`), lo(e, t8); } -var C1 = N({ reverse1d_: jq }); -function Xq(r, t8) { - let e = v(r, "x", "reverse"); - return $(e.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`), mo(e, t8); +var S1 = N({ reverse2d_: Xq }); +function Yq(r15, t8) { + let e = v(r15, "x", "reverse"); + return $(e.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`), lo(e, t8); } -var w1 = N({ reverse2d_: Xq }); -function Yq(r, t8) { - let e = v(r, "x", "reverse"); - return $(e.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`), mo(e, t8); +var I1 = N({ reverse3d_: Yq }); +function Qq(r15, t8) { + let e = v(r15, "x", "reverse"); + return $(e.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`), lo(e, t8); } -var S1 = N({ reverse3d_: Yq }); -function Qq(r, t8) { - let e = v(r, "x", "reverse"); - return $(e.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`), mo(e, t8); +var v1 = N({ reverse4d_: Qq }); +function Zq(r15) { + let e = { x: v(r15, "x", "round") }; + return T.runKernel(cs, e); } -var I1 = N({ reverse4d_: Qq }); -function Zq(r) { - let e = { x: v(r, "x", "round") }; +var Ud = N({ round_: Zq }); +function Jq(r15) { + let e = { x: v(r15, "x", "rsqrt", "float32") }; return T.runKernel(ls, e); } -var Hd = N({ round_: Zq }); -function Jq(r) { - let e = { x: v(r, "x", "rsqrt", "float32") }; - return T.runKernel(ms, e); +var k1 = N({ rsqrt_: Jq }); +function e6(r15) { + let e = { x: v(r15, "x", "selu") }; + return T.runKernel(hs, e); } -var v1 = N({ rsqrt_: Jq }); -function e6(r) { - let e = { x: v(r, "x", "selu") }; - return T.runKernel(gs, e); -} -var k1 = N({ selu_: e6 }); -function t6(r, t8, e, o, n, s = [1, 1], a = "NHWC") { - let i = v(r, "x", "separableConv2d"), p = v(t8, "depthwiseFilter", "separableConv2d"), u = v(e, "pointwiseFilter", "separableConv2d"), c = i, l = false; +var N1 = N({ selu_: e6 }); +function t6(r15, t8, e, o, n, s = [1, 1], a = "NHWC") { + let i = v(r15, "x", "separableConv2d"), p = v(t8, "depthwiseFilter", "separableConv2d"), u = v(e, "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"); $(c.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`), $(p.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`), $(u.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`), $(u.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`), $(u.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`); let m = p.shape[2], d = p.shape[3]; $(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 = lc(c, p, o, n, a, s), g = uu(f, u, 1, "valid", a); + let f = oc(c, p, o, n, a, s), g = nu(f, u, 1, "valid", a); return l ? W(g, [g.shape[1], g.shape[2], g.shape[3]]) : g; } -var N1 = N({ separableConv2d_: t6 }); -async function r6(r, t8) { - let e = v(r, "x", "setdiff1d"), o = v(t8, "y", "setdiff1d"); +var T1 = N({ separableConv2d_: t6 }); +async function r6(r15, t8) { + let e = v(r15, "x", "setdiff1d"), o = v(t8, "y", "setdiff1d"); $(e.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${e.dtype}) and y (${o.dtype}).`), $(e.rank === 1, () => `x should be 1D tensor, but got x (${e.shape}).`), $(o.rank === 1, () => `y should be 1D tensor, but got y (${o.shape}).`); let n = await e.data(), s = await o.data(), a = new Set(s), i = 0; for (let c = 0; c < n.length; c++) @@ -7160,211 +7161,211 @@ async function r6(r, t8) { a.has(n[c]) || (p.values[l] = n[c], u.values[l] = c, l++); return [p.toTensor(), u.toTensor()]; } -var T1 = r6; -function o6(r) { - let e = { x: v(r, "x", "sign") }; - return T.runKernel(bs, e); -} -var _1 = N({ sign_: o6 }); -function n6(r) { - let e = { x: v(r, "x", "sin", "float32") }; - return T.runKernel(xs, e); -} -var $1 = N({ sin_: n6 }); -function s6(r) { - let e = { x: v(r, "x", "sinh") }; +var _1 = r6; +function o6(r15) { + let e = { x: v(r15, "x", "sign") }; return T.runKernel(ys, e); } -var E1 = N({ sinh_: s6 }); -function a6(r, t8, e) { - let o = v(r, "x", "slice1d"); +var $1 = N({ sign_: o6 }); +function n6(r15) { + let e = { x: v(r15, "x", "sin", "float32") }; + return T.runKernel(gs, e); +} +var E1 = N({ sin_: n6 }); +function s6(r15) { + let e = { x: v(r15, "x", "sinh") }; + return T.runKernel(xs, e); +} +var R1 = N({ sinh_: s6 }); +function a6(r15, t8, e) { + let o = v(r15, "x", "slice1d"); return $(o.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`), Xe(o, [t8], [e]); } -var R1 = N({ slice1d_: a6 }); -function i6(r, t8, e) { - let o = v(r, "x", "slice2d"); +var D1 = N({ slice1d_: a6 }); +function i6(r15, t8, e) { + let o = v(r15, "x", "slice2d"); return $(o.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`), Xe(o, t8, e); } -var D1 = N({ slice2d_: i6 }); -function u6(r, t8, e) { - let o = v(r, "x", "slice3d"); +var A1 = N({ slice2d_: i6 }); +function u6(r15, t8, e) { + let o = v(r15, "x", "slice3d"); return $(o.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`), Xe(o, t8, e); } -var A1 = N({ slice3d_: u6 }); -function p6(r, t8, e) { - let o = v(r, "x", "slice4d"); +var F1 = N({ slice3d_: u6 }); +function p6(r15, t8, e) { + let o = v(r15, "x", "slice4d"); return $(o.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`), Xe(o, t8, e); } -var F1 = N({ slice4d_: p6 }); -function c6(r, t8 = -1) { - let e = v(r, "logits", "softmax", "float32"); +var P1 = N({ slice4d_: p6 }); +function c6(r15, t8 = -1) { + let e = v(r15, "logits", "softmax", "float32"); if (t8 === -1 && (t8 = e.rank - 1), t8 !== e.rank - 1) throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t8}`); let o = { logits: e }, n = { dim: t8 }; - return T.runKernel(vs, o, n); + return T.runKernel(Is, o, n); } -var P1 = N({ softmax_: c6 }); -function l6(r) { - $(r.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`); - let t8 = { input: r }; - return T.runKernel(Wi, t8); +var O1 = N({ softmax_: c6 }); +function l6(r15) { + $(r15.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r15.dtype}.`); + let t8 = { input: r15 }; + return T.runKernel(Bi, t8); } -var fc = N({ fft_: l6 }); -function m6(r) { - $(r.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`); - let t8 = { input: r }; - return T.runKernel(Ui, t8); +var ac = N({ fft_: l6 }); +function m6(r15) { + $(r15.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r15.dtype}.`); + let t8 = { input: r15 }; + return T.runKernel(zi, t8); } -var Ju = N({ ifft_: m6 }); -function d6(r) { - let t8 = r.shape[r.shape.length - 1], e = r.size / t8, o; +var Ku = N({ ifft_: m6 }); +function d6(r15) { + let t8 = r15.shape[r15.shape.length - 1], e = r15.size / t8, o; if (t8 <= 2) { - let n = W(r, [e, t8]); - o = Ju(n); + let n = W(r15, [e, t8]); + o = Ku(n); } else { - let n = [e, 2 * (t8 - 1)], s = W(ci(r), [e, t8]), a = W(lu(r), [e, t8]), i = mo(Xe(s, [0, 1], [e, t8 - 2]), 1), p = se(mo(Xe(a, [0, 1], [e, t8 - 2]), 1), ke(-1)), u = bt([s, i], 1), c = bt([a, p], 1), l = W(Er(u, c), [n[0], n[1]]); - o = Ju(l); + let n = [e, 2 * (t8 - 1)], s = W(pi(r15), [e, t8]), a = W(iu(r15), [e, t8]), i = lo(Xe(s, [0, 1], [e, t8 - 2]), 1), p = se(lo(Xe(a, [0, 1], [e, t8 - 2]), 1), ke(-1)), u = yt([s, i], 1), c = yt([a, p], 1), l = W($r(u, c), [n[0], n[1]]); + o = Ku(l); } - if (o = ci(o), r.rank === 3 && r.shape[0] !== 0) { - let n = o, s = r.shape[0]; + if (o = pi(o), r15.rank === 3 && r15.shape[0] !== 0) { + let n = o, s = r15.shape[0]; o = W(o, [s, o.shape[0] / s, o.shape[1]]), n.dispose(); } return o; } -var Kd = N({ irfft_: d6 }); -function f6(r, t8, e = 0) { - let n = { x: v(r, "x", "split") }, s = { numOrSizeSplits: t8, axis: e }; +var Gd = N({ irfft_: d6 }); +function f6(r15, t8, e = 0) { + let n = { x: v(r15, "x", "split") }, s = { numOrSizeSplits: t8, axis: e }; return T.runKernel(xa, n, s); } -var li = N({ split_: f6 }); -function h6(r, t8) { - $(r.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r.dtype}`); - let e = r.shape[r.shape.length - 1], o = r.size / e, n; +var ci = N({ split_: f6 }); +function h6(r15, t8) { + $(r15.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r15.dtype}`); + let e = r15.shape[r15.shape.length - 1], o = r15.size / e, n; if (t8 != null && t8 < e) { - let f = r.shape.map((g) => 0), h = r.shape.map((g) => g); - h[r.shape.length - 1] = t8, n = Xe(r, f, h), e = t8; + let f = r15.shape.map((g) => 0), h = r15.shape.map((g) => g); + h[r15.shape.length - 1] = t8, n = Xe(r15, f, h), e = t8; } else if (t8 != null && t8 > e) { - let f = r.shape.map((h) => h); - f[r.shape.length - 1] = t8 - e, n = bt([r, Gr(f)], r.shape.length - 1), e = t8; + let f = r15.shape.map((h) => h); + f[r15.shape.length - 1] = t8 - e, n = yt([r15, Ur(f)], r15.shape.length - 1), e = t8; } else - n = r; - let s = Ht(n), a = W(Er(n, s), [o, e]), i = fc(a), p = Math.floor(e / 2) + 1, u = ci(i), c = lu(i), l = li(u, [p, e - p], u.shape.length - 1), m = li(c, [p, e - p], c.shape.length - 1), d = n.shape.slice(); - return d[n.shape.length - 1] = p, W(Er(l[0], m[0]), d); + n = r15; + let s = Gt(n), a = W($r(n, s), [o, e]), i = ac(a), p = Math.floor(e / 2) + 1, u = pi(i), c = iu(i), l = ci(u, [p, e - p], u.shape.length - 1), m = ci(c, [p, e - p], c.shape.length - 1), d = n.shape.slice(); + return d[n.shape.length - 1] = p, W($r(l[0], m[0]), d); } -var hc = N({ rfft_: h6 }); -function g6(r, t8) { - let e = v(r, "a", "squaredDifference"), o = v(t8, "b", "squaredDifference"); +var ic = N({ rfft_: h6 }); +function g6(r15, t8) { + let e = v(r15, "a", "squaredDifference"), o = v(t8, "b", "squaredDifference"); [e, o] = Oe(e, o), rt(e.shape, o.shape); let n = { a: e, b: o }, s = {}; - return T.runKernel(Ns, n, s); + return T.runKernel(ks, n, s); } -var qd = N({ squaredDifference_: g6 }); -function x6(r, t8) { - let e = v(r, "x", "squeeze", "string_or_numeric"); - return W(e, JC(e.shape, t8).newShape); +var Hd = N({ squaredDifference_: g6 }); +function x6(r15, t8) { + let e = v(r15, "x", "squeeze", "string_or_numeric"); + return W(e, ZC(e.shape, t8).newShape); } -var gc = N({ squeeze_: x6 }); -function y6(r, t8 = 0) { - let e = si(r, "tensors", "stack", "string_or_numeric"); +var uc = N({ squeeze_: x6 }); +function y6(r15, t8 = 0) { + let e = ni(r15, "tensors", "stack", "string_or_numeric"); $(e.length >= 1, () => "Pass at least one tensor to tf.stack"), e.length > 0 && $(t8 <= e[0].rank, () => "Axis must be <= rank of the tensor"); let o = e, n = { axis: t8 }; return T.runKernel(la, o, n); } -var kr = N({ stack_: y6 }); -function b6(r, t8 = 0) { - let o = { x: v(r, "x", "step") }, n = { alpha: t8 }; - return T.runKernel(So, o, n); +var vr = N({ stack_: y6 }); +function b6(r15, t8 = 0) { + let o = { x: v(r15, "x", "step") }, n = { alpha: t8 }; + return T.runKernel(wo, o, n); } -var jd = N({ step_: b6 }); -function C6(r, t8, e, o, n = 0, s = 0, a = 0, i = 0, p = 0) { - let c = { x: v(r, "x", "stridedSlice", "string_or_numeric") }, l = { begin: t8, end: e, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; - return T.runKernel(Ts, c, l); +var Kd = N({ step_: b6 }); +function C6(r15, t8, e, o, n = 0, s = 0, a = 0, i = 0, p = 0) { + let c = { x: v(r15, "x", "stridedSlice", "string_or_numeric") }, l = { begin: t8, end: e, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; + return T.runKernel(Ns, c, l); } -var O1 = N({ stridedSlice_: C6 }); -function w6(r) { - let e = { x: v(r, "x", "tan", "float32") }; - return T.runKernel($s, e); +var M1 = N({ stridedSlice_: C6 }); +function w6(r15) { + let e = { x: v(r15, "x", "tan", "float32") }; + return T.runKernel(_s, e); } -var M1 = N({ tan_: w6 }); -function tr(r, t8) { - io(r); - let e = ir(r, t8); +var L1 = N({ tan_: w6 }); +function Jt(r15, t8) { + ao(r15); + let e = sr(r15, t8); if (e.length !== 1) throw new Error("tensor1d() requires values to be a flat/TypedArray"); - return Sr(r, null, e, t8); + return wr(r15, null, e, t8); } -function fu(r, t8, e) { - if (io(r), t8 != null && t8.length !== 2) +function cu(r15, t8, e) { + if (ao(r15), t8 != null && t8.length !== 2) throw new Error("tensor2d() requires shape to have two numbers"); - let o = ir(r, e); + let o = sr(r15, e); if (o.length !== 2 && o.length !== 1) throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray"); if (o.length === 1 && t8 == null) throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray"); - return Sr(r, t8, o, e); + return wr(r15, t8, o, e); } -function Xd(r, t8, e) { - if (io(r), t8 != null && t8.length !== 3) +function qd(r15, t8, e) { + if (ao(r15), t8 != null && t8.length !== 3) throw new Error("tensor3d() requires shape to have three numbers"); - let o = ir(r, e); + let o = sr(r15, e); if (o.length !== 3 && o.length !== 1) throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray"); if (o.length === 1 && t8 == null) throw new Error("tensor3d() requires shape to be provided when `values` are a flat array"); - return Sr(r, t8, o, e); + return wr(r15, t8, o, e); } -function L1(r, t8, e) { - if (io(r), t8 != null && t8.length !== 4) +function B1(r15, t8, e) { + if (ao(r15), t8 != null && t8.length !== 4) throw new Error("tensor4d() requires shape to have four numbers"); - let o = ir(r, e); + let o = sr(r15, e); if (o.length !== 4 && o.length !== 1) throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray"); if (o.length === 1 && t8 == null) throw new Error("tensor4d() requires shape to be provided when `values` are a flat array"); - return Sr(r, t8, o, e); + return wr(r15, t8, o, e); } -function B1(r, t8, e) { - if (io(r), t8 != null && t8.length !== 5) +function z1(r15, t8, e) { + if (ao(r15), t8 != null && t8.length !== 5) throw new Error("tensor5d() requires shape to have five numbers"); - let o = ir(r, e); + let o = sr(r15, e); if (o.length !== 5 && o.length !== 1) throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray"); if (o.length === 1 && t8 == null) throw new Error("tensor5d() requires shape to be provided when `values` are a flat array"); - return Sr(r, t8, o, e); + return wr(r15, t8, o, e); } -function z1(r, t8, e) { - if (io(r), t8 != null && t8.length !== 6) +function V1(r15, t8, e) { + if (ao(r15), t8 != null && t8.length !== 6) throw new Error("tensor6d() requires shape to have six numbers"); - let o = ir(r, e); + let o = sr(r15, e); if (o.length !== 6 && o.length !== 1) throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray"); if (o.length === 1 && t8 == null) throw new Error("tensor6d() requires shape to be provided when `values` are a flat array"); - return t8 = t8 || o, Sr(r, t8, o, e); + return t8 = t8 || o, wr(r15, t8, o, e); } -var hu = {}; -qe(hu, { calculateShapes: () => V1, validateInput: () => xc, validateUpdateShape: () => Yw }); -function Yw(r, t8, e) { - let o = t8.rank > 1 ? t8.shape[t8.rank - 1] : 1, n = t8.rank > 1 ? t8.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t8.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`; +var lu = {}; +qe(lu, { calculateShapes: () => W1, validateInput: () => pc, validateUpdateShape: () => Yw }); +function Yw(r15, t8, e) { + let o = t8.rank > 1 ? t8.shape[t8.rank - 1] : 1, n = t8.rank > 1 ? t8.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t8.shape}, shape: ${r15}, sliceDim: ${o}, and batchDim: ${n}.`; if (e.rank < n) throw new Error(s + ` update.rank < ${n}. `); - if (r.length < o + (e.rank - n)) + if (r15.length < o + (e.rank - n)) throw new Error(s + ` Output shape length < ${o + (e.rank - n)}`); - if (e.rank !== n + r.length - o) - throw new Error(s + ` update.rank != ${n + r.length - o}`); + if (e.rank !== n + r15.length - o) + throw new Error(s + ` update.rank != ${n + r15.length - o}`); for (let a = 0; a < n; ++a) if (e.shape[a] !== t8.shape[a]) throw new Error(s + ` updates.shape[${a}] (${e.shape[a]}) != indices.shape[${a}] (${t8.shape[a]}).`); for (let a = 0; a < e.rank - n; ++a) - if (e.shape[a + n] !== r[a + o]) - throw new Error(s + ` updates.shape[${a + n}] (${e.shape[a + n]}) != shape[${a + n}] (${r[a + n]})`); + if (e.shape[a + n] !== r15[a + o]) + throw new Error(s + ` updates.shape[${a + n}] (${e.shape[a + n]}) != shape[${a + n}] (${r15[a + n]})`); } -function xc(r, t8, e) { +function pc(r15, t8, e) { if (t8.rank < 1) throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t8.rank}.`); - if (r.rank < 1) - throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r.rank}.`); + if (r15.rank < 1) + throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r15.rank}.`); if (t8.dtype !== "int32") throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t8.dtype}`); if (e.length < 1) @@ -7372,28 +7373,28 @@ function xc(r, t8, e) { if (e.length === 0) { if (t8.size === 0) throw new Error(`Indices specified for empty output. indices shape: ${t8.shape}`); - if (r.size === 0) - throw new Error(`Updates specified for empty output. updates shape: ${r.shape}`); + if (r15.size === 0) + throw new Error(`Updates specified for empty output. updates shape: ${r15.shape}`); } - Yw(e, t8, r); + Yw(e, t8, r15); } -function V1(r, t8, e) { +function W1(r15, t8, e) { let o = t8.shape.length, n = o > 1 ? t8.shape[o - 1] : 1, s = e.length, a = 1; for (let l = n; l < s; ++l) a *= e[l]; let i = n < 1 ? 1 : n, p = He(t8.shape) / i, u = [...js(e.slice(0, n)), 1], c = He(e); return { sliceRank: n, numUpdates: p, sliceSize: a, strides: u, outputSize: c }; } -function S6(r, t8, e) { - let o = v(r, "tensor", "tensorScatterupdate"), n = v(t8, "indices", "tensorScatterupdate", "int32"), s = v(e, "updates", "tensorScatterupdate"); - if (xc(s, n, o.shape), o.dtype !== s.dtype) +function S6(r15, t8, e) { + let o = v(r15, "tensor", "tensorScatterupdate"), n = v(t8, "indices", "tensorScatterupdate", "int32"), s = v(e, "updates", "tensorScatterupdate"); + if (pc(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(fs, a, i); + return T.runKernel(ds, a, i); } -var W1 = N({ tensorScatterUpdate_: S6 }); -function I6(r, t8 = 1, e = true) { - let o = v(r, "x", "topk"); +var U1 = N({ tensorScatterUpdate_: S6 }); +function I6(r15, t8 = 1, e = 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"); let n = o.shape[o.shape.length - 1]; @@ -7401,111 +7402,111 @@ function I6(r, t8 = 1, e = true) { throw new Error(`'k' passed to topk() must be >= 0 but got ${t8}`); if (t8 > n) throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${t8}`); - let s = { x: o }, a = { k: t8, sorted: e }, [i, p] = T.runKernel(Rs, s, a); + let s = { x: o }, a = { k: t8, sorted: e }, [i, p] = T.runKernel(Es, s, a); return { values: i, indices: p }; } -var U1 = N({ topk_: I6 }); -function v6(r, t8 = 0, e = 1, o, n) { - if (wt(r), o != null && o === "bool") +var G1 = N({ topk_: I6 }); +function v6(r15, t8 = 0, e = 1, o, n) { + if (Ct(r15), o != null && o === "bool") throw new Error("Unsupported data type $ { dtype }"); - let s = new Zu(t8, e, o, true, n), a = me(r, o); + let s = new Hu(t8, e, o, true, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var G1 = N({ truncatedNormal_: v6 }); -function k6(r, t8 = 0) { - let e = v(r, "x", "unique", "string_or_numeric"); +var H1 = N({ truncatedNormal_: v6 }); +function k6(r15, t8 = 0) { + let e = v(r15, "x", "unique", "string_or_numeric"); $(e.rank > 0, () => "The input tensor must be at least 1D"); - let o = { x: e }, n = { axis: t8 }, [s, a] = T.runKernel(Zi, o, n); + let o = { x: e }, n = { axis: t8 }, [s, a] = T.runKernel(Xi, o, n); return { values: s, indices: a }; } -var H1 = N({ unique_: k6 }); -function N6(r, t8, e) { - let o = v(r, "x", "unsortedSegmentSum"), n = v(t8, "segmentIds", "unsortedSegmentSum", "int32"); - $(qa(e), () => "numSegments must be of dtype int"); +var K1 = N({ unique_: k6 }); +function N6(r15, t8, e) { + let o = v(r15, "x", "unsortedSegmentSum"), n = v(t8, "segmentIds", "unsortedSegmentSum", "int32"); + $(Ka(e), () => "numSegments must be of dtype int"); let s = { x: o, segmentIds: n }, a = { numSegments: e }; - return T.runKernel(Ji, s, a); + return T.runKernel(Yi, s, a); } -var K1 = N({ unsortedSegmentSum_: N6 }); -function T6(r, t8 = 0) { - let e = v(r, "x", "unstack", "string_or_numeric"); +var q1 = N({ unsortedSegmentSum_: N6 }); +function T6(r15, t8 = 0) { + let e = v(r15, "x", "unstack", "string_or_numeric"); $(t8 >= -e.shape.length && t8 < e.shape.length, () => `Axis = ${t8} is not in [-${e.shape.length}, ${e.shape.length})`); let o = { value: e }, n = { axis: t8 }; return T.runKernel(wa, o, n); } -var fo = N({ unstack_: T6 }); -function q1(r, t8) { - return $l(r, t8, "right"); +var mo = N({ unstack_: T6 }); +function j1(r15, t8) { + return Nl(r15, t8, "right"); } -function j1(r, t8 = true, e, o) { - return T.makeVariable(r, t8, e, o); +function X1(r15, t8 = true, e, o) { + return T.makeVariable(r15, t8, e, o); } -function Yd(r, t8) { +function jd(r15, t8) { let e = []; for (let s = 0; s < t8.length; s++) t8[s] && e.push(s); - let o = me(r, "int32"), n = me([e.length, r.length], "int32"); + let o = me(r15, "int32"), n = me([e.length, r15.length], "int32"); for (let s = 0; s < e.length; s++) { - let a = o.indexToLoc(e[s]), i = s * r.length; + let a = o.indexToLoc(e[s]), i = s * r15.length; n.values.set(a, i); } return n.toTensor(); } -async function _6(r) { - let t8 = v(r, "condition", "whereAsync", "bool"), e = await t8.data(), o = Yd(t8.shape, e); - return r !== t8 && t8.dispose(), o; +async function _6(r15) { + let t8 = v(r15, "condition", "whereAsync", "bool"), e = await t8.data(), o = jd(t8.shape, e); + return r15 !== t8 && t8.dispose(), o; } -var Qd = _6; -async function $6(r, t8, e) { - let o = v(r, "tensor", "boolMask"), n = v(t8, "mask", "boolMask", "bool"), s = e == null ? 0 : e, a = n.rank, i = o.shape; - $(a > 0, () => "mask cannot be scalar"), yt(i.slice(s, s + a), n.shape, "mask's shape must match the first K dimensions of tensor's shape,"); +var Xd = _6; +async function $6(r15, t8, e) { + let o = v(r15, "tensor", "boolMask"), n = v(t8, "mask", "boolMask", "bool"), s = e == null ? 0 : e, a = n.rank, i = o.shape; + $(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]; - let u = i.slice(0, s).concat([p], i.slice(s + a)), c = W(o, u), l = W(n, [-1]), m = await Qd(l), d = gc(m, [1]), f = Id(c, d, s); - return r !== o && o.dispose(), t8 !== n && n.dispose(), d.dispose(), c.dispose(), l.dispose(), m.dispose(), f; + let u = i.slice(0, s).concat([p], i.slice(s + a)), c = W(o, u), l = W(n, [-1]), m = await Xd(l), d = uc(m, [1]), f = wd(c, d, s); + return r15 !== o && o.dispose(), t8 !== n && n.dispose(), d.dispose(), c.dispose(), l.dispose(), m.dispose(), f; } var E6 = $6; -function R6(r, t8, e) { - let o = v(r, "x", "transpose"); +function R6(r15, t8, e) { + let o = v(r15, "x", "transpose"); if (t8 == null && (t8 = o.shape.map((a, i) => i).reverse()), $(o.rank === t8.length, () => `Error in transpose: rank of input ${o.rank} must match length of perm ${t8}.`), t8.forEach((a) => { $(a >= 0 && a < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${t8}`); }), o.rank <= 1) return o.clone(); let n = { x: o }, s = { perm: t8 }; return o.dtype === "complex64" ? De(() => { - let a = ci(o), i = lu(o); - return a = T.runKernel(co, { x: a }, s), i = T.runKernel(co, { x: i }, s), e && (i = cr(i)), Er(a, i); - }) : T.runKernel(co, n, s); + let a = pi(o), i = iu(o); + return a = T.runKernel(po, { x: a }, s), i = T.runKernel(po, { x: i }, s), e && (i = pr(i)), $r(a, i); + }) : T.runKernel(po, n, s); } -var yc = N({ transpose_: R6 }); -function D6(r, t8, e, o, n = true) { - let s = v(r, "v", "movingAverage"), a = v(t8, "x", "movingAverage"), i = v(e, "decay", "movingAverage"); - Cw(s, a), $(Cr(s.shape, a.shape), () => "Shape mismatch in v and x"); +var cc = N({ transpose_: R6 }); +function D6(r15, t8, e, o, n = true) { + let s = v(r15, "v", "movingAverage"), a = v(t8, "x", "movingAverage"), i = v(e, "decay", "movingAverage"); + Cw(s, a), $(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) { $(o != null, () => "When using zeroDebias: true, step is required."); let l = v(o, "step", "movingAverage"); - c = je(c, Te(p, ui(i, l))); + c = je(c, Te(p, ii(i, l))); } return Ce(s, c); } var A6 = N({ movingAverage_: D6 }); -function F6(r, t8, e) { - wt(e); - let o = v(r, "indices", "scatterND", "int32"), n = v(t8, "updates", "scatterND"); - xc(n, o, e); +function F6(r15, t8, e) { + Ct(e); + let o = v(r15, "indices", "scatterND", "int32"), n = v(t8, "updates", "scatterND"); + pc(n, o, e); let s = { indices: o, updates: n }, a = { shape: e }; - return T.runKernel(ds, s, a); + return T.runKernel(ms, s, a); } var P6 = N({ scatterND_: F6 }); -function X1(r, t8, e, 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; +function Y1(r15, t8, e, 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}.`); + let n = r15.rank > 0 ? r15.shape[0] : 1, s = r15.rank > 1 ? r15.shape[1] : 1; if (e.length !== s) throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`); let a = t8.size; @@ -7514,57 +7515,57 @@ function X1(r, t8, e, o) { if (t8.dtype !== o.dtype) throw new Error("sparseValues.dtype must match defaultValues.dtype"); } -function M6(r, t8, e, o = 0) { - wt(e); - let n = v(r, "sparseIndices", "sparseToDense", "int32"), s = v(t8, "sparseValues", "sparseToDense", "string_or_numeric"), a = v(o, "defaultValue", "sparseToDense", s.dtype); - X1(n, s, e, a); +function M6(r15, t8, e, o = 0) { + Ct(e); + let n = v(r15, "sparseIndices", "sparseToDense", "int32"), s = v(t8, "sparseValues", "sparseToDense", "string_or_numeric"), a = v(o, "defaultValue", "sparseToDense", s.dtype); + Y1(n, s, e, a); let i = { sparseIndices: n, sparseValues: s, defaultValue: a }, p = { outputShape: e }; - return T.runKernel(ks, i, p); + return T.runKernel(vs, i, p); } var L6 = N({ sparseToDense_: M6 }); -function B6(r, t8) { - let e = v(t8, "indices", "gatherND", "int32"), n = { params: v(r, "x", "gatherND", "string_or_numeric"), indices: e }; - return T.runKernel(kn, n); +function B6(r15, t8) { + let e = v(t8, "indices", "gatherND", "int32"), n = { params: v(r15, "x", "gatherND", "string_or_numeric"), indices: e }; + return T.runKernel(vn, n); } var z6 = N({ gatherND_: B6 }); -function Y1(r, t8) { +function Q1(r15, t8) { if (t8 == null) - return r.shape.slice(); - if (Cr(r.shape, t8)) + return r15.shape.slice(); + if (br(r15.shape, t8)) return t8; - if (r.shape.length === t8.length) { + if (r15.shape.length === t8.length) { let e = []; - for (let o = 0; o < r.shape.length; o++) - t8[o] == null && r.shape[o] != null ? e.push(r.shape[o]) : e.push(t8[o]); + for (let o = 0; o < r15.shape.length; o++) + t8[o] == null && r15.shape[o] != null ? e.push(r15.shape[o]) : e.push(t8[o]); return e; } return t8; } -function V6(r, t8, e, o) { - let n = v(r, "x", "dropout"); +function V6(r15, t8, e, o) { + let n = v(r15, "x", "dropout"); if ($(n.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`), $(t8 >= 0 && t8 < 1, () => `rate must be a float in the range [0, 1), but got ${t8}.`), t8 === 0) - return r instanceof ut ? n.clone() : n; - let s = Y1(n, e), a = 1 - t8, i = je(Sd(Ce(dc(s, 0, 1, "float32", o), a)), a); + return r15 instanceof mt ? n.clone() : n; + let s = Q1(n, e), a = 1 - t8, i = je(Cd(Ce(sc(s, 0, 1, "float32", o), a)), a); return se(n, i); } var W6 = N({ dropout_: V6 }); -function Qw(r) { - return Math.floor(Math.pow(2, Math.ceil(Math.log(r) / Math.log(2)))); +function Qw(r15) { + return Math.floor(Math.pow(2, Math.ceil(Math.log(r15) / Math.log(2)))); } -function Rl(r, t8, e) { - let o = 1 - r % 2, n = new Float32Array(r); - for (let s = 0; s < r; ++s) { - let a = 2 * Math.PI * s / (r + o - 1); +function _l(r15, t8, e) { + let o = 1 - r15 % 2, n = new Float32Array(r15); + for (let s = 0; s < r15; ++s) { + let a = 2 * Math.PI * s / (r15 + o - 1); n[s] = t8 - e * Math.cos(a); } - return tr(n, "float32"); + return Jt(n, "float32"); } -async function U6(r, t8, e = 1) { - let o = v(r, "predictions", "inTopK"), n = v(t8, "targets", "inTopK"); - $(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), $(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), yt(o.shape.slice(0, o.shape.length - 1), n.shape, "predictions's shape should be align with the targets' shape, except the last dimension."); +async function U6(r15, t8, e = 1) { + let o = v(r15, "predictions", "inTopK"), n = v(t8, "targets", "inTopK"); + $(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), $(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), 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 > 0 && e <= s, () => `'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`); - let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = ew("bool", p); + let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = JC("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++) @@ -7576,62 +7577,62 @@ async function U6(r, t8, e = 1) { break; } } - return r !== o && o.dispose(), t8 !== n && n.dispose(), ur(c, n.shape, "bool"); + return r15 !== o && o.dispose(), t8 !== n && n.dispose(), ar(c, n.shape, "bool"); } var G6 = U6; var Zw = {}; -qe(Zw, { conv2d: () => Z1, depthwiseConv2d: () => tN, matMul: () => rN }); -function H6(r, t8, e, o, n, s = "NHWC", a) { - let i = r; - r.rank === 3 && (i = W(r, [1, r.shape[0], r.shape[1], r.shape[2]])); +qe(Zw, { conv2d: () => J1, depthwiseConv2d: () => rN, matMul: () => oN }); +function H6(r15, t8, e, o, n, s = "NHWC", a) { + let i = r15; + r15.rank === 3 && (i = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]])); let p = t8; p.rank === 3 && (p = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2]])), $(i.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`), $(p.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`), $(e.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`); let u = s === "NHWC" ? i.shape[3] : i.shape[1], c = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(u === e[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`), $(c === e[3], () => `Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`), Bt("conv2dDerFilter", n, a); + $(u === e[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`), $(c === e[3], () => `Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`), Lt("conv2dDerFilter", n, a); let l = { x: i, dy: p }, m = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, filterShape: e }; - return T.runKernel(Oi, l, m); + return T.runKernel(Ai, l, m); } -var Q1 = N({ conv2DBackpropFilter_: H6 }); -function ep(r, t8, e) { +var Z1 = N({ conv2DBackpropFilter_: H6 }); +function qu(r15, t8, e) { if (e == null || e === "linear") - return r; + return r15; if (e === "relu") - return se(r, jd(t8)); + return se(r15, Kd(t8)); throw new Error(`Cannot compute gradient for fused activation ${e}.`); } -function tp(r, t8) { - let e = t8, o = yd(r.shape, t8.shape); - return o.length > 0 && (e = ot(e, o)), W(e, r.shape); +function ju(r15, t8) { + let e = t8, o = gd(r15.shape, t8.shape); + return o.length > 0 && (e = ot(e, o)), W(e, r15.shape); } -function rp(r, t8, e, o) { +function Xu(r15, t8, e, o) { if (t8 === "linear") - return r; + return r15; if (t8 === "relu") - return du(r); + return pu(r15); if (t8 === "elu") - return Cd(r); + return yd(r15); if (t8 === "relu6") - return Gd(r); + return Wd(r15); if (t8 === "prelu") - return Md(r, e); + return Pd(r15, e); if (t8 === "leakyrelu") - return kd(r, o); + return Id(r15, o); if (t8 === "sigmoid") - return $a(r); + return $a(r15); throw new Error(`Unknown fused activation ${t8}.`); } -var op = (r, t8) => !(r > 0) || t8 === "linear"; -function K6({ x: r, filter: t8, strides: e, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { - if (p = p || "linear", op(T.state.gradientDepth, p) === false) { +var Yu = (r15, t8) => !(r15 > 0) || t8 === "linear"; +function K6({ x: r15, filter: t8, strides: e, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (p = p || "linear", Yu(T.state.gradientDepth, p) === false) { $(n === "NHWC", () => `Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); - let _ = uu(r, t8, e, o, n, s, a); - return i != null && (_ = Ce(_, i)), rp(_, p, u, c); + let _ = nu(r15, t8, e, o, n, s, a); + return i != null && (_ = Ce(_, i)), Xu(_, p, u, c); } - let l = v(r, "x", "conv2d", "float32"), m = v(t8, "filter", "conv2d", "float32"), d = l, f = false; - l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(d.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`), $(m.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`), Bt("fused conv2d", o, a); + let l = v(r15, "x", "conv2d", "float32"), m = v(t8, "filter", "conv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(d.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`), $(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]; - $(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), $(xr(e, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`); - let g = Hu(d.shape, m.shape, e, s, o, a), x; + $(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), $(gr(e, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`); + let g = Lu(d.shape, m.shape, e, s, o, a), x; i != null && (x = v(i, "bias", "fused conv2d"), [x] = Oe(x, l), n === "NHWC" ? rt(g.outShape, x.shape) : ($(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}.`), $(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) { @@ -7649,75 +7650,75 @@ function K6({ x: r, filter: t8, strides: e, pad: o, dataFormat: n = "NHWC", dila } 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] = E, M = ep(_, P, p); - $(Gu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); - let L = xd(D.shape, M, R, e, o), B = Q1(D, M, R.shape, e, o), z = [L, B]; + let [R, D, P, O] = E, M = qu(_, P, p); + $(Mu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); + let L = hd(D.shape, M, R, e, o), B = Z1(D, M, R.shape, e, o), z = [L, B]; if (O != null) { - let U = tp(O, M); + let U = ju(O, M); z.push(U); } return z; }, S = { x: d, filter: m, bias: x, preluActivationWeights: b }, k = { strides: e, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; - return i == null ? vr((E, R, D) => { - let P = T.runKernel(vo, S, k); + return i == null ? Ir((E, R, D) => { + let P = T.runKernel(Io, S, k); return D([R, E, P]), f && (P = W(P, [P.shape[1], P.shape[2], P.shape[3]])), { value: P, gradFunc: C }; - })(d, m) : vr((E, R, D, P) => { - let O = T.runKernel(vo, S, k); + })(d, m) : Ir((E, R, D, P) => { + let O = T.runKernel(Io, S, k); return P([R, E, O, D]), f && (O = W(O, [O.shape[1], O.shape[2], O.shape[3]])), { value: O, gradFunc: C }; })(d, m, x); } -var Z1 = N({ fusedConv2d_: K6 }); -function q6(r, t8, e, 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]])); +var J1 = N({ fusedConv2d_: K6 }); +function q6(r15, t8, e, o, n, s = [1, 1], a) { + let i = r15; + r15.rank === 3 && (i = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]])); let p = t8; p.rank === 3 && (p = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2]])); let u = { x: i, dy: p }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, filterShape: e }; - return T.runKernel(Mi, u, c); + return T.runKernel(Fi, u, c); } -var J1 = N({ depthwiseConv2dNativeBackpropFilter_: q6 }); -function j6(r, t8, e, o, n, s = [1, 1], a) { +var eN = N({ depthwiseConv2dNativeBackpropFilter_: q6 }); +function j6(r15, t8, e, o, n, s = [1, 1], a) { let i = t8, p = false; t8.rank === 3 && (p = true, i = W(t8, [1, t8.shape[0], t8.shape[1], t8.shape[2]])); - let u = { dy: i, filter: e }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r }, l = T.runKernel(Li, u, c); + let u = { dy: i, filter: e }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r15 }, l = T.runKernel(Pi, u, c); return p ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; } -var eN = N({ depthwiseConv2dNativeBackpropInput_: j6 }); -function X6({ x: r, filter: t8, strides: e, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { - if (op(T.state.gradientDepth, p) === false) { - let k = lc(r, t8, e, o, n, s, a); - return i != null && (k = Ce(k, i)), rp(k, p, u, c); +var tN = N({ depthwiseConv2dNativeBackpropInput_: j6 }); +function X6({ x: r15, filter: t8, strides: e, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (Yu(T.state.gradientDepth, p) === false) { + let k = oc(r15, t8, e, o, n, s, a); + return i != null && (k = Ce(k, i)), Xu(k, p, u, c); } - let l = v(r, "x", "depthwiseConv2d", "float32"), m = v(t8, "filter", "depthwiseConv2d", "float32"), d = l, f = false; - l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(d.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`), $(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), $(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]), $(xr(e, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), Bt("fused depthwiseConv2d", o, a); - let h = Hu(d.shape, m.shape, e, s, o, a, true), g; + let l = v(r15, "x", "depthwiseConv2d", "float32"), m = v(t8, "filter", "depthwiseConv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), $(d.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`), $(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), $(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]), $(gr(e, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`), Lt("fused depthwiseConv2d", o, a); + let h = Lu(d.shape, m.shape, e, s, o, a, true), 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, _) => { - $(Gu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); - let [E, R, D, P] = _, O = ep(k, D, p), M = eN(R.shape, O, E, e, o, s, a), L = J1(R, O, E.shape, e, o, s, a); + $(Mu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); + let [E, R, D, P] = _, O = qu(k, D, p), M = tN(R.shape, O, E, e, o, s, a), L = eN(R, O, E.shape, e, o, s, a); if (P != null) { - let B = tp(g, O); + let B = ju(g, O); return [M, L, B]; } return [M, L]; }, C = { x: d, filter: m, bias: g, preluActivationWeights: x }, S = { strides: e, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; - return i == null ? vr((_, E, R) => { - let D = T.runKernel(ko, C, S); + return i == null ? Ir((_, E, R) => { + let D = T.runKernel(vo, C, S); return R([E, _, D]), f && (D = W(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: b }; - })(d, m) : vr((_, E, R, D) => { - let P = T.runKernel(ko, C, S); + })(d, m) : Ir((_, E, R, D) => { + let P = T.runKernel(vo, C, S); return D([E, _, P, R]), f && (P = W(P, [P.shape[1], P.shape[2], P.shape[3]])), { value: P, gradFunc: b }; })(d, m, g); } -var tN = N({ fusedDepthwiseConv2d_: X6 }); -function Y6({ a: r, b: t8, transposeA: e = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { - if (op(T.state.gradientDepth, s) === false) { - let O = Ze(r, t8, e, o); - return n != null && (O = Ce(O, n)), rp(O, s, a, i); +var rN = N({ fusedDepthwiseConv2d_: X6 }); +function Y6({ a: r15, b: t8, transposeA: e = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { + if (Yu(T.state.gradientDepth, s) === false) { + let O = Ze(r15, t8, e, o); + return n != null && (O = Ce(O, n)), Xu(O, s, a, i); } - let p = v(r, "a", "fused matMul"), u = v(t8, "b", "fused matMul"); + let p = v(r15, "a", "fused matMul"), u = v(t8, "b", "fused matMul"); [p, u] = Oe(p, u); let c = e ? p.shape[p.rank - 2] : p.shape[p.rank - 1], l = o ? u.shape[u.rank - 1] : u.shape[u.rank - 2], m = e ? 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 = He(f), x = He(h); $(c === l, () => `Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${e} and transposeB=${o} must match.`); @@ -7726,147 +7727,147 @@ function Y6({ a: r, b: t8, transposeA: e = false, transposeB: o = false, bias: n let E; a != null && (E = v(a, "prelu weights", "fused matMul")); let R = (O, M) => { - let [L, B, z, U] = M, j = ep(W(O, z.shape), z, s), q, Y; + let [L, B, z, U] = M, j = qu(W(O, z.shape), z, s), q, Y; if (!e && !o ? (q = Ze(j, B, false, true), Y = Ze(L, j, true, false)) : !e && o ? (q = Ze(j, B, false, false), Y = Ze(j, L, true, false)) : e && !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 = tp(U, j); + let J = ju(U, j); return [q, Y, J]; } else return [q, Y]; }, D = { a: S, b: k, bias: _, preluActivationWeights: E }, P = { transposeA: e, transposeB: o, activation: s, leakyreluAlpha: i }; - return n == null ? vr((M, L, B) => { - let z = T.runKernel(Io, D, P); + 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) : vr((M, L, B, z) => { - let U = T.runKernel(Io, D, P); + })(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 rN = N({ fusedMatMul_: Y6 }); -function Q6(r) { - return Rl(r, 0.54, 0.46); +var oN = N({ fusedMatMul_: Y6 }); +function Q6(r15) { + return _l(r15, 0.54, 0.46); } -var oN = N({ hammingWindow_: Q6 }); -function Z6(r) { - return Rl(r, 0.5, 0.5); +var nN = N({ hammingWindow_: Q6 }); +function Z6(r15) { + return _l(r15, 0.5, 0.5); } -var Zd = N({ hannWindow_: Z6 }); -function J6(r, t8, e, o = false, n = 0) { +var Yd = N({ hannWindow_: Z6 }); +function J6(r15, t8, e, o = false, n = 0) { let s = 0, a = []; - for (; s + t8 <= r.size; ) - a.push(Xe(r, s, t8)), s += e; + for (; s + t8 <= r15.size; ) + a.push(Xe(r15, s, t8)), s += e; if (o) - for (; s < r.size; ) { - let i = s + t8 - r.size, p = bt([Xe(r, s, t8 - i), Ea([i], n)]); + for (; s < r15.size; ) { + let i = s + t8 - r15.size, p = yt([Xe(r15, s, t8 - i), Ea([i], n)]); a.push(p), s += e; } - return a.length === 0 ? fu([], [0, t8]) : W(bt(a), [a.length, t8]); + return a.length === 0 ? cu([], [0, t8]) : W(yt(a), [a.length, t8]); } -var Jd = N({ frame_: J6 }); -function ej(r, t8, e, o, n = Zd) { +var Qd = N({ frame_: J6 }); +function ej(r15, t8, e, o, n = Yd) { o == null && (o = Qw(t8)); - let s = Jd(r, t8, e), a = se(s, n(t8)); - return hc(a, o); + let s = Qd(r15, t8, e), a = se(s, n(t8)); + return ic(a, o); } -var nN = N({ stft_: ej }); -function tj(r, t8, e, o, n = "bilinear", s = 0) { - let a = v(r, "image", "cropAndResize"), i = v(t8, "boxes", "cropAndResize", "float32"), p = v(e, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; +var sN = N({ stft_: ej }); +function tj(r15, t8, e, o, n = "bilinear", s = 0) { + let a = v(r15, "image", "cropAndResize"), i = v(t8, "boxes", "cropAndResize", "float32"), p = v(e, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; $(a.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && i.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`), $(p.rank === 1 && p.shape[0] === u, () => `Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`), $(o.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`), $(o[0] >= 1 && o[1] >= 1, () => `cropSize must be atleast [1,1], but was ${o}`), $(n === "bilinear" || n === "nearest", () => `method must be bilinear or nearest, but was ${n}`); let c = { image: a, boxes: i, boxInd: p }, l = { method: n, extrapolationValue: s, cropSize: o }; - return T.runKernel(ln, c, l); + return T.runKernel(cn, c, l); } -var sN = N({ cropAndResize_: tj }); -function rj(r) { - let t8 = v(r, "image", "flipLeftRight", "float32"); +var aN = N({ cropAndResize_: tj }); +function rj(r15) { + let t8 = v(r15, "image", "flipLeftRight", "float32"); $(t8.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${t8.rank}.`); let e = { image: t8 }; - return T.runKernel(wn, e, {}); + return T.runKernel(Cn, e, {}); } -var aN = N({ flipLeftRight_: rj }); -function oj(r) { - let t8 = v(r, "image", "grayscaleToRGB"), e = t8.rank - 1, o = t8.shape[e]; +var iN = N({ flipLeftRight_: rj }); +function oj(r15) { + let t8 = v(r15, "image", "grayscaleToRGB"), e = t8.rank - 1, o = t8.shape[e]; $(t8.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t8.rank}.`), $(o === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`); let n = new Array(t8.rank); - return n.fill(1, 0, e), n[e] = 3, cu(t8, n); + return n.fill(1, 0, e), n[e] = 3, au(t8, n); } -var iN = N({ grayscaleToRGB_: oj }); -function nj(r) { - let t8 = v(r, "image", "RGBToGrayscale"), e = t8.rank - 1, o = t8.shape[e]; +var uN = N({ grayscaleToRGB_: oj }); +function nj(r15) { + let t8 = v(r15, "image", "RGBToGrayscale"), e = t8.rank - 1, o = t8.shape[e]; $(t8.rank >= 2, () => `Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t8.rank}.`), $(o === 3, () => `Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`); - let n = t8.dtype, s = We(t8, "float32"), a = tr([0.2989, 0.587, 0.114]), i; + let n = t8.dtype, s = We(t8, "float32"), a = Jt([0.2989, 0.587, 0.114]), i; switch (t8.rank) { case 2: - i = pu("ij,j->i", s, a); + i = su("ij,j->i", s, a); break; case 3: - i = pu("ijk,k->ij", s, a); + i = su("ijk,k->ij", s, a); break; case 4: - i = pu("ijkl,l->ijk", s, a); + i = su("ijkl,l->ijk", s, a); break; case 5: - i = pu("ijklm,m->ijkl", s, a); + i = su("ijklm,m->ijkl", s, a); break; case 6: - i = pu("ijklmn,n->ijklm", s, a); + i = su("ijklmn,n->ijklm", s, a); break; default: throw new Error("Not a valid tensor rank."); } return i = Ms(i, -1), We(i, n); } -var uN = N({ rgbToGrayscale_: nj }); -function sj(r, t8, e = 0, o = 0.5) { - let n = v(r, "image", "rotateWithOffset", "float32"); +var pN = N({ rgbToGrayscale_: nj }); +function sj(r15, t8, e = 0, o = 0.5) { + let n = v(r15, "image", "rotateWithOffset", "float32"); $(n.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`); let s = { image: n }, a = { radians: t8, fillValue: e, center: o }; - return T.runKernel(As, s, a); + return T.runKernel(Ds, s, a); } -var pN = N({ rotateWithOffset_: sj }); -function Eo(r, t8, e, o, n, s) { +var cN = N({ rotateWithOffset_: sj }); +function $o(r15, t8, e, o, n, s) { o == null && (o = 0.5), n == null && (n = Number.NEGATIVE_INFINITY), s == null && (s = 0); - let a = r.shape[0]; - return e = Math.min(e, a), $(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), $(r.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r.rank}'`), $(r.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`), $(t8.rank === 1, () => "scores must be a 1D tensor"), $(t8.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${t8.shape[0]}`), $(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: e, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; + let a = r15.shape[0]; + return e = Math.min(e, a), $(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), $(r15.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r15.rank}'`), $(r15.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r15.shape[1]}`), $(t8.rank === 1, () => "scores must be a 1D tensor"), $(t8.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${t8.shape[0]}`), $(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: e, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; } -function aj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r, "boxes", "nonMaxSuppression", "float32"), a = v(t8, "scores", "nonMaxSuppression", "float32"), i = Eo(s, a, e, o, n); +function aj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r15, "boxes", "nonMaxSuppression", "float32"), a = v(t8, "scores", "nonMaxSuppression", "float32"), i = $o(s, a, e, o, n); e = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; let p = { maxOutputSize: e, iouThreshold: o, scoreThreshold: n }; - return T.runKernel(Zn, { boxes: s, scores: a }, p); + return T.runKernel(Qn, { boxes: s, scores: a }, p); } -var cN = N({ nonMaxSuppression_: aj }); -function lN(r, t8, e) { - let o = ij(r, t8, e), n = o < 0 ? -(o + 1) : o; - r.splice(n, 0, t8); +var lN = N({ nonMaxSuppression_: aj }); +function mN(r15, t8, e) { + let o = ij(r15, t8, e), n = o < 0 ? -(o + 1) : o; + r15.splice(n, 0, t8); } -function ij(r, t8, e) { - return pj(r, t8, e || uj); +function ij(r15, t8, e) { + return pj(r15, t8, e || uj); } -function uj(r, t8) { - return r > t8 ? 1 : r < t8 ? -1 : 0; +function uj(r15, t8) { + return r15 > t8 ? 1 : r15 < t8 ? -1 : 0; } -function pj(r, t8, e) { - let o = 0, n = r.length, s = 0, a = false; +function pj(r15, t8, e) { + let o = 0, n = r15.length, s = 0, a = false; for (; o < n; ) { s = o + (n - o >>> 1); - let i = e(t8, r[s]); + let i = e(t8, r15[s]); i > 0 ? o = s + 1 : (n = s, a = !i); } return a ? o : -o - 1; } -function ef(r, t8, e, o, n) { - return Jw(r, t8, e, o, n, 0); +function Zd(r15, t8, e, o, n) { + return Jw(r15, t8, e, o, n, 0); } -function tf(r, t8, e, o, n, s) { - return Jw(r, t8, e, o, n, 0, false, s, true); +function Jd(r15, t8, e, o, n, s) { + return Jw(r15, t8, e, o, n, 0, false, s, true); } -function rf(r, t8, e, o, n, s) { - return Jw(r, t8, e, o, n, s, true); +function ef(r15, t8, e, o, n, s) { + return Jw(r15, t8, e, o, n, s, true); } -function Jw(r, t8, e, o, n, s, a = false, i = false, p = false) { +function Jw(r15, t8, e, o, n, s, a = false, i = false, p = false) { let u = []; for (let g = 0; g < t8.length; g++) t8[g] > n && u.push({ score: t8[g], boxIndex: g, suppressBeginIndex: 0 }); - u.sort(mN); + u.sort(dN); let c = s > 0 ? -0.5 / s : 0, l = [], m = []; for (; l.length < e && u.length > 0; ) { let g = u.pop(), { score: x, boxIndex: b, suppressBeginIndex: C } = g; @@ -7874,7 +7875,7 @@ function Jw(r, t8, e, o, n, s, a = false, i = false, p = false) { break; let S = false; for (let k = l.length - 1; k >= C; --k) { - let _ = cj(r, b, l[k]); + let _ = cj(r15, b, l[k]); if (_ >= o) { S = true; break; @@ -7882,135 +7883,135 @@ function Jw(r, t8, e, o, n, s, a = false, i = false, p = false) { if (g.score = g.score * lj(o, c, _), g.score <= n) break; } - g.suppressBeginIndex = l.length, S || (g.score === x ? (l.push(b), m.push(g.score)) : g.score > n && lN(u, g, mN)); + g.suppressBeginIndex = l.length, S || (g.score === x ? (l.push(b), m.push(g.score)) : g.score > n && mN(u, g, dN)); } let d = l.length, f = e - 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 cj(r, t8, e) { - let o = r.subarray(t8 * 4, t8 * 4 + 4), n = r.subarray(e * 4, e * 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); +function cj(r15, t8, e) { + let o = r15.subarray(t8 * 4, t8 * 4 + 4), n = r15.subarray(e * 4, e * 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 lj(r, t8, e) { +function lj(r15, t8, e) { let o = Math.exp(t8 * e * e); - return e <= r ? o : 0; + return e <= r15 ? o : 0; } -function mN(r, t8) { - return r.score - t8.score || r.score === t8.score && t8.boxIndex - r.boxIndex; +function dN(r15, t8) { + return r15.score - t8.score || r15.score === t8.score && t8.boxIndex - r15.boxIndex; } -async function mj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r, "boxes", "nonMaxSuppressionAsync"), a = v(t8, "scores", "nonMaxSuppressionAsync"), i = Eo(s, a, e, o, n); +async function mj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r15, "boxes", "nonMaxSuppressionAsync"), a = v(t8, "scores", "nonMaxSuppressionAsync"), i = $o(s, a, e, o, n); e = 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 } = ef(u, c, e, o, n); - return s !== r && s.dispose(), a !== t8 && a.dispose(), tr(l, "int32"); + let p = await Promise.all([s.data(), a.data()]), u = p[0], c = p[1], { selectedIndices: l } = Zd(u, c, e, o, n); + return s !== r15 && s.dispose(), a !== t8 && a.dispose(), Jt(l, "int32"); } -var dN = mj; -function dj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r, "boxes", "nonMaxSuppression"), i = v(t8, "scores", "nonMaxSuppression"), p = Eo(a, i, e, o, n, s); +var fN = mj; +function dj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r15, "boxes", "nonMaxSuppression"), i = v(t8, "scores", "nonMaxSuppression"), p = $o(a, i, e, o, n, s); e = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; - let u = { boxes: a, scores: i }, c = { maxOutputSize: e, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, l = T.runKernel(Jn, u, c); + let u = { boxes: a, scores: i }, c = { maxOutputSize: e, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, l = T.runKernel(Zn, u, c); return { selectedIndices: l[0], selectedScores: l[1] }; } -var fN = N({ nonMaxSuppressionWithScore_: dj }); -async function fj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(t8, "scores", "nonMaxSuppressionAsync"), p = Eo(a, i, e, o, n, s); +var hN = N({ nonMaxSuppressionWithScore_: dj }); +async function fj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r15, "boxes", "nonMaxSuppressionAsync"), i = v(t8, "scores", "nonMaxSuppressionAsync"), p = $o(a, i, e, o, n, s); e = 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 } = rf(c, l, e, o, n, s); - return a !== r && a.dispose(), i !== t8 && i.dispose(), { selectedIndices: tr(m, "int32"), selectedScores: tr(d) }; + let u = await Promise.all([a.data(), i.data()]), c = u[0], l = u[1], { selectedIndices: m, selectedScores: d } = ef(c, l, e, o, n, s); + return a !== r15 && a.dispose(), i !== t8 && i.dispose(), { selectedIndices: Jt(m, "int32"), selectedScores: Jt(d) }; } -var hN = fj; -function hj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r, "boxes", "nonMaxSuppression"), i = v(t8, "scores", "nonMaxSuppression"), p = Eo(a, i, e, 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(Za, m, d); +var gN = fj; +function hj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r15, "boxes", "nonMaxSuppression"), i = v(t8, "scores", "nonMaxSuppression"), p = $o(a, i, e, 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 gN = N({ nonMaxSuppressionPadded_: hj }); -async function gj(r, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r, "boxes", "nonMaxSuppressionAsync"), i = v(t8, "scores", "nonMaxSuppressionAsync"), p = Eo(a, i, e, 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 } = tf(m, d, u, c, l, s); - return a !== r && a.dispose(), i !== t8 && i.dispose(), { selectedIndices: tr(f, "int32"), validOutputs: ke(h, "int32") }; +var xN = N({ nonMaxSuppressionPadded_: hj }); +async function gj(r15, t8, e, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r15, "boxes", "nonMaxSuppressionAsync"), i = v(t8, "scores", "nonMaxSuppressionAsync"), p = $o(a, i, e, 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 } = Jd(m, d, u, c, l, s); + return a !== r15 && a.dispose(), i !== t8 && i.dispose(), { selectedIndices: Jt(f, "int32"), validOutputs: ke(h, "int32") }; } -var xN = gj; -function xj(r, t8, e = false, o = false) { - let n = v(r, "images", "resizeBilinear"); +var yN = gj; +function xj(r15, t8, e = false, o = false) { + let n = v(r15, "images", "resizeBilinear"); $(n.rank === 3 || n.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`), $(t8.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${t8}.`), $(o === false || e === false, () => "Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."); let s = n, a = false; n.rank === 3 && (a = true, s = W(n, [1, n.shape[0], n.shape[1], n.shape[2]])); - let [] = t8, i = { images: s }, p = { alignCorners: e, halfPixelCenters: o, size: t8 }, u = T.runKernel(us, i, p); - return a ? W(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; -} -var yN = N({ resizeBilinear_: xj }); -function yj(r, t8, e = false, o = false) { - let n = v(r, "images", "resizeNearestNeighbor"); - $(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), $(t8.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t8}.`), $(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), $(o === false || e === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); - let s = n, a = false; - n.rank === 3 && (a = true, s = W(n, [1, n.shape[0], n.shape[1], n.shape[2]])); let [] = t8, i = { images: s }, p = { alignCorners: e, halfPixelCenters: o, size: t8 }, u = T.runKernel(is, i, p); return a ? W(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; } -var bN = N({ resizeNearestNeighbor_: yj }); -function bj(r, t8 = "binary", e = false, o = 0.5) { - let n = v(r, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = se(tr([o]), 255), c, l, m, d; +var bN = N({ resizeBilinear_: xj }); +function yj(r15, t8, e = false, o = false) { + let n = v(r15, "images", "resizeNearestNeighbor"); + $(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), $(t8.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t8}.`), $(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), $(o === false || e === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); + let s = n, a = false; + n.rank === 3 && (a = true, s = W(n, [1, n.shape[0], n.shape[1], n.shape[2]])); + let [] = t8, i = { images: s }, p = { alignCorners: e, halfPixelCenters: o, size: t8 }, u = T.runKernel(as, i, p); + return a ? W(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; +} +var CN = N({ resizeNearestNeighbor_: yj }); +function bj(r15, t8 = "binary", e = false, o = 0.5) { + let n = v(r15, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = se(Jt([o]), 255), c, l, m, d; if ($(n.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${n.rank}.`), $(n.shape[2] === 3 || n.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`), $(n.dtype === "int32" || n.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`), $(t8 === "otsu" || t8 === "binary", () => `Method must be binary or otsu, but was ${t8}`), n.shape[2] === 3) { - [c, l, m] = li(n, [1, 1, 1], -1); + [c, l, m] = ci(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; + d = r15; if (t8 === "otsu") { - let g = gd(We(Hd(d), "int32"), ur([]), 256); + let g = fd(We(Ud(d), "int32"), ar([]), 256); u = Cj(g, p); } - let f = e ? mc(d, u) : qu(d, u); + let f = e ? nc(d, u) : zu(d, u); return We(se(f, 255), "int32"); } -function Cj(r, t8) { - let e = tr([-1]), o = tr([0]), n = tr([0]), s, a, i, p, u, c; - for (let l = 0; l < r.size - 1; l++) { - s = Xe(r, 0, l + 1), a = Xe(r, l + 1), u = je(ot(s), t8), c = je(ot(a), t8); - let m = ot(se(s, mu(0, s.size))); +function Cj(r15, t8) { + let e = Jt([-1]), o = Jt([0]), n = Jt([0]), s, a, i, p, u, c; + for (let l = 0; l < r15.size - 1; l++) { + s = Xe(r15, 0, l + 1), a = Xe(r15, l + 1), u = je(ot(s), t8), c = je(ot(a), t8); + let m = ot(se(s, uu(0, s.size))); i = je(m, ot(s)); - let d = Ea(a.shape, s.size), f = Ce(mu(0, a.size), d), h = se(a, f); + let d = Ea(a.shape, s.size), f = Ce(uu(0, a.size), d), h = se(a, f); p = je(ot(h), ot(a)); let g = Te(i, p), x = Te(i, p), b = se(u, c); n = se(se(b, g), x); - let C = qu(n, o); - o = lo(C, n, o), e = lo(C, tr([l]), e); + let C = zu(n, o); + o = co(C, n, o), e = co(C, Jt([l]), e); } return e; } -var CN = N({ threshold_: bj }); -function wj(r, t8, e = "nearest", o = "constant", n = 0, s) { - let a = v(r, "image", "transform", "float32"), i = v(t8, "transforms", "transform", "float32"); +var wN = N({ threshold_: bj }); +function wj(r15, t8, e = "nearest", o = "constant", n = 0, s) { + let a = v(r15, "image", "transform", "float32"), i = v(t8, "transforms", "transform", "float32"); $(a.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && (i.shape[0] === a.shape[0] || i.shape[0] === 1) && i.shape[1] === 8, () => "Error in transform: Input transform should be batch x 8 or 1 x 8"), $(s == null || s.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${s}.`); let p = { image: a, transforms: i }, u = { interpolation: e, fillMode: o, fillValue: n, outputShape: s }; - return T.runKernel(Ds, p, u); + return T.runKernel(Rs, p, u); } -var wN = N({ transform_: wj }); -function Sj(r, t8, e) { - let o = v(r, "a", "bandPart"); +var SN = N({ transform_: wj }); +function Sj(r15, t8, e) { + let o = v(r15, "a", "bandPart"); $(o.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${o.rank}.`); let n = o.shape, [s, a] = o.shape.slice(-2), i, p; - typeof t8 == "number" ? ($(t8 % 1 === 0, () => `bandPart(): numLower must be an integer, got ${t8}.`), $(t8 <= s, () => `bandPart(): numLower (${t8}) must not be greater than the number of rows (${s}).`), i = v(t8 < 0 ? s : t8, "numLower", "bandPart")) : ($(t8.dtype === "int32", () => "bandPart(): numLower's dtype must be an int32."), i = lo(_l(t8, 0), s, Yu(t8, s))), typeof e == "number" ? ($(e % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${e}.`), $(e <= a, () => `bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`), p = v(e < 0 ? a : e, "numUpper", "bandPart")) : ($(e.dtype === "int32", () => "bandPart(): numUpper's dtype must be an int32."), p = lo(_l(e, 0), a, Yu(e, a))); - let u = W(mu(0, s, 1, "int32"), [-1, 1]), c = mu(0, a, 1, "int32"), l = Te(u, c), m = ju(mc(l, i), vd(l, cr(p))), d = Gr([s, a], o.dtype); - return W(kr(fo(W(o, [-1, s, a])).map((f) => lo(m, f, d))), n); + typeof t8 == "number" ? ($(t8 % 1 === 0, () => `bandPart(): numLower must be an integer, got ${t8}.`), $(t8 <= s, () => `bandPart(): numLower (${t8}) must not be greater than the number of rows (${s}).`), i = v(t8 < 0 ? s : t8, "numLower", "bandPart")) : ($(t8.dtype === "int32", () => "bandPart(): numLower's dtype must be an int32."), i = co(kl(t8, 0), s, Uu(t8, s))), typeof e == "number" ? ($(e % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${e}.`), $(e <= a, () => `bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`), p = v(e < 0 ? a : e, "numUpper", "bandPart")) : ($(e.dtype === "int32", () => "bandPart(): numUpper's dtype must be an int32."), p = co(kl(e, 0), a, Uu(e, a))); + let u = W(uu(0, s, 1, "int32"), [-1, 1]), c = uu(0, a, 1, "int32"), l = Te(u, c), m = Vu(nc(l, i), Sd(l, pr(p))), d = Ur([s, a], o.dtype); + return W(vr(mo(W(o, [-1, s, a])).map((f) => co(m, f, d))), n); } -var SN = N({ bandPart_: Sj }); -function Ij(r) { +var IN = N({ bandPart_: Sj }); +function Ij(r15) { let t8; - if (Array.isArray(r)) { - t8 = false, $(r != null && r.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); - let n = r[0].shape[0]; - for (let s = 1; s < r.length; ++s) - $(r[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`); + if (Array.isArray(r15)) { + t8 = false, $(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) + $(r15[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r15[s].shape[0]} vs. ${n})`); } else - t8 = true, r = li(r, r.shape[0], 0).map((n) => gc(n, [0])); - $(r.length <= r[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`); - let e = [], o = r; - for (let n = 0; n < r.length; ++n) + t8 = true, r15 = ci(r15, r15.shape[0], 0).map((n) => uc(n, [0])); + $(r15.length <= r15[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r15.length}) exceeds number of dimensions (${r15[0].shape[0]}).`); + let e = [], o = r15; + for (let n = 0; n < r15.length; ++n) e.push(T.tidy(() => { let s = o[n]; if (n > 0) @@ -8018,170 +8019,170 @@ function Ij(r) { let i = se(ot(se(e[a], s)), e[a]); s = Te(s, i); } - return je(s, Ku(s, "euclidean")); + return je(s, Bu(s, "euclidean")); })); - return t8 ? kr(e, 0) : e; + return t8 ? vr(e, 0) : e; } -var IN = N({ gramSchmidt_: Ij }); -function vj(r, t8 = false) { - if ($(r.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`), r.rank === 2) - return vN(r, t8); +var vN = N({ gramSchmidt_: Ij }); +function vj(r15, t8 = false) { + if ($(r15.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r15.rank}`), r15.rank === 2) + return kN(r15, t8); { - let e = r.shape.slice(0, r.shape.length - 2).reduce((p, u) => p * u), o = fo(W(r, [e, r.shape[r.shape.length - 2], r.shape[r.shape.length - 1]]), 0), n = [], s = []; + let e = r15.shape.slice(0, r15.shape.length - 2).reduce((p, u) => p * u), o = mo(W(r15, [e, r15.shape[r15.shape.length - 2], r15.shape[r15.shape.length - 1]]), 0), n = [], s = []; o.forEach((p) => { - let [u, c] = vN(p, t8); + let [u, c] = kN(p, t8); n.push(u), s.push(c); }); - let a = W(kr(n, 0), r.shape), i = W(kr(s, 0), r.shape); + let a = W(vr(n, 0), r15.shape), i = W(vr(s, 0), r15.shape); return [a, i]; } } -function vN(r, t8 = false) { +function kN(r15, t8 = false) { return T.tidy(() => { - $(r.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`); - let e = r.shape[0], o = r.shape[1], n = wd(e), s = Ur(r), a = fu([[1]], [1, 1]), i = Ur(a), p = e >= o ? o : e; + $(r15.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r15.shape.length}D Tensor.`); + let e = r15.shape[0], o = r15.shape[1], n = bd(e), s = Wr(r15), a = cu([[1]], [1, 1]), i = Wr(a), p = e >= o ? o : e; for (let u = 0; u < p; ++u) { let c = s, l = i, m = n; [i, s, n] = T.tidy(() => { - let d = Xe(s, [u, u], [e - u, 1]), f = Ku(d), h = Xe(s, [u, u], [1, 1]), g = lo(qu(h, 0), fu([[-1]]), fu([[1]])), x = Te(h, se(g, f)), b = je(d, x); - b.shape[0] === 1 ? i = Ur(a) : i = bt([a, Xe(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); - let C = cr(je(Ze(g, x), f)), S = Xe(s, [u, 0], [e - u, o]), k = se(C, i), _ = yc(i); + let d = Xe(s, [u, u], [e - u, 1]), f = Bu(d), h = Xe(s, [u, u], [1, 1]), g = co(zu(h, 0), cu([[-1]]), cu([[1]])), x = Te(h, se(g, f)), b = je(d, x); + b.shape[0] === 1 ? i = Wr(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], [e - u, o]), k = se(C, i), _ = cc(i); if (u === 0) s = Te(S, Ze(k, Ze(_, S))); else { let D = Te(S, Ze(k, Ze(_, S))); - s = bt([Xe(s, [0, 0], [u, o]), D], 0); + s = yt([Xe(s, [0, 0], [u, o]), D], 0); } - let E = yc(k), R = Xe(n, [0, u], [e, n.shape[1] - u]); + let E = cc(k), R = Xe(n, [0, u], [e, n.shape[1] - u]); if (u === 0) n = Te(R, Ze(Ze(R, i), E)); else { let D = Te(R, Ze(Ze(R, i), E)); - n = bt([Xe(n, [0, 0], [e, u]), D], 1); + n = yt([Xe(n, [0, 0], [e, u]), D], 1); } return [i, s, n]; - }), Mt([c, l, m]); + }), Ot([c, l, m]); } return !t8 && e > o && (n = Xe(n, [0, 0], [e, o]), s = Xe(s, [0, 0], [o, o])), [n, s]; }); } -var kN = N({ qr_: vj }); -var Rt; -(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"; -})(Rt || (Rt = {})); -function kj(r, t8, e = Rt.SUM_BY_NONZERO_WEIGHTS) { - let o = v(r, "losses", "computeWeightedLoss"), n = null; +var NN = N({ qr_: vj }); +var Et; +(function(r15) { + r15[r15.NONE = 0] = "NONE", r15[r15.MEAN = 1] = "MEAN", r15[r15.SUM = 2] = "SUM", r15[r15.SUM_BY_NONZERO_WEIGHTS = 3] = "SUM_BY_NONZERO_WEIGHTS"; +})(Et || (Et = {})); +function kj(r15, t8, e = Et.SUM_BY_NONZERO_WEIGHTS) { + let o = v(r15, "losses", "computeWeightedLoss"), n = null; t8 != null && (n = v(t8, "weights", "computeWeightedLoss")); let s = n == null ? o : se(o, n); - if (e === Rt.NONE) + if (e === Et.NONE) return s; - if (e === Rt.SUM) + if (e === Et.SUM) return ot(s); - if (e === Rt.MEAN) { + if (e === Et.MEAN) { if (n == null) - return Xu(s); + return Wu(s); { let a = o.size / n.size, i = je(ot(s), ot(n)); return a > 1 ? je(i, ke(a)) : i; } } - if (e === Rt.SUM_BY_NONZERO_WEIGHTS) { + if (e === Et.SUM_BY_NONZERO_WEIGHTS) { if (n == null) return je(ot(s), ke(o.size)); { - let a = se(n, Da(o.shape)), i = We(ot(Pd(a, ke(0))), "float32"); + let a = se(n, Da(o.shape)), i = We(ot(Ad(a, ke(0))), "float32"); return je(ot(s), i); } } throw Error(`Unknown reduction: ${e}`); } -var lr = N({ computeWeightedLoss_: kj }); -function Nj(r, t8, e, o = Rt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r, "labels", "absoluteDifference"), s = v(t8, "predictions", "absoluteDifference"), a = null; - e != null && (a = v(e, "weights", "absoluteDifference")), yt(n.shape, s.shape, "Error in absoluteDifference: "); - let i = Jt(Te(n, s)); - return lr(i, a, o); +var cr = N({ computeWeightedLoss_: kj }); +function Nj(r15, t8, e, o = Et.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "absoluteDifference"), s = v(t8, "predictions", "absoluteDifference"), a = null; + e != null && (a = v(e, "weights", "absoluteDifference")), xt(n.shape, s.shape, "Error in absoluteDifference: "); + let i = Qt(Te(n, s)); + return cr(i, a, o); } -var NN = N({ absoluteDifference_: Nj }); -function Tj(r, t8, e, o, n = Rt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r, "labels", "cosineDistance"), a = v(t8, "predictions", "cosineDistance"), i = null; - o != null && (i = v(o, "weights", "cosineDistance")), yt(s.shape, a.shape, "Error in cosineDistance: "); +var TN = N({ absoluteDifference_: Nj }); +function Tj(r15, t8, e, o, n = Et.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "cosineDistance"), a = v(t8, "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), e, true)); - return lr(u, i, n); + return cr(u, i, n); } -var TN = N({ cosineDistance_: Tj }); -function _j(r, t8, e, o = Rt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r, "labels", "hingeLoss"), s = v(t8, "predictions", "hingeLoss"), a = null; - e != null && (a = v(e, "weights", "hingeLoss")), yt(n.shape, s.shape, "Error in hingeLoss: "); +var _N = N({ cosineDistance_: Tj }); +function _j(r15, t8, e, o = Et.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "hingeLoss"), s = v(t8, "predictions", "hingeLoss"), a = null; + e != null && (a = v(e, "weights", "hingeLoss")), xt(n.shape, s.shape, "Error in hingeLoss: "); let i = ke(1); n = Te(se(ke(2), n), i); - let p = du(Te(i, se(n, s))); - return lr(p, a, o); + let p = pu(Te(i, se(n, s))); + return cr(p, a, o); } -var _N = N({ hingeLoss_: _j }); -function $j(r, t8, e, o = 1, n = Rt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r, "labels", "huberLoss"), a = v(t8, "predictions", "huberLoss"), i = null; - e != null && (i = v(e, "weights", "huberLoss")), yt(s.shape, a.shape, "Error in huberLoss: "); - let p = ke(o), u = Jt(Te(a, s)), c = Yu(u, p), l = Te(u, c), m = Ce(se(ke(0.5), er(c)), se(p, l)); - return lr(m, i, n); +var $N = N({ hingeLoss_: _j }); +function $j(r15, t8, e, o = 1, n = Et.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "huberLoss"), a = v(t8, "predictions", "huberLoss"), i = null; + e != null && (i = v(e, "weights", "huberLoss")), xt(s.shape, a.shape, "Error in huberLoss: "); + let p = ke(o), u = Qt(Te(a, s)), c = Uu(u, p), l = Te(u, c), m = Ce(se(ke(0.5), Zt(c)), se(p, l)); + return cr(m, i, n); } -var $N = N({ huberLoss_: $j }); -function Ej(r, t8, e, o = 1e-7, n = Rt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r, "labels", "logLoss"), a = v(t8, "predictions", "logLoss"), i = null; - e != null && (i = v(e, "weights", "logLoss")), yt(s.shape, a.shape, "Error in logLoss: "); - let p = ke(1), u = ke(o), c = cr(se(s, pi(Ce(a, u)))), l = se(Te(p, s), pi(Ce(Te(p, a), u))), m = Te(c, l); - return lr(m, i, n); +var EN = N({ huberLoss_: $j }); +function Ej(r15, t8, e, o = 1e-7, n = Et.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "logLoss"), a = v(t8, "predictions", "logLoss"), i = null; + e != null && (i = v(e, "weights", "logLoss")), xt(s.shape, a.shape, "Error in logLoss: "); + let p = ke(1), u = ke(o), c = pr(se(s, ui(Ce(a, u)))), l = se(Te(p, s), ui(Ce(Te(p, a), u))), m = Te(c, l); + return cr(m, i, n); } -var EN = N({ logLoss_: Ej }); -function Rj(r, t8, e, o = Rt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r, "labels", "meanSquaredError"), s = v(t8, "predictions", "meanSquaredError"), a = null; - e != null && (a = v(e, "weights", "meanSquaredError")), yt(n.shape, s.shape, "Error in meanSquaredError: "); - let i = qd(n, s); - return lr(i, a, o); +var RN = N({ logLoss_: Ej }); +function Rj(r15, t8, e, o = Et.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "meanSquaredError"), s = v(t8, "predictions", "meanSquaredError"), a = null; + e != null && (a = v(e, "weights", "meanSquaredError")), xt(n.shape, s.shape, "Error in meanSquaredError: "); + let i = Hd(n, s); + return cr(i, a, o); } -var RN = N({ meanSquaredError_: Rj }); -function Dj(r, t8) { - let e = v(r, "labels", "sigmoidCrossEntropyWithLogits"), o = v(t8, "logits", "sigmoidCrossEntropyWithLogits"); - yt(e.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); - let n = du(o), s = se(o, e), a = Nd($o(cr(Jt(o)))); +var DN = N({ meanSquaredError_: Rj }); +function Dj(r15, t8) { + let e = v(r15, "labels", "sigmoidCrossEntropyWithLogits"), o = v(t8, "logits", "sigmoidCrossEntropyWithLogits"); + xt(e.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); + let n = pu(o), s = se(o, e), a = vd(_o(pr(Qt(o)))); return Ce(Te(n, s), a); } -function Aj(r, t8, e, o = 0, n = Rt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r, "multiClassLabels", "sigmoidCrossEntropy"), a = v(t8, "logits", "sigmoidCrossEntropy"), i = null; - if (e != null && (i = v(e, "weights", "sigmoidCrossEntropy")), yt(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { +function Aj(r15, t8, e, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "multiClassLabels", "sigmoidCrossEntropy"), a = v(t8, "logits", "sigmoidCrossEntropy"), i = null; + if (e != null && (i = v(e, "weights", "sigmoidCrossEntropy")), xt(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { let u = ke(o), c = ke(1), l = ke(0.5); s = Ce(se(s, Te(c, u)), se(l, u)); } let p = Dj(s, a); - return lr(p, i, n); + return cr(p, i, n); } -var DN = N({ sigmoidCrossEntropy_: Aj }); -function Fj(r, t8, e = -1) { +var AN = N({ sigmoidCrossEntropy_: Aj }); +function Fj(r15, t8, e = -1) { if (e === -1 && (e = t8.rank - 1), e !== t8.rank - 1) throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t8.rank} and dim was ${e}`); - return vr((n, s, a) => { - let p = $d(s, [e], true), u = Te(We(s, "float32"), p); + return Ir((n, s, a) => { + let p = Td(s, [e], true), u = Te(We(s, "float32"), p); a([n, u]); - let c = cr(se(u, n)); + let c = pr(se(u, n)); return { value: ot(c, [e]), gradFunc: (d, f) => { - let [h, g] = f, x = ii(d.shape, [e]); - return [se(W(d, x), Te(We(h, "float32"), $o(g))), se(W(d, x), Te($o(g), We(h, "float32")))]; + let [h, g] = f, x = ai(d.shape, [e]); + return [se(W(d, x), Te(We(h, "float32"), _o(g))), se(W(d, x), Te(_o(g), We(h, "float32")))]; } }; - })(r, t8); + })(r15, t8); } -function Pj(r, t8, e, o = 0, n = Rt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r, "onehotLabels", "softmaxCrossEntropy"), a = v(t8, "logits", "softmaxCrossEntropy"), i = null; - if (e != null && (i = v(e, "weights", "softmaxCrossEntropy")), yt(s.shape, a.shape, "Error in softmaxCrossEntropy: "), o > 0) { +function Pj(r15, t8, e, o = 0, n = Et.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "onehotLabels", "softmaxCrossEntropy"), a = v(t8, "logits", "softmaxCrossEntropy"), i = null; + if (e != null && (i = v(e, "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 = Fj(s, a); - return lr(p, i, n); + return cr(p, i, n); } -var AN = N({ softmaxCrossEntropy_: Pj }); -function Oj(r, t8, e, o) { - let n = v(r, "indices", "sparseFillEmptyRows", "int32"), s = v(t8, "values", "sparseFillEmptyRows"), a = v(e, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); +var FN = N({ softmaxCrossEntropy_: Pj }); +function Oj(r15, t8, e, o) { + let n = v(r15, "indices", "sparseFillEmptyRows", "int32"), s = v(t8, "values", "sparseFillEmptyRows"), a = v(e, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); if (n.rank !== 2) throw new Error(`Indices should be Tensor2D but received shape ${n.shape}`); @@ -8191,12 +8192,12 @@ function Oj(r, t8, e, o) { throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`); if (i.rank !== 0) throw new Error(`Default value should be a scalar but received shape ${i.shape}`); - let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = T.runKernel(ji, p); + let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = T.runKernel(Hi, p); return { outputIndices: u[0], outputValues: u[1], emptyRowIndicator: u[2], reverseIndexMap: u[3] }; } -var FN = N({ sparseFillEmptyRows_: Oj }); -function Mj(r, t8, e) { - let o = v(r, "inputIndices", "sparseReshape", "int32"), n = v(t8, "inputShape", "sparseReshape", "int32"), s = v(e, "newShape", "sparseReshape", "int32"); +var PN = N({ sparseFillEmptyRows_: Oj }); +function Mj(r15, t8, e) { + let o = v(r15, "inputIndices", "sparseReshape", "int32"), n = v(t8, "inputShape", "sparseReshape", "int32"), s = v(e, "newShape", "sparseReshape", "int32"); if (o.rank !== 2) throw new Error(`Input indices should be Tensor2D but received shape ${o.shape}`); @@ -8204,12 +8205,12 @@ function Mj(r, t8, e) { 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(ti, a); + let a = { inputIndices: o, inputShape: n, newShape: s }, i = T.runKernel(ei, a); return { outputIndices: i[0], outputShape: i[1] }; } -var PN = N({ sparseReshape_: Mj }); -function Lj(r, t8, e) { - let o = v(r, "data", "sparseSegmentMean"), n = v(t8, "indices", "sparseSegmentMean", "int32"), s = v(e, "segmentIds", "sparseSegmentMean", "int32"); +var ON = N({ sparseReshape_: Mj }); +function Lj(r15, t8, e) { + let o = v(r15, "data", "sparseSegmentMean"), n = v(t8, "indices", "sparseSegmentMean", "int32"), s = v(e, "segmentIds", "sparseSegmentMean", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8221,9 +8222,9 @@ function Lj(r, t8, e) { let a = { data: o, indices: n, segmentIds: s }; return T.runKernel(ya, a); } -var ON = N({ sparseSegmentMean_: Lj }); -function Bj(r, t8, e) { - let o = v(r, "data", "sparseSegmentSum"), n = v(t8, "indices", "sparseSegmentSum", "int32"), s = v(e, "segmentIds", "sparseSegmentSum", "int32"); +var MN = N({ sparseSegmentMean_: Lj }); +function Bj(r15, t8, e) { + let o = v(r15, "data", "sparseSegmentSum"), n = v(t8, "indices", "sparseSegmentSum", "int32"), s = v(e, "segmentIds", "sparseSegmentSum", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8235,9 +8236,9 @@ function Bj(r, t8, e) { let a = { data: o, indices: n, segmentIds: s }; return T.runKernel(ba, a); } -var MN = N({ sparseSegmentSum_: Bj }); -function zj(r, t8, e, o, n, s, a, i) { - let p = v(r, "data", "stringNGrams", "string"); +var LN = N({ sparseSegmentSum_: Bj }); +function zj(r15, t8, e, 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) @@ -8248,42 +8249,42 @@ function zj(r, t8, e, o, n, s, a, i) { let c = { separator: e, 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 LN = N({ stringNGrams_: zj }); -function Vj(r, t8, e = true) { - let o = v(r, "input", "stringSplit", "string"), n = v(t8, "delimiter", "stringSplit", "string"); +var BN = N({ stringNGrams_: zj }); +function Vj(r15, t8, e = true) { + let o = v(r15, "input", "stringSplit", "string"), n = v(t8, "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: e }, a = { input: o, delimiter: n }, i = T.runKernel(Yi, a, s); + let s = { skipEmpty: e }, a = { input: o, delimiter: n }, i = T.runKernel(qi, a, s); return { indices: i[0], values: i[1], shape: i[2] }; } -var BN = N({ stringSplit_: Vj }); -function Wj(r, t8) { - let e = v(r, "input", "stringToHashBucketFast", "string"), o = { numBuckets: t8 }; +var zN = N({ stringSplit_: Vj }); +function Wj(r15, t8) { + let e = v(r15, "input", "stringToHashBucketFast", "string"), o = { numBuckets: t8 }; if (t8 <= 0) throw new Error("Number of buckets must be at least 1"); let n = { input: e }; - return T.runKernel(Qi, n, o); + return T.runKernel(ji, n, o); } -var zN = N({ stringToHashBucketFast_: Wj }); -function Uj(r, t8, e, o = true) { - let n = v(r, "input", "staticRegexReplace", "string"), s = { pattern: t8, rewrite: e, replaceGlobal: o }; - return T.runKernel(Ou, { x: n }, s); +var VN = N({ stringToHashBucketFast_: Wj }); +function Uj(r15, t8, e, o = true) { + let n = v(r15, "input", "staticRegexReplace", "string"), s = { pattern: t8, rewrite: e, replaceGlobal: o }; + return T.runKernel($u, { x: n }, s); } -var VN = N({ staticRegexReplace_: Uj }); -var Gj = { fft: fc, ifft: Ju, rfft: hc, irfft: Kd }; -var Hj = { hammingWindow: oN, hannWindow: Zd, frame: Jd, stft: nN }; -var Kj = { flipLeftRight: aN, grayscaleToRGB: iN, resizeNearestNeighbor: bN, resizeBilinear: yN, rgbToGrayscale: uN, rotateWithOffset: pN, cropAndResize: sN, nonMaxSuppression: cN, nonMaxSuppressionAsync: dN, nonMaxSuppressionWithScore: fN, nonMaxSuppressionWithScoreAsync: hN, nonMaxSuppressionPadded: gN, nonMaxSuppressionPaddedAsync: xN, threshold: CN, transform: wN }; -var qj = { bandPart: SN, gramSchmidt: IN, qr: kN }; -var jj = { absoluteDifference: NN, computeWeightedLoss: lr, cosineDistance: TN, hingeLoss: _N, huberLoss: $N, logLoss: EN, meanSquaredError: RN, sigmoidCrossEntropy: DN, softmaxCrossEntropy: AN }; -var Xj = { sparseFillEmptyRows: FN, sparseReshape: PN, sparseSegmentMean: ON, sparseSegmentSum: MN }; -var Yj = { stringNGrams: LN, stringSplit: BN, stringToHashBucketFast: zN, staticRegexReplace: VN }; -var WN = {}; -qe(WN, { Serializable: () => Dl, SerializationMap: () => Fa, getRegisteredName: () => Zj, registerClass: () => tS }); +var WN = N({ staticRegexReplace_: Uj }); +var Gj = { fft: ac, ifft: Ku, rfft: ic, irfft: Gd }; +var Hj = { hammingWindow: nN, hannWindow: Yd, frame: Qd, stft: sN }; +var Kj = { flipLeftRight: iN, grayscaleToRGB: uN, resizeNearestNeighbor: CN, resizeBilinear: bN, rgbToGrayscale: pN, rotateWithOffset: cN, cropAndResize: aN, nonMaxSuppression: lN, nonMaxSuppressionAsync: fN, nonMaxSuppressionWithScore: hN, nonMaxSuppressionWithScoreAsync: gN, nonMaxSuppressionPadded: xN, nonMaxSuppressionPaddedAsync: yN, threshold: wN, transform: SN }; +var qj = { bandPart: IN, gramSchmidt: vN, qr: NN }; +var jj = { absoluteDifference: TN, computeWeightedLoss: cr, cosineDistance: _N, hingeLoss: $N, huberLoss: EN, logLoss: RN, meanSquaredError: DN, sigmoidCrossEntropy: AN, softmaxCrossEntropy: FN }; +var Xj = { sparseFillEmptyRows: PN, sparseReshape: ON, sparseSegmentMean: MN, sparseSegmentSum: LN }; +var Yj = { stringNGrams: BN, stringSplit: zN, stringToHashBucketFast: VN, staticRegexReplace: WN }; +var UN = {}; +qe(UN, { Serializable: () => $l, SerializationMap: () => tf, getRegisteredName: () => Zj, registerClass: () => tS }); var Qj = /* @__PURE__ */ new Map(); var eS = /* @__PURE__ */ new Map(); -var Dl = class { +var $l = class { getClassName() { return this.constructor.className; } @@ -8291,26 +8292,26 @@ var Dl = class { return new t8(e); } }; -var Fa = class { +var tf = class r7 { constructor() { this.classNameMap = {}; } static getMap() { - return Fa.instance == null && (Fa.instance = new Fa()), Fa.instance; + return r7.instance == null && (r7.instance = new r7()), r7.instance; } static register(t8) { - Fa.getMap().classNameMap[t8.className] = [t8, t8.fromConfig]; + r7.getMap().classNameMap[t8.className] = [t8, t8.fromConfig]; } }; -function tS(r, t8, e) { - $(r.className != null, () => "Class being registered does not have the static className property defined."), $(typeof r.className == "string", () => "className is required to be a string, but got type " + typeof r.className), $(r.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), typeof t8 == "undefined" && (t8 = "Custom"), typeof e == "undefined" && (e = r.className); +function tS(r15, t8, e) { + $(r15.className != null, () => "Class being registered does not have the static className property defined."), $(typeof r15.className == "string", () => "className is required to be a string, but got type " + typeof r15.className), $(r15.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), typeof t8 == "undefined" && (t8 = "Custom"), typeof e == "undefined" && (e = r15.className); let o = e, n = t8 + ">" + o; - return Fa.register(r), Qj.set(n, r), eS.set(r, n), r; + return tf.register(r15), Qj.set(n, r15), eS.set(r15, n), r15; } -function Zj(r) { - return eS.has(r) ? eS.get(r) : r.className; +function Zj(r15) { + return eS.has(r15) ? eS.get(r15) : r15.className; } -var Nr = class extends Dl { +var kr = class extends $l { minimize(t8, e = false, o) { let { value: n, grads: s } = this.computeGradients(t8, o); if (o != null) { @@ -8318,7 +8319,7 @@ var Nr = class extends Dl { this.applyGradients(a); } else this.applyGradients(s); - return Mt(s), e ? n : (n.dispose(), null); + return Ot(s), e ? n : (n.dispose(), null); } get iterations() { return this.iterations_ == null && (this.iterations_ = 0), this.iterations_; @@ -8330,7 +8331,7 @@ var Nr = class extends Dl { return zw(t8, e); } dispose() { - this.iterations_ != null && Mt(this.iterations_); + this.iterations_ != null && Ot(this.iterations_); } async saveIterations() { return this.iterations_ == null && (this.iterations_ = 0), { name: "iter", tensor: ke(this.iterations_, "int32") }; @@ -8345,8 +8346,8 @@ var Nr = class extends Dl { return this.iterations_ = (await t8[0].tensor.data())[0], t8.slice(1); } }; -Object.defineProperty(Nr, Symbol.hasInstance, { value: (r) => r.minimize != null && r.computeGradients != null && r.applyGradients != null }); -var np = class extends Nr { +Object.defineProperty(kr, Symbol.hasInstance, { value: (r15) => r15.minimize != null && r15.computeGradients != null && r15.applyGradients != null }); +var Qu = class extends kr { static get className() { return "Adadelta"; } @@ -8356,13 +8357,13 @@ var np = class extends Nr { applyGradients(t8) { (Array.isArray(t8) ? t8.map((o) => o.name) : Object.keys(t8)).forEach((o, n) => { let s = T.registeredVariables[o], a = false; - this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: De(() => Ht(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: De(() => Ht(s).variable(a)) }); + 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(t8) ? t8[n].tensor : t8[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(er(i), 1 - this.rho)), l = se(je(Dr(Ce(u, this.epsilon)), Dr(Ce(p, this.epsilon))), i), m = Ce(se(u, this.rho), se(er(l), 1 - this.rho)); + 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); @@ -8370,7 +8371,7 @@ var np = class extends Nr { }), this.incrementIterations(); } dispose() { - this.accumulatedUpdates != null && (Mt(this.accumulatedGrads.map((t8) => t8.variable)), Mt(this.accumulatedUpdates.map((t8) => t8.variable))); + this.accumulatedUpdates != null && (Ot(this.accumulatedGrads.map((t8) => t8.variable)), Ot(this.accumulatedUpdates.map((t8) => t8.variable))); } async getWeights() { let t8 = [...this.accumulatedGrads, ...this.accumulatedUpdates]; @@ -8388,7 +8389,7 @@ var np = class extends Nr { return new t8(e.learningRate, e.rho, e.epsilon); } }; -var sp = class extends Nr { +var Zu = class extends kr { static get className() { return "Adagrad"; } @@ -8404,15 +8405,15 @@ var sp = class extends Nr { return; let i = this.accumulatedGrads[n].variable; De(() => { - let p = Ce(i, er(a)); + let p = Ce(i, Zt(a)); i.assign(p); - let u = Ce(se(je(a, Dr(Ce(p, T.backend.epsilon()))), -this.learningRate), s); + let u = Ce(se(je(a, Rr(Ce(p, T.backend.epsilon()))), -this.learningRate), s); s.assign(u); }); }), this.incrementIterations(); } dispose() { - this.accumulatedGrads != null && Mt(this.accumulatedGrads.map((t8) => t8.variable)); + this.accumulatedGrads != null && Ot(this.accumulatedGrads.map((t8) => t8.variable)); } async getWeights() { return [await this.saveIterations()].concat(this.accumulatedGrads.map((t8) => ({ name: t8.originalName, tensor: t8.variable }))); @@ -8429,7 +8430,7 @@ var sp = class extends Nr { return new t8(e.learningRate, e.initialAccumulatorValue); } }; -var ap = class extends Nr { +var Ju = class extends kr { static get className() { return "Adam"; } @@ -8444,19 +8445,19 @@ var ap = class extends Nr { let o = Te(1, this.accBeta1), n = Te(1, this.accBeta2); e.forEach((s, a) => { let i = T.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: De(() => Ht(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: De(() => Ht(i).variable(p)) }); + 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(t8) ? t8[a].tensor : t8[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(er(u), 1 - this.beta2)), f = je(m, o), h = je(d, n); + 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(Dr(h), this.epsilon)), -this.learningRate), i); + 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 && Mt(this.accumulatedFirstMoment.map((t8) => t8.variable)), this.accumulatedSecondMoment != null && Mt(this.accumulatedSecondMoment.map((t8) => t8.variable)); + this.accBeta1.dispose(), this.accBeta2.dispose(), this.accumulatedFirstMoment != null && Ot(this.accumulatedFirstMoment.map((t8) => t8.variable)), this.accumulatedSecondMoment != null && Ot(this.accumulatedSecondMoment.map((t8) => t8.variable)); } async getWeights() { let t8 = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment]; @@ -8464,7 +8465,7 @@ var ap = class extends Nr { } async setWeights(t8) { t8 = await this.extractIterations(t8), De(() => { - this.accBeta1.assign(ui(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(ui(this.beta2, this.iterations_ + 1)); + this.accBeta1.assign(ii(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(ii(this.beta2, this.iterations_ + 1)); }); let e = t8.length / 2, o = false; this.accumulatedFirstMoment = t8.slice(0, e).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedSecondMoment = t8.slice(e, e * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); @@ -8476,7 +8477,7 @@ var ap = class extends Nr { return new t8(e.learningRate, e.beta1, e.beta2, e.epsilon); } }; -var ip = class extends Nr { +var ep = class extends kr { static get className() { return "Adamax"; } @@ -8491,11 +8492,11 @@ var ip = class extends Nr { let o = Te(1, this.accBeta1), n = je(-this.learningRate, Ce(se(this.iteration, this.decay), 1)); e.forEach((s, a) => { let i = T.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Ht(i).variable(p) }), this.accumulatedWeightedInfNorm[a] == null && (this.accumulatedWeightedInfNorm[a] = { originalName: `${s}/v`, variable: Ht(i).variable(p) }); + 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(t8) ? t8[a].tensor : t8[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 = Jt(u), h = Fd(d, f); + 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 = Dd(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); @@ -8503,7 +8504,7 @@ var ip = class extends Nr { }), this.incrementIterations(); } dispose() { - this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Mt(this.accumulatedFirstMoment.map((t8) => t8.variable)), this.accumulatedWeightedInfNorm != null && Mt(this.accumulatedWeightedInfNorm.map((t8) => t8.variable)); + this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Ot(this.accumulatedFirstMoment.map((t8) => t8.variable)), this.accumulatedWeightedInfNorm != null && Ot(this.accumulatedWeightedInfNorm.map((t8) => t8.variable)); } async getWeights() { throw new Error("getWeights() is not implemented for Adamax yet."); @@ -8518,7 +8519,7 @@ var ip = class extends Nr { return new t8(e.learningRate, e.beta1, e.beta2, e.epsilon, e.decay); } }; -var mi = class extends Nr { +var li = class extends kr { static get className() { return "SGD"; } @@ -8538,7 +8539,7 @@ var mi = class extends Nr { }), this.incrementIterations(); } setLearningRate(t8) { - this.learningRate = t8, this.c != null && this.c.dispose(), this.c = Rr(ke(-t8)); + this.learningRate = t8, this.c != null && this.c.dispose(), this.c = Er(ke(-t8)); } dispose() { this.c.dispose(); @@ -8557,7 +8558,7 @@ var mi = class extends Nr { return new t8(e.learningRate); } }; -var up = class extends mi { +var tp = class extends li { static get className() { return "Momentum"; } @@ -8567,7 +8568,7 @@ var up = class extends mi { applyGradients(t8) { (Array.isArray(t8) ? t8.map((o) => o.name) : Object.keys(t8)).forEach((o, n) => { let s = T.registeredVariables[o]; - this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: De(() => Ht(s).variable(false)) }); + this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: De(() => Gt(s).variable(false)) }); let a = this.accumulations[n].variable, i = Array.isArray(t8) ? t8[n].tensor : t8[o]; i != null && De(() => { let p, u = Ce(se(this.m, a), i); @@ -8576,7 +8577,7 @@ var up = class extends mi { }), this.incrementIterations(); } dispose() { - this.m.dispose(), this.accumulations != null && Mt(this.accumulations.map((t8) => t8.variable)); + this.m.dispose(), this.accumulations != null && Ot(this.accumulations.map((t8) => t8.variable)); } setMomentum(t8) { this.momentum = t8; @@ -8596,7 +8597,7 @@ var up = class extends mi { return new t8(e.learningRate, e.momentum, e.useNesterov); } }; -var pp = class extends Nr { +var rp = class extends kr { static get className() { return "RMSProp"; } @@ -8607,20 +8608,20 @@ var pp = class extends Nr { applyGradients(t8) { (Array.isArray(t8) ? t8.map((o) => o.name) : Object.keys(t8)).forEach((o, n) => { let s = T.registeredVariables[o], a = false; - this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: De(() => Ht(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: De(() => Ht(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: De(() => Ht(s).variable(a)) }); + 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(t8) ? t8[n].tensor : t8[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(er(i), 1 - this.decay)); + 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), Dr(Te(c, Ce(er(m), this.epsilon)))), f = Ce(se(u, this.momentum), d); + 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(er(i), 1 - this.decay)), m = Ce(se(u, this.momentum), je(se(i, this.learningRate), Dr(Ce(l, this.epsilon)))); + 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); @@ -8629,7 +8630,7 @@ var pp = class extends Nr { }), this.incrementIterations(); } dispose() { - this.accumulatedMeanSquares != null && Mt(this.accumulatedMeanSquares.map((t8) => t8.variable)), this.accumulatedMeanGrads != null && this.centered && Mt(this.accumulatedMeanGrads.map((t8) => t8.variable)), this.accumulatedMoments != null && Mt(this.accumulatedMoments.map((t8) => t8.variable)); + this.accumulatedMeanSquares != null && Ot(this.accumulatedMeanSquares.map((t8) => t8.variable)), this.accumulatedMeanGrads != null && this.centered && Ot(this.accumulatedMeanGrads.map((t8) => t8.variable)), this.accumulatedMoments != null && Ot(this.accumulatedMoments.map((t8) => t8.variable)); } async getWeights() { let t8 = [...this.accumulatedMeanSquares, ...this.accumulatedMoments]; @@ -8647,42 +8648,42 @@ var pp = class extends Nr { return new t8(e.learningRate, e.decay, e.momentum, e.epsilon, e.centered); } }; -var Jj = [np, sp, ap, ip, up, pp, mi]; -function UN() { - for (let r of Jj) - tS(r); +var Jj = [Qu, Zu, Ju, ep, tp, rp, li]; +function GN() { + for (let r15 of Jj) + tS(r15); } -var fi = {}; -qe(fi, { CompositeArrayBuffer: () => jt, browserFiles: () => HN, browserHTTPRequest: () => jN, concatenateArrayBuffers: () => ik, copyModel: () => wk, decodeWeights: () => ad, encodeWeights: () => nk, fromMemory: () => XN, fromMemorySync: () => iS, getLoadHandlers: () => lk, getModelArtifactsForJSON: () => ic, getModelArtifactsForJSONSync: () => _w, getModelArtifactsInfoForJSON: () => va, getSaveHandlers: () => ck, getWeightSpecs: () => ud, http: () => nf, isHTTPScheme: () => of, listModels: () => bk, loadWeights: () => KN, moveModel: () => Sk, registerLoadRouter: () => pk, registerSaveRouter: () => uk, removeModel: () => Ck, weightsLoaderFactory: () => sS, withSaveHandler: () => YN, withSaveHandlerSync: () => QN }); +var mi = {}; +qe(mi, { CompositeArrayBuffer: () => ir, browserFiles: () => KN, browserHTTPRequest: () => XN, concatenateArrayBuffers: () => uk, copyModel: () => Sk, decodeWeights: () => nd, encodeWeights: () => sk, fromMemory: () => YN, fromMemorySync: () => iS, getLoadHandlers: () => mk, getModelArtifactsForJSON: () => Jp, getModelArtifactsForJSONSync: () => _w, getModelArtifactsInfoForJSON: () => va, getSaveHandlers: () => lk, getWeightSpecs: () => ad, http: () => of, isHTTPScheme: () => rf, listModels: () => Ck, loadWeights: () => qN, moveModel: () => Ik, registerLoadRouter: () => ck, registerSaveRouter: () => pk, removeModel: () => wk, weightsLoaderFactory: () => sS, withSaveHandler: () => QN, withSaveHandlerSync: () => ZN }); var eX = "model"; var tX = ".json"; var rX = ".weights.bin"; -function GN(r) { - return new Promise((t8) => setTimeout(t8)).then(r); +function HN(r15) { + return new Promise((t8) => setTimeout(t8)).then(r15); } -var di = class { +var lc = class r8 { constructor(t8) { if (!A().getBool("IS_BROWSER")) throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); - t8.startsWith(di.URL_SCHEME) && (t8 = t8.slice(di.URL_SCHEME.length)), (t8 == null || t8.length === 0) && (t8 = eX), this.modelJsonFileName = t8 + tX, this.weightDataFileName = t8 + rX; + t8.startsWith(r8.URL_SCHEME) && (t8 = t8.slice(r8.URL_SCHEME.length)), (t8 == null || t8.length === 0) && (t8 = eX), this.modelJsonFileName = t8 + tX, this.weightDataFileName = t8 + rX; } async save(t8) { if (typeof document == "undefined") throw new Error("Browser downloads are not supported in this environment since `document` is not present"); - let e = jt.join(t8.weightData), o = window.URL.createObjectURL(new Blob([e], { type: "application/octet-stream" })); + let e = ir.join(t8.weightData), o = window.URL.createObjectURL(new Blob([e], { type: "application/octet-stream" })); if (t8.modelTopology instanceof ArrayBuffer) throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); { - let n = [{ paths: ["./" + this.weightDataFileName], weights: t8.weightSpecs }], s = id(t8, 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 GN(() => i.dispatchEvent(new MouseEvent("click"))), t8.weightData != null) { + let n = [{ paths: ["./" + this.weightDataFileName], weights: t8.weightSpecs }], s = sd(t8, 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 HN(() => i.dispatchEvent(new MouseEvent("click"))), t8.weightData != null) { let p = this.weightDataAnchor == null ? document.createElement("a") : this.weightDataAnchor; - p.download = this.weightDataFileName, p.href = o, await GN(() => p.dispatchEvent(new MouseEvent("click"))); + p.download = this.weightDataFileName, p.href = o, await HN(() => p.dispatchEvent(new MouseEvent("click"))); } return { modelArtifactsInfo: va(t8) }; } } }; -di.URL_SCHEME = "downloads://"; +lc.URL_SCHEME = "downloads://"; var rS = class { constructor(t8) { if (t8 == null || t8.length < 1) @@ -8706,7 +8707,7 @@ var rS = class { t8({ modelTopology: a }); return; } - let p = ic(s, (u) => this.loadWeights(u)); + let p = Jp(s, (u) => this.loadWeights(u)); t8(p); }, o.onerror = (n) => e(`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); }); @@ -8743,18 +8744,18 @@ var rS = class { return n; } }; -var oX = (r) => A().getBool("IS_BROWSER") && !Array.isArray(r) && r.startsWith(di.URL_SCHEME) ? nX(r.slice(di.URL_SCHEME.length)) : null; -ft.registerSaveRouter(oX); -function nX(r = "model") { - return new di(r); +var oX = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(lc.URL_SCHEME) ? nX(r15.slice(lc.URL_SCHEME.length)) : null; +qt.registerSaveRouter(oX); +function nX(r15 = "model") { + return new lc(r15); } -function HN(r) { - return new rS(r); +function KN(r15) { + return new rS(r15); } -function oS(r, t8, e, o) { - a(r), e = e == null ? 0 : e, o = o == null ? 1 : o, i(e, o); +function oS(r15, t8, e, o) { + a(r15), e = e == null ? 0 : e, o = o == null ? 1 : o, i(e, o); let n = 0, s = (p) => (p.then((u) => { - let c = e + ++n / r.length * (o - e); + let c = e + ++n / r15.length * (o - e); return t8(c), u; }), p); function a(p) { @@ -8763,23 +8764,23 @@ function oS(r, t8, e, o) { function i(p, u) { $(p >= 0 && p <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${p}`), $(u >= 0 && u <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${u}`), $(u >= p, () => `startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`); } - return Promise.all(r.map(s)); + return Promise.all(r15.map(s)); } -async function nS(r, t8) { +async function nS(r15, t8) { t8 == null && (t8 = {}); - let e = t8.fetchFunc == null ? A().platform.fetch : t8.fetchFunc, o = r.map((l) => e(l, t8.requestInit, { isBinary: true })), n = 0, s = 0.5, i = (t8.onProgress == null ? await Promise.all(o) : await oS(o, t8.onProgress, n, s)).map((l) => l.arrayBuffer()), p = 0.5, u = 1; + let e = t8.fetchFunc == null ? A().platform.fetch : t8.fetchFunc, o = r15.map((l) => e(l, t8.requestInit, { isBinary: true })), n = 0, s = 0.5, i = (t8.onProgress == null ? await Promise.all(o) : await oS(o, t8.onProgress, n, s)).map((l) => l.arrayBuffer()), p = 0.5, u = 1; return t8.onProgress == null ? await Promise.all(i) : await oS(i, t8.onProgress, p, u); } -async function KN(r, t8 = "", e, o) { - return sS((a) => nS(a, { requestInit: o }))(r, t8, e); +async function qN(r15, t8 = "", e, o) { + return sS((a) => nS(a, { requestInit: o }))(r15, t8, e); } -function sS(r) { +function sS(r15) { return async (t8, e = "", o) => { let n = t8.map(() => false), s = {}, a = o != null ? o.map(() => false) : [], i = []; if (t8.forEach((d, f) => { let h = 0; d.weights.forEach((g) => { - let x = "quantization" in g ? g.quantization.dtype : g.dtype, b = Il[x] * He(g.shape), C = () => { + let x = "quantization" in g ? g.quantization.dtype : g.dtype, b = Cl[x] * He(g.shape), C = () => { n[f] = true, s[f] == null && (s[f] = []), s[f].push({ manifestEntry: g, groupOffset: h, sizeBytes: b }); }; o != null ? o.forEach((S, k) => { @@ -8798,11 +8799,11 @@ Manifest JSON has weights with names: ${i.join(", ")}.`); u.push(h); }); }); - let c = await r(u), l = {}, m = 0; + let c = await r15(u), l = {}, m = 0; return p.forEach((d) => { - let f = t8[d].paths.length, h = new jt(c.slice(m, m + f)); + let f = t8[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 = ad(b, [x.manifestEntry]); + let b = h.slice(x.groupOffset, x.groupOffset + x.sizeBytes), C = nd(b, [x.manifestEntry]); for (let S in C) l[S] = C[S]; }), m += f; @@ -8811,7 +8812,7 @@ Manifest JSON has weights with names: ${i.join(", ")}.`); } var sX = "application/octet-stream"; var aX = "application/json"; -var Al = class { +var El = class { constructor(t8, e) { if (this.DEFAULT_METHOD = "POST", e == null && (e = {}), this.weightPathPrefix = e.weightPathPrefix, this.onProgress = e.onProgress, this.weightUrlConverter = e.weightUrlConverter, e.fetchFunc != null ? ($(typeof e.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 = e.fetchFunc) : this.fetch = A().platform.fetch, $(t8 != null && t8.length > 0, () => "URL path for http must not be null, undefined or empty."), Array.isArray(t8) && $(t8.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${t8.length}).`), this.path = t8, e.requestInit != null && e.requestInit.body != null) throw new Error("requestInit is expected to have no pre-existing body, but has one."); @@ -8822,9 +8823,9 @@ var Al = class { throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); let e = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); e.body = new FormData(); - let o = [{ paths: ["./model.weights.bin"], weights: t8.weightSpecs }], n = id(t8, o); + let o = [{ paths: ["./model.weights.bin"], weights: t8.weightSpecs }], n = sd(t8, o); if (e.body.append("model.json", new Blob([JSON.stringify(n)], { type: aX }), "model.json"), t8.weightData != null) { - let a = jt.join(t8.weightData); + let a = ir.join(t8.weightData); e.body.append("model.weights.bin", new Blob([a], { type: sX }), "model.weights.bin"); } let s = await this.fetch(this.path, e); @@ -8846,10 +8847,10 @@ var Al = class { let o = e.modelTopology, n = e.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 ic(e, (s) => this.loadWeights(s)); + return Jp(e, (s) => this.loadWeights(s)); } async loadWeights(t8) { - let e = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = iX(e), s = this.weightPathPrefix || o, a = ud(t8), i = [], p = []; + let e = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = iX(e), s = this.weightPathPrefix || o, a = ad(t8), i = [], p = []; for (let c of t8) for (let l of c.paths) this.weightUrlConverter != null ? p.push(this.weightUrlConverter(l)) : i.push(s + l + n); @@ -8858,33 +8859,33 @@ var Al = class { return [a, u]; } }; -Al.URL_SCHEME_REGEX = /^https?:\/\//; -function iX(r) { - let t8 = r.lastIndexOf("/"), e = r.lastIndexOf("?"), o = r.substring(0, t8), n = e > t8 ? r.substring(e) : ""; +El.URL_SCHEME_REGEX = /^https?:\/\//; +function iX(r15) { + let t8 = r15.lastIndexOf("/"), e = r15.lastIndexOf("?"), o = r15.substring(0, t8), n = e > t8 ? r15.substring(e) : ""; return [o + "/", n]; } -function of(r) { - return r.match(Al.URL_SCHEME_REGEX) != null; +function rf(r15) { + return r15.match(El.URL_SCHEME_REGEX) != null; } -var qN = (r, t8) => { +var jN = (r15, t8) => { if (typeof fetch == "undefined" && (t8 == null || t8.fetchFunc == null)) return null; { let e = true; - if (Array.isArray(r) ? e = r.every((o) => of(o)) : e = of(r), e) - return nf(r, t8); + if (Array.isArray(r15) ? e = r15.every((o) => rf(o)) : e = rf(r15), e) + return of(r15, t8); } return null; }; -ft.registerSaveRouter(qN); -ft.registerLoadRouter(qN); -function nf(r, t8) { - return new Al(r, t8); +qt.registerSaveRouter(jN); +qt.registerLoadRouter(jN); +function of(r15, t8) { + return new El(r15, t8); } -function jN(r, t8) { - return nf(r, t8); +function XN(r15, t8) { + return of(r15, t8); } -var Fl = class { +var Rl = class { constructor(t8) { this.modelArtifacts = t8; } @@ -8892,7 +8893,7 @@ var Fl = class { return this.modelArtifacts; } }; -var sf = class { +var nf = class { constructor(t8) { this.saveHandler = t8; } @@ -8905,71 +8906,71 @@ var aS = class { t8.load && (this.load = () => Promise.resolve(t8.load())), t8.save && (this.save = (e) => Promise.resolve(t8.save(e))); } }; -function XN(r, t8, e, o) { +function YN(r15, t8, e, o) { let n = arguments; return new aS(iS(...n)); } -function iS(r, t8, e, o) { - return arguments.length === 1 ? r.modelTopology != null || r.weightSpecs != null ? new Fl(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 Fl({ 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 Fl({ modelTopology: r, weightSpecs: t8, weightData: e, trainingConfig: o })); +function iS(r15, t8, e, o) { + return arguments.length === 1 ? r15.modelTopology != null || r15.weightSpecs != null ? new Rl(r15) : (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 Rl({ modelTopology: r15 })) : (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 Rl({ modelTopology: r15, weightSpecs: t8, weightData: e, trainingConfig: o })); } -function YN(r) { - return new sf(r); +function QN(r15) { + return new nf(r15); } -function QN(r) { - return new sf(r); +function ZN(r15) { + return new nf(r15); } -var JN = {}; -qe(JN, { confusionMatrix: () => ZN }); -function uX(r, t8, e) { - let o = v(r, "labels", "confusionMatrix"), n = v(t8, "predictions", "confusionMatrix"); +var eT = {}; +qe(eT, { confusionMatrix: () => JN }); +function uX(r15, t8, e) { + let o = v(r15, "labels", "confusionMatrix"), n = v(t8, "predictions", "confusionMatrix"); $(e == null || e > 0 && Number.isInteger(e), () => `If provided, numClasses must be a positive integer, but got ${e}`), $(o.rank === 1, () => `Expected the rank of labels to be 1, but got ${o.rank}`), $(n.rank === 1, () => `Expected the rank of predictions to be 1, but got ${n.rank}`), $(o.shape[0] === n.shape[0], () => `Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`), $(e > 0 && Number.isInteger(e), () => `numClasses is required to be a positive integer, but got ${e}`); - let s = El(We(o, "int32"), e), a = El(We(n, "int32"), e), i = yc(s), p = Ze(i, a); + let s = Tl(We(o, "int32"), e), a = Tl(We(n, "int32"), e), i = cc(s), p = Ze(i, a); return We(p, "int32"); } -var ZN = N({ confusionMatrix_: uX }); -var oT = {}; -qe(oT, { draw: () => gX, fromPixels: () => xX, fromPixelsAsync: () => dX, toPixels: () => hX }); -var cp; -var eT = false; -function tT(r, t8 = 3) { +var JN = N({ confusionMatrix_: uX }); +var nT = {}; +qe(nT, { draw: () => gX, fromPixels: () => xX, fromPixelsAsync: () => dX, toPixels: () => hX }); +var op; +var tT = false; +function rT(r15, t8 = 3) { if (t8 > 4) throw new Error("Cannot construct Tensor with more than 4 channels from pixels."); - if (r == null) + if (r15 == null) throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); let e = false, o = false, n = false, s = false, a = false, i = false; - if (r.data instanceof Uint8Array) + if (r15.data instanceof Uint8Array) e = true; - else if (typeof ImageData != "undefined" && r instanceof ImageData) + else if (typeof ImageData != "undefined" && r15 instanceof ImageData) o = true; - else if (typeof HTMLVideoElement != "undefined" && r instanceof HTMLVideoElement) + else if (typeof HTMLVideoElement != "undefined" && r15 instanceof HTMLVideoElement) n = true; - else if (typeof HTMLImageElement != "undefined" && r instanceof HTMLImageElement) + else if (typeof HTMLImageElement != "undefined" && r15 instanceof HTMLImageElement) s = true; - else if (r.getContext != null) + else if (r15.getContext != null) a = true; - else if (typeof ImageBitmap != "undefined" && r instanceof ImageBitmap) + 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 ${r.constructor.name}`); - if (tc(Mu, T.backendName) != null) { - let f = { pixels: r }, h = { numChannels: t8 }; - return T.runKernel(Mu, f, h); + 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 (qp(Eu, T.backendName) != null) { + let f = { pixels: r15 }, h = { numChannels: t8 }; + return T.runKernel(Eu, f, h); } - let [u, c] = n ? [r.videoWidth, r.videoHeight] : [r.width, r.height], l; + let [u, c] = n ? [r15.videoWidth, r15.videoHeight] : [r15.width, r15.height], l; if (a) - l = r.getContext("2d").getImageData(0, 0, u, c).data; + l = r15.getContext("2d").getImageData(0, 0, u, c).data; else if (o || e) - l = r.data; + l = r15.data; else if (s || n || i) { - if (cp == null) + if (op == null) if (typeof document == "undefined") if (typeof OffscreenCanvas != "undefined" && typeof OffscreenCanvasRenderingContext2D != "undefined") - cp = new OffscreenCanvas(1, 1).getContext("2d"); + op = new OffscreenCanvas(1, 1).getContext("2d"); else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported."); else - cp = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); - cp.canvas.width = u, cp.canvas.height = c, cp.drawImage(r, 0, 0, u, c), l = cp.getImageData(0, 0, u, c).data; + op = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); + op.canvas.width = u, op.canvas.height = c, op.drawImage(r15, 0, 0, u, c), l = op.getImageData(0, 0, u, c).data; } let m; if (t8 === 4) @@ -8981,55 +8982,55 @@ function tT(r, t8 = 3) { for (let g = 0; g < t8; ++g) m[h * t8 + g] = l[h * 4 + g]; } - return Xd(m, [c, u, t8], "int32"); + return qd(m, [c, u, t8], "int32"); } -function pX(r) { - return r != null && r.data instanceof Uint8Array; +function pX(r15) { + return r15 != null && r15.data instanceof Uint8Array; } function cX() { return typeof window != "undefined" && typeof ImageBitmap != "undefined" && window.hasOwnProperty("createImageBitmap"); } -function lX(r) { - return r != null && r.width !== 0 && r.height !== 0; +function lX(r15) { + return r15 != null && r15.width !== 0 && r15.height !== 0; } -function mX(r) { - return cX() && !(r instanceof ImageBitmap) && lX(r) && !pX(r); +function mX(r15) { + return cX() && !(r15 instanceof ImageBitmap) && lX(r15) && !pX(r15); } -async function dX(r, t8 = 3) { +async function dX(r15, t8 = 3) { let e = null; - if (A().getBool("WRAP_TO_IMAGEBITMAP") && mX(r)) { + if (A().getBool("WRAP_TO_IMAGEBITMAP") && mX(r15)) { let o; try { - o = await createImageBitmap(r, { premultiplyAlpha: "none" }); + o = await createImageBitmap(r15, { premultiplyAlpha: "none" }); } catch (n) { o = null; } - o != null && o.width === r.width && o.height === r.height ? e = o : e = r; + o != null && o.width === r15.width && o.height === r15.height ? e = o : e = r15; } else - e = r; - return tT(e, t8); + e = r15; + return rT(e, t8); } -function rT(r) { - if (r.rank !== 2 && r.rank !== 3) - throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r.rank}.`); - let t8 = r.rank === 2 ? 1 : r.shape[2]; +function oT(r15) { + if (r15.rank !== 2 && r15.rank !== 3) + throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r15.rank}.`); + let t8 = r15.rank === 2 ? 1 : r15.shape[2]; if (t8 > 4 || t8 === 2) throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t8}`); - if (r.dtype !== "float32" && r.dtype !== "int32") - throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`); + if (r15.dtype !== "float32" && r15.dtype !== "int32") + throw new Error(`Unsupported type for toPixels: ${r15.dtype}. Please use float32 or int32 tensors.`); } -function fX(r) { - let t8 = (r == null ? void 0 : r.alpha) || 1; +function fX(r15) { + let t8 = (r15 == null ? void 0 : r15.alpha) || 1; if (t8 > 1 || t8 < 0) throw new Error(`Alpha value ${t8} is suppoed to be in range [0 - 1].`); } -async function hX(r, t8) { - let e = v(r, "img", "toPixels"); - if (!(r instanceof ut)) { +async function hX(r15, t8) { + let e = v(r15, "img", "toPixels"); + if (!(r15 instanceof mt)) { let u = e; e = We(u, "int32"), u.dispose(); } - rT(e); + oT(e); let [o, n] = e.shape.slice(0, 2), s = e.rank === 2 ? 1 : e.shape[2], a = await e.data(), i = e.dtype === "float32" ? 255 : 1, p = new Uint8ClampedArray(n * o * 4); for (let u = 0; u < o * n; ++u) { let c = [0, 0, 0, 255]; @@ -9046,27 +9047,27 @@ async function hX(r, t8) { 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 (t8 != null) { - eT || tc(Pu, T.backendName) != null && (console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."), eT = true), t8.width = n, t8.height = o; + tT || qp(_u, T.backendName) != null && (console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."), tT = true), t8.width = n, t8.height = o; let u = t8.getContext("2d"), c = new ImageData(p, n, o); u.putImageData(c, 0, 0); } - return e !== r && e.dispose(), p; + return e !== r15 && e.dispose(), p; } -function gX(r, t8, e) { - let o = v(r, "img", "draw"); - if (!(r instanceof ut)) { +function gX(r15, t8, e) { + let o = v(r15, "img", "draw"); + if (!(r15 instanceof mt)) { let a = o; o = We(a, "int32"), a.dispose(); } - rT(o), fX(e == null ? void 0 : e.imageOptions); + oT(o), fX(e == null ? void 0 : e.imageOptions); let n = { image: o }, s = { canvas: t8, options: e }; - T.runKernel(Pu, n, s); + T.runKernel(_u, n, s); } -var xX = N({ fromPixels_: tT }); -var af = {}; -qe(af, { prepareAndValidate: () => nT }); -function nT(r, t8) { - let e = r.shape.length, o = t8.shape.length; +var xX = N({ fromPixels_: rT }); +var sf = {}; +qe(sf, { prepareAndValidate: () => sT }); +function sT(r15, t8) { + let e = r15.shape.length, o = t8.shape.length; if (e < 1) throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`); if (o < 1) @@ -9075,111 +9076,111 @@ function nT(r, t8) { throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t8.dtype}.`); if (t8.shape[o - 1] > e) throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t8.shape[o - 1]} vs. ${e}`); - if (He(r.shape) === 0) - throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`); + if (He(r15.shape) === 0) + throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r15.shape}.`); let n = t8.shape, s = n[n.length - 1], a = 1; for (let l = 0; l < n.length - 1; ++l) a *= n[l]; - let i = r.shape, p = n.slice(); + let i = r15.shape, p = n.slice(); p.pop(); let u = 1; for (let l = s; l < e; ++l) u *= i[l], p.push(i[l]); - let c = [...js(r.shape).map((l) => l / u), 1].slice(0, s); + let c = [...js(r15.shape).map((l) => l / u), 1].slice(0, s); return [p, a, u, c]; } -var ct = {}; -qe(ct, { assertParamsValid: () => bX, computeFlatOffset: () => vX, computeOutShape: () => wX, getNormalizedAxes: () => SX, isSliceContinous: () => IX, maskToAxes: () => CX, parseSliceParams: () => kX, sliceInfo: () => NX, startForAxis: () => mT, startIndicesWithElidedDims: () => pT, stopForAxis: () => dT, stopIndicesWithElidedDims: () => cT, stridesForAxis: () => lT, stridesWithElidedDims: () => aT }); +var pt = {}; +qe(pt, { assertParamsValid: () => bX, computeFlatOffset: () => vX, computeOutShape: () => wX, getNormalizedAxes: () => SX, isSliceContinous: () => IX, maskToAxes: () => CX, parseSliceParams: () => kX, sliceInfo: () => NX, startForAxis: () => dT, startIndicesWithElidedDims: () => cT, stopForAxis: () => fT, stopIndicesWithElidedDims: () => lT, stridesForAxis: () => mT, stridesWithElidedDims: () => iT }); var uS = -2; var yX = -1; -function bX(r, t8, e) { - let o = r.shape.length; +function bX(r15, t8, e) { + let o = r15.shape.length; $(o === t8.length, () => `Error in slice${o}D: Length of begin ${t8} must match the rank of the array (${o}).`), $(o === e.length, () => `Error in slice${o}D: Length of size ${e} must match the rank of the array (${o}).`); for (let n = 0; n < o; ++n) - $(t8[n] + e[n] <= r.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${t8[n] + e[n]}) would overflow input.shape[${n}] (${r.shape[n]})`); + $(t8[n] + e[n] <= r15.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${t8[n] + e[n]}) would overflow input.shape[${n}] (${r15.shape[n]})`); } -function CX(r) { +function CX(r15) { let t8 = [], e = 0; - for (; r > 0; ) - r & 1 && t8.push(e), r /= 2, e++; + for (; r15 > 0; ) + r15 & 1 && t8.push(e), r15 /= 2, e++; return t8; } -function wX(r, t8, e) { +function wX(r15, t8, e) { let o = []; - for (let n = 0; n < r.length; n++) - o[n] = Math.ceil((t8[n] - r[n]) / e[n]); + for (let n = 0; n < r15.length; n++) + o[n] = Math.ceil((t8[n] - r15[n]) / e[n]); return o; } -function aT(r, t8, e, o) { - let n = [...r]; +function iT(r15, t8, e, o) { + let n = [...r15]; for (let s = n.length; s < o.length; s++) n.push(1); for (let s = 0; s < e; s++) s === 0 ? n[t8] = 1 : (n.splice(t8, 0, 1), n.pop()); return n; } -function iT(r, t8, e) { - return e <= r ? e : e - (t8 - 1); +function uT(r15, t8, e) { + return e <= r15 ? e : e - (t8 - 1); } -function uT(r, t8) { +function pT(r15, t8) { let e = []; - for (let o = 0; o < r; o++) + for (let o = 0; o < r15; o++) e.push(t8 + o); return e; } -function SX(r, t8, e, o, n, s, a, i, p) { - let u = r.length, c = new Array(u), l = new Array(u), m = new Array(u); +function SX(r15, t8, e, o, n, s, a, i, p) { + let u = r15.length, c = new Array(u), l = new Array(u), m = new Array(u); if (t8.length && e > 0) { let d = t8[0], f = e + 1; - c = pT(a, d, f, o, r), l = cT(i, d, f, n, r), m = aT(s, d, f, r); + c = cT(a, d, f, o, r15), l = lT(i, d, f, n, r15), m = iT(s, d, f, r15); } else for (let d = 0; d < u; d++) - c[d] = mT(a, o, s, r, d, p), l[d] = dT(i, n, s, r, d, p), m[d] = lT(s, d, p); + c[d] = dT(a, o, s, r15, d, p), l[d] = fT(i, n, s, r15, d, p), m[d] = mT(s, d, p); return { begin: c, end: l, strides: m }; } -function pT(r, t8, e, o, n) { - let s = [...n], a = uT(e, t8); +function cT(r15, t8, e, o, n) { + let s = [...n], a = pT(e, t8); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = 0; else { - let p = iT(t8, e, i), u = o[p]; - r & 1 << p && (u = 0), s[i] = u; + let p = uT(t8, e, i), u = o[p]; + r15 & 1 << p && (u = 0), s[i] = u; } return s; } -function cT(r, t8, e, o, n) { - let s = [...n], a = uT(e, t8); +function lT(r15, t8, e, o, n) { + let s = [...n], a = pT(e, t8); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = Number.MAX_SAFE_INTEGER; else { - let p = iT(t8, e, i), u = o[p]; - r & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; + let p = uT(t8, e, 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] = qp(0, s[i], n[i]); + s[i] < 0 && (s[i] += p), s[i] = Bp(0, s[i], n[i]); } return s; } -function lT(r, t8, e) { - let o = r[t8]; +function mT(r15, t8, e) { + let o = r15[t8]; return (e & 1 << t8 || o == null) && (o = 1), o; } -function mT(r, t8, e, o, n, s) { +function dT(r15, t8, e, o, n, s) { let a = t8[n], i = e[n] || 1; - (r & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MIN_SAFE_INTEGER : a = Number.MAX_SAFE_INTEGER); + (r15 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MIN_SAFE_INTEGER : a = Number.MAX_SAFE_INTEGER); let p = o[n]; - return a < 0 && (a += p), a = qp(0, a, p - 1), a; + return a < 0 && (a += p), a = Bp(0, a, p - 1), a; } -function dT(r, t8, e, o, n, s) { +function fT(r15, t8, e, o, n, s) { let a = t8[n], i = e[n] || 1; - (r & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MAX_SAFE_INTEGER : a = Number.MIN_SAFE_INTEGER); + (r15 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MAX_SAFE_INTEGER : a = Number.MIN_SAFE_INTEGER); let p = o[n]; - return a < 0 && (a += p), i > 0 ? a = qp(0, a, p) : a = qp(-1, a, p - 1), a; + return a < 0 && (a += p), i > 0 ? a = Bp(0, a, p) : a = Bp(-1, a, p - 1), a; } -function IX(r, t8, e) { +function IX(r15, t8, e) { let o = e.length; for (let n = 0; n < e.length; n++) if (e[n] > 1) { @@ -9187,25 +9188,25 @@ function IX(r, t8, e) { break; } for (let n = o + 1; n < e.length; n++) - if (t8[n] > 0 || e[n] !== r[n]) + if (t8[n] > 0 || e[n] !== r15[n]) return false; return true; } -function vX(r, t8) { - let e = r.length > 0 ? r[r.length - 1] : 1; - for (let o = 0; o < r.length - 1; o++) - e += r[o] * t8[o]; +function vX(r15, t8) { + let e = r15.length > 0 ? r15[r15.length - 1] : 1; + for (let o = 0; o < r15.length - 1; o++) + e += r15[o] * t8[o]; return e; } -function kX(r, t8, e) { - let o, n = r.shape.length; +function kX(r15, t8, e) { + let o, n = r15.shape.length; typeof t8 == "number" ? o = [t8, ...new Array(n - 1).fill(0)] : t8.length < n ? o = t8.concat(new Array(n - t8.length).fill(0)) : o = t8.slice(), o.forEach((a) => { $(a !== -1, () => "slice() does not support negative begin indexing."); }); let s; - return e == null ? s = new Array(n).fill(-1) : typeof e == "number" ? s = [e, ...new Array(n - 1).fill(-1)] : e.length < n ? s = e.concat(new Array(n - e.length).fill(-1)) : s = e, s = s.map((a, i) => a >= 0 ? a : ($(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r.shape[i] - o[i])), [o, s]; + return e == null ? s = new Array(n).fill(-1) : typeof e == "number" ? s = [e, ...new Array(n - 1).fill(-1)] : e.length < n ? s = e.concat(new Array(n - e.length).fill(-1)) : s = e, s = s.map((a, i) => a >= 0 ? a : ($(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r15.shape[i] - o[i])), [o, s]; } -function NX(r, t8, e, o, n, s, a, i, p) { +function NX(r15, t8, e, o, n, s, a, i, p) { let u; if (o == null ? (u = new Array(t8.length), u.fill(1)) : u = o, a != null && a & a - 1) throw new Error("Multiple ellipses in slice is not allowed."); @@ -9213,13 +9214,13 @@ function NX(r, t8, e, o, n, s, a, i, p) { 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: r.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; + let m = { dims: r15.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; TX(l, m); let d = true, f = true, h = true, g = [], x = []; - for (let C = 0; C < r.length; ++C) { + for (let C = 0; C < r15.length; ++C) { if (m.strides[C] === 0) throw Error(`strides[${C}] must be non-zero`); - let S = !!(m.shrinkAxisMask & 1 << C), k = r[C]; + let S = !!(m.shrinkAxisMask & 1 << C), k = r15[C]; if (k === -1) { g.push(S ? 1 : -1); continue; @@ -9235,7 +9236,7 @@ function NX(r, t8, e, o, n, s, a, i, p) { 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] = sT(m.begin[C], 0, m.strides[C], k, _, E), m.end[C] = sT(m.end[C], 1, m.strides[C], k, _, E); + m.begin[C] = aT(m.begin[C], 0, m.strides[C], k, _, E), m.end[C] = aT(m.end[C], 1, m.strides[C], k, _, E); 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 @@ -9253,183 +9254,183 @@ function NX(r, t8, e, o, n, s, a, i, p) { } return { finalShapeSparse: x.filter((C, S) => m.finalShapeGatherIndices[S] !== uS), finalShape: x, isIdentity: d, sliceDim0: f, isSimpleSlice: h, begin: m.begin, end: m.end, strides: m.strides }; } -function TX(r, t8) { +function TX(r15, t8) { t8.beginMask = 0, t8.endMask = 0, t8.shrinkAxisMask = 0; let e = 0; - t8.beginValid = r.begin != null, t8.endValid = r.end != null, t8.begin = new Array(t8.dims), t8.end = new Array(t8.dims), t8.strides = new Array(t8.dims), t8.finalShapeGatherIndices = [], t8.finalShapeGatherIndicesSparse = [], t8.inputShapeGatherIndicesSparse = new Array(t8.dims); - for (let o = 0; o < r.dims; o++) - if (1 << o & r.ellipsisMask) { - let n = Math.min(t8.dims - (r.dims - o) + 1 + r.numAddAxisAfterEllipsis, t8.dims); + t8.beginValid = r15.begin != null, t8.endValid = r15.end != null, t8.begin = new Array(t8.dims), t8.end = new Array(t8.dims), t8.strides = new Array(t8.dims), t8.finalShapeGatherIndices = [], t8.finalShapeGatherIndicesSparse = [], t8.inputShapeGatherIndicesSparse = new Array(t8.dims); + for (let o = 0; o < r15.dims; o++) + if (1 << o & r15.ellipsisMask) { + let n = Math.min(t8.dims - (r15.dims - o) + 1 + r15.numAddAxisAfterEllipsis, t8.dims); for (; e < n; e++) t8.begin[e] = 0, t8.end[e] = 0, t8.strides[e] = 1, t8.beginMask |= 1 << e, t8.endMask |= 1 << e, t8.finalShapeGatherIndices.push(e), t8.finalShapeGatherIndicesSparse.push(-1), t8.inputShapeGatherIndicesSparse[e] = o; - } else if (1 << o & r.newAxisMask) + } else if (1 << o & r15.newAxisMask) t8.finalShapeGatherIndices.push(uS), t8.finalShapeGatherIndicesSparse.push(-1); else { if (e === t8.begin.length) throw Error(`Index out of range using input dim ${e}; input has only ${t8.dims} dims, ${t8.begin.length}.`); - r.begin != null && (t8.begin[e] = r.begin[o]), r.end != null && (t8.end[e] = r.end[o]), t8.strides[e] = r.strides[o], r.beginMask & 1 << o && (t8.beginMask |= 1 << e), r.endMask & 1 << o && (t8.endMask |= 1 << e), r.shrinkAxisMask & 1 << o ? (t8.finalShapeGatherIndices.push(yX), t8.finalShapeGatherIndicesSparse.push(-1), t8.shrinkAxisMask |= 1 << e) : (t8.finalShapeGatherIndices.push(e), t8.finalShapeGatherIndicesSparse.push(o)), t8.inputShapeGatherIndicesSparse[e] = o, e++; + r15.begin != null && (t8.begin[e] = r15.begin[o]), r15.end != null && (t8.end[e] = r15.end[o]), t8.strides[e] = r15.strides[o], r15.beginMask & 1 << o && (t8.beginMask |= 1 << e), r15.endMask & 1 << o && (t8.endMask |= 1 << e), r15.shrinkAxisMask & 1 << o ? (t8.finalShapeGatherIndices.push(yX), t8.finalShapeGatherIndicesSparse.push(-1), t8.shrinkAxisMask |= 1 << e) : (t8.finalShapeGatherIndices.push(e), t8.finalShapeGatherIndicesSparse.push(o)), t8.inputShapeGatherIndicesSparse[e] = o, e++; } } -function sT(r, t8, e, o, n, s) { +function aT(r15, t8, e, o, n, s) { if (n[t8]) return e > 0 ? s[t8] : s[t8 + 1 & 1]; { - let a = r < 0 ? o + r : r; + let a = r15 < 0 ? o + r15 : r15; return a < s[0] ? s[0] : a > s[1] ? s[1] : a; } } -var _X = "4.11.0"; -var Pl = class { +var _X = "4.14.0"; +var Dl = class { static sgd(t8) { - return new mi(t8); + return new li(t8); } static momentum(t8, e, o = false) { - return new up(t8, e, o); + return new tp(t8, e, o); } static rmsprop(t8, e = 0.9, o = 0, n = null, s = false) { - return new pp(t8, e, o, n, s); + return new rp(t8, e, o, n, s); } static adam(t8 = 1e-3, e = 0.9, o = 0.999, n = null) { - return new ap(t8, e, o, n); + return new Ju(t8, e, o, n); } static adadelta(t8 = 1e-3, e = 0.95, o = null) { - return new np(t8, e, o); + return new Qu(t8, e, o); } static adamax(t8 = 2e-3, e = 0.9, o = 0.999, n = null, s = 0) { - return new ip(t8, e, o, n, s); + return new ep(t8, e, o, n, s); } static adagrad(t8, e = 0.1) { - return new sp(t8, e); + return new Zu(t8, e); } }; -var TGe = Pl; -var $X = (() => typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r) => r())(); +var TGe = Dl; +var $X = typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r15) => r15(); function pS() { - return new Promise((r) => $X(() => r())); + return new Promise((r15) => $X(() => r15())); } var w = {}; -qe(w, { ERF_A1: () => KX, ERF_A2: () => qX, ERF_A3: () => jX, ERF_A4: () => XX, ERF_A5: () => YX, ERF_P: () => HX, PARALLELIZE_THRESHOLD: () => uf, RowPartitionType: () => Pa, SELU_SCALE: () => GX, SELU_SCALEALPHA: () => UX, applyActivation: () => rp, assertAndGetBroadcastShape: () => rt, assertAxesAreInnerMostDims: () => tK, assertParamsConsistent: () => EX, assignToTypedArray: () => r5, axesAreInnerMostDims: () => Bw, calculateShapes: () => V1, checkEinsumDimSizes: () => u5, checkPadOnDimRoundingMode: () => Bt, combineLocations: () => x2, combineRaggedTensorToTensorShapes: () => DX, complexWithEvenIndex: () => JX, complexWithOddIndex: () => e5, computeConv2DInfo: () => Hu, computeConv3DInfo: () => Mk, computeDefaultPad: () => Lw, computeDilation2DInfo: () => J4, computeOptimalWindowSize: () => OX, computeOutAndReduceShapes: () => eK, computeOutShape: () => RX, computePool2DInfo: () => Mw, computePool3DInfo: () => eH, convertConv2DDataFormat: () => Lk, decodeEinsumEquation: () => a5, eitherStridesOrDilationsAreOne: () => xr, expandShapeToKeepDim: () => ii, exponent: () => n5, exponents: () => o5, fromStringArrayToUint8: () => $5, fromUint8ToStringArray: () => _5, getAxesPermutation: () => rK, getBroadcastDims: () => m2, getComplexWithIndex: () => t5, getEinsumComputePath: () => p5, getEinsumPermutation: () => i5, getFusedBiasGradient: () => tp, getFusedDyActivation: () => ep, getImageCenter: () => MX, getInnerMostAxes: () => nK, getPermuted: () => BX, getRaggedRank: () => FX, getReductionAxes: () => yd, getReshaped: () => LX, getReshapedPermuted: () => zX, getRowPartitionTypesHelper: () => AX, getSliceBeginCoords: () => VX, getSliceSize: () => WX, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => d5, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => f5, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => h5, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => y5, getSparseReshapeInputOutputMismatchErrorMessage: () => C5, getSparseReshapeInputOutputMultipleErrorMessage: () => b5, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => g5, getSparseReshapeNegativeOutputDimErrorMessage: () => x5, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => v5, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => w5, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => S5, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => I5, getUndoAxesPermutation: () => oK, isIdentityPermutation: () => c5, log: () => jG, mergeRealAndImagArrays: () => QX, prepareAndValidate: () => nT, prepareSplitSize: () => m5, segment_util: () => lS, shouldFuse: () => op, slice_util: () => ct, splitRealAndImagArrays: () => ZX, stridesOrDilationsArePositive: () => Ta, tupleValuesAreOne: () => Gu, upcastType: () => dt, validateDefaultValueShape: () => PX, validateInput: () => xc, validateUpdateShape: () => Yw, warn: () => Ia }); -function EX(r, t8) { - let e = r[0].length; - r.forEach((n, s) => { +qe(w, { ERF_A1: () => KX, ERF_A2: () => qX, ERF_A3: () => jX, ERF_A4: () => XX, ERF_A5: () => YX, ERF_P: () => HX, PARALLELIZE_THRESHOLD: () => af, RowPartitionType: () => Fa, SELU_SCALE: () => GX, SELU_SCALEALPHA: () => UX, applyActivation: () => Xu, assertAndGetBroadcastShape: () => rt, assertAxesAreInnerMostDims: () => tK, assertParamsConsistent: () => EX, assignToTypedArray: () => r52, axesAreInnerMostDims: () => Bw, calculateShapes: () => W1, checkEinsumDimSizes: () => u5, checkPadOnDimRoundingMode: () => Lt, combineLocations: () => y2, combineRaggedTensorToTensorShapes: () => DX, complexWithEvenIndex: () => JX, complexWithOddIndex: () => e5, computeConv2DInfo: () => Lu, computeConv3DInfo: () => Lk, computeDefaultPad: () => Lw, computeDilation2DInfo: () => J4, computeOptimalWindowSize: () => OX, computeOutAndReduceShapes: () => eK, computeOutShape: () => RX, computePool2DInfo: () => Mw, computePool3DInfo: () => eH, convertConv2DDataFormat: () => Bk, decodeEinsumEquation: () => a5, eitherStridesOrDilationsAreOne: () => gr, expandShapeToKeepDim: () => ai, exponent: () => n5, exponents: () => o5, fromStringArrayToUint8: () => $5, fromUint8ToStringArray: () => _5, getAxesPermutation: () => rK, getBroadcastDims: () => d2, getComplexWithIndex: () => t5, getEinsumComputePath: () => p5, getEinsumPermutation: () => i5, getFusedBiasGradient: () => ju, getFusedDyActivation: () => qu, getImageCenter: () => MX, getInnerMostAxes: () => nK, getPermuted: () => BX, getRaggedRank: () => FX, getReductionAxes: () => gd, getReshaped: () => LX, getReshapedPermuted: () => zX, getRowPartitionTypesHelper: () => AX, getSliceBeginCoords: () => VX, getSliceSize: () => WX, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => d5, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => f5, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => h5, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => y5, getSparseReshapeInputOutputMismatchErrorMessage: () => C5, getSparseReshapeInputOutputMultipleErrorMessage: () => b5, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => g5, getSparseReshapeNegativeOutputDimErrorMessage: () => x5, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => v5, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => w5, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => S5, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => I5, getUndoAxesPermutation: () => oK, isIdentityPermutation: () => c5, log: () => XG, mergeRealAndImagArrays: () => QX, prepareAndValidate: () => sT, prepareSplitSize: () => m5, segment_util: () => lS, shouldFuse: () => Yu, slice_util: () => pt, splitRealAndImagArrays: () => ZX, stridesOrDilationsArePositive: () => Ta, tupleValuesAreOne: () => Mu, upcastType: () => dt, validateDefaultValueShape: () => PX, validateInput: () => pc, validateUpdateShape: () => Yw, warn: () => Ia }); +function EX(r15, t8) { + let e = r15[0].length; + r15.forEach((n, s) => { $(n.length === e, () => `Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`); }), $(t8 >= 0 && t8 < e, () => `Error in concat${e}D: axis must be between 0 and ${e - 1}.`); - let o = r[0]; - r.forEach((n, s) => { + let o = r15[0]; + r15.forEach((n, s) => { for (let a = 0; a < e; a++) $(a === t8 || n[a] === o[a], () => `Error in concat${e}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`); }); } -function RX(r, t8) { - let e = r[0].slice(); - for (let o = 1; o < r.length; o++) - e[t8] += r[o][t8]; +function RX(r15, t8) { + let e = r15[0].slice(); + for (let o = 1; o < r15.length; o++) + e[t8] += r15[o][t8]; return e; } -var Pa; -(function(r) { - r[r.FIRST_DIM_SIZE = 0] = "FIRST_DIM_SIZE", r[r.VALUE_ROWIDS = 1] = "VALUE_ROWIDS", r[r.ROW_LENGTHS = 2] = "ROW_LENGTHS", r[r.ROW_SPLITS = 3] = "ROW_SPLITS", r[r.ROW_LIMITS = 4] = "ROW_LIMITS", r[r.ROW_STARTS = 5] = "ROW_STARTS"; -})(Pa || (Pa = {})); -function DX(r, t8, e) { +var Fa; +(function(r15) { + r15[r15.FIRST_DIM_SIZE = 0] = "FIRST_DIM_SIZE", r15[r15.VALUE_ROWIDS = 1] = "VALUE_ROWIDS", r15[r15.ROW_LENGTHS = 2] = "ROW_LENGTHS", r15[r15.ROW_SPLITS = 3] = "ROW_SPLITS", r15[r15.ROW_LIMITS = 4] = "ROW_LIMITS", r15[r15.ROW_STARTS = 5] = "ROW_STARTS"; +})(Fa || (Fa = {})); +function DX(r15, t8, e) { let o = new Array(); if (e == null && t8 == null) return o; if (t8 == null) - for (; o.length < r + e.length; ) + for (; o.length < r15 + e.length; ) o.push(-1); else o = t8.slice(); if (e == null) return o; - if (r + e.length !== o.length) - throw new Error(`rt input.shape and shape=${t8} are incompatible: rt input.rank = ${r + e.length}, but shape.rank = ${o.length}`); + if (r15 + e.length !== o.length) + throw new Error(`rt input.shape and shape=${t8} are incompatible: rt input.rank = ${r15 + e.length}, but shape.rank = ${o.length}`); for (let n = 1; n < e.length; ++n) { let s = e[n], a = o[o.length - e.length + n], i = o[a]; if (s >= 0) if (i >= 0) { if (i !== s) - throw new Error(`rt input.shape and shape=${t8} are incompatible: rt input.shape[${n + r}] = ${s} but shape[${n + r}] = ${i}`); + throw new Error(`rt input.shape and shape=${t8} are incompatible: rt input.shape[${n + r15}] = ${s} but shape[${n + r15}] = ${i}`); } else o[a] = s; } return o; } -function AX(r) { - let t8 = { FIRST_DIM_SIZE: Pa.FIRST_DIM_SIZE, VALUE_ROWIDS: Pa.VALUE_ROWIDS, ROW_LENGTHS: Pa.ROW_LENGTHS, ROW_SPLITS: Pa.ROW_SPLITS, ROW_LIMITS: Pa.ROW_LIMITS, ROW_STARTS: Pa.ROW_STARTS }, e = []; - for (let o of r) +function AX(r15) { + let t8 = { 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 }, e = []; + for (let o of r15) if (o in t8) e.push(t8[o]); else break; return e; } -function FX(r) { - return r.length === 0 ? 0 : r[0] === Pa.FIRST_DIM_SIZE ? r.length - 1 : r.length; +function FX(r15) { + return r15.length === 0 ? 0 : r15[0] === Fa.FIRST_DIM_SIZE ? r15.length - 1 : r15.length; } -function PX(r, t8) { - if (r == null || t8 == null) +function PX(r15, t8) { + if (r15 == null || t8 == null) return; - let e = r.length, o = t8.length; + let e = r15.length, o = t8.length; if (e >= o) - throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t8}, are incompatible: defaultValue.rank = ${e} must be less than ragged tensor input flatValues.rank = ${o})`); + throw new Error(`defaultValue.shape=${r15} and ragged tensor flatValues.shape=${t8}, are incompatible: defaultValue.rank = ${e} must be less than ragged tensor input flatValues.rank = ${o})`); for (let n = 0; n < Math.min(e, o - 1); ++n) { - let s = r[n], a = t8[n + 1]; + let s = r15[n], a = t8[n + 1]; if (s >= 0 && a >= 0 && s !== 1 && s !== a) - throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${t8} are incompatible: defaultValue.shape[${n - r.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r.length}] = ${a}`); + throw new Error(`defaultValue.shape=${r15}, and ragged tensor input flatValues.shape=${t8} are incompatible: defaultValue.shape[${n - r15.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r15.length}] = ${a}`); } } -var uf = 30; -function OX(r) { - return r <= uf ? r : Xp(r, Math.floor(Math.sqrt(r))); +var af = 30; +function OX(r15) { + return r15 <= af ? r15 : Vp(r15, Math.floor(Math.sqrt(r15))); } -function MX(r, t8, e) { - let o = e * (typeof r == "number" ? r : r[0]), n = t8 * (typeof r == "number" ? r : r[1]); +function MX(r15, t8, e) { + let o = e * (typeof r15 == "number" ? r15 : r15[0]), n = t8 * (typeof r15 == "number" ? r15 : r15[1]); return [o, n]; } -function LX(r, t8, e, o = true) { +function LX(r15, t8, e, o = true) { let n = []; if (o) - n = n.concat(t8.slice(0)), n.push(r[0] / e), n = n.concat(r.slice(1)); + n = n.concat(t8.slice(0)), n.push(r15[0] / e), n = n.concat(r15.slice(1)); else { - n = n.concat(r[0]); + n = n.concat(r15[0]); let s = t8.length; for (let a = 0; a < s; ++a) - n = n.concat([r[a + 1] / t8[a], t8[a]]); - n = n.concat(r.slice(s + 1)); + n = n.concat([r15[a + 1] / t8[a], t8[a]]); + n = n.concat(r15.slice(s + 1)); } return n; } -function BX(r, t8, e = true) { +function BX(r15, t8, e = true) { let o = []; if (e) { o.push(t8); - for (let n = t8 + 1; n < r; ++n) + for (let n = t8 + 1; n < r15; ++n) n <= 2 * t8 ? (o.push(n), o.push(n - (t8 + 1))) : o.push(n); } else { let n = [], s = []; - for (let a = 1; a < r; ++a) + for (let a = 1; a < r15; ++a) a >= t8 * 2 + 1 || a % 2 === 1 ? s.push(a) : n.push(a); o.push(...n), o.push(0), o.push(...s); } return o; } -function zX(r, t8, e, o = true) { +function zX(r15, t8, e, o = true) { let n = []; - o ? n.push(r[0] / e) : n.push(r[0] * e); - for (let s = 1; s < r.length; ++s) - s <= t8.length ? o ? n.push(t8[s - 1] * r[s]) : n.push(r[s] / t8[s - 1]) : n.push(r[s]); + o ? n.push(r15[0] / e) : n.push(r15[0] * e); + for (let s = 1; s < r15.length; ++s) + s <= t8.length ? o ? n.push(t8[s - 1] * r15[s]) : n.push(r15[s] / t8[s - 1]) : n.push(r15[s]); return n; } -function VX(r, t8) { +function VX(r15, t8) { let e = [0]; for (let o = 0; o < t8; ++o) - e.push(r[o][0]); + e.push(r15[o][0]); return e; } -function WX(r, t8, e) { - let o = r.slice(0, 1); +function WX(r15, t8, e) { + let o = r15.slice(0, 1); for (let n = 0; n < e; ++n) - o.push(r[n + 1] - t8[n][0] - t8[n][1]); + o.push(r15[n + 1] - t8[n][0] - t8[n][1]); return o; } var UX = 1.7580993408473768; @@ -9440,65 +9441,65 @@ var qX = -0.284496736; var jX = 1.421413741; var XX = -1.453152027; var YX = 1.061405429; -function QX(r, t8) { - if (r.length !== t8.length) - throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r.length}, imag: ${t8.length}.`); - let e = new Float32Array(r.length * 2); +function QX(r15, t8) { + if (r15.length !== t8.length) + throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r15.length}, imag: ${t8.length}.`); + let e = new Float32Array(r15.length * 2); for (let o = 0; o < e.length; o += 2) - e[o] = r[o / 2], e[o + 1] = t8[o / 2]; + e[o] = r15[o / 2], e[o + 1] = t8[o / 2]; return e; } -function ZX(r) { - let t8 = new Float32Array(r.length / 2), e = new Float32Array(r.length / 2); - for (let o = 0; o < r.length; o += 2) - t8[o / 2] = r[o], e[o / 2] = r[o + 1]; +function ZX(r15) { + let t8 = new Float32Array(r15.length / 2), e = new Float32Array(r15.length / 2); + for (let o = 0; o < r15.length; o += 2) + t8[o / 2] = r15[o], e[o / 2] = r15[o + 1]; return { real: t8, imag: e }; } -function JX(r) { - let t8 = Math.ceil(r.length / 4), e = new Float32Array(t8), o = new Float32Array(t8); - for (let n = 0; n < r.length; n += 4) - e[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; +function JX(r15) { + let t8 = Math.ceil(r15.length / 4), e = new Float32Array(t8), o = new Float32Array(t8); + for (let n = 0; n < r15.length; n += 4) + e[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: e, imag: o }; } -function e5(r) { - let t8 = Math.floor(r.length / 4), e = new Float32Array(t8), o = new Float32Array(t8); - for (let n = 2; n < r.length; n += 4) - e[Math.floor(n / 4)] = r[n], o[Math.floor(n / 4)] = r[n + 1]; +function e5(r15) { + let t8 = Math.floor(r15.length / 4), e = new Float32Array(t8), o = new Float32Array(t8); + for (let n = 2; n < r15.length; n += 4) + e[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: e, imag: o }; } -function t5(r, t8) { - let e = r[t8 * 2], o = r[t8 * 2 + 1]; +function t5(r15, t8) { + let e = r15[t8 * 2], o = r15[t8 * 2 + 1]; return { real: e, imag: o }; } -function r5(r, t8, e, o) { - r[o * 2] = t8, r[o * 2 + 1] = e; +function r52(r15, t8, e, o) { + r15[o * 2] = t8, r15[o * 2 + 1] = e; } -function o5(r, t8) { - let e = new Float32Array(r / 2), o = new Float32Array(r / 2); - for (let n = 0; n < Math.ceil(r / 2); n++) { - let s = (t8 ? 2 : -2) * Math.PI * (n / r); +function o5(r15, t8) { + let e = new Float32Array(r15 / 2), o = new Float32Array(r15 / 2); + for (let n = 0; n < Math.ceil(r15 / 2); n++) { + let s = (t8 ? 2 : -2) * Math.PI * (n / r15); e[n] = Math.cos(s), o[n] = Math.sin(s); } return { real: e, imag: o }; } -function n5(r, t8, e) { - let o = (e ? 2 : -2) * Math.PI * (r / t8), n = Math.cos(o), s = Math.sin(o); +function n5(r15, t8, e) { + let o = (e ? 2 : -2) * Math.PI * (r15 / t8), n = Math.cos(o), s = Math.sin(o); return { real: n, imag: s }; } var cS = "->"; var s5 = /->/g; -var fT = ","; -var hT = "..."; -function a5(r, t8) { - r = r.replace(/\s/g, ""); - let e = (r.length - r.replace(s5, "").length) / cS.length; +var hT = ","; +var gT = "..."; +function a5(r15, t8) { + r15 = r15.replace(/\s/g, ""); + let e = (r15.length - r15.replace(s5, "").length) / cS.length; if (e < 1) throw new Error("Equations without an arrow are not supported."); if (e > 1) throw new Error(`Equation must contain exactly one arrow ("${cS}").`); - let [o, n] = r.split(cS); - $(o.indexOf(hT) === -1, () => `The ellipsis notation ("${hT}") is not supported yet.`); - let s = o.split(fT), a = s.length; + let [o, n] = r15.split(cS); + $(o.indexOf(gT) === -1, () => `The ellipsis notation ("${gT}") is not supported yet.`); + let s = o.split(hT), a = s.length; if (t8 !== a) throw new Error(`Expected ${a} input tensors, received ${t8}`); if (a > 2) @@ -9512,7 +9513,7 @@ function a5(r, t8) { } for (let m = 0; m < o.length; ++m) { let d = o[m]; - i.indexOf(d) === -1 && d !== fT && i.push(d); + i.indexOf(d) === -1 && d !== hT && i.push(d); } let p = new Array(s.length); for (let m = 0; m < a; ++m) { @@ -9527,27 +9528,27 @@ function a5(r, t8) { l.push(m); return { allDims: i, summedDims: l, idDims: p }; } -function i5(r, t8) { - let e = new Array(r); +function i5(r15, t8) { + let e = new Array(r15); e.fill(-1); for (let n = 0; n < t8.length; ++n) e[t8[n]] = n; let o = []; - for (let n = 0; n < r; ++n) + for (let n = 0; n < r15; ++n) e[n] === -1 && o.push(n); return e = e.filter((n) => n !== -1), { permutationIndices: e, expandDims: o }; } -function u5(r, t8, e) { - let o = new Array(r); +function u5(r15, t8, e) { + let o = new Array(r15); for (let n = 0; n < e.length; ++n) { let s = e[n].shape; for (let a = 0; a < t8[n].length; ++a) o[t8[n][a]] === void 0 ? o[t8[n][a]] = s[a] : $(o[t8[n][a]] === s[a], () => `Expected dimension ${o[t8[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`); } } -function p5(r, t8) { - let e = r, o = [], n = 0; - r.length === 0 && e.push(-1), n = r.length + 1; +function p5(r15, t8) { + let e = r15, o = [], n = 0; + r15.length === 0 && e.push(-1), n = r15.length + 1; for (let a = 0; a < n; ++a) o.push([]); let s = []; @@ -9558,58 +9559,58 @@ function p5(r, t8) { } return { path: e, steps: o }; } -function c5(r) { - return r.every((t8, e) => t8 === e); +function c5(r15) { + return r15.every((t8, e) => t8 === e); } -function l5(r, t8) { +function l5(r15, t8) { let e = []; - for (let o = 0; o < r.length; ++o) - (r[o].length === 0 || r[o].indexOf(t8) !== -1 || t8 === -1) && e.push(o); + for (let o = 0; o < r15.length; ++o) + (r15[o].length === 0 || r15[o].indexOf(t8) !== -1 || t8 === -1) && e.push(o); return e; } -function m5(r, t8, e = 0) { +function m5(r15, t8, e = 0) { let o = []; if (typeof t8 == "number") - $(r.shape[e] % t8 === 0, () => "Number of splits must evenly divide the axis."), o = new Array(t8).fill(r.shape[e] / t8); + $(r15.shape[e] % t8 === 0, () => "Number of splits must evenly divide the axis."), o = new Array(t8).fill(r15.shape[e] / t8); else { let n = t8.reduce((a, i) => (i === -1 && (a += 1), a), 0); $(n <= 1, () => "There should be only one negative value in split array."); let s = t8.indexOf(-1); if (s !== -1) { let a = t8.reduce((i, p) => p > 0 ? i + p : i); - t8[s] = r.shape[e] - a; + t8[s] = r15.shape[e] - a; } - $(r.shape[e] === t8.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = t8; + $(r15.shape[e] === t8.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = t8; } return o; } -function d5(r) { +function d5(r15) { return `Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${r}`; + indices.shape[0] = ${r15}`; } -function f5(r, t8) { - return `indices(${r}, 0) is invalid: ${t8} < 0`; +function f5(r15, t8) { + return `indices(${r15}, 0) is invalid: ${t8} < 0`; } -function h5(r, t8, e) { - return `indices(${r}, 0) is invalid: ${t8} >= ${e}`; +function h5(r15, t8, e) { + return `indices(${r15}, 0) is invalid: ${t8} >= ${e}`; } -function g5(r, t8) { - return `only one output dimension may be -1, not both ${r} and ${t8}`; +function g5(r15, t8) { + return `only one output dimension may be -1, not both ${r15} and ${t8}`; } -function x5(r, t8) { - return `size ${r} must be non-negative, not ${t8}`; +function x5(r15, t8) { + return `size ${r15} must be non-negative, not ${t8}`; } function y5() { return "reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"; } -function b5(r, t8) { - let e = He(r), o = He(t8); +function b5(r15, t8) { + let e = He(r15), o = He(t8); return `Input to reshape is a SparseTensor with ${e} - dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${t8}`; + dense values, but the requested shape requires a multiple of ${o}. inputShape=${r15} outputShape= ${t8}`; } -function C5(r, t8) { - let e = He(r), o = He(t8); - return `Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${t8}`; +function C5(r15, t8) { + let e = He(r15), o = He(t8); + return `Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r15} outputShape=${t8}`; } function w5() { return "segment ids must be >= 0"; @@ -9617,28 +9618,28 @@ function w5() { function S5() { return "segment ids are not increasing"; } -function I5(r, t8) { - return `Segment id ${r} out of range [0, ${t8}), possibly because segmentIds input is not sorted.`; +function I5(r15, t8) { + return `Segment id ${r15} out of range [0, ${t8}), possibly because segmentIds input is not sorted.`; } -function v5(r, t8, e) { - return `Bad: indices[${r}] == ${t8} out of range [0, ${e})`; +function v5(r15, t8, e) { + return `Bad: indices[${r15}] == ${t8} out of range [0, ${e})`; } var lS = {}; qe(lS, { collectGatherOpShapeInfo: () => T5, computeOutShape: () => N5, segOpComputeOptimalWindowSize: () => k5 }); -function k5(r, t8) { +function k5(r15, t8) { let e = false, o; - for (r <= uf ? (o = r, e = true) : o = Xp(r, Math.floor(Math.sqrt(r))); !e; ) - o > t8 || o === r ? e = true : o = Xp(r, o + 1); + for (r15 <= af ? (o = r15, e = true) : o = Vp(r15, Math.floor(Math.sqrt(r15))); !e; ) + o > t8 || o === r15 ? e = true : o = Vp(r15, o + 1); return o; } -function N5(r, t8, e) { - let o = [], n = r.length; +function N5(r15, t8, e) { + let o = [], n = r15.length; for (let s = 0; s < n; s++) - s !== t8 ? o.push(r[s]) : o.push(e); + s !== t8 ? o.push(r15[s]) : o.push(e); return o; } -function T5(r, t8, e, o) { - let n = t8.shape.length, s = r.shape.length; +function T5(r15, t8, e, o) { + let n = t8.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) @@ -9647,119 +9648,119 @@ function T5(r, t8, e, o) { if (e < o) throw new Error(`batchDims (${o}) must be less than or equal to axis (${e}).`); for (let l = 0; l < o; ++l) - if (r.shape[l] !== t8.shape[l]) - throw new Error(`x.shape[${l}]: ${r.shape[l]} should be equal to indices.shape[${l}]: ${t8.shape[l]}.`); - let a = r.shape[e], i = [], p = 1, u = 1, c = 1; + if (r15.shape[l] !== t8.shape[l]) + throw new Error(`x.shape[${l}]: ${r15.shape[l]} should be equal to indices.shape[${l}]: ${t8.shape[l]}.`); + let a = r15.shape[e], i = [], p = 1, u = 1, c = 1; for (let l = 0; l < o; ++l) - i.push(r.shape[l]), p *= r.shape[l]; + i.push(r15.shape[l]), p *= r15.shape[l]; for (let l = o; l < e; l++) - i.push(r.shape[l]), u *= r.shape[l]; + i.push(r15.shape[l]), u *= r15.shape[l]; for (let l = o; l < n; l++) i.push(t8.shape[l]); for (let l = e + 1; l < s; l++) - i.push(r.shape[l]), c *= r.shape[l]; + i.push(r15.shape[l]), c *= r15.shape[l]; return { batchSize: p, sliceSize: c, outerSize: u, dimSize: a, outputShape: i }; } -function _5(r) { +function _5(r15) { try { - return r.map((t8) => sc(t8)); + return r15.map((t8) => Qp(t8)); } catch (t8) { throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t8}`); } } -function $5(r) { - return r.map((t8) => tu(t8)); +function $5(r15) { + return r15.map((t8) => Zi(t8)); } -var Wt = {}; -qe(Wt, { nonMaxSuppressionV3Impl: () => ef, nonMaxSuppressionV4Impl: () => tf, nonMaxSuppressionV5Impl: () => rf, whereImpl: () => Yd }); -UN(); +var Vt = {}; +qe(Vt, { nonMaxSuppressionV3Impl: () => Zd, nonMaxSuppressionV4Impl: () => Jd, nonMaxSuppressionV5Impl: () => ef, whereImpl: () => jd }); +GN(); var E5 = A(); -E5.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r) => { - r && console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); +E5.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r15) => { + r15 && 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 ho; -(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"; -})(ho || (ho = {})); -var gT; -(function(r) { +var fo; +(function(r15) { + r15[r15.DT_INVALID = 0] = "DT_INVALID", r15[r15.DT_FLOAT = 1] = "DT_FLOAT", r15[r15.DT_DOUBLE = 2] = "DT_DOUBLE", r15[r15.DT_INT32 = 3] = "DT_INT32", r15[r15.DT_UINT8 = 4] = "DT_UINT8", r15[r15.DT_INT16 = 5] = "DT_INT16", r15[r15.DT_INT8 = 6] = "DT_INT8", r15[r15.DT_STRING = 7] = "DT_STRING", r15[r15.DT_COMPLEX64 = 8] = "DT_COMPLEX64", r15[r15.DT_INT64 = 9] = "DT_INT64", r15[r15.DT_BOOL = 10] = "DT_BOOL", r15[r15.DT_QINT8 = 11] = "DT_QINT8", r15[r15.DT_QUINT8 = 12] = "DT_QUINT8", r15[r15.DT_QINT32 = 13] = "DT_QINT32", r15[r15.DT_BFLOAT16 = 14] = "DT_BFLOAT16", r15[r15.DT_QINT16 = 15] = "DT_QINT16", r15[r15.DT_QUINT16 = 16] = "DT_QUINT16", r15[r15.DT_UINT16 = 17] = "DT_UINT16", r15[r15.DT_COMPLEX128 = 18] = "DT_COMPLEX128", r15[r15.DT_HALF = 19] = "DT_HALF", r15[r15.DT_RESOURCE = 20] = "DT_RESOURCE", r15[r15.DT_VARIANT = 21] = "DT_VARIANT", r15[r15.DT_UINT32 = 22] = "DT_UINT32", r15[r15.DT_UINT64 = 23] = "DT_UINT64", r15[r15.DT_FLOAT_REF = 101] = "DT_FLOAT_REF", r15[r15.DT_DOUBLE_REF = 102] = "DT_DOUBLE_REF", r15[r15.DT_INT32_REF = 103] = "DT_INT32_REF", r15[r15.DT_UINT8_REF = 104] = "DT_UINT8_REF", r15[r15.DT_INT16_REF = 105] = "DT_INT16_REF", r15[r15.DT_INT8_REF = 106] = "DT_INT8_REF", r15[r15.DT_STRING_REF = 107] = "DT_STRING_REF", r15[r15.DT_COMPLEX64_REF = 108] = "DT_COMPLEX64_REF", r15[r15.DT_INT64_REF = 109] = "DT_INT64_REF", r15[r15.DT_BOOL_REF = 110] = "DT_BOOL_REF", r15[r15.DT_QINT8_REF = 111] = "DT_QINT8_REF", r15[r15.DT_QUINT8_REF = 112] = "DT_QUINT8_REF", r15[r15.DT_QINT32_REF = 113] = "DT_QINT32_REF", r15[r15.DT_BFLOAT16_REF = 114] = "DT_BFLOAT16_REF", r15[r15.DT_QINT16_REF = 115] = "DT_QINT16_REF", r15[r15.DT_QUINT16_REF = 116] = "DT_QUINT16_REF", r15[r15.DT_UINT16_REF = 117] = "DT_UINT16_REF", r15[r15.DT_COMPLEX128_REF = 118] = "DT_COMPLEX128_REF", r15[r15.DT_HALF_REF = 119] = "DT_HALF_REF", r15[r15.DT_RESOURCE_REF = 120] = "DT_RESOURCE_REF", r15[r15.DT_VARIANT_REF = 121] = "DT_VARIANT_REF", r15[r15.DT_UINT32_REF = 122] = "DT_UINT32_REF", r15[r15.DT_UINT64_REF = 123] = "DT_UINT64_REF"; +})(fo || (fo = {})); +var xT; +(function(r15) { let t8; (function(e) { e[e.LEGACY = 0] = "LEGACY", e[e.V1 = 1] = "V1", e[e.V2 = 2] = "V2"; - })(t8 = r.CheckpointFormatVersion || (r.CheckpointFormatVersion = {})); -})(gT || (gT = {})); + })(t8 = r15.CheckpointFormatVersion || (r15.CheckpointFormatVersion = {})); +})(xT || (xT = {})); var dS = {}; -function D5(r, t8) { - let e = { tfOpName: r, category: "custom", inputs: [], attrs: [], customExecutor: t8 }; - dS[r] = e; +function D5(r15, t8) { + let e = { tfOpName: r15, category: "custom", inputs: [], attrs: [], customExecutor: t8 }; + dS[r15] = e; } -function pf(r) { - return dS[r]; +function uf(r15) { + return dS[r15]; } -function A5(r) { - delete dS[r]; +function A5(r15) { + delete dS[r15]; } -function I(r, t8, e, o, n) { - let s = t8.inputParams[r]; +function I(r15, t8, e, o, n) { + let s = t8.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 ? t8.inputNames.length + i : i; if (s.type === "tensor") - return zt(t8.inputNames[u], e, o, n); + return Bt(t8.inputNames[u], e, o, n); if (s.type === "tensors") { let m = t8.inputs.slice(i, p); return t8.inputNames.slice(i, p).filter((f, h) => { var g; return ((g = m[h]) === null || g === void 0 ? void 0 : g.op) !== "NoOp"; - }).map((f) => zt(f, e, o, n)); + }).map((f) => Bt(f, e, o, n)); } - let c = zt(t8.inputNames[u], e, o, n), l = c.dataSync(); + let c = Bt(t8.inputNames[u], e, o, n), l = c.dataSync(); return s.type === "number" ? l[0] : y.toNestedArray(c.shape, l); } - let a = t8.attrParams[r]; + let a = t8.attrParams[r15]; return a && a.value; } -function zt(r, t8, e, o) { - let [n, s] = Tr(r, e); +function Bt(r15, t8, e, o) { + let [n, s] = Nr(r15, e); if (o != null) { let i = o.getHashTableHandleByName(n); if (i != null) return i; } - let a = e.currentContextIds.find((i) => !!t8[cf(n, i)]); - return a !== void 0 ? t8[cf(n, a)][s] : void 0; + let a = e.currentContextIds.find((i) => !!t8[pf(n, i)]); + return a !== void 0 ? t8[pf(n, a)][s] : void 0; } -function fS(r, t8, e) { - return t8[cf(r, e.currentContextId)]; +function fS(r15, t8, e) { + return t8[pf(r15, e.currentContextId)]; } -function Ls(r, t8) { - let [e, o, n] = Tr(r, t8); - return [cf(e, t8 && t8.currentContextId), o, n]; +function Ls(r15, t8) { + let [e, o, n] = Nr(r15, t8); + return [pf(e, t8 && t8.currentContextId), o, n]; } -function cf(r, t8) { - return t8 ? `${r}-${t8}` : r; +function pf(r15, t8) { + return t8 ? `${r15}-${t8}` : r15; } -function Tr(r, t8) { - if (r === "") +function Nr(r15, t8) { + if (r15 === "") return ["", 0, void 0]; let e = t8 != null && t8.parseNodeNameCache != null; if (e) { - let s = t8.parseNodeNameCache.get(r); + let s = t8.parseNodeNameCache.get(r15); if (s != null) return s; } - let o = r.split(":"), n; + let o = r15.split(":"), n; if (o.length === 1) - n = [r, 0, void 0]; + 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]; } - return e && t8.parseNodeNameCache.set(r, n), n; + return e && t8.parseNodeNameCache.set(r15, n), n; } -function Ol(r, t8, e) { - let o = I("pad", r, t8, e); +function Al(r15, t8, e) { + let o = I("pad", r15, t8, e); if (o === "explicit") { - o = I("explicitPaddings", r, t8, e); + o = I("explicitPaddings", r15, t8, e); 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]; @@ -9767,8 +9768,8 @@ function Ol(r, t8, e) { } return o; } -function Bs(r) { - return r.kept ? r : Ur(r); +function Bs(r15) { + return r15.kept ? r15 : Wr(r15); } var hS = {}; qe(hS, { json: () => F5 }); @@ -9827,7 +9828,7 @@ var Q5 = [{ tfOpName: "StaticRegexReplace", category: "string", inputs: [{ start var AS = {}; qe(AS, { json: () => Z5 }); var Z5 = [{ tfOpName: "Cast", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "SrcT", name: "sdtype", type: "dtype", notSupported: true }, { tfName: "DstT", name: "dtype", type: "dtype" }] }, { tfOpName: "ExpandDims", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number" }] }, { tfOpName: "MirrorPad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "mode", name: "mode", type: "string" }] }, { tfOpName: "Pad", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }], attrs: [{ tfName: "constant_value", name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "PadV2", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "padding", type: "number[]" }, { start: 2, name: "constantValue", type: "number", defaultValue: 0 }] }, { tfOpName: "Reshape", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "shape", type: "number[]" }] }, { tfOpName: "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 Ml = class { +var Fl = class { static get Instance() { return this._instance || (this._instance = new this()); } @@ -9871,44 +9872,44 @@ var Ml = class { return Object.keys(t8 || {}).reduce((e, o) => (e[t8[o].name] = o, e), {}); } mapNode(t8) { - let e = pf(t8.op) || this.opMappers[t8.op] || {}; + let e = uf(t8.op) || this.opMappers[t8.op] || {}; t8.attr == null && (t8.attr = {}); let o = { name: t8.name, op: t8.op, category: e.category, inputNames: (t8.input || []).map((n) => n.startsWith("^") ? n.slice(1) : n), inputs: [], children: [], inputParams: {}, attrParams: {}, rawAttrs: t8.attr, outputs: e.outputs }; return e.inputs != null && (o.inputParams = e.inputs.reduce((n, s) => (n[s.name] = { type: s.type, inputIndexStart: s.start, inputIndexEnd: s.end }, n), {})), e.attrs != null && (o.attrParams = e.attrs.reduce((n, s) => { let a = s.type, i; switch (s.type) { case "string": - i = lf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = lf(t8.attr, s.tfDeprecatedName, s.defaultValue)); + i = cf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = cf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; case "string[]": - i = yf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = yf(t8.attr, s.tfDeprecatedName, s.defaultValue)); - break; - case "number": - i = df(t8.attr, s.tfName, s.defaultValue || 0), i === void 0 && s.tfDeprecatedName && (i = df(t8.attr, s.tfDeprecatedName, s.defaultValue)); - break; - case "number[]": i = xf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = xf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; - case "bool": - i = mf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = mf(t8.attr, s.tfDeprecatedName, s.defaultValue)); + case "number": + i = mf(t8.attr, s.tfName, s.defaultValue || 0), i === void 0 && s.tfDeprecatedName && (i = mf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; - case "bool[]": - i = Cf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Cf(t8.attr, s.tfDeprecatedName, s.defaultValue)); - break; - case "shape": + case "number[]": i = gf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = gf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; - case "shape[]": + case "bool": + i = lf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = lf(t8.attr, s.tfDeprecatedName, s.defaultValue)); + break; + case "bool[]": i = bf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = bf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; - case "dtype": - i = ff(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = ff(t8.attr, s.tfDeprecatedName, s.defaultValue)); - break; - case "dtype[]": + case "shape": i = hf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = hf(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; + case "shape[]": + i = yf(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = yf(t8.attr, s.tfDeprecatedName, s.defaultValue)); + break; + case "dtype": + i = df(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = df(t8.attr, s.tfDeprecatedName, s.defaultValue)); + break; + case "dtype[]": + i = ff(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = ff(t8.attr, s.tfDeprecatedName, s.defaultValue)); + break; case "func": - i = xT(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = xT(t8.attr, s.tfDeprecatedName, s.defaultValue)); + i = yT(t8.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = yT(t8.attr, s.tfDeprecatedName, s.defaultValue)); break; case "tensor": case "tensors": @@ -9956,292 +9957,292 @@ var Ml = class { return e != null && (o = e[o]), { name: o, dtype: t8.type }; } }; -function J5(r) { +function J5(r15) { let t8 = A().global; if (typeof t8.atob != "undefined") - return t8.atob(r); + return t8.atob(r15); if (typeof Buffer != "undefined") - return new Buffer(r, "base64").toString(); + return new Buffer(r15, "base64").toString(); throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()"); } -function yT(r, t8) { - let e = Array.isArray(r) ? String.fromCharCode.apply(null, r) : J5(r); +function bT(r15, t8) { + let e = Array.isArray(r15) ? String.fromCharCode.apply(null, r15) : J5(r15); return t8 ? e : e.toLowerCase(); } -function lf(r, t8, e, o = false) { - let n = r[t8]; - return n != null ? yT(n.s, o) : e; +function cf(r15, t8, e, o = false) { + let n = r15[t8]; + return n != null ? bT(n.s, o) : e; } -function mf(r, t8, e) { - let o = r[t8]; +function lf(r15, t8, e) { + let o = r15[t8]; return o ? o.b : e; } -function df(r, t8, e) { - let o = r[t8] || {}, n = o.i != null ? o.i : o.f != null ? o.f : e; +function mf(r15, t8, e) { + let o = r15[t8] || {}, n = o.i != null ? o.i : o.f != null ? o.f : e; return typeof n == "number" ? n : parseInt(n, 10); } -function FS(r) { - switch (typeof r == "string" && (r = ho[r]), r) { - case ho.DT_FLOAT: - case ho.DT_HALF: +function FS(r15) { + switch (typeof r15 == "string" && (r15 = fo[r15]), r15) { + case fo.DT_FLOAT: + case fo.DT_HALF: return "float32"; - case ho.DT_INT32: - case ho.DT_INT64: - case ho.DT_INT8: - case ho.DT_UINT8: + case fo.DT_INT32: + case fo.DT_INT64: + case fo.DT_INT8: + case fo.DT_UINT8: return "int32"; - case ho.DT_BOOL: + case fo.DT_BOOL: return "bool"; - case ho.DT_DOUBLE: + case fo.DT_DOUBLE: return "float32"; - case ho.DT_STRING: + case fo.DT_STRING: return "string"; default: return null; } } -function xT(r, t8, e) { - let o = r[t8]; +function yT(r15, t8, e) { + let o = r15[t8]; return o && o.func ? o.func.name : e; } -function ff(r, t8, e) { - let o = r[t8]; +function df(r15, t8, e) { + let o = r15[t8]; return o && o.type ? FS(o.type) : e; } -function hf(r, t8, e) { - let o = r[t8]; +function ff(r15, t8, e) { + let o = r15[t8]; return o && o.list && o.list.type ? o.list.type.map((n) => FS(n)) : e; } -function bT(r) { - if (!r.unknownRank) - return r.dim != null ? r.dim.map((t8) => typeof t8.size == "number" ? t8.size : parseInt(t8.size, 10)) : []; +function CT(r15) { + if (!r15.unknownRank) + return r15.dim != null ? r15.dim.map((t8) => typeof t8.size == "number" ? t8.size : parseInt(t8.size, 10)) : []; } -function gf(r, t8, e) { - let o = r[t8]; - return o && o.shape ? bT(o.shape) : e; +function hf(r15, t8, e) { + let o = r15[t8]; + return o && o.shape ? CT(o.shape) : e; } -function xf(r, t8, e) { - let o = r[t8]; +function gf(r15, t8, e) { + let o = r15[t8]; return o ? ((o.list.f && o.list.f.length ? o.list.f : o.list.i) || []).map((n) => typeof n == "number" ? n : parseInt(n, 10)) : e; } -function yf(r, t8, e, o = false) { - let n = r[t8]; - return n && n.list && n.list.s ? n.list.s.map((s) => yT(s, o)) : e; +function xf(r15, t8, e, o = false) { + let n = r15[t8]; + return n && n.list && n.list.s ? n.list.s.map((s) => bT(s, o)) : e; } -function bf(r, t8, e) { - let o = r[t8]; - return o && o.list && o.list.shape ? o.list.shape.map((n) => bT(n)) : e; +function yf(r15, t8, e) { + let o = r15[t8]; + return o && o.list && o.list.shape ? o.list.shape.map((n) => CT(n)) : e; } -function Cf(r, t8, e) { - let o = r[t8]; +function bf(r15, t8, e) { + let o = r15[t8]; return o && o.list && o.list.b ? o.list.b : e; } -var wf = class { +var Cf = class { constructor(t8, e, o) { this.node = t8, this.tensorMap = e, this.context = o, this.inputs = [], this.attrs = {}, this.inputs = t8.inputNames.map((n) => this.getInput(n)), t8.rawAttrs != null && (this.attrs = Object.keys(t8.rawAttrs).reduce((n, s) => (n[s] = this.getAttr(s), n), {})); } getInput(t8) { - return zt(t8, this.tensorMap, this.context); + return Bt(t8, this.tensorMap, this.context); } getAttr(t8, e) { let o = this.node.rawAttrs[t8]; if (o.tensor != null) - return zt(t8, this.tensorMap, this.context); + return Bt(t8, this.tensorMap, this.context); if (o.i != null || o.f != null) - return df(this.node.rawAttrs, t8, e); - if (o.s != null) - return lf(this.node.rawAttrs, t8, e); - if (o.b != null) return mf(this.node.rawAttrs, t8, e); + if (o.s != null) + return cf(this.node.rawAttrs, t8, e); + if (o.b != null) + return lf(this.node.rawAttrs, t8, e); if (o.shape != null) - return gf(this.node.rawAttrs, t8, e); + return hf(this.node.rawAttrs, t8, e); if (o.type != null) - return ff(this.node.rawAttrs, t8, e); + return df(this.node.rawAttrs, t8, e); if (o.list != null) { if (o.list.i != null || o.list.f != null) - return xf(this.node.rawAttrs, t8, e); + return gf(this.node.rawAttrs, t8, e); if (o.list.s != null) - return yf(this.node.rawAttrs, t8, e); + return xf(this.node.rawAttrs, t8, e); if (o.list.shape != null) - return bf(this.node.rawAttrs, t8, e); + return yf(this.node.rawAttrs, t8, e); if (o.list.b != null) - return Cf(this.node.rawAttrs, t8, e); + return bf(this.node.rawAttrs, t8, e); if (o.list.type != null) - return hf(this.node.rawAttrs, t8, e); + return ff(this.node.rawAttrs, t8, e); } return e; } }; var Je = {}; -qe(Je, { OP_SCOPE_SUFFIX: () => kw, abs: () => Jt, acos: () => kk, acosh: () => Nk, add: () => Ce, addN: () => Tk, all: () => _k, any: () => $k, argMax: () => Ek, argMin: () => Rk, asin: () => Dk, asinh: () => Ak, atan: () => Fk, atan2: () => Pk, atanh: () => Ok, avgPool: () => fd, avgPool3d: () => Bk, basicLSTMCell: () => zk, batchNorm: () => au, batchNorm2d: () => Wk, batchNorm3d: () => Uk, batchNorm4d: () => Gk, batchToSpaceND: () => hd, bincount: () => gd, bitwiseAnd: () => Hk, booleanMaskAsync: () => E6, broadcastArgs: () => Kk, broadcastTo: () => iu, buffer: () => me, cast: () => We, ceil: () => qk, clipByValue: () => jk, clone: () => Ur, complex: () => Er, concat: () => bt, concat1d: () => Xk, concat2d: () => Yk, concat3d: () => Qk, concat4d: () => Zk, conv1d: () => Jk, conv2d: () => uu, conv2dTranspose: () => e2, conv3d: () => t2, conv3dTranspose: () => o2, cos: () => n2, cosh: () => s2, cosineWindow: () => Rl, cumprod: () => a2, cumsum: () => i2, denseBincount: () => u2, depthToSpace: () => p2, depthwiseConv2d: () => lc, diag: () => c2, dilation2d: () => l2, div: () => je, divNoNan: () => d2, dot: () => f2, dropout: () => W6, einsum: () => pu, elu: () => Cd, enclosingPowerOfTwo: () => Qw, ensureShape: () => h2, equal: () => bd, erf: () => g2, euclideanNorm: () => b2, exp: () => $o, expandDims: () => Ms, expm1: () => C2, eye: () => wd, fft: () => fc, fill: () => Ea, floor: () => Sd, floorDiv: () => dd, fused: () => Zw, gather: () => Id, gatherND: () => z6, greater: () => qu, greaterEqual: () => vd, ifft: () => Ju, imag: () => lu, image: () => Kj, inTopKAsync: () => G6, irfft: () => Kd, isFinite: () => w2, isInf: () => S2, isNaN: () => I2, leakyRelu: () => kd, less: () => _l, lessEqual: () => mc, linalg: () => qj, linspace: () => v2, localResponseNormalization: () => k2, log: () => pi, log1p: () => Nd, logSigmoid: () => N2, logSoftmax: () => T2, logSumExp: () => $d, logicalAnd: () => ju, logicalNot: () => Ed, logicalOr: () => Rd, logicalXor: () => _2, losses: () => jj, lowerBound: () => $2, matMul: () => Ze, max: () => Ra, maxPool: () => Ad, maxPool3d: () => E2, maxPoolWithArgmax: () => R2, maximum: () => Fd, mean: () => Xu, meshgrid: () => D2, min: () => Tl, minimum: () => Yu, mirrorPad: () => A2, mod: () => F2, moments: () => P2, movingAverage: () => A6, mul: () => se, multiRNNCell: () => O2, multinomial: () => M2, neg: () => cr, norm: () => Ku, notEqual: () => Pd, oneHot: () => El, ones: () => Da, onesLike: () => L2, op: () => N, outerProduct: () => B2, pad: () => Aa, pad1d: () => z2, pad2d: () => V2, pad3d: () => W2, pad4d: () => U2, pool: () => G2, pow: () => ui, prelu: () => Md, print: () => md, prod: () => H2, raggedGather: () => K2, raggedRange: () => q2, raggedTensorToTensor: () => j2, rand: () => X2, randomGamma: () => g1, randomNormal: () => Ud, randomStandardNormal: () => x1, randomUniform: () => dc, randomUniformInt: () => y1, range: () => mu, real: () => ci, reciprocal: () => b1, relu: () => du, relu6: () => Gd, reshape: () => W, reverse: () => mo, reverse1d: () => C1, reverse2d: () => w1, reverse3d: () => S1, reverse4d: () => I1, rfft: () => hc, round: () => Hd, rsqrt: () => v1, scalar: () => ke, scatterND: () => P6, searchSorted: () => $l, selu: () => k1, separableConv2d: () => N1, setdiff1dAsync: () => T1, sigmoid: () => $a, sign: () => _1, signal: () => Hj, sin: () => $1, sinh: () => E1, slice: () => Xe, slice1d: () => R1, slice2d: () => D1, slice3d: () => A1, slice4d: () => F1, softmax: () => P1, softplus: () => _d, spaceToBatchND: () => Od, sparse: () => Xj, sparseToDense: () => L6, spectral: () => Gj, split: () => li, sqrt: () => Dr, square: () => er, squaredDifference: () => qd, squeeze: () => gc, stack: () => kr, step: () => jd, stridedSlice: () => O1, string: () => Yj, sub: () => Te, sum: () => ot, tan: () => M1, tanh: () => Nl, tensor: () => ur, tensor1d: () => tr, tensor2d: () => fu, tensor3d: () => Xd, tensor4d: () => L1, tensor5d: () => B1, tensor6d: () => z1, tensorScatterUpdate: () => W1, tile: () => cu, topk: () => U1, transpose: () => yc, truncatedNormal: () => G1, unique: () => H1, unsortedSegmentSum: () => K1, unstack: () => fo, upperBound: () => q1, variable: () => j1, where: () => lo, whereAsync: () => Qd, zeros: () => Gr, zerosLike: () => Ht }); -var CT = (r, t8, e, o = Je) => { - switch (r.op) { +qe(Je, { OP_SCOPE_SUFFIX: () => kw, abs: () => Qt, acos: () => Nk, acosh: () => Tk, add: () => Ce, addN: () => _k, all: () => $k, any: () => Ek, argMax: () => Rk, argMin: () => Dk, asin: () => Ak, asinh: () => Fk, atan: () => Pk, atan2: () => Ok, atanh: () => Mk, avgPool: () => md, avgPool3d: () => zk, basicLSTMCell: () => Vk, batchNorm: () => ru, batchNorm2d: () => Uk, batchNorm3d: () => Gk, batchNorm4d: () => Hk, batchToSpaceND: () => dd, bincount: () => fd, bitwiseAnd: () => Kk, booleanMaskAsync: () => E6, broadcastArgs: () => qk, broadcastTo: () => ou, buffer: () => me, cast: () => We, ceil: () => jk, clipByValue: () => Xk, clone: () => Wr, complex: () => $r, concat: () => yt, concat1d: () => Yk, concat2d: () => Qk, concat3d: () => Zk, concat4d: () => Jk, conv1d: () => e2, conv2d: () => nu, conv2dTranspose: () => t2, conv3d: () => r22, conv3dTranspose: () => n2, cos: () => s2, cosh: () => a2, cosineWindow: () => _l, cumprod: () => i2, cumsum: () => u2, denseBincount: () => p2, depthToSpace: () => c2, depthwiseConv2d: () => oc, diag: () => l2, dilation2d: () => m2, div: () => je, divNoNan: () => f2, dot: () => h2, dropout: () => W6, einsum: () => su, elu: () => yd, enclosingPowerOfTwo: () => Qw, ensureShape: () => g2, equal: () => xd, erf: () => x2, euclideanNorm: () => C2, exp: () => _o, expandDims: () => Ms, expm1: () => w2, eye: () => bd, fft: () => ac, fill: () => Ea, floor: () => Cd, floorDiv: () => ld, fused: () => Zw, gather: () => wd, gatherND: () => z6, greater: () => zu, greaterEqual: () => Sd, ifft: () => Ku, imag: () => iu, image: () => Kj, inTopKAsync: () => G6, irfft: () => Gd, isFinite: () => S2, isInf: () => I2, isNaN: () => v2, leakyRelu: () => Id, less: () => kl, lessEqual: () => nc, linalg: () => qj, linspace: () => k2, localResponseNormalization: () => N2, log: () => ui, log1p: () => vd, logSigmoid: () => T2, logSoftmax: () => _2, logSumExp: () => Td, logicalAnd: () => Vu, logicalNot: () => _d, logicalOr: () => $d, logicalXor: () => $2, losses: () => jj, lowerBound: () => E2, matMul: () => Ze, max: () => Ra, maxPool: () => Rd, maxPool3d: () => R2, maxPoolWithArgmax: () => D2, maximum: () => Dd, mean: () => Wu, meshgrid: () => A2, min: () => vl, minimum: () => Uu, mirrorPad: () => F2, mod: () => P2, moments: () => O2, movingAverage: () => A6, mul: () => se, multiRNNCell: () => M2, multinomial: () => L2, neg: () => pr, norm: () => Bu, notEqual: () => Ad, oneHot: () => Tl, ones: () => Da, onesLike: () => B2, op: () => N, outerProduct: () => z2, pad: () => Aa, pad1d: () => V2, pad2d: () => W2, pad3d: () => U2, pad4d: () => G2, pool: () => H2, pow: () => ii, prelu: () => Pd, print: () => cd, prod: () => K2, raggedGather: () => q2, raggedRange: () => j2, raggedTensorToTensor: () => X2, rand: () => Y2, randomGamma: () => x1, randomNormal: () => Vd, randomStandardNormal: () => y1, randomUniform: () => sc, randomUniformInt: () => b1, range: () => uu, real: () => pi, reciprocal: () => C1, relu: () => pu, relu6: () => Wd, reshape: () => W, reverse: () => lo, reverse1d: () => w1, reverse2d: () => S1, reverse3d: () => I1, reverse4d: () => v1, rfft: () => ic, round: () => Ud, rsqrt: () => k1, scalar: () => ke, scatterND: () => P6, searchSorted: () => Nl, selu: () => N1, separableConv2d: () => T1, setdiff1dAsync: () => _1, sigmoid: () => $a, sign: () => $1, signal: () => Hj, sin: () => E1, sinh: () => R1, slice: () => Xe, slice1d: () => D1, slice2d: () => A1, slice3d: () => F1, slice4d: () => P1, softmax: () => O1, softplus: () => Nd, spaceToBatchND: () => Fd, sparse: () => Xj, sparseToDense: () => L6, spectral: () => Gj, split: () => ci, sqrt: () => Rr, square: () => Zt, squaredDifference: () => Hd, squeeze: () => uc, stack: () => vr, step: () => Kd, stridedSlice: () => M1, string: () => Yj, sub: () => Te, sum: () => ot, tan: () => L1, tanh: () => Il, tensor: () => ar, tensor1d: () => Jt, tensor2d: () => cu, tensor3d: () => qd, tensor4d: () => B1, tensor5d: () => z1, tensor6d: () => V1, tensorScatterUpdate: () => U1, tile: () => au, topk: () => G1, transpose: () => cc, truncatedNormal: () => H1, unique: () => K1, unsortedSegmentSum: () => q1, unstack: () => mo, upperBound: () => j1, variable: () => X1, where: () => co, whereAsync: () => Xd, zeros: () => Ur, zerosLike: () => Gt }); +var wT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "BiasAdd": case "AddV2": case "Add": - return [o.add(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.add(I("a", r15, t8, e), I("b", r15, t8, e))]; case "AddN": - return [o.addN(I("tensors", r, t8, e))]; + return [o.addN(I("tensors", r15, t8, e))]; case "FloorMod": case "Mod": - return [o.mod(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.mod(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Mul": - return [o.mul(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.mul(I("a", r15, t8, e), I("b", r15, t8, e))]; case "RealDiv": case "Div": - return [o.div(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.div(I("a", r15, t8, e), I("b", r15, t8, e))]; case "DivNoNan": - return [o.divNoNan(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.divNoNan(I("a", r15, t8, e), I("b", r15, t8, e))]; case "FloorDiv": - return [o.floorDiv(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.floorDiv(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Sub": - return [o.sub(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.sub(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Minimum": - return [o.minimum(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.minimum(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Maximum": - return [o.maximum(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.maximum(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Pow": - return [o.pow(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.pow(I("a", r15, t8, e), I("b", r15, t8, e))]; case "SquaredDifference": - return [o.squaredDifference(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.squaredDifference(I("a", r15, t8, e), I("b", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var wT = (r, t8, e, o = Je) => { - switch (r.op) { +var ST = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Abs": case "ComplexAbs": - return [o.abs(I("x", r, t8, e))]; + return [o.abs(I("x", r15, t8, e))]; case "Acos": - return [o.acos(I("x", r, t8, e))]; + return [o.acos(I("x", r15, t8, e))]; case "Acosh": - return [o.acosh(I("x", r, t8, e))]; + return [o.acosh(I("x", r15, t8, e))]; case "Asin": - return [o.asin(I("x", r, t8, e))]; + return [o.asin(I("x", r15, t8, e))]; case "Asinh": - return [o.asinh(I("x", r, t8, e))]; + return [o.asinh(I("x", r15, t8, e))]; case "Atan": - return [o.atan(I("x", r, t8, e))]; + return [o.atan(I("x", r15, t8, e))]; case "Atan2": - return [o.atan2(I("x", r, t8, e), I("y", r, t8, e))]; + return [o.atan2(I("x", r15, t8, e), I("y", r15, t8, e))]; case "Atanh": - return [o.atanh(I("x", r, t8, e))]; + return [o.atanh(I("x", r15, t8, e))]; case "Ceil": - return [o.ceil(I("x", r, t8, e))]; + return [o.ceil(I("x", r15, t8, e))]; case "Complex": - return [o.complex(I("real", r, t8, e), I("imag", r, t8, e))]; + return [o.complex(I("real", r15, t8, e), I("imag", r15, t8, e))]; case "Cos": - return [o.cos(I("x", r, t8, e))]; + return [o.cos(I("x", r15, t8, e))]; case "Cosh": - return [o.cosh(I("x", r, t8, e))]; + return [o.cosh(I("x", r15, t8, e))]; case "Elu": - return [o.elu(I("x", r, t8, e))]; + return [o.elu(I("x", r15, t8, e))]; case "Erf": - return [o.erf(I("x", r, t8, e))]; + return [o.erf(I("x", r15, t8, e))]; case "Exp": - return [o.exp(I("x", r, t8, e))]; + return [o.exp(I("x", r15, t8, e))]; case "Expm1": - return [o.expm1(I("x", r, t8, e))]; + return [o.expm1(I("x", r15, t8, e))]; case "Floor": - return [o.floor(I("x", r, t8, e))]; + return [o.floor(I("x", r15, t8, e))]; case "Log": - return [o.log(I("x", r, t8, e))]; + return [o.log(I("x", r15, t8, e))]; case "Log1p": - return [o.log1p(I("x", r, t8, e))]; + return [o.log1p(I("x", r15, t8, e))]; case "Imag": - return [o.imag(I("x", r, t8, e))]; + return [o.imag(I("x", r15, t8, e))]; case "Neg": - return [o.neg(I("x", r, t8, e))]; + return [o.neg(I("x", r15, t8, e))]; case "Reciprocal": - return [o.reciprocal(I("x", r, t8, e))]; + return [o.reciprocal(I("x", r15, t8, e))]; case "Real": - return [o.real(I("x", r, t8, e))]; + return [o.real(I("x", r15, t8, e))]; case "Relu": - return [o.relu(I("x", r, t8, e))]; + return [o.relu(I("x", r15, t8, e))]; case "Round": - return [o.round(I("x", r, t8, e))]; + return [o.round(I("x", r15, t8, e))]; case "Selu": - return [o.selu(I("x", r, t8, e))]; + return [o.selu(I("x", r15, t8, e))]; case "Sigmoid": - return [o.sigmoid(I("x", r, t8, e))]; + return [o.sigmoid(I("x", r15, t8, e))]; case "Sin": - return [o.sin(I("x", r, t8, e))]; + return [o.sin(I("x", r15, t8, e))]; case "Sign": - return [o.sign(I("x", r, t8, e))]; + return [o.sign(I("x", r15, t8, e))]; case "Sinh": - return [o.sinh(I("x", r, t8, e))]; + return [o.sinh(I("x", r15, t8, e))]; case "Softplus": - return [o.softplus(I("x", r, t8, e))]; + return [o.softplus(I("x", r15, t8, e))]; case "Sqrt": - return [o.sqrt(I("x", r, t8, e))]; + return [o.sqrt(I("x", r15, t8, e))]; case "Square": - return [o.square(I("x", r, t8, e))]; + return [o.square(I("x", r15, t8, e))]; case "Tanh": - return [o.tanh(I("x", r, t8, e))]; + return [o.tanh(I("x", r15, t8, e))]; case "Tan": - return [o.tan(I("x", r, t8, e))]; + return [o.tan(I("x", r15, t8, e))]; case "ClipByValue": - return [o.clipByValue(I("x", r, t8, e), I("clipValueMin", r, t8, e), I("clipValueMax", r, t8, e))]; + return [o.clipByValue(I("x", r15, t8, e), I("clipValueMin", r15, t8, e), I("clipValueMax", r15, t8, e))]; case "Relu6": - return [o.relu6(I("x", r, t8, e))]; + return [o.relu6(I("x", r15, t8, e))]; case "Rsqrt": - return [o.rsqrt(zt(r.inputNames[0], t8, e))]; + return [o.rsqrt(Bt(r15.inputNames[0], t8, e))]; case "LeakyRelu": - return [o.leakyRelu(I("x", r, t8, e), I("alpha", r, t8, e))]; + return [o.leakyRelu(I("x", r15, t8, e), I("alpha", r15, t8, e))]; case "Prelu": - return [o.prelu(I("x", r, t8, e), I("alpha", r, t8, e))]; + return [o.prelu(I("x", r15, t8, e), I("alpha", r15, t8, e))]; case "IsNan": - return [o.isNaN(zt(r.inputNames[0], t8, e))]; + return [o.isNaN(Bt(r15.inputNames[0], t8, e))]; case "IsInf": - return [o.isInf(zt(r.inputNames[0], t8, e))]; + return [o.isInf(Bt(r15.inputNames[0], t8, e))]; case "IsFinite": - return [o.isFinite(zt(r.inputNames[0], t8, e))]; + return [o.isFinite(Bt(r15.inputNames[0], t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function Hr(r, t8, e = "") { - if (!(typeof r == "number" || typeof t8 == "number")) { - y.assert(r.length === t8.length, () => e + ` Shapes ${r} and ${t8} must match`); - for (let o = 0; o < r.length; o++) { - let n = r[o], s = t8[o]; - y.assert(n < 0 || s < 0 || n === s, () => e + ` Shapes ${r} and ${t8} must match`); +function Gr(r15, t8, e = "") { + if (!(typeof r15 == "number" || typeof t8 == "number")) { + y.assert(r15.length === t8.length, () => e + ` Shapes ${r15} and ${t8} must match`); + for (let o = 0; o < r15.length; o++) { + let n = r15[o], s = t8[o]; + y.assert(n < 0 || s < 0 || n === s, () => e + ` Shapes ${r15} and ${t8} must match`); } } } -function ST(r) { - return !(typeof r == "number" || r.some((t8) => t8 < 0)); +function IT(r15) { + return !(typeof r15 == "number" || r15.some((t8) => t8 < 0)); } -function bc(r, t8, e) { - let o = Sf(r, e), n = !ST(o); +function mc(r15, t8, e) { + let o = wf(r15, e), n = !IT(o); if (n && t8.length === 0) throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`); if (n && t8.forEach((s) => { - o = Sf(s.shape, o); - }), !ST(o)) + o = wf(s.shape, o); + }), !IT(o)) throw new Error(`Non-fully-defined elementShape: ${o}`); return o; } -function Sf(r, t8) { - if (typeof r == "number") +function wf(r15, t8) { + if (typeof r15 == "number") return t8; if (typeof t8 == "number") - return r; - if (r.length !== t8.length) - throw new Error(`Incompatible ranks during merge: ${r} vs. ${t8}`); + return r15; + if (r15.length !== t8.length) + throw new Error(`Incompatible ranks during merge: ${r15} vs. ${t8}`); let e = []; - for (let o = 0; o < r.length; ++o) { - let n = r[o], s = t8[o]; + for (let o = 0; o < r15.length; ++o) { + let n = r15[o], s = t8[o]; if (n >= 0 && s >= 0 && n !== s) - throw new Error(`Incompatible shape during merge: ${r} vs. ${t8}`); + throw new Error(`Incompatible shape during merge: ${r15} vs. ${t8}`); e[o] = n >= 0 ? n : s; } return e; } -var If = class { +var Sf = class { constructor(t8, e, o, n, s, a, i) { - this.name = t8, this.dtype = e, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = ke(0), Rr(this.idTensor); + this.name = t8, this.dtype = e, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = ke(0), Er(this.idTensor); } get id() { return this.idTensor.id; @@ -10279,11 +10280,11 @@ var If = class { if (e.dtype !== this.dtype) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t8}, because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`); - if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = e.shape), Hr(this.elementShape, e.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${t8}.`), o.read) + if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = e.shape), Gr(this.elementShape, e.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${t8}.`), o.read) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t8}, because it has already been read.`); if (o.written) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t8}, because it has already been written.`); - o.tensor = e, Rr(e), o.written = true, this.tensors[t8] = o; + o.tensor = e, Er(e), o.written = true, this.tensors[t8] = o; } writeMany(t8, e) { if (t8.length !== e.length) @@ -10301,20 +10302,20 @@ var If = class { t8.push(n); } if (t8.length === 0) - return ur([], [0].concat(this.elementShape)); + return ar([], [0].concat(this.elementShape)); let o = this.readMany(t8); - return Hr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), kr(o, 0); + return Gr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), vr(o, 0); } concat(t8) { if (t8 && t8 !== this.dtype) throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${t8}`); if (this.size() === 0) - return ur([], [0].concat(this.elementShape)); + return ar([], [0].concat(this.elementShape)); let e = []; for (let n = 0; n < this.size(); n++) e.push(n); let o = this.readMany(e); - return Hr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), bt(o, 0); + return Gr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), yt(o, 0); } scatter(t8, e) { if (e.dtype !== this.dtype) @@ -10324,7 +10325,7 @@ var If = class { let o = Math.max(...t8); if (!this.dynamicSize && o >= this.maxSize) throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`); - this.writeMany(t8, fo(e, 0)); + this.writeMany(t8, mo(e, 0)); } split(t8, e) { if (e.dtype !== this.dtype) @@ -10351,7 +10352,7 @@ var If = class { this.writeMany(i, a); } }; -var hi = class { +var dc = class r9 { get id() { return this.idTensor.id; } @@ -10359,11 +10360,11 @@ var hi = class { this.tensors = t8, this.elementShape = e, this.elementDtype = o, t8 != null && t8.forEach((s) => { if (o !== s.dtype) throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`); - Hr(e, s.shape, "TensorList shape mismatch: "), Rr(s); - }), this.idTensor = ke(0), this.maxNumElements = n, Rr(this.idTensor); + Gr(e, s.shape, "TensorList shape mismatch: "), Er(s); + }), this.idTensor = ke(0), this.maxNumElements = n, Er(this.idTensor); } copy() { - return new hi([...this.tensors], this.elementShape, this.elementDtype); + return new r9([...this.tensors], this.elementShape, this.elementDtype); } clearAndClose(t8) { this.tensors.forEach((e) => { @@ -10378,11 +10379,11 @@ var hi = class { throw new Error(`Invalid data types; op elements ${e}, 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(t8, this.elementShape, "TensorList shape mismatch: "); - let n = bc(this.elementShape, this.tensors, t8); + Gr(t8, this.elementShape, "TensorList shape mismatch: "); + let n = mc(this.elementShape, this.tensors, t8); return De(() => { let s = this.tensors.map((a) => W(a, n)); - return kr(s, 0); + return vr(s, 0); }); } popBack(t8, e) { @@ -10390,22 +10391,22 @@ var hi = class { throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`); if (this.size() === 0) throw new Error("Trying to pop from an empty list."); - let o = bc(this.elementShape, this.tensors, t8), n = this.tensors.pop(); - return n.kept = false, Hr(n.shape, t8, "TensorList shape mismatch: "), W(n, o); + let o = mc(this.elementShape, this.tensors, t8), n = this.tensors.pop(); + return n.kept = false, Gr(n.shape, t8, "TensorList shape mismatch: "), W(n, o); } pushBack(t8) { if (t8.dtype !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t8.dtype}, but list elements ${this.elementDtype}`); - if (Hr(t8.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) + if (Gr(t8.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) throw new Error("Trying to push element into a full list."); - Rr(t8), this.tensors.push(t8); + Er(t8), this.tensors.push(t8); } resize(t8) { if (t8 < 0) throw new Error(`TensorListResize expects size to be non-negative. Got: ${t8}`); if (this.maxNumElements !== -1 && t8 > this.maxNumElements) throw new Error(`TensorListResize input size ${t8} is greater maxNumElement ${this.maxNumElements}.`); - let e = new hi([], this.elementShape, this.elementDtype, this.maxNumElements); + let e = new r9([], this.elementShape, this.elementDtype, this.maxNumElements); e.tensors.length = t8; for (let o = 0; o < Math.min(this.tensors.length, t8); ++o) e.tensors[o] = this.tensors[o]; @@ -10418,8 +10419,8 @@ var hi = class { throw new Error(`Trying to access element ${t8} in a list with ${this.tensors.length} elements.`); if (this.tensors[t8] == null) throw new Error(`element at index ${t8} is null.`); - Hr(this.tensors[t8].shape, e, "TensorList shape mismatch: "); - let n = bc(this.elementShape, this.tensors, e); + Gr(this.tensors[t8].shape, e, "TensorList shape mismatch: "); + let n = mc(this.elementShape, this.tensors, e); return W(this.tensors[t8], n); } setItem(t8, e) { @@ -10427,83 +10428,83 @@ var hi = class { throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`); if (t8 < 0 || this.maxNumElements !== -1 && t8 >= this.maxNumElements) throw new Error(`Trying to set element ${t8} in a list with max ${this.maxNumElements} elements.`); - Hr(this.elementShape, e.shape, "TensorList shape mismatch: "), Rr(e), this.tensors[t8] != null && (this.tensors[t8].kept = false), this.tensors[t8] = e; + Gr(this.elementShape, e.shape, "TensorList shape mismatch: "), Er(e), this.tensors[t8] != null && (this.tensors[t8].kept = false), this.tensors[t8] = e; } gather(t8, e, o) { if (e !== this.elementDtype) throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`); - Hr(this.elementShape, o, "TensorList shape mismatch: "), t8 = t8.slice(0, this.size()); - let n = bc(this.elementShape, this.tensors, o); - return t8.length === 0 ? ur([], [0].concat(n)) : De(() => { + Gr(this.elementShape, o, "TensorList shape mismatch: "), t8 = t8.slice(0, this.size()); + let n = mc(this.elementShape, this.tensors, o); + return t8.length === 0 ? ar([], [0].concat(n)) : De(() => { let s = t8.map((a) => W(this.tensors[a], n)); - return kr(s, 0); + return vr(s, 0); }); } concat(t8, e) { if (t8 && t8 !== this.elementDtype) throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t8}`); - Hr(this.elementShape, e, "TensorList shape mismatch: "); - let o = bc(this.elementShape, this.tensors, e); - return this.size() === 0 ? ur([], [0].concat(o)) : De(() => { + Gr(this.elementShape, e, "TensorList shape mismatch: "); + let o = mc(this.elementShape, this.tensors, e); + return this.size() === 0 ? ar([], [0].concat(o)) : De(() => { let n = this.tensors.map((s) => W(s, o)); - return bt(n, 0); + return yt(n, 0); }); } }; -function IT(r, t8, e) { - 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 !== e) - throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`); - let n = r.shape.slice(1); - Hr(n, t8, "TensorList shape mismatch: "); - let s = fo(r); - return new hi(s, t8, o); +function vT(r15, t8, e) { + 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 !== e) + throw new Error(`Invalid data types; op elements ${r15.dtype}, but list elements ${e}`); + let n = r15.shape.slice(1); + Gr(n, t8, "TensorList shape mismatch: "); + let s = mo(r15); + return new dc(s, t8, o); } -function vT(r, t8, e, o) { - return new hi([], r, t8, o); +function kT(r15, t8, e, o) { + return new dc([], r15, t8, o); } -function kT(r, t8, e, o) { - if (t8.length !== r.shape[0]) - throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t8.length} vs. ${r.shape[0]}`); +function NT(r15, t8, e, o) { + if (t8.length !== r15.shape[0]) + throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t8.length} vs. ${r15.shape[0]}`); let n = Math.max(...t8); if (o != null && o !== -1 && n >= o) throw new Error(`Max index must be < array size (${n} vs. ${o})`); - let s = new hi([], e, r.dtype, o), a = fo(r, 0); + let s = new dc([], e, r15.dtype, o), a = mo(r15, 0); return t8.forEach((i, p) => { s.setItem(i, a[p]); }), s; } -function NT(r, t8, e) { +function TT(r15, t8, e) { let o = 0, n = t8.map((c) => (o += c, o)); - if (o !== r.shape[0]) + 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: ${r.shape}`); - let s = r.shape.slice(1), a = Sf(s, e), i = o === 0 ? 0 : r.size / o, p = De(() => { + ${o}, and tensor's shape is: ${r15.shape}`); + let s = r15.shape.slice(1), a = wf(s, e), i = o === 0 ? 0 : r15.size / o, p = De(() => { let c = []; - r = W(r, [1, o, i]); + r15 = W(r15, [1, o, i]); for (let l = 0; l < t8.length; ++l) { let d = [0, l === 0 ? 0 : n[l - 1], 0], f = [1, t8[l], i]; - c[l] = W(Xe(r, d, f), a); + c[l] = W(Xe(r15, d, f), a); } - return r.dispose(), c; - }), u = new hi([], e, r.dtype, t8.length); + return r15.dispose(), c; + }), u = new dc([], e, r15.dtype, t8.length); for (let c = 0; c < p.length; c++) u.setItem(c, p[c]); return u; } -var TT = async (r, t8, e) => { - switch (r.op) { +var _T = async (r15, t8, e) => { + switch (r15.op) { case "If": case "StatelessIf": { - let o = I("thenBranch", r, t8, e), n = I("elseBranch", r, t8, e), s = I("cond", r, t8, e), a = I("args", r, t8, e); + let o = I("thenBranch", r15, t8, e), n = I("elseBranch", r15, t8, e), s = I("cond", r15, t8, e), a = I("args", r15, t8, e); return (await s.data())[0] ? e.functionMap[o].executeFunctionAsync(a, e.tensorArrayMap, e.tensorListMap) : e.functionMap[n].executeFunctionAsync(a, e.tensorArrayMap, e.tensorListMap); } case "While": case "StatelessWhile": { - let o = I("body", r, t8, e), n = I("cond", r, t8, e), s = I("args", r, t8, e), a = await e.functionMap[n].executeFunctionAsync(s, e.tensorArrayMap, e.tensorListMap), i = s.map((c) => c.id), p = await a[0].data(); + let o = I("body", r15, t8, e), n = I("cond", r15, t8, e), s = I("args", r15, t8, e), a = await e.functionMap[n].executeFunctionAsync(s, e.tensorArrayMap, e.tensorListMap), i = s.map((c) => c.id), p = await a[0].data(); a.forEach((c) => { !c.kept && i.indexOf(c.id) === -1 && c.dispose(); }); @@ -10523,132 +10524,132 @@ var TT = async (r, t8, e) => { return u; } case "LoopCond": { - let o = I("pred", r, t8, e); + let o = I("pred", r15, t8, e); return [Bs(o)]; } case "Switch": { - let o = I("pred", r, t8, e), n = I("data", r, t8, e); + let o = I("pred", r15, t8, e), n = I("data", r15, t8, e); return n.kept || (n = Bs(n)), (await o.data())[0] ? [void 0, n] : [n, void 0]; } case "Merge": { - let o = r.inputNames.find((n) => zt(n, t8, e) !== void 0); + let o = r15.inputNames.find((n) => Bt(n, t8, e) !== void 0); if (o) { - let n = zt(o, t8, e); + let n = Bt(o, t8, e); return [Bs(n)]; } return; } case "Enter": { - let o = I("frameName", r, t8, e), n = I("tensor", r, t8, e); + let o = I("frameName", r15, t8, e), n = I("tensor", r15, t8, e); return e.enterFrame(o), [Bs(n)]; } case "Exit": { - let o = I("tensor", r, t8, e); + let o = I("tensor", r15, t8, e); return e.exitFrame(), [Bs(o)]; } case "NextIteration": { - let o = I("tensor", r, t8, e); + let o = I("tensor", r15, t8, e); return e.nextIteration(), [Bs(o)]; } case "TensorArrayV3": { - let o = I("size", r, t8, e), n = I("dtype", r, t8, e), s = I("elementShape", r, t8, e), a = I("dynamicSize", r, t8, e), i = I("clearAfterRead", r, t8, e), p = I("identicalElementShapes", r, t8, e), u = I("name", r, t8, e), c = new If(u, n, o, s, p, a, i); + let o = I("size", r15, t8, e), n = I("dtype", r15, t8, e), s = I("elementShape", r15, t8, e), a = I("dynamicSize", r15, t8, e), i = I("clearAfterRead", r15, t8, e), p = I("identicalElementShapes", r15, t8, e), u = I("name", r15, t8, e), c = new Sf(u, n, o, s, p, a, i); return e.addTensorArray(c), [c.idTensor, ke(1)]; } case "TensorArrayWriteV3": { - let o = I("tensorArrayId", r, t8, e), n = I("index", r, t8, e), s = I("tensor", r, t8, e), a = e.getTensorArray(o.id); + let o = I("tensorArrayId", r15, t8, e), n = I("index", r15, t8, e), s = I("tensor", r15, t8, e), a = e.getTensorArray(o.id); return a.write(n, s), [a.idTensor]; } case "TensorArrayReadV3": { - let o = I("tensorArrayId", r, t8, e), n = I("index", r, t8, e); + let o = I("tensorArrayId", r15, t8, e), n = I("index", r15, t8, e); return [e.getTensorArray(o.id).read(n)]; } case "TensorArrayGatherV3": { - let o = I("tensorArrayId", r, t8, e), n = I("indices", r, t8, e), s = I("dtype", r, t8, e); + let o = I("tensorArrayId", r15, t8, e), n = I("indices", r15, t8, e), s = I("dtype", r15, t8, e); return [e.getTensorArray(o.id).gather(n, s)]; } case "TensorArrayScatterV3": { - let o = I("tensorArrayId", r, t8, e), n = I("indices", r, t8, e), s = I("tensor", r, t8, e), a = e.getTensorArray(o.id); + let o = I("tensorArrayId", r15, t8, e), n = I("indices", r15, t8, e), s = I("tensor", r15, t8, e), a = e.getTensorArray(o.id); return a.scatter(n, s), [a.idTensor]; } case "TensorArrayConcatV3": { - let o = I("tensorArrayId", r, t8, e), n = e.getTensorArray(o.id), s = I("dtype", r, t8, e); + let o = I("tensorArrayId", r15, t8, e), n = e.getTensorArray(o.id), s = I("dtype", r15, t8, e); return [n.concat(s)]; } case "TensorArraySplitV3": { - let o = I("tensorArrayId", r, t8, e), n = I("tensor", r, t8, e), s = I("lengths", r, t8, e), a = e.getTensorArray(o.id); + let o = I("tensorArrayId", r15, t8, e), n = I("tensor", r15, t8, e), s = I("lengths", r15, t8, e), a = e.getTensorArray(o.id); return a.split(s, n), [a.idTensor]; } case "TensorArraySizeV3": { - let o = I("tensorArrayId", r, t8, e), n = e.getTensorArray(o.id); + let o = I("tensorArrayId", r15, t8, e), n = e.getTensorArray(o.id); return [ke(n.size(), "int32")]; } case "TensorArrayCloseV3": { - let o = I("tensorArrayId", r, t8, e), n = e.getTensorArray(o.id); + let o = I("tensorArrayId", r15, t8, e), n = e.getTensorArray(o.id); return n.clearAndClose(), [n.idTensor]; } case "TensorListSetItem": { - let o = I("tensorListId", r, t8, e), n = I("index", r, t8, e), s = I("tensor", r, t8, e), a = e.getTensorList(o.id); + let o = I("tensorListId", r15, t8, e), n = I("index", r15, t8, e), s = I("tensor", r15, t8, e), a = e.getTensorList(o.id); return a.setItem(n, s), [a.idTensor]; } case "TensorListGetItem": { - let o = I("tensorListId", r, t8, e), n = I("index", r, t8, e), s = I("elementShape", r, t8, e), a = I("elementDType", r, t8, e); + let o = I("tensorListId", r15, t8, e), n = I("index", r15, t8, e), s = I("elementShape", r15, t8, e), a = I("elementDType", r15, t8, e); return [e.getTensorList(o.id).getItem(n, s, a)]; } case "TensorListScatterV2": case "TensorListScatter": { - let o = I("indices", r, t8, e), n = I("tensor", r, t8, e), s = I("elementShape", r, t8, e), a = I("numElements", r, t8, e), i = kT(n, o, s, a); + let o = I("indices", r15, t8, e), n = I("tensor", r15, t8, e), s = I("elementShape", r15, t8, e), a = I("numElements", r15, t8, e), i = NT(n, o, s, a); return e.addTensorList(i), [i.idTensor]; } case "TensorListReserve": case "EmptyTensorList": { - let o = I("elementShape", r, t8, e), n = I("elementDType", r, t8, e), s; - r.op === "TensorListReserve" ? s = "numElements" : s = "maxNumElements"; - let a = I(s, r, t8, e), i = r.op === "TensorListReserve" ? -1 : a, p = vT(o, n, a, i); + let o = I("elementShape", r15, t8, e), n = I("elementDType", r15, t8, e), s; + r15.op === "TensorListReserve" ? s = "numElements" : s = "maxNumElements"; + let a = I(s, r15, t8, e), i = r15.op === "TensorListReserve" ? -1 : a, p = kT(o, n, a, i); return e.addTensorList(p), [p.idTensor]; } case "TensorListGather": { - let o = I("tensorListId", r, t8, e), n = I("indices", r, t8, e), s = I("elementShape", r, t8, e), a = I("elementDType", r, t8, e); + let o = I("tensorListId", r15, t8, e), n = I("indices", r15, t8, e), s = I("elementShape", r15, t8, e), a = I("elementDType", r15, t8, e); return [e.getTensorList(o.id).gather(n, a, s)]; } case "TensorListStack": { - let o = I("tensorListId", r, t8, e), n = I("elementShape", r, t8, e), s = I("elementDType", r, t8, e), a = I("numElements", r, t8, e); + let o = I("tensorListId", r15, t8, e), n = I("elementShape", r15, t8, e), s = I("elementDType", r15, t8, e), a = I("numElements", r15, t8, e); return [e.getTensorList(o.id).stack(n, s, a)]; } case "TensorListFromTensor": { - let o = I("tensor", r, t8, e), n = I("elementShape", r, t8, e), s = I("elementDType", r, t8, e), a = IT(o, n, s); + let o = I("tensor", r15, t8, e), n = I("elementShape", r15, t8, e), s = I("elementDType", r15, t8, e), a = vT(o, n, s); return e.addTensorList(a), [a.idTensor]; } case "TensorListConcat": case "TensorListConcatV2": { - let o = I("tensorListId", r, t8, e), n = e.getTensorList(o.id), s = I("dtype", r, t8, e), a = I("elementShape", r, t8, e); + let o = I("tensorListId", r15, t8, e), n = e.getTensorList(o.id), s = I("dtype", r15, t8, e), a = I("elementShape", r15, t8, e); return [n.concat(s, a)]; } case "TensorListPushBack": { - let o = I("tensorListId", r, t8, e), n = I("tensor", r, t8, e), s = e.getTensorList(o.id); + let o = I("tensorListId", r15, t8, e), n = I("tensor", r15, t8, e), s = e.getTensorList(o.id); return s.pushBack(n), [s.idTensor]; } case "TensorListPopBack": { - let o = I("tensorListId", r, t8, e), n = I("elementShape", r, t8, e), s = I("elementDType", r, t8, e); + let o = I("tensorListId", r15, t8, e), n = I("elementShape", r15, t8, e), s = I("elementDType", r15, t8, e); return [e.getTensorList(o.id).popBack(n, s)]; } case "TensorListSplit": { - let o = I("tensor", r, t8, e), n = I("elementShape", r, t8, e), s = I("lengths", r, t8, e), a = NT(o, s, n); + let o = I("tensor", r15, t8, e), n = I("elementShape", r15, t8, e), s = I("lengths", r15, t8, e), a = TT(o, s, n); return e.addTensorList(a), [a.idTensor]; } case "TensorListLength": { - let o = I("tensorListId", r, t8, e), n = e.getTensorList(o.id); + let o = I("tensorListId", r15, t8, e), n = e.getTensorList(o.id); return [ke(n.size(), "int32")]; } case "TensorListResize": { - let o = I("tensorListId", r, t8, e), n = I("size", r, t8, e), a = e.getTensorList(o.id).resize(n); + let o = I("tensorListId", r15, t8, e), n = I("size", r15, t8, e), a = e.getTensorList(o.id).resize(n); return e.addTensorList(a), [a.idTensor]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function _T(r, t8, e) { - let [o, n] = I("fusedOps", r, t8, e), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r, t8, e); +function $T(r15, t8, e) { + let [o, n] = I("fusedOps", r15, t8, e), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r15, t8, e); if (s) { if (i && u !== 2) throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha."); @@ -10657,216 +10658,216 @@ function _T(r, t8, e) { } if (p) throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported"); - let c = I("strides", r, t8, e), l = Ol(r, t8, e), m = I("dataFormat", r, t8, e).toUpperCase(), d = I("dilations", r, t8, e), [f, h] = I("args", r, t8, e); + let c = I("strides", r15, t8, e), l = Al(r15, t8, e), m = I("dataFormat", r15, t8, e).toUpperCase(), d = I("dilations", r15, t8, e), [f, h] = I("args", r15, t8, e); a && (h = f, f = void 0); - let g = I("leakyreluAlpha", r, t8, e); + let g = I("leakyreluAlpha", r15, t8, e); return { stride: c, pad: l, dataFormat: m, dilations: d, biasArg: f, preluArg: h, activationFunc: n, leakyreluAlpha: g }; } -var $T = (r, t8, e, o = Je) => { - switch (r.op) { +var ET = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Conv1D": { - let n = I("stride", r, t8, e), s = I("pad", r, t8, e), a = I("dataFormat", r, t8, e).toUpperCase(), i = I("dilation", r, t8, e); - return [o.conv1d(I("x", r, t8, e), I("filter", r, t8, e), n, s, a, i)]; + let n = I("stride", r15, t8, e), s = I("pad", r15, t8, e), a = I("dataFormat", r15, t8, e).toUpperCase(), i = I("dilation", r15, t8, e); + return [o.conv1d(I("x", r15, t8, e), I("filter", r15, t8, e), n, s, a, i)]; } case "Conv2D": { - let n = I("strides", r, t8, e), s = Ol(r, t8, e), a = I("dataFormat", r, t8, e).toUpperCase(), i = I("dilations", r, t8, e); - return [o.conv2d(I("x", r, t8, e), I("filter", r, t8, e), [n[1], n[2]], s, a, [i[1], i[2]])]; + let n = I("strides", r15, t8, e), s = Al(r15, t8, e), a = I("dataFormat", r15, t8, e).toUpperCase(), i = I("dilations", r15, t8, e); + return [o.conv2d(I("x", r15, t8, e), I("filter", r15, t8, e), [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 } = _T(r, t8, e); - return [o.fused.conv2d({ x: I("x", r, t8, e), filter: I("filter", r, t8, e), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = $T(r15, t8, e); + return [o.fused.conv2d({ x: I("x", r15, t8, e), filter: I("filter", r15, t8, e), 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 } = _T(r, t8, e); - return [o.fused.depthwiseConv2d({ x: I("x", r, t8, e), filter: I("filter", r, t8, e), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = $T(r15, t8, e); + return [o.fused.depthwiseConv2d({ x: I("x", r15, t8, e), filter: I("filter", r15, t8, e), 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, t8, e), s = I("strides", r, t8, e), a = Ol(r, t8, e); - return [o.conv2dTranspose(I("x", r, t8, e), I("filter", r, t8, e), n, [s[1], s[2]], a)]; + let n = I("outputShape", r15, t8, e), s = I("strides", r15, t8, e), a = Al(r15, t8, e); + return [o.conv2dTranspose(I("x", r15, t8, e), I("filter", r15, t8, e), n, [s[1], s[2]], a)]; } case "DepthwiseConv2dNative": case "DepthwiseConv2d": { - let n = I("strides", r, t8, e), s = Ol(r, t8, e), a = I("dilations", r, t8, e), i = I("dataFormat", r, t8, e).toUpperCase(); - return [o.depthwiseConv2d(I("input", r, t8, e), I("filter", r, t8, e), [n[1], n[2]], s, i, [a[1], a[2]])]; + let n = I("strides", r15, t8, e), s = Al(r15, t8, e), a = I("dilations", r15, t8, e), i = I("dataFormat", r15, t8, e).toUpperCase(); + return [o.depthwiseConv2d(I("input", r15, t8, e), I("filter", r15, t8, e), [n[1], n[2]], s, i, [a[1], a[2]])]; } case "Conv3D": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("dataFormat", r, t8, e).toUpperCase(), i = I("dilations", r, t8, e); - return [o.conv3d(I("x", r, t8, e), I("filter", r, t8, e), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("dataFormat", r15, t8, e).toUpperCase(), i = I("dilations", r15, t8, e); + return [o.conv3d(I("x", r15, t8, e), I("filter", r15, t8, e), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; } case "AvgPool": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("kernelSize", r, t8, e); - return [o.avgPool(I("x", r, t8, e), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("kernelSize", r15, t8, e); + return [o.avgPool(I("x", r15, t8, e), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPool": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("kernelSize", r, t8, e); - return [o.maxPool(I("x", r, t8, e), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("kernelSize", r15, t8, e); + return [o.maxPool(I("x", r15, t8, e), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPoolWithArgmax": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("kernelSize", r, t8, e), i = I("includeBatchInIndex", r, t8, e), { result: p, indexes: u } = o.maxPoolWithArgmax(I("x", r, t8, e), [a[1], a[2]], [n[1], n[2]], s, i); + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("kernelSize", r15, t8, e), i = I("includeBatchInIndex", r15, t8, e), { result: p, indexes: u } = o.maxPoolWithArgmax(I("x", r15, t8, e), [a[1], a[2]], [n[1], n[2]], s, i); return [p, u]; } case "AvgPool3D": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("kernelSize", r, t8, e); - return [o.avgPool3d(I("x", r, t8, e), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("kernelSize", r15, t8, e); + return [o.avgPool3d(I("x", r15, t8, e), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "MaxPool3D": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("kernelSize", r, t8, e); - return [o.maxPool3d(I("x", r, t8, e), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("kernelSize", r15, t8, e); + return [o.maxPool3d(I("x", r15, t8, e), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "Dilation2D": { - let n = I("strides", r, t8, e), s = I("pad", r, t8, e), a = I("dilations", r, t8, e), i = n[1], p = n[2], u = a[1], c = a[2]; - return [o.dilation2d(I("x", r, t8, e), I("filter", r, t8, e), [i, p], s, [u, c], "NHWC")]; + let n = I("strides", r15, t8, e), s = I("pad", r15, t8, e), a = I("dilations", r15, t8, e), i = n[1], p = n[2], u = a[1], c = a[2]; + return [o.dilation2d(I("x", r15, t8, e), I("filter", r15, t8, e), [i, p], s, [u, c], "NHWC")]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var ET = (r, t8, e, o = Je) => { - switch (r.op) { +var RT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Fill": { - let n = I("shape", r, t8, e), s = I("dtype", r, t8, e), a = I("value", r, t8, e); + let n = I("shape", r15, t8, e), s = I("dtype", r15, t8, e), a = I("value", r15, t8, e); return [o.fill(n, a, s)]; } case "LinSpace": { - let n = I("start", r, t8, e), s = I("stop", r, t8, e), a = I("num", r, t8, e); + let n = I("start", r15, t8, e), s = I("stop", r15, t8, e), a = I("num", r15, t8, e); return [o.linspace(n, s, a)]; } case "Multinomial": { - let n = I("logits", r, t8, e), s = I("numSamples", r, t8, e), a = I("seed", r, t8, e); + let n = I("logits", r15, t8, e), s = I("numSamples", r15, t8, e), a = I("seed", r15, t8, e); return [o.multinomial(n, s, a)]; } case "OneHot": { - let n = I("indices", r, t8, e), s = I("depth", r, t8, e), a = I("onValue", r, t8, e), i = I("offValue", r, t8, e), p = I("dtype", r, t8, e); + let n = I("indices", r15, t8, e), s = I("depth", r15, t8, e), a = I("onValue", r15, t8, e), i = I("offValue", r15, t8, e), p = I("dtype", r15, t8, e); return [o.oneHot(n, s, a, i, p)]; } case "Ones": - return [o.ones(I("shape", r, t8, e), I("dtype", r, t8, e))]; + return [o.ones(I("shape", r15, t8, e), I("dtype", r15, t8, e))]; case "OnesLike": - return [o.onesLike(I("x", r, t8, e))]; + return [o.onesLike(I("x", r15, t8, e))]; case "RandomStandardNormal": - return [o.randomStandardNormal(I("shape", r, t8, e), I("dtype", r, t8, e), I("seed", r, t8, e))]; + return [o.randomStandardNormal(I("shape", r15, t8, e), I("dtype", r15, t8, e), I("seed", r15, t8, e))]; case "RandomUniform": - return [o.randomUniform(I("shape", r, t8, e), I("minval", r, t8, e), I("maxval", r, t8, e), I("dtype", r, t8, e))]; + return [o.randomUniform(I("shape", r15, t8, e), I("minval", r15, t8, e), I("maxval", r15, t8, e), I("dtype", r15, t8, e))]; case "RandomUniformInt": - return [o.randomUniformInt(I("shape", r, t8, e), I("minval", r, t8, e), I("maxval", r, t8, e), I("seed", r, t8, e))]; + return [o.randomUniformInt(I("shape", r15, t8, e), I("minval", r15, t8, e), I("maxval", r15, t8, e), I("seed", r15, t8, e))]; case "Range": { - let n = I("start", r, t8, e), s = I("stop", r, t8, e), a = I("step", r, t8, e); - return [o.range(n, s, a, I("dtype", r, t8, e))]; + let n = I("start", r15, t8, e), s = I("stop", r15, t8, e), a = I("step", r15, t8, e); + return [o.range(n, s, a, I("dtype", r15, t8, e))]; } case "TruncatedNormal": { - let n = I("shape", r, t8, e), s = I("mean", r, t8, e), a = I("stdDev", r, t8, e), i = I("seed", r, t8, e); - return [o.truncatedNormal(n, s, a, I("dtype", r, t8, e), i)]; + let n = I("shape", r15, t8, e), s = I("mean", r15, t8, e), a = I("stdDev", r15, t8, e), i = I("seed", r15, t8, e); + return [o.truncatedNormal(n, s, a, I("dtype", r15, t8, e), i)]; } case "Zeros": - return [o.zeros(I("shape", r, t8, e), I("dtype", r, t8, e))]; + return [o.zeros(I("shape", r15, t8, e), I("dtype", r15, t8, e))]; case "ZerosLike": - return [o.zerosLike(I("x", r, t8, e))]; + return [o.zerosLike(I("x", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function PS(r, t8, e) { - let o = I("boxes", r, t8, e), n = I("scores", r, t8, e), s = I("maxOutputSize", r, t8, e), a = I("iouThreshold", r, t8, e), i = I("scoreThreshold", r, t8, e), p = I("softNmsSigma", r, t8, e); +function PS(r15, t8, e) { + let o = I("boxes", r15, t8, e), n = I("scores", r15, t8, e), s = I("maxOutputSize", r15, t8, e), a = I("iouThreshold", r15, t8, e), i = I("scoreThreshold", r15, t8, e), p = I("softNmsSigma", r15, t8, e); return { boxes: o, scores: n, maxOutputSize: s, iouThreshold: a, scoreThreshold: i, softNmsSigma: p }; } -var RT = async (r, t8, e, o, n = Je) => { - switch (r.op) { +var DT = async (r15, t8, e, o, n = Je) => { + switch (r15.op) { case "NonMaxSuppressionV5": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: c } = PS(r, t8, e), l = await n.image.nonMaxSuppressionWithScoreAsync(s, a, i, p, u, c); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: c } = PS(r15, t8, e), 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 } = PS(r, t8, e), c = I("padToMaxOutputSize", r, t8, e), l = await n.image.nonMaxSuppressionPaddedAsync(s, a, i, p, u, c); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = PS(r15, t8, e), c = I("padToMaxOutputSize", r15, t8, e), 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 } = PS(r, t8, e); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = PS(r15, t8, e); return [await n.image.nonMaxSuppressionAsync(s, a, i, p, u)]; } case "Where": { - let s = n.cast(I("condition", r, t8, e), "bool"), a = [await n.whereAsync(s)]; + let s = n.cast(I("condition", r15, t8, e), "bool"), a = [await n.whereAsync(s)]; return s.dispose(), a; } case "ListDiff": - return n.setdiff1dAsync(I("x", r, t8, e), I("y", r, t8, e)); + return n.setdiff1dAsync(I("x", r15, t8, e), I("y", r15, t8, e)); default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var DT = (r, t8, e, o = Je) => { - switch (r.op) { +var AT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "LowerBound": { - let n = I("sortedSequence", r, t8, e), s = I("values", r, t8, e); + let n = I("sortedSequence", r15, t8, e), s = I("values", r15, t8, e); return [o.lowerBound(n, s)]; } case "TopKV2": { - let n = I("x", r, t8, e), s = I("k", r, t8, e), a = I("sorted", r, t8, e), i = o.topk(n, s, a); + let n = I("x", r15, t8, e), s = I("k", r15, t8, e), a = I("sorted", r15, t8, e), i = o.topk(n, s, a); return [i.values, i.indices]; } case "UpperBound": { - let n = I("sortedSequence", r, t8, e), s = I("values", r, t8, e); + let n = I("sortedSequence", r15, t8, e), s = I("values", r15, t8, e); return [o.upperBound(n, s)]; } case "Unique": { - let n = I("x", r, t8, e), s = o.unique(n); + let n = I("x", r15, t8, e), s = o.unique(n); return [s.values, s.indices]; } case "UniqueV2": { - let n = I("x", r, t8, e), s = I("axis", r, t8, e), a = o.unique(n, s); + let n = I("x", r15, t8, e), s = I("axis", r15, t8, e), a = o.unique(n, s); return [a.values, a.indices]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var AT = (r, t8, e, o = Je) => { - switch (r.op) { +var FT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Const": - return t8[r.name]; + return t8[r15.name]; case "PlaceholderWithDefault": - let n = I("default", r, t8, e); - return [zt(r.name, t8, e) || n]; + let n = I("default", r15, t8, e); + return [Bt(r15.name, t8, e) || n]; case "Placeholder": - return [zt(r.name, t8, e)]; + return [Bt(r15.name, t8, e)]; case "Identity": case "StopGradient": case "FakeQuantWithMinMaxVars": { - let c = I("x", r, t8, e); + let c = I("x", r15, t8, e); return [Bs(c)]; } case "IdentityN": - return I("x", r, t8, e).map((c) => Bs(c)); + return I("x", r15, t8, e).map((c) => Bs(c)); case "Snapshot": - let s = I("x", r, t8, e); + let s = I("x", r15, t8, e); return [Bs(s)]; case "Shape": - return [o.tensor1d(I("x", r, t8, e).shape, "int32")]; + return [o.tensor1d(I("x", r15, t8, e).shape, "int32")]; case "ShapeN": - return I("x", r, t8, e).map((c) => o.tensor1d(c.shape)); + return I("x", r15, t8, e).map((c) => o.tensor1d(c.shape)); case "Size": - return [o.scalar(I("x", r, t8, e).size, "int32")]; + return [o.scalar(I("x", r15, t8, e).size, "int32")]; case "Rank": - return [o.scalar(I("x", r, t8, e).rank, "int32")]; + return [o.scalar(I("x", r15, t8, e).rank, "int32")]; case "NoOp": return [o.scalar(1)]; case "Print": - let a = I("x", r, t8, e), i = I("data", r, t8, e), p = I("message", r, t8, e), u = I("summarize", r, t8, e); + let a = I("x", r15, t8, e), i = I("data", r15, t8, e), p = I("message", r15, t8, e), u = I("summarize", r15, t8, e); 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)); return [a]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var vf = class { +var If = class { get id() { return this.handle.id; } constructor(t8, e) { - this.keyDType = t8, this.valueDType = e, this.handle = ke(0), this.tensorMap = /* @__PURE__ */ new Map(), Rr(this.handle); + this.keyDType = t8, this.valueDType = e, this.handle = ke(0), this.tensorMap = /* @__PURE__ */ new Map(), Er(this.handle); } clearAndClose() { this.tensorMap.forEach((t8) => t8.dispose()), this.tensorMap.clear(), this.handle.dispose(); @@ -10881,11 +10882,11 @@ var vf = class { this.checkKeyAndValueTensor(t8, e); let o = await t8.data(); return this.tensorMap.forEach((n) => n.dispose()), this.tensorMap.clear(), De(() => { - let n = fo(e), s = o.length, a = n.length; + let n = mo(e), s = o.length, a = n.length; y.assert(s === a, () => `The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`); for (let i = 0; i < s; i++) { let p = o[i], u = n[i]; - Rr(u), this.tensorMap.set(p, u); + Er(u), this.tensorMap.set(p, u); } return this.handle; }); @@ -10899,7 +10900,7 @@ var vf = class { let a = o[s], i = this.findWithDefault(a, e); n.push(i); } - return kr(n); + return vr(n); }); } findWithDefault(t8, e) { @@ -10913,245 +10914,245 @@ var vf = class { throw new Error(`Expect value dtype ${this.valueDType}, but got ${e.dtype}`); } }; -var FT = async (r, t8, e, o) => { - switch (r.op) { +var PT = async (r15, t8, e, o) => { + switch (r15.op) { case "HashTable": case "HashTableV2": { - let n = o.getHashTableHandleByName(r.name); + let n = o.getHashTableHandleByName(r15.name); if (n != null) return [n]; { - let s = I("keyDType", r, t8, e), a = I("valueDType", r, t8, e), i = new vf(s, a); - return o.addHashTable(r.name, i), [i.handle]; + let s = I("keyDType", r15, t8, e), a = I("valueDType", r15, t8, e), i = new If(s, a); + return o.addHashTable(r15.name, i), [i.handle]; } } case "InitializeTable": case "InitializeTableV2": case "LookupTableImport": case "LookupTableImportV2": { - let n = I("tableHandle", r, t8, e, o), s = I("keys", r, t8, e), a = I("values", r, t8, e); + let n = I("tableHandle", r15, t8, e, o), s = I("keys", r15, t8, e), a = I("values", r15, t8, e); return [await o.getHashTableById(n.id).import(s, a)]; } case "LookupTableFind": case "LookupTableFindV2": { - let n = I("tableHandle", r, t8, e, o), s = I("keys", r, t8, e), a = I("defaultValue", r, t8, e); + let n = I("tableHandle", r15, t8, e, o), s = I("keys", r15, t8, e), a = I("defaultValue", r15, t8, e); return [await o.getHashTableById(n.id).find(s, a)]; } case "LookupTableSize": case "LookupTableSizeV2": { - let n = I("tableHandle", r, t8, e, o); + let n = I("tableHandle", r15, t8, e, o); return [o.getHashTableById(n.id).tensorSize()]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var PT = (r, t8, e, o = Je) => { - switch (r.op) { +var OT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "ResizeBilinear": { - let n = I("images", r, t8, e), s = I("size", r, t8, e), a = I("alignCorners", r, t8, e), i = I("halfPixelCenters", r, t8, e); + let n = I("images", r15, t8, e), s = I("size", r15, t8, e), a = I("alignCorners", r15, t8, e), i = I("halfPixelCenters", r15, t8, e); return [o.image.resizeBilinear(n, [s[0], s[1]], a, i)]; } case "ResizeNearestNeighbor": { - let n = I("images", r, t8, e), s = I("size", r, t8, e), a = I("alignCorners", r, t8, e), i = I("halfPixelCenters", r, t8, e); + let n = I("images", r15, t8, e), s = I("size", r15, t8, e), a = I("alignCorners", r15, t8, e), i = I("halfPixelCenters", r15, t8, e); return [o.image.resizeNearestNeighbor(n, [s[0], s[1]], a, i)]; } case "CropAndResize": { - let n = I("image", r, t8, e), s = I("boxes", r, t8, e), a = I("boxInd", r, t8, e), i = I("cropSize", r, t8, e), p = I("method", r, t8, e), u = I("extrapolationValue", r, t8, e); + let n = I("image", r15, t8, e), s = I("boxes", r15, t8, e), a = I("boxInd", r15, t8, e), i = I("cropSize", r15, t8, e), p = I("method", r15, t8, e), u = I("extrapolationValue", r15, t8, e); return [o.image.cropAndResize(n, s, a, i, p, u)]; } case "ImageProjectiveTransformV3": { - let n = I("images", r, t8, e), s = I("transforms", r, t8, e), a = I("outputShape", r, t8, e), i = I("fillValue", r, t8, e), p = I("interpolation", r, t8, e), u = I("fillMode", r, t8, e); + let n = I("images", r15, t8, e), s = I("transforms", r15, t8, e), a = I("outputShape", r15, t8, e), i = I("fillValue", r15, t8, e), p = I("interpolation", r15, t8, e), u = I("fillMode", r15, t8, e); return [o.image.transform(n, s, p.toLowerCase(), u.toLowerCase(), i, a)]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var OT = (r, t8, e, o = Je) => { - switch (r.op) { +var MT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Equal": - return [o.equal(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.equal(I("a", r15, t8, e), I("b", r15, t8, e))]; case "NotEqual": - return [o.notEqual(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.notEqual(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Greater": - return [o.greater(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.greater(I("a", r15, t8, e), I("b", r15, t8, e))]; case "GreaterEqual": - return [o.greaterEqual(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.greaterEqual(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Less": - return [o.less(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.less(I("a", r15, t8, e), I("b", r15, t8, e))]; case "LessEqual": - return [o.lessEqual(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.lessEqual(I("a", r15, t8, e), I("b", r15, t8, e))]; case "LogicalAnd": - return [o.logicalAnd(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.logicalAnd(I("a", r15, t8, e), I("b", r15, t8, e))]; case "LogicalNot": - return [o.logicalNot(I("a", r, t8, e))]; + return [o.logicalNot(I("a", r15, t8, e))]; case "LogicalOr": - return [o.logicalOr(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.logicalOr(I("a", r15, t8, e), I("b", r15, t8, e))]; case "Select": case "SelectV2": - return [o.where(I("condition", r, t8, e), I("a", r, t8, e), I("b", r, t8, e))]; + return [o.where(I("condition", r15, t8, e), I("a", r15, t8, e), I("b", r15, t8, e))]; case "BitwiseAnd": - return [o.bitwiseAnd(I("a", r, t8, e), I("b", r, t8, e))]; + return [o.bitwiseAnd(I("a", r15, t8, e), I("b", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var MT = (r, t8, e, o = Je) => { - switch (r.op) { +var LT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "BatchMatMul": case "BatchMatMulV2": case "MatMul": - return [o.matMul(I("a", r, t8, e), I("b", r, t8, e), I("transposeA", r, t8, e), I("transposeB", r, t8, e))]; + return [o.matMul(I("a", r15, t8, e), I("b", r15, t8, e), I("transposeA", r15, t8, e), I("transposeB", r15, t8, e))]; case "Einsum": - return [o.einsum(I("equation", r, t8, e), ...I("tensors", r, t8, e))]; + return [o.einsum(I("equation", r15, t8, e), ...I("tensors", r15, t8, e))]; case "Transpose": - return [o.transpose(I("x", r, t8, e), I("perm", r, t8, e))]; + return [o.transpose(I("x", r15, t8, e), I("perm", r15, t8, e))]; case "_FusedMatMul": - let [n, s] = I("fusedOps", r, t8, e), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r, t8, e), u = I("leakyreluAlpha", r, t8, e); + let [n, s] = I("fusedOps", r15, t8, e), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r15, t8, e), u = I("leakyreluAlpha", r15, t8, e); 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, t8, e); - return [o.fused.matMul({ a: I("a", r, t8, e), b: I("b", r, t8, e), transposeA: I("transposeA", r, t8, e), transposeB: I("transposeB", r, t8, e), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; + let [c, l] = I("args", r15, t8, e); + return [o.fused.matMul({ a: I("a", r15, t8, e), b: I("b", r15, t8, e), transposeA: I("transposeA", r15, t8, e), transposeB: I("transposeB", r15, t8, e), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; case "MatrixBandPart": - return [o.linalg.bandPart(I("a", r, t8, e), I("numLower", r, t8, e), I("numUpper", r, t8, e))]; + return [o.linalg.bandPart(I("a", r15, t8, e), I("numLower", r15, t8, e), I("numUpper", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var LT = (r, t8, e, o = Je) => { - switch (r.op) { +var BT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "EuclideanNorm": - return [o.euclideanNorm(I("x", r, t8, e), I("axis", r, t8, e), I("keepDims", r, t8, e))]; + return [o.euclideanNorm(I("x", r15, t8, e), I("axis", r15, t8, e), I("keepDims", r15, t8, e))]; case "FusedBatchNorm": case "FusedBatchNormV2": - return [o.batchNorm(I("x", r, t8, e), I("mean", r, t8, e), I("variance", r, t8, e), I("offset", r, t8, e), I("scale", r, t8, e), I("epsilon", r, t8, e))]; + return [o.batchNorm(I("x", r15, t8, e), I("mean", r15, t8, e), I("variance", r15, t8, e), I("offset", r15, t8, e), I("scale", r15, t8, e), I("epsilon", r15, t8, e))]; case "FusedBatchNormV3": - return [o.batchNorm(I("x", r, t8, e), I("mean", r, t8, e), I("variance", r, t8, e), I("offset", r, t8, e), I("scale", r, t8, e), I("epsilon", r, t8, e))]; + return [o.batchNorm(I("x", r15, t8, e), I("mean", r15, t8, e), I("variance", r15, t8, e), I("offset", r15, t8, e), I("scale", r15, t8, e), I("epsilon", r15, t8, e))]; case "LRN": - return [o.localResponseNormalization(I("x", r, t8, e), I("radius", r, t8, e), I("bias", r, t8, e), I("alpha", r, t8, e), I("beta", r, t8, e))]; + return [o.localResponseNormalization(I("x", r15, t8, e), I("radius", r15, t8, e), I("bias", r15, t8, e), I("alpha", r15, t8, e), I("beta", r15, t8, e))]; case "Softmax": - return [o.softmax(I("x", r, t8, e))]; + return [o.softmax(I("x", r15, t8, e))]; case "LogSoftmax": - return [o.logSoftmax(I("x", r, t8, e))]; + return [o.logSoftmax(I("x", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var BT = (r, t8, e, o = Je) => { - switch (r.op) { +var zT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "RaggedGather": { - let { outputNestedSplits: n, outputDenseValues: s } = o.raggedGather(I("paramsNestedSplits", r, t8, e), I("paramsDenseValues", r, t8, e), I("indices", r, t8, e), I("outputRaggedRank", r, t8, e)); + let { outputNestedSplits: n, outputDenseValues: s } = o.raggedGather(I("paramsNestedSplits", r15, t8, e), I("paramsDenseValues", r15, t8, e), I("indices", r15, t8, e), I("outputRaggedRank", r15, t8, e)); return n.concat(s); } case "RaggedRange": { - let { rtNestedSplits: n, rtDenseValues: s } = o.raggedRange(I("starts", r, t8, e), I("limits", r, t8, e), I("splits", r, t8, e)); + let { rtNestedSplits: n, rtDenseValues: s } = o.raggedRange(I("starts", r15, t8, e), I("limits", r15, t8, e), I("splits", r15, t8, e)); return [n, s]; } case "RaggedTensorToTensor": - return [o.raggedTensorToTensor(I("shape", r, t8, e), I("values", r, t8, e), I("defaultValue", r, t8, e), I("rowPartitionTensors", r, t8, e), I("rowPartitionTypes", r, t8, e))]; + return [o.raggedTensorToTensor(I("shape", r15, t8, e), I("values", r15, t8, e), I("defaultValue", r15, t8, e), I("rowPartitionTensors", r15, t8, e), I("rowPartitionTypes", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var zT = (r, t8, e, o = Je) => { - switch (r.op) { +var VT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Max": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.max(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.max(I("x", r15, t8, e), i, p)]; } case "Mean": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.mean(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.mean(I("x", r15, t8, e), i, p)]; } case "Min": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.min(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.min(I("x", r15, t8, e), i, p)]; } case "Sum": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.sum(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.sum(I("x", r15, t8, e), i, p)]; } case "All": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.all(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.all(I("x", r15, t8, e), i, p)]; } case "Any": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.any(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.any(I("x", r15, t8, e), i, p)]; } case "ArgMax": { - let i = I("axis", r, t8, e); - return [o.argMax(I("x", r, t8, e), i)]; + let i = I("axis", r15, t8, e); + return [o.argMax(I("x", r15, t8, e), i)]; } case "ArgMin": { - let i = I("axis", r, t8, e); - return [o.argMin(I("x", r, t8, e), i)]; + let i = I("axis", r15, t8, e); + return [o.argMin(I("x", r15, t8, e), i)]; } case "Prod": { - let i = I("axis", r, t8, e), p = I("keepDims", r, t8, e); - return [o.prod(I("x", r, t8, e), i, p)]; + let i = I("axis", r15, t8, e), p = I("keepDims", r15, t8, e); + return [o.prod(I("x", r15, t8, e), i, p)]; } case "Cumprod": { - let i = I("axis", r, t8, e), p = I("exclusive", r, t8, e), u = I("reverse", r, t8, e); - return [o.cumprod(I("x", r, t8, e), i, p, u)]; + let i = I("axis", r15, t8, e), p = I("exclusive", r15, t8, e), u = I("reverse", r15, t8, e); + return [o.cumprod(I("x", r15, t8, e), i, p, u)]; } case "Cumsum": { - let i = I("axis", r, t8, e), p = I("exclusive", r, t8, e), u = I("reverse", r, t8, e); - return [o.cumsum(I("x", r, t8, e), i, p, u)]; + let i = I("axis", r15, t8, e), p = I("exclusive", r15, t8, e), u = I("reverse", r15, t8, e); + return [o.cumsum(I("x", r15, t8, e), i, p, u)]; } case "Bincount": - let n = I("x", r, t8, e), s = I("weights", r, t8, e), a = I("size", r, t8, e); + let n = I("x", r15, t8, e), s = I("weights", r15, t8, e), a = I("size", r15, t8, e); return [o.bincount(n, s, a)]; case "DenseBincount": { - let i = I("x", r, t8, e), p = I("weights", r, t8, e), u = I("size", r, t8, e), c = I("binaryOutput", r, t8, e); + let i = I("x", r15, t8, e), p = I("weights", r15, t8, e), u = I("size", r15, t8, e), c = I("binaryOutput", r15, t8, e); return [o.denseBincount(i, p, u, c)]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var VT = (r, t8, e, o = Je) => { - switch (r.op) { +var WT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "ConcatV2": case "Concat": { - let n = I("n", r, t8, e), s = I("axis", r, t8, e), a = I("tensors", r, t8, e); + let n = I("n", r15, t8, e), s = I("axis", r15, t8, e), a = I("tensors", r15, t8, e); return a = a.slice(0, n), [o.concat(a, s)]; } case "Gather": { - let n = I("x", r, t8, e), s = I("indices", r, t8, e); + let n = I("x", r15, t8, e), s = I("indices", r15, t8, e); return [o.gather(n, o.cast(s, "int32"), 0)]; } case "GatherV2": { - let n = I("axis", r, t8, e), s = I("batchDims", r, t8, e), a = I("x", r, t8, e), i = I("indices", r, t8, e); + let n = I("axis", r15, t8, e), s = I("batchDims", r15, t8, e), a = I("x", r15, t8, e), i = I("indices", r15, t8, e); return [o.gather(a, o.cast(i, "int32"), n, s)]; } case "Reverse": { - let n = I("dims", r, t8, e), s = []; + let n = I("dims", r15, t8, e), s = []; for (let i = 0; i < n.length; i++) n[i] && s.push(i); - let a = I("x", r, t8, e); + let a = I("x", r15, t8, e); return [o.reverse(a, s)]; } case "ReverseV2": { - let n = I("axis", r, t8, e), s = I("x", r, t8, e); + let n = I("axis", r15, t8, e), s = I("x", r15, t8, e); return [o.reverse(s, n)]; } case "Slice": { - let n = I("begin", r, t8, e), s = I("size", r, t8, e); - return [o.slice(I("x", r, t8, e), n, s)]; + let n = I("begin", r15, t8, e), s = I("size", r15, t8, e); + return [o.slice(I("x", r15, t8, e), n, s)]; } case "StridedSlice": { - let n = I("begin", r, t8, e), s = I("end", r, t8, e), a = I("strides", r, t8, e), i = I("beginMask", r, t8, e), p = I("endMask", r, t8, e), u = I("ellipsisMask", r, t8, e), c = I("newAxisMask", r, t8, e), l = I("shrinkAxisMask", r, t8, e), m = I("x", r, t8, e); + let n = I("begin", r15, t8, e), s = I("end", r15, t8, e), a = I("strides", r15, t8, e), i = I("beginMask", r15, t8, e), p = I("endMask", r15, t8, e), u = I("ellipsisMask", r15, t8, e), c = I("newAxisMask", r15, t8, e), l = I("shrinkAxisMask", r15, t8, e), m = I("x", r15, t8, e); return [o.stridedSlice(m, n, s, a, i, p, u, c, l)]; } case "Pack": return De(() => { - let n = I("axis", r, t8, e), s = I("tensors", r, t8, e), a = s[0].shape, i = o.squeeze(s[0]).shape, p = s.map((u) => { + let n = I("axis", r15, t8, e), s = I("tensors", r15, t8, e), 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"); @@ -11160,184 +11161,184 @@ var VT = (r, t8, e, o = Je) => { return [o.stack(p, n)]; }); case "Unpack": { - let n = I("axis", r, t8, e), s = I("tensor", r, t8, e); + let n = I("axis", r15, t8, e), s = I("tensor", r15, t8, e); return o.unstack(s, n); } case "Tile": { - let n = I("reps", r, t8, e); - return [o.tile(I("x", r, t8, e), n)]; + let n = I("reps", r15, t8, e); + return [o.tile(I("x", r15, t8, e), n)]; } case "Split": case "SplitV": { - let n = I("axis", r, t8, e), s = I("numOrSizeSplits", r, t8, e), a = I("x", r, t8, e); + let n = I("axis", r15, t8, e), s = I("numOrSizeSplits", r15, t8, e), a = I("x", r15, t8, e); return o.split(a, s, n); } case "ScatterNd": { - let n = I("indices", r, t8, e), s = I("values", r, t8, e), a = I("shape", r, t8, e); + let n = I("indices", r15, t8, e), s = I("values", r15, t8, e), a = I("shape", r15, t8, e); return [o.scatterND(n, s, a)]; } case "GatherNd": { - let n = I("x", r, t8, e), s = I("indices", r, t8, e); + let n = I("x", r15, t8, e), s = I("indices", r15, t8, e); return [o.gatherND(n, s)]; } case "SparseToDense": { - let n = I("sparseIndices", r, t8, e), s = I("outputShape", r, t8, e), a = I("sparseValues", r, t8, e), i = I("defaultValue", r, t8, e); + let n = I("sparseIndices", r15, t8, e), s = I("outputShape", r15, t8, e), a = I("sparseValues", r15, t8, e), i = I("defaultValue", r15, t8, e); return [o.sparseToDense(n, a, s, a.dtype === i.dtype ? i : o.cast(i, a.dtype))]; } case "TensorScatterUpdate": { - let n = I("indices", r, t8, e), s = I("values", r, t8, e), a = I("tensor", r, t8, e); + let n = I("indices", r15, t8, e), s = I("values", r15, t8, e), a = I("tensor", r15, t8, e); return [o.tensorScatterUpdate(a, n, s)]; } default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var WT = (r, t8, e, o = Je) => { - switch (r.op) { +var UT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "SparseFillEmptyRows": { - let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(I("indices", r, t8, e), I("values", r, t8, e), I("denseShape", r, t8, e), I("defaultValue", r, t8, e)); + let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(I("indices", r15, t8, e), I("values", r15, t8, e), I("denseShape", r15, t8, e), I("defaultValue", r15, t8, e)); return [n, s, a, i]; } case "SparseReshape": { - let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(I("inputIndices", r, t8, e), I("inputShape", r, t8, e), I("newShape", r, t8, e)); + let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(I("inputIndices", r15, t8, e), I("inputShape", r15, t8, e), I("newShape", r15, t8, e)); return [n, s]; } case "SparseSegmentMean": - return [o.sparse.sparseSegmentMean(I("data", r, t8, e), I("indices", r, t8, e), I("segmentIds", r, t8, e))]; + return [o.sparse.sparseSegmentMean(I("data", r15, t8, e), I("indices", r15, t8, e), I("segmentIds", r15, t8, e))]; case "SparseSegmentSum": - return [o.sparse.sparseSegmentSum(I("data", r, t8, e), I("indices", r, t8, e), I("segmentIds", r, t8, e))]; + return [o.sparse.sparseSegmentSum(I("data", r15, t8, e), I("indices", r15, t8, e), I("segmentIds", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var UT = (r, t8, e, o = Je) => { - switch (r.op) { +var GT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "FFT": - return [o.fft(I("x", r, t8, e))]; + return [o.fft(I("x", r15, t8, e))]; case "IFFT": - return [o.ifft(I("x", r, t8, e))]; + return [o.ifft(I("x", r15, t8, e))]; case "RFFT": - return [o.rfft(I("x", r, t8, e))]; + return [o.rfft(I("x", r15, t8, e))]; case "IRFFT": - return [o.irfft(I("x", r, t8, e))]; + return [o.irfft(I("x", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var GT = (r, t8, e, o = Je) => { - switch (r.op) { +var HT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "StaticRegexReplace": - return [o.string.staticRegexReplace(I("input", r, t8, e), I("pattern", r, t8, e), I("rewrite", r, t8, e), I("replaceGlobal", r, t8, e))]; + return [o.string.staticRegexReplace(I("input", r15, t8, e), I("pattern", r15, t8, e), I("rewrite", r15, t8, e), I("replaceGlobal", r15, t8, e))]; case "StringNGrams": { - let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(I("data", r, t8, e), I("dataSplits", r, t8, e), I("separator", r, t8, e), I("nGramWidths", r, t8, e), I("leftPad", r, t8, e), I("rightPad", r, t8, e), I("padWidth", r, t8, e), I("preserveShortSequences", r, t8, e)); + let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(I("data", r15, t8, e), I("dataSplits", r15, t8, e), I("separator", r15, t8, e), I("nGramWidths", r15, t8, e), I("leftPad", r15, t8, e), I("rightPad", r15, t8, e), I("padWidth", r15, t8, e), I("preserveShortSequences", r15, t8, e)); return [n, s]; } case "StringSplit": { - let { indices: n, values: s, shape: a } = o.string.stringSplit(I("input", r, t8, e), I("delimiter", r, t8, e), I("skipEmpty", r, t8, e)); + let { indices: n, values: s, shape: a } = o.string.stringSplit(I("input", r15, t8, e), I("delimiter", r15, t8, e), I("skipEmpty", r15, t8, e)); return [n, s, a]; } case "StringToHashBucketFast": - return [o.string.stringToHashBucketFast(I("input", r, t8, e), I("numBuckets", r, t8, e))]; + return [o.string.stringToHashBucketFast(I("input", r15, t8, e), I("numBuckets", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var HT = (r, t8, e, o = Je) => { - switch (r.op) { +var KT = (r15, t8, e, o = Je) => { + switch (r15.op) { case "Cast": - return [o.cast(I("x", r, t8, e), I("dtype", r, t8, e))]; + return [o.cast(I("x", r15, t8, e), I("dtype", r15, t8, e))]; case "ExpandDims": { - let n = I("axis", r, t8, e); - return [o.expandDims(I("x", r, t8, e), n)]; + let n = I("axis", r15, t8, e); + return [o.expandDims(I("x", r15, t8, e), n)]; } case "Squeeze": { - let n = I("axis", r, t8, e); - return [o.squeeze(I("x", r, t8, e), n)]; + let n = I("axis", r15, t8, e); + return [o.squeeze(I("x", r15, t8, e), n)]; } case "Reshape": - return [o.reshape(I("x", r, t8, e), I("shape", r, t8, e))]; + return [o.reshape(I("x", r15, t8, e), I("shape", r15, t8, e))]; case "EnsureShape": - return [o.ensureShape(I("x", r, t8, e), I("shape", r, t8, e))]; + return [o.ensureShape(I("x", r15, t8, e), I("shape", r15, t8, e))]; case "MirrorPad": - return [o.mirrorPad(I("x", r, t8, e), I("padding", r, t8, e), I("mode", r, t8, e))]; + return [o.mirrorPad(I("x", r15, t8, e), I("padding", r15, t8, e), I("mode", r15, t8, e))]; case "PadV2": case "Pad": - return [o.pad(I("x", r, t8, e), I("padding", r, t8, e), I("constantValue", r, t8, e))]; + return [o.pad(I("x", r15, t8, e), I("padding", r15, t8, e), I("constantValue", r15, t8, e))]; case "SpaceToBatchND": { - let n = I("blockShape", r, t8, e), s = I("paddings", r, t8, e); - return [o.spaceToBatchND(I("x", r, t8, e), n, s)]; + let n = I("blockShape", r15, t8, e), s = I("paddings", r15, t8, e); + return [o.spaceToBatchND(I("x", r15, t8, e), n, s)]; } case "BatchToSpaceND": { - let n = I("blockShape", r, t8, e), s = I("crops", r, t8, e); - return [o.batchToSpaceND(I("x", r, t8, e), n, s)]; + let n = I("blockShape", r15, t8, e), s = I("crops", r15, t8, e); + return [o.batchToSpaceND(I("x", r15, t8, e), n, s)]; } case "DepthToSpace": { - let n = I("blockSize", r, t8, e), s = I("dataFormat", r, t8, e).toUpperCase(); - return [o.depthToSpace(I("x", r, t8, e), n, s)]; + let n = I("blockSize", r15, t8, e), s = I("dataFormat", r15, t8, e).toUpperCase(); + return [o.depthToSpace(I("x", r15, t8, e), n, s)]; } case "BroadcastTo": - return [o.broadcastTo(I("x", r, t8, e), I("shape", r, t8, e))]; + return [o.broadcastTo(I("x", r15, t8, e), I("shape", r15, t8, e))]; case "BroadcastArgs": - return [o.broadcastArgs(I("s0", r, t8, e), I("s1", r, t8, e))]; + return [o.broadcastArgs(I("s0", r15, t8, e), I("s1", r15, t8, e))]; default: - throw TypeError(`Node type ${r.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function OS(r, t8, e, o, n = De) { +function OS(r15, t8, e, o, n = De) { let s = ((a, i, p) => { switch (a.category) { case "arithmetic": - return n(() => CT(a, i, p)); - case "basic_math": return n(() => wT(a, i, p)); + case "basic_math": + return n(() => ST(a, i, p)); case "control": - return TT(a, i, p); + return _T(a, i, p); case "convolution": - return n(() => $T(a, i, p)); - case "creation": return n(() => ET(a, i, p)); + case "creation": + return n(() => RT(a, i, p)); case "dynamic": - return RT(a, i, p); + return DT(a, i, p); case "evaluation": - return n(() => DT(a, i, p)); - case "image": - return n(() => PT(a, i, p)); - case "graph": return n(() => AT(a, i, p)); - case "logical": + case "image": return n(() => OT(a, i, p)); - case "matrices": + case "graph": + return n(() => FT(a, i, p)); + case "logical": return n(() => MT(a, i, p)); - case "normalization": + case "matrices": return n(() => LT(a, i, p)); - case "ragged": + case "normalization": return n(() => BT(a, i, p)); - case "reduction": + case "ragged": return n(() => zT(a, i, p)); - case "slice_join": + case "reduction": return n(() => VT(a, i, p)); - case "sparse": + case "slice_join": return n(() => WT(a, i, p)); - case "spectral": + case "sparse": return n(() => UT(a, i, p)); - case "string": + case "spectral": return n(() => GT(a, i, p)); - case "transformation": + case "string": return n(() => HT(a, i, p)); + case "transformation": + return n(() => KT(a, i, p)); case "hash_table": - return FT(a, i, p, o); + return PT(a, i, p, o); case "custom": - let u = pf(a.op); + let u = uf(a.op); if (u && u.customExecutor) - return u.customExecutor(new wf(a, i, p)); + return u.customExecutor(new Cf(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, t8, e); + })(r15, t8, e); return y.isPromise(s) ? s.then((a) => [].concat(a)) : [].concat(s); } -var Ll = class { +var Pl = class { constructor(t8 = {}, e = {}, o = {}, n = {}, s) { this.weightMap = t8, this.tensorArrayMap = e, 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(); } @@ -11406,13 +11407,13 @@ var Ll = class { this.tensorListMap[e].clearAndClose(t8); } }; -function MS(r, t8, e, o) { - let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = new Set(Object.keys(r).map((m) => Tr(m)[0])); +function MS(r15, t8, e, o) { + let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = new Set(Object.keys(r15).map((m) => Nr(m)[0])); o = o || []; - let c = new Set(o.map((m) => Tr(m.name)[0])), l = [...t8]; + let c = new Set(o.map((m) => Nr(m.name)[0])), l = [...t8]; for (; l.length > 0; ) { let m = l.pop(); - if ((gu(m) || k8(m) || N8(m)) && a == null && (a = m, i = a.children.map((d) => d.name).filter((d) => n.has(d))), n.add(m.name), e[m.name] == null && !u.has(m.name) && !c.has(m.name)) { + if ((mu(m) || k8(m) || N8(m)) && a == null && (a = m, i = a.children.map((d) => d.name).filter((d) => n.has(d))), n.add(m.name), e[m.name] == null && !u.has(m.name) && !c.has(m.name)) { if (m.inputs.length === 0) { s.push(m.name); continue; @@ -11422,14 +11423,14 @@ function MS(r, t8, e, o) { }); } } - return { inputs: r, outputs: t8, usedNodes: n, missingInputs: s, dynamicNode: a, syncInputs: i }; + return { inputs: r15, outputs: t8, usedNodes: n, missingInputs: s, dynamicNode: a, syncInputs: i }; } -function KT(r, t8) { - let { usedNodes: e, inputs: o } = t8, n = Object.keys(o).map((g) => Tr(g)[0]).map((g) => r.nodes[g]), s = r.initNodes || [], a = (g) => e.has(typeof g == "string" ? g : g.name); +function qT(r15, t8) { + let { usedNodes: e, inputs: o } = t8, n = Object.keys(o).map((g) => Nr(g)[0]).map((g) => r15.nodes[g]), s = r15.initNodes || [], a = (g) => e.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 = {}; + 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) @@ -11444,48 +11445,48 @@ function KT(r, t8) { let f = d.map((g) => c.get(g)), h = C8(f, p); return w8(h, p), h; } -function C8(r, t8) { - let e = new Map(r.map((a) => [a.name, a])), o = t8.map((a) => a.name), n = new Set(o); +function C8(r15, t8) { + let e = new Map(r15.map((a) => [a.name, a])), o = t8.map((a) => a.name), n = new Set(o); for (; o.length > 0; ) { let a = o.pop(), i = e.get(a); for (let p of i.children) !e.has(p.name) || n.has(p.name) || (n.add(p.name), o.push(p.name)); } - return r.filter((a) => n.has(a.name)); + return r15.filter((a) => n.has(a.name)); } -var Cc = class extends Error { +var fc = class extends Error { constructor(t8) { super(`NodesExecutionOrderError: ${t8}`); } }; -function w8(r, t8) { - let e = new Map(r.map((i, p) => [i.name, p])), o = new Set(t8.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) { +function w8(r15, t8) { + let e = new Map(r15.map((i, p) => [i.name, p])), o = new Set(t8.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 (!e.has(p.name)) - throw new Cc(`Child ${p.name} of node ${i.name} is unreachable.`); + throw new fc(`Child ${p.name} of node ${i.name} is unreachable.`); if (e.get(i.name) > e.get(p.name)) - throw new Cc(`Node ${i.name} is scheduled to run after its child ${p.name}.`); + throw new fc(`Node ${i.name} is scheduled to run after its child ${p.name}.`); } if (!n(i)) for (let p of i.inputs) { if (!e.has(p.name)) - throw new Cc(`Input ${p.name} of node ${i.name} is unreachable.`); + throw new fc(`Input ${p.name} of node ${i.name} is unreachable.`); if (e.get(p.name) > e.get(i.name)) - throw new Cc(`Node ${i.name} is scheduled to run before its input ${p.name}.`); + throw new fc(`Node ${i.name} is scheduled to run before its input ${p.name}.`); } } } -function qT(r) { - let t8 = new Map(r.map((i, p) => [i.name, p])), e = Number.MAX_SAFE_INTEGER, o = r.map((i, p) => gu(i) ? e : p), n = (i) => { +function jT(r15) { + let t8 = new Map(r15.map((i, p) => [i.name, p])), e = Number.MAX_SAFE_INTEGER, o = r15.map((i, p) => mu(i) ? e : p), n = (i) => { let p = o[t8.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 = /* @__PURE__ */ new Map(); - for (let i = 0; i < r.length; ++i) { + }, 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 === e) continue; - let u = r[i], c = r[p]; + let u = r15[i], c = r15[p]; a.has(c.name) || a.set(c.name, []), a.get(c.name).push(u); } return a; @@ -11493,16 +11494,16 @@ function qT(r) { var S8 = /* @__PURE__ */ new Set(["Switch", "Merge", "Enter", "Exit", "NextIteration", "StatelessIf", "StatelessWhile", "if", "While"]); var I8 = /* @__PURE__ */ new Set(["NonMaxSuppressionV2", "NonMaxSuppressionV3", "NonMaxSuppressionV5", "Where"]); var v8 = /* @__PURE__ */ new Set(["HashTable", "HashTableV2", "LookupTableImport", "LookupTableImportV2", "LookupTableFind", "LookupTableFindV2", "LookupTableSize", "LookupTableSizeV2"]); -function gu(r) { - return S8.has(r.op); +function mu(r15) { + return S8.has(r15.op); } -function k8(r) { - return I8.has(r.op); +function k8(r15) { + return I8.has(r15.op); } -function N8(r) { - return v8.has(r.op); +function N8(r15) { + return v8.has(r15.op); } -var lp = class { +var Ol = class r10 { get weightIds() { return this.parent ? this.parent.weightIds : this._weightIds; } @@ -11539,7 +11540,7 @@ var lp = class { } constructor(t8, e) { this.graph = t8, this.parent = e, this.compiledMap = /* @__PURE__ */ new Map(), this.parseNodeNameCache = /* @__PURE__ */ new Map(), this._weightMap = {}, this.SEPARATOR = ",", this._functions = {}, this._functionExecutorMap = {}, this.keepIntermediateTensors = false, this._outputs = t8.outputs, this._inputs = t8.inputs, this._initNodes = t8.initNodes, this._signature = t8.signature, this._functions = t8.functions, t8.functions != null && Object.keys(t8.functions).forEach((o) => { - this._functionExecutorMap[o] = new lp(t8.functions[o], this); + this._functionExecutorMap[o] = new r10(t8.functions[o], this); }); } getCompilationKey(t8, e) { @@ -11554,14 +11555,14 @@ var lp = class { let u = e.map((l) => l.name), c = Object.keys(t8); throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`); } - let i = KT(this.graph, o), p = qT(i); + let i = qT(this.graph, o), p = jT(i); return { orderedNodes: i, nodeLiveUntilMap: p }; } cloneAndKeepTensor(t8) { if (t8 == null) return null; let e = t8.clone(); - return Rr(e), e; + return Er(e), e; } cloneTensorList(t8) { return t8 ? t8.map((o) => this.cloneAndKeepTensor(o)) : null; @@ -11573,7 +11574,7 @@ var lp = class { this.disposeIntermediateTensors(), t8 = this.mapInputs(t8); let o = Object.keys(t8).sort(); this.checkInputs(t8), this.checkInputShapeAndType(t8), e = this.mapOutputs(e), this.checkOutputs(e); - let n = o.map((m) => this.graph.nodes[Tr(m)[0]]), s = e.map((m) => Tr(m)[0]), a = new Set(s), i = s.map((m) => this.graph.nodes[m]); + let n = o.map((m) => this.graph.nodes[Nr(m)[0]]), s = e.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(t8, i), this.compiledMap.set(p, u)); @@ -11584,9 +11585,9 @@ var lp = class { } let c = {}, l = {}; return De(() => { - let m = new Ll(this.weightMap, c, l, this.functionExecutorMap, this.parseNodeNameCache), d = Object.assign({}, this.weightMap); + let m = new Pl(this.weightMap, c, l, this.functionExecutorMap, this.parseNodeNameCache), d = Object.assign({}, this.weightMap); this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)), Object.keys(t8).forEach((x) => { - let [b, C] = Tr(x, m), S = []; + let [b, C] = Nr(x, m), S = []; S[C] = t8[x], d[b] = S, this.keepIntermediateTensors && (this.clonedTensorsMap[b] = this.cloneTensorList(S)); }); let f = this.getFrozenTensorIds(d), { orderedNodes: h, nodeLiveUntilMap: g } = u; @@ -11598,7 +11599,7 @@ var lp = class { 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), e.map((x) => zt(x, d, m)); + return this.parent == null && m.dispose(f), e.map((x) => Bt(x, d, m)); }); } getFrozenTensorIds(t8) { @@ -11606,11 +11607,11 @@ var lp = class { return new Set(e); } checkTensorForDisposal(t8, e, o, n, s, a, i) { - if (!(gu(e) || a.has(t8))) { + if (!(mu(e) || a.has(t8))) { for (let p of o[t8]) p != null && (i[p.id] = (i[p.id] || 0) + e.children.length); for (let p of e.inputs) { - if (gu(p)) + if (mu(p)) continue; let u = fS(p.name, o, n); if (u != null) @@ -11625,9 +11626,9 @@ var lp = class { } checkTensorForDisposalWithNodeLiveUntilInfo(t8, e, o, n, s, a) { function i(p) { - return gu(p) || s.has(p.name); + return mu(p) || s.has(p.name); } - if (!(gu(t8) || a == null)) + if (!(mu(t8) || a == null)) for (let p of a) { if (i(p)) continue; @@ -11655,9 +11656,9 @@ var lp = class { } catch (m) { this.keepIntermediateTensors = false, console.warn(m.message); } - let a = new Ll(this.weightMap, n, s, this.functionExecutorMap, this.parseNodeNameCache); + let a = new Pl(this.weightMap, n, s, this.functionExecutorMap, this.parseNodeNameCache); this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)); - let i = await this.executeWithControlFlow(t8, a, e, o), p = e.map((m) => zt(m, i, a)), u = p.map((m) => m.id), c = Object.keys(t8).map((m) => t8[m].id), l = /* @__PURE__ */ new Set([...u, ...c, ...this.weightIds]); + let i = await this.executeWithControlFlow(t8, a, e, o), p = e.map((m) => Bt(m, i, a)), u = p.map((m) => m.id), c = Object.keys(t8).map((m) => t8[m].id), l = /* @__PURE__ */ new Set([...u, ...c, ...this.weightIds]); return Object.values(i).forEach((m) => { m.forEach((d) => { d && !d.isDisposed && !l.has(d.id) && d.dispose(); @@ -11669,11 +11670,11 @@ var lp = class { return this._executeAsync(n, this.outputNodes, true, e, o); } async executeWithControlFlow(t8, e, o, n) { - let s = Object.keys(t8), a = s.map((S) => this.graph.nodes[Tr(S)[0]]), i = o.map((S) => Tr(S)[0]), p = new Set(i), u = i.map((S) => this.graph.nodes[S]); + let s = Object.keys(t8), 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 } = MS(t8, u, this.weightMap, this._initNodes), f = [...a, ...this.graph.weights, ...this._initNodes || []].map((S) => ({ node: S, contexts: e.currentContext })), h = Object.assign({}, this.weightMap); Object.keys(t8).forEach((S) => { - let [k, _] = Tr(S), E = []; + let [k, _] = Nr(S), E = []; E[_] = t8[S], h[k] = E; }); let g = {}, x = this.getFrozenTensorIds(h), b = {}; @@ -11682,7 +11683,7 @@ var lp = class { 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) => !gu(S) && !zt(S.name, h, e)).map((S) => S.name); + let C = u.filter((S) => !mu(S) && !Bt(S.name, h, e)).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}`); @@ -11708,7 +11709,7 @@ var lp = class { processChildNodes(t8, e, o, n, s, a) { t8.children.forEach((i) => { let [p] = Ls(i.name, o); - s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!zt(u, n, o)) && (s[p] = true, e.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!zt(u, n, o)) && (s[p] = true, e.push({ contexts: o.currentContext, node: i }))); + s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!Bt(u, n, o)) && (s[p] = true, e.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!Bt(u, n, o)) && (s[p] = true, e.push({ contexts: o.currentContext, node: i }))); }); } dispose() { @@ -11716,7 +11717,7 @@ var lp = class { } checkInputShapeAndType(t8) { Object.keys(t8).forEach((e) => { - let o = t8[e], [n] = Tr(e), s = this.graph.nodes[n]; + let o = t8[e], [n] = Nr(e), 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}]`); @@ -11735,7 +11736,7 @@ var lp = class { } checkInputs(t8) { let e = Object.keys(t8).filter((o) => { - let [n] = Tr(o); + let [n] = Nr(o); return this.graph.nodes[n] == null; }); if (e.length > 0) @@ -11750,13 +11751,13 @@ var lp = class { } checkOutputs(t8) { t8.forEach((e) => { - let [o] = Tr(e); + let [o] = Nr(e); if (!this.graph.nodes[o]) throw new Error(`The output '${e}' is not found in the graph`); }); } }; -var kf = class { +var vf = class { constructor(t8 = {}, e = {}) { this.hashTableNameToHandle = t8, this.hashTableMap = e; } @@ -11778,7 +11779,7 @@ var kf = class { }; var T8 = "?tfjs-format=file"; var _8 = "model.json"; -var Bl = class { +var Ml = class { get modelVersion() { return this.version; } @@ -11806,8 +11807,8 @@ var Bl = class { get modelStructuredOutputKeys() { return this.structuredOutputKeys; } - constructor(t8, e = {}, o = fi) { - this.modelUrl = t8, this.loadOptions = e, this.version = "n/a", this.io = o, e == null && (this.loadOptions = {}), this.resourceManager = new kf(); + constructor(t8, e = {}, o = mi) { + this.modelUrl = t8, this.loadOptions = e, this.version = "n/a", this.io = o, e == null && (this.loadOptions = {}), this.resourceManager = new vf(); } findIOHandler() { let t8 = this.modelUrl; @@ -11839,9 +11840,9 @@ var Bl = class { } this.signature = o, this.version = `${e.versions.producer}.${e.versions.minConsumer}`; let n = this.io.decodeWeights(this.artifacts.weightData, this.artifacts.weightSpecs); - if (this.executor = new lp(Ml.Instance.transformGraph(e, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(n), this.executor.resourceManager = this.resourceManager, t8.modelInitializer != null && t8.modelInitializer.node != null) { - let s = Ml.Instance.transformGraph(t8.modelInitializer); - this.initializer = new lp(s), this.initializer.weightMap = this.executor.weightMap, this.initializer.resourceManager = this.resourceManager, this.initializerSignature = t8.initializerSignature; + if (this.executor = new Ol(Fl.Instance.transformGraph(e, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(n), this.executor.resourceManager = this.resourceManager, t8.modelInitializer != null && t8.modelInitializer.node != null) { + let s = Fl.Instance.transformGraph(t8.modelInitializer); + this.initializer = new Ol(s), this.initializer.weightMap = this.executor.weightMap, this.initializer.resourceManager = this.resourceManager, this.initializerSignature = t8.initializerSignature; } return true; } @@ -11860,7 +11861,7 @@ var Bl = class { } addStructuredOutputNames(t8) { if (this.structuredOutputKeys) { - let e = t8 instanceof ut ? [t8] : t8, o = {}; + let e = t8 instanceof mt ? [t8] : t8, o = {}; return e.forEach((n, s) => o[this.structuredOutputKeys[s]] = n), o; } return t8; @@ -11875,7 +11876,7 @@ var Bl = class { } normalizeInputs(t8) { var e; - if (!(t8 instanceof ut) && !Array.isArray(t8)) { + if (!(t8 instanceof mt) && !Array.isArray(t8)) { let s = (e = this.signature) === null || e === void 0 ? void 0 : e.inputs; if (s != null) for (let a in s) { @@ -11933,22 +11934,22 @@ var Bl = class { return Object.keys(t8).reduce((e, o) => (e[o] = [t8[o]], e), {}); } dispose() { - this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Mt(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); + this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Ot(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); } }; -async function $8(r, t8 = {}, e = fi) { - if (r == null) +async function $8(r15, t8 = {}, e = mi) { + if (r15 == null) throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model"); - t8 == null && (t8 = {}), t8.fromTFHub && typeof r == "string" && (r = R8(r)); - let o = new Bl(r, t8, e); + t8 == null && (t8 = {}), t8.fromTFHub && typeof r15 == "string" && (r15 = R8(r15)); + let o = new Ml(r15, t8, e); return await o.load(), o; } -function E8(r) { - if (r == null) +function E8(r15) { + if (r15 == null) throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model"); let t8; - if (r instanceof Array) { - let [o, n] = r; + 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)) @@ -11957,33 +11958,33 @@ function E8(r) { throw new Error("Model JSON is missing 'modelTopology'"); if (!("weightsManifest" in o)) throw new Error("Model JSON is missing 'weightsManifest'"); - let s = fi.getWeightSpecs(o.weightsManifest), a = fi.getModelArtifactsForJSONSync(o, s, n); - t8 = fi.fromMemorySync(a); - } else if ("load" in r) - t8 = r; - else if ("modelTopology" in r && "weightSpecs" in r && "weightData" in r) - t8 = fi.fromMemorySync(r); + let s = mi.getWeightSpecs(o.weightsManifest), a = mi.getModelArtifactsForJSONSync(o, s, n); + t8 = mi.fromMemorySync(a); + } else if ("load" in r15) + t8 = r15; + else if ("modelTopology" in r15 && "weightSpecs" in r15 && "weightData" in r15) + t8 = mi.fromMemorySync(r15); else throw new Error("Unknown model format"); - let e = new Bl(t8); + let e = new Ml(t8); return e.load(), e; } -function R8(r) { - return r.endsWith("/") || (r = r + "/"), `${r}${_8}${T8}`; +function R8(r15) { + return r15.endsWith("/") || (r15 = r15 + "/"), `${r15}${_8}${T8}`; } -var D8 = "4.11.0"; -function Q(r, t8) { - Array.isArray(r) || (r = [r]), r.forEach((e) => { +var D8 = "4.14.0"; +function Q(r15, t8) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((e) => { e != null && y.assert(e.dtype !== "complex64", () => `${t8} does not support complex64 tensors in the CPU backend.`); }); } -var A8 = Wt.whereImpl; -var xu = class extends ao { +var A8 = Vt.whereImpl; +var hc = class r11 extends so { nextDataId() { - return xu.nextDataId++; + return r11.nextDataId++; } constructor() { - super(), this.blockSize = 48, this.firstUse = true, this.data = new zo(this, pr()); + super(), this.blockSize = 48, this.firstUse = true, this.data = new Bo(this, ur()); } write(t8, e, o) { this.firstUse && (this.firstUse = false, A().get("IS_NODE") && w.warn(` @@ -12044,7 +12045,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return me(t8.shape, t8.dtype, e); } makeOutput(t8, e, o) { - return pr().makeTensorFromTensorInfo(this.makeTensorInfo(e, o, t8), this); + return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e, o, t8), this); } disposeData(t8, e = false) { if (this.data.has(t8)) { @@ -12079,28 +12080,28 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return super.epsilon(); } }; -xu.nextDataId = 0; -var Tc = {}; -qe(Tc, { addImpl: () => zS, bincountImpl: () => Ic, bincountReduceImpl: () => Nf, bitwiseAndImpl: () => VS, castImpl: () => BS, ceilImpl: () => WS, concatImpl: () => mp, equalImpl: () => US, expImpl: () => HS, expm1Impl: () => qS, floorDivImpl: () => XS, floorImpl: () => jS, gatherNdImpl: () => Tf, gatherV2Impl: () => _f, greaterEqualImpl: () => QS, greaterImpl: () => YS, lessEqualImpl: () => JS, lessImpl: () => ZS, linSpaceImpl: () => $f, logImpl: () => eI, maxImpl: () => Ef, maximumImpl: () => tI, minimumImpl: () => rI, multiplyImpl: () => zl, negImpl: () => oI, notEqualImpl: () => nI, prodImpl: () => sI, raggedGatherImpl: () => Rf, raggedRangeImpl: () => Df, raggedTensorToTensorImpl: () => Af, rangeImpl: () => fp, rsqrtImpl: () => aI, scatterImpl: () => zs, sigmoidImpl: () => v_, simpleAbsImpl: () => LS, sliceImpl: () => hp, sparseFillEmptyRowsImpl: () => Ff, sparseReshapeImpl: () => Pf, sparseSegmentReductionImpl: () => Nc, sqrtImpl: () => T_, squaredDifferenceImpl: () => uI, staticRegexReplaceImpl: () => pI, stridedSliceImpl: () => Of, stringNGramsImpl: () => gp, stringSplitImpl: () => xp, stringToHashBucketFastImpl: () => yp, subImpl: () => lI, tileImpl: () => Mf, topKImpl: () => Lf, transposeImpl: () => vc, uniqueImpl: () => bp }); -function LS(r) { - let t8 = new Float32Array(r.length); - for (let e = 0; e < r.length; ++e) - t8[e] = Math.abs(r[e]); +hc.nextDataId = 0; +var wc = {}; +qe(wc, { addImpl: () => zS, bincountImpl: () => yc, bincountReduceImpl: () => kf, bitwiseAndImpl: () => VS, castImpl: () => BS, ceilImpl: () => WS, concatImpl: () => np, equalImpl: () => US, expImpl: () => HS, expm1Impl: () => qS, floorDivImpl: () => XS, floorImpl: () => jS, gatherNdImpl: () => Nf, gatherV2Impl: () => Tf, greaterEqualImpl: () => QS, greaterImpl: () => YS, lessEqualImpl: () => JS, lessImpl: () => ZS, linSpaceImpl: () => _f, logImpl: () => eI, maxImpl: () => $f, maximumImpl: () => tI, minimumImpl: () => rI, multiplyImpl: () => Ll, negImpl: () => oI, notEqualImpl: () => nI, prodImpl: () => sI, raggedGatherImpl: () => Ef, raggedRangeImpl: () => Rf, raggedTensorToTensorImpl: () => Df, rangeImpl: () => ap, rsqrtImpl: () => iI, scatterImpl: () => zs, sigmoidImpl: () => k_, simpleAbsImpl: () => LS, sliceImpl: () => ip, sparseFillEmptyRowsImpl: () => Af, sparseReshapeImpl: () => Ff, sparseSegmentReductionImpl: () => Cc, sqrtImpl: () => __, squaredDifferenceImpl: () => pI, staticRegexReplaceImpl: () => cI, stridedSliceImpl: () => Pf, stringNGramsImpl: () => up, stringSplitImpl: () => pp, stringToHashBucketFastImpl: () => cp, subImpl: () => mI, tileImpl: () => Of, topKImpl: () => Mf, transposeImpl: () => bc, uniqueImpl: () => lp }); +function LS(r15) { + let t8 = new Float32Array(r15.length); + for (let e = 0; e < r15.length; ++e) + t8[e] = Math.abs(r15[e]); return t8; } -var F8 = (r) => { - let { x: t8 } = r.inputs, e = r.backend; +var F8 = (r15) => { + let { x: t8 } = r15.inputs, e = r15.backend; Q(t8, "abs"); let o = new Float32Array(y.sizeFromShape(t8.shape)), n = e.data.get(t8.dataId).values; return o = LS(n), e.makeOutput(o, t8.shape, t8.dtype); }; -var jT = { kernelName: Xs, backendName: "cpu", kernelFunc: F8 }; -function ze(r) { +var XT = { kernelName: Xs, backendName: "cpu", kernelFunc: F8 }; +function ze(r15) { return (t8, e, o, n, s) => { let a = w.assertAndGetBroadcastShape(t8, e), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), c = y.getTypedArrayFromDType(s, u), l = t8.length, m = e.length, d = y.computeStrides(t8), f = y.computeStrides(e), h = w.getBroadcastDims(t8, a), g = w.getBroadcastDims(e, a); if (h.length + g.length === 0) for (let x = 0; x < c.length; ++x) - c[x] = r(o[x % o.length], n[x % n.length]); + 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); @@ -12108,75 +12109,75 @@ function ze(r) { let S = y.locToIndex(C, l, d), k = b.slice(-m); g.forEach((E) => k[E] = 0); let _ = y.locToIndex(k, m, f); - c[x] = r(o[S], n[_]); + c[x] = r15(o[S], n[_]); } return [c, a]; }; } -function Kt(r) { - let { inputs: t8, backend: e } = r, { real: o, imag: n } = t8, s = e.data.get(o.dataId).values, a = e.data.get(n.dataId).values, i = e.makeTensorInfo(o.shape, "complex64"), p = e.data.get(i.dataId); +function Ht(r15) { + let { inputs: t8, backend: e } = r15, { real: o, imag: n } = t8, s = e.data.get(o.dataId).values, a = e.data.get(n.dataId).values, i = e.makeTensorInfo(o.shape, "complex64"), p = e.data.get(i.dataId); return p.complexTensorInfos = { real: e.makeTensorInfo(o.shape, "float32", s), imag: e.makeTensorInfo(n.shape, "float32", a) }, i; } -var XT = { kernelName: Fi, backendName: "cpu", kernelFunc: Kt }; -function wc(r, t8, e = "float32") { +var YT = { kernelName: Ri, backendName: "cpu", kernelFunc: Ht }; +function gc(r15, t8, e = "float32") { if (e === "complex64") { - let n = wc(r, t8, "float32"), s = wc(r, t8, "float32"); - return Kt({ inputs: { real: n, imag: s }, backend: r }); + let n = gc(r15, t8, "float32"), s = gc(r15, t8, "float32"); + return Ht({ inputs: { real: n, imag: s }, backend: r15 }); } let o = y.makeZerosTypedArray(y.sizeFromShape(t8), e); - return r.makeTensorInfo(t8, e, o); + return r15.makeTensorInfo(t8, e, o); } -function mr(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +function lr(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; return e.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var YT = { kernelName: wo, backendName: "cpu", kernelFunc: mr }; -function Ro(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.data.get(o.dataId).complexTensorInfos.real, s = e.data.get(n.dataId).values; +var QT = { kernelName: Co, backendName: "cpu", kernelFunc: lr }; +function Eo(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.data.get(o.dataId).complexTensorInfos.real, s = e.data.get(n.dataId).values; return e.makeTensorInfo(n.shape, n.dtype, s); } -var QT = { kernelName: qi, backendName: "cpu", kernelFunc: Ro }; -function BS(r, t8, e, o) { +var ZT = { kernelName: Gi, backendName: "cpu", kernelFunc: Eo }; +function BS(r15, t8, e, o) { if (o === "int32") { - let n = Int32Array.from(r); + let n = Int32Array.from(r15); return [t8, "int32", n]; } if (o === "bool") { - let n = y.toTypedArray([0], e), [s, a] = ze((i, p) => i !== p ? 1 : 0)(t8, [], r, n, "bool"); + let n = y.toTypedArray([0], e), [s, a] = ze((i, p) => i !== p ? 1 : 0)(t8, [], r15, n, "bool"); return [a, "bool", s]; } throw new Error(`Error in Cast: failed to cast ${e} to ${o}`); } -function Do(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dtype: s } = o; +function Ro(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return mr({ inputs: { x: n }, backend: e }); - let c = wc(e, n.shape, n.dtype), l = Do({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), m = Kt({ inputs: { real: l, imag: c }, backend: e }); + return lr({ inputs: { x: n }, backend: e }); + let c = gc(e, n.shape, n.dtype), l = Ro({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), m = Ht({ inputs: { real: l, imag: c }, backend: e }); return e.disposeIntermediateTensorInfo(c), e.disposeIntermediateTensorInfo(l), m; } if (n.dtype === "complex64") { - let c = Ro({ inputs: { input: n }, backend: e }), l = Do({ inputs: { x: c }, backend: e, attrs: { dtype: s } }); + let c = Eo({ inputs: { input: n }, backend: e }), l = Ro({ inputs: { x: c }, backend: e, attrs: { dtype: s } }); return e.disposeIntermediateTensorInfo(c), l; } if (!y.hasEncodingLoss(n.dtype, s)) { - let c = mr({ inputs: { x: n }, backend: e }); + let c = lr({ inputs: { x: n }, backend: e }); return { dataId: c.dataId, shape: c.shape, dtype: s }; } let a = e.data.get(n.dataId).values, [i, p, u] = BS(a, n.shape, n.dtype, s); return e.makeTensorInfo(i, p, u); } -var ZT = { kernelName: bo, backendName: "cpu", kernelFunc: Do }; -function Ye(r, t8, e, o) { +var JT = { kernelName: yo, backendName: "cpu", kernelFunc: Ro }; +function Ye(r15, t8, e, o) { return e == null ? ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; - Q([a, i], r); + Q([a, i], r15); 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] = t8(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 = Do({ 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 = Do({ 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, _, E] = e(a.shape, i.shape, d, f, C, S), R = p.makeTensorInfo(E, "float32", k), D = p.makeTensorInfo(E, "float32", _), P = Kt({ inputs: { real: R, imag: D }, backend: p }); + 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, _, E] = e(a.shape, i.shape, d, f, C, S), R = p.makeTensorInfo(E, "float32", k), D = p.makeTensorInfo(E, "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] = t8(a.shape, i.shape, u, c, l); @@ -12184,12 +12185,12 @@ function Ye(r, t8, e, o) { } }; } -function Sc(r) { +function xc(r15) { return (t8, e, o, n, s, a) => { let i = w.assertAndGetBroadcastShape(t8, e), p = y.sizeFromShape(i), u = i.length, c = y.computeStrides(i), l = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = w.getBroadcastDims(t8, i), f = w.getBroadcastDims(e, i), h = w.mergeRealAndImagArrays(o, n), g = w.mergeRealAndImagArrays(s, a), x = t8.length, b = y.computeStrides(t8), C = e.length, S = y.computeStrides(e); if (d.length + f.length === 0) for (let k = 0; k < l.length; k++) { - let _ = k % h.length, E = k % g.length, R = r(h[_ * 2], h[_ * 2 + 1], g[E * 2], g[E * 2 + 1]); + let _ = k % h.length, E = k % g.length, R = r15(h[_ * 2], h[_ * 2 + 1], g[E * 2], g[E * 2 + 1]); l[k] = R.real, m[k] = R.imag; } else @@ -12198,56 +12199,56 @@ function Sc(r) { d.forEach((M) => E[M] = 0); let R = y.locToIndex(E, 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]); + 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]; }; } -var zS = ze((r, t8) => r + t8); -var P8 = Sc((r, t8, e, o) => ({ real: r + e, imag: t8 + o })); -var Oa = Ye(uo, zS, P8); -var JT = { kernelName: uo, backendName: "cpu", kernelFunc: Oa }; -function Ic(r, t8, e, o, n) { +var zS = ze((r15, t8) => r15 + t8); +var P8 = xc((r15, t8, e, o) => ({ real: r15 + e, imag: t8 + o })); +var Pa = Ye(io, zS, P8); +var e_ = { kernelName: io, backendName: "cpu", kernelFunc: Pa }; +function yc(r15, t8, e, o, n) { let s = y.sizeFromShape(o), a = y.makeZerosTypedArray(n, e); - for (let i = 0; i < r.length; i++) { - let p = r[i]; + for (let i = 0; i < r15.length; i++) { + let p = r15[i]; if (p < 0) throw new Error("Input x must be non-negative!"); p >= n || (s > 0 ? a[p] += t8[i] : a[p] += 1); } return a; } -function Nf(r, t8, e, o = false) { - let n = r.shape[0], s = r.shape[1], a = me([n, e], t8.dtype); +function kf(r15, t8, e, o = false) { + let n = r15.shape[0], s = r15.shape[1], a = me([n, e], t8.dtype); for (let i = 0; i < n; i++) for (let p = 0; p < s; p++) { - let u = r.get(i, p); + let u = r15.get(i, p); if (u < 0) throw new Error("Input x must be non-negative!"); u >= e || (o ? a.set(1, i, u) : t8.size > 0 ? a.set(a.get(i, u) + t8.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); } return a; } -var VS = ze((r, t8) => r & t8); -var O8 = Ye(ja, VS); -var e_ = { kernelName: ja, backendName: "cpu", kernelFunc: O8 }; -function Xt(r) { +var VS = ze((r15, t8) => r15 & t8); +var O8 = Ye(qa, VS); +var t_ = { kernelName: qa, backendName: "cpu", kernelFunc: O8 }; +function jt(r15) { return (t8, e, o) => { let n = y.getArrayFromDType(e, t8.length); for (let s = 0; s < t8.length; ++s) - n[s] = r(t8[s], o); + n[s] = r15(t8[s], o); return n; }; } -function Ie(r, t8, e) { - let o = Xt(t8); - return Ar(r, o, e); +function Ie(r15, t8, e) { + let o = jt(t8); + return Dr(r15, o, e); } -function Ar(r, t8, e) { +function Dr(r15, t8, e) { return ({ inputs: o, attrs: n, backend: s }) => { let { x: a } = o; - Q(a, r); + Q(a, r15); let i = s, p = i.data.get(a.dataId).values, u; if (a.dtype === "string") { if (!Array.isArray(p)) @@ -12259,20 +12260,20 @@ function Ar(r, t8, e) { return i.makeTensorInfo(a.shape, c, l); }; } -var WS = Xt((r) => Math.ceil(r)); -var M8 = Ar(tn, WS); -var t_ = { kernelName: tn, backendName: "cpu", kernelFunc: M8 }; -function mp(r, t8, e, o) { +var WS = jt((r15) => Math.ceil(r15)); +var M8 = Dr(en, WS); +var r_ = { kernelName: en, backendName: "cpu", kernelFunc: M8 }; +function np(r15, t8, e, o) { let n = y.getArrayFromDType(e, y.sizeFromShape(t8)); if (o && e !== "string") { let s = 0; - r.forEach((a) => { + r15.forEach((a) => { let i = y.sizeFromShape(a.shape); n.set(a.vals, s), s += i; }); } else { let s = 0; - r.forEach((a) => { + r15.forEach((a) => { let i = e === "string" ? w.fromUint8ToStringArray(a.vals) : a.vals, p = 0; for (let u = 0; u < a.shape[0]; ++u) { let c = u * t8[1] + s; @@ -12284,27 +12285,27 @@ function mp(r, t8, e, o) { } return n; } -var US = ze((r, t8) => r === t8 ? 1 : 0); -var GS = Ye(yn, US, null, "bool"); -var r_ = { kernelName: yn, backendName: "cpu", kernelFunc: GS }; -var HS = Xt((r) => Math.exp(r)); -var KS = Ar(bn, HS, "float32"); -var o_ = { kernelName: bn, backendName: "cpu", kernelFunc: KS }; -var qS = Xt((r) => Math.expm1(r)); -var L8 = Ar(Cn, qS); -var n_ = { kernelName: Cn, backendName: "cpu", kernelFunc: L8 }; -var jS = Xt((r) => Math.floor(r)); -var B8 = Ar(Sn, jS); -var s_ = { kernelName: Sn, backendName: "cpu", kernelFunc: B8 }; -var XS = ze((r, t8) => Math.floor(r / t8)); -var z8 = Ye(In, XS, null, "int32"); -var a_ = { kernelName: In, backendName: "cpu", kernelFunc: z8 }; -function Tf(r, t8, e, o, n, s, a, i, p) { +var US = ze((r15, t8) => r15 === t8 ? 1 : 0); +var GS = Ye(xn, US, null, "bool"); +var o_ = { kernelName: xn, backendName: "cpu", kernelFunc: GS }; +var HS = jt((r15) => Math.exp(r15)); +var KS = Dr(yn, HS, "float32"); +var n_ = { kernelName: yn, backendName: "cpu", kernelFunc: KS }; +var qS = jt((r15) => Math.expm1(r15)); +var L8 = Dr(bn, qS); +var s_ = { kernelName: bn, backendName: "cpu", kernelFunc: L8 }; +var jS = jt((r15) => Math.floor(r15)); +var B8 = Dr(wn, jS); +var a_ = { kernelName: wn, backendName: "cpu", kernelFunc: B8 }; +var XS = ze((r15, t8) => Math.floor(r15 / t8)); +var z8 = Ye(Sn, XS, null, "int32"); +var i_ = { kernelName: Sn, backendName: "cpu", kernelFunc: z8 }; +function Nf(r15, t8, e, o, n, s, a, i, p) { let u = me([o, s], e); for (let c = 0; c < o; c++) { let l = [], m = 0; for (let d = 0; d < n; d++) { - let f = r[c * n + d]; + let f = r15[c * n + d]; m += f * a[d], l.push(f); } if (m < 0 || m >= p / s) @@ -12314,97 +12315,97 @@ function Tf(r, t8, e, o, n, s, a, i, p) { } return u; } -function _f(r, t8, e) { - let o = me(e, r.dtype); +function Tf(r15, t8, e) { + let o = me(e, r15.dtype); for (let n = 0; n < o.size; ++n) { let a = o.indexToLoc(n).slice(), i = a[0], p = a[2], u = t8.locToIndex([i, p]); a[2] = t8.values[u]; - let c = r.locToIndex(a); - 0 <= c && c < r.values.length && (o.values[n] = r.values[c]); + let c = r15.locToIndex(a); + 0 <= c && c < r15.values.length && (o.values[n] = r15.values[c]); } return o; } -var YS = ze((r, t8) => r > t8 ? 1 : 0); -var V8 = Ye(Nn, YS, null, "bool"); -var i_ = { kernelName: Nn, backendName: "cpu", kernelFunc: V8 }; -var QS = ze((r, t8) => r >= t8 ? 1 : 0); -var W8 = Ye(Tn, QS, null, "bool"); -var u_ = { kernelName: Tn, backendName: "cpu", kernelFunc: W8 }; -var ZS = ze((r, t8) => r < t8 ? 1 : 0); -var U8 = Ye(Dn, ZS, null, "bool"); -var p_ = { kernelName: Dn, backendName: "cpu", kernelFunc: U8 }; -var JS = ze((r, t8) => r <= t8 ? 1 : 0); -var G8 = Ye(An, JS, null, "bool"); -var c_ = { kernelName: An, backendName: "cpu", kernelFunc: G8 }; -function $f(r, t8, e) { - let o = (t8 - r) / (e - 1), n = y.makeZerosTypedArray(e, "float32"); - n[0] = r; +var YS = ze((r15, t8) => r15 > t8 ? 1 : 0); +var V8 = Ye(kn, YS, null, "bool"); +var u_ = { kernelName: kn, backendName: "cpu", kernelFunc: V8 }; +var QS = ze((r15, t8) => r15 >= t8 ? 1 : 0); +var W8 = Ye(Nn, QS, null, "bool"); +var p_ = { kernelName: Nn, backendName: "cpu", kernelFunc: W8 }; +var ZS = ze((r15, t8) => r15 < t8 ? 1 : 0); +var U8 = Ye(Rn, ZS, null, "bool"); +var c_ = { kernelName: Rn, backendName: "cpu", kernelFunc: U8 }; +var JS = ze((r15, t8) => r15 <= t8 ? 1 : 0); +var G8 = Ye(Dn, JS, null, "bool"); +var l_ = { kernelName: Dn, backendName: "cpu", kernelFunc: G8 }; +function _f(r15, t8, e) { + let o = (t8 - r15) / (e - 1), n = y.makeZerosTypedArray(e, "float32"); + n[0] = r15; for (let s = 1; s < n.length; s++) n[s] = n[s - 1] + o; return n; } -var eI = Xt((r) => Math.log(r)); -var H8 = Ar(Pn, eI); -var l_ = { kernelName: Pn, backendName: "cpu", kernelFunc: H8 }; -function Ef(r, t8, e, o) { +var eI = jt((r15) => Math.log(r15)); +var H8 = Dr(Fn, eI); +var m_ = { kernelName: Fn, backendName: "cpu", kernelFunc: H8 }; +function $f(r15, t8, e, o) { let n = y.getTypedArrayFromDType(o, y.sizeFromShape(e)); for (let s = 0; s < n.length; ++s) { - let a = s * t8, i = r[a]; + let a = s * t8, i = r15[a]; for (let p = 0; p < t8; ++p) { - let u = r[a + p]; + let u = r15[a + p]; (Number.isNaN(u) || u > i) && (i = u); } n[s] = i; } return n; } -var tI = ze((r, t8) => Math.max(r, t8)); -var K8 = Ye(Wn, tI); -var m_ = { kernelName: Wn, backendName: "cpu", kernelFunc: K8 }; -var rI = ze((r, t8) => Math.min(r, t8)); -var q8 = Ye(Kn, rI); -var d_ = { kernelName: Kn, backendName: "cpu", kernelFunc: q8 }; -var zl = ze((r, t8) => r * t8); -var j8 = Sc((r, t8, e, o) => ({ real: r * e - t8 * o, imag: r * o + t8 * e })); -var dp = Ye(Yn, zl, j8); -var f_ = { kernelName: Yn, backendName: "cpu", kernelFunc: dp }; -function oI(r, t8, e) { +var tI = ze((r15, t8) => Math.max(r15, t8)); +var K8 = Ye(Vn, tI); +var d_ = { kernelName: Vn, backendName: "cpu", kernelFunc: K8 }; +var rI = ze((r15, t8) => Math.min(r15, t8)); +var q8 = Ye(Hn, rI); +var f_ = { kernelName: Hn, backendName: "cpu", kernelFunc: q8 }; +var Ll = ze((r15, t8) => r15 * t8); +var j8 = xc((r15, t8, e, o) => ({ real: r15 * e - t8 * o, imag: r15 * o + t8 * e })); +var sp = Ye(Xn, Ll, j8); +var h_ = { kernelName: Xn, backendName: "cpu", kernelFunc: sp }; +function oI(r15, t8, e) { let o = y.createScalarValue(-1, e); - return zl([], t8, o, r, e); + return Ll([], t8, o, r15, e); } -function X8(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +function X8(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; Q(o, "neg"); let n = e.data.get(o.dataId).values, [s, a] = oI(n, o.shape, o.dtype); return e.makeTensorInfo(a, o.dtype, s); } -var h_ = { kernelName: pa, backendName: "cpu", kernelFunc: X8 }; -var nI = ze((r, t8) => r !== t8 ? 1 : 0); -var Y8 = Ye(Qn, nI, null, "bool"); -var g_ = { kernelName: Qn, backendName: "cpu", kernelFunc: Y8 }; -function vc(r, t8, e, o, n) { +var g_ = { kernelName: pa, backendName: "cpu", kernelFunc: X8 }; +var nI = ze((r15, t8) => r15 !== t8 ? 1 : 0); +var Y8 = Ye(Yn, nI, null, "bool"); +var x_ = { kernelName: Yn, backendName: "cpu", kernelFunc: Y8 }; +function bc(r15, t8, e, o, n) { let s = t8.length, a = y.sizeFromShape(t8), i = y.computeStrides(t8), p = y.computeStrides(n), u = y.getTypedArrayFromDType(e, 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]]; let d = y.locToIndex(m, s, p); - u[d] = r[c]; + u[d] = r15[c]; } return u; } -function It(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n } = t8, { perm: s } = e; +function St(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n } = t8, { perm: s } = e; 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]]; - let p = o.data.get(n.dataId).values, u = vc(p, n.shape, n.dtype, s, i); + let p = o.data.get(n.dataId).values, u = bc(p, n.shape, n.dtype, s, i); return { dataId: o.write(u, i, n.dtype), shape: i, dtype: n.dtype }; } -var x_ = { kernelName: co, backendName: "cpu", kernelFunc: It }; -function sI(r, t8, e, o) { - let [n, s] = w.computeOutAndReduceShapes(r, o), a = dt(t8, "int32"), i = y.makeZerosTypedArray(y.sizeFromShape(n), a), p = y.sizeFromShape(s); +var y_ = { kernelName: po, backendName: "cpu", kernelFunc: St }; +function sI(r15, t8, e, o) { + let [n, s] = w.computeOutAndReduceShapes(r15, o), a = dt(t8, "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) @@ -12413,26 +12414,26 @@ function sI(r, t8, e, o) { } return { outVals: i, outShape: n, outDtype: a }; } -function Q8(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; +function Q8(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; Q(n, "prod"); let i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = w.getAxesPermutation(p, i), c = p, l = n, m = []; - u != null && (l = It({ inputs: { x: n }, backend: e, attrs: { perm: u } }), m.push(l), c = w.getInnerMostAxes(c.length, i)); + u != null && (l = St({ inputs: { x: n }, backend: e, attrs: { perm: u } }), m.push(l), c = w.getInnerMostAxes(c.length, i)); let d = e.data.get(l.dataId).values, { outVals: f, outShape: h, outDtype: g } = sI(l.shape, l.dtype, d, c), x = h; return a && (x = w.expandShapeToKeepDim(h, p)), m.forEach((b) => e.disposeIntermediateTensorInfo(b)), e.makeTensorInfo(x, g, f); } -var y_ = { kernelName: ns, backendName: "cpu", kernelFunc: Q8 }; -function Z8(r, t8, e) { - r.forEach((o, n) => { +var b_ = { kernelName: os, backendName: "cpu", kernelFunc: Q8 }; +function Z8(r15, t8, e) { + r15.forEach((o, n) => { if (o < 0 || o >= e) { let s = y.indexToLoc(n, t8.length, y.computeStrides(t8)).join(","); throw new Error(`indices[${s}] = ${o} is not in [0, ${e})`); } }); } -function J8(r, t8) { - for (let e = 0; e < r.length; ++e) { - let o = r[e], n = e === r.length - 1 ? t8 : r[e + 1].length; +function J8(r15, t8) { + for (let e = 0; e < r15.length; ++e) { + let o = r15[e], n = e === r15.length - 1 ? t8 : r15[e + 1].length; if (o.length === 0) throw new Error("Ragged splits may not be empty"); if (o[0] < 0) @@ -12444,7 +12445,7 @@ function J8(r, t8) { throw new Error("Ragged splits must be sorted in ascending order"); } } -function eY(r, t8, e, o) { +function eY(r15, t8, e, o) { let n = [], s = 0, a = t8.length - 1 + e.length, i = new Array(a).fill(null).map(() => [0]); J8(e, o); let p = 1; @@ -12454,8 +12455,8 @@ function eY(r, t8, e, o) { for (let l = 1; l < p + 1; ++l) i[u].push(l * c); } - for (let u = 0; u < r.length; ++u) { - let c = r[u], l = r[u] + 1; + for (let u = 0; u < r15.length; ++u) { + let c = r15[u], l = r15[u] + 1; for (let m = 0; m < e.length; ++m) { let d = e[m], f = m + t8.length - 1; if (f >= 0) { @@ -12469,50 +12470,50 @@ function eY(r, t8, e, o) { } return { outSplits: i, valueSlices: n, numValues: s }; } -function tY(r) { +function tY(r15) { let t8 = []; - for (let e = 0; e < r.length; ++e) { - let o = r[e].length, n = y.getArrayFromDType("int32", o); - t8.push(n), r[e].forEach((s, a) => n[a] = s); + for (let e = 0; e < r15.length; ++e) { + let o = r15[e].length, n = y.getArrayFromDType("int32", o); + t8.push(n), r15[e].forEach((s, a) => n[a] = s); } return t8; } -function b_(r, t8) { - let e = r.slice(0, t8); +function C_(r15, t8) { + let e = r15.slice(0, t8); for (; e.length < t8; ) e.push(1); - for (let o = t8; o < r.length; o++) - e[t8 - 1] *= r[o]; + for (let o = t8; o < r15.length; o++) + e[t8 - 1] *= r15[o]; return e; } -function rY(r, t8, e, o, n, s) { - let a = b_(t8, 2)[1], i = b_(s, 2)[1], p = 0; +function rY(r15, t8, e, o, n, s) { + let a = C_(t8, 2)[1], i = C_(s, 2)[1], p = 0; for (let u of e) for (let c = u[0]; c < u[1]; ++c) { for (let l = 0; l < o; ++l) - n[p * i + l] = r[c * a + l]; + n[p * i + l] = r15[c * a + l]; ++p; } } -function oY(r, t8, e, o, n) { +function oY(r15, t8, e, o, n) { let s = t8.slice(); s[0] = n; - let a = y.getArrayFromDType(e, y.sizeFromShape(s)), i = r.length, p = i === 0 ? 0 : i / t8[0]; - return rY(r, t8, o, p, a, s), [a, s]; + let a = y.getArrayFromDType(e, y.sizeFromShape(s)), i = r15.length, p = i === 0 ? 0 : i / t8[0]; + return rY(r15, t8, o, p, a, s), [a, s]; } -function Rf(r, t8, e, o, n, s, a, i) { - if (r.length === 0) +function Ef(r15, t8, e, o, n, s, a, i) { + if (r15.length === 0) throw new Error("paramsNestedSplits must be non empty"); if (t8[0].length === 0) throw new Error("Split tensors must not be scalars"); let p = t8[0][0] - 1; if (Z8(s, a, p), o.length === 0) throw new Error("params.rank must be nonzero"); - let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = eY(s, a, r, u), d = tY(c), f = oY(e, o, n, l, m); + let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = eY(s, a, r15, u), d = tY(c), f = oY(e, o, n, l, m); return [d, f[0], f[1]]; } -var C_ = 2147483647; -function Df(r, t8, e, o, n, s, a) { +var w_ = 2147483647; +function Rf(r15, t8, e, o, n, s, a) { if (t8.length > 1) throw new Error("starts must be a scalar or vector"); if (n.length > 1) @@ -12527,44 +12528,44 @@ function Df(r, t8, e, o, n, s, a) { 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 ? r[0] : r[g], b = p ? o[0] : o[g], C = u ? s[0] : s[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"); let S; if (C > 0 && b < x || C < 0 && b > x) S = 0; - else if (S = Math.ceil(Math.abs((b - x) / C)), S > C_) - throw new Error(`Requires ((limit - start) / delta) <= ${C_}`); + else if (S = Math.ceil(Math.abs((b - x) / C)), S > w_) + throw new Error(`Requires ((limit - start) / delta) <= ${w_}`); m[g + 1] = m[g] + S; } let d = m[l], f = y.getArrayFromDType(e, d), h = 0; for (let g = 0; g < l; ++g) { - let x = m[g + 1] - m[g], b = i ? r[0] : r[g], C = u ? s[0] : s[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; } return [m, f]; } -var Ao = w.RowPartitionType; -var kc = class { +var Do = w.RowPartitionType; +var aI = class r12 { constructor(t8, e, o, n, s, a, i, p, u, c) { this.shape = t8, this.shapeShape = e, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = w.getRowPartitionTypesHelper(c), this.raggedRank = w.getRaggedRank(this.rowPartitionTypes); } getRowPartitionTypeByDimension(t8) { - return this.rowPartitionTypes[0] === Ao.FIRST_DIM_SIZE ? this.rowPartitionTypes[t8 + 1] : this.rowPartitionTypes[t8]; + return this.rowPartitionTypes[0] === Do.FIRST_DIM_SIZE ? this.rowPartitionTypes[t8 + 1] : this.rowPartitionTypes[t8]; } getRowPartitionTensor(t8) { - return this.rowPartitionTypes[0] === Ao.FIRST_DIM_SIZE ? this.rowPartitionValues[t8 + 1] : this.rowPartitionValues[t8]; + return this.rowPartitionTypes[0] === Do.FIRST_DIM_SIZE ? this.rowPartitionValues[t8 + 1] : this.rowPartitionValues[t8]; } getMaxWidth(t8) { let e = this.getRowPartitionTensor(t8 - 1); switch (this.getRowPartitionTypeByDimension(t8 - 1)) { - case Ao.VALUE_ROWIDS: - return kc.getMaxWidthValueRowID(e); - case Ao.ROW_SPLITS: - return kc.getMaxWidthRowSplit(e); + case Do.VALUE_ROWIDS: + return r12.getMaxWidthValueRowID(e); + case Do.ROW_SPLITS: + return r12.getMaxWidthRowSplit(e); default: - throw new Error(`Cannot handle partition type ${Ao[this.getRowPartitionTypeByDimension(t8 - 1)]}`); + throw new Error(`Cannot handle partition type ${Do[this.getRowPartitionTypeByDimension(t8 - 1)]}`); } } static getMaxWidthRowSplit(t8) { @@ -12595,7 +12596,7 @@ var kc = class { return []; throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); } - return S_(t8, o); + return I_(t8, o); } calculateOutputSize(t8) { let e = this.valuesShape, o = this.defaultValueShape; @@ -12655,14 +12656,14 @@ var kc = class { calculateOutputIndex(t8, e, o, n) { let s = this.getRowPartitionTensor(t8), a = this.getRowPartitionTypeByDimension(t8); switch (a) { - case Ao.VALUE_ROWIDS: + case Do.VALUE_ROWIDS: return this.calculateOutputIndexValueRowID(s, e, o, n); - case Ao.ROW_SPLITS: + case Do.ROW_SPLITS: if (s.length - 1 > e.length) throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${e.length}`); return this.calculateOutputIndexRowSplit(s, e, o, n); default: - throw new Error(`Unsupported partition type: ${Ao[a]}`); + throw new Error(`Unsupported partition type: ${Do[a]}`); } } getFirstDimensionSize() { @@ -12671,14 +12672,14 @@ var kc = class { throw new Error("No row_partition_types given."); let e = this.rowPartitionTypes[0]; switch (e) { - case Ao.FIRST_DIM_SIZE: + case Do.FIRST_DIM_SIZE: return t8[0]; - case Ao.VALUE_ROWIDS: + case Do.VALUE_ROWIDS: throw new Error("Cannot handle VALUE_ROWIDS in first dimension."); - case Ao.ROW_SPLITS: + case Do.ROW_SPLITS: return this.rowPartitionValuesShapes[0][0] - 1; default: - throw new Error(`Cannot handle type ${Ao[e]}`); + throw new Error(`Cannot handle type ${Do[e]}`); } } compute() { @@ -12688,7 +12689,7 @@ var kc = class { n[n.length - 1] = 1; for (let p = n.length - 2; p >= 0; --p) n[p] = n[p + 1] * o[p + 1]; - let s = S_(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); + let s = I_(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); if (n[0] * o[0] > 0) { let p = this.calculateFirstParentOutputIndex(e, n[0], o[0]); for (let u = 1; u <= this.raggedRank; ++u) @@ -12707,7 +12708,7 @@ var kc = class { let f = this.defaultValueShape; De(() => { let h = W(c, f); - c = iu(h, i).dataSync(); + c = ou(h, i).dataSync(); }); } let l = 0, m = 0, d = 0; @@ -12719,7 +12720,7 @@ var kc = class { } if (m < d) { let g = s.subarray(l * p), x = a.subarray(m * p), b = (d - m) * p; - w_(x, g, b); + S_(x, g, b); } if (f >= u) { let g = o.length; @@ -12731,19 +12732,19 @@ var kc = class { else for (; h > d; ) { let g = a.slice(d * p); - w_(g, c, p), ++d; + S_(g, c, p), ++d; } h < 0 ? (l = f + 1, m = d) : (l = f, m = d, d = m + 1); } } }; -function w_(r, t8, e) { +function S_(r15, t8, e) { for (let o = 0; o < e; o++) - r[o] = t8[o]; + r15[o] = t8[o]; } -function S_(r, t8) { +function I_(r15, t8) { let e = []; - for (let o of r) { + for (let o of r15) { if (o < 0) { if (!t8) throw new Error(`Dimension ${o} must be >= 0`); @@ -12755,24 +12756,24 @@ function S_(r, t8) { } return e; } -function Af(r, t8, e, o, n, s, a, i, p, u) { - return new kc(r, t8, e, o, n, s, a, i, p, u).compute(); +function Df(r15, t8, e, o, n, s, a, i, p, u) { + return new aI(r15, t8, e, o, n, s, a, i, p, u).compute(); } -function fp(r, t8, e, o) { - let n = r === t8, s = r < t8 && e < 0, a = t8 < r && e > 1; +function ap(r15, t8, e, o) { + let n = r15 === t8, s = r15 < t8 && e < 0, a = t8 < r15 && e > 1; if (n || s || a) return y.makeZerosTypedArray(0, o); - let i = Math.abs(Math.ceil((t8 - r) / e)), p = y.makeZerosTypedArray(i, o); - t8 < r && e === 1 && (e = -1), p[0] = r; + let i = Math.abs(Math.ceil((t8 - r15) / e)), p = y.makeZerosTypedArray(i, o); + t8 < r15 && e === 1 && (e = -1), p[0] = r15; for (let u = 1; u < p.length; u++) p[u] = p[u - 1] + e; return p; } -var aI = Xt((r) => 1 / Math.sqrt(r)); -var nY = Ar(ms, aI); -var I_ = { kernelName: ms, backendName: "cpu", kernelFunc: nY }; -function zs(r, t8, e, o, n, s, a, i, p, u) { - let c = [o / n, n], l = r.values, m = t8.values; +var iI = jt((r15) => 1 / Math.sqrt(r15)); +var nY = Dr(ls, iI); +var v_ = { kernelName: ls, backendName: "cpu", kernelFunc: nY }; +function zs(r15, t8, e, o, n, s, a, i, p, u) { + let c = [o / n, n], l = r15.values, m = t8.values; if (o === 0) return me(e, t8.dtype); let d = p instanceof tt ? p : me(c, t8.dtype); @@ -12790,32 +12791,32 @@ function zs(r, t8, e, o, n, s, a, i, p, u) { } return d; } -var v_ = Xt((r) => 1 / (1 + Math.exp(-r))); -var iI = Ie(Cs, (r) => 1 / (1 + Math.exp(-r))); -var k_ = { kernelName: Cs, backendName: "cpu", kernelFunc: iI }; -function hp(r, t8, e, o, n) { - let s = ct.isSliceContinous(o, t8, e), a = y.sizeFromShape(e), i = y.computeStrides(o); +var k_ = jt((r15) => 1 / (1 + Math.exp(-r15))); +var uI = Ie(bs, (r15) => 1 / (1 + Math.exp(-r15))); +var N_ = { kernelName: bs, backendName: "cpu", kernelFunc: uI }; +function ip(r15, t8, e, o, n) { + let s = pt.isSliceContinous(o, t8, e), a = y.sizeFromShape(e), i = y.computeStrides(o); if (s) { - let l = ct.computeFlatOffset(t8, i); - return n === "string" ? r.slice(l, l + a) : r.subarray(l, l + a); + let l = pt.computeFlatOffset(t8, i); + return n === "string" ? r15.slice(l, l + a) : r15.subarray(l, l + a); } - let p = n === "string" ? w.fromUint8ToStringArray(r) : r, u = me(o, n, p), c = me(e, n); + let p = n === "string" ? w.fromUint8ToStringArray(r15) : r15, u = me(o, n, p), c = me(e, n); for (let l = 0; l < c.size; ++l) { let m = c.indexToLoc(l), d = m.map((f, h) => f + t8[h]); c.set(u.get(...d), ...m); } return n === "string" ? w.fromStringArrayToUint8(c.values) : c.values; } -function Fo(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { begin: s, size: a } = o; +function Ao(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { begin: s, size: a } = o; Q(n, "slice"); - let [i, p] = ct.parseSliceParams(n, s, a); - ct.assertParamsValid(n, i, p); - let u = e.data.get(n.dataId).values, c = hp(u, i, p, n.shape, n.dtype); + let [i, p] = pt.parseSliceParams(n, s, a); + pt.assertParamsValid(n, i, p); + let u = e.data.get(n.dataId).values, c = ip(u, i, p, n.shape, n.dtype); return e.makeTensorInfo(p, n.dtype, c); } -var N_ = { kernelName: ha, backendName: "cpu", kernelFunc: Fo }; -function Ff(r, t8, e, o, n, s, a) { +var T_ = { kernelName: ha, backendName: "cpu", kernelFunc: Ao }; +function Af(r15, t8, e, o, n, s, a) { let i = t8[0], p = s[0], u = new Array(p), c = new Array(i), l = t8[1]; if (p === 0) { if (i !== 0) @@ -12825,7 +12826,7 @@ function Ff(r, t8, e, o, n, s, a) { } let m = true, d = 0, f = new Array(p).fill(0); for (let g = 0; g < i; ++g) { - let x = r[g * l]; + let x = r15[g * l]; if (x < 0) throw new Error(w.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); if (x >= p) @@ -12838,17 +12839,17 @@ function Ff(r, t8, e, o, n, s, a) { u[g] = x, h = h && !x, f[g] = Math.max(f[g], 1), g > 0 && (f[g] += f[g - 1]); } if (h && m) { - let g = r, x = o; + let g = r15, x = o; 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(e, g * l), b = y.getArrayFromDType(n, g), C = new Array(p).fill(0); for (let S = 0; S < i; ++S) { - let k = r[S * l], _ = C[k], E = (k === 0 ? 0 : f[k - 1]) + _; + let k = r15[S * l], _ = C[k], E = (k === 0 ? 0 : f[k - 1]) + _; C[k]++; for (let R = 0; R < l; ++R) - x[E * l + R] = r[S * l + R]; + x[E * l + R] = r15[S * l + R]; b[E] = o[S], c[S] = E; } for (let S = 0; S < p; ++S) @@ -12862,7 +12863,7 @@ function Ff(r, t8, e, o, n, s, a) { return [x, [g, l], b, u, c]; } } -function Pf(r, t8, e, o, n) { +function Ff(r15, t8, e, o, n) { let s = y.sizeFromShape(o), a = t8[0], i = n.length, p = [], u = 1, c = -1; for (let g = 0; g < i; ++g) { let x = n[g]; @@ -12902,14 +12903,14 @@ function Pf(r, t8, e, o, n) { for (let g = 0; g < a; ++g) { let x = 0; for (let b = 0; b < m; ++b) - x += r[g * m + b] * d[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 Nc(r, t8, e, o, n, s = false, a = 0) { - let i = o.length, p = [t8[0], r.length / t8[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; +function Cc(r15, t8, e, o, n, s = false, a = 0) { + let i = o.length, p = [t8[0], r15.length / t8[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; if (l < 0) throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let m = t8.slice(); @@ -12938,7 +12939,7 @@ function Nc(r, t8, e, o, n, s = false, a = 0) { if (k < 0 || k >= p[0]) throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); for (let _ = 0; _ < u; _++) - f[b * u + _] += r[k * u + _]; + f[b * u + _] += r15[k * u + _]; } if (s) for (let S = 0; S < u; S++) @@ -12948,23 +12949,23 @@ function Nc(r, t8, e, o, n, s = false, a = 0) { } return x < l && f.fill(a, x * u, l * u), [f, m]; } -var T_ = Xt((r) => Math.sqrt(r)); -var sY = Ie(Ss, (r) => Math.sqrt(r)); -var __ = { kernelName: Ss, backendName: "cpu", kernelFunc: sY }; -var uI = ze((r, t8) => { - let e = r - t8; +var __ = jt((r15) => Math.sqrt(r15)); +var sY = Ie(ws, (r15) => Math.sqrt(r15)); +var $_ = { kernelName: ws, backendName: "cpu", kernelFunc: sY }; +var pI = ze((r15, t8) => { + let e = r15 - t8; return e * e; }); -var aY = Ye(Ns, uI); -var $_ = { kernelName: Ns, backendName: "cpu", kernelFunc: aY }; -var pI = Xt((r, t8) => { +var aY = Ye(ks, pI); +var E_ = { kernelName: ks, backendName: "cpu", kernelFunc: aY }; +var cI = jt((r15, t8) => { let { pattern: e, replaceGlobal: o, rewrite: n } = t8; - return r.replace(new RegExp(e, o ? "g" : ""), n); + return r15.replace(new RegExp(e, o ? "g" : ""), n); }); -var iY = Ar(Ou, pI); -var E_ = { kernelName: Ou, backendName: "cpu", kernelFunc: iY }; -function Of(r, t8, e, o) { - let n = me(r, t8.dtype); +var iY = Dr($u, cI); +var R_ = { kernelName: $u, backendName: "cpu", kernelFunc: iY }; +function Pf(r15, t8, e, o) { + let n = me(r15, t8.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++) @@ -12973,7 +12974,7 @@ function Of(r, t8, e, o) { } return n; } -var cI = class { +var lI = class { constructor(t8, e, o, n, s, a) { this.separator = y.encodeString(t8), this.nGramWidths = e, this.leftPad = y.encodeString(o), this.rightPad = y.encodeString(n), this.padWidth = s, this.preserveShort = a; } @@ -13055,38 +13056,38 @@ var cI = class { return [i, a]; } }; -function gp(r, t8, e, o, n, s, a, i) { - return new cI(e, o, n, s, a, i).compute(r, t8); +function up(r15, t8, e, o, n, s, a, i) { + return new lI(e, o, n, s, a, i).compute(r15, t8); } -function uY(r, t8, e, o) { - if (!r.length) +function uY(r15, t8, e, o) { + if (!r15.length) return; if (t8.length === 0) { - for (let s = 0; s < r.length; ++s) - o.push(r.subarray(s, s + 1)); + for (let s = 0; s < r15.length; ++s) + o.push(r15.subarray(s, s + 1)); return; } if (t8.length === 1) { - let s = t8[0], a = r.indexOf(s); + let s = t8[0], a = r15.indexOf(s); for (; a !== -1; ) { - let i = r.subarray(0, a); - (!e || i.length !== 0) && o.push(i), r = r.subarray(a + 1), a = r.indexOf(s); + let i = r15.subarray(0, a); + (!e || i.length !== 0) && o.push(i), r15 = r15.subarray(a + 1), a = r15.indexOf(s); } - (!e || r.length !== 0) && o.push(r); + (!e || r15.length !== 0) && o.push(r15); return; } let n = 0; - for (let s = 0; s < r.length + 1; s++) - if (s === r.length || t8.indexOf(r[s]) !== -1) { - let a = r.subarray(n, s); + for (let s = 0; s < r15.length + 1; s++) + if (s === r15.length || t8.indexOf(r15[s]) !== -1) { + let a = r15.subarray(n, s); (!e || a.length !== 0) && o.push(a), n = s + 1; } } -function xp(r, t8, e) { - let o = r.length, n = [], s = 0, a = 0, i = new Array(o); +function pp(r15, t8, e) { + let o = r15.length, n = [], s = 0, a = 0, i = new Array(o); for (let m = 0; m < o; ++m) { let d = n.length; - uY(r[m], t8, e, n); + uY(r15[m], t8, e, n); let f = n.length - d; i[m] = f, s += f, a = Math.max(a, f); } @@ -13096,55 +13097,55 @@ function xp(r, t8, e) { p[l * 2] = m, p[l * 2 + 1] = d, u[l] = n[l], ++l; return [p, u, c]; } -function yp(r, t8) { - let e = y.getArrayFromDType("int32", r.length); - for (let o = 0; o < r.length; ++o) - e[o] = y.fingerPrint64(r[o]).modulo(t8).getLowBitsUnsigned(); +function cp(r15, t8) { + let e = y.getArrayFromDType("int32", r15.length); + for (let o = 0; o < r15.length; ++o) + e[o] = y.fingerPrint64(r15[o]).modulo(t8).getLowBitsUnsigned(); return e; } -var lI = ze((r, t8) => r - t8); -var pY = Sc((r, t8, e, o) => ({ real: r - e, imag: t8 - o })); -var Vl = Ye(_s, lI, pY); -var R_ = { kernelName: _s, backendName: "cpu", kernelFunc: Vl }; -function Mf(r, t8) { - let e = new Array(r.rank); +var mI = ze((r15, t8) => r15 - t8); +var pY = xc((r15, t8, e, o) => ({ real: r15 - e, imag: t8 - o })); +var Bl = Ye(Ts, mI, pY); +var D_ = { kernelName: Ts, backendName: "cpu", kernelFunc: Bl }; +function Of(r15, t8) { + let e = new Array(r15.rank); for (let n = 0; n < e.length; n++) - e[n] = r.shape[n] * t8[n]; - let o = me(e, r.dtype); + e[n] = r15.shape[n] * t8[n]; + let o = me(e, r15.dtype); for (let n = 0; n < o.values.length; ++n) { - let s = o.indexToLoc(n), a = new Array(r.rank); + let s = o.indexToLoc(n), a = new Array(r15.rank); for (let p = 0; p < a.length; p++) - a[p] = s[p] % r.shape[p]; - let i = r.locToIndex(a); - o.values[n] = r.values[i]; + a[p] = s[p] % r15.shape[p]; + let i = r15.locToIndex(a); + o.values[n] = r15.values[i]; } return o; } -var Wl = (r, t8) => { - let e = t8.value - r.value; - return e === 0 ? r.index - t8.index : e; +var zl = (r15, t8) => { + let e = t8.value - r15.value; + return e === 0 ? r15.index - t8.index : e; }; -function D_(r, t8, e = 0, o = r.length - 1) { +function A_(r15, t8, e = 0, o = r15.length - 1) { for (; o > e; ) { if (o - e > 600) { let i = o - e + 1, p = t8 - e + 1, u = Math.log(i), c = 0.5 * Math.exp(2 * u / 3), l = 0.5 * Math.sqrt(u * c * (i - c) / i) * Math.sign(p - i / 2), m = Math.max(e, Math.floor(t8 - p * c / i + l)), d = Math.min(o, Math.floor(t8 + (i - p) * c / i + l)); - D_(r, t8, m, d); + A_(r15, t8, m, d); } - let n = r[t8], s = e, a = o; - for (y.swap(r, e, t8), Wl(r[o], n) > 0 && y.swap(r, e, o); s < a; ) { - for (y.swap(r, s, a), s++, a--; Wl(r[s], n) < 0; ) + let n = r15[t8], s = e, a = o; + for (y.swap(r15, e, t8), zl(r15[o], n) > 0 && y.swap(r15, e, o); s < a; ) { + for (y.swap(r15, s, a), s++, a--; zl(r15[s], n) < 0; ) s = s + 1; - for (; Wl(r[a], n) > 0; ) + for (; zl(r15[a], n) > 0; ) a = a - 1; } - Wl(r[e], n) === 0 ? y.swap(r, e, a) : (a = a + 1, y.swap(r, a, o)), a <= t8 && (e = a + 1), t8 <= a && (o = a - 1); + zl(r15[e], n) === 0 ? y.swap(r15, e, a) : (a = a + 1, y.swap(r15, a, o)), a <= t8 && (e = a + 1), t8 <= a && (o = a - 1); } } -function Lf(r, t8, e, o, n) { - let s = t8[t8.length - 1], [a, i] = [r.length / s, s], p = y.getTypedArrayFromDType(e, a * o), u = y.getTypedArrayFromDType("int32", a * o); +function Mf(r15, t8, e, o, n) { + let s = t8[t8.length - 1], [a, i] = [r15.length / s, s], p = y.getTypedArrayFromDType(e, a * o), u = y.getTypedArrayFromDType("int32", a * o); for (let l = 0; l < a; l++) { - let m = l * i, d = r.subarray(m, m + i), f = new Array(d.length); - d.forEach((b, C) => f[C] = { value: b, index: C }), o < f.length && (D_(f, o), f = f.slice(0, o)), n && f.sort(Wl); + 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 && (A_(f, o), f = f.slice(0, o)), n && f.sort(zl); 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; @@ -13152,18 +13153,18 @@ function Lf(r, t8, e, o, n) { let c = t8.slice(); return c[c.length - 1] = o, [me(c, e, p), me(c, "int32", u)]; } -function bp(r, t8, e, o) { +function lp(r15, t8, e, o) { let n = y.parseAxisParam(t8, e)[0], s = [1, e[0], 1]; for (let f = 0; f < n; f++) s[0] *= e[f]; s[1] = e[n]; for (let f = n + 1; f < e.length; f++) s[2] *= e[f]; - let a = /* @__PURE__ */ new Map(), i = new Int32Array(e[n]), p = new tt(s, o, r), u = [], c = s[0] === 1 && s[2] === 1; + let a = /* @__PURE__ */ new Map(), i = new Int32Array(e[n]), p = new tt(s, o, r15), u = [], c = s[0] === 1 && s[2] === 1; for (let f = 0; f < e[n]; f++) { let h; if (c) - h = r[f].toString(); + h = r15[f].toString(); else { let x = []; for (let b = 0; b < s[0]; b++) @@ -13190,50 +13191,50 @@ function bp(r, t8, e, o) { let d = e.slice(); return d[n] = l[1], { outputValues: m.values, outputShape: d, indices: i }; } -var cY = "4.11.0"; -su("cpu", () => new xu(), 1); -var mI = Ie(gn, (r) => r >= 0 ? r : Math.exp(r) - 1); -var A_ = { kernelName: gn, backendName: "cpu", kernelFunc: mI }; -function dI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { alpha: s } = o; +var cY = "4.14.0"; +tu("cpu", () => new hc(), 1); +var dI = Ie(hn, (r15) => r15 >= 0 ? r15 : Math.exp(r15) - 1); +var F_ = { kernelName: hn, backendName: "cpu", kernelFunc: dI }; +function fI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { alpha: s } = o; Q([n], "leakyRelu"); let a = y.sizeFromShape(n.shape), i = e.data.get(n.dataId).values, p = y.getTypedArrayFromDType("float32", a); for (let u = 0; u < i.length; u++) p[u] = i[u] < 0 ? s * i[u] : i[u]; return e.makeTensorInfo(n.shape, "float32", p); } -var F_ = { kernelName: Rn, backendName: "cpu", kernelFunc: dI }; -var lY = ze((r, t8) => r < 0 ? t8 * r : r); -function fI(r) { - let { inputs: t8, backend: e } = r, { x: o, alpha: n } = t8; +var P_ = { kernelName: En, backendName: "cpu", kernelFunc: fI }; +var lY = ze((r15, t8) => r15 < 0 ? t8 * r15 : r15); +function hI(r15) { + let { inputs: t8, backend: e } = r15, { x: o, alpha: n } = t8; Q([o, n], "prelu"); let s = e.data.get(o.dataId).values, a = e.data.get(n.dataId).values, [i, p] = lY(o.shape, n.shape, s, a, "float32"); return e.makeTensorInfo(p, "float32", i); } -var P_ = { kernelName: os, backendName: "cpu", kernelFunc: fI }; -var hI = Ie(as, (r) => Math.max(0, r)); -var O_ = { kernelName: as, backendName: "cpu", kernelFunc: hI }; -var gI = Ie(ps, (r) => Math.min(Math.max(0, r), 6)); -var M_ = { kernelName: ps, backendName: "cpu", kernelFunc: gI }; -function Cp(r, t8, e, o, n) { +var O_ = { kernelName: rs, backendName: "cpu", kernelFunc: hI }; +var gI = Ie(ss, (r15) => Math.max(0, r15)); +var M_ = { kernelName: ss, backendName: "cpu", kernelFunc: gI }; +var xI = Ie(us, (r15) => Math.min(Math.max(0, r15), 6)); +var L_ = { kernelName: us, backendName: "cpu", kernelFunc: xI }; +function mp(r15, t8, e, o, n) { if (e === "linear") - return mr({ inputs: { x: t8 }, backend: r }); + return lr({ inputs: { x: t8 }, backend: r15 }); if (e === "relu") - return hI({ inputs: { x: t8 }, backend: r }); + return gI({ inputs: { x: t8 }, backend: r15 }); if (e === "elu") - return mI({ inputs: { x: t8 }, backend: r }); + return dI({ inputs: { x: t8 }, backend: r15 }); if (e === "relu6") - return gI({ inputs: { x: t8 }, backend: r }); + return xI({ inputs: { x: t8 }, backend: r15 }); if (e === "prelu") - return fI({ inputs: { x: t8, alpha: o }, backend: r }); + return hI({ inputs: { x: t8, alpha: o }, backend: r15 }); if (e === "leakyrelu") - return dI({ inputs: { x: t8 }, backend: r, attrs: { alpha: n } }); + return fI({ inputs: { x: t8 }, backend: r15, attrs: { alpha: n } }); if (e === "sigmoid") - return iI({ inputs: { x: t8 }, backend: r }); + return uI({ inputs: { x: t8 }, backend: r15 }); throw new Error(`Activation ${e} has not been implemented for the CPU backend.`); } -function Ve(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { shape: s } = o, a = y.sizeFromShape(n.shape), i = y.inferFromImplicitShape(s, a), p = y.sizeFromShape(i); +function Ve(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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.`), e.incRef(n.dataId); let u = e.data.get(n.dataId); if (u.complexTensorInfos != null) { @@ -13242,11 +13243,11 @@ function Ve(r) { } return { dataId: n.dataId, shape: i, dtype: n.dtype }; } -var L_ = { kernelName: da, backendName: "cpu", kernelFunc: Ve }; -function xI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; +var B_ = { kernelName: da, backendName: "cpu", kernelFunc: Ve }; +function yI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s } = t8, { 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 = Ir.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + 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], _ = Ve({ inputs: { x: n }, backend: e, attrs: { shape: S } }), E = Ve({ inputs: { x: s }, backend: e, attrs: { shape: k } }), R = a ? _.shape[1] : _.shape[2], D = a ? _.shape[2] : _.shape[1], P = i ? E.shape[1] : E.shape[2], O = Math.max(g, x), M = e.data.get(_.dataId).values, L = e.data.get(E.dataId).values, B = y.computeStrides(_.shape), z = y.computeStrides(E.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 = e.blockSize; for (let le = 0; le < O; le++) { @@ -13255,16 +13256,16 @@ function xI(r) { let Fe = Math.min(ve + ie, D); for (let Pe = 0; Pe < P; Pe += ie) { let st = Math.min(Pe + ie, P); - for (let lt = 0; lt < R; lt += ie) { - let Ge = Math.min(lt + ie, R); - for (let mt = ve; mt < Fe; mt++) + for (let ct = 0; ct < R; ct += ie) { + let Ge = Math.min(ct + ie, R); + for (let lt = ve; lt < Fe; lt++) for (let it = Pe; it < st; it++) { - let gt = 0; - for (let xt = lt; xt < Ge; xt++) { - let Lr = M[be * U + mt * j + xt * q], Lt = L[xt * Y + it * J + _e * re]; - gt += Lr * Lt; + let ht = 0; + for (let gt = ct; gt < Ge; gt++) { + let Mr = M[be * U + lt * j + gt * q], Mt = L[gt * Y + it * J + _e * re]; + ht += Mr * Mt; } - oe[le * ne + (mt * P + it)] += gt; + oe[le * ne + (lt * P + it)] += ht; } } } @@ -13272,21 +13273,21 @@ function xI(r) { } return e.disposeIntermediateTensorInfo(_), e.disposeIntermediateTensorInfo(E), e.makeTensorInfo(C, ee.dtype, ee.values); } -var B_ = { kernelName: Jo, backendName: "cpu", kernelFunc: xI }; -function mY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, d, f, h = []; - m = xI({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: e }), a && (d = Oa({ inputs: { a: m, b: a }, backend: e }), h.push(m), m = d), c && (f = Cp(e, m, c, i, l), h.push(m), m = f); +var z_ = { kernelName: Zo, backendName: "cpu", kernelFunc: yI }; +function mY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, d, f, h = []; + m = yI({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: e }), a && (d = Pa({ inputs: { a: m, b: a }, backend: e }), h.push(m), m = d), c && (f = mp(e, m, c, i, l), h.push(m), m = f); for (let x of h) e.disposeIntermediateTensorInfo(x); return m; } -var z_ = { kernelName: Io, backendName: "cpu", kernelFunc: mY }; -var dY = Ie(Wo, (r) => Math.acos(r)); -var V_ = { kernelName: Wo, backendName: "cpu", kernelFunc: dY }; -var fY = Ie(Uo, (r) => Math.acosh(r)); -var W_ = { kernelName: Uo, backendName: "cpu", kernelFunc: fY }; -function hY(r) { - let { inputs: t8, backend: e } = r, o = t8; +var V_ = { kernelName: So, backendName: "cpu", kernelFunc: mY }; +var dY = Ie(Vo, (r15) => Math.acos(r15)); +var W_ = { kernelName: Vo, backendName: "cpu", kernelFunc: dY }; +var fY = Ie(Wo, (r15) => Math.acosh(r15)); +var U_ = { kernelName: Wo, backendName: "cpu", kernelFunc: fY }; +function hY(r15) { + let { inputs: t8, backend: e } = r15, o = t8; Q(t8, "addN"); let n = o.map((i) => e.data.get(i.dataId).values), s = me(o[0].shape, o[0].dtype), a = s.values; for (let i = 0; i < o.length; i++) { @@ -13296,12 +13297,12 @@ function hY(r) { } return e.makeTensorInfo(s.shape, s.dtype, s.values); } -var U_ = { kernelName: Go, backendName: "cpu", kernelFunc: hY }; -function gY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; +var G_ = { kernelName: Uo, backendName: "cpu", kernelFunc: hY }; +function gY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; Q(n, "all"); let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; - u != null && (c = It({ inputs: { x: n }, backend: e, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("all", p, c.shape.length); + u != null && (c = St({ inputs: { x: n }, backend: e, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("all", 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 = e.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { let b = x * d, C = h[b]; @@ -13319,12 +13320,12 @@ function gY(r) { } return g; } -var G_ = { kernelName: Ho, backendName: "cpu", kernelFunc: gY }; -function xY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; +var H_ = { kernelName: Go, backendName: "cpu", kernelFunc: gY }; +function xY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; Q(n, "any"); let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; - u != null && (c = It({ inputs: { x: n }, backend: e, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("any", p, c.shape.length); + u != null && (c = St({ inputs: { x: n }, backend: e, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("any", 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 = e.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { let b = x * d, C = h[b]; @@ -13342,12 +13343,12 @@ function xY(r) { } return g; } -var H_ = { kernelName: Ko, backendName: "cpu", kernelFunc: xY }; -function yY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o; +var K_ = { kernelName: Ho, backendName: "cpu", kernelFunc: xY }; +function yY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s } = o; Q(n, "argMax"); let a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = It({ inputs: { x: n }, backend: e, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], w.assertAxesAreInnerMostDims("argMax", a, p.shape.length); + i != null && (p = St({ inputs: { x: n }, backend: e, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], w.assertAxesAreInnerMostDims("argMax", 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 = e.data.get(p.dataId).values; for (let g = 0; g < d.length; ++g) { let x = g * f, b = h[x], C = 0; @@ -13359,12 +13360,12 @@ function yY(r) { } return u.forEach((g) => e.disposeIntermediateTensorInfo(g)), e.makeTensorInfo(c, "int32", d); } -var K_ = { kernelName: Ys, backendName: "cpu", kernelFunc: yY }; -function bY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o; +var q_ = { kernelName: Ys, backendName: "cpu", kernelFunc: yY }; +function bY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = It({ inputs: { x: n }, backend: e, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], w.assertAxesAreInnerMostDims("argMin", a, p.shape.length); + i != null && (p = St({ inputs: { x: n }, backend: e, 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 = e.data.get(p.dataId).values; for (let g = 0; g < d.length; ++g) { let x = g * f, b = h[x], C = 0; @@ -13376,19 +13377,19 @@ function bY(r) { } return u.forEach((g) => e.disposeIntermediateTensorInfo(g)), e.makeTensorInfo(c, "int32", d); } -var q_ = { kernelName: Qs, backendName: "cpu", kernelFunc: bY }; -var CY = Ie(qo, (r) => Math.asin(r)); -var j_ = { kernelName: qo, backendName: "cpu", kernelFunc: CY }; -var wY = Ie(jo, (r) => Math.asinh(r)); -var X_ = { kernelName: jo, backendName: "cpu", kernelFunc: wY }; -var SY = Ie(Xo, (r) => Math.atan(r)); -var Y_ = { kernelName: Xo, backendName: "cpu", kernelFunc: SY }; -var IY = ze((r, t8) => Math.atan2(r, t8)); -var vY = Ye(Qo, IY); -var Q_ = { kernelName: Qo, backendName: "cpu", kernelFunc: vY }; -var kY = Ie(Yo, (r) => Math.atanh(r)); -var Z_ = { kernelName: Yo, backendName: "cpu", kernelFunc: kY }; -function _c(r, t8, e, o, n, s) { +var j_ = { kernelName: Qs, backendName: "cpu", kernelFunc: bY }; +var CY = Ie(Ko, (r15) => Math.asin(r15)); +var X_ = { kernelName: Ko, backendName: "cpu", kernelFunc: CY }; +var wY = Ie(qo, (r15) => Math.asinh(r15)); +var Y_ = { kernelName: qo, backendName: "cpu", kernelFunc: wY }; +var SY = Ie(jo, (r15) => Math.atan(r15)); +var Q_ = { kernelName: jo, backendName: "cpu", kernelFunc: SY }; +var IY = ze((r15, t8) => Math.atan2(r15, t8)); +var vY = Ye(Yo, IY); +var Z_ = { kernelName: Yo, backendName: "cpu", kernelFunc: vY }; +var kY = Ie(Xo, (r15) => Math.atanh(r15)); +var J_ = { kernelName: Xo, backendName: "cpu", kernelFunc: kY }; +function Sc(r15, t8, e, 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, e), 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]; @@ -13400,7 +13401,7 @@ function _c(r, t8, e, o, n, s) { 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 = r[oe + E]; + let oe = ne + ee * o[2], ie = r15[oe + E]; s === "max" && ie > j ? j = ie : s === "avg" && (q += ie, Y++); } if (isNaN(j)) @@ -13413,8 +13414,8 @@ function _c(r, t8, e, o, n, s) { } return h; } -function Bf(r, t8, e, 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(t8, e, r); +function Lf(r15, t8, e, 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(t8, e, 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) { @@ -13439,7 +13440,7 @@ function Bf(r, t8, e, o, n = false, s = false) { } return a; } -function zf(r, t8, e, o, n, s) { +function Bf(r15, t8, e, 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, e), 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], E = 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]; @@ -13460,12 +13461,12 @@ function zf(r, t8, e, o, n, s) { 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 lt = O + st * o[1]; + let ct = O + st * o[1]; for (let Ge = J; Ge < re; Ge += c) { - let mt = lt + Ge * o[2]; + let lt = ct + Ge * o[2]; for (let it = ie; it < le; it += l) { - let gt = mt + it * o[3], xt = r[gt + M]; - if (s === "max" && xt > _e ? _e = xt : s === "avg" && (ve += xt, Fe++), isNaN(_e)) + 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)) @@ -13482,7 +13483,7 @@ function zf(r, t8, e, o, n, s) { } return C; } -function J_(r, t8) { +function e$(r15, t8) { let e = me(t8.outShape, "int32"), o = t8.strideDepth, n = t8.strideHeight, s = t8.strideWidth, a = t8.dilationDepth, i = t8.dilationHeight, p = t8.dilationWidth, u = t8.effectiveFilterDepth, c = t8.effectiveFilterHeight, l = t8.effectiveFilterWidth, m = t8.padInfo.front, d = t8.padInfo.top, f = t8.padInfo.left; for (let h = 0; h < t8.batchSize; ++h) for (let g = 0; g < t8.inChannels; ++g) @@ -13506,7 +13507,7 @@ function J_(r, t8) { for (let j = E; j < R; j += i) { let q = j - _; for (let Y = O; Y < M; Y += p) { - let J = Y - P, re = r.get(h, z, j, Y, g); + let J = Y - P, re = r15.get(h, z, j, Y, g); re >= L && (L = re, B = U * c * l + q * c + J); } } @@ -13517,30 +13518,30 @@ function J_(r, t8) { } return e; } -function NY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8; +function NY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8; 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 = mr({ inputs: { x: n }, backend: e }); + l = lr({ inputs: { x: n }, backend: e }); else { - let m = e.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = _c(m, n.shape, n.dtype, d, c, "avg"); + let m = e.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = Sc(m, n.shape, n.dtype, d, c, "avg"); l = e.makeTensorInfo(c.outShape, n.dtype, f.values); } return l; } -var e$ = { kernelName: Zo, backendName: "cpu", kernelFunc: NY }; -function TY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var t$ = { kernelName: Qo, backendName: "cpu", kernelFunc: NY }; +function TY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.data.get(n.dataId).values, m = zf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "avg"); + let c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.data.get(n.dataId).values, m = Bf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "avg"); return e.makeTensorInfo(m.shape, "float32", m.values); } -var t$ = { kernelName: Zs, backendName: "cpu", kernelFunc: TY }; -function _Y(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var r$ = { kernelName: Zs, backendName: "cpu", kernelFunc: TY }; +function _Y(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { 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, E = 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 = e.bufferSync(n); for (let L = 0; L < c.batchSize; ++L) @@ -13568,9 +13569,9 @@ function _Y(r) { } return e.makeTensorInfo(P.shape, P.dtype, P.values); } -var r$ = { kernelName: Ai, backendName: "cpu", kernelFunc: _Y }; -function $Y(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, a = s; +var o$ = { kernelName: Ei, backendName: "cpu", kernelFunc: _Y }; +function $Y(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, 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), E = e.data.get(n.dataId).values, R = me(n.shape, "float32", E); for (let D = 0; D < c.batchSize; ++D) @@ -13593,9 +13594,9 @@ function $Y(r) { } return e.makeTensorInfo(k.shape, k.dtype, k.values); } -var o$ = { kernelName: Di, backendName: "cpu", kernelFunc: $Y }; -function EY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, scale: s, offset: a, mean: i, variance: p } = t8; +var n$ = { kernelName: $i, backendName: "cpu", kernelFunc: $Y }; +function EY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, scale: s, offset: a, mean: i, variance: p } = t8; 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 = 1e-3); @@ -13604,54 +13605,54 @@ function EY(r) { h[R] = f[S++] + (c[R] - l[k++]) * d[_++] / Math.sqrt(m[E++] + u), S >= g && (S = 0), k >= C && (k = 0), _ >= x && (_ = 0), E >= b && (E = 0); return e.makeTensorInfo(n.shape, n.dtype, h); } -var n$ = { kernelName: vn, backendName: "cpu", kernelFunc: EY }; -function RY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, crops: a } = o; +var s$ = { kernelName: In, backendName: "cpu", kernelFunc: EY }; +function RY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = Ve({ inputs: { x: n }, backend: e, attrs: { shape: p } }), f = It({ inputs: { x: d }, backend: e, attrs: { perm: u } }), h = Ve({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Fo({ inputs: { x: h }, backend: e, attrs: { begin: l, size: m } }); + 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 = Ve({ inputs: { x: n }, backend: e, attrs: { shape: p } }), f = St({ inputs: { x: d }, backend: e, attrs: { perm: u } }), h = Ve({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Ao({ inputs: { x: h }, backend: e, attrs: { begin: l, size: m } }); return e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), e.disposeIntermediateTensorInfo(h), g; } -var s$ = { kernelName: Js, backendName: "cpu", kernelFunc: RY }; -function DY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { size: a } = o, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, u = Ic(i, p, s.dtype, s.shape, a); +var a$ = { kernelName: Js, backendName: "cpu", kernelFunc: RY }; +function DY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { size: a } = o, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, u = yc(i, p, s.dtype, s.shape, a); return e.makeTensorInfo([a], s.dtype, u); } -var a$ = { kernelName: en, backendName: "cpu", kernelFunc: DY }; -function AY(r) { - let { inputs: t8, backend: e } = r, { s0: o, s1: n } = t8, s = e.data.get(o.dataId).values, a = e.data.get(n.dataId).values, i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var i$ = { kernelName: Jo, backendName: "cpu", kernelFunc: DY }; +function AY(r15) { + let { inputs: t8, backend: e } = r15, { s0: o, s1: n } = t8, s = e.data.get(o.dataId).values, a = e.data.get(n.dataId).values, i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return e.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var i$ = { kernelName: ea, backendName: "cpu", kernelFunc: AY }; -var FY = Ie(Co, (r, t8) => { +var u$ = { kernelName: ea, backendName: "cpu", kernelFunc: AY }; +var FY = Ie(bo, (r15, t8) => { let e = t8; - return r > e.clipValueMax ? e.clipValueMax : r < e.clipValueMin ? e.clipValueMin : r; + return r15 > e.clipValueMax ? e.clipValueMax : r15 < e.clipValueMin ? e.clipValueMin : r15; }); -var u$ = { kernelName: Co, backendName: "cpu", kernelFunc: FY }; -var PY = (r) => { - let { x: t8 } = r.inputs, e = r.backend, o = new Float32Array(y.sizeFromShape(t8.shape)), n = e.data.get(t8.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = e.data.get(s.dataId).values, p = e.data.get(a.dataId).values; +var p$ = { kernelName: bo, backendName: "cpu", kernelFunc: FY }; +var PY = (r15) => { + let { x: t8 } = r15.inputs, e = r15.backend, o = new Float32Array(y.sizeFromShape(t8.shape)), n = e.data.get(t8.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = e.data.get(s.dataId).values, p = e.data.get(a.dataId).values; for (let u = 0; u < i.length; u++) { let c = i[u], l = p[u]; o[u] = Math.hypot(c, l); } return e.makeOutput(o, t8.shape, "float32"); }; -var p$ = { kernelName: Pi, backendName: "cpu", kernelFunc: PY }; -function Ma(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.data.get(o.dataId).complexTensorInfos.imag, s = e.data.get(n.dataId).values; +var c$ = { kernelName: Di, backendName: "cpu", kernelFunc: PY }; +function Oa(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.data.get(o.dataId).complexTensorInfos.imag, s = e.data.get(n.dataId).values; return e.makeTensorInfo(n.shape, n.dtype, s); } -var c$ = { kernelName: Gi, backendName: "cpu", kernelFunc: Ma }; -function yu(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((h) => h.shape); +var l$ = { kernelName: Vi, backendName: "cpu", kernelFunc: Oa }; +function du(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((h) => h.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(t8.map((h) => h.shape), s); if (y.sizeFromShape(i) === 0) return e.makeTensorInfo(i, t8[0].dtype, []); let p = t8.filter((h) => y.sizeFromShape(h.shape) > 0); if (p.length === 1) - return mr({ inputs: { x: p[0] }, backend: e }); + return lr({ inputs: { x: p[0] }, backend: e }); if (p[0].dtype === "complex64") { - let h = p.map((S) => Ro({ inputs: { input: S }, backend: e })), g = p.map((S) => Ma({ inputs: { input: S }, backend: e })), x = yu({ inputs: h, backend: e, attrs: { axis: s } }), b = yu({ inputs: g, backend: e, attrs: { axis: s } }), C = Kt({ inputs: { real: x, imag: b }, backend: e }); + let h = p.map((S) => Eo({ inputs: { input: S }, backend: e })), g = p.map((S) => Oa({ inputs: { input: S }, backend: e })), x = du({ inputs: h, backend: e, attrs: { axis: s } }), b = du({ inputs: g, backend: e, attrs: { axis: s } }), C = Ht({ inputs: { real: x, imag: b }, backend: e }); return h.forEach((S) => e.disposeIntermediateTensorInfo(S)), g.forEach((S) => e.disposeIntermediateTensorInfo(S)), e.disposeIntermediateTensorInfo(x), e.disposeIntermediateTensorInfo(b), C; } let u = p.map((h) => { @@ -13659,12 +13660,12 @@ function yu(r) { return Ve({ inputs: { x: h }, backend: e, attrs: { shape: x } }); }), c = u.map((h) => ({ vals: e.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 = mp(c, i, t8[0].dtype, l), d = w.computeOutShape(p.map((h) => h.shape), s), f = e.makeTensorInfo(d, t8[0].dtype, m); + let l = u[0].shape[0] === 1, m = np(c, i, t8[0].dtype, l), d = w.computeOutShape(p.map((h) => h.shape), s), f = e.makeTensorInfo(d, t8[0].dtype, m); return u.forEach((h) => e.disposeIntermediateTensorInfo(h)), f; } -var l$ = { kernelName: ta, backendName: "cpu", kernelFunc: yu }; -function yI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o; +var m$ = { kernelName: ta, backendName: "cpu", kernelFunc: du }; +function bI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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, false, l), d = m.filterHeight, f = m.filterWidth, h = m.dilationHeight, g = m.dilationWidth, x = m.padInfo.left, b = m.padInfo.top, C = m.dataFormat === "channelsLast", S = new tt(m.outShape, n.dtype), k = y.computeStrides(n.shape), _ = y.computeStrides(s.shape), E = 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 = e.data.get(n.dataId).values, U = e.data.get(s.dataId).values, j = S.values; for (let q = 0; q < m.batchSize; ++q) { @@ -13682,12 +13683,12 @@ function yI(r) { let st = Fe + Pe * g; if (st < 0 || st >= m.inWidth) continue; - let lt = le + Pe * _[1], Ge = be + st * D, mt = lt; + let ct = le + Pe * _[1], Ge = be + st * D, lt = ct; for (let it = 0; it < m.inChannels; ++it) { - let gt = z[Ge + it * P]; - for (let xt = 0; xt < m.outChannels; ++xt) - j[ve + xt * B] += gt * U[mt + xt]; - mt += m.outChannels; + let ht = z[Ge + it * P]; + for (let gt = 0; gt < m.outChannels; ++gt) + j[ve + gt * B] += ht * U[lt + gt]; + lt += m.outChannels; } } } @@ -13696,9 +13697,9 @@ function yI(r) { } return e.makeTensorInfo(S.shape, S.dtype, j); } -var m$ = { kernelName: rn, backendName: "cpu", kernelFunc: yI }; -function OY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o; +var d$ = { kernelName: tn, backendName: "cpu", kernelFunc: bI }; +function OY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o; Q([n, s], "conv2dBackpropFilter"); let l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), { strideHeight: d, strideWidth: f, filterHeight: h, filterWidth: g } = m, x = m.dataFormat === "channelsLast", b = new tt(m.filterShape, "float32"), C = m.padInfo.left, S = m.padInfo.top, k = e.data.get(n.dataId).values, _ = e.data.get(s.dataId).values, E = new tt(n.shape, n.dtype, k), R = new tt(s.shape, s.dtype, _); for (let D = 0; D < h; ++D) { @@ -13722,9 +13723,9 @@ function OY(r) { } return e.makeTensorInfo(b.shape, b.dtype, b.values); } -var d$ = { kernelName: Oi, backendName: "cpu", kernelFunc: OY }; -function MY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o; +var f$ = { kernelName: Ai, backendName: "cpu", kernelFunc: OY }; +function MY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o; Q([n, s], "conv2dBackpropInput"); 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 = e.data.get(n.dataId).values, b = e.data.get(s.dataId).values, [C, S, k] = l, { batchSize: _, filterHeight: E, filterWidth: R, inChannels: D, inHeight: P, inWidth: O, outChannels: M, outHeight: L, outWidth: B, strideHeight: z, strideWidth: U } = f; d = f.dataFormat; @@ -13732,28 +13733,28 @@ function MY(r) { 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)), lt = Math.min(L, (E + Pe) / z); + let Pe = Fe - j, st = Math.max(0, Math.ceil(Pe / z)), ct = Math.min(L, (E + Pe) / z); for (let Ge = 0; Ge < O; ++Ge) { - let mt = Ge - q, it = Math.max(0, Math.ceil(mt / U)), gt = Math.min(B, (R + mt) / U), xt = 0; - for (let Lt = st; Lt < lt; ++Lt) { - let to = Lt * z - Pe; - for (let nr = it; nr < gt; ++nr) { - let _t = nr * U - mt, sr = oe * _e + ie * Lt + le * nr, ar = C * (E - 1 - to) + S * (R - 1 - _t) + k * ve; - for (let ro = 0; ro < M; ++ro) { - let oo = x[sr + be * ro], hr = b[ar + ro]; - xt += oo * hr; + let lt = Ge - 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 eo = Mt * z - Pe; + for (let rr = it; rr < ht; ++rr) { + let Tt = rr * U - lt, or = oe * _e + ie * Mt + le * rr, nr = C * (E - 1 - eo) + S * (R - 1 - Tt) + k * ve; + for (let to = 0; to < M; ++to) { + let ro = x[or + be * to], fr = b[nr + to]; + gt += ro * fr; } } } - let Lr = J * _e + re * Fe + ne * Ge + ee * ve; - g[Lr] = xt; + let Mr = J * _e + re * Fe + ne * Ge + ee * ve; + g[Mr] = gt; } } return e.makeTensorInfo(h.shape, h.dtype, h.values); } -var f$ = { kernelName: on, backendName: "cpu", kernelFunc: MY }; -function LY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o; +var h$ = { kernelName: rn, backendName: "cpu", kernelFunc: MY }; +function LY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o; Q([n, s], "conv3d"); let u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), { filterDepth: c, filterHeight: l, filterWidth: m, dilationDepth: d, dilationHeight: f, dilationWidth: h, padInfo: g } = u, x = g.front, b = g.left, C = g.top, S = new tt(u.outShape, n.dtype), k = e.data.get(n.dataId).values, _ = e.data.get(s.dataId).values, E = S.values, R = y.computeStrides(n.shape), D = y.computeStrides(s.shape); for (let P = 0; P < u.batchSize; ++P) { @@ -13778,11 +13779,11 @@ function LY(r) { let Pe = ve + Fe * h; if (Pe < 0 || Pe >= u.inWidth) continue; - let st = ie + Fe * D[2], lt = le + Pe * u.inChannels, Ge = st; - for (let mt = 0; mt < u.inChannels; ++mt) { - let it = k[lt + mt]; - for (let gt = 0; gt < u.outChannels; ++gt) - E[_e + gt] += it * _[Ge + gt]; + let st = ie + Fe * D[2], ct = le + Pe * u.inChannels, Ge = st; + for (let lt = 0; lt < u.inChannels; ++lt) { + let it = k[ct + lt]; + for (let ht = 0; ht < u.outChannels; ++ht) + E[_e + ht] += it * _[Ge + ht]; Ge += u.outChannels; } } @@ -13794,9 +13795,9 @@ function LY(r) { } return e.makeTensorInfo(S.shape, S.dtype, S.values); } -var h$ = { kernelName: nn, backendName: "cpu", kernelFunc: LY }; -function BY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o; +var g$ = { kernelName: on, backendName: "cpu", kernelFunc: LY }; +function BY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o; Q([n, s], "conv3dBackpropFilterV2"); let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = w.computeConv3DInfo(n.shape, p, a, 1, i), m = l.strideDepth, d = l.strideHeight, f = l.strideWidth, h = l.filterDepth, g = l.filterHeight, x = l.filterWidth, b = new tt(l.filterShape, "float32"), C = b.values, [S, k, _, E] = b.strides, R = e.data.get(s.dataId).values, [D, P, O, M] = c, L = e.data.get(n.dataId).values, [B, z, U, j] = u, q = l.padInfo.front, Y = l.padInfo.left, J = l.padInfo.top; for (let re = 0; re < h; ++re) { @@ -13805,24 +13806,24 @@ function BY(r) { let le = Math.max(0, Math.ceil((J - ie) / d)), be = Math.min(l.outHeight, (l.inHeight + J - ie) / d), _e = ie * k + oe; for (let ve = 0; ve < x; ++ve) { let Fe = Math.max(0, Math.ceil((Y - ve) / f)), Pe = Math.min(l.outWidth, (l.inWidth + Y - ve) / f), st = ve * _ + _e; - for (let lt = 0; lt < l.inChannels; ++lt) { - let Ge = lt * E + st; - for (let mt = 0; mt < l.outChannels; ++mt) { + for (let ct = 0; ct < l.inChannels; ++ct) { + let Ge = ct * E + st; + for (let lt = 0; lt < l.outChannels; ++lt) { let it = 0; - for (let gt = 0; gt < l.batchSize; ++gt) { - let xt = gt * B, Lr = gt * D; - for (let Lt = ne; Lt < ee; ++Lt) { - let nr = (re + Lt * m - q) * z + xt, _t = Lt * P + Lr; - for (let sr = le; sr < be; ++sr) { - let ro = (ie + sr * d - J) * U + nr, oo = sr * O + _t; - for (let hr = Fe; hr < Pe; ++hr) { - let Bo = (ve + hr * f - Y) * j + ro, Ks = hr * M + oo; - it += L[Bo + lt] * R[Ks + mt]; + for (let ht = 0; ht < l.batchSize; ++ht) { + let gt = ht * B, Mr = ht * D; + for (let Mt = ne; Mt < ee; ++Mt) { + let rr = (re + Mt * m - q) * z + gt, Tt = Mt * P + Mr; + for (let or = le; or < be; ++or) { + let to = (ie + or * d - J) * U + rr, ro = or * O + Tt; + for (let fr = Fe; fr < Pe; ++fr) { + let Lo = (ve + fr * f - Y) * j + to, Ks = fr * M + ro; + it += L[Lo + ct] * R[Ks + lt]; } } } } - C[Ge + mt] = it; + C[Ge + lt] = it; } } } @@ -13830,45 +13831,45 @@ function BY(r) { } return e.makeTensorInfo(b.shape, b.dtype, b.values); } -var g$ = { kernelName: Xa, backendName: "cpu", kernelFunc: BY }; -function zY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { pad: a, strides: i, inputShape: p } = o; +var x$ = { kernelName: ja, backendName: "cpu", kernelFunc: BY }; +function zY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { 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 = e.data.get(n.dataId).values, [C, S, k, _] = u, E = e.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 lt = st - be, Ge = Math.max(0, Math.ceil(lt / oe)), mt = Math.min(re, (L + lt) / oe); + let ct = st - be, Ge = Math.max(0, Math.ceil(ct / oe)), lt = Math.min(re, (L + ct) / oe); for (let it = 0; it < q; ++it) { - let gt = it - _e, xt = Math.max(0, Math.ceil(gt / ie)), Lr = Math.min(ne, (B + gt) / ie); - for (let Lt = 0; Lt < Y; ++Lt) { - let to = Lt - ve, nr = Math.max(0, Math.ceil(to / le)), _t = Math.min(ee, (z + to) / le), sr = 0; - for (let ar = Ge; ar < mt; ++ar) { - let ro = ar * oe - lt; - for (let oo = xt; oo < Lr; ++oo) { - let hr = oo * ie - gt; - for (let Wa = nr; Wa < _t; ++Wa) { - let Bo = Wa * le - to, Ks = C * Fe + S * ar + k * oo + _ * Wa, Yt = R * (L - 1 - ro) + D * (B - 1 - hr) + P * (z - 1 - Bo) + O * Pe; - for (let Ua = 0; Ua < J; ++Ua) { - let sl = b[Ks + Ua], al = E[Yt + Ua]; - sr += sl * al; + let ht = it - _e, gt = Math.max(0, Math.ceil(ht / ie)), Mr = Math.min(ne, (B + ht) / ie); + for (let Mt = 0; Mt < Y; ++Mt) { + let eo = Mt - ve, rr = Math.max(0, Math.ceil(eo / le)), Tt = Math.min(ee, (z + eo) / le), or = 0; + for (let nr = Ge; nr < lt; ++nr) { + let to = nr * oe - ct; + for (let ro = gt; ro < Mr; ++ro) { + let fr = ro * ie - ht; + for (let Va = rr; Va < Tt; ++Va) { + let Lo = Va * le - eo, Ks = C * Fe + S * nr + k * ro + _ * Va, Xt = R * (L - 1 - to) + D * (B - 1 - fr) + P * (z - 1 - Lo) + O * Pe; + for (let Wa = 0; Wa < J; ++Wa) { + let tl = b[Ks + Wa], rl = E[Xt + Wa]; + or += tl * rl; } } } } - d[f * Fe + h * st + g * it + x * Lt + Pe] = sr; + d[f * Fe + h * st + g * it + x * Mt + Pe] = or; } } } return e.makeTensorInfo(m.shape, m.dtype, m.values); } -var x$ = { kernelName: sn, backendName: "cpu", kernelFunc: zY }; -var VY = Ie(an, (r) => Math.cos(r)); -var y$ = { kernelName: an, backendName: "cpu", kernelFunc: VY }; -var WY = Ie(un, (r) => Math.cosh(r)); -var b$ = { kernelName: un, backendName: "cpu", kernelFunc: WY }; -function UY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n, boxes: s, boxInd: a } = t8, { 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 = e.data.get(s.dataId).values, C = e.data.get(a.dataId).values, S = e.data.get(n.dataId).values, k = y.computeStrides(n.shape), _ = y.computeStrides(x.shape); +var y$ = { kernelName: nn, backendName: "cpu", kernelFunc: zY }; +var VY = Ie(sn, (r15) => Math.cos(r15)); +var b$ = { kernelName: sn, backendName: "cpu", kernelFunc: VY }; +var WY = Ie(an, (r15) => Math.cosh(r15)); +var C$ = { kernelName: an, backendName: "cpu", kernelFunc: WY }; +function UY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = t8, { 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 = e.data.get(s.dataId).values, C = e.data.get(a.dataId).values, S = e.data.get(n.dataId).values, k = y.computeStrides(n.shape), _ = y.computeStrides(x.shape); for (let E = 0; E < f; E++) { let R = E * 4, D = b[R], P = b[R + 1], O = b[R + 2], M = b[R + 3], L = C[E]; if (L >= c) @@ -13903,8 +13904,8 @@ function UY(r) { be = le + ee * k[2] + Y * k[1] + L * k[0]; let Fe = S[be]; be = le + oe * k[2] + Y * k[1] + L * k[0]; - let Pe = S[be], st = _e + (ve - _e) * ie, lt = Fe + (Pe - Fe) * ie; - be = le + re * _[2] + U * _[1] + E * _[0], x.values[be] = st + (lt - st) * J; + let Pe = S[be], st = _e + (ve - _e) * ie, ct = Fe + (Pe - Fe) * ie; + be = le + re * _[2] + U * _[1] + E * _[0], x.values[be] = st + (ct - st) * J; } } } else @@ -13927,12 +13928,12 @@ function UY(r) { } return e.makeTensorInfo(x.shape, x.dtype, x.values); } -var C$ = { kernelName: ln, backendName: "cpu", kernelFunc: UY }; -function GY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; +var w$ = { kernelName: cn, backendName: "cpu", kernelFunc: UY }; +function GY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; Q(n, "cumprod"); let p = w.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = It({ inputs: { x: n }, backend: e, attrs: { perm: p } })); + p != null && (u = St({ inputs: { x: n }, backend: e, 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}`); @@ -13949,17 +13950,17 @@ function GY(r) { } let g = e.makeTensorInfo(u.shape, l, m); if (p != null) { - let x = w.getUndoAxesPermutation(p), b = It({ inputs: { x: g }, backend: e, attrs: { perm: x } }); + let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: e, attrs: { perm: x } }); return e.disposeIntermediateTensorInfo(g), e.disposeIntermediateTensorInfo(u), b; } return g; } -var w$ = { kernelName: pn, backendName: "cpu", kernelFunc: GY }; -function HY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; +var S$ = { kernelName: un, backendName: "cpu", kernelFunc: GY }; +function HY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; Q(n, "cumsum"); let p = w.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = It({ inputs: { x: n }, backend: e, attrs: { perm: p } })); + p != null && (u = St({ inputs: { x: n }, backend: e, 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}`); @@ -13976,26 +13977,26 @@ function HY(r) { } let g = e.makeTensorInfo(u.shape, l, m); if (p != null) { - let x = w.getUndoAxesPermutation(p), b = It({ inputs: { x: g }, backend: e, attrs: { perm: x } }); + let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: e, attrs: { perm: x } }); return e.disposeIntermediateTensorInfo(g), e.disposeIntermediateTensorInfo(u), b; } return g; } -var S$ = { kernelName: cn, backendName: "cpu", kernelFunc: HY }; -function KY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { size: a, binaryOutput: i } = o; +var I$ = { kernelName: pn, backendName: "cpu", kernelFunc: HY }; +function KY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = e.data.get(n.dataId).values, u = e.data.get(s.dataId).values, c = Ic(p, u, s.dtype, s.shape, a); + let p = e.data.get(n.dataId).values, u = e.data.get(s.dataId).values, c = yc(p, u, s.dtype, s.shape, a); return e.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = e.bufferSync(n), u = e.bufferSync(s), c = Nf(p, u, a, i); + let p = e.bufferSync(n), u = e.bufferSync(s), c = kf(p, u, a, i); return e.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 I$ = { kernelName: ra, backendName: "cpu", kernelFunc: KY }; -function qY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockSize: s, dataFormat: a } = o; +var v$ = { kernelName: ra, backendName: "cpu", kernelFunc: KY }; +function qY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.data.get(n.dataId).values, h = new Float32Array(i * l * m * d), g = 0; for (let x = 0; x < i; ++x) @@ -14011,9 +14012,9 @@ function qY(r) { } return e.makeTensorInfo([i, l, m, d], n.dtype, h); } -var v$ = { kernelName: mn, backendName: "cpu", kernelFunc: qY }; -function bI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; +var k$ = { kernelName: ln, backendName: "cpu", kernelFunc: qY }; +function CI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; Q([n, s], "depthwiseConv2DNative"); let c = y.computeStrides(n.shape), l = y.computeStrides(s.shape), m = p; m == null && (m = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(a, m), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`); @@ -14047,9 +14048,9 @@ function bI(r) { } return e.makeTensorInfo(_.shape, _.dtype, _.values); } -var k$ = { kernelName: dn, backendName: "cpu", kernelFunc: bI }; -function jY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o; +var N$ = { kernelName: mn, backendName: "cpu", kernelFunc: CI }; +function jY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { 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 = e.data.get(n.dataId).values, k = new tt(n.shape, n.dtype, S), _ = e.data.get(s.dataId).values, E = new tt(s.shape, s.dtype, _); for (let R = 0; R < f; ++R) { @@ -14072,9 +14073,9 @@ function jY(r) { } return e.makeTensorInfo(g.shape, g.dtype, g.values); } -var N$ = { kernelName: Mi, backendName: "cpu", kernelFunc: jY }; -function XY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o; +var T$ = { kernelName: Fi, backendName: "cpu", kernelFunc: jY }; +function XY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { 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 = e.data.get(n.dataId).values, [S, k, _] = l, E = e.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) @@ -14082,33 +14083,33 @@ function XY(r) { 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, lt = Math.max(0, Math.ceil(st / re)), Ge = Math.min(Y, (L + st) / re), mt = 0; + let st = Pe - ee, ct = Math.max(0, Math.ceil(st / re)), Ge = Math.min(Y, (L + st) / re), lt = 0; for (let it = ve; it < Fe; ++it) { - let gt = it * J - _e; - for (let xt = lt; xt < Ge; ++xt) { - let Lr = xt * re - st, Lt = S * ie + k * it + _ * xt, to = R * (M - 1 - gt) + D * (L - 1 - Lr) + P * le; - for (let nr = 0; nr < oe; ++nr) { - let _t = le * oe + nr, sr = C[Lt + _t], ar = E[to + nr]; - mt += sr * ar; + let ht = it * J - _e; + for (let gt = ct; gt < Ge; ++gt) { + let Mr = gt * re - st, Mt = S * ie + k * it + _ * gt, eo = R * (M - 1 - ht) + D * (L - 1 - Mr) + P * le; + for (let rr = 0; rr < oe; ++rr) { + let Tt = le * oe + rr, or = C[Mt + Tt], nr = E[eo + rr]; + lt += or * nr; } } } - h[g * ie + x * be + b * Pe + le] = mt; + h[g * ie + x * be + b * Pe + le] = lt; } } return e.makeTensorInfo(f.shape, f.dtype, f.values); } -var T$ = { kernelName: Li, backendName: "cpu", kernelFunc: XY }; -function YY(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = y.sizeFromShape(o.shape), s = e.data.get(o.dataId).values, a = me([n, n], o.dtype), i = a.values; +var _$ = { kernelName: Pi, backendName: "cpu", kernelFunc: XY }; +function YY(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = y.sizeFromShape(o.shape), s = e.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]; let p = [...o.shape, ...o.shape]; return e.makeTensorInfo(p, a.dtype, a.values); } -var _$ = { kernelName: oa, backendName: "cpu", kernelFunc: YY }; -var $$ = { kernelName: fn, backendName: "cpu", kernelFunc: ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o, filter: n } = r, { strides: s, pad: a, dilations: i } = e, p = t8, 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: E, 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); +var $$ = { kernelName: oa, backendName: "cpu", kernelFunc: YY }; +var E$ = { kernelName: dn, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o, filter: n } = r15, { strides: s, pad: a, dilations: i } = e, p = t8, 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: E, 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; @@ -14134,9 +14135,9 @@ var $$ = { kernelName: fn, backendName: "cpu", kernelFunc: ({ inputs: r, backend } return { dataId: p.write(y.toTypedArray(L, o.dtype), P, o.dtype), shape: P, dtype: o.dtype }; } }; -var E$ = { kernelName: zi, backendName: "cpu", kernelFunc: ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = e, u = t8, 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: E, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - y.assert(s.rank === D.length, () => `Error in ${zi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); +var R$ = { kernelName: Mi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = e, u = t8, 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: E, 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(n.shape, n.dtype); for (let L = 0; L < m; ++L) for (let B = 0; B < g; ++B) { @@ -14162,9 +14163,9 @@ var E$ = { kernelName: zi, backendName: "cpu", kernelFunc: ({ inputs: r, backend } return { dataId: u.write(y.toTypedArray(O, o.dtype), n.shape, n.dtype), shape: n.shape, dtype: n.dtype }; } }; -var R$ = { kernelName: Bi, backendName: "cpu", kernelFunc: ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o, filter: n, dy: s } = r, { strides: a, pad: i, dilations: p } = e, u = t8, 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: E, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - y.assert(s.rank === D.length, () => `Error in ${Bi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); +var D$ = { kernelName: Oi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = e, u = t8, 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: E, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); + y.assert(s.rank === D.length, () => `Error in ${Oi}, 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) { @@ -14190,8 +14191,8 @@ var R$ = { kernelName: Bi, backendName: "cpu", kernelFunc: ({ inputs: r, backend } return { dataId: u.write(y.toTypedArray(O, o.dtype), o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function QY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n } = t8, { 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"; +function QY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n } = t8, { 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) || {}); @@ -14216,15 +14217,15 @@ function QY(r) { let b = new ImageData(x, d, m); return l.putImageData(b, 0, 0), n; } -var D$ = { kernelName: Pu, backendName: "cpu", kernelFunc: QY }; -function gi(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; +var A$ = { kernelName: _u, backendName: "cpu", kernelFunc: QY }; +function di(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; Q(n, "sum"); let i; - n.dtype === "bool" ? i = Do({ inputs: { x: n }, backend: e, attrs: { dtype: "int32" } }) : i = mr({ inputs: { x: n }, backend: e }); + n.dtype === "bool" ? i = Ro({ inputs: { x: n }, backend: e, attrs: { dtype: "int32" } }) : i = lr({ inputs: { x: n }, backend: e }); let p = i.shape.length, u = y.parseAxisParam(s, i.shape), c = w.getAxesPermutation(u, p), l = u, m = i; - c != null && (m = It({ inputs: { x: i }, backend: e, 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 = wc(e, d, h), x = y.sizeFromShape(f), b = e.data.get(g.dataId).values, C = e.data.get(m.dataId).values; + c != null && (m = St({ inputs: { x: i }, backend: e, 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 = gc(e, d, h), x = y.sizeFromShape(f), b = e.data.get(g.dataId).values, C = e.data.get(m.dataId).values; for (let S = 0; S < b.length; ++S) { let k = S * x, _ = 0; for (let E = 0; E < x; ++E) @@ -14237,29 +14238,29 @@ function gi(r) { } return e.disposeIntermediateTensorInfo(i), c != null && e.disposeIntermediateTensorInfo(m), g; } -var A$ = { kernelName: Is, backendName: "cpu", kernelFunc: gi }; -function ZY(r) { - let { inputs: t8, backend: e, attrs: o } = r, { equation: n } = o, s = t8, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); +var F$ = { kernelName: Ss, backendName: "cpu", kernelFunc: di }; +function ZY(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { equation: n } = o, s = t8, { 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 < l; ++h) { for (let g of c[h]) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; - w.isIdentityPermutation(x) ? C = s[g] : (C = It({ inputs: { x: s[g] }, backend: e, attrs: { perm: x } }), f.push(C)); + w.isIdentityPermutation(x) ? C = s[g] : (C = St({ inputs: { x: s[g] }, backend: e, 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); - y.arraysEqual(C.shape, S) || (C = Ve({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = dp({ inputs: { a: C, b: m }, backend: e }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = Ve({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = sp({ inputs: { a: C, b: m }, backend: e }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = gi({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = di({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && e.disposeIntermediateTensorInfo(h); return m; } -var F$ = { kernelName: Vi, backendName: "cpu", kernelFunc: ZY }; -function JY(r) { - let { inputs: t8, backend: e } = r, { dy: o, y: n } = t8; +var P$ = { kernelName: Li, backendName: "cpu", kernelFunc: ZY }; +function JY(r15) { + let { inputs: t8, backend: e } = r15, { dy: o, y: n } = t8; Q([o, n], "eluGrad"); let s = new Float32Array(y.sizeFromShape(n.shape)), a = e.data.get(n.dataId).values, i = e.data.get(o.dataId).values; for (let p = 0; p < a.length; ++p) { @@ -14268,45 +14269,45 @@ function JY(r) { } return e.makeTensorInfo(n.shape, "float32", s); } -var P$ = { kernelName: Ya, backendName: "cpu", kernelFunc: JY }; +var O$ = { kernelName: Xa, backendName: "cpu", kernelFunc: JY }; var eQ = w.ERF_P; var tQ = w.ERF_A1; var rQ = w.ERF_A2; var oQ = w.ERF_A3; var nQ = w.ERF_A4; var sQ = w.ERF_A5; -var aQ = Ie(xn, (r) => { - let t8 = Math.sign(r), e = Math.abs(r), o = 1 / (1 + eQ * e); +var aQ = Ie(gn, (r15) => { + let t8 = Math.sign(r15), e = Math.abs(r15), o = 1 / (1 + eQ * e); return t8 * (1 - ((((sQ * o + nQ) * o + oQ) * o + rQ) * o + tQ) * o * Math.exp(-e * e)); }); -var O$ = { kernelName: xn, backendName: "cpu", kernelFunc: aQ }; -function $c(r) { - let { inputs: t8, backend: e, attrs: o } = r, { input: n } = t8, { dim: s } = o, a = n.shape.length, i = n.shape.slice(), p = s; +var M$ = { kernelName: gn, backendName: "cpu", kernelFunc: aQ }; +function Ic(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { input: n } = t8, { 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), Ve({ inputs: { x: n }, backend: e, attrs: { shape: i } }); } -var M$ = { kernelName: na, backendName: "cpu", kernelFunc: $c }; -var iQ = ze((r, t8) => r / t8); -var Ul = Ye(hn, iQ); -var Gl = { kernelName: hn, backendName: "cpu", kernelFunc: Ul }; -function Vf(r, t8, e) { - let o = r.shape, n = o[0], s = o[1], a = e.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); +var L$ = { kernelName: na, backendName: "cpu", kernelFunc: Ic }; +var iQ = ze((r15, t8) => r15 / t8); +var Vl = Ye(fn, iQ); +var Wl = { kernelName: fn, backendName: "cpu", kernelFunc: Vl }; +function zf(r15, t8, e) { + let o = r15.shape, n = o[0], s = o[1], a = e.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 = Fo({ inputs: { x: i }, backend: e, attrs: { begin: [g, 0], size: [1, s] } }), b = Fo({ inputs: { x: p }, backend: e, attrs: { begin: [g, 0], size: [1, s] } }), C = Kt({ inputs: { real: x, imag: b }, backend: e }), { real: S, imag: k } = uQ(C, t8, e), _ = w.mergeRealAndImagArrays(S, k); + let x = Ao({ inputs: { x: i }, backend: e, attrs: { begin: [g, 0], size: [1, s] } }), b = Ao({ inputs: { x: p }, backend: e, attrs: { begin: [g, 0], size: [1, s] } }), C = Ht({ inputs: { real: x, imag: b }, backend: e }), { real: S, imag: k } = uQ(C, t8, e), _ = w.mergeRealAndImagArrays(S, k); for (let E = 0; E < s; E++) { let R = w.getComplexWithIndex(_, E); l[g * s + E] = R.real, m[g * s + E] = R.imag; } e.disposeIntermediateTensorInfo(x), e.disposeIntermediateTensorInfo(b), e.disposeIntermediateTensorInfo(C); } - let d = e.makeTensorInfo(u, "float32", l), f = e.makeTensorInfo(u, "float32", m), h = Kt({ inputs: { real: d, imag: f }, backend: e }); + let d = e.makeTensorInfo(u, "float32", l), f = e.makeTensorInfo(u, "float32", m), h = Ht({ inputs: { real: d, imag: f }, backend: e }); return e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), h; } -function uQ(r, t8, e) { - let o = y.sizeFromShape(r.shape), n = e.data.get(r.dataId), s = e.data.get(n.complexTensorInfos.real.dataId).values, a = e.data.get(n.complexTensorInfos.imag.dataId).values; +function uQ(r15, t8, e) { + let o = y.sizeFromShape(r15.shape), n = e.data.get(r15.dataId), s = e.data.get(n.complexTensorInfos.real.dataId).values, a = e.data.get(n.complexTensorInfos.imag.dataId).values; if (pQ(o)) { - let i = CI(s, a, o, t8, e), p = [r.shape[0], r.shape[1]]; + let i = wI(s, a, o, t8, e), p = [r15.shape[0], r15.shape[1]]; if (t8) { - let u = e.makeTensorInfo(p, "float32", i.real), c = e.makeTensorInfo(p, "float32", i.imag), l = e.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = mr({ inputs: { x: l }, backend: e }), d = Gl.kernelFunc({ inputs: { a: u, b: l }, backend: e }), f = Gl.kernelFunc({ inputs: { a: c, b: m }, backend: e }), h = e.data.get(d.dataId).values, g = e.data.get(f.dataId).values; + let u = e.makeTensorInfo(p, "float32", i.real), c = e.makeTensorInfo(p, "float32", i.imag), l = e.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = lr({ inputs: { x: l }, backend: e }), d = Wl.kernelFunc({ inputs: { a: u, b: l }, backend: e }), f = Wl.kernelFunc({ inputs: { a: c, b: m }, backend: e }), h = e.data.get(d.dataId).values, g = e.data.get(f.dataId).values; return e.disposeIntermediateTensorInfo(u), e.disposeIntermediateTensorInfo(c), e.disposeIntermediateTensorInfo(l), e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), { real: h, imag: g }; } return i; @@ -14315,42 +14316,42 @@ function uQ(r, t8, e) { return w.splitRealAndImagArrays(p); } } -function pQ(r) { - return (r & r - 1) === 0; +function pQ(r15) { + return (r15 & r15 - 1) === 0; } -function CI(r, t8, e, o, n) { +function wI(r15, t8, e, o, n) { if (e === 1) - return { real: r, imag: t8 }; - let s = w.mergeRealAndImagArrays(r, t8), a = e / 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 = Kt({ 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 = Kt({ inputs: { real: b, imag: C }, backend: n }), k = CI(p, u, a, o, n), _ = k.real, E = k.imag, R = [_.length], D = n.makeTensorInfo(R, "float32", _), P = n.makeTensorInfo(R, "float32", E), O = Kt({ inputs: { real: D, imag: P }, backend: n }), M = CI(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 = Kt({ inputs: { real: U, imag: j }, backend: n }), Y = w.exponents(e, o), J = [Y.real.length], re = n.makeTensorInfo(J, "float32", Y.real), ne = n.makeTensorInfo(J, "float32", Y.imag), ee = Kt({ inputs: { real: re, imag: ne }, backend: n }), oe = dp({ inputs: { a: ee, b: q }, backend: n }), ie = Oa({ inputs: { a: O, b: oe }, backend: n }), le = Vl({ inputs: { a: O, b: oe }, backend: n }), be = Ro({ inputs: { input: ie }, backend: n }), _e = Ro({ inputs: { input: le }, backend: n }), ve = Ma({ inputs: { input: ie }, backend: n }), Fe = Ma({ inputs: { input: le }, backend: n }), Pe = yu({ inputs: [be, _e], backend: n, attrs: { axis: 0 } }), st = yu({ inputs: [ve, Fe], backend: n, attrs: { axis: 0 } }), lt = n.data.get(Pe.dataId).values, Ge = 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: lt, imag: Ge }; + return { real: r15, imag: t8 }; + let s = w.mergeRealAndImagArrays(r15, t8), a = e / 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 = wI(p, u, a, o, n), _ = k.real, E = k.imag, R = [_.length], D = n.makeTensorInfo(R, "float32", _), P = n.makeTensorInfo(R, "float32", E), O = Ht({ inputs: { real: D, imag: P }, backend: n }), M = wI(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(e, 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 = sp({ inputs: { a: ee, b: q }, backend: n }), ie = Pa({ inputs: { a: O, b: oe }, backend: n }), le = Bl({ inputs: { a: O, b: oe }, backend: n }), be = Eo({ inputs: { input: ie }, backend: n }), _e = Eo({ inputs: { input: le }, backend: n }), ve = Oa({ inputs: { input: ie }, backend: n }), Fe = Oa({ inputs: { input: le }, backend: n }), Pe = du({ inputs: [be, _e], backend: n, attrs: { axis: 0 } }), st = du({ inputs: [ve, Fe], backend: n, attrs: { axis: 0 } }), ct = n.data.get(Pe.dataId).values, Ge = 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: Ge }; } -function cQ(r, t8, e) { +function cQ(r15, t8, e) { let o = new Float32Array(t8 * 2); for (let n = 0; n < t8; n++) { let s = 0, a = 0; for (let i = 0; i < t8; i++) { - let p = w.exponent(n * i, t8, e), u = w.getComplexWithIndex(r, i); + let p = w.exponent(n * i, t8, e), u = w.getComplexWithIndex(r15, i); s += u.real * p.real - u.imag * p.imag, a += u.real * p.imag + u.imag * p.real; } e && (s /= t8, a /= t8), w.assignToTypedArray(o, s, a, n); } return o; } -function lQ(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Ve({ inputs: { x: o }, backend: e, attrs: { shape: [a, s] } }), p = Vf(i, false, e), u = Ve({ inputs: { x: p }, backend: e, attrs: { shape: o.shape } }); +function lQ(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Ve({ inputs: { x: o }, backend: e, attrs: { shape: [a, s] } }), p = zf(i, false, e), u = Ve({ inputs: { x: p }, backend: e, attrs: { shape: o.shape } }); return e.disposeIntermediateTensorInfo(i), e.disposeIntermediateTensorInfo(p), u; } -var L$ = { kernelName: Wi, backendName: "cpu", kernelFunc: lQ }; -function Hl(r) { - let { backend: t8, attrs: e } = r, { shape: o, value: n, dtype: s } = e, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); +var B$ = { kernelName: Bi, backendName: "cpu", kernelFunc: lQ }; +function Ul(r15) { + let { backend: t8, attrs: e } = r15, { shape: o, value: n, dtype: s } = e, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); return mQ(i, n, a), t8.makeTensorInfo(o, a, i); } -var B$ = { kernelName: sa, backendName: "cpu", kernelFunc: Hl }; -function mQ(r, t8, e) { - r.fill(t8); +var z$ = { kernelName: sa, backendName: "cpu", kernelFunc: Ul }; +function mQ(r15, t8, e) { + r15.fill(t8); } -var z$ = { kernelName: wn, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { image: o } = r, n = e, s = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, c = n.data.get(o.dataId).values; +var V$ = { kernelName: Cn, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { image: o } = r15, n = e, s = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, c = n.data.get(o.dataId).values; for (let m = 0; m < a; m++) { let d = m * p * i * u; for (let f = 0; f < i; f++) { @@ -14370,52 +14371,52 @@ var z$ = { kernelName: wn, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: } return { dataId: n.write(s, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function dQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = yI({ inputs: { x: n, filter: s }, backend: e, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); +function dQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = bI({ inputs: { x: n, filter: s }, backend: e, 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 = Ve({ inputs: { x: a }, backend: e, attrs: { shape: [a.shape[0], 1, 1] } }); - h = Oa({ inputs: { a: h, b: x }, backend: e }), e.disposeIntermediateTensorInfo(x); + h = Pa({ inputs: { a: h, b: x }, backend: e }), e.disposeIntermediateTensorInfo(x); } else - h = Oa({ inputs: { a: h, b: a }, backend: e }); + h = Pa({ inputs: { a: h, b: a }, backend: e }); e.disposeIntermediateTensorInfo(g); } if (d) { let g = h; if (c === "NCHW" && d === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { let x = Ve({ inputs: { x: i }, backend: e, attrs: { shape: [i.shape[0], 1, 1] } }); - h = Cp(e, h, d, x, f), e.disposeIntermediateTensorInfo(x); + h = mp(e, h, d, x, f), e.disposeIntermediateTensorInfo(x); } else - h = Cp(e, h, d, i, f); + h = mp(e, h, d, i, f); e.disposeIntermediateTensorInfo(g); } return h; } -var V$ = { kernelName: vo, backendName: "cpu", kernelFunc: dQ }; -function fQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = bI({ inputs: { x: n, filter: s }, backend: e, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); +var W$ = { kernelName: Io, backendName: "cpu", kernelFunc: dQ }; +function fQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = CI({ inputs: { x: n, filter: s }, backend: e, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; - h = Oa({ inputs: { a: h, b: a }, backend: e }), e.disposeIntermediateTensorInfo(g); + h = Pa({ inputs: { a: h, b: a }, backend: e }), e.disposeIntermediateTensorInfo(g); } if (d) { let g = h; - h = Cp(e, h, d, i, f), e.disposeIntermediateTensorInfo(g); + h = mp(e, h, d, i, f), e.disposeIntermediateTensorInfo(g); } return h; } -var W$ = { kernelName: ko, backendName: "cpu", kernelFunc: fQ }; -function hQ(r) { - let { inputs: t8, backend: e } = r, { params: o, indices: n } = t8, s = y.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, c, l] = w.prepareAndValidate(o, n); +var U$ = { kernelName: vo, backendName: "cpu", kernelFunc: fQ }; +function hQ(r15) { + let { inputs: t8, backend: e } = r15, { params: o, indices: n } = t8, 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 e.makeTensorInfo(p, o.dtype, []); - let m = e.data.get(n.dataId).values, d = e.bufferSync(o), f = Tf(m, d, o.dtype, u, i, c, l, o.shape, s); + let m = e.data.get(n.dataId).values, d = e.bufferSync(o), f = Nf(m, d, o.dtype, u, i, c, l, o.shape, s); return e.makeTensorInfo(p, o.dtype, f.values); } -var U$ = { kernelName: kn, backendName: "cpu", kernelFunc: hQ }; -function gQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o; +var G$ = { kernelName: vn, backendName: "cpu", kernelFunc: hQ }; +function gQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o; Q([n, s], "gatherV2"); let p = y.parseAxisParam(a, n.shape)[0], u = e.data.get(s.dataId).values, c = n.shape[p]; for (let S = 0; S < u.length; ++S) { @@ -14424,38 +14425,38 @@ function gQ(r) { } let l = i; i == null && (l = 0); - let m = y.sizeFromShape(s.shape), d = w.segment_util.collectGatherOpShapeInfo(n, s, p, l), f = Ve({ inputs: { x: n }, backend: e, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = Ve({ inputs: { x: s }, backend: e, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = e.bufferSync(h), b = e.bufferSync(f), C = _f(b, x, g); + let m = y.sizeFromShape(s.shape), d = w.segment_util.collectGatherOpShapeInfo(n, s, p, l), f = Ve({ inputs: { x: n }, backend: e, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = Ve({ inputs: { x: s }, backend: e, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = e.bufferSync(h), b = e.bufferSync(f), C = Tf(b, x, g); return e.disposeIntermediateTensorInfo(f), e.disposeIntermediateTensorInfo(h), e.makeTensorInfo(d.outputShape, C.dtype, C.values); } -var G$ = { kernelName: aa, backendName: "cpu", kernelFunc: gQ }; -function xQ(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Ve({ inputs: { x: o }, backend: e, attrs: { shape: [a, s] } }), p = Vf(i, true, e), u = Ve({ inputs: { x: p }, backend: e, attrs: { shape: o.shape } }); +var H$ = { kernelName: aa, backendName: "cpu", kernelFunc: gQ }; +function xQ(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = Ve({ inputs: { x: o }, backend: e, attrs: { shape: [a, s] } }), p = zf(i, true, e), u = Ve({ inputs: { x: p }, backend: e, attrs: { shape: o.shape } }); return e.disposeIntermediateTensorInfo(i), e.disposeIntermediateTensorInfo(p), u; } -var H$ = { kernelName: Ui, backendName: "cpu", kernelFunc: xQ }; -var yQ = Ie(_n, (r) => Number.isFinite(r) ? 1 : 0, "bool"); -var K$ = { kernelName: _n, backendName: "cpu", kernelFunc: yQ }; -var bQ = Ie($n, (r) => Math.abs(r) === 1 / 0 ? 1 : 0, "bool"); -var q$ = { kernelName: $n, backendName: "cpu", kernelFunc: bQ }; -var CQ = Ie(En, (r) => Number.isNaN(r) ? 1 : 0, "bool"); -var j$ = { kernelName: En, backendName: "cpu", kernelFunc: CQ }; -function wQ(r) { - let { backend: t8, attrs: e } = r, { start: o, stop: n, num: s } = e, a = $f(o, n, s); +var K$ = { kernelName: zi, backendName: "cpu", kernelFunc: xQ }; +var yQ = Ie(Tn, (r15) => Number.isFinite(r15) ? 1 : 0, "bool"); +var q$ = { kernelName: Tn, backendName: "cpu", kernelFunc: yQ }; +var bQ = Ie(_n, (r15) => Math.abs(r15) === 1 / 0 ? 1 : 0, "bool"); +var j$ = { kernelName: _n, backendName: "cpu", kernelFunc: bQ }; +var CQ = Ie($n, (r15) => Number.isNaN(r15) ? 1 : 0, "bool"); +var X$ = { kernelName: $n, backendName: "cpu", kernelFunc: CQ }; +function wQ(r15) { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, num: s } = e, a = _f(o, n, s); return t8.makeTensorInfo([a.length], "float32", a); } -var X$ = { kernelName: Fn, backendName: "cpu", kernelFunc: wQ }; -var SQ = Ie(On, (r) => Math.log1p(r)); -var Y$ = { kernelName: On, backendName: "cpu", kernelFunc: SQ }; -var IQ = ze((r, t8) => r && t8); -var vQ = Ye(Mn, IQ, null, "bool"); -var Q$ = { kernelName: Mn, backendName: "cpu", kernelFunc: vQ }; -var kQ = Ie(Ln, (r) => r ? 0 : 1, "bool"); -var Z$ = { kernelName: Ln, backendName: "cpu", kernelFunc: kQ }; -var NQ = ze((r, t8) => r || t8); -var TQ = Ye(Bn, NQ, null, "bool"); -var J$ = { kernelName: Bn, backendName: "cpu", kernelFunc: TQ }; -function _Q(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o; +var Y$ = { kernelName: An, backendName: "cpu", kernelFunc: wQ }; +var SQ = Ie(Pn, (r15) => Math.log1p(r15)); +var Q$ = { kernelName: Pn, backendName: "cpu", kernelFunc: SQ }; +var IQ = ze((r15, t8) => r15 && t8); +var vQ = Ye(On, IQ, null, "bool"); +var Z$ = { kernelName: On, backendName: "cpu", kernelFunc: vQ }; +var kQ = Ie(Mn, (r15) => r15 ? 0 : 1, "bool"); +var J$ = { kernelName: Mn, backendName: "cpu", kernelFunc: kQ }; +var NQ = ze((r15, t8) => r15 || t8); +var TQ = Ye(Ln, NQ, null, "bool"); +var eE = { kernelName: Ln, backendName: "cpu", kernelFunc: TQ }; +function _Q(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o; Q(n, "LRN"); let u = n.shape[3], c = u - 1, l = e.data.get(n.dataId).values, m = y.sizeFromShape(n.shape), d = new Float32Array(m); function f(h) { @@ -14472,9 +14473,9 @@ function _Q(r) { } return e.makeTensorInfo(n.shape, n.dtype, d); } -var eE = { kernelName: zn, backendName: "cpu", kernelFunc: _Q }; -function $Q(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o; +var tE = { kernelName: Bn, backendName: "cpu", kernelFunc: _Q }; +function $Q(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o; Q(a, "LRNGrad"); let l = y.sizeFromShape(a.shape), m = a.shape[3], d = e.data.get(a.dataId).values, f = e.data.get(n.dataId).values, h = e.data.get(s.dataId).values, g = new Float32Array(l), x = l; for (let b = 0; b < x; b++) { @@ -14489,46 +14490,46 @@ function $Q(r) { } return e.makeTensorInfo(a.shape, n.dtype, g); } -var tE = { kernelName: Qa, backendName: "cpu", kernelFunc: $Q }; -function wI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { reductionIndices: s, keepDims: a } = o, i = e, 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; +var rE = { kernelName: Ya, backendName: "cpu", kernelFunc: $Q }; +function SI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { reductionIndices: s, keepDims: a } = o, i = e, 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]]; - d = vc(d, p, n.dtype, m, S), l = w.getInnerMostAxes(l.length, u), p = S; + d = bc(d, p, n.dtype, m, S), l = w.getInnerMostAxes(l.length, u), p = S; } Q(n, "max"), w.assertAxesAreInnerMostDims("max", l, u); - let [f, h] = w.computeOutAndReduceShapes(p, l), g = y.sizeFromShape(h), x = Ef(d, g, f, n.dtype), b = i.write(x, f, n.dtype), C = f; + let [f, h] = w.computeOutAndReduceShapes(p, l), g = y.sizeFromShape(h), x = $f(d, g, f, n.dtype), b = i.write(x, f, n.dtype), C = f; return a && (C = w.expandShapeToKeepDim(f, c)), { dataId: b, shape: C, dtype: n.dtype }; } -var rE = { kernelName: Vn, backendName: "cpu", kernelFunc: wI }; -function EQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8; +var oE = { kernelName: zn, backendName: "cpu", kernelFunc: SI }; +function EQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8; 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 = mr({ inputs: { x: n }, backend: e }); + l = lr({ inputs: { x: n }, backend: e }); else { - let m = e.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = _c(m, n.shape, n.dtype, d, c, "max"); + let m = e.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = Sc(m, n.shape, n.dtype, d, c, "max"); l = e.makeTensorInfo(c.outShape, n.dtype, f.values); } return l; } -var oE = { kernelName: Un, backendName: "cpu", kernelFunc: EQ }; -function RQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var nE = { kernelName: Wn, backendName: "cpu", kernelFunc: EQ }; +function RQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.data.get(n.dataId).values, m = zf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "max"); + let c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.data.get(n.dataId).values, m = Bf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "max"); return e.makeTensorInfo(m.shape, "float32", m.values); } -var nE = { kernelName: ia, backendName: "cpu", kernelFunc: RQ }; -function DQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var sE = { kernelName: ia, backendName: "cpu", kernelFunc: RQ }; +function DQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { 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 = e.bufferSync(s), m = J_(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, E = k - 1 - c.padInfo.left, R = S - 1 - c.padInfo.top, D = me(s.shape, "float32"), P = e.bufferSync(n); + let c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = e.bufferSync(s), m = e$(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, E = k - 1 - c.padInfo.left, R = S - 1 - c.padInfo.top, D = me(s.shape, "float32"), P = e.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) @@ -14557,11 +14558,11 @@ function DQ(r) { } return e.makeTensorInfo(D.shape, D.dtype, D.values); } -var sE = { kernelName: Ki, backendName: "cpu", kernelFunc: DQ }; -function AQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s, output: a } = t8, i = s; +var aE = { kernelName: Ui, backendName: "cpu", kernelFunc: DQ }; +function AQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s, output: a } = t8, 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 = e.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, E = me(i.shape, "float32"), R = e.data.get(n.dataId).values, D = me(n.shape, "float32", R); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = e.data.get(i.dataId).values, f = me(m.outShape, i.dtype, Lf(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, E = me(i.shape, "float32"), R = e.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) @@ -14585,33 +14586,33 @@ function AQ(r) { } return e.makeTensorInfo(E.shape, E.dtype, E.values); } -var aE = { kernelName: Hi, backendName: "cpu", kernelFunc: AQ }; -function iE(r, t8, e, o, n) { - let s = y.computeStrides(t8), a = _c(r, t8, e, s, n, "max"), i = Bf(r, t8, e, n, true, o); +var iE = { kernelName: Wi, backendName: "cpu", kernelFunc: AQ }; +function uE(r15, t8, e, o, n) { + let s = y.computeStrides(t8), a = Sc(r15, t8, e, s, n, "max"), i = Lf(r15, t8, e, n, true, o); return [a.values, i.values]; } -var uE = { kernelName: ua, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = t8, p = e; +var pE = { kernelName: ua, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { x: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = t8, p = e; Q(o, "MaxPoolWithArgmax"); - let u = p.data.get(o.dataId).values, c = w.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = iE(u, o.shape, o.dtype, i, c), d = p.write(l, c.outShape, o.dtype), f = p.write(m, c.outShape, o.dtype); + let u = p.data.get(o.dataId).values, c = w.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = uE(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 FQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = w.computeOutAndReduceShapes(n.shape, i)[1], c = y.sizeFromShape(u), l = [], m = e.makeTensorInfo([], "float32", new Float32Array([c])); +function FQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = w.computeOutAndReduceShapes(n.shape, i)[1], c = y.sizeFromShape(u), l = [], m = e.makeTensorInfo([], "float32", new Float32Array([c])); l.push(m); - let d = Do({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }); + let d = Ro({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }); l.push(d); - let f = Ul({ inputs: { a: d, b: m }, backend: e }); + let f = Vl({ inputs: { a: d, b: m }, backend: e }); l.push(f); - let h = gi({ inputs: { x: f }, backend: e, attrs: { axis: s, keepDims: a } }); + let h = di({ inputs: { x: f }, backend: e, attrs: { axis: s, keepDims: a } }); return l.forEach((g) => e.disposeIntermediateTensorInfo(g)), h; } -var pE = { kernelName: Gn, backendName: "cpu", kernelFunc: FQ }; -function PQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; +var cE = { kernelName: Un, backendName: "cpu", kernelFunc: FQ }; +function PQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = It({ inputs: { x: n }, backend: e, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("min", p, c.shape.length); + u != null && (c = St({ inputs: { x: n }, backend: e, 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 = e.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { let b = x * d, C = h[b]; @@ -14629,9 +14630,9 @@ function PQ(r) { } return g; } -var cE = { kernelName: Hn, backendName: "cpu", kernelFunc: PQ }; -function OQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { paddings: s, mode: a } = o; +var lE = { kernelName: Gn, backendName: "cpu", kernelFunc: PQ }; +function OQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.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++) { @@ -14644,32 +14645,32 @@ function OQ(r) { } return { dataId: e.write(x, i, n.dtype), shape: i, dtype: n.dtype }; } -var lE = { kernelName: qn, backendName: "cpu", kernelFunc: OQ }; -var MQ = ze((r, t8) => { - let e = r % t8; - return r < 0 && t8 < 0 || r >= 0 && t8 >= 0 ? e : (e + t8) % t8; +var mE = { kernelName: Kn, backendName: "cpu", kernelFunc: OQ }; +var MQ = ze((r15, t8) => { + let e = r15 % t8; + return r15 < 0 && t8 < 0 || r15 >= 0 && t8 >= 0 ? e : (e + t8) % t8; }); -var LQ = Ye(jn, MQ); -var mE = { kernelName: jn, backendName: "cpu", kernelFunc: LQ }; -var fE = Kp(qw()); -function SI(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { dim: s } = o, a = n.shape.length, i = s; +var LQ = Ye(qn, MQ); +var dE = { kernelName: qn, backendName: "cpu", kernelFunc: LQ }; +var hE = Lp(qw()); +function II(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { 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 = wI({ inputs: { x: n }, backend: e, attrs: { reductionIndices: p, keepDims: false } }), c = w.expandShapeToKeepDim(u.shape, p), l = Ve({ inputs: { x: u }, backend: e, attrs: { shape: c } }), m = Vl({ inputs: { a: n, b: l }, backend: e }), d = KS({ inputs: { x: m }, backend: e }), f = gi({ inputs: { x: d }, backend: e, attrs: { axis: p, keepDims: false } }), h = Ve({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Ul({ inputs: { a: d, b: h }, backend: e }); + let p = y.parseAxisParam([i], n.shape), u = SI({ inputs: { x: n }, backend: e, attrs: { reductionIndices: p, keepDims: false } }), c = w.expandShapeToKeepDim(u.shape, p), l = Ve({ inputs: { x: u }, backend: e, attrs: { shape: c } }), m = Bl({ inputs: { a: n, b: l }, backend: e }), d = KS({ inputs: { x: m }, backend: e }), f = di({ inputs: { x: d }, backend: e, attrs: { axis: p, keepDims: false } }), h = Ve({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Vl({ inputs: { a: d, b: h }, backend: e }); return e.disposeIntermediateTensorInfo(u), e.disposeIntermediateTensorInfo(l), e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), e.disposeIntermediateTensorInfo(h), g; } -var dE = { kernelName: vs, backendName: "cpu", kernelFunc: SI }; -function BQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o; +var fE = { kernelName: Is, backendName: "cpu", kernelFunc: II }; +function BQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o; Q(n, "multinomial"); - let p = i ? n : SI({ inputs: { logits: n }, backend: e, attrs: { dim: -1 } }), u = p.shape[0], c = p.shape[1], l = e.data.get(p.dataId).values, m = [u, s], d = y.makeZerosTypedArray(y.sizeFromShape(m), "int32"); + let p = i ? n : II({ inputs: { logits: n }, backend: e, attrs: { dim: -1 } }), u = p.shape[0], c = p.shape[1], l = e.data.get(p.dataId).values, m = [u, s], d = y.makeZerosTypedArray(y.sizeFromShape(m), "int32"); for (let f = 0; f < u; ++f) { let h = f * c, g = new Float32Array(c - 1); g[0] = l[h]; for (let C = 1; C < g.length; ++C) g[C] = g[C - 1] + l[h + C]; - let x = fE.alea(a.toString()), b = f * s; + let x = hE.alea(a.toString()), b = f * s; for (let C = 0; C < s; ++C) { let S = x(); d[b + C] = g.length; @@ -14682,33 +14683,33 @@ function BQ(r) { } return i || e.disposeIntermediateTensorInfo(p), e.makeTensorInfo(m, "int32", d); } -var hE = { kernelName: Xn, backendName: "cpu", kernelFunc: BQ }; -var zQ = Wt.nonMaxSuppressionV3Impl; -function VQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; +var gE = { kernelName: jn, backendName: "cpu", kernelFunc: BQ }; +var zQ = Vt.nonMaxSuppressionV3Impl; +function VQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; Q(n, "NonMaxSuppression"); let u = e.data.get(n.dataId).values, c = e.data.get(s.dataId).values, { selectedIndices: l } = zQ(u, c, a, i, p); return e.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var gE = { kernelName: Zn, backendName: "cpu", kernelFunc: VQ }; -var WQ = Wt.nonMaxSuppressionV4Impl; -function UQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; +var xE = { kernelName: Qn, backendName: "cpu", kernelFunc: VQ }; +var WQ = Vt.nonMaxSuppressionV4Impl; +function UQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; Q(n, "NonMaxSuppressionPadded"); let c = e.data.get(n.dataId).values, l = e.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = WQ(c, l, a, i, p, u); return [e.makeTensorInfo([m.length], "int32", new Int32Array(m)), e.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var xE = { kernelName: Za, backendName: "cpu", kernelFunc: UQ }; -var GQ = Wt.nonMaxSuppressionV5Impl; -function HQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; +var yE = { kernelName: Qa, backendName: "cpu", kernelFunc: UQ }; +var GQ = Vt.nonMaxSuppressionV5Impl; +function HQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; Q(n, "NonMaxSuppressionWithScore"); let c = e.data.get(n.dataId).values, l = e.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = GQ(c, l, m, d, f, h); return [e.makeTensorInfo([g.length], "int32", new Int32Array(g)), e.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var yE = { kernelName: Jn, backendName: "cpu", kernelFunc: HQ }; -function KQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n } = t8, { dtype: s, depth: a, onValue: i, offValue: p } = o; +var bE = { kernelName: Zn, backendName: "cpu", kernelFunc: HQ }; +function KQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n } = t8, { 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); @@ -14717,46 +14718,46 @@ function KQ(r) { l[m] >= 0 && l[m] < a && (c[m * a + l[m]] = i); return e.makeTensorInfo([...n.shape, a], s, c); } -var bE = { kernelName: es, backendName: "cpu", kernelFunc: KQ }; -function Kl(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var CE = { kernelName: Jn, backendName: "cpu", kernelFunc: KQ }; +function Gl(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "string") throw new Error("zerosLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = Ro({ inputs: { input: o }, backend: e }), s = Kl({ inputs: { x: n }, backend: e }), a = Ma({ inputs: { input: o }, backend: e }), i = Kl({ inputs: { x: a }, backend: e }), p = Kt({ inputs: { real: s, imag: i }, backend: e }); + let n = Eo({ inputs: { input: o }, backend: e }), s = Gl({ inputs: { x: n }, backend: e }), a = Oa({ inputs: { input: o }, backend: e }), i = Gl({ inputs: { x: a }, backend: e }), p = Ht({ inputs: { real: s, imag: i }, backend: e }); return e.disposeIntermediateTensorInfo(n), e.disposeIntermediateTensorInfo(s), e.disposeIntermediateTensorInfo(a), e.disposeIntermediateTensorInfo(i), p; } else - return Hl({ backend: e, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); + return Ul({ backend: e, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); } -var CE = { kernelName: Sa, backendName: "cpu", kernelFunc: Kl }; -function wE(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var wE = { kernelName: Sa, backendName: "cpu", kernelFunc: Gl }; +function SE(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "string") throw new Error("onesLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = Ro({ inputs: { input: o }, backend: e }), s = wE({ inputs: { x: n }, backend: e }), a = Ma({ inputs: { input: o }, backend: e }), i = Kl({ inputs: { x: a }, backend: e }), p = Kt({ inputs: { real: s, imag: i }, backend: e }); + let n = Eo({ inputs: { input: o }, backend: e }), s = SE({ inputs: { x: n }, backend: e }), a = Oa({ inputs: { input: o }, backend: e }), i = Gl({ inputs: { x: a }, backend: e }), p = Ht({ inputs: { real: s, imag: i }, backend: e }); return e.disposeIntermediateTensorInfo(n), e.disposeIntermediateTensorInfo(s), e.disposeIntermediateTensorInfo(a), e.disposeIntermediateTensorInfo(i), p; } else - return Hl({ backend: e, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); + return Ul({ backend: e, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); } -var SE = { kernelName: ca, backendName: "cpu", kernelFunc: wE }; -function II(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o; +var IE = { kernelName: ca, backendName: "cpu", kernelFunc: SE }; +function vI(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o; if (t8.length === 1) - return $c({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); + return Ic({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); let s = t8[0].shape, a = t8[0].dtype; t8.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 = t8.map((c) => { - let l = $c({ inputs: { input: c }, backend: e, attrs: { dim: n } }); + let l = Ic({ inputs: { input: c }, backend: e, attrs: { dim: n } }); return i.push(l), l; - }), u = yu({ inputs: p, backend: e, attrs: { axis: n } }); + }), u = du({ inputs: p, backend: e, attrs: { axis: n } }); return i.forEach((c) => e.disposeIntermediateTensorInfo(c)), u; } -var IE = { kernelName: la, backendName: "cpu", kernelFunc: II }; -function qQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { paddings: s, constantValue: a } = o; +var vE = { kernelName: la, backendName: "cpu", kernelFunc: vI }; +function qQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.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); @@ -14766,34 +14767,34 @@ function qQ(r) { } return { dataId: e.write(g, i, n.dtype), shape: i, dtype: n.dtype }; } -var Wf = { kernelName: ts, backendName: "cpu", kernelFunc: qQ }; -var jQ = ze((r, t8) => Math.pow(r, t8)); -var XQ = Ye(rs, jQ); -var vE = { kernelName: rs, backendName: "cpu", kernelFunc: XQ }; -function YQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = t8, { outputRaggedRank: i } = o, p = n.map((x) => e.data.get(x.dataId).values), u = n.map((x) => x.shape), c = e.data.get(s.dataId).values, l = e.data.get(a.dataId).values, [m, d, f] = Rf(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => e.makeTensorInfo([x.length], "int32", x)), g = e.makeTensorInfo(f, s.dtype, d); +var Vf = { kernelName: es, backendName: "cpu", kernelFunc: qQ }; +var jQ = ze((r15, t8) => Math.pow(r15, t8)); +var XQ = Ye(ts, jQ); +var kE = { kernelName: ts, backendName: "cpu", kernelFunc: XQ }; +function YQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = t8, { outputRaggedRank: i } = o, p = n.map((x) => e.data.get(x.dataId).values), u = n.map((x) => x.shape), c = e.data.get(s.dataId).values, l = e.data.get(a.dataId).values, [m, d, f] = Ef(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => e.makeTensorInfo([x.length], "int32", x)), g = e.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var kE = { kernelName: Qp, backendName: "cpu", kernelFunc: YQ }; -function QQ(r) { - let { inputs: t8, backend: e } = r, { starts: o, limits: n, deltas: s } = t8, a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Df(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = e.makeTensorInfo([u.length], "int32", u), m = e.makeTensorInfo([c.length], o.dtype, c); +var NE = { kernelName: Up, backendName: "cpu", kernelFunc: YQ }; +function QQ(r15) { + let { inputs: t8, backend: e } = r15, { starts: o, limits: n, deltas: s } = t8, a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Rf(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = e.makeTensorInfo([u.length], "int32", u), m = e.makeTensorInfo([c.length], o.dtype, c); return [l, m]; } -var NE = { kernelName: Zp, backendName: "cpu", kernelFunc: QQ }; -function ZQ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = t8, { rowPartitionTypes: p } = o, u = e.data.get(n.dataId).values, c = e.data.get(s.dataId).values, l = e.data.get(a.dataId).values, m = i.map((g) => e.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); +var TE = { kernelName: Gp, backendName: "cpu", kernelFunc: QQ }; +function ZQ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = t8, { rowPartitionTypes: p } = o, u = e.data.get(n.dataId).values, c = e.data.get(s.dataId).values, l = e.data.get(a.dataId).values, m = i.map((g) => e.data.get(g.dataId).values), d = i.map((g) => g.shape), [f, h] = Df(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); return e.makeTensorInfo(f, s.dtype, h); } -var TE = { kernelName: Jp, backendName: "cpu", kernelFunc: ZQ }; -function JQ(r) { - let { backend: t8, attrs: e } = r, { start: o, stop: n, dtype: s, step: a } = e, i = fp(o, n, a, s); +var _E = { kernelName: Hp, backendName: "cpu", kernelFunc: ZQ }; +function JQ(r15) { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, dtype: s, step: a } = e, i = ap(o, n, a, s); return t8.makeTensorInfo([i.length], s, i); } -var _E = { kernelName: ma, backendName: "cpu", kernelFunc: JQ }; -var e7 = Ie(ss, (r) => 1 / r); -var $E = { kernelName: ss, backendName: "cpu", kernelFunc: e7 }; -function t7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var $E = { kernelName: ma, backendName: "cpu", kernelFunc: JQ }; +var e7 = Ie(ns, (r15) => 1 / r15); +var EE = { kernelName: ns, backendName: "cpu", kernelFunc: e7 }; +function t7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { 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 = e.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; _++) @@ -14813,9 +14814,9 @@ function t7(r) { } return e.makeTensorInfo([l, u, c, f], "float32", g); } -var EE = { kernelName: us, backendName: "cpu", kernelFunc: t7 }; -function r7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o; +var RE = { kernelName: is, backendName: "cpu", kernelFunc: t7 }; +function r72(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { 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 = e.data.get(s.dataId).values, S = 0; for (let k = 0; k < p; k++) { @@ -14833,9 +14834,9 @@ function r7(r) { } return e.makeTensorInfo([p, c, u, l], "float32", f); } -var RE = { kernelName: ei, backendName: "cpu", kernelFunc: r7 }; -function o7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var DE = { kernelName: Ja, backendName: "cpu", kernelFunc: r72 }; +function o7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { 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 = e.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; for (let _ = 0; _ < l; _++) { @@ -14857,9 +14858,9 @@ function o7(r) { } return e.makeTensorInfo([l, u, c, f], n.dtype, g); } -var DE = { kernelName: is, backendName: "cpu", kernelFunc: o7 }; -function n7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o; +var AE = { kernelName: as, backendName: "cpu", kernelFunc: o7 }; +function n7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { 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 = e.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, E = Math.ceil(k) * 2 + 2, R = Math.ceil(_) * 2 + 2; for (let D = 0; D < u; D++) { @@ -14891,13 +14892,13 @@ function n7(r) { } return e.makeTensorInfo(n.shape, n.dtype, h); } -var AE = { kernelName: Ja, backendName: "cpu", kernelFunc: n7 }; -function s7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dims: s } = o; +var FE = { kernelName: Za, backendName: "cpu", kernelFunc: n7 }; +function s7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dims: s } = o; Q(n, "reverse"); let a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return mr({ inputs: { x: n }, backend: e }); + return lr({ inputs: { x: n }, backend: e }); let p = new tt(n.shape, n.dtype), u = e.bufferSync(n); for (let c = 0; c < p.size; c++) { let l = p.indexToLoc(c), m = l.slice(); @@ -14905,9 +14906,9 @@ function s7(r) { } return e.makeTensorInfo(p.shape, p.dtype, p.values); } -var FE = { kernelName: cs, backendName: "cpu", kernelFunc: s7 }; -var PE = { kernelName: As, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = t8, i = e, 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; +var PE = { kernelName: ps, backendName: "cpu", kernelFunc: s7 }; +var OE = { kernelName: Ds, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = t8, i = e, 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++) { let k = S * l * c * m; for (let _ = 0; _ < c; _++) { @@ -14930,44 +14931,44 @@ var PE = { kernelName: As, backendName: "cpu", kernelFunc: ({ inputs: r, attrs: } return { dataId: i.write(p, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -var a7 = Ie(ls, (r) => { - let t8 = Math.floor(r); - return r - t8 < 0.5 ? Math.floor(r) : r - t8 > 0.5 ? Math.ceil(r) : t8 % 2 === 0 ? t8 : t8 + 1; +var a7 = Ie(cs, (r15) => { + let t8 = Math.floor(r15); + return r15 - t8 < 0.5 ? Math.floor(r15) : r15 - t8 > 0.5 ? Math.ceil(r15) : t8 % 2 === 0 ? t8 : t8 + 1; }); -var OE = { kernelName: ls, backendName: "cpu", kernelFunc: a7 }; -function i7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n, updates: s } = t8, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = true, d = e.bufferSync(n), f = e.bufferSync(s), h = zs(d, f, a, l, u, p, i, c, 0, m); +var ME = { kernelName: cs, backendName: "cpu", kernelFunc: a7 }; +function i7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n, updates: s } = t8, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = true, d = e.bufferSync(n), f = e.bufferSync(s), h = zs(d, f, a, l, u, p, i, c, 0, m); return e.makeTensorInfo(a, h.dtype, h.values); } -var ME = { kernelName: ds, backendName: "cpu", kernelFunc: i7 }; -function u7(r, t8) { - let e = 0, o = r.length, n = 0; +var LE = { kernelName: ms, backendName: "cpu", kernelFunc: i7 }; +function u7(r15, t8) { + let e = 0, o = r15.length, n = 0; for (; e < o; ) - n = Math.floor((e + o) / 2), r[n] < t8 ? e = n + 1 : o = n; + n = Math.floor((e + o) / 2), r15[n] < t8 ? e = n + 1 : o = n; return o; } -function p7(r, t8) { - let e = 0, o = r.length, n = 0; +function p7(r15, t8) { + let e = 0, o = r15.length, n = 0; for (; e < o; ) - n = Math.floor((e + o) / 2), r[n] <= t8 ? e = n + 1 : o = n; + n = Math.floor((e + o) / 2), r15[n] <= t8 ? e = n + 1 : o = n; return o; } -function LE(r, t8, e, o, n, s) { +function BE(r15, t8, e, o, n, s) { let a = y.getArrayFromDType("int32", e * n); for (let i = 0; i < e; ++i) { - let p = r.slice(i * o, (i + 1) * o), u = i * n; + let p = r15.slice(i * o, (i + 1) * o), u = i * n; for (let c = 0; c < n; ++c) a[u + c] = s === "left" ? u7(p, t8[c + u]) : p7(p, t8[c + u]); } return a; } -function c7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sortedSequence: n, values: s } = t8, { side: a } = o, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, u = LE(i, p, n.shape[0], n.shape[1], s.shape[1], a); +function c7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sortedSequence: n, values: s } = t8, { side: a } = o, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, u = BE(i, p, n.shape[0], n.shape[1], s.shape[1], a); return e.makeTensorInfo(s.shape, "int32", u); } -var BE = { kernelName: hs, backendName: "cpu", kernelFunc: c7 }; -function l7(r) { - let { inputs: t8, backend: e } = r, { condition: o, t: n, e: s } = t8; +var zE = { kernelName: fs, backendName: "cpu", kernelFunc: c7 }; +function l7(r15) { + let { inputs: t8, backend: e } = r15, { condition: o, t: n, e: s } = t8; Q([o, n, s], "select"); let a = o.shape.length, i = e.data.get(o.dataId).values, p = e.data.get(n.dataId).values, u = e.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++) @@ -14975,37 +14976,37 @@ function l7(r) { i[f] === 1 ? l[m++] = p[f] : l[m++] = u[f]; return e.makeTensorInfo(n.shape, c, l); } -var zE = { kernelName: fa, backendName: "cpu", kernelFunc: l7 }; +var VE = { kernelName: fa, backendName: "cpu", kernelFunc: l7 }; var m7 = w.SELU_SCALEALPHA; var d7 = w.SELU_SCALE; -var f7 = Ie(gs, (r) => r >= 0 ? d7 * r : m7 * (Math.exp(r) - 1)); -var VE = { kernelName: gs, backendName: "cpu", kernelFunc: f7 }; -var h7 = Ie(bs, (r) => r < 0 ? -1 : r > 0 ? 1 : 0); -var WE = { kernelName: bs, backendName: "cpu", kernelFunc: h7 }; -var g7 = Ie(xs, (r) => Math.sin(r)); -var UE = { kernelName: xs, backendName: "cpu", kernelFunc: g7 }; -var x7 = Ie(ys, (r) => Math.sinh(r)); -var GE = { kernelName: ys, backendName: "cpu", kernelFunc: x7 }; +var f7 = Ie(hs, (r15) => r15 >= 0 ? d7 * r15 : m7 * (Math.exp(r15) - 1)); +var WE = { kernelName: hs, backendName: "cpu", kernelFunc: f7 }; +var h7 = Ie(ys, (r15) => r15 < 0 ? -1 : r15 > 0 ? 1 : 0); +var UE = { kernelName: ys, backendName: "cpu", kernelFunc: h7 }; +var g7 = Ie(gs, (r15) => Math.sin(r15)); +var GE = { kernelName: gs, backendName: "cpu", kernelFunc: g7 }; +var x7 = Ie(xs, (r15) => Math.sinh(r15)); +var HE = { kernelName: xs, backendName: "cpu", kernelFunc: x7 }; var y7 = 11920928955078125e-23; -var HE = Math.log(y7) + 2; -var b7 = Ie(ws, (r) => { - let t8 = r > -HE, e = r < HE, o = Math.exp(r), n; - return e ? n = o : t8 ? n = r : n = Math.log(1 + o), n; +var KE = Math.log(y7) + 2; +var b7 = Ie(Cs, (r15) => { + let t8 = r15 > -KE, e = r15 < KE, o = Math.exp(r15), n; + return e ? n = o : t8 ? n = r15 : n = Math.log(1 + o), n; }); -var KE = { kernelName: ws, backendName: "cpu", kernelFunc: b7 }; -function C7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, paddings: a } = o; +var qE = { kernelName: Cs, backendName: "cpu", kernelFunc: b7 }; +function C7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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]); - let u = Wf.kernelFunc({ inputs: { x: n }, backend: e, 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 = Ve({ inputs: { x: u }, backend: e, attrs: { shape: c } }), b = It({ inputs: { x: h }, backend: e, attrs: { perm: l } }), k = Ve({ inputs: { x: b }, backend: e, attrs: { shape: m } }); + let u = Vf.kernelFunc({ inputs: { x: n }, backend: e, 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 = Ve({ inputs: { x: u }, backend: e, attrs: { shape: c } }), b = St({ inputs: { x: h }, backend: e, attrs: { perm: l } }), k = Ve({ inputs: { x: b }, backend: e, attrs: { shape: m } }); return e.disposeIntermediateTensorInfo(u), e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(b), k; } -var qE = { kernelName: ga, backendName: "cpu", kernelFunc: C7 }; -function w7(r) { - let { inputs: t8, backend: e } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = t8; +var jE = { kernelName: ga, backendName: "cpu", kernelFunc: C7 }; +function w7(r15) { + let { inputs: t8, backend: e } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = t8; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -15018,12 +15019,12 @@ function w7(r) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = e.data.get(o.dataId).values, p = e.data.get(n.dataId).values, u = e.data.get(s.dataId).values, c = e.data.get(a.dataId).values[0], [l, m, d, f, h] = Ff(i, o.shape, o.dtype, p, n.dtype, u, c); + let i = e.data.get(o.dataId).values, p = e.data.get(n.dataId).values, u = e.data.get(s.dataId).values, c = e.data.get(a.dataId).values[0], [l, m, d, f, h] = Af(i, o.shape, o.dtype, p, n.dtype, u, c); return [e.makeTensorInfo(m, o.dtype, l), e.makeTensorInfo([m[0]], n.dtype, d), e.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), e.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var jE = { kernelName: ji, backendName: "cpu", kernelFunc: w7 }; -function S7(r) { - let { inputs: t8, backend: e } = r, { inputIndices: o, inputShape: n, newShape: s } = t8; +var XE = { kernelName: Hi, backendName: "cpu", kernelFunc: w7 }; +function S7(r15) { + let { inputs: t8, backend: e } = r15, { inputIndices: o, inputShape: n, newShape: s } = t8; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); @@ -15032,12 +15033,12 @@ function S7(r) { ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = Array.from(e.data.get(n.dataId).values), i = e.data.get(o.dataId).values, p = Array.from(e.data.get(s.dataId).values), [u, c, l] = Pf(i, o.shape, o.dtype, a, p); + let a = Array.from(e.data.get(n.dataId).values), i = e.data.get(o.dataId).values, p = Array.from(e.data.get(s.dataId).values), [u, c, l] = Ff(i, o.shape, o.dtype, a, p); return [e.makeTensorInfo(c, o.dtype, u), e.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var XE = { kernelName: ti, backendName: "cpu", kernelFunc: S7 }; -function I7(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; +var YE = { kernelName: ei, backendName: "cpu", kernelFunc: S7 }; +function I7(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -15048,12 +15049,12 @@ function I7(r) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Nc(a, o.shape, o.dtype, i, p, true); + let a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Cc(a, o.shape, o.dtype, i, p, true); return e.makeTensorInfo(c, o.dtype, u); } -var YE = { kernelName: ya, backendName: "cpu", kernelFunc: I7 }; -function v7(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; +var QE = { kernelName: ya, backendName: "cpu", kernelFunc: I7 }; +function v7(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -15064,12 +15065,12 @@ function v7(r) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Nc(a, o.shape, o.dtype, i, p); + let a = e.data.get(o.dataId).values, i = e.data.get(n.dataId).values, p = e.data.get(s.dataId).values, [u, c] = Cc(a, o.shape, o.dtype, i, p); return e.makeTensorInfo(c, o.dtype, u); } -var QE = { kernelName: ba, backendName: "cpu", kernelFunc: v7 }; -function k7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false, f = e.bufferSync(n), h; +var ZE = { kernelName: ba, backendName: "cpu", kernelFunc: v7 }; +function k7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false, f = e.bufferSync(n), h; switch (s.dtype) { case "bool": { let g = e.bufferSync(s), x = !!e.data.get(a.dataId).values[0]; @@ -15096,19 +15097,19 @@ function k7(r) { } return e.makeTensorInfo(i, h.dtype, h.values); } -var ZE = { kernelName: ks, backendName: "cpu", kernelFunc: k7 }; -function N7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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(); +var JE = { kernelName: vs, backendName: "cpu", kernelFunc: k7 }; +function N7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = Fo({ inputs: { x: n }, backend: e, attrs: { begin: u, size: m } }); + let d = Ao({ inputs: { x: n }, backend: e, attrs: { begin: u, size: m } }); return u[i] += l, d; }); } -var JE = { kernelName: xa, backendName: "cpu", kernelFunc: N7 }; -var eR = { kernelName: Xi, backendName: "cpu", kernelFunc: ({ inputs: r, backend: t8 }) => { - let { x: e } = r, o = t8; +var eR = { kernelName: xa, backendName: "cpu", kernelFunc: N7 }; +var tR = { kernelName: Ki, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: t8 }) => { + let { x: e } = r15, o = t8; Q(e, "square"); let n = o.data.get(e.dataId).values, s = new Float32Array(n.length); for (let i = 0; i < n.length; ++i) { @@ -15117,80 +15118,80 @@ var eR = { kernelName: Xi, backendName: "cpu", kernelFunc: ({ inputs: r, backend } return { dataId: o.write(s, e.shape, e.dtype), shape: e.shape, dtype: e.dtype }; } }; -var T7 = Ie(So, (r, t8) => { +var T7 = Ie(wo, (r15, t8) => { let e = t8; - return isNaN(r) ? NaN : r > 0 ? 1 : e.alpha; + return isNaN(r15) ? NaN : r15 > 0 ? 1 : e.alpha; }); -var tR = { kernelName: So, backendName: "cpu", kernelFunc: T7 }; -function _7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o; +var rR = { kernelName: wo, backendName: "cpu", kernelFunc: T7 }; +function _7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 } = ct.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; + let { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) k = Ve({ 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 _ = ct.computeOutShape(b, C, S), E = Fo({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); + let _ = pt.computeOutShape(b, C, S), E = Ao({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); k = Ve({ inputs: { x: E }, backend: e, attrs: { shape: f } }), e.disposeIntermediateTensorInfo(E); } else { - let _ = e.bufferSync(n), E = Of(d, _, S, b); + let _ = e.bufferSync(n), E = Pf(d, _, S, b); k = e.makeTensorInfo(f, E.dtype, E.values); } return k; } -var rR = { kernelName: Ts, backendName: "cpu", kernelFunc: _7 }; -function $7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.data.get(c.dataId).values, d = e.data.get(l.dataId).values, [f, h] = gp(m, d, n, s, a, i, p, u); +var oR = { kernelName: Ns, backendName: "cpu", kernelFunc: _7 }; +function $7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.data.get(c.dataId).values, d = e.data.get(l.dataId).values, [f, h] = up(m, d, n, s, a, i, p, u); return [e.makeTensorInfo([f.length], "string", f), e.makeTensorInfo(l.shape, "int32", h)]; } -var oR = { kernelName: Ca, backendName: "cpu", kernelFunc: $7 }; -function E7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = t8; +var nR = { kernelName: Ca, backendName: "cpu", kernelFunc: $7 }; +function E7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { skipEmpty: n } = o, { input: s, delimiter: a } = t8; 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 = e.data.get(s.dataId).values, p = e.data.get(a.dataId).values[0], [u, c, l] = xp(i, p, n), m = c.length; + let i = e.data.get(s.dataId).values, p = e.data.get(a.dataId).values[0], [u, c, l] = pp(i, p, n), m = c.length; return [e.makeTensorInfo([m, 2], "int32", u), e.makeTensorInfo([m], "string", c), e.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var nR = { kernelName: Yi, backendName: "cpu", kernelFunc: E7 }; -function R7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { numBuckets: n } = o, { input: s } = t8; +var sR = { kernelName: qi, backendName: "cpu", kernelFunc: E7 }; +function R7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { numBuckets: n } = o, { input: s } = t8; 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 = e.data.get(s.dataId).values, i = yp(a, n); + let a = e.data.get(s.dataId).values, i = cp(a, n); return e.makeTensorInfo(s.shape, "int32", i); } -var sR = { kernelName: Qi, backendName: "cpu", kernelFunc: R7 }; -var D7 = Ie($s, (r) => Math.tan(r)); -var aR = { kernelName: $s, backendName: "cpu", kernelFunc: D7 }; -var A7 = Ie(Es, (r) => Math.tanh(r)); -var iR = { kernelName: Es, backendName: "cpu", kernelFunc: A7 }; -function F7(r) { - let { inputs: t8, backend: e } = r, { tensor: o, indices: n, updates: s } = t8, { sliceRank: a, numUpdates: i, sliceSize: p, strides: u, outputSize: c } = w.calculateShapes(s, n, o.shape), l = false, m = e.bufferSync(n), d = e.bufferSync(s), f = e.bufferSync(o), h = zs(m, d, o.shape, c, p, i, a, u, f, l); +var aR = { kernelName: ji, backendName: "cpu", kernelFunc: R7 }; +var D7 = Ie(_s, (r15) => Math.tan(r15)); +var iR = { kernelName: _s, backendName: "cpu", kernelFunc: D7 }; +var A7 = Ie($s, (r15) => Math.tanh(r15)); +var uR = { kernelName: $s, backendName: "cpu", kernelFunc: A7 }; +function F7(r15) { + let { inputs: t8, backend: e } = r15, { tensor: o, indices: n, updates: s } = t8, { sliceRank: a, numUpdates: i, sliceSize: p, strides: u, outputSize: c } = w.calculateShapes(s, n, o.shape), l = false, m = e.bufferSync(n), d = e.bufferSync(s), f = e.bufferSync(o), h = zs(m, d, o.shape, c, p, i, a, u, f, l); return e.makeTensorInfo(o.shape, h.dtype, h.values); } -var uR = { kernelName: fs, backendName: "cpu", kernelFunc: F7 }; -function P7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { reps: s } = o; +var pR = { kernelName: ds, backendName: "cpu", kernelFunc: F7 }; +function P7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { reps: s } = o; Q(n, "tile"); - let a = Mf(e.bufferSync(n), s); + let a = Of(e.bufferSync(n), s); return e.makeTensorInfo(a.shape, a.dtype, a.values); } -var pR = { kernelName: po, backendName: "cpu", kernelFunc: P7 }; -function O7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { k: s, sorted: a } = o; +var cR = { kernelName: uo, backendName: "cpu", kernelFunc: P7 }; +function O7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { k: s, sorted: a } = o; Q(n, "topk"); - let i = e.data.get(n.dataId).values, [p, u] = Lf(i, n.shape, n.dtype, s, a); + let i = e.data.get(n.dataId).values, [p, u] = Mf(i, n.shape, n.dtype, s, a); return [e.makeTensorInfo(p.shape, p.dtype, p.values), e.makeTensorInfo(u.shape, u.dtype, u.values)]; } -var cR = { kernelName: Rs, backendName: "cpu", kernelFunc: O7 }; -function M7(r) { - let { inputs: t8, attrs: e, backend: o } = r, { image: n, transforms: s } = t8, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = e, [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], E = k[1], R = k[2], D = y.getTypedArrayFromDType(n.dtype, y.sizeFromShape(g)); +var lR = { kernelName: Es, backendName: "cpu", kernelFunc: O7 }; +function M7(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { image: n, transforms: s } = t8, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = e, [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], E = 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) { @@ -15201,7 +15202,7 @@ function M7(r) { 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 = lR(J, m, i), ee = lR(re, l, i); + let J = (B[0] * U + B[1] * z + B[2]) / Y, re = (B[3] * U + B[4] * z + B[5]) / Y, ne = mR(J, m, i), ee = mR(re, l, i); switch (a) { case "nearest": q = W7(P, l, m, b, C, S, L, ee, ne, j, p); @@ -15219,22 +15220,22 @@ function M7(r) { } return { dataId: o.write(D, g, n.dtype), shape: n.shape, dtype: n.dtype }; } -var mR = { kernelName: Ds, backendName: "cpu", kernelFunc: M7 }; -function lR(r, t8, e) { +var dR = { kernelName: Rs, backendName: "cpu", kernelFunc: M7 }; +function mR(r15, t8, e) { switch (e) { case "reflect": - return L7(r, t8); + return L7(r15, t8); case "wrap": - return B7(r, t8); + return B7(r15, t8); case "nearest": - return V7(r, t8); + return V7(r15, t8); case "constant": default: - return z7(r, t8); + return z7(r15, t8); } } -function L7(r, t8) { - let e = r; +function L7(r15, t8) { + let e = r15; if (e < 0) if (t8 <= 1) e = 0; @@ -15251,8 +15252,8 @@ function L7(r, t8) { } return y.clamp(0, e, t8 - 1); } -function B7(r, t8) { - let e = r; +function B7(r15, t8) { + let e = r15; if (e < 0) if (t8 <= 1) e = 0; @@ -15269,33 +15270,33 @@ function B7(r, t8) { } return y.clamp(0, e, t8 - 1); } -function z7(r, t8) { - return r; +function z7(r15, t8) { + return r15; } -function V7(r, t8) { - return y.clamp(0, r, t8 - 1); +function V7(r15, t8) { + return y.clamp(0, r15, t8 - 1); } -function ql(r, t8, e, o, n, s, a, i, p, u, c) { +function Hl(r15, t8, e, o, n, s, a, i, p, u, c) { let l = a * o + i * n + p * s + u; - return 0 <= i && i < t8 && 0 <= p && p < e ? r[l] : c; + return 0 <= i && i < t8 && 0 <= p && p < e ? r15[l] : c; } -function W7(r, t8, e, o, n, s, a, i, p, u, c) { +function W7(r15, t8, e, o, n, s, a, i, p, u, c) { let l = Math.round(i), m = Math.round(p); - return ql(r, t8, e, o, n, s, a, l, m, u, c); + return Hl(r15, t8, e, o, n, s, a, l, m, u, c); } -function U7(r, t8, e, 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(r, t8, e, o, n, s, a, l, m, u, c) + (p - m) * ql(r, t8, e, o, n, s, a, l, f, u, c), g = (f - p) * ql(r, t8, e, o, n, s, a, d, m, u, c) + (p - m) * ql(r, t8, e, o, n, s, a, d, f, u, c); +function U7(r15, t8, e, 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) * Hl(r15, t8, e, o, n, s, a, l, m, u, c) + (p - m) * Hl(r15, t8, e, o, n, s, a, l, f, u, c), g = (f - p) * Hl(r15, t8, e, o, n, s, a, d, m, u, c) + (p - m) * Hl(r15, t8, e, o, n, s, a, d, f, u, c); return (d - i) * h + (i - l) * g; } -function G7(r) { - let { inputs: t8, attrs: e, backend: o } = r, { axis: n } = e, { x: s } = t8; +function G7(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { axis: n } = e, { x: s } = t8; Q(s, "unique"); - let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = bp(a, n, s.shape, s.dtype); + let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = lp(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var dR = { kernelName: Zi, backendName: "cpu", kernelFunc: G7 }; -function H7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { value: n } = t8, { axis: s } = o; +var fR = { kernelName: Xi, backendName: "cpu", kernelFunc: G7 }; +function H7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { value: n } = t8, { 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++) @@ -15305,156 +15306,156 @@ function H7(r) { let m = new Array(i); for (let d = 0; d < m.length; d++) { c[s] = d; - let f = Fo({ inputs: { x: n }, backend: e, attrs: { begin: c, size: l } }); + let f = Ao({ inputs: { x: n }, backend: e, attrs: { begin: c, size: l } }); m[d] = Ve({ inputs: { x: f }, backend: e, attrs: { shape: p } }), e.disposeIntermediateTensorInfo(f); } return m; } -var fR = { kernelName: wa, backendName: "cpu", kernelFunc: H7 }; -function K7(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, segmentIds: s } = t8, { numSegments: a } = o; +var hR = { kernelName: wa, backendName: "cpu", kernelFunc: H7 }; +function K7(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, segmentIds: s } = t8, { numSegments: a } = o; Q(n, "unsortedSegmentSum"); let i = n.shape.length, p = s.shape.length, u = [], c = [], l = i - p, m = s; for (let f = 0; f < l; ++f) { - let h = $c({ inputs: { input: m }, backend: e, attrs: { dim: f + 1 } }); + let h = Ic({ inputs: { input: m }, backend: e, attrs: { dim: f + 1 } }); m = h, c.push(h); } for (let f = 0; f < a; ++f) { - let h = y.createScalarValue(f, "int32"), g = e.makeTensorInfo([], "int32", h), x = GS({ inputs: { a: g, b: m }, backend: e }), b = Do({ inputs: { x }, backend: e, attrs: { dtype: "float32" } }), C = dp({ inputs: { a: b, b: n }, backend: e }), S = gi({ inputs: { x: C }, backend: e, attrs: { axis: 0, keepDims: false } }); + let h = y.createScalarValue(f, "int32"), g = e.makeTensorInfo([], "int32", h), x = GS({ inputs: { a: g, b: m }, backend: e }), b = Ro({ inputs: { x }, backend: e, attrs: { dtype: "float32" } }), C = sp({ inputs: { a: b, b: n }, backend: e }), S = di({ inputs: { x: C }, backend: e, attrs: { axis: 0, keepDims: false } }); u.push(S), c.push(g), c.push(x), c.push(b), c.push(C), c.push(S); } - let d = II({ inputs: u, backend: e, attrs: { axis: 0 } }); + let d = vI({ inputs: u, backend: e, attrs: { axis: 0 } }); return c.forEach((f) => e.disposeIntermediateTensorInfo(f)), d; } -var hR = { kernelName: Ji, backendName: "cpu", kernelFunc: K7 }; -var q7 = [z_, jT, V_, W_, JT, U_, G_, H_, K_, q_, j_, X_, Y_, Q_, Z_, e$, t$, r$, o$, B_, n$, s$, a$, e_, i$, ZT, t_, u$, XT, p$, l$, m$, d$, f$, h$, g$, x$, y$, b$, C$, w$, S$, I$, v$, k$, N$, T$, _$, $$, E$, R$, D$, F$, A_, P$, r_, O$, o_, M$, n_, L$, B$, z$, s_, a_, V$, W$, U$, G$, i_, u_, YT, H$, c$, K$, q$, j$, F_, p_, c_, X$, l_, Y$, Q$, Z$, J$, eE, tE, rE, m_, oE, nE, sE, aE, uE, pE, cE, d_, lE, mE, hE, f_, h_, gE, xE, yE, g_, bE, SE, IE, Wf, vE, P_, y_, kE, NE, TE, _E, QT, Gl, $E, O_, M_, L_, EE, RE, DE, AE, FE, PE, OE, I_, ME, BE, zE, VE, k_, WE, UE, GE, N_, dE, KE, qE, jE, XE, YE, QE, ZE, JE, __, eR, $_, E_, tR, rR, oR, nR, sR, R_, A$, aR, iR, uR, pR, cR, mR, x_, dR, fR, hR, CE]; -for (let r of q7) - ri(r); -var Ac = {}; -qe(Ac, { assertNotComplex: () => Vs, bindCanvasToFramebuffer: () => rZ, bindColorTextureToFramebuffer: () => Ql, bindTextureToProgramUniformSampler: () => BI, bindTextureUnit: () => bR, bindVertexBufferToProgramAttribute: () => jf, callAndCheck: () => ce, canBeRepresented: () => TI, createFragmentShader: () => $I, createFramebuffer: () => OI, createProgram: () => EI, createStaticIndexBuffer: () => AI, createStaticVertexBuffer: () => DI, createTexture: () => FI, createVertexShader: () => _I, getBatchDim: () => yi, getExtensionOrThrow: () => Ec, getFramebufferErrorMessage: () => CR, getMaxTexturesInShader: () => WI, getNumChannels: () => eZ, getProgramUniformLocation: () => LI, getProgramUniformLocationOrThrow: () => MI, getRowsCols: () => bi, getShapeAs3D: () => Dc, getTextureShapeFromLogicalShape: () => zI, getWebGLDisjointQueryTimerVersion: () => UI, getWebGLErrorMessage: () => yR, getWebGLMaxTextureSize: () => VI, hasExtension: () => qr, isCapableOfRenderingToFloatTexture: () => GI, isDownloadFloatTextureEnabled: () => HI, isReshapeFree: () => Cu, isWebGLFenceEnabled: () => KI, isWebGLVersionEnabled: () => Yf, linkProgram: () => RI, logShaderSourceAndInfoLog: () => qf, resetMaxTextureSize: () => oZ, resetMaxTexturesInShader: () => nZ, unbindColorTextureFromFramebuffer: () => Xf, unbindTextureUnit: () => tZ, validateFramebuffer: () => Rc, validateProgram: () => Yl, validateTextureSize: () => PI }); -var wp = {}; -var Uf = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; -function vI(r, t8) { - wp[r] = t8; +var gR = { kernelName: Yi, backendName: "cpu", kernelFunc: K7 }; +var q7 = [V_, XT, W_, U_, e_, G_, H_, K_, q_, j_, X_, Y_, Q_, Z_, J_, t$, r$, o$, n$, z_, s$, a$, i$, t_, u$, JT, r_, p$, YT, c$, m$, d$, f$, h$, g$, x$, y$, b$, C$, w$, S$, I$, v$, k$, N$, T$, _$, $$, E$, R$, D$, A$, P$, F_, O$, o_, M$, n_, L$, s_, B$, z$, V$, a_, i_, W$, U$, G$, H$, u_, p_, QT, K$, l$, q$, j$, X$, P_, c_, l_, Y$, m_, Q$, Z$, J$, eE, tE, rE, oE, d_, nE, sE, aE, iE, pE, cE, lE, f_, mE, dE, gE, h_, g_, xE, yE, bE, x_, CE, IE, vE, Vf, kE, O_, b_, NE, TE, _E, $E, ZT, Wl, EE, M_, L_, B_, RE, DE, AE, FE, PE, OE, ME, v_, LE, zE, VE, WE, N_, UE, GE, HE, T_, fE, qE, jE, XE, YE, QE, ZE, JE, eR, $_, tR, E_, R_, rR, oR, nR, sR, aR, D_, F$, iR, uR, pR, cR, lR, dR, y_, fR, hR, gR, wE]; +for (let r15 of q7) + ti(r15); +var Tc = {}; +qe(Tc, { assertNotComplex: () => Vs, bindCanvasToFramebuffer: () => rZ, bindColorTextureToFramebuffer: () => Xl, bindTextureToProgramUniformSampler: () => zI, bindTextureUnit: () => CR, bindVertexBufferToProgramAttribute: () => qf, callAndCheck: () => ce, canBeRepresented: () => _I, createFragmentShader: () => EI, createFramebuffer: () => MI, createProgram: () => RI, createStaticIndexBuffer: () => FI, createStaticVertexBuffer: () => AI, createTexture: () => PI, createVertexShader: () => $I, getBatchDim: () => hi, getExtensionOrThrow: () => vc, getFramebufferErrorMessage: () => wR, getMaxTexturesInShader: () => UI, getNumChannels: () => eZ, getProgramUniformLocation: () => BI, getProgramUniformLocationOrThrow: () => LI, getRowsCols: () => gi, getShapeAs3D: () => Nc, getTextureShapeFromLogicalShape: () => VI, getWebGLDisjointQueryTimerVersion: () => GI, getWebGLErrorMessage: () => bR, getWebGLMaxTextureSize: () => WI, hasExtension: () => Kr, isCapableOfRenderingToFloatTexture: () => HI, isDownloadFloatTextureEnabled: () => KI, isReshapeFree: () => hu, isWebGLFenceEnabled: () => qI, isWebGLVersionEnabled: () => Xf, linkProgram: () => DI, logShaderSourceAndInfoLog: () => Kf, resetMaxTextureSize: () => oZ, resetMaxTexturesInShader: () => nZ, unbindColorTextureFromFramebuffer: () => jf, unbindTextureUnit: () => tZ, validateFramebuffer: () => kc, validateProgram: () => jl, validateTextureSize: () => OI }); +var dp = {}; +var Wf = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; +function kI(r15, t8) { + dp[r15] = t8; } -function Kr(r, t8) { - if (!(r in wp) || t8 != null) { - let o = X7(r, t8); +function Hr(r15, t8) { + if (!(r15 in dp) || t8 != null) { + let o = X7(r15, t8); if (o !== null) - wp[r] = o; + dp[r15] = o; else - return console.log("Could not get context for WebGL version", r), null; + return console.log("Could not get context for WebGL version", r15), null; } - let e = wp[r]; - return e == null || e.isContextLost() ? (delete wp[r], Kr(r)) : (e.disable(e.DEPTH_TEST), e.disable(e.STENCIL_TEST), e.disable(e.BLEND), e.disable(e.DITHER), e.disable(e.POLYGON_OFFSET_FILL), e.disable(e.SAMPLE_COVERAGE), e.enable(e.SCISSOR_TEST), e.enable(e.CULL_FACE), e.cullFace(e.BACK), wp[r]); + let e = dp[r15]; + return e == null || e.isContextLost() ? (delete dp[r15], Hr(r15)) : (e.disable(e.DEPTH_TEST), e.disable(e.STENCIL_TEST), e.disable(e.BLEND), e.disable(e.DITHER), e.disable(e.POLYGON_OFFSET_FILL), e.disable(e.SAMPLE_COVERAGE), e.enable(e.SCISSOR_TEST), e.enable(e.CULL_FACE), e.cullFace(e.BACK), dp[r15]); } -function j7(r) { - if (!A().getBool("IS_SAFARI") && typeof OffscreenCanvas != "undefined" && r === 2) +function j7(r15) { + 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 X7(r, t8) { - if (r !== 1 && r !== 2) +function X7(r15, t8) { + if (r15 !== 1 && r15 !== 2) throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); - let e = t8 == null ? j7(r) : t8; + let e = t8 == null ? j7(r15) : t8; return e.addEventListener("webglcontextlost", (o) => { - o.preventDefault(), delete wp[r]; - }, false), A().getBool("SOFTWARE_WEBGL_ENABLED") && (Uf.failIfMajorPerformanceCaveat = false), r === 1 ? e.getContext("webgl", Uf) || e.getContext("experimental-webgl", Uf) : e.getContext("webgl2", Uf); + o.preventDefault(), delete dp[r15]; + }, false), A().getBool("SOFTWARE_WEBGL_ENABLED") && (Wf.failIfMajorPerformanceCaveat = false), r15 === 1 ? e.getContext("webgl", Wf) || e.getContext("experimental-webgl", Wf) : e.getContext("webgl2", Wf); } -var bu; -(function(r) { - r[r.DENSE = 0] = "DENSE", r[r.SHARED_BATCH = 1] = "SHARED_BATCH"; -})(bu || (bu = {})); -var dr; -(function(r) { - r[r.RENDER = 0] = "RENDER", r[r.UPLOAD = 1] = "UPLOAD", r[r.PIXELS = 2] = "PIXELS", r[r.DOWNLOAD = 3] = "DOWNLOAD"; -})(dr || (dr = {})); -var rr; -(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"; -})(rr || (rr = {})); -function Sp(r, t8) { - return [t8, r]; +var fu; +(function(r15) { + r15[r15.DENSE = 0] = "DENSE", r15[r15.SHARED_BATCH = 1] = "SHARED_BATCH"; +})(fu || (fu = {})); +var mr; +(function(r15) { + r15[r15.RENDER = 0] = "RENDER", r15[r15.UPLOAD = 1] = "UPLOAD", r15[r15.PIXELS = 2] = "PIXELS", r15[r15.DOWNLOAD = 3] = "DOWNLOAD"; +})(mr || (mr = {})); +var er; +(function(r15) { + r15[r15.UNPACKED_FLOAT16 = 0] = "UNPACKED_FLOAT16", r15[r15.UNPACKED_FLOAT32 = 1] = "UNPACKED_FLOAT32", r15[r15.PACKED_4X1_UNSIGNED_BYTE = 2] = "PACKED_4X1_UNSIGNED_BYTE", r15[r15.PACKED_2X2_FLOAT32 = 3] = "PACKED_2X2_FLOAT32", r15[r15.PACKED_2X2_FLOAT16 = 4] = "PACKED_2X2_FLOAT16"; +})(er || (er = {})); +function fp(r15, t8) { + return [t8, r15]; } -function gR(r, t8) { - return r * t8; +function xR(r15, t8) { + return r15 * t8; } -function jl(r) { - let t8 = y.sizeFromShape(r), e = Math.ceil(t8 / 4); +function Kl(r15) { + let t8 = y.sizeFromShape(r15), e = Math.ceil(t8 / 4); return y.sizeToSquarishShape(e); } -function La(r, t8) { - return [Math.max(1, Math.ceil(t8 / 2)), Math.max(1, Math.ceil(r / 2))]; +function Ma(r15, t8) { + return [Math.max(1, Math.ceil(t8 / 2)), Math.max(1, Math.ceil(r15 / 2))]; } -function xR(r, t8) { - let [e, o] = La(r, t8); +function yR(r15, t8) { + let [e, o] = Ma(r15, t8); return e * o * 4; } -function Xl(r, t8) { - let e = r, o, n, s, a, i, p, u, c, l, m; - return A().getNumber("WEBGL_VERSION") === 2 ? (o = e.R32F, n = e.R16F, s = e.RGBA16F, a = e.RGBA32F, i = e.RED, u = 4, c = 1, l = e.HALF_FLOAT, m = e.FLOAT, p = e.RGBA8) : (o = r.RGBA, n = r.RGBA, s = r.RGBA, a = e.RGBA, i = r.RGBA, u = 4, c = 4, l = t8 != null ? t8.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 ql(r15, t8) { + let e = r15, o, n, s, a, i, p, u, c, l, m; + return A().getNumber("WEBGL_VERSION") === 2 ? (o = e.R32F, n = e.R16F, s = e.RGBA16F, a = e.RGBA32F, i = e.RED, u = 4, c = 1, l = e.HALF_FLOAT, m = e.FLOAT, p = e.RGBA8) : (o = r15.RGBA, n = r15.RGBA, s = r15.RGBA, a = e.RGBA, i = r15.RGBA, u = 4, c = 4, l = t8 != null ? t8.HALF_FLOAT_OES : null, m = r15.FLOAT, p = r15.RGBA), { internalFormatFloat: o, internalFormatHalfFloat: n, internalFormatPackedHalfFloat: s, internalFormatPackedFloat: a, textureFormatFloat: i, downloadTextureFormat: p, downloadUnpackNumChannels: u, defaultNumChannels: c, textureTypeHalfFloat: l, textureTypeFloat: m }; } -function ce(r, t8) { +function ce(r15, t8) { let e = t8(); - return A().getBool("DEBUG") && Y7(r), e; + return A().getBool("DEBUG") && Y7(r15), e; } -function Y7(r) { - let t8 = r.getError(); - if (t8 !== r.NO_ERROR) - throw new Error("WebGL Error: " + yR(r, t8)); +function Y7(r15) { + let t8 = r15.getError(); + if (t8 !== r15.NO_ERROR) + throw new Error("WebGL Error: " + bR(r15, t8)); } var Q7 = 596e-10; var Z7 = 65504; -function TI(r) { - return !!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r === 0 || Q7 < Math.abs(r) && Math.abs(r) < Z7); +function _I(r15) { + return !!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r15 === 0 || Q7 < Math.abs(r15) && Math.abs(r15) < Z7); } -function yR(r, t8) { +function bR(r15, t8) { switch (t8) { - case r.NO_ERROR: + case r15.NO_ERROR: return "NO_ERROR"; - case r.INVALID_ENUM: + case r15.INVALID_ENUM: return "INVALID_ENUM"; - case r.INVALID_VALUE: + case r15.INVALID_VALUE: return "INVALID_VALUE"; - case r.INVALID_OPERATION: + case r15.INVALID_OPERATION: return "INVALID_OPERATION"; - case r.INVALID_FRAMEBUFFER_OPERATION: + case r15.INVALID_FRAMEBUFFER_OPERATION: return "INVALID_FRAMEBUFFER_OPERATION"; - case r.OUT_OF_MEMORY: + case r15.OUT_OF_MEMORY: return "OUT_OF_MEMORY"; - case r.CONTEXT_LOST_WEBGL: + case r15.CONTEXT_LOST_WEBGL: return "CONTEXT_LOST_WEBGL"; default: return `Unknown error code ${t8}`; } } -function Ec(r, t8) { - return xi(r, () => r.getExtension(t8), 'Extension "' + t8 + '" not supported on this browser.'); +function vc(r15, t8) { + return fi(r15, () => r15.getExtension(t8), 'Extension "' + t8 + '" not supported on this browser.'); } -function _I(r, t8) { - let e = xi(r, () => r.createShader(r.VERTEX_SHADER), "Unable to create vertex WebGLShader."); - if (ce(r, () => r.shaderSource(e, t8)), ce(r, () => r.compileShader(e)), r.getShaderParameter(e, r.COMPILE_STATUS) === false) - throw console.log(r.getShaderInfoLog(e)), new Error("Failed to compile vertex shader."); +function $I(r15, t8) { + let e = fi(r15, () => r15.createShader(r15.VERTEX_SHADER), "Unable to create vertex WebGLShader."); + if (ce(r15, () => r15.shaderSource(e, t8)), ce(r15, () => r15.compileShader(e)), r15.getShaderParameter(e, r15.COMPILE_STATUS) === false) + throw console.log(r15.getShaderInfoLog(e)), new Error("Failed to compile vertex shader."); return e; } -function $I(r, t8) { - let e = xi(r, () => r.createShader(r.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); - if (ce(r, () => r.shaderSource(e, t8)), ce(r, () => r.compileShader(e)), A().get("ENGINE_COMPILE_ONLY")) +function EI(r15, t8) { + let e = fi(r15, () => r15.createShader(r15.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); + if (ce(r15, () => r15.shaderSource(e, t8)), ce(r15, () => r15.compileShader(e)), A().get("ENGINE_COMPILE_ONLY")) return e; - if (r.getShaderParameter(e, r.COMPILE_STATUS) === false) - throw qf(t8, r.getShaderInfoLog(e)), new Error("Failed to compile fragment shader."); + if (r15.getShaderParameter(e, r15.COMPILE_STATUS) === false) + throw Kf(t8, r15.getShaderInfoLog(e)), new Error("Failed to compile fragment shader."); return e; } var J7 = /ERROR: [0-9]+:([0-9]+):/g; -function qf(r, t8) { +function Kf(r15, t8) { let e = J7.exec(t8); if (e == null) { - console.log(`Couldn't parse line number in error: ${t8}`), console.log(r); + console.log(`Couldn't parse line number in error: ${t8}`), console.log(r15); return; } - let o = +e[1], n = r.split(` + let o = +e[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); @@ -15464,245 +15465,245 @@ function qf(r, t8) { `)[0]), console.log(`%c ${y.rightPad(u[0], i)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"), console.log(c.join(` `)); } -function EI(r) { - return xi(r, () => r.createProgram(), "Unable to create WebGLProgram."); +function RI(r15) { + return fi(r15, () => r15.createProgram(), "Unable to create WebGLProgram."); } -function RI(r, t8) { - if (ce(r, () => r.linkProgram(t8)), !A().get("ENGINE_COMPILE_ONLY") && r.getProgramParameter(t8, r.LINK_STATUS) === false) - throw console.log(r.getProgramInfoLog(t8)), new Error("Failed to link vertex and fragment shaders."); +function DI(r15, t8) { + if (ce(r15, () => r15.linkProgram(t8)), !A().get("ENGINE_COMPILE_ONLY") && r15.getProgramParameter(t8, r15.LINK_STATUS) === false) + throw console.log(r15.getProgramInfoLog(t8)), new Error("Failed to link vertex and fragment shaders."); } -function Yl(r, t8) { - if (ce(r, () => r.validateProgram(t8)), r.getProgramParameter(t8, r.VALIDATE_STATUS) === false) - throw console.log(r.getProgramInfoLog(t8)), new Error("Shader program validation failed."); +function jl(r15, t8) { + if (ce(r15, () => r15.validateProgram(t8)), r15.getProgramParameter(t8, r15.VALIDATE_STATUS) === false) + throw console.log(r15.getProgramInfoLog(t8)), new Error("Shader program validation failed."); } -function DI(r, t8) { - let e = xi(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); - return ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, e)), ce(r, () => r.bufferData(r.ARRAY_BUFFER, t8, r.STATIC_DRAW)), e; +function AI(r15, t8) { + let e = fi(r15, () => r15.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, e)), ce(r15, () => r15.bufferData(r15.ARRAY_BUFFER, t8, r15.STATIC_DRAW)), e; } -function AI(r, t8) { - let e = xi(r, () => r.createBuffer(), "Unable to create WebGLBuffer"); - return ce(r, () => r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, e)), ce(r, () => r.bufferData(r.ELEMENT_ARRAY_BUFFER, t8, r.STATIC_DRAW)), e; +function FI(r15, t8) { + let e = fi(r15, () => r15.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r15, () => r15.bindBuffer(r15.ELEMENT_ARRAY_BUFFER, e)), ce(r15, () => r15.bufferData(r15.ELEMENT_ARRAY_BUFFER, t8, r15.STATIC_DRAW)), e; } function eZ() { return A().getNumber("WEBGL_VERSION") === 2 ? 1 : 4; } -function FI(r) { - return xi(r, () => r.createTexture(), "Unable to create WebGLTexture."); +function PI(r15) { + return fi(r15, () => r15.createTexture(), "Unable to create WebGLTexture."); } -function PI(r, t8) { +function OI(r15, t8) { let e = A().getNumber("WEBGL_MAX_TEXTURE_SIZE"); - if (r <= 0 || t8 <= 0) { - let o = `[${r}x${t8}]`; + if (r15 <= 0 || t8 <= 0) { + let o = `[${r15}x${t8}]`; throw new Error("Requested texture size " + o + " is invalid."); } - if (r > e || t8 > e) { - let o = `[${r}x${t8}]`, n = `[${e}x${e}]`; + if (r15 > e || t8 > e) { + let o = `[${r15}x${t8}]`, n = `[${e}x${e}]`; throw new Error("Requested texture size " + o + " greater than WebGL maximum on this browser / GPU " + n + "."); } } -function OI(r) { - return xi(r, () => r.createFramebuffer(), "Unable to create WebGLFramebuffer."); +function MI(r15) { + return fi(r15, () => r15.createFramebuffer(), "Unable to create WebGLFramebuffer."); } -function jf(r, t8, e, o, n, s, a) { - let i = r.getAttribLocation(t8, e); - return i === -1 ? false : (ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, o)), ce(r, () => r.vertexAttribPointer(i, n, r.FLOAT, false, s, a)), ce(r, () => r.enableVertexAttribArray(i)), true); +function qf(r15, t8, e, o, n, s, a) { + let i = r15.getAttribLocation(t8, e); + return i === -1 ? false : (ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, o)), ce(r15, () => r15.vertexAttribPointer(i, n, r15.FLOAT, false, s, a)), ce(r15, () => r15.enableVertexAttribArray(i)), true); } -function bR(r, t8, e) { - wR(r, e), ce(r, () => r.activeTexture(r.TEXTURE0 + e)), ce(r, () => r.bindTexture(r.TEXTURE_2D, t8)); +function CR(r15, t8, e) { + SR(r15, e), ce(r15, () => r15.activeTexture(r15.TEXTURE0 + e)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, t8)); } -function tZ(r, t8) { - wR(r, t8), ce(r, () => r.activeTexture(r.TEXTURE0 + t8)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); +function tZ(r15, t8) { + SR(r15, t8), ce(r15, () => r15.activeTexture(r15.TEXTURE0 + t8)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function MI(r, t8, e) { - return xi(r, () => r.getUniformLocation(t8, e), 'uniform "' + e + '" not present in program.'); +function LI(r15, t8, e) { + return fi(r15, () => r15.getUniformLocation(t8, e), 'uniform "' + e + '" not present in program.'); } -function LI(r, t8, e) { - return r.getUniformLocation(t8, e); +function BI(r15, t8, e) { + return r15.getUniformLocation(t8, e); } -function BI(r, t8, e, o) { - ce(r, () => bR(r, t8, o)), ce(r, () => r.uniform1i(e, o)); +function zI(r15, t8, e, o) { + ce(r15, () => CR(r15, t8, o)), ce(r15, () => r15.uniform1i(e, o)); } -function rZ(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 rZ(r15) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, null)), ce(r15, () => r15.viewport(0, 0, r15.canvas.width, r15.canvas.height)), ce(r15, () => r15.scissor(0, 0, r15.canvas.width, r15.canvas.height)); } -function Ql(r, t8, e) { - ce(r, () => r.bindFramebuffer(r.FRAMEBUFFER, e)), ce(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, t8, 0)); +function Xl(r15, t8, e) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, e)), ce(r15, () => r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, t8, 0)); } -function Xf(r, t8) { - ce(r, () => r.bindFramebuffer(r.FRAMEBUFFER, t8)), ce(r, () => r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, null, 0)); +function jf(r15, t8) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, t8)), ce(r15, () => r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, null, 0)); } -function Rc(r) { - let t8 = r.checkFramebufferStatus(r.FRAMEBUFFER); - if (t8 !== r.FRAMEBUFFER_COMPLETE) - throw new Error("Error binding framebuffer: " + CR(r, t8)); +function kc(r15) { + let t8 = r15.checkFramebufferStatus(r15.FRAMEBUFFER); + if (t8 !== r15.FRAMEBUFFER_COMPLETE) + throw new Error("Error binding framebuffer: " + wR(r15, t8)); } -function CR(r, t8) { +function wR(r15, t8) { switch (t8) { - case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + case r15.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; - case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + case r15.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; - case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + case r15.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; - case r.FRAMEBUFFER_UNSUPPORTED: + case r15.FRAMEBUFFER_UNSUPPORTED: return "FRAMEBUFFER_UNSUPPORTED"; default: return `unknown error ${t8}`; } } -function xi(r, t8, e) { - let o = ce(r, () => t8()); +function fi(r15, t8, e) { + let o = ce(r15, () => t8()); if (o == null) throw new Error(e); return o; } -function wR(r, t8) { - let e = r.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = t8 + r.TEXTURE0; - if (o < r.TEXTURE0 || o > e) { +function SR(r15, t8) { + let e = r15.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = t8 + r15.TEXTURE0; + if (o < r15.TEXTURE0 || o > e) { let n = `[gl.TEXTURE0, gl.TEXTURE${e}]`; throw new Error(`textureUnit must be in ${n}.`); } } -function yi(r, t8 = 2) { - return y.sizeFromShape(r.slice(0, r.length - t8)); +function hi(r15, t8 = 2) { + return y.sizeFromShape(r15.slice(0, r15.length - t8)); } -function bi(r) { - if (r.length === 0) +function gi(r15) { + if (r15.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]]; + return [r15.length > 1 ? r15[r15.length - 2] : 1, r15[r15.length - 1]]; } -function Dc(r) { +function Nc(r15) { let t8 = [1, 1, 1]; - return r.length === 0 || r.length === 1 && r[0] === 1 || (t8 = [yi(r), ...bi(r)]), t8; + return r15.length === 0 || r15.length === 1 && r15[0] === 1 || (t8 = [hi(r15), ...gi(r15)]), t8; } -function zI(r, t8 = false) { +function VI(r15, t8 = false) { let e = 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 = e / 2), t8 && (e = e * 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 <= e ? s = [1, n] : r.length === 2 && r[0] <= e && r[1] <= e ? s = r : r.length === 3 && r[0] * r[1] <= e && r[2] <= e ? s = [r[0] * r[1], r[2]] : r.length === 3 && r[0] <= e && r[1] * r[2] <= e ? s = [r[0], r[1] * r[2]] : r.length === 4 && r[0] * r[1] * r[2] <= e && r[3] <= e ? s = [r[0] * r[1] * r[2], r[3]] : r.length === 4 && r[0] <= e && r[1] * r[2] * r[3] <= e && (s = [r[0], r[1] * r[2] * r[3]]); + o === 1 / 0 && A().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE") && (o = e / 2), t8 && (e = e * 2, o = o * 2, r15 = r15.map((i, p) => p >= r15.length - 2 ? y.nearestLargerEven(r15[p]) : r15[p]), r15.length === 1 && (r15 = [2, r15[0]])), r15.length !== 2 && (r15 = y.squeezeShape(r15).newShape); + let n = y.sizeFromShape(r15), s = null; + r15.length <= 1 && n <= e ? s = [1, n] : r15.length === 2 && r15[0] <= e && r15[1] <= e ? s = r15 : r15.length === 3 && r15[0] * r15[1] <= e && r15[2] <= e ? s = [r15[0] * r15[1], r15[2]] : r15.length === 3 && r15[0] <= e && r15[1] * r15[2] <= e ? s = [r15[0], r15[1] * r15[2]] : r15.length === 4 && r15[0] * r15[1] * r15[2] <= e && r15[3] <= e ? s = [r15[0] * r15[1] * r15[2], r15[3]] : r15.length === 4 && r15[0] <= e && r15[1] * r15[2] * r15[3] <= e && (s = [r15[0], r15[1] * r15[2] * r15[3]]); let a = s != null && Math.max(...s) > o && Math.min(...s) <= (t8 ? 2 : 1) && Math.min(...s) > 0; if (s == null || a) if (t8) { - let i = yi(r), p = 2, u = 2; - r.length && ([p, u] = bi(r)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((c) => c * 2); + let i = hi(r15), p = 2, u = 2; + r15.length && ([p, u] = gi(r15)), 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 Uf(r15) { + return r15 % 2 === 0; } -function Cu(r, t8) { - if (r = r.slice(-2), t8 = t8.slice(-2), y.arraysEqual(r, t8) || !r.length || !t8.length || r[0] === 0 || r[1] === 0 || t8[0] === 0 || t8[1] === 0) +function hu(r15, t8) { + if (r15 = r15.slice(-2), t8 = t8.slice(-2), y.arraysEqual(r15, t8) || !r15.length || !t8.length || r15[0] === 0 || r15[1] === 0 || t8[0] === 0 || t8[1] === 0) return true; - if (r.length !== t8.length) { - let e = r[r.length - 1], o = t8[t8.length - 1]; - if (e === o || Gf(e) && Gf(o) && (r[0] === 1 || t8[0] === 1)) + if (r15.length !== t8.length) { + let e = r15[r15.length - 1], o = t8[t8.length - 1]; + if (e === o || Uf(e) && Uf(o) && (r15[0] === 1 || t8[0] === 1)) return true; } - return r[1] === t8[1] && Gf(r[0]) && Gf(t8[0]); + return r15[1] === t8[1] && Uf(r15[0]) && Uf(t8[0]); } +var Gf; var Hf; -var Kf; -function VI(r) { - if (Hf == null) { - let t8 = Kr(r); - Hf = t8.getParameter(t8.MAX_TEXTURE_SIZE); +function WI(r15) { + if (Gf == null) { + let t8 = Hr(r15); + Gf = t8.getParameter(t8.MAX_TEXTURE_SIZE); } - return Hf; + return Gf; } function oZ() { - Hf = null; + Gf = null; } function nZ() { - Kf = null; + Hf = null; } -function WI(r) { - if (Kf == null) { - let t8 = Kr(r); - Kf = t8.getParameter(t8.MAX_TEXTURE_IMAGE_UNITS); +function UI(r15) { + if (Hf == null) { + let t8 = Hr(r15); + Hf = t8.getParameter(t8.MAX_TEXTURE_IMAGE_UNITS); } - return Math.min(16, Kf); + return Math.min(16, Hf); } -function UI(r) { - if (r === 0) +function GI(r15) { + if (r15 === 0) return 0; - let t8, e = Kr(r); - return qr(e, "EXT_disjoint_timer_query_webgl2") && r === 2 ? t8 = 2 : qr(e, "EXT_disjoint_timer_query") ? t8 = 1 : t8 = 0, t8; + let t8, e = Hr(r15); + return Kr(e, "EXT_disjoint_timer_query_webgl2") && r15 === 2 ? t8 = 2 : Kr(e, "EXT_disjoint_timer_query") ? t8 = 1 : t8 = 0, t8; } -function qr(r, t8) { - return r.getExtension(t8) != null; +function Kr(r15, t8) { + return r15.getExtension(t8) != null; } -function Yf(r) { +function Xf(r15) { try { - if (Kr(r) != null) + if (Hr(r15) != null) return true; } catch (t8) { return console.log("Error when getting WebGL context: ", t8), false; } return false; } -function GI(r) { - if (r === 0) +function HI(r15) { + if (r15 === 0) return false; - let t8 = Kr(r); - if (r === 1) { - if (!qr(t8, "OES_texture_float")) + let t8 = Hr(r15); + if (r15 === 1) { + if (!Kr(t8, "OES_texture_float")) return false; - } else if (!qr(t8, "EXT_color_buffer_float")) + } else if (!Kr(t8, "EXT_color_buffer_float")) return false; - return NI(t8); + return TI(t8); } -function HI(r) { - if (r === 0) +function KI(r15) { + if (r15 === 0) return false; - let t8 = Kr(r); - if (r === 1) { - if (!qr(t8, "OES_texture_float") || !qr(t8, "WEBGL_color_buffer_float")) + let t8 = Hr(r15); + if (r15 === 1) { + if (!Kr(t8, "OES_texture_float") || !Kr(t8, "WEBGL_color_buffer_float")) return false; } else { - if (qr(t8, "EXT_color_buffer_float")) - return NI(t8); + if (Kr(t8, "EXT_color_buffer_float")) + return TI(t8); let o = "EXT_color_buffer_half_float"; - if (qr(t8, o)) { + if (Kr(t8, o)) { let n = t8.getExtension(o); return sZ(t8, n); } return false; } - return NI(t8); + return TI(t8); } -function NI(r) { - let t8 = Xl(r), e = r.createTexture(); - r.bindTexture(r.TEXTURE_2D, e); +function TI(r15) { + let t8 = ql(r15), e = r15.createTexture(); + r15.bindTexture(r15.TEXTURE_2D, e); let o = 1, n = 1; - r.texImage2D(r.TEXTURE_2D, 0, t8.internalFormatFloat, o, n, 0, t8.textureFormatFloat, t8.textureTypeFloat, null); - let s = r.createFramebuffer(); - r.bindFramebuffer(r.FRAMEBUFFER, s), r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, e, 0); - let a = r.checkFramebufferStatus(r.FRAMEBUFFER) === r.FRAMEBUFFER_COMPLETE; - return r.bindTexture(r.TEXTURE_2D, null), r.bindFramebuffer(r.FRAMEBUFFER, null), r.deleteTexture(e), r.deleteFramebuffer(s), a; + r15.texImage2D(r15.TEXTURE_2D, 0, t8.internalFormatFloat, o, n, 0, t8.textureFormatFloat, t8.textureTypeFloat, null); + let s = r15.createFramebuffer(); + r15.bindFramebuffer(r15.FRAMEBUFFER, s), r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, e, 0); + let a = r15.checkFramebufferStatus(r15.FRAMEBUFFER) === r15.FRAMEBUFFER_COMPLETE; + return r15.bindTexture(r15.TEXTURE_2D, null), r15.bindFramebuffer(r15.FRAMEBUFFER, null), r15.deleteTexture(e), r15.deleteFramebuffer(s), a; } -function sZ(r, t8) { - let e = Xl(r, t8), o = r.createTexture(); - r.bindTexture(r.TEXTURE_2D, o); +function sZ(r15, t8) { + let e = ql(r15, t8), o = r15.createTexture(); + r15.bindTexture(r15.TEXTURE_2D, o); let n = 1, s = 1; - r.texImage2D(r.TEXTURE_2D, 0, e.internalFormatHalfFloat, n, s, 0, e.textureFormatFloat, e.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; + r15.texImage2D(r15.TEXTURE_2D, 0, e.internalFormatHalfFloat, n, s, 0, e.textureFormatFloat, e.textureTypeHalfFloat, null); + let a = r15.createFramebuffer(); + r15.bindFramebuffer(r15.FRAMEBUFFER, a), r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, o, 0); + let i = r15.checkFramebufferStatus(r15.FRAMEBUFFER) === r15.FRAMEBUFFER_COMPLETE; + return r15.bindTexture(r15.TEXTURE_2D, null), r15.bindFramebuffer(r15.FRAMEBUFFER, null), r15.deleteTexture(o), r15.deleteFramebuffer(a), i; } -function KI(r) { - return r !== 2 ? false : Kr(r).fenceSync != null; +function qI(r15) { + return r15 !== 2 ? false : Hr(r15).fenceSync != null; } -function Vs(r, t8) { - Array.isArray(r) || (r = [r]), r.forEach((e) => { +function Vs(r15, t8) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((e) => { e != null && y.assert(e.dtype !== "complex64", () => `${t8} 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_VERSION", () => Xf(2) ? 2 : Xf(1) ? 1 : 0); Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS", () => false); Se.registerFlag("WEBGL_BUFFER_SUPPORTED", () => Se.get("WEBGL_VERSION") === 2); Se.registerFlag("WEBGL_CPU_FORWARD", () => true); @@ -15719,29 +15720,29 @@ 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", () => VI(Se.getNumber("WEBGL_VERSION"))); -Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => WI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => WI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => UI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", () => { - let r = Se.getNumber("WEBGL_VERSION"); - return r === 0 ? 0 : UI(r); + let r15 = Se.getNumber("WEBGL_VERSION"); + return r15 === 0 ? 0 : GI(r15); }); -Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !ou.isMobile()); -Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => GI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !Ji.isMobile()); +Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => HI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED", () => Se.getBool("WEBGL_FORCE_F16_TEXTURES") ? false : Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")); -Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => HI(Se.getNumber("WEBGL_VERSION"))); -Se.registerFlag("WEBGL_FENCE_API_ENABLED", () => KI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => KI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_FENCE_API_ENABLED", () => qI(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_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}.`); }); -Se.registerFlag("WEBGL_FLUSH_THRESHOLD", () => ou.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("WEBGL_FLUSH_THRESHOLD", () => Ji.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}.`); }); Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD", () => 128); Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS", () => false); @@ -15753,9 +15754,9 @@ Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE", () => 1 / 0); Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE", () => false); Se.registerFlag("WEBGL2_ISNAN_CUSTOM", () => false); Se.registerFlag("ENGINE_COMPILE_ONLY", () => false); -function vt() { - let r, t8, e, o, n, s, a, i, p, u; - return A().getNumber("WEBGL_VERSION") === 2 ? (r = "#version 300 es", t8 = "in", e = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = A().getBool("WEBGL2_ISNAN_CUSTOM") ? ` +function It() { + let r15, t8, e, o, n, s, a, i, p, u; + return A().getNumber("WEBGL_VERSION") === 2 ? (r15 = "#version 300 es", t8 = "in", e = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = A().getBool("WEBGL2_ISNAN_CUSTOM") ? ` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -15776,7 +15777,7 @@ function vt() { ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `) : (r = "", t8 = "attribute", e = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` + `) : (r15 = "", t8 = "attribute", e = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; @@ -15801,52 +15802,52 @@ function vt() { ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `), { version: r, attribute: t8, varyingVs: e, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; + `), { version: r15, attribute: t8, varyingVs: e, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; } -function Ws(r, t8, e = "index") { +function Ws(r15, t8, e = "index") { let o = y.computeStrides(t8); return o.map((n, s) => { - let a = `int ${r[s]} = ${e} / ${n}`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${e} - ${r[s]} * ${n}` : `index -= ${r[s]} * ${n}`; + let a = `int ${r15[s]} = ${e} / ${n}`, i = s === o.length - 1 ? `int ${r15[s + 1]} = ${e} - ${r15[s]} * ${n}` : `index -= ${r15[s]} * ${n}`; return `${a}; ${i};`; }).join(""); } -function Ip(r, t8, e = "index") { +function hp(r15, t8, e = "index") { let o = y.computeStrides(t8); return o.map((n, s) => { - let a = `int ${r[s]} = ${e} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r[s + 1]} = ${e} - ${r[s]} * outShapeStrides[${s}]` : `index -= ${r[s]} * outShapeStrides[${s}]`; + let a = `int ${r15[s]} = ${e} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r15[s + 1]} = ${e} - ${r15[s]} * outShapeStrides[${s}]` : `index -= ${r15[s]} * outShapeStrides[${s}]`; return `${a}; ${i};`; }).join(""); } -function aZ(r, t8) { - let e = r.length, o = r.map((s) => `${t8}[${s}]`), n = new Array(e - 1); +function aZ(r15, t8) { + let e = r15.length, o = r15.map((s) => `${t8}[${s}]`), n = new Array(e - 1); n[e - 2] = o[e - 1]; for (let s = e - 3; s >= 0; --s) n[s] = `(${n[s + 1]} * ${o[s + 1]})`; return n; } -function SR(r, t8, e = "index") { - let o = r.map((s, a) => a), n = aZ(o, t8); +function IR(r15, t8, e = "index") { + let o = r15.map((s, a) => a), n = aZ(o, t8); return n.map((s, a) => { - let i = `int ${r[a]} = ${e} / ${n[a]}`, p = a === n.length - 1 ? `int ${r[a + 1]} = ${e} - ${r[a]} * ${n[a]}` : `index -= ${r[a]} * ${n[a]}`; + let i = `int ${r15[a]} = ${e} / ${n[a]}`, p = a === n.length - 1 ? `int ${r15[a + 1]} = ${e} - ${r15[a]} * ${n[a]}` : `index -= ${r15[a]} * ${n[a]}`; return `${i}; ${p};`; }).join(""); } -function Fc(r) { - let t8 = y.computeStrides(r).map((e) => e.toString()); +function _c(r15) { + let t8 = y.computeStrides(r15).map((e) => e.toString()); return ` int getFlatIndex(ivec3 coords) { return coords.x * ${t8[0]} + coords.y * ${t8[1]} + coords.z; } `; } -function Pc() { +function $c() { return ` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `; } -var Qf = ` +var Yf = ` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -15886,13 +15887,13 @@ var Qf = ` return c / 255.0; } `; -var { getBroadcastDims: IR } = w; -function vR(r, t8, e) { +var { getBroadcastDims: vR } = w; +function kR(r15, t8, e) { let o = []; - if (r.forEach((d) => { + if (r15.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};`)), e.enableShapeUniforms) { - let { uniformShape: h } = Zf(e.packedInputs, d.shapeInfo.logicalShape, d.shapeInfo.texShape); + let { uniformShape: h } = Qf(e.packedInputs, d.shapeInfo.logicalShape, d.shapeInfo.texShape); switch (h.length) { case 1: o.push(`uniform int ${d.name}Shape;`); @@ -15934,114 +15935,114 @@ function vR(r, t8, e) { o.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ""};`); }); let n = o.join(` -`), s = r.map((d) => iZ(d, t8, e.packedInputs, e.enableShapeUniforms)).join(` -`), a = t8.texShape, i = vt(), p = cZ(i), u, c, l = dZ(i); +`), s = r15.map((d) => iZ(d, t8, e.packedInputs, e.enableShapeUniforms)).join(` +`), a = t8.texShape, i = It(), p = cZ(i), u, c, l = dZ(i); return t8.isPacked ? (u = uZ(t8.logicalShape, a, e.enableShapeUniforms), c = mZ(i)) : (u = pZ(t8.logicalShape, a, e.enableShapeUniforms), c = lZ(i)), e.packedInputs && (l += xZ), [l, p, c, n, u, s, e.userCode].join(` `); } -function Mc(r, t8 = false) { - let e = r.shapeInfo.logicalShape; +function Rc(r15, t8 = false) { + let e = r15.shapeInfo.logicalShape; switch (e.length) { case 0: - return $Z(r, t8); + return $Z(r15, t8); case 1: - return RZ(r, t8); + return RZ(r15, t8); case 2: - return AZ(r, t8); + return AZ(r15, t8); case 3: - return PZ(r, t8); + return PZ(r15, t8); case 4: - return MZ(r, t8); + return MZ(r15, t8); case 5: - return LZ(r); + return LZ(r15); case 6: - return BZ(r); + return BZ(r15); default: throw new Error(`${e.length}-D input sampling is not yet supported`); } } -function kR(r, t8) { - switch (r.shapeInfo.logicalShape.length) { +function NR(r15, t8) { + switch (r15.shapeInfo.logicalShape.length) { case 0: - return _Z(r); + return _Z(r15); case 1: - return EZ(r, t8); + return EZ(r15, t8); case 2: - return DZ(r, t8); + return DZ(r15, t8); case 3: - return FZ(r, t8); + return FZ(r15, t8); default: - return OZ(r, t8); + return OZ(r15, t8); } } -function iZ(r, t8, e = false, o) { +function iZ(r15, t8, e = false, o) { let n = ""; - e ? n += kR(r, o) : n += Mc(r, o); - let s = r.shapeInfo.logicalShape, a = t8.logicalShape; - return s.length <= a.length && (e ? n += zZ(r, t8) : n += VZ(r, t8)), n; + e ? n += NR(r15, o) : n += Rc(r15, o); + let s = r15.shapeInfo.logicalShape, a = t8.logicalShape; + return s.length <= a.length && (e ? n += zZ(r15, t8) : n += VZ(r15, t8)), n; } -function uZ(r, t8, e) { - switch (r.length) { +function uZ(r15, t8, e) { + switch (r15.length) { case 0: - return NR(); + return TR(); case 1: - return yZ(r, t8, e); + return yZ(r15, t8, e); case 2: - return NZ(r, t8, e); + return NZ(r15, t8, e); case 3: - return CZ(r, t8, e); + return CZ(r15, t8, e); default: - return SZ(r, t8, e); + return SZ(r15, t8, e); } } -function pZ(r, t8, e) { - switch (r.length) { +function pZ(r15, t8, e) { + switch (r15.length) { case 0: - return NR(); + return TR(); case 1: - return bZ(r, t8, e); + return bZ(r15, t8, e); case 2: - return TZ(r, t8, e); + return TZ(r15, t8, e); case 3: - return wZ(r, t8, e); + return wZ(r15, t8, e); case 4: - return IZ(r, t8, e); + return IZ(r15, t8, e); case 5: - return vZ(r, t8); + return vZ(r15, t8); case 6: - return kZ(r, t8); + return kZ(r15, t8); default: - throw new Error(`${r.length}-D output sampling is not yet supported`); + throw new Error(`${r15.length}-D output sampling is not yet supported`); } } -function cZ(r) { +function cZ(r15) { return ` float sampleTexture(sampler2D textureSampler, vec2 uv) { - return ${r.texture2D}(textureSampler, uv).r; + return ${r15.texture2D}(textureSampler, uv).r; } `; } -function lZ(r) { +function lZ(r15) { return ` void setOutput(float val) { - ${r.output} = vec4(val, 0, 0, 0); + ${r15.output} = vec4(val, 0, 0, 0); } `; } -function mZ(r) { +function mZ(r15) { return ` void setOutput(vec4 val) { - ${r.output} = val; + ${r15.output} = val; } `; } -function dZ(r) { - return `${r.version} +function dZ(r15) { + return `${r15.version} precision highp float; precision highp int; precision highp sampler2D; - ${r.varyingFs} vec2 resultUV; - ${r.defineOutput} + ${r15.varyingFs} vec2 resultUV; + ${r15.defineOutput} const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 @@ -16064,9 +16065,9 @@ function dZ(r) { }; uniform float NAN; - ${r.defineSpecialNaN} - ${r.defineSpecialInf} - ${r.defineRound} + ${r15.defineSpecialNaN} + ${r15.defineSpecialInf} + ${r15.defineRound} int imod(int x, int y) { return x - y * (x / y); @@ -16140,14 +16141,14 @@ var xZ = ` return modCoord == 0. ? frag.r : frag.g; } `; -function NR() { +function TR() { return ` int getOutputCoords() { return 0; } `; } -function yZ(r, t8, e) { +function yZ(r15, t8, e) { let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[1] / 2)]; return o[0] === 1 ? e ? ` int getOutputCoords() { @@ -16180,7 +16181,7 @@ function yZ(r, t8, e) { } `; } -function bZ(r, t8, e) { +function bZ(r15, t8, e) { return t8[0] === 1 ? e ? ` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); @@ -16211,7 +16212,7 @@ function bZ(r, t8, e) { } `; } -function CZ(r, t8, e) { +function CZ(r15, t8, e) { if (e) return ` ivec3 getOutputCoords() { @@ -16231,7 +16232,7 @@ function CZ(r, t8, e) { return ivec3(b, r, c); } `; - let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[1] / 2)], n = Math.ceil(r[2] / 2), s = n * Math.ceil(r[1] / 2); + let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[1] / 2)], n = Math.ceil(r15[2] / 2), s = n * Math.ceil(r15[1] / 2); return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16248,18 +16249,18 @@ function CZ(r, t8, e) { } `; } -function wZ(r, t8, e) { +function wZ(r15, t8, e) { if (e) return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r", "c", "d"], r)} + ${hp(["r", "c", "d"], r15)} return ivec3(r, c, d); } `; - let o = Ws(["r", "c", "d"], r); + let o = Ws(["r", "c", "d"], r15); return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16270,7 +16271,7 @@ function wZ(r, t8, e) { } `; } -function SZ(r, t8, e) { +function SZ(r15, t8, e) { if (e) return ` ivec4 getOutputCoords() { @@ -16295,14 +16296,14 @@ function SZ(r, t8, e) { return ivec4(b2, b, r, c); } `; - let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[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 < r.length - 1; u++) - a *= r[r.length - u - 1], i = ` + let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[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 = ` int b${u} = index / ${a}; index -= b${u} * ${a}; ` + i, p = `b${u}, ` + p; return ` - ivec${r.length} getOutputCoords() { + ivec${r15.length} getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${o[0]}, ${o[1]})); int index = resTexRC.x * ${o[1]} + resTexRC.y; @@ -16315,22 +16316,22 @@ function SZ(r, t8, e) { int r = 2 * (index / ${n}); int c = imod(index, ${n}) * 2; - return ivec${r.length}(${p}); + return ivec${r15.length}(${p}); } `; } -function IZ(r, t8, e) { +function IZ(r15, t8, e) { if (e) return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r", "c", "d", "d2"], r)} + ${hp(["r", "c", "d", "d2"], r15)} return ivec4(r, c, d, d2); } `; - let o = Ws(["r", "c", "d", "d2"], r); + let o = Ws(["r", "c", "d", "d2"], r15); return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16341,8 +16342,8 @@ function IZ(r, t8, e) { } `; } -function vZ(r, t8) { - let e = Ws(["r", "c", "d", "d2", "d3"], r); +function vZ(r15, t8) { + let e = Ws(["r", "c", "d", "d2", "d3"], r15); return ` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t8[0]}, @@ -16357,8 +16358,8 @@ function vZ(r, t8) { } `; } -function kZ(r, t8) { - let e = Ws(["r", "c", "d", "d2", "d3", "d4"], r); +function kZ(r15, t8) { + let e = Ws(["r", "c", "d", "d2", "d3", "d4"], r15); return ` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16372,9 +16373,9 @@ function kZ(r, t8) { } `; } -function NZ(r, t8, e) { +function NZ(r15, t8, e) { let o = [Math.ceil(t8[0] / 2), Math.ceil(t8[1] / 2)]; - if (y.arraysEqual(r, t8)) + if (y.arraysEqual(r15, t8)) return e ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -16385,7 +16386,7 @@ function NZ(r, t8, e) { return 2 * ivec2(resultUV.yx * vec2(${o[0]}, ${o[1]})); } `; - let n = Math.ceil(r[1] / 2); + let n = Math.ceil(r15[1] / 2); return e ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -16412,8 +16413,8 @@ function NZ(r, t8, e) { } `; } -function TZ(r, t8, e) { - return y.arraysEqual(r, t8) ? e ? ` +function TZ(r15, t8, e) { + return y.arraysEqual(r15, t8) ? e ? ` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -16421,7 +16422,7 @@ function TZ(r, t8, e) { ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(${t8[0]}, ${t8[1]})); } - ` : r[1] === 1 ? e ? ` + ` : r15[1] === 1 ? e ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16435,7 +16436,7 @@ function TZ(r, t8, e) { int index = resTexRC.x * ${t8[1]} + resTexRC.y; return ivec2(index, 0); } - ` : r[0] === 1 ? e ? ` + ` : r15[0] === 1 ? e ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16463,35 +16464,35 @@ function TZ(r, t8, e) { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t8[0]}, ${t8[1]})); int index = resTexRC.x * ${t8[1]} + resTexRC.y; - int r = index / ${r[1]}; - int c = index - r * ${r[1]}; + int r = index / ${r15[1]}; + int c = index - r * ${r15[1]}; return ivec2(r, c); } `; } -function vp(r) { - return `offset${r}`; +function gp(r15) { + return `offset${r15}`; } -function _Z(r) { - let t8 = r.name, e = "get" + t8.charAt(0).toUpperCase() + t8.slice(1), o = vt(); +function _Z(r15) { + let t8 = r15.name, e = "get" + t8.charAt(0).toUpperCase() + t8.slice(1), o = It(); return ` vec4 ${e}() { return ${o.texture2D}(${t8}, halfCR); } `; } -function $Z(r, t8) { - let e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1); - if (r.shapeInfo.isUniform) +function $Z(r15, t8) { + let e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1); + if (r15.shapeInfo.isUniform) return `float ${o}() {return ${e};}`; - let [n, s] = r.shapeInfo.texShape; + let [n, s] = r15.shapeInfo.texShape; if (n === 1 && s === 1) return ` float ${o}() { return sampleTexture(${e}, halfCR); } `; - let a = vp(e); + let a = gp(e); if (t8) return ` float ${o}() { @@ -16499,7 +16500,7 @@ function $Z(r, t8) { return sampleTexture(${e}, uv); } `; - let [i, p] = r.shapeInfo.texShape; + let [i, p] = r15.shapeInfo.texShape; return ` float ${o}() { vec2 uv = uvFromFlat(${i}, ${p}, ${a}); @@ -16507,8 +16508,8 @@ function $Z(r, t8) { } `; } -function EZ(r, t8) { - let e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = r.shapeInfo.texShape, s = vt(); +function EZ(r15, t8) { + let e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = r15.shapeInfo.texShape, s = It(); if (t8) return ` vec4 ${o}(int index) { @@ -16527,22 +16528,22 @@ function EZ(r, t8) { } `; } -function RZ(r, t8) { - let e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1); - if (r.shapeInfo.isUniform) +function RZ(r15, t8) { + let e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1); + if (r15.shapeInfo.isUniform) return ` float ${o}(int index) { - ${Lc(r)} + ${Dc(r15)} } `; - let n = r.shapeInfo.texShape, s = n[0], a = n[1]; + let n = r15.shapeInfo.texShape, s = n[0], a = n[1]; if (a === 1 && s === 1) return ` float ${o}(int index) { return sampleTexture(${e}, halfCR); } `; - let i = vp(e); + let i = gp(e); return a === 1 ? t8 ? ` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${e}TexShape[0])); @@ -16575,8 +16576,8 @@ function RZ(r, t8) { } `; } -function DZ(r, t8) { - let e = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = s[0], i = s[1], p = vt(); +function DZ(r15, t8) { + let e = 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(e, s)) return t8 ? ` vec4 ${n}(int row, int col) { @@ -16608,8 +16609,8 @@ function DZ(r, t8) { } `; } -function AZ(r, t8) { - let e = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape; +function AZ(r15, t8) { + let e = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape; if (s != null && y.arraysEqual(e, s)) { if (t8) return ` @@ -16628,22 +16629,22 @@ function AZ(r, t8) { } let { newShape: a, keptDims: i } = y.squeezeShape(e), p = a; if (p.length < e.length) { - let m = Bc(r, p), d = ["row", "col"]; + let m = Ac(r15, p), d = ["row", "col"]; return ` - ${Mc(m, t8)} + ${Rc(m, t8)} float ${n}(int row, int col) { - return ${n}(${zc(d, i)}); + return ${n}(${Fc(d, i)}); } `; } - if (r.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col) { int index = round(dot(vec2(row, col), vec2(${e[1]}, 1))); - ${Lc(r)} + ${Dc(r15)} } `; - let u = s[0], c = s[1], l = vp(o); + let u = s[0], c = s[1], l = gp(o); return c === 1 ? t8 ? ` float ${n}(int row, int col) { float index = dot(vec3(row, col, ${l}), vec3(${o}Shape[1], 1, 1)); @@ -16684,18 +16685,18 @@ function AZ(r, t8) { } `; } -function FZ(r, t8) { - let e = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; +function FZ(r15, t8) { + let e = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; if (e[0] === 1) { - let m = e.slice(1), d = [1, 2], f = Bc(r, m), h = ["b", "row", "col"]; + let m = e.slice(1), d = [1, 2], f = Ac(r15, m), h = ["b", "row", "col"]; return ` - ${kR(f, t8)} + ${NR(f, t8)} vec4 ${n}(int b, int row, int col) { - return ${n}(${zc(h, d)}); + return ${n}(${Fc(h, d)}); } `; } - let i = vt(); + let i = It(); if (t8) return ` vec4 ${n}(int b, int row, int col) { @@ -16716,26 +16717,26 @@ function FZ(r, t8) { } `; } -function PZ(r, t8) { - let e = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = e[1] * e[2], a = e[2], { newShape: i, keptDims: p } = y.squeezeShape(e), u = i; +function PZ(r15, t8) { + let e = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = e[1] * e[2], a = e[2], { newShape: i, keptDims: p } = y.squeezeShape(e), u = i; if (u.length < e.length) { - let h = Bc(r, u), g = ["row", "col", "depth"]; + let h = Ac(r15, u), g = ["row", "col", "depth"]; return ` - ${Mc(h, t8)} + ${Rc(h, t8)} float ${n}(int row, int col, int depth) { - return ${n}(${zc(g, p)}); + return ${n}(${Fc(g, p)}); } `; } - if (r.shapeInfo.isUniform) + 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))); - ${Lc(r)} + ${Dc(r15)} } `; - let c = r.shapeInfo.texShape, l = c[0], m = c[1], d = r.shapeInfo.flatOffset; + let c = r15.shapeInfo.texShape, l = c[0], m = c[1], d = r15.shapeInfo.flatOffset; if (m === s && d == null) return t8 ? ` float ${n}(int row, int col, int depth) { @@ -16771,7 +16772,7 @@ function PZ(r, t8) { return sampleTexture(${o}, uv); } `; - let f = vp(o); + let f = gp(o); return t8 ? ` float ${n}(int row, int col, int depth) { // Explicitly use integer operations as dot() only works on floats. @@ -16790,8 +16791,8 @@ function PZ(r, t8) { } `; } -function OZ(r, t8) { - let e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = vt(); +function OZ(r15, t8) { + let e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = It(); if (t8) return ` vec4 ${o}(int b2, int b, int row, int col) { @@ -16806,7 +16807,7 @@ function OZ(r, t8) { vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${n.texture2D}(${e}, uv); } `; - let s = r.shapeInfo.logicalShape, a = s.length, i = r.shapeInfo.texShape, p = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)], u = p[0], c = p[1], l = Math.ceil(s[a - 1] / 2), m = l * Math.ceil(s[a - 2] / 2), d = "int b, int row, int col", f = `b * ${m} + (row / 2) * ${l} + (col / 2)`; + 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; return ` @@ -16819,26 +16820,26 @@ function OZ(r, t8) { } `; } -function MZ(r, t8) { - let e = r.shapeInfo.logicalShape, o = r.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = e[3], a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(e); +function MZ(r15, t8) { + let e = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = e[3], a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(e); if (p.length < e.length) { - let b = Bc(r, p), C = ["row", "col", "depth", "depth2"]; + let b = Ac(r15, p), C = ["row", "col", "depth", "depth2"]; return ` - ${Mc(b, t8)} + ${Rc(b, t8)} float ${n}(int row, int col, int depth, int depth2) { - return ${n}(${zc(C, u)}); + return ${n}(${Fc(C, u)}); } `; } - if (r.shapeInfo.isUniform) + 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))); - ${Lc(r)} + ${Dc(r15)} } `; - let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], d = l[1], f = `int stride2 = ${o}Shape[3];`, h = `int stride1 = ${o}Shape[2] * stride2;`, g = `int stride0 = ${o}Shape[1] * stride1;`; + 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 t8 ? ` float ${n}(int row, int col, int depth, int depth2) { @@ -16883,7 +16884,7 @@ function MZ(r, t8) { return sampleTexture(${o}, uv); } `; - let x = vp(o); + let x = gp(o); return t8 ? ` float ${n}(int row, int col, int depth, int depth2) { // Explicitly use integer operations as dot() only works on floats. @@ -16905,28 +16906,28 @@ function MZ(r, t8) { } `; } -function LZ(r) { - let t8 = r.shapeInfo.logicalShape, e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = t8[4], s = t8[3] * n, a = t8[2] * s, i = t8[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(t8); +function LZ(r15) { + let t8 = r15.shapeInfo.logicalShape, e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), n = t8[4], s = t8[3] * n, a = t8[2] * s, i = t8[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(t8); if (p.length < t8.length) { - let h = Bc(r, p), g = ["row", "col", "depth", "depth2", "depth3"]; + let h = Ac(r15, p), g = ["row", "col", "depth", "depth2", "depth3"]; return ` - ${Mc(h)} + ${Rc(h)} float ${o}(int row, int col, int depth, int depth2, int depth3) { - return ${o}(${zc(g, u)}); + return ${o}(${Fc(g, u)}); } `; } - if (r.shapeInfo.isUniform) + 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), vec4(${i}, ${a}, ${s}, ${n})) + depth3; - ${Lc(r)} + ${Dc(r15)} } `; - let c = r.shapeInfo.flatOffset, l = r.shapeInfo.texShape, m = l[0], d = l[1]; + let c = r15.shapeInfo.flatOffset, l = r15.shapeInfo.texShape, m = l[0], d = l[1]; if (d === i && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { @@ -16951,7 +16952,7 @@ function LZ(r) { return sampleTexture(${e}, uv); } `; - let f = vp(e); + let f = gp(e); return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { // Explicitly use integer operations as dot() only works on floats. @@ -16962,20 +16963,20 @@ function LZ(r) { } `; } -function BZ(r) { - let t8 = r.shapeInfo.logicalShape, e = r.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), { newShape: n, keptDims: s } = y.squeezeShape(t8); +function BZ(r15) { + let t8 = r15.shapeInfo.logicalShape, e = r15.name, o = "get" + e.charAt(0).toUpperCase() + e.slice(1), { newShape: n, keptDims: s } = y.squeezeShape(t8); if (n.length < t8.length) { - let g = Bc(r, n), x = ["row", "col", "depth", "depth2", "depth3", "depth4"]; + let g = Ac(r15, n), x = ["row", "col", "depth", "depth2", "depth3", "depth4"]; return ` - ${Mc(g)} + ${Rc(g)} float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { - return ${o}(${zc(x, s)}); + return ${o}(${Fc(x, s)}); } `; } let a = t8[5], i = t8[4] * a, p = t8[3] * i, u = t8[2] * p, c = t8[1] * u; - if (r.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -16985,10 +16986,10 @@ function BZ(r) { dot( vec2(depth3, depth4), vec2(${a}, 1))); - ${Lc(r)} + ${Dc(r15)} } `; - let l = r.shapeInfo.flatOffset, m = r.shapeInfo.texShape, d = m[0], f = m[1]; + let l = r15.shapeInfo.flatOffset, m = r15.shapeInfo.texShape, d = m[0], f = m[1]; if (f === c && l == null) return ` float ${o}(int row, int col, int depth, @@ -17017,7 +17018,7 @@ function BZ(r) { return sampleTexture(${e}, uv); } `; - let h = vp(e); + let h = gp(e); return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -17029,8 +17030,8 @@ function BZ(r) { } `; } -function Lc(r) { - let t8 = r.name, e = y.sizeFromShape(r.shapeInfo.logicalShape); +function Dc(r15) { + let t8 = r15.name, e = y.sizeFromShape(r15.shapeInfo.logicalShape); return e < 2 ? `return ${t8};` : ` for (int i = 0; i < ${e}; i++) { if (i == index) { @@ -17039,13 +17040,13 @@ function Lc(r) { } `; } -function zZ(r, t8) { - let e = r.name, o = e.charAt(0).toUpperCase() + e.slice(1), n = "get" + o + "AtOutCoords", s = r.shapeInfo.logicalShape.length, a = t8.logicalShape.length, i = IR(r.shapeInfo.logicalShape, t8.logicalShape), p = Re(a), u = a - s, c, l = ["x", "y", "z", "w", "u", "v"]; +function zZ(r15, t8) { + let e = r15.name, o = e.charAt(0).toUpperCase() + e.slice(1), n = "get" + o + "AtOutCoords", s = r15.shapeInfo.logicalShape.length, a = t8.logicalShape.length, i = vR(r15.shapeInfo.logicalShape, t8.logicalShape), p = Re(a), u = a - s, c, l = ["x", "y", "z", "w", "u", "v"]; s === 0 ? c = "" : a < 2 && i.length >= 1 ? c = "coords = 0;" : c = i.map((b) => `coords.${l[b + u]} = 0;`).join(` `); let m = ""; - a < 2 && s > 0 ? m = "coords" : m = r.shapeInfo.logicalShape.map((b, C) => `coords.${l[C + u]}`).join(", "); - let d = "return outputValue;", h = y.sizeFromShape(r.shapeInfo.logicalShape) === 1, x = y.sizeFromShape(t8.logicalShape) === 1; + 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(t8.logicalShape) === 1; if (s === 1 && !h && !x) d = ` return vec4(outputValue.xy, outputValue.xy); @@ -17069,19 +17070,19 @@ function zZ(r, t8) { } `; } -function VZ(r, t8) { - let e = r.name, o = e.charAt(0).toUpperCase() + e.slice(1), n = "get" + o + "AtOutCoords", s = t8.texShape, a = r.shapeInfo.texShape, i = r.shapeInfo.logicalShape.length, p = t8.logicalShape.length; - if (!r.shapeInfo.isUniform && i === p && r.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) +function VZ(r15, t8) { + let e = r15.name, o = e.charAt(0).toUpperCase() + e.slice(1), n = "get" + o + "AtOutCoords", s = t8.texShape, a = r15.shapeInfo.texShape, i = r15.shapeInfo.logicalShape.length, p = t8.logicalShape.length; + if (!r15.shapeInfo.isUniform && i === p && r15.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) return ` float ${n}() { return sampleTexture(${e}, resultUV); } `; - let u = Re(p), c = IR(r.shapeInfo.logicalShape, t8.logicalShape), l = p - i, m, d = ["x", "y", "z", "w", "u", "v"]; + let u = Re(p), c = vR(r15.shapeInfo.logicalShape, t8.logicalShape), l = p - i, m, d = ["x", "y", "z", "w", "u", "v"]; i === 0 ? m = "" : p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((h) => `coords.${d[h + l]} = 0;`).join(` `); let f = ""; - return p < 2 && i > 0 ? f = "coords" : f = r.shapeInfo.logicalShape.map((h, g) => `coords.${d[g + l]}`).join(", "), ` + return p < 2 && i > 0 ? f = "coords" : f = r15.shapeInfo.logicalShape.map((h, g) => `coords.${d[g + l]}`).join(", "), ` float ${n}() { ${u} coords = getOutputCoords(); ${m} @@ -17089,56 +17090,56 @@ function VZ(r, t8) { } `; } -function Re(r) { - if (r <= 1) +function Re(r15) { + if (r15 <= 1) return "int"; - if (r === 2) + if (r15 === 2) return "ivec2"; - if (r === 3) + if (r15 === 3) return "ivec3"; - if (r === 4) + if (r15 === 4) return "ivec4"; - if (r === 5) + if (r15 === 5) return "ivec5"; - if (r === 6) + if (r15 === 6) return "ivec6"; - throw Error(`GPU for rank ${r} is not yet supported`); + throw Error(`GPU for rank ${r15} is not yet supported`); } -function Zf(r, t8, e) { - let { newShape: o, keptDims: n } = y.squeezeShape(t8), s = t8.length, a = r && s === 3 && t8[0] === 1, i = a ? t8.slice(1) : o, p = !r && s > 1 && !y.arraysEqual(t8, e) && o.length < s || a; +function Qf(r15, t8, e) { + let { newShape: o, keptDims: n } = y.squeezeShape(t8), s = t8.length, a = r15 && s === 3 && t8[0] === 1, i = a ? t8.slice(1) : o, p = !r15 && s > 1 && !y.arraysEqual(t8, e) && o.length < s || a; return { useSqueezeShape: p, uniformShape: p ? i : t8, keptDims: n }; } -function Bc(r, t8) { - let e = JSON.parse(JSON.stringify(r)); +function Ac(r15, t8) { + let e = JSON.parse(JSON.stringify(r15)); return e.shapeInfo.logicalShape = t8, e; } -function zc(r, t8) { - return t8.map((e) => r[e]).join(", "); +function Fc(r15, t8) { + return t8.map((e) => r15[e]).join(", "); } -function _R(r, t8, e, o) { +function $R(r15, t8, e, o) { let n = e.map((c, l) => { let m = { logicalShape: c.shape, texShape: c.isUniform ? null : c.texData.texShape, isUniform: c.isUniform, isPacked: c.isUniform ? false : c.texData.isPacked, flatOffset: null }; return c.texData != null && c.texData.slice != null && c.texData.slice.flatOffset > 0 && (m.flatOffset = c.texData.slice.flatOffset), { name: t8.variableNames[l], shapeInfo: m }; - }), s = n.map((c) => c.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = vR(n, a, t8), p = $I(r.gl, i), u = r.createProgram(p); - return A().get("ENGINE_COMPILE_ONLY") ? { program: t8, 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: t8, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, qI(r, t8, u))); + }), s = n.map((c) => c.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = kR(n, a, t8), p = EI(r15.gl, i), u = r15.createProgram(p); + return A().get("ENGINE_COMPILE_ONLY") ? { program: t8, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a, variablesLocations: null, customUniformLocations: null, infLoc: null, nanLoc: null, outShapeLocation: null, outShapeStridesLocation: null, outTexShapeLocation: null } : (r15.buildVao(u), Object.assign({ program: t8, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, jI(r15, t8, u))); } -function qI(r, t8, e) { +function jI(r15, t8, e) { let o = [], n = [], s, a, i, p = null, u = null; - u = r.getUniformLocation(e, "NAN", false), A().getNumber("WEBGL_VERSION") === 1 && (p = r.getUniformLocation(e, "INFINITY", false)); + u = r15.getUniformLocation(e, "NAN", false), A().getNumber("WEBGL_VERSION") === 1 && (p = r15.getUniformLocation(e, "INFINITY", false)); let c = false; for (let l of t8.variableNames) { - let m = { name: l, uniform: r.getUniformLocation(e, l, c), offset: r.getUniformLocation(e, `offset${l}`, c) }; - t8.enableShapeUniforms && (m.shape = r.getUniformLocation(e, `${l}Shape`, c), m.texShape = r.getUniformLocation(e, `${l}TexShape`, c)), o.push(m); + let m = { name: l, uniform: r15.getUniformLocation(e, l, c), offset: r15.getUniformLocation(e, `offset${l}`, c) }; + t8.enableShapeUniforms && (m.shape = r15.getUniformLocation(e, `${l}Shape`, c), m.texShape = r15.getUniformLocation(e, `${l}TexShape`, c)), o.push(m); } - if (t8.enableShapeUniforms && (s = r.getUniformLocation(e, "outShape", c), i = r.getUniformLocation(e, "outShapeStrides", c), a = r.getUniformLocation(e, "outTexShape", c)), t8.customUniforms) + if (t8.enableShapeUniforms && (s = r15.getUniformLocation(e, "outShape", c), i = r15.getUniformLocation(e, "outShapeStrides", c), a = r15.getUniformLocation(e, "outTexShape", c)), t8.customUniforms) for (let l of t8.customUniforms) - n.push(r.getUniformLocation(e, l.name, c)); + n.push(r15.getUniformLocation(e, l.name, c)); return { variablesLocations: o, customUniformLocations: n, infLoc: p, nanLoc: u, outShapeLocation: s, outShapeStridesLocation: i, outTexShapeLocation: a }; } -function TR(r, t8) { - if (r.length !== t8.length) - throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t8.length} inputs`); - r.forEach((e, o) => { +function _R(r15, t8) { + if (r15.length !== t8.length) + throw Error(`Binary was compiled with ${r15.length} inputs, but was executed with ${t8.length} inputs`); + r15.forEach((e, o) => { let n = e.logicalShape, s = t8[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`); @@ -17149,58 +17150,58 @@ function TR(r, t8) { throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`); }); } -function $R(r, t8, e, o, n) { - t8.program.enableShapeUniforms || (TR(t8.inShapeInfos, e), TR([t8.outShapeInfo], [o])); +function ER(r15, t8, e, o, n) { + t8.program.enableShapeUniforms || (_R(t8.inShapeInfos, e), _R([t8.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(t8.webGLProgram), r.bindVertexArray(t8.webGLProgram.vao), A().getNumber("WEBGL_VERSION") === 1 && t8.infLoc !== null && r.gl.uniform1f(t8.infLoc, 1 / 0), t8.nanLoc !== null && r.gl.uniform1f(t8.nanLoc, NaN); + o.texData.isPacked ? r15.setOutputPackedMatrixTexture(s.texture, a[0], a[1]) : r15.setOutputMatrixTexture(s.texture, a[0], a[1]), r15.setProgram(t8.webGLProgram), r15.bindVertexArray(t8.webGLProgram.vao), A().getNumber("WEBGL_VERSION") === 1 && t8.infLoc !== null && r15.gl.uniform1f(t8.infLoc, 1 / 0), t8.nanLoc !== null && r15.gl.uniform1f(t8.nanLoc, NaN); for (let p = 0; p < e.length; ++p) { let u = e[p], { uniform: c, offset: l, shape: m, texShape: d } = t8.variablesLocations[p]; if (m) { - let { uniformShape: f } = Zf(t8.program.packedInputs, u.shape, u.texData.texShape); + let { uniformShape: f } = Qf(t8.program.packedInputs, u.shape, u.texData.texShape); switch (f.length) { case 1: - r.gl.uniform1iv(m, new Int32Array(f)); + r15.gl.uniform1iv(m, new Int32Array(f)); break; case 2: - r.gl.uniform2iv(m, new Int32Array(f)); + r15.gl.uniform2iv(m, new Int32Array(f)); break; case 3: - r.gl.uniform3iv(m, new Int32Array(f)); + r15.gl.uniform3iv(m, new Int32Array(f)); break; case 4: - r.gl.uniform4iv(m, new Int32Array(f)); + r15.gl.uniform4iv(m, new Int32Array(f)); break; default: break; } } - if (d && r.gl.uniform2i(d, u.texData.texShape[0], u.texData.texShape[1]), c != null) { + 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) - r.gl.uniform1f(c, u.uniformValues[0]); + r15.gl.uniform1f(c, u.uniformValues[0]); else { let f = u.uniformValues; - f instanceof Float32Array || (f = new Float32Array(f)), r.gl.uniform1fv(c, f); + f instanceof Float32Array || (f = new Float32Array(f)), r15.gl.uniform1fv(c, f); } continue; } - u.texData.slice != null && l != null && r.gl.uniform1i(l, u.texData.slice.flatOffset), r.setInputMatrixTexture(u.texData.texture.texture, c, p); + u.texData.slice != null && l != null && r15.gl.uniform1i(l, u.texData.slice.flatOffset), r15.setInputMatrixTexture(u.texData.texture.texture, c, p); } } let i = t8.outShapeLocation; if (i) switch (o.shape.length) { case 1: - r.gl.uniform1iv(i, new Int32Array(o.shape)); + r15.gl.uniform1iv(i, new Int32Array(o.shape)); break; case 2: - r.gl.uniform2iv(i, new Int32Array(o.shape)); + r15.gl.uniform2iv(i, new Int32Array(o.shape)); break; case 3: - r.gl.uniform3iv(i, new Int32Array(o.shape)); + r15.gl.uniform3iv(i, new Int32Array(o.shape)); break; case 4: - r.gl.uniform4iv(i, new Int32Array(o.shape)); + r15.gl.uniform4iv(i, new Int32Array(o.shape)); break; default: break; @@ -17209,77 +17210,77 @@ function $R(r, t8, e, o, n) { let p = y.computeStrides(o.shape); switch (o.shape.length) { case 2: - r.gl.uniform1iv(t8.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform1iv(t8.outShapeStridesLocation, new Int32Array(p)); break; case 3: - r.gl.uniform2iv(t8.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform2iv(t8.outShapeStridesLocation, new Int32Array(p)); break; case 4: - r.gl.uniform3iv(t8.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform3iv(t8.outShapeStridesLocation, new Int32Array(p)); break; default: break; } } - if (t8.outTexShapeLocation && r.gl.uniform2i(t8.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), t8.program.customUniforms && n) + if (t8.outTexShapeLocation && r15.gl.uniform2i(t8.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), t8.program.customUniforms && n) for (let p = 0; p < t8.program.customUniforms.length; ++p) { let u = t8.program.customUniforms[p], c = t8.customUniformLocations[p], l = n[p]; if (u.type === "float") - r.gl.uniform1fv(c, l); + r15.gl.uniform1fv(c, l); else if (u.type === "vec2") - r.gl.uniform2fv(c, l); + r15.gl.uniform2fv(c, l); else if (u.type === "vec3") - r.gl.uniform3fv(c, l); + r15.gl.uniform3fv(c, l); else if (u.type === "vec4") - r.gl.uniform4fv(c, l); + r15.gl.uniform4fv(c, l); else if (u.type === "int") - r.gl.uniform1iv(c, l); + r15.gl.uniform1iv(c, l); else if (u.type === "ivec2") - r.gl.uniform2iv(c, l); + r15.gl.uniform2iv(c, l); else if (u.type === "ivec3") - r.gl.uniform3iv(c, l); + r15.gl.uniform3iv(c, l); else if (u.type === "ivec4") - r.gl.uniform4iv(c, l); + r15.gl.uniform4iv(c, l); else throw Error(`uniform type ${u.type} is not supported yet.`); } - r.executeProgram(); + r15.executeProgram(); } -function ER(r, t8, e) { +function RR(r15, t8, e) { let o = ""; t8.concat(e).forEach((a) => { let i = a.texData != null && a.texData.slice != null && a.texData.slice.flatOffset > 0; - if (r.enableShapeUniforms && !a.isUniform) { - let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: c, keptDims: l } = Zf(r.packedInputs, a.shape, p), m = "", d = "", f = ""; - if (c.length === 1 && r.packedInputs) { + if (r15.enableShapeUniforms && !a.isUniform) { + let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: c, keptDims: l } = Qf(r15.packedInputs, a.shape, p), m = "", d = "", f = ""; + 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 && !r.packedInputs) + } else if (c.length === 2 && !r15.packedInputs) d = `${c[0] > 1}_${c[1] > 1}`; - else if (c.length > 2 && !r.packedInputs) { + else if (c.length > 2 && !r15.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, e.shape), C = !r.packedInputs && h === e.shape.length && y.arraysEqual(p, e.texData.texShape), S = r.packedInputs || c.length > 2 ? "" : `${p[0] > 1}_${p[1] > 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, e.shape), C = !r15.packedInputs && h === e.shape.length && y.arraysEqual(p, e.texData.texShape), S = r15.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; + let n = r15.userCode, s = r15.constructor.name; return s += "_" + o + "_" + n + `${A().getNumber("WEBGL_VERSION")}`, s; } -function pt(r) { - return A().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r <= 4; +function ut(r15) { + return A().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r15 <= 4; } -var Jf = class { +var Zf = class { constructor(t8) { - this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = bu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let e = vt(); - this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = fu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let e = It(); + this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ip(["r", "c", "d"], t8) : Ws(["r", "c", "d"], t8)} + ${this.enableShapeUniforms ? hp(["r", "c", "d"], t8) : Ws(["r", "c", "d"], t8)} return ivec3(r, c, d); } @@ -17300,13 +17301,13 @@ var Jf = class { `; } }; -var eh = class { +var Jf = class { constructor(t8) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = bu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let e = vt(); - this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = fu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let e = It(); + this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ip(["r", "c", "d"], t8) : Ws(["r", "c", "d"], t8)} + ${this.enableShapeUniforms ? hp(["r", "c", "d"], t8) : Ws(["r", "c", "d"], t8)} return ivec3(r, c, d); } @@ -17327,12 +17328,12 @@ var eh = class { `; } }; -var th = class { +var eh = class { constructor(t8) { - this.variableNames = ["A"], this.outTexUsage = dr.DOWNLOAD; - let e = vt(); + this.variableNames = ["A"], this.outTexUsage = mr.DOWNLOAD; + let e = It(); this.outputShape = t8, this.userCode = ` - ${Qf} + ${Yf} void main() { float x = getAAtOutCoords(); @@ -17341,12 +17342,12 @@ var th = class { `; } }; -var rh = class { +var th = class { constructor(t8) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outTexUsage = dr.DOWNLOAD; - let e = vt(); + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outTexUsage = mr.DOWNLOAD; + let e = It(); this.outputShape = t8, this.userCode = ` - ${Qf} + ${Yf} void main() { ivec3 coords = getOutputCoords(); @@ -17357,11 +17358,11 @@ var rh = class { } }; var GZ = { R: 0, G: 1, B: 2, A: 3 }; -var Zl = class { +var Yl = class { constructor(t8, e = false, o = "RGBA") { this.variableNames = ["A"], this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let n = vt(); - this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length); + let n = It(); + this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length); let s = "result"; e && (s = "floor(result * 255. + 0.5)"); let a = ""; @@ -17373,7 +17374,7 @@ var Zl = class { }`; } this.userCode = ` - ${this.enableShapeUniforms ? Pc() : Fc(t8)} + ${this.enableShapeUniforms ? $c() : _c(t8)} void main() { ivec3 coords = getOutputCoords(); @@ -17395,11 +17396,11 @@ var Zl = class { `; } }; -var oh = class { +var rh = class { constructor(t8, e = false) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let o = vt(); - this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length); + let o = It(); + this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length); let n = "", s = "result"; e && (s = "floor(result * 255. + 0.5)"); for (let a = 0; a <= 1; a++) @@ -17436,7 +17437,7 @@ var oh = class { `; } this.userCode = ` - ${this.enableShapeUniforms ? Pc() : Fc(t8)} + ${this.enableShapeUniforms ? $c() : _c(t8)} void main() { ivec3 coords = getOutputCoords(); @@ -17454,10 +17455,10 @@ var oh = class { `; } }; -var cv = {}; -qe(cv, { bindVertexProgramAttributeStreams: () => rv, createBufferFromOutputTexture: () => sv, createFloat16MatrixTexture: () => ZI, createFloat16PackedMatrixTexture: () => tv, createFloat32MatrixTexture: () => QI, createIndexBuffer: () => YI, createPackedMatrixTexture: () => ev, createUnsignedBytesMatrixTexture: () => JI, createVertexBuffer: () => XI, createVertexShader: () => jI, downloadByteEncodedFloatMatrixFromOutputTexture: () => iv, downloadFloat32MatrixFromBuffer: () => av, downloadMatrixFromPackedOutputTexture: () => pv, downloadPackedMatrixFromBuffer: () => uv, getInternalFormatForFloat16MatrixTexture: () => sh, getInternalFormatForFloat16PackedMatrixTexture: () => uh, getInternalFormatForFloat32MatrixTexture: () => nh, getInternalFormatForPackedMatrixTexture: () => ih, getInternalFormatForUnsignedBytesMatrixTexture: () => ah, uploadDenseMatrixToTexture: () => ov, uploadPixelDataToTexture: () => nv }); -function jI(r) { - let t8 = vt(), e = `${t8.version} +var lv = {}; +qe(lv, { bindVertexProgramAttributeStreams: () => ov, createBufferFromOutputTexture: () => av, createFloat16MatrixTexture: () => JI, createFloat16PackedMatrixTexture: () => rv, createFloat32MatrixTexture: () => ZI, createIndexBuffer: () => QI, createPackedMatrixTexture: () => tv, createUnsignedBytesMatrixTexture: () => ev, createVertexBuffer: () => YI, createVertexShader: () => XI, downloadByteEncodedFloatMatrixFromOutputTexture: () => uv, downloadFloat32MatrixFromBuffer: () => iv, downloadMatrixFromPackedOutputTexture: () => cv, downloadPackedMatrixFromBuffer: () => pv, getInternalFormatForFloat16MatrixTexture: () => nh, getInternalFormatForFloat16PackedMatrixTexture: () => ih, getInternalFormatForFloat32MatrixTexture: () => oh, getInternalFormatForPackedMatrixTexture: () => ah, getInternalFormatForUnsignedBytesMatrixTexture: () => sh, uploadDenseMatrixToTexture: () => nv, uploadPixelDataToTexture: () => sv }); +function XI(r15) { + let t8 = It(), e = `${t8.version} precision highp float; ${t8.attribute} vec3 clipSpacePos; ${t8.attribute} vec2 uv; @@ -17467,94 +17468,94 @@ function jI(r) { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`; - return _I(r, e); + return $I(r15, e); } -function XI(r) { +function YI(r15) { let t8 = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]); - return DI(r, t8); + return AI(r15, t8); } -function YI(r) { +function QI(r15) { let t8 = new Uint16Array([0, 1, 2, 2, 1, 3]); - return AI(r, t8); + return FI(r15, t8); } -function Jl(r, t8, e, o, n, s) { - PI(t8, e); - let a = FI(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, t8, e, 0, n, s, null)) : ce(r, () => r.texStorage2D(i, 1, o, t8, e)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)), { texture: a, texShape: [e, t8] }; +function Ql(r15, t8, e, o, n, s) { + OI(t8, e); + let a = PI(r15), i = r15.TEXTURE_2D; + return ce(r15, () => r15.bindTexture(i, a)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_WRAP_S, r15.CLAMP_TO_EDGE)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_WRAP_T, r15.CLAMP_TO_EDGE)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_MIN_FILTER, r15.NEAREST)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_MAG_FILTER, r15.NEAREST)), A().getNumber("WEBGL_VERSION") === 1 ? ce(r15, () => r15.texImage2D(i, 0, o, t8, e, 0, n, s, null)) : ce(r15, () => r15.texStorage2D(i, 1, o, t8, e)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)), { texture: a, texShape: [e, t8] }; } -function nh(r) { - return r.internalFormatFloat; +function oh(r15) { + return r15.internalFormatFloat; } -function QI(r, t8, e, o) { - let [n, s] = Sp(t8, e); - return Jl(r, n, s, nh(o), o.textureFormatFloat, r.FLOAT); +function ZI(r15, t8, e, o) { + let [n, s] = fp(t8, e); + return Ql(r15, n, s, oh(o), o.textureFormatFloat, r15.FLOAT); } -function sh(r) { - return r.internalFormatHalfFloat; +function nh(r15) { + return r15.internalFormatHalfFloat; } -function ZI(r, t8, e, o) { - let [n, s] = Sp(t8, e); - return Jl(r, n, s, sh(o), o.textureFormatFloat, o.textureTypeHalfFloat); +function JI(r15, t8, e, o) { + let [n, s] = fp(t8, e); + return Ql(r15, n, s, nh(o), o.textureFormatFloat, o.textureTypeHalfFloat); } -function ah(r) { - return r.downloadTextureFormat; +function sh(r15) { + return r15.downloadTextureFormat; } -function JI(r, t8, e, o) { - let [n, s] = Sp(t8, e); - return Jl(r, n, s, ah(o), r.RGBA, r.UNSIGNED_BYTE); +function ev(r15, t8, e, o) { + let [n, s] = fp(t8, e); + return Ql(r15, n, s, sh(o), r15.RGBA, r15.UNSIGNED_BYTE); } -function ih(r) { - return r.internalFormatPackedFloat; +function ah(r15) { + return r15.internalFormatPackedFloat; } -function ev(r, t8, e, o) { - let [n, s] = La(t8, e); - return Jl(r, n, s, ih(o), r.RGBA, r.FLOAT); +function tv(r15, t8, e, o) { + let [n, s] = Ma(t8, e); + return Ql(r15, n, s, ah(o), r15.RGBA, r15.FLOAT); } -function uh(r) { - return r.internalFormatPackedHalfFloat; +function ih(r15) { + return r15.internalFormatPackedHalfFloat; } -function tv(r, t8, e, o) { - let [n, s] = La(t8, e); - return Jl(r, n, s, uh(o), r.RGBA, o.textureTypeHalfFloat); +function rv(r15, t8, e, o) { + let [n, s] = Ma(t8, e); + return Ql(r15, n, s, ih(o), r15.RGBA, o.textureTypeHalfFloat); } -function rv(r, t8, e) { - return ce(r, () => r.bindBuffer(r.ARRAY_BUFFER, e)), jf(r, t8, "clipSpacePos", e, 3, 20, 0) && jf(r, t8, "uv", e, 2, 20, 12); +function ov(r15, t8, e) { + return ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, e)), qf(r15, t8, "clipSpacePos", e, 3, 20, 0) && qf(r15, t8, "uv", e, 2, 20, 12); } -function ov(r, t8, e, o, n, s) { - ce(r, () => r.bindTexture(r.TEXTURE_2D, t8)); +function nv(r15, t8, e, o, n, s) { + ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, t8)); let a, i, p; - n instanceof Uint8Array ? (a = new Uint8Array(e * o * 4), i = r.UNSIGNED_BYTE, p = r.RGBA) : (a = new Float32Array(e * 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, e, o, r.RGBA, i, a)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, p, e, o, 0, r.RGBA, i, a)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); + n instanceof Uint8Array ? (a = new Uint8Array(e * o * 4), i = r15.UNSIGNED_BYTE, p = r15.RGBA) : (a = new Float32Array(e * o * 4), i = r15.FLOAT, p = s.internalFormatPackedFloat), a.set(n), A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, e, o, r15.RGBA, i, a)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, p, e, o, 0, r15.RGBA, i, a)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function nv(r, t8, e) { - ce(r, () => r.bindTexture(r.TEXTURE_2D, t8)), e.data instanceof Uint8Array ? A().getNumber("WEBGL_VERSION") === 2 ? ce(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, e.width, e.height, r.RGBA, r.UNSIGNED_BYTE, e.data)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, e.width, e.height, 0, r.RGBA, r.UNSIGNED_BYTE, e.data)) : A().getNumber("WEBGL_VERSION") === 2 ? ce(r, () => r.texSubImage2D(r.TEXTURE_2D, 0, 0, 0, r.RGBA, r.UNSIGNED_BYTE, e)) : ce(r, () => r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, e)), ce(r, () => r.bindTexture(r.TEXTURE_2D, null)); +function sv(r15, t8, e) { + ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, t8)), e.data instanceof Uint8Array ? A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, e.width, e.height, r15.RGBA, r15.UNSIGNED_BYTE, e.data)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, r15.RGBA, e.width, e.height, 0, r15.RGBA, r15.UNSIGNED_BYTE, e.data)) : A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, r15.RGBA, r15.UNSIGNED_BYTE, e)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, r15.RGBA, r15.RGBA, r15.UNSIGNED_BYTE, e)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function sv(r, t8, e, o) { - let n = r.createBuffer(); - ce(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, n)); +function av(r15, t8, e, o) { + let n = r15.createBuffer(); + ce(r15, () => r15.bindBuffer(r15.PIXEL_PACK_BUFFER, n)); let i = 4 * 4 * t8 * e; - return ce(r, () => r.bufferData(r.PIXEL_PACK_BUFFER, i, r.STREAM_READ)), ce(r, () => r.readPixels(0, 0, e, t8, r.RGBA, r.FLOAT, 0)), ce(r, () => r.bindBuffer(r.PIXEL_PACK_BUFFER, null)), n; + return ce(r15, () => r15.bufferData(r15.PIXEL_PACK_BUFFER, i, r15.STREAM_READ)), ce(r15, () => r15.readPixels(0, 0, e, t8, r15.RGBA, r15.FLOAT, 0)), ce(r15, () => r15.bindBuffer(r15.PIXEL_PACK_BUFFER, null)), n; } -function av(r, t8, e) { - let o = r, n = new Float32Array(e); +function iv(r15, t8, e) { + let o = r15, n = new Float32Array(e); return o.bindBuffer(o.PIXEL_PACK_BUFFER, t8), o.getBufferSubData(o.PIXEL_PACK_BUFFER, 0, n), o.bindBuffer(o.PIXEL_PACK_BUFFER, null), n; } -function iv(r, t8, e, o) { - let [n, s] = Sp(t8, e), a = 4, i = new Uint8Array(gR(t8 * e, a)); - return ce(r, () => r.readPixels(0, 0, n, s, o.downloadTextureFormat, r.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); +function uv(r15, t8, e, o) { + let [n, s] = fp(t8, e), a = 4, i = new Uint8Array(xR(t8 * e, a)); + return ce(r15, () => r15.readPixels(0, 0, n, s, o.downloadTextureFormat, r15.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); } -function uv(r, t8, e, o, n, s, a, i) { - let p = r, u = new Float32Array(xR(s, a)); +function pv(r15, t8, e, o, n, s, a, i) { + let p = r15, u = new Float32Array(yR(s, a)); return p.bindBuffer(p.PIXEL_PACK_BUFFER, t8), p.getBufferSubData(p.PIXEL_PACK_BUFFER, 0, u), p.bindBuffer(p.PIXEL_PACK_BUFFER, null), u; } -function pv(r, t8, e) { +function cv(r15, t8, e) { let o = new Float32Array(t8 * e * 4); - return ce(r, () => r.readPixels(0, 0, e, t8, r.RGBA, r.FLOAT, o)), o; + return ce(r15, () => r15.readPixels(0, 0, e, t8, r15.RGBA, r15.FLOAT, o)), o; } -var kp = class { +var xp = class { constructor(t8) { this.outputTexture = null, this.program = null, this.disposed = false, this.itemsToPoll = []; let e = A().getNumber("WEBGL_VERSION"); - if (t8 != null ? (this.gl = t8, vI(e, t8)) : this.gl = Kr(e), t8 = this.gl, A().getNumber("WEBGL_VERSION") === 2) { + if (t8 != null ? (this.gl = t8, kI(e, t8)) : this.gl = Hr(e), t8 = this.gl, A().getNumber("WEBGL_VERSION") === 2) { let s = t8; 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 (t8 != null) { @@ -17566,21 +17567,21 @@ var kp = class { 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 = Ec(this.gl, s), qr(this.gl, a)) - this.textureHalfFloatExtension = Ec(this.gl, a); + if (this.textureFloatExtension = vc(this.gl, s), Kr(this.gl, a)) + this.textureHalfFloatExtension = vc(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 = Ec(this.gl, n); + if (this.colorBufferFloatExtension = this.gl.getExtension(o), Kr(this.gl, n)) + this.colorBufferHalfFloatExtension = vc(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)) + } else if (o = "EXT_color_buffer_float", Kr(this.gl, o)) this.colorBufferFloatExtension = this.gl.getExtension(o); - else if (qr(this.gl, n)) + else if (Kr(this.gl, n)) this.colorBufferHalfFloatExtension = this.gl.getExtension(n); else throw new Error("GL context does not support color renderable floats"); - this.vertexBuffer = XI(this.gl), this.indexBuffer = YI(this.gl), this.framebuffer = OI(this.gl), this.textureConfig = Xl(this.gl, this.textureHalfFloatExtension); + this.vertexBuffer = YI(this.gl), this.indexBuffer = QI(this.gl), this.framebuffer = MI(this.gl), this.textureConfig = ql(this.gl, this.textureHalfFloatExtension); } get debug() { return A().getBool("DEBUG"); @@ -17593,41 +17594,41 @@ var kp = class { ce(t8, () => t8.finish()), ce(t8, () => t8.bindFramebuffer(t8.FRAMEBUFFER, null)), ce(t8, () => t8.deleteFramebuffer(this.framebuffer)), ce(t8, () => t8.bindBuffer(t8.ARRAY_BUFFER, null)), ce(t8, () => t8.bindBuffer(t8.ELEMENT_ARRAY_BUFFER, null)), ce(t8, () => t8.deleteBuffer(this.indexBuffer)), this.disposed = true; } createFloat32MatrixTexture(t8, e) { - return this.throwIfDisposed(), QI(this.gl, t8, e, this.textureConfig); - } - createFloat16MatrixTexture(t8, e) { return this.throwIfDisposed(), ZI(this.gl, t8, e, this.textureConfig); } - createUnsignedBytesMatrixTexture(t8, e) { + createFloat16MatrixTexture(t8, e) { return this.throwIfDisposed(), JI(this.gl, t8, e, this.textureConfig); } - uploadPixelDataToTexture(t8, e) { - this.throwIfDisposed(), nv(this.gl, t8, e); - } - uploadDenseMatrixToTexture(t8, e, o, n) { - this.throwIfDisposed(), ov(this.gl, t8, e, o, n, this.textureConfig); - } - createFloat16PackedMatrixTexture(t8, e) { - return this.throwIfDisposed(), tv(this.gl, t8, e, this.textureConfig); - } - createPackedMatrixTexture(t8, e) { + createUnsignedBytesMatrixTexture(t8, e) { return this.throwIfDisposed(), ev(this.gl, t8, e, this.textureConfig); } + uploadPixelDataToTexture(t8, e) { + this.throwIfDisposed(), sv(this.gl, t8, e); + } + uploadDenseMatrixToTexture(t8, e, o, n) { + this.throwIfDisposed(), nv(this.gl, t8, e, o, n, this.textureConfig); + } + createFloat16PackedMatrixTexture(t8, e) { + return this.throwIfDisposed(), rv(this.gl, t8, e, this.textureConfig); + } + createPackedMatrixTexture(t8, e) { + return this.throwIfDisposed(), tv(this.gl, t8, e, this.textureConfig); + } deleteMatrixTexture(t8) { - this.throwIfDisposed(), this.outputTexture === t8 && (Xf(this.gl, this.framebuffer), this.outputTexture = null), ce(this.gl, () => this.gl.deleteTexture(t8)); + this.throwIfDisposed(), this.outputTexture === t8 && (jf(this.gl, this.framebuffer), this.outputTexture = null), ce(this.gl, () => this.gl.deleteTexture(t8)); } downloadByteEncodedFloatMatrixFromOutputTexture(t8, e, o) { - return this.downloadMatrixDriver(t8, () => iv(this.gl, e, o, this.textureConfig)); + return this.downloadMatrixDriver(t8, () => uv(this.gl, e, o, this.textureConfig)); } downloadPackedMatrixFromBuffer(t8, e, o, n, s, a) { - return uv(this.gl, t8, e, o, n, s, a, this.textureConfig); + return pv(this.gl, t8, e, o, n, s, a, this.textureConfig); } downloadFloat32MatrixFromBuffer(t8, e) { - return av(this.gl, t8, e); + return iv(this.gl, t8, e); } createBufferFromTexture(t8, e, o) { this.bindTextureToFrameBuffer(t8); - let n = sv(this.gl, e, o, this.textureConfig); + let n = av(this.gl, e, o, this.textureConfig); return this.unbindTextureToFrameBuffer(), n; } createAndWaitForFence() { @@ -17647,30 +17648,30 @@ var kp = class { return { query: e, isFencePassed: o }; } downloadMatrixFromPackedTexture(t8, e, o) { - return this.downloadMatrixDriver(t8, () => pv(this.gl, e, o)); + return this.downloadMatrixDriver(t8, () => cv(this.gl, e, o)); } createProgram(t8) { this.throwIfDisposed(); let e = this.gl; - this.vertexShader == null && (this.vertexShader = jI(e)); - let o = EI(e); - ce(e, () => e.attachShader(o, this.vertexShader)), ce(e, () => e.attachShader(o, t8)), RI(e, o); + this.vertexShader == null && (this.vertexShader = XI(e)); + let o = RI(e); + ce(e, () => e.attachShader(o, this.vertexShader)), ce(e, () => e.attachShader(o, t8)), DI(e, o); let n = Object.assign(o, { vao: this.createVertexArray() }); - return this.debug && Yl(e, n), n; + return this.debug && jl(e, n), n; } buildVao(t8) { this.setProgram(t8), this.bindVertexArray(t8.vao); let e = this.gl; - ce(e, () => e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, this.indexBuffer)), rv(e, t8, this.vertexBuffer); + ce(e, () => e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, this.indexBuffer)), ov(e, t8, this.vertexBuffer); } deleteProgram(t8) { this.throwIfDisposed(), t8 === this.program && (this.program = null), t8 != null && (ce(this.gl, () => this.gl.deleteProgram(t8)), this.deleteVertexArray(t8.vao)); } setProgram(t8) { - this.throwIfDisposed(), this.program = t8, this.program != null && this.debug && Yl(this.gl, this.program), ce(this.gl, () => this.gl.useProgram(t8)); + this.throwIfDisposed(), this.program = t8, this.program != null && this.debug && jl(this.gl, this.program), ce(this.gl, () => this.gl.useProgram(t8)); } getUniformLocation(t8, e, o = true) { - return this.throwIfDisposed(), o ? MI(this.gl, t8, e) : LI(this.gl, t8, e); + return this.throwIfDisposed(), o ? LI(this.gl, t8, e) : BI(this.gl, t8, e); } getAttributeLocation(t8, e) { return this.throwIfDisposed(), ce(this.gl, () => this.gl.getAttribLocation(t8, e)); @@ -17679,14 +17680,14 @@ var kp = class { return this.throwIfDisposed(), this.gl.getUniformLocation(t8, e); } setInputMatrixTexture(t8, e, o) { - this.throwIfDisposed(), this.throwIfNoProgram(), BI(this.gl, t8, e, o); + this.throwIfDisposed(), this.throwIfNoProgram(), zI(this.gl, t8, e, o); } setOutputMatrixTexture(t8, e, o) { this.setOutputMatrixTextureDriver(t8, o, e); } setOutputPackedMatrixTexture(t8, e, o) { this.throwIfDisposed(); - let [n, s] = La(e, o); + let [n, s] = Ma(e, o); this.setOutputMatrixTextureDriver(t8, n, s); } setOutputMatrixWriteRegion(t8, e, o, n) { @@ -17696,7 +17697,7 @@ var kp = class { throw new Error("setOutputPackedMatrixWriteRegion not implemented."); } debugValidate() { - this.program != null && Yl(this.gl, this.program), Rc(this.gl); + this.program != null && jl(this.gl, this.program), kc(this.gl); } executeProgram() { this.throwIfDisposed(), this.throwIfNoProgram(); @@ -17711,7 +17712,7 @@ var kp = class { this.throwIfDisposed(), ce(this.gl, () => this.gl.finish()); } getQueryTimerExtension() { - return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = Ec(this.gl, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query")), this.disjointQueryTimerExtension; + return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = vc(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(); @@ -17781,10 +17782,10 @@ var kp = class { "setTimeoutCustom" in A().platform && (o = A().platform.setTimeoutCustom.bind(A().platform)), y.repeatedTry(() => (this.pollItems(), this.itemsToPoll.length === 0), () => 0, null, o); } bindTextureToFrameBuffer(t8) { - this.throwIfDisposed(), Ql(this.gl, t8, this.framebuffer), this.debug && Rc(this.gl); + this.throwIfDisposed(), Xl(this.gl, t8, this.framebuffer), this.debug && kc(this.gl); } unbindTextureToFrameBuffer() { - this.outputTexture != null ? (Ql(this.gl, this.outputTexture, this.framebuffer), this.debug && Rc(this.gl)) : Xf(this.gl, this.framebuffer); + this.outputTexture != null ? (Xl(this.gl, this.outputTexture, this.framebuffer), this.debug && kc(this.gl)) : jf(this.gl, this.framebuffer); } downloadMatrixDriver(t8, e) { this.bindTextureToFrameBuffer(t8); @@ -17794,7 +17795,7 @@ var kp = class { setOutputMatrixTextureDriver(t8, e, o) { this.throwIfDisposed(); let n = this.gl; - Ql(n, t8, this.framebuffer), this.debug && Rc(n), this.outputTexture = t8, ce(n, () => n.viewport(0, 0, e, o)), ce(n, () => n.scissor(0, 0, e, o)); + Xl(n, t8, this.framebuffer), this.debug && kc(n), this.outputTexture = t8, ce(n, () => n.viewport(0, 0, e, o)), ce(n, () => n.scissor(0, 0, e, o)); } setOutputMatrixWriteRegionDriver(t8, e, o, n) { this.throwIfDisposed(), ce(this.gl, () => this.gl.scissor(t8, e, o, n)); @@ -17808,37 +17809,37 @@ var kp = class { throw new Error("No GPU program is currently set."); } }; -function HZ(r) { +function HZ(r15) { let t8 = 0; - for (; t8 < r.length && r[t8](); ++t8) + for (; t8 < r15.length && r15[t8](); ++t8) ; return t8 - 1; } -var { addImpl: RR, bincountImpl: ph, bincountReduceImpl: DR, bitwiseAndImpl: AR, castImpl: FR, ceilImpl: PR, concatImpl: OR, equalImpl: MR, expImpl: LR, expm1Impl: BR, floorImpl: zR, gatherNdImpl: VR, gatherV2Impl: WR, greaterImpl: UR, greaterEqualImpl: GR, lessImpl: HR, lessEqualImpl: KR, linSpaceImpl: qR, logImpl: jR, maxImpl: XR, maximumImpl: YR, minimumImpl: QR, multiplyImpl: ZR, negImpl: JR, notEqualImpl: eD, prodImpl: tD, raggedGatherImpl: rD, raggedRangeImpl: oD, raggedTensorToTensorImpl: nD, rangeImpl: sD, rsqrtImpl: aD, scatterImpl: iD, sigmoidImpl: uD, simpleAbsImpl: ch, sliceImpl: pD, sparseFillEmptyRowsImpl: cD, sparseReshapeImpl: lD, sparseSegmentReductionImpl: lh, sqrtImpl: mD, staticRegexReplaceImpl: dD, stridedSliceImpl: fD, stringNGramsImpl: hD, stringSplitImpl: gD, stringToHashBucketFastImpl: xD, subImpl: yD, tileImpl: bD, topKImpl: CD, transposeImpl: Np, uniqueImpl: wD } = Tc; -function lv(r, t8) { - return ["x", "y", "z", "w", "u", "v"].slice(0, t8).map((e) => `${r}.${e}`); +var { addImpl: DR, bincountImpl: uh, bincountReduceImpl: AR, bitwiseAndImpl: FR, castImpl: PR, ceilImpl: OR, concatImpl: MR, equalImpl: LR, expImpl: BR, expm1Impl: zR, floorImpl: VR, gatherNdImpl: WR, gatherV2Impl: UR, greaterImpl: GR, greaterEqualImpl: HR, lessImpl: KR, lessEqualImpl: qR, linSpaceImpl: jR, logImpl: XR, maxImpl: YR, maximumImpl: QR, minimumImpl: ZR, multiplyImpl: JR, negImpl: eD, notEqualImpl: tD, prodImpl: rD, raggedGatherImpl: oD, raggedRangeImpl: nD, raggedTensorToTensorImpl: sD, rangeImpl: aD, rsqrtImpl: iD, scatterImpl: uD, sigmoidImpl: pD, simpleAbsImpl: ph, sliceImpl: cD, sparseFillEmptyRowsImpl: lD, sparseReshapeImpl: mD, sparseSegmentReductionImpl: ch, sqrtImpl: dD, staticRegexReplaceImpl: fD, stridedSliceImpl: hD, stringNGramsImpl: gD, stringSplitImpl: xD, stringToHashBucketFastImpl: yD, subImpl: bD, tileImpl: CD, topKImpl: wD, transposeImpl: yp, uniqueImpl: SD } = wc; +function mv(r15, t8) { + return ["x", "y", "z", "w", "u", "v"].slice(0, t8).map((e) => `${r15}.${e}`); } -function Dt(r, t8) { - return t8 === 1 ? [r] : lv(r, t8); +function Rt(r15, t8) { + return t8 === 1 ? [r15] : mv(r15, t8); } -function SD(r, t8) { - if (r === 1) +function ID(r15, t8) { + if (r15 === 1) return "rc"; let e = ""; - for (let o = 0; o < r; o++) - e += t8[o], o < r - 1 && (e += ","); + for (let o = 0; o < r15; o++) + e += t8[o], o < r15 - 1 && (e += ","); return e; } -var mh = class { +var lh = class { constructor(t8) { - if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = t8, this.rank = t8.length, this.enableShapeUniforms = pt(this.outputShape.length), this.rank === 0) + if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = t8, this.rank = t8.length, this.enableShapeUniforms = ut(this.outputShape.length), this.rank === 0) this.userCode = ` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } `; else { - let e = Dt("rc", this.rank), o = Re(this.rank), n = this.getOutOfBoundsCondition(e), s = this.getSetup(e), a = this.getOutput(e); + let e = Rt("rc", this.rank), o = Re(this.rank), n = this.getOutOfBoundsCondition(e), s = this.getSetup(e), a = this.getOutput(e); this.userCode = ` void main() { ${o} rc = getOutputCoords(); @@ -17895,9 +17896,9 @@ var mh = class { rEdge || cEdge ? 0. : getA(${e[3]})`; } }; -var Vc = class { +var Pc = class { constructor(t8, e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length); let o = ""; for (let n = 0; n < 4; n++) { let s = "thisRC = rc;"; @@ -17916,7 +17917,7 @@ var Vc = class { } this.userCode = ` ${KZ(e, this.enableShapeUniforms)} - ${this.enableShapeUniforms ? Pc() : Fc(t8)} + ${this.enableShapeUniforms ? $c() : _c(t8)} void main() { ivec3 rc = getOutputCoords(); @@ -17934,36 +17935,36 @@ var Vc = class { `; } }; -function KZ(r, t8) { +function KZ(r15, t8) { return ` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t8 ? SR(["r", "c", "d"], "inputShape") : Ws(["r", "c", "d"], r)} + ${t8 ? IR(["r", "c", "d"], "inputShape") : Ws(["r", "c", "d"], r15)} return ivec3(r, c, d); } `; } -var dh = class { +var mh = class { constructor(t8) { this.gpgpu = t8, this.numUsedTextures = 0, this.numFreeTextures = 0, this._numBytesAllocated = 0, this._numBytesFree = 0, this.freeTextures = {}, this.usedTextures = {}, this.logEnabled = false; } acquireTexture(t8, e, o) { - let n = vD(e, o), s = kD(t8, n, o); + let n = kD(e, o), s = ND(t8, n, o); s in this.freeTextures || (this.freeTextures[s] = []), s in this.usedTextures || (this.usedTextures[s] = []); - let a = ID(t8, n, this.gpgpu.gl, this.gpgpu.textureConfig, o); + let a = vD(t8, 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 === rr.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(t8[0], t8[1]) : n === rr.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(t8[0], t8[1]) : n === rr.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(t8[0], t8[1]) : n === rr.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(t8[0], t8[1]) : n === rr.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(t8[0], t8[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; + return n === er.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(t8[0], t8[1]) : n === er.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(t8[0], t8[1]) : n === er.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(t8[0], t8[1]) : n === er.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(t8[0], t8[1]) : n === er.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(t8[0], t8[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; } releaseTexture(t8, e, o, n) { if (this.freeTextures == null) return; - let s = vD(o, n), a = kD(e, s, n); + let s = kD(o, n), a = ND(e, s, n); a in this.freeTextures || (this.freeTextures[a] = []); - let i = ID(e, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD"); + let i = vD(e, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD"); p !== -1 && this._numBytesAllocated > p ? (this.gpgpu.deleteMatrixTexture(t8.texture), this._numBytesAllocated -= i) : (this.freeTextures[a].push(t8), this.numFreeTextures++, this._numBytesFree += i), this.numUsedTextures--; let u = this.usedTextures[a], c = u && u.indexOf(t8); if (c == null || c < 0) @@ -18004,15 +18005,15 @@ var dh = class { } } }; -function qZ(r, t8) { - let e = r; +function qZ(r15, t8) { + let e = r15; if (t8 === e.R32F) return 4; if (t8 === e.R16F) return 2; if (t8 === e.RGBA32F) return 16; - if (t8 === r.RGBA) + if (t8 === r15.RGBA) return 16; if (t8 === e.RGBA16F) return 8; @@ -18020,52 +18021,52 @@ function qZ(r, t8) { return 4; throw new Error(`Unknown internal format ${t8}`); } -function ID(r, t8, e, o, n) { +function vD(r15, t8, e, o, n) { let s = jZ(t8, o), a; if (n) { - let [p, u] = La(r[0], r[1]); + let [p, u] = Ma(r15[0], r15[1]); a = p * u; } else { - let [p, u] = Sp(r[0], r[1]); + let [p, u] = fp(r15[0], r15[1]); a = p * u; } let i = qZ(e, s); return a * i; } -function jZ(r, t8) { - switch (r) { - case rr.PACKED_2X2_FLOAT32: - return ih(t8); - case rr.PACKED_2X2_FLOAT16: - return uh(t8); - case rr.UNPACKED_FLOAT32: - return nh(t8); - case rr.UNPACKED_FLOAT16: - return sh(t8); - case rr.PACKED_4X1_UNSIGNED_BYTE: +function jZ(r15, t8) { + switch (r15) { + case er.PACKED_2X2_FLOAT32: return ah(t8); + case er.PACKED_2X2_FLOAT16: + return ih(t8); + case er.UNPACKED_FLOAT32: + return oh(t8); + case er.UNPACKED_FLOAT16: + return nh(t8); + case er.PACKED_4X1_UNSIGNED_BYTE: + return sh(t8); default: - throw new Error(`Unknown physical texture type ${r}`); + throw new Error(`Unknown physical texture type ${r15}`); } } -function XZ(r) { - return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r ? rr.PACKED_2X2_FLOAT32 : rr.UNPACKED_FLOAT32 : r ? rr.PACKED_2X2_FLOAT16 : rr.UNPACKED_FLOAT16; +function XZ(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 vD(r, t8) { - if (r === dr.UPLOAD) - return rr.PACKED_2X2_FLOAT32; - if (r === dr.RENDER || r == null) +function kD(r15, t8) { + if (r15 === mr.UPLOAD) + return er.PACKED_2X2_FLOAT32; + if (r15 === mr.RENDER || r15 == null) return XZ(t8); - if (r === dr.DOWNLOAD || r === dr.PIXELS) - return rr.PACKED_4X1_UNSIGNED_BYTE; - throw new Error(`Unknown logical texture type ${r}`); + if (r15 === mr.DOWNLOAD || r15 === mr.PIXELS) + return er.PACKED_4X1_UNSIGNED_BYTE; + throw new Error(`Unknown logical texture type ${r15}`); } -function kD(r, t8, e) { - return `${r[0]}_${r[1]}_${t8}_${e}`; +function ND(r15, t8, e) { + return `${r15[0]}_${r15[1]}_${t8}_${e}`; } -var or = class { +var tr = class { constructor(t8, e) { - this.variableNames = ["A"], this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` float unaryOperation(float x) { ${e} } @@ -18079,20 +18080,20 @@ var or = class { `; } }; -var Ut = "if (isnan(x)) return x;"; -var ND = "return x;"; -var mv = "return abs(x);"; -var TD = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; -var _D = Ut + ` +var Wt = "if (isnan(x)) return x;"; +var TD = "return x;"; +var dv = "return abs(x);"; +var _D = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; +var $D = Wt + ` return (x < 0.0) ? 0.0 : x; `; -var $D = Ut + ` +var ED = Wt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; -var Ba = "return x;"; -var ED = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var DD = "return x;"; -var AD = ` +var La = "return x;"; +var RD = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var AD = "return x;"; +var FD = ` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -18102,7 +18103,7 @@ var AD = ` return result; `; -var FD = ` +var PD = ` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -18113,7 +18114,7 @@ var FD = ` return result; `; -var PD = ` +var OD = ` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -18124,10 +18125,10 @@ var PD = ` return result; `; -var OD = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var Fr = class { +var MD = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var Ar = class { constructor(t8, e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` vec4 unaryOperation(vec4 x) { ${e} } @@ -18141,10 +18142,10 @@ var Fr = class { `; } }; -var fh = class { +var dh = class { constructor(t8) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = t8, this.enableShapeUniforms = pt(this.outputShape.length); - let e = t8.length, o = Dt("rc", e), n = Re(e), s = SD(e, o), a = o.slice(-2), i = e <= 1 ? "rc" : `vec2(${a.join(",")})`; + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = t8, this.enableShapeUniforms = ut(this.outputShape.length); + let e = t8.length, o = Rt("rc", e), n = Re(e), s = ID(e, o), a = o.slice(-2), i = e <= 1 ? "rc" : `vec2(${a.join(",")})`; this.userCode = ` void main() { ${n} rc = getOutputCoords(); @@ -18155,39 +18156,39 @@ var fh = class { `; } }; -var QZ = Wt.whereImpl; +var QZ = Vt.whereImpl; var ZZ = 1e-7; var JZ = 1e-4; -var hh = {}; -function e9(r) { - return r in hh || (hh[r] = {}), hh[r]; +var fh = {}; +function e9(r15) { + return r15 in fh || (fh[r15] = {}), fh[r15]; } var t9 = A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); -var r9 = 600; +var r92 = 600; function o9() { - return A().global.screen == null ? 1024 : A().global.screen.height * A().global.screen.width * window.devicePixelRatio * r9 / 1024 / 1024; + return A().global.screen == null ? 1024 : A().global.screen.height * A().global.screen.width * window.devicePixelRatio * r92 / 1024 / 1024; } -var wu = class extends ao { +var Oc = class r13 extends so { nextDataId() { - return wu.nextDataId++; + return r13.nextDataId++; } constructor(t8) { 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 e; if (t8 != null) { - if (t8 instanceof kp) + if (t8 instanceof xp) e = t8; else { - let o = Kr(A().getNumber("WEBGL_VERSION"), t8); - e = new kp(o); + let o = Hr(A().getNumber("WEBGL_VERSION"), t8); + e = new xp(o); } this.binaryCache = {}, this.gpgpuCreatedLocally = false; } else { - let o = Kr(A().getNumber("WEBGL_VERSION")); - e = new kp(o), this.binaryCache = e9(A().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; + let o = Hr(A().getNumber("WEBGL_VERSION")); + e = new xp(o), this.binaryCache = e9(A().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; } - this.gpgpu = e, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new dh(this.gpgpu), this.numMBBeforeWarning = o9(), this.texData = new zo(this, pr()); + this.gpgpu = e, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new mh(this.gpgpu), this.numMBBeforeWarning = o9(), this.texData = new Bo(this, ur()); } numDataIds() { return this.texData.numDataIds() - this.pendingDeletes; @@ -18195,14 +18196,14 @@ var wu = class extends ao { writeTexture(t8, e, o, n, s, a) { let i = this.makeTensorInfo(e, o), p = this.texData.get(i.dataId); p.isPacked = false, p.texture = { texture: t8, texShape: [n, s] }, p.texShape = [n, s]; - let u = Dc(e), c = new Zl(u, false, a), l = this.runWebGLProgram(c, [i], o, [[n, s]]); + let u = Nc(e), c = new Yl(u, false, a), l = this.runWebGLProgram(c, [i], o, [[n, s]]); return l.shape = e, p.texture = null, this.disposeIntermediateTensorInfo(i), l.dataId; } write(t8, e, o) { if ((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || A().getBool("DEBUG")) && this.checkNumericalProblems(t8), o === "complex64" && t8 != 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: e, dtype: o, values: t8, usage: dr.UPLOAD, refCount: 1 }), n; + return this.texData.set(n, { shape: e, dtype: o, values: t8, usage: mr.UPLOAD, refCount: 1 }), n; } refCount(t8) { return this.texData.has(t8) ? this.texData.get(t8).refCount : 0; @@ -18220,7 +18221,7 @@ var wu = class extends ao { move(t8, e, o, n, s) { if (A().getBool("DEBUG") && this.checkNumericalProblems(e), n === "complex64") throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); - this.texData.set(t8, { shape: o, dtype: n, values: e, usage: dr.UPLOAD, refCount: s }); + this.texData.set(t8, { shape: o, dtype: n, values: e, usage: mr.UPLOAD, refCount: s }); } disposeIntermediateTensorInfo(t8) { this.disposeData(t8.dataId); @@ -18229,7 +18230,7 @@ var wu = class extends ao { let e = this.texData.get(t8), { values: o, dtype: n, complexTensorInfos: s, slice: a, shape: i, isPacked: p } = e; if (a != null) { let m; - p ? m = new Fr(i, Ba) : m = new or(i, Ba); + p ? m = new Ar(i, La) : m = new tr(i, La); let d = this.runWebGLProgram(m, [{ dataId: t8, shape: i, dtype: n }], n), f = this.readSync(d.dataId); return this.disposeIntermediateTensorInfo(d), f; } @@ -18255,7 +18256,7 @@ var wu = class extends ao { let e = this.texData.get(t8), { values: o, shape: n, slice: s, dtype: a, complexTensorInfos: i, isPacked: p } = e; if (s != null) { let f; - p ? f = new Fr(n, Ba) : f = new or(n, Ba); + p ? f = new Ar(n, La) : f = new tr(n, La); let h = this.runWebGLProgram(f, [{ dataId: t8, shape: n, dtype: a }], a), g = this.read(h.dataId); return this.disposeIntermediateTensorInfo(h), g; } @@ -18267,7 +18268,7 @@ var wu = class extends ao { if (a !== "complex64" && A().get("WEBGL_BUFFER_SUPPORTED")) { c = this.decode(t8); let f = this.texData.get(c.dataId); - u = this.gpgpu.createBufferFromTexture(f.texture.texture, ...jl(n)); + u = this.gpgpu.createBufferFromTexture(f.texture.texture, ...Kl(n)); } this.pendingRead.set(t8, []), a !== "complex64" && await this.gpgpu.createAndWaitForFence(); let l; @@ -18285,7 +18286,7 @@ var wu = class extends ao { ce(f, () => f.deleteBuffer(u)); } let m = this.convertAndCacheOnCPU(t8, l), d = this.pendingRead.get(t8); - return this.pendingRead.delete(t8), d.forEach((f) => f(m)), this.pendingDisposal.has(t8) && (this.pendingDisposal.delete(t8), this.disposeData(t8) && pr().removeDataId(t8, this), this.pendingDeletes--), m; + return this.pendingRead.delete(t8), d.forEach((f) => f(m)), this.pendingDisposal.has(t8) && (this.pendingDisposal.delete(t8), this.disposeData(t8) && ur().removeDataId(t8, this), this.pendingDeletes--), m; } readToGPU(t8, e = {}) { let o = this.texData.get(t8), { values: n, shape: s, slice: a, dtype: i, isPacked: p, texture: u } = o; @@ -18293,13 +18294,13 @@ var wu = class extends ao { throw new Error("Does not support reading texture for complex64 dtype."); if (a != null) { let d; - p ? d = new Fr(s, Ba) : d = new or(s, Ba); + p ? d = new Ar(s, La) : d = new tr(s, La); let f = this.runWebGLProgram(d, [{ dataId: t8, shape: s, dtype: i }], i), h = this.readToGPU(f, e); 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(t8, e.customTexShape), l = pr().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); + let c = this.decode(t8, e.customTexShape), l = ur().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); return Object.assign({ tensorRef: l }, m.texture); } bufferSync(t8) { @@ -18317,17 +18318,17 @@ var wu = class extends ao { if (t8 != null) for (let e = 0; e < t8.length; e++) { let o = t8[e]; - if (!TI(o)) + if (!_I(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(t8) { let { shape: e, dtype: o, isPacked: n } = this.texData.get(t8), s = y.sizeFromShape(e); if (A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { - let m = this.decode(t8), d = this.texData.get(m.dataId), f = this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture, ...jl(e)).subarray(0, s); + let m = this.decode(t8), d = this.texData.get(m.dataId), f = this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture, ...Kl(e)).subarray(0, s); return this.disposeIntermediateTensorInfo(m), f; } - let a = A().getBool("WEBGL_PACK") && n === true, i = a ? Dc(e) : e, p = a ? new rh(i) : new th(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: t8 }], "float32"), c = this.texData.get(u.dataId), l = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture, c.texShape[0], c.texShape[1]).subarray(0, s); + let a = A().getBool("WEBGL_PACK") && n === true, i = a ? Nc(e) : e, p = a ? new th(i) : new eh(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: t8 }], "float32"), c = this.texData.get(u.dataId), l = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture, c.texShape[0], c.texShape[1]).subarray(0, s); return this.disposeIntermediateTensorInfo(u), l; } timerAvailable() { @@ -18400,18 +18401,18 @@ var wu = class extends ao { return QZ(t8.shape, e); } packedUnaryOp(t8, e, o) { - let n = new Fr(t8.shape, e), s = this.compileAndRun(n, [t8], o); - return pr().makeTensorFromTensorInfo(s); + let n = new Ar(t8.shape, e), s = this.compileAndRun(n, [t8], o); + return ur().makeTensorFromTensorInfo(s); } abs(t8) { if (this.shouldExecuteOnCPU([t8]) && t8.dtype !== "complex64") { - let n = ch(this.texData.get(t8.dataId).values); + let n = ph(this.texData.get(t8.dataId).values); return this.makeOutput(t8.shape, t8.dtype, n); } if (A().getBool("WEBGL_PACK_UNARY_OPERATIONS")) - return this.packedUnaryOp(t8, mv, t8.dtype); - let e = new or(t8.shape, mv), o = this.compileAndRun(e, [t8]); - return pr().makeTensorFromTensorInfo(o); + return this.packedUnaryOp(t8, dv, t8.dtype); + let e = new tr(t8.shape, dv), o = this.compileAndRun(e, [t8]); + return ur().makeTensorFromTensorInfo(o); } makeTensorInfo(t8, e, o) { let n; @@ -18423,18 +18424,18 @@ var wu = class extends ao { return this.texData.get(n).usage = null, { dataId: n, shape: t8, dtype: e }; } makeOutput(t8, e, o) { - return pr().makeTensorFromTensorInfo(this.makeTensorInfo(t8, e, o), this); + return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t8, e, o), this); } unpackTensor(t8) { - let e = new fh(t8.shape); + let e = new dh(t8.shape); return this.runWebGLProgram(e, [t8], t8.dtype); } packTensor(t8) { - let e = new mh(t8.shape), o = true; + let e = new lh(t8.shape), o = true; return this.runWebGLProgram(e, [t8], t8.dtype, null, o); } packedReshape(t8, e) { - let o = [yi(t8.shape), ...bi(t8.shape)], n = { dtype: t8.dtype, shape: o, dataId: t8.dataId }, s = [yi(e), ...bi(e)], a = new Vc(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], t8.dtype, p, i); + let o = [hi(t8.shape), ...gi(t8.shape)], n = { dtype: t8.dtype, shape: o, dataId: t8.dataId }, s = [hi(e), ...gi(e)], a = new Pc(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], t8.dtype, p, i); return { dataId: u.dataId, shape: e, dtype: u.dtype }; } decode(t8, e) { @@ -18443,15 +18444,15 @@ var wu = class extends ao { let m = y.sizeFromShape(s), d = e[0] * e[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 = Dc(s), p; - n ? p = new eh(i) : p = new Jf(i); - let u = true, c = [e != null ? e : jl(i)], l = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: t8 }], a, c, u, e); + let i = Nc(s), p; + n ? p = new Jf(i) : p = new Zf(i); + let u = true, c = [e != null ? e : Kl(i)], l = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: t8 }], a, c, u, e); return { dtype: a, shape: s, dataId: l.dataId }; } runWebGLProgram(t8, e, o, n, s = false, a) { let i = this.makeTensorInfo(t8.outputShape, o), p = this.texData.get(i.dataId); - if (t8.packedOutput && (p.isPacked = true), t8.outPackingScheme === bu.DENSE) { - let x = a != null ? a : jl(t8.outputShape); + if (t8.packedOutput && (p.isPacked = true), t8.outPackingScheme === fu.DENSE) { + let x = a != null ? a : Kl(t8.outputShape); p.texShape = x.map((b) => b * 2); } if (t8.outTexUsage != null && (p.usage = t8.outTexUsage), y.sizeFromShape(i.shape) === 0) @@ -18467,15 +18468,15 @@ var wu = class extends ao { } if (this.uploadToGPU(x.dataId), !!b.isPacked != !!t8.packedInputs) x = b.isPacked ? this.unpackTensor(x) : this.packTensor(x), u.push(x), b = this.texData.get(x.dataId); - else if (b.isPacked && !Cu(b.shape, x.shape)) { + else if (b.isPacked && !hu(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: false }; }); this.uploadToGPU(i.dataId); - let l = { shape: i.shape, texData: p, isUniform: false }, m = ER(t8, c, l), d = this.getAndSaveBinary(m, () => _R(this.gpgpu, t8, c, l)), f = this.activeTimers != null, h; - f && (h = this.startTimer()), A().get("ENGINE_COMPILE_ONLY") || $R(this.gpgpu, d, c, l, n), u.forEach((x) => this.disposeIntermediateTensorInfo(x)), f && (h = this.endTimer(h), this.activeTimers.push({ name: t8.constructor.name, query: this.getQueryTime(h) })); + let l = { shape: i.shape, texData: p, isUniform: false }, m = RR(t8, c, l), d = this.getAndSaveBinary(m, () => $R(this.gpgpu, t8, c, l)), f = this.activeTimers != null, h; + f && (h = this.startTimer()), A().get("ENGINE_COMPILE_ONLY") || ER(this.gpgpu, d, c, l, n), u.forEach((x) => this.disposeIntermediateTensorInfo(x)), f && (h = this.endTimer(h), this.activeTimers.push({ name: t8.constructor.name, query: this.getQueryTime(h) })); let g = A().getNumber("WEBGL_FLUSH_THRESHOLD"); if (g > 0) { let x = y.now(); @@ -18523,11 +18524,11 @@ var wu = class extends ao { let u = this.activeTimers != null, c; u && (c = y.now()); let l = e.texShape; - if (l == null && (l = zI(o, p), e.texShape = l), s != null) { - let m = Dc(o), d, f = l[1], h = l[0], g = s instanceof Uint8Array || s instanceof Uint8ClampedArray; - (p || !g) && ([f, h] = La(l[0], l[1])), p ? d = new oh(m, g) : d = new Zl(m, g); + if (l == null && (l = VI(o, p), e.texShape = l), s != null) { + let m = Nc(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 rh(m, g) : d = new Yl(m, g); let x = g ? [h, f] : l, b = this.makeTensorInfo(x, n), C = this.texData.get(b.dataId); - g ? C.usage = dr.PIXELS : C.usage = dr.UPLOAD, C.texShape = x, this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId), f, h, s); + 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]], k = true, _ = this.runWebGLProgram(d, [b], n, S, k), E = this.texData.get(_.dataId); e.texShape = E.texShape, e.isPacked = E.isPacked, e.usage = E.usage, A().get("ENGINE_COMPILE_ONLY") ? this.disposeData(_.dataId) : (e.texture = E.texture, e.values = null, this.texData.delete(_.dataId)), this.disposeIntermediateTensorInfo(b), u && (this.uploadWaitMs += y.now() - c); } else { @@ -18578,50 +18579,50 @@ var wu = class extends ao { } checkCompletion_(t8) { if (this.gpgpu.gl.getProgramParameter(t8.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) - throw console.log(this.gpgpu.gl.getProgramInfoLog(t8.webGLProgram)), this.gpgpu.gl.getShaderParameter(t8.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? (qf(t8.source, this.gpgpu.gl.getShaderInfoLog(t8.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); + throw console.log(this.gpgpu.gl.getProgramInfoLog(t8.webGLProgram)), this.gpgpu.gl.getShaderParameter(t8.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? (Kf(t8.source, this.gpgpu.gl.getShaderInfoLog(t8.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); return true; } getUniformLocations() { for (let t8 of Object.values(this.binaryCache)) { this.gpgpu.buildVao(t8.webGLProgram); - let { variablesLocations: e, customUniformLocations: o, infLoc: n, nanLoc: s, outShapeLocation: a, outShapeStridesLocation: i, outTexShapeLocation: p } = qI(this.gpgpu, t8.program, t8.webGLProgram); + let { variablesLocations: e, customUniformLocations: o, infLoc: n, nanLoc: s, outShapeLocation: a, outShapeStridesLocation: i, outTexShapeLocation: p } = jI(this.gpgpu, t8.program, t8.webGLProgram); t8.variablesLocations = e, t8.customUniformLocations = o, t8.infLoc = n, t8.nanLoc = s, t8.outShapeLocation = a, t8.outShapeStridesLocation = i, t8.outTexShapeLocation = p; } } createTensorFromGPUData(t8, e, o) { t8.channels = t8.channels || "RGBA"; - let { texture: n, height: s, width: a, channels: i } = t8, p = pr().backend; + let { texture: n, height: s, width: a, channels: i } = t8, 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, e, o, s, a, i); - return pr().makeTensorFromDataId(u, e, o, p); + return ur().makeTensorFromDataId(u, e, o, p); } }; -wu.nextDataId = 0; -function n9(r, t8) { +Oc.nextDataId = 0; +function n9(r15, t8) { if (t8 === "float32" || t8 === "complex64") - return r; + return r15; if (t8 === "int32" || t8 === "bool") { - let e = t8 === "int32" ? new Int32Array(r.length) : new Uint8Array(r.length); + let e = t8 === "int32" ? new Int32Array(r15.length) : new Uint8Array(r15.length); for (let o = 0; o < e.length; ++o) - e[o] = Math.round(r[o]); + e[o] = Math.round(r15[o]); return e; } else throw new Error(`Unknown dtype ${t8}`); } -var s9 = "4.11.0"; -function MD() { +var s9 = "4.14.0"; +function LD() { A().set("WEBGL_FORCE_F16_TEXTURES", true); } -ou.isBrowser() && su("webgl", () => new wu(), 2); -var Cat = { forceHalfFloat: MD }; -var Wc = ` +Ji.isBrowser() && tu("webgl", () => new Oc(), 2); +var Cat = { forceHalfFloat: LD }; +var Mc = ` if (isnan(a)) return a; if (isnan(b)) return b; `; -var Pr = class { +var Fr = class { constructor(t8, e, o) { - this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(e, o), this.enableShapeUniforms = pt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(e, o), this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` float binaryOperation(float a, float b) { ${t8} } @@ -18634,17 +18635,17 @@ var Pr = class { `; } }; -var Xr = ` +var jr = ` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; `; -var jr = class { +var qr = class { constructor(t8, e, o, n = false) { this.variableNames = ["A", "B"], this.supportsBroadcasting = true, this.packedInputs = true, this.packedOutput = true, this.outputShape = w.assertAndGetBroadcastShape(e, o); let s = this.outputShape.length; - this.enableShapeUniforms = pt(s); + this.enableShapeUniforms = ut(s); let a = ""; if (n) if (s === 0 || y.sizeFromShape(this.outputShape) === 1) @@ -18666,7 +18667,7 @@ var jr = class { result.w = 0.; `; else { - let p = Dt("coords", s); + let p = Rt("coords", s); this.enableShapeUniforms ? a += ` bool nextRowOutOfBounds = (${p[s - 2]} + 1) >= outShape[${s} - 2]; @@ -18702,38 +18703,38 @@ var jr = class { `; } }; -function At(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +function Dt(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; return e.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var LD = { kernelName: wo, backendName: "webgl", kernelFunc: At }; -function Or(r) { - let { inputs: t8, backend: e } = r, { real: o, imag: n } = t8, s = e.makeTensorInfo(o.shape, "complex64"), a = e.texData.get(s.dataId), i = At({ inputs: { x: o }, backend: e }), p = At({ inputs: { x: n }, backend: e }); +var BD = { kernelName: Co, backendName: "webgl", kernelFunc: Dt }; +function Pr(r15) { + let { inputs: t8, backend: e } = r15, { real: o, imag: n } = t8, s = e.makeTensorInfo(o.shape, "complex64"), a = e.texData.get(s.dataId), i = Dt({ inputs: { x: o }, backend: e }), p = Dt({ inputs: { x: n }, backend: e }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var BD = { kernelName: Fi, backendName: "webgl", kernelFunc: Or }; -var dv = "return (a < 0.) ? b * a : a;"; -var fv = ` +var zD = { kernelName: Ri, backendName: "webgl", kernelFunc: Pr }; +var fv = "return (a < 0.) ? b * a : a;"; +var hv = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function a9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { alpha: s } = o, a = e.makeTensorInfo([], "float32", y.createScalarValue(s, "float32")), i = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(fv, n.shape, a.shape) : new Pr(dv, n.shape, a.shape), p = e.runWebGLProgram(i, [n, a], "float32"); +function a9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { alpha: s } = o, a = e.makeTensorInfo([], "float32", y.createScalarValue(s, "float32")), i = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new qr(hv, n.shape, a.shape) : new Fr(fv, n.shape, a.shape), p = e.runWebGLProgram(i, [n, a], "float32"); return e.disposeIntermediateTensorInfo(a), p; } -var zD = { kernelName: Rn, backendName: "webgl", kernelFunc: a9 }; -var hv = "return (a < 0.) ? b * a : a;"; -var gv = ` +var VD = { kernelName: En, backendName: "webgl", kernelFunc: a9 }; +var gv = "return (a < 0.) ? b * a : a;"; +var xv = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function i9(r) { - let { inputs: t8, backend: e } = r, { x: o, alpha: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(gv, o.shape, n.shape) : new Pr(hv, o.shape, n.shape); +function i9(r15) { + let { inputs: t8, backend: e } = r15, { x: o, alpha: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new qr(xv, o.shape, n.shape) : new Fr(gv, o.shape, n.shape); return e.runWebGLProgram(s, [o, n], "float32"); } -var VD = { kernelName: os, backendName: "webgl", kernelFunc: i9 }; -var Po = "if (isnan(x)) return x;"; -function xe({ opSnippet: r, packedOpSnippet: t8, cpuKernelImpl: e, dtype: o }) { +var WD = { kernelName: rs, backendName: "webgl", kernelFunc: i9 }; +var Fo = "if (isnan(x)) return x;"; +function xe({ opSnippet: r15, packedOpSnippet: t8, cpuKernelImpl: e, dtype: o }) { return ({ inputs: n, backend: s }) => { let { x: a } = n, i = s, p = o || a.dtype; if (i.shouldExecuteOnCPU([a]) && e != null) { @@ -18741,17 +18742,17 @@ function xe({ opSnippet: r, packedOpSnippet: t8, cpuKernelImpl: e, dtype: o }) { return i.makeTensorInfo(a.shape, p, m); } let u = A().getBool("WEBGL_PACK_UNARY_OPERATIONS") && t8 != null, c; - return u ? c = new Fr(a.shape, t8) : c = new or(a.shape, r), i.runWebGLProgram(c, [a], p); + return u ? c = new Ar(a.shape, t8) : c = new tr(a.shape, r15), i.runWebGLProgram(c, [a], p); }; } -function nt({ opSnippet: r, packedOpSnippet: t8, checkOutOfBounds: e = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { +function nt({ opSnippet: r15, packedOpSnippet: t8, checkOutOfBounds: e = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { return ({ inputs: a, backend: i }) => { let { a: p, b: u } = a, c = i; if (o && p.dtype === "complex64") { let 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 }, E = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, R = new Pr(r, p.shape, u.shape); + let [S, k] = C, _ = { dataId: S.dataId, dtype: S.dtype, shape: p.shape }, E = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, R = new Fr(r15, p.shape, u.shape); return c.runWebGLProgram(R, [_, E], dt(S.dtype, k.dtype)); - }), b = Or({ inputs: { real: g, imag: x }, backend: c }); + }), b = Pr({ inputs: { real: g, imag: x }, backend: c }); return c.disposeIntermediateTensorInfo(g), c.disposeIntermediateTensorInfo(x), b; } let l = s || dt(p.dtype, u.dtype); @@ -18760,29 +18761,29 @@ function nt({ opSnippet: r, packedOpSnippet: t8, checkOutOfBounds: e = false, su return k.values = b, S; } let m = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") && t8 != null, d; - return m ? d = new jr(t8, p.shape, u.shape, e) : d = new Pr(r, p.shape, u.shape), c.runWebGLProgram(d, [p, u], l); + return m ? d = new qr(t8, p.shape, u.shape, e) : d = new Fr(r15, p.shape, u.shape), c.runWebGLProgram(d, [p, u], l); }; } -function Ci(r, t8 = false) { - if (r === "linear") - return t8 ? DD : ND; - if (r === "relu") - return t8 ? FD : _D; - if (r === "elu") +function xi(r15, t8 = false) { + if (r15 === "linear") return t8 ? AD : TD; - if (r === "relu6") + if (r15 === "relu") return t8 ? PD : $D; - if (r === "prelu") - return t8 ? gv : hv; - if (r === "leakyrelu") - return t8 ? fv : dv; - if (r === "sigmoid") + if (r15 === "elu") + return t8 ? FD : _D; + if (r15 === "relu6") return t8 ? OD : ED; - throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`); + if (r15 === "prelu") + return t8 ? xv : gv; + if (r15 === "leakyrelu") + return t8 ? hv : fv; + if (r15 === "sigmoid") + return t8 ? MD : RD; + throw new Error(`Activation ${r15} has not been implemented for the WebGL backend.`); } -var Uc = class { +var Lc = class { constructor(t8, e, o, n = false, s = false, a = false, i = null, p = false, u = false) { - this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = ut(this.outputShape.length); let c = n ? t8[1] : t8[2], l = Math.ceil(c / 2), m = n ? "i * 2, rc.y" : "rc.y, i * 2", d = s ? "rc.z, i * 2" : "i * 2, rc.z", f = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"], h = s ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"], g = "", x = ""; i && (p ? g = `vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); @@ -18830,8 +18831,8 @@ var Uc = class { `; } }; -var xv = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; -var em = class { +var yv = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; +var Zl = class { constructor(t8, e, o) { this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.outputShape = w.assertAndGetBroadcastShape(e, o), this.userCode = ` float binaryOpComplex( @@ -18849,33 +18850,33 @@ var em = class { `; } }; -var WD = "return a * b;"; -function tm(r) { - let { inputs: t8, backend: e } = r, { a: o, b: n } = t8, s = w.upcastType(o.dtype, n.dtype); +var UD = "return a * b;"; +function Jl(r15) { + let { inputs: t8, backend: e } = r15, { a: o, b: n } = t8, s = w.upcastType(o.dtype, n.dtype); if (o.dtype === "complex64") { - let i = e.texData.get(o.dataId), p = e.texData.get(n.dataId), u = new em(xv.REAL, o.shape, n.shape), c = new em(xv.IMAG, o.shape, n.shape), l = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = e.runWebGLProgram(u, l, "float32"), d = e.runWebGLProgram(c, l, "float32"), f = Or({ inputs: { real: m, imag: d }, backend: e }); + let i = e.texData.get(o.dataId), p = e.texData.get(n.dataId), u = new Zl(yv.REAL, o.shape, n.shape), c = new Zl(yv.IMAG, o.shape, n.shape), l = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = e.runWebGLProgram(u, l, "float32"), d = e.runWebGLProgram(c, l, "float32"), f = Pr({ inputs: { real: m, imag: d }, backend: e }); return e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d), f; } if (e.shouldExecuteOnCPU([o, n])) { - let i = e.texData.get(o.dataId), p = e.texData.get(n.dataId), [u, c] = ZR(o.shape, n.shape, i.values, p.values, s), l = e.makeTensorInfo(c, s), m = e.texData.get(l.dataId); + let i = e.texData.get(o.dataId), p = e.texData.get(n.dataId), [u, c] = JR(o.shape, n.shape, i.values, p.values, s), l = e.makeTensorInfo(c, s), m = e.texData.get(l.dataId); return m.values = u, l; } let a; - return A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new jr(WD, o.shape, n.shape) : a = new Pr(WD, o.shape, n.shape), e.runWebGLProgram(a, [o, n], s); + return A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new qr(UD, o.shape, n.shape) : a = new Fr(UD, o.shape, n.shape), e.runWebGLProgram(a, [o, n], s); } -var UD = { kernelName: Yn, backendName: "webgl", kernelFunc: tm }; -function GD(r, t8, e) { - let o = [yi(r.shape), ...bi(r.shape)], n = { dtype: r.dtype, shape: o, dataId: r.dataId }, s = [yi(t8), ...bi(t8)], a = new Vc(s, o), i = true, p = [o], u = e.runWebGLProgram(a, [n], r.dtype, p, i); +var GD = { kernelName: Xn, backendName: "webgl", kernelFunc: Jl }; +function HD(r15, t8, e) { + let o = [hi(r15.shape), ...gi(r15.shape)], n = { dtype: r15.dtype, shape: o, dataId: r15.dataId }, s = [hi(t8), ...gi(t8)], a = new Pc(s, o), i = true, p = [o], u = e.runWebGLProgram(a, [n], r15.dtype, p, i); return { dataId: u.dataId, shape: t8, dtype: u.dtype }; } -function te(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { shape: s } = o, a = e, i = y.sizeFromShape(n.shape), p = y.inferFromImplicitShape(s, i), u = y.sizeFromShape(p); +function te(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { shape: s } = o, a = e, i = y.sizeFromShape(n.shape), p = y.inferFromImplicitShape(s, i), u = y.sizeFromShape(p); y.assert(i === u, () => `The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`); let c = a.texData.get(n.dataId); - return c.isPacked && !Cu(n.shape, p) && !(c.texture !== null && Cu(c.shape, p)) ? GD(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); + return c.isPacked && !hu(n.shape, p) && !(c.texture !== null && hu(c.shape, p)) ? HD(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); } -var HD = { kernelName: da, backendName: "webgl", kernelFunc: te }; -var rm = class { +var KD = { kernelName: da, backendName: "webgl", kernelFunc: te }; +var em = class { constructor(t8, e) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = t8; @@ -18942,7 +18943,7 @@ var rm = class { `; } }; -var gh = class { +var hh = class { constructor(t8, e) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = t8; @@ -19049,23 +19050,23 @@ var gh = class { `; } }; -function p9(r) { +function p9(r15) { let t8 = []; for (; t8.length === 0 || t8[t8.length - 1].outSize !== 1; ) { - let e = t8.length ? t8[t8.length - 1].outSize : r[1], o = w.computeOptimalWindowSize(e); + let e = t8.length ? t8[t8.length - 1].outSize : r15[1], o = w.computeOptimalWindowSize(e); t8.push({ inSize: e, windowSize: o, outSize: Math.ceil(e / o) }); } return t8; } -function Yr(r, t8, e, o) { - let n = p9(r.shape), s = r; +function Xr(r15, t8, e, o) { + let n = p9(r15.shape), s = r15; for (let a = 0; a < n.length; a++) { let { inSize: i, windowSize: p, outSize: u } = n[a], c, l; - e === "mean" ? c = a === 0 ? new rm({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, i) : new rm({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }) : c = new gh({ windowSize: p, inSize: i, batchSize: r.shape[0], outSize: u }, e), l = s, s = o.runWebGLProgram(c, [s], t8), l.dataId !== r.dataId && o.disposeIntermediateTensorInfo(l); + e === "mean" ? c = a === 0 ? new em({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }, i) : new em({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }) : c = new hh({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }, e), l = s, s = o.runWebGLProgram(c, [s], t8), l.dataId !== r15.dataId && o.disposeIntermediateTensorInfo(l); } return s; } -var xh = class { +var gh = class { constructor(t8, e) { this.variableNames = ["A"]; let o = new Array(t8.length); @@ -19081,16 +19082,16 @@ var xh = class { `; } }; -function c9(r) { - let t8 = r.length; +function c9(r15) { + let t8 = r15.length; if (t8 > 6) throw Error(`Transpose for rank ${t8} is not yet supported`); let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"], o = new Array(t8); - for (let n = 0; n < r.length; n++) - o[r[n]] = e[n]; + for (let n = 0; n < r15.length; n++) + o[r15[n]] = e[n]; return o.join(); } -var yh = class { +var xh = class { constructor(t8, e) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true; let o = new Array(t8.length); @@ -19098,7 +19099,7 @@ var yh = class { o[c] = t8[e[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 = lv("rc", this.rank), a = new Array(this.rank); + let n = Re(this.rank), s = mv("rc", this.rank), a = new Array(this.rank); for (let c = 0; c < e.length; c++) a[e[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})`; @@ -19122,54 +19123,54 @@ var yh = class { `; } }; -function Su(r, t8, e) { - let o = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new yh(r.shape, t8) : new xh(r.shape, t8); - return e.runWebGLProgram(o, [r], r.dtype); +function gu(r15, t8, e) { + let o = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new xh(r15.shape, t8) : new gh(r15.shape, t8); + return e.runWebGLProgram(o, [r15], r15.dtype); } -function KD(r, t8, e, o) { - let n = t8, s = r.shape.length, a = y.parseAxisParam(n, r.shape), i = a, p = w.getAxesPermutation(i, s), u = p != null, c = r; - u && (c = Su(r, p, o), i = w.getInnerMostAxes(i.length, s)), w.assertAxesAreInnerMostDims("sum", i, s); +function qD(r15, t8, e, o) { + let n = t8, s = r15.shape.length, a = y.parseAxisParam(n, r15.shape), i = a, p = w.getAxesPermutation(i, s), u = p != null, c = r15; + u && (c = gu(r15, p, o), i = w.getInnerMostAxes(i.length, s)), w.assertAxesAreInnerMostDims("sum", i, s); let [l, m] = w.computeOutAndReduceShapes(c.shape, i), d = l; e && (d = w.expandShapeToKeepDim(l, a)); - let f = y.sizeFromShape(m), g = y.sizeFromShape(r.shape) / f, x = te({ inputs: { x: c }, attrs: { shape: [g, f] }, backend: o }), b = ni(r.dtype), C = Yr(x, b, "sum", o), S = te({ inputs: { x: C }, attrs: { shape: d }, backend: o }); + let f = y.sizeFromShape(m), g = y.sizeFromShape(r15.shape) / f, x = te({ inputs: { x: c }, attrs: { shape: [g, f] }, backend: o }), b = oi(r15.dtype), C = Xr(x, b, "sum", o), S = te({ inputs: { x: C }, attrs: { shape: d }, backend: o }); return o.disposeIntermediateTensorInfo(x), o.disposeIntermediateTensorInfo(C), u && o.disposeIntermediateTensorInfo(c), S; } -function Tp(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; - return KD(n, s, a, e); +function bp(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; + return qD(n, s, a, e); } -var qD = { kernelName: Is, backendName: "webgl", kernelFunc: Tp }; -function Ct(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { perm: s } = o, a = e, i = n.shape.length, p = new Array(i); +var jD = { kernelName: Ss, backendName: "webgl", kernelFunc: bp }; +function bt(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { perm: s } = o, a = e, i = n.shape.length, p = new Array(i); for (let c = 0; c < p.length; c++) p[c] = n.shape[s[c]]; let u; if (a.shouldExecuteOnCPU([n])) { - let l = a.texData.get(n.dataId).values, m = Np(l, n.shape, n.dtype, s, p); + let l = a.texData.get(n.dataId).values, m = yp(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 = Su(n, s, a); + u = gu(n, s, a); return u; } -var jD = { kernelName: co, backendName: "webgl", kernelFunc: Ct }; -var yv = 1e3; -function _p({ a: r, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r.shape.length, c = t8.shape.length, l = e ? r.shape[u - 2] : r.shape[u - 1], m = o ? t8.shape[c - 1] : t8.shape[c - 2], d = e ? r.shape[u - 1] : r.shape[u - 2], f = o ? t8.shape[c - 2] : t8.shape[c - 1], h = r.shape.slice(0, -2), g = t8.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Ir.assertAndGetBroadcastShape(r.shape.slice(0, -2), t8.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 ${t8.shape} and transposeA=${e} and transposeB=${o} must match.`); - let k = e ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], E = te({ inputs: { x: r }, backend: n, attrs: { shape: k } }), R = te({ inputs: { x: t8 }, backend: n, attrs: { shape: _ } }), D = [E, R], P = Math.max(x, b), O = e ? E.shape[1] : E.shape[2], M = s != null, L = a != null, B = p === "leakyrelu", z = p != null ? Ci(p, true) : null, U = M || L || B || z != null, j; - if ((d === 1 || f === 1) && O > yv && U === false) { +var XD = { kernelName: po, backendName: "webgl", kernelFunc: bt }; +var bv = 1e3; +function Cp({ a: r15, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r15.shape.length, c = t8.shape.length, l = e ? r15.shape[u - 2] : r15.shape[u - 1], m = o ? t8.shape[c - 1] : t8.shape[c - 2], d = e ? r15.shape[u - 1] : r15.shape[u - 2], f = o ? t8.shape[c - 2] : t8.shape[c - 1], h = r15.shape.slice(0, -2), g = t8.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Sr.assertAndGetBroadcastShape(r15.shape.slice(0, -2), t8.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r15.shape} and ${t8.shape} and transposeA=${e} and transposeB=${o} must match.`); + let k = e ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], E = te({ inputs: { x: r15 }, backend: n, attrs: { shape: k } }), R = te({ inputs: { x: t8 }, backend: n, attrs: { shape: _ } }), D = [E, R], P = Math.max(x, b), O = e ? E.shape[1] : E.shape[2], M = s != null, L = a != null, B = p === "leakyrelu", z = p != null ? xi(p, true) : null, U = M || L || B || z != null, j; + if ((d === 1 || f === 1) && O > bv && U === false) { let Y = E, J = R; - e && (Y = Ct({ inputs: { x: E }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(Y)), o && (J = Ct({ inputs: { x: R }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(J)); + e && (Y = bt({ inputs: { x: E }, 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 = Tp({ inputs: { x: le }, backend: n, attrs: { axis: oe, keepDims: true } }), D.push(le); + let le = Jl({ inputs: { a: ee, b: ie }, backend: n }); + j = bp({ inputs: { x: le }, backend: n, attrs: { axis: oe, keepDims: true } }), D.push(le); } else { - let Y = dt(r.dtype, t8.dtype), J = new Uc(k, _, [P, d, f], e, o, M, z, L, B), re = [E, R]; + let Y = dt(r15.dtype, t8.dtype), J = new Lc(k, _, [P, d, f], e, o, M, z, L, B), re = [E, 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); @@ -19182,39 +19183,39 @@ function _p({ a: r, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = n n.disposeIntermediateTensorInfo(Y); return q; } -function l9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; - return _p({ a: n, b: s, transposeA: p, transposeB: u, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); +function l9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return Cp({ a: n, b: s, transposeA: p, transposeB: u, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var XD = { kernelName: Io, backendName: "webgl", kernelFunc: l9 }; -var YD = "return abs(x);"; -function m9(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var YD = { kernelName: So, backendName: "webgl", kernelFunc: l9 }; +var QD = "return abs(x);"; +function m9(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (e.shouldExecuteOnCPU([o]) && o.dtype !== "complex64") { - let s = e.texData.get(o.dataId), a = ch(s.values); + let s = e.texData.get(o.dataId), a = ph(s.values); return e.makeTensorInfo(o.shape, o.dtype, a); } let n; - return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Fr(o.shape, YD) : n = new or(o.shape, YD), e.runWebGLProgram(n, [o], o.dtype); + return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Ar(o.shape, QD) : n = new tr(o.shape, QD), e.runWebGLProgram(n, [o], o.dtype); } -var QD = { kernelName: Xs, backendName: "webgl", kernelFunc: m9 }; -var d9 = Ut + ` +var ZD = { kernelName: Xs, backendName: "webgl", kernelFunc: m9 }; +var d9 = Wt + ` if (abs(x) > 1.) { return NAN; } return acos(x); `; var f9 = xe({ opSnippet: d9 }); -var ZD = { kernelName: Wo, backendName: "webgl", kernelFunc: f9 }; -var h9 = Ut + ` +var JD = { kernelName: Vo, backendName: "webgl", kernelFunc: f9 }; +var h9 = Wt + ` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`; var g9 = xe({ opSnippet: h9 }); -var JD = { kernelName: Uo, backendName: "webgl", kernelFunc: g9 }; -var eA = "return a + b;"; -var x9 = nt({ opSnippet: eA, packedOpSnippet: eA, supportsComplex: true, cpuKernelImpl: RR }); -var tA = { kernelName: uo, backendName: "webgl", kernelFunc: x9 }; -var bh = class { +var eA = { kernelName: Wo, backendName: "webgl", kernelFunc: g9 }; +var tA = "return a + b;"; +var x9 = nt({ opSnippet: tA, packedOpSnippet: tA, supportsComplex: true, cpuKernelImpl: DR }); +var rA = { kernelName: io, backendName: "webgl", kernelFunc: x9 }; +var yh = class { constructor(t8, e) { this.outputShape = [], this.outputShape = t8, this.variableNames = e.map((s, a) => `T${a}`); let o = []; @@ -19233,7 +19234,7 @@ var bh = class { `; } }; -var Ch = class { +var bh = class { constructor(t8, e) { this.outputShape = [], this.packedInputs = true, this.packedOutput = true, this.outputShape = t8, this.variableNames = e.map((s, a) => `T${a}`); let o = []; @@ -19252,22 +19253,22 @@ var Ch = class { `; } }; -function wh(r) { - let { inputs: t8, backend: e } = r, o = t8; +function Ch(r15) { + let { inputs: t8, backend: e } = r15, o = t8; if (o.length === 1) - return At({ inputs: { x: o[0] }, backend: e }); + return Dt({ inputs: { x: o[0] }, backend: e }); 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: e }), c = wh({ inputs: o.slice(p), backend: e }); - return wh({ inputs: [u, c], backend: e }); + let p = Math.floor(o.length / 2), u = Ch({ inputs: o.slice(0, p), backend: e }), c = Ch({ inputs: o.slice(p), backend: e }); + return Ch({ inputs: [u, c], backend: e }); } - 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); + 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 bh(o[0].shape, s) : new yh(o[0].shape, s); return e.runWebGLProgram(i, o, n); } -var rA = { kernelName: Go, backendName: "webgl", kernelFunc: wh }; -function y9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 = Ct({ inputs: { x: n }, backend: e, 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: e, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "all", e), x; +var oA = { kernelName: Uo, backendName: "webgl", kernelFunc: Ch }; +function y9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, 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: e, attrs: { shape: [-1, f] } }), g = Xr(h, h.dtype, "all", e), x; if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: e, attrs: { shape: b } }); @@ -19275,11 +19276,11 @@ function y9(r) { x = te({ inputs: { x: g }, backend: e, attrs: { shape: m } }); return e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(g), c != null && e.disposeIntermediateTensorInfo(l), x; } -var oA = { kernelName: Ho, backendName: "webgl", kernelFunc: y9 }; -function b9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 = Ct({ inputs: { x: n }, backend: e, 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: e, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "any", e), x; +var nA = { kernelName: Go, backendName: "webgl", kernelFunc: y9 }; +function b9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, 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: e, attrs: { shape: [-1, f] } }), g = Xr(h, h.dtype, "any", e), x; if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: e, attrs: { shape: b } }); @@ -19287,8 +19288,8 @@ function b9(r) { x = te({ inputs: { x: g }, backend: e, attrs: { shape: m } }); return e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(g), c != null && e.disposeIntermediateTensorInfo(l), x; } -var nA = { kernelName: Ko, backendName: "webgl", kernelFunc: b9 }; -var Sh = class { +var sA = { kernelName: Ho, backendName: "webgl", kernelFunc: b9 }; +var wh = class { constructor(t8, e, o) { this.variableNames = ["A"]; let { windowSize: n, batchSize: s, outSize: a } = t8; @@ -19317,12 +19318,12 @@ var Sh = class { `; } }; -var Ih = class { +var Sh = class { constructor(t8, e, o, n) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, y.assert(t8.length > 2, () => `Packed arg${o.charAt(0).toUpperCase() + o.slice(1)} supports only inputs with rank above 2.`); let s = t8[t8.length - 1], a = Math.ceil(s / e); this.outputShape = t8.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 = Dt("coords", p), l, m; + 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); @@ -19345,7 +19346,7 @@ var Ih = class { --${c[p - 1]}; ${u} sourceLocB = coords; --${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 = Dt("sourceLocR", m - 1).concat("inIdx.r"), x = Dt("sourceLocG", m - 1).concat("inIdx.g"), b = Dt("sourceLocB", m - 1).concat("inIdx.b"), C = Dt("sourceLocA", m - 1).concat("inIdx.a"), S = o === "max" ? "greaterThan" : "lessThan", k = n ? "" : ` + 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 ? "" : ` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), @@ -19395,70 +19396,70 @@ var Ih = class { `; } }; -function sA(r, t8, e, o = null) { +function aA(r15, t8, e, o = null) { let n = t8.shape[0], s = t8.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, e, o == null), u = [t8]; + let a = w.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new wh(i, e, o == null), u = [t8]; o != null && u.push(o); - let c = r.runWebGLProgram(p, u, "int32"); + let c = r15.runWebGLProgram(p, u, "int32"); if (c.shape[1] === 1) return c; - let l = sA(r, t8, e, c); - return r.disposeIntermediateTensorInfo(c), l; + let l = aA(r15, t8, e, c); + return r15.disposeIntermediateTensorInfo(c), l; } -function aA(r, t8, e, o = null) { - let n = o != null ? o.shape : t8.shape, s = n[n.length - 1], a = w.computeOptimalWindowSize(s), i = new Ih(n, a, e, o == null), p = o == null ? [t8] : [t8, o], u = r.runWebGLProgram(i, p, "int32"); +function iA(r15, t8, e, o = null) { + let n = o != null ? o.shape : t8.shape, s = n[n.length - 1], a = w.computeOptimalWindowSize(s), i = new Sh(n, a, e, o == null), p = o == null ? [t8] : [t8, o], u = r15.runWebGLProgram(i, p, "int32"); if (u.shape.length === t8.shape.length) { - let c = aA(r, t8, e, u); - return r.disposeIntermediateTensorInfo(u), c; + let c = iA(r15, t8, e, u); + return r15.disposeIntermediateTensorInfo(u), c; } return u; } -function vh(r, t8, e, o) { +function Ih(r15, t8, e, o) { let n = [e]; if (w.assertAxesAreInnerMostDims("arg" + o.charAt(0).toUpperCase() + o.slice(1), n, t8.shape.length), !A().getBool("WEBGL_PACK_REDUCE") || t8.shape.length <= 2) { - let s = [], a = r.texData.get(t8.dataId), i = a !== null && a.isPacked, p = t8; - i && (p = r.unpackTensor(t8), 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] } }); + let s = [], a = r15.texData.get(t8.dataId), i = a !== null && a.isPacked, p = t8; + i && (p = r15.unpackTensor(t8), s.push(p)); + let [u, c] = w.computeOutAndReduceShapes(p.shape, n), l = y.sizeFromShape(c), m = te({ inputs: { x: p }, backend: r15, attrs: { shape: [-1, l] } }); s.push(m); - let d = sA(r, m, o); + let d = aA(r15, m, o); s.push(d); - let f = te({ inputs: { x: d }, backend: r, attrs: { shape: u } }); - return s.forEach((h) => r.disposeIntermediateTensorInfo(h)), f; + let f = te({ inputs: { x: d }, backend: r15, attrs: { shape: u } }); + return s.forEach((h) => r15.disposeIntermediateTensorInfo(h)), f; } - return aA(r, t8, o); + return iA(r15, t8, o); } -function C9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Ct({ inputs: { x: n }, backend: e, 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(e, p, a[0], "max"); +function C9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); + let c = Ih(e, p, a[0], "max"); return u.forEach((l) => e.disposeIntermediateTensorInfo(l)), c; } -var iA = { kernelName: Ys, backendName: "webgl", kernelFunc: C9 }; -function w9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Ct({ inputs: { x: n }, backend: e, 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(e, p, a[0], "min"); +var uA = { kernelName: Ys, backendName: "webgl", kernelFunc: C9 }; +function w9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); + let c = Ih(e, p, a[0], "min"); return u.forEach((l) => e.disposeIntermediateTensorInfo(l)), c; } -var uA = { kernelName: Qs, backendName: "webgl", kernelFunc: w9 }; -var S9 = Ut + ` +var pA = { kernelName: Qs, backendName: "webgl", kernelFunc: w9 }; +var S9 = Wt + ` if (abs(x) > 1.) { return NAN; } return asin(x); `; var I9 = xe({ opSnippet: S9 }); -var pA = { kernelName: qo, backendName: "webgl", kernelFunc: I9 }; -var v9 = Ut + "return log(x + sqrt(x * x + 1.0));"; +var cA = { kernelName: Ko, backendName: "webgl", kernelFunc: I9 }; +var v9 = Wt + "return log(x + sqrt(x * x + 1.0));"; var k9 = xe({ opSnippet: v9 }); -var cA = { kernelName: jo, backendName: "webgl", kernelFunc: k9 }; -var N9 = Ut + ` +var lA = { kernelName: qo, backendName: "webgl", kernelFunc: k9 }; +var N9 = Wt + ` return atan(x); `; var T9 = xe({ opSnippet: N9 }); -var lA = { kernelName: Xo, backendName: "webgl", kernelFunc: T9 }; -var _9 = Wc + ` +var mA = { kernelName: jo, backendName: "webgl", kernelFunc: T9 }; +var _9 = Mc + ` return atan(a, b); `; var $9 = ` @@ -19466,16 +19467,16 @@ var $9 = ` 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); - ` + Xr + ` + ` + jr + ` return result; `; var E9 = nt({ opSnippet: _9, packedOpSnippet: $9 }); -var mA = { kernelName: Qo, backendName: "webgl", kernelFunc: E9 }; -var R9 = Ut + ` +var dA = { kernelName: Yo, backendName: "webgl", kernelFunc: E9 }; +var R9 = Wt + ` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`; var D9 = xe({ opSnippet: R9 }); -var dA = { kernelName: Yo, backendName: "webgl", kernelFunc: D9 }; +var fA = { kernelName: Xo, backendName: "webgl", kernelFunc: D9 }; var Us = class { constructor(t8, e, o, n = false, s = false) { if (this.variableNames = ["x"], e === "avg" && o) @@ -19635,7 +19636,7 @@ var Us = class { `; } }; -var Iu = class { +var xu = class { constructor(t8, e, o, n = false, s = false) { if (this.variableNames = ["x"], e === "avg" && o) throw new Error("Cannot compute positions for average pool."); @@ -19816,24 +19817,24 @@ var Iu = class { `; } }; -function A9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8; +function A9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8; 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 At({ inputs: { x: n }, backend: e }); + return Dt({ inputs: { x: n }, backend: e }); let l = new Us(c, "avg", false); return e.runWebGLProgram(l, [n], "float32"); } -var fA = { kernelName: Zo, backendName: "webgl", kernelFunc: A9 }; -function F9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 Iu(l, "avg", false); +var hA = { kernelName: Qo, backendName: "webgl", kernelFunc: A9 }; +function F9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 xu(l, "avg", false); return e.runWebGLProgram(m, [n], "float32"); } -var hA = { kernelName: Zs, backendName: "webgl", kernelFunc: F9 }; -var kh = class { +var gA = { kernelName: Zs, backendName: "webgl", kernelFunc: F9 }; +var vh = class { constructor(t8) { this.variableNames = ["dy"], this.outputShape = t8.inShape; let e = t8.filterHeight, o = t8.filterWidth, n = t8.strideHeight, s = t8.strideWidth, a = t8.dilationHeight, i = t8.dilationWidth, p = t8.effectiveFilterHeight, u = t8.effectiveFilterWidth, c = p - 1 - t8.padInfo.top, l = u - 1 - t8.padInfo.left, m = 1 / (e * o); @@ -19882,7 +19883,7 @@ var kh = class { `; } }; -var Nh = class { +var kh = class { constructor(t8) { this.variableNames = ["dy"], this.outputShape = t8.inShape; let e = t8.filterDepth, o = t8.filterHeight, n = t8.filterWidth, s = t8.strideDepth, a = t8.strideHeight, i = t8.strideWidth, p = t8.dilationDepth, u = t8.dilationHeight, c = t8.dilationWidth, l = t8.effectiveFilterDepth, m = t8.effectiveFilterHeight, d = t8.effectiveFilterWidth, f = l - 1 - t8.padInfo.front, h = m - 1 - t8.padInfo.top, g = d - 1 - t8.padInfo.left, x = 1 / (e * o * n); @@ -19945,24 +19946,24 @@ var Nh = class { `; } }; -function P9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, 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); +function P9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, 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 kh(m); return e.runWebGLProgram(d, [n], a.dtype); } -var gA = { kernelName: Ai, backendName: "webgl", kernelFunc: P9 }; -function O9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, a = s; +var xA = { kernelName: Ei, backendName: "webgl", kernelFunc: P9 }; +function O9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, 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); + let { filterSize: i, strides: p, pad: u } = o, c = w.computePool2DInfo(a.shape, i, p, 1, u), l = new vh(c); return e.runWebGLProgram(l, [n], a.dtype); } -var xA = { kernelName: Di, backendName: "webgl", kernelFunc: O9 }; -function M9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; - return _p({ a: n, b: s, transposeA: a, transposeB: i, backend: e }); +var yA = { kernelName: $i, backendName: "webgl", kernelFunc: O9 }; +function M9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; + return Cp({ a: n, b: s, transposeA: a, transposeB: i, backend: e }); } -var yA = { kernelName: Jo, backendName: "webgl", kernelFunc: M9 }; -var Th = class { +var bA = { kernelName: Zo, backendName: "webgl", kernelFunc: M9 }; +var Nh = class { constructor(t8, e, o, n, s, a) { this.outputShape = [], this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(t8, e), w.assertAndGetBroadcastShape(t8, o); let i = "0.0"; @@ -19981,7 +19982,7 @@ var Th = class { `; } }; -var _h = class { +var Th = class { constructor(t8, e, o, n, s, a) { this.packedInputs = true, this.packedOutput = true, this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(t8, e), w.assertAndGetBroadcastShape(t8, o); let i = "vec4(0.0)"; @@ -20003,8 +20004,8 @@ var _h = class { `; } }; -var L9 = ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o, mean: n, variance: s, offset: a, scale: i } = r; +var L9 = ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o, mean: n, variance: s, offset: a, scale: i } = r15; 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 } = e; p == null && (p = 1e-3); @@ -20012,16 +20013,16 @@ var L9 = ({ inputs: r, backend: t8, attrs: e }) => { 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); + let m = A().getBool("WEBGL_PACK_NORMALIZATION") ? new Th(o.shape, n.shape, s.shape, c, l, p) : new Nh(o.shape, n.shape, s.shape, c, l, p); return t8.runWebGLProgram(m, u, u[0].dtype); }; -var bA = { kernelName: vn, backendName: "webgl", kernelFunc: L9 }; -var $h = class { +var CA = { kernelName: In, backendName: "webgl", kernelFunc: L9 }; +var _h = class { constructor(t8) { this.variableNames = ["source"], this.outputShape = t8, this.rank = t8.length; let e = Re(this.rank); this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let o = B9(this.rank), n, s = t8.map((a, i) => `sourceLoc.${bv[i]} = start[${i}] + coords.${bv[i]};`); + let o = B9(this.rank), n, s = t8.map((a, i) => `sourceLoc.${Cv[i]} = start[${i}] + coords.${Cv[i]};`); n = ` ${e} sourceLoc; ${e} coords = getOutputCoords(); @@ -20035,18 +20036,18 @@ var $h = class { `; } }; -var bv = ["x", "y", "z", "w", "u", "v"]; -function B9(r) { - if (r === 1) +var Cv = ["x", "y", "z", "w", "u", "v"]; +function B9(r15) { + if (r15 === 1) return "sourceLoc"; - if (r <= 6) - return bv.slice(0, r).map((t8) => "sourceLoc." + t8).join(","); - throw Error(`Slicing for rank ${r} is not yet supported`); + if (r15 <= 6) + return Cv.slice(0, r15).map((t8) => "sourceLoc." + t8).join(","); + throw Error(`Slicing for rank ${r15} is not yet supported`); } -var Eh = class { +var $h = class { constructor(t8) { this.variableNames = ["source"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t8, this.rank = t8.length, this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let e = Re(this.rank), o = Dt("coords", this.rank), n = Dt("sourceLoc", this.rank), s = this.rank === 1 ? "sourceLoc" : `vec2(${n.slice(-2).join()})`, a = `getChannel(getSource(${n.join()}), ${s})`, i = ` + let e = 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 = ` result.x = ${a}; if (++${o[this.rank - 1]} < ${t8[this.rank - 1]}) { ++${n[this.rank - 1]}; @@ -20079,42 +20080,42 @@ var Eh = class { `; } }; -function z9(r, t8, e, o) { - let n = o.texData.get(r.dataId), s = o.makeTensorInfo(e, r.dtype), a = o.texData.get(s.dataId); - Object.assign(a, n), a.refCount = 1, a.shape = e, a.dtype = r.dtype; - let i = ct.computeFlatOffset(t8, y.computeStrides(r.shape)); - n.slice && (i += n.slice.flatOffset), a.slice = { flatOffset: i, origDataId: n.slice && n.slice.origDataId || r.dataId }; +function z9(r15, t8, e, o) { + let n = o.texData.get(r15.dataId), s = o.makeTensorInfo(e, r15.dtype), a = o.texData.get(s.dataId); + Object.assign(a, n), a.refCount = 1, a.shape = e, a.dtype = r15.dtype; + let i = pt.computeFlatOffset(t8, y.computeStrides(r15.shape)); + n.slice && (i += n.slice.flatOffset), a.slice = { flatOffset: i, origDataId: n.slice && n.slice.origDataId || r15.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: t8, backend: e, attrs: o } = r, { x: n } = t8, { begin: s, size: a } = o, [i, p] = ct.parseSliceParams(n, s, a); - if (ct.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) +function Gs(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { begin: s, size: a } = o, [i, p] = pt.parseSliceParams(n, s, a); + if (pt.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) return e.makeTensorInfo(p, n.dtype, []); if (e.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let l = e.texData.get(n.dataId), m = pD(l.values, i, p, n.shape, n.dtype); + let l = e.texData.get(n.dataId), m = cD(l.values, i, p, n.shape, n.dtype); return e.makeTensorInfo(p, n.dtype, m); } - let { isPacked: u } = e.texData.get(n.dataId), c = ct.isSliceContinous(n.shape, i, p); + let { isPacked: u } = e.texData.get(n.dataId), c = pt.isSliceContinous(n.shape, i, p); if (u || !c) { - let l = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Eh(p) : new $h(p), m = [i]; + let l = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new $h(p) : new _h(p), m = [i]; return e.runWebGLProgram(l, [n], n.dtype, m); } return e.uploadToGPU(n.dataId), z9(n, i, p, e); } -var CA = { kernelName: ha, backendName: "webgl", kernelFunc: Gs }; -var V9 = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, crops: a } = o; +var wA = { kernelName: ha, backendName: "webgl", kernelFunc: Gs }; +var V9 = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { shape: p } }), h = Ct({ inputs: { x: f }, backend: e, attrs: { perm: u } }), g = te({ inputs: { x: h }, backend: e, attrs: { shape: c } }), x = Gs({ inputs: { x: g }, backend: e, attrs: { begin: l, size: m } }); + 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: e, attrs: { shape: p } }), h = bt({ inputs: { x: f }, backend: e, attrs: { perm: u } }), g = te({ inputs: { x: h }, backend: e, attrs: { shape: c } }), x = Gs({ inputs: { x: g }, backend: e, attrs: { begin: l, size: m } }); return d.push(f), d.push(h), d.push(g), d.forEach((b) => e.disposeIntermediateTensorInfo(b)), x; }; -var wA = { kernelName: Js, backendName: "webgl", kernelFunc: V9 }; -function W9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { size: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), u = ph(i, p, s.dtype, s.shape, a); +var SA = { kernelName: Js, backendName: "webgl", kernelFunc: V9 }; +function W9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { size: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), u = uh(i, p, s.dtype, s.shape, a); return e.makeTensorInfo([a], s.dtype, u); } -var SA = { kernelName: en, backendName: "webgl", kernelFunc: W9 }; +var IA = { kernelName: Jo, backendName: "webgl", kernelFunc: W9 }; var U9 = ` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); @@ -20125,67 +20126,67 @@ var U9 = ` var G9 = ` return float(int(a.r) & int(b.r)); `; -function H9(r) { - let { inputs: t8, backend: e } = r, { a: o, b: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS"), a = A().getNumber("WEBGL_VERSION"); +function H9(r15) { + let { inputs: t8, backend: e } = r15, { a: o, b: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS"), a = A().getNumber("WEBGL_VERSION"); if (e.shouldExecuteOnCPU([o, n]) || a === 1) { - let p = e.texData.get(o.dataId).values, u = e.texData.get(n.dataId).values, [c, l] = AR(o.shape, n.shape, p, u, o.dtype), m = e.makeTensorInfo(l, o.dtype), d = e.texData.get(m.dataId); + let p = e.texData.get(o.dataId).values, u = e.texData.get(n.dataId).values, [c, l] = FR(o.shape, n.shape, p, u, o.dtype), m = e.makeTensorInfo(l, o.dtype), d = e.texData.get(m.dataId); return d.values = c, m; } let i; - return s ? i = new jr(U9, o.shape, n.shape, false) : i = new Pr(G9, o.shape, n.shape), e.runWebGLProgram(i, [o, n], o.dtype); + return s ? i = new qr(U9, o.shape, n.shape, false) : i = new Fr(G9, o.shape, n.shape), e.runWebGLProgram(i, [o, n], o.dtype); } -var IA = { kernelName: ja, backendName: "webgl", kernelFunc: H9 }; -function K9(r) { - let { inputs: t8, backend: e } = r, { s0: o, s1: n } = t8, s = e.readSync(o.dataId), a = e.readSync(n.dataId), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var vA = { kernelName: qa, backendName: "webgl", kernelFunc: H9 }; +function K9(r15) { + let { inputs: t8, backend: e } = r15, { s0: o, s1: n } = t8, s = e.readSync(o.dataId), a = e.readSync(n.dataId), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return e.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var vA = { kernelName: ea, backendName: "webgl", kernelFunc: K9 }; +var kA = { kernelName: ea, backendName: "webgl", kernelFunc: K9 }; var q9 = "return float(a != b);"; -var Cv = nt({ opSnippet: q9, cpuKernelImpl: eD, dtype: "bool" }); -var kA = { kernelName: Qn, backendName: "webgl", kernelFunc: Cv }; -function wi(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.texData.get(o.dataId); - return At({ inputs: { x: n.complexTensorInfos.real }, backend: e }); +var wv = nt({ opSnippet: q9, cpuKernelImpl: tD, dtype: "bool" }); +var NA = { kernelName: Yn, backendName: "webgl", kernelFunc: wv }; +function yi(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.texData.get(o.dataId); + return Dt({ inputs: { x: n.complexTensorInfos.real }, backend: e }); } -var NA = { kernelName: qi, backendName: "webgl", kernelFunc: wi }; +var TA = { kernelName: Gi, backendName: "webgl", kernelFunc: yi }; var j9 = "return float(int(x));"; -function TA(r, t8) { - let e = new or(r.shape, j9), o = t8.runWebGLProgram(e, [r], "int32"); +function _A(r15, t8) { + let e = new tr(r15.shape, j9), o = t8.runWebGLProgram(e, [r15], "int32"); return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -function wv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dtype: s } = o; +function Sv(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return At({ inputs: { x: n }, backend: e }); - let a = Gr(n.shape), i = wv({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), p = Or({ inputs: { real: i, imag: a }, backend: e }); + return Dt({ inputs: { x: n }, backend: e }); + let a = Ur(n.shape), i = Sv({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), p = Pr({ inputs: { real: i, imag: a }, backend: e }); return a.dispose(), e.disposeIntermediateTensorInfo(i), p; } if (n.dtype === "complex64") { - let a = wi({ inputs: { input: n }, backend: e }), i = wv({ inputs: { x: a }, backend: e, attrs: { dtype: s } }); + let a = yi({ inputs: { input: n }, backend: e }), i = Sv({ inputs: { x: a }, backend: e, attrs: { dtype: s } }); return e.disposeIntermediateTensorInfo(a), i; } if (!y.hasEncodingLoss(n.dtype, s)) { - let a = At({ inputs: { x: n }, backend: e }); + let a = Dt({ inputs: { x: n }, backend: e }); return { dataId: a.dataId, shape: a.shape, dtype: s }; } if (e.shouldExecuteOnCPU([n])) { - let a = e.texData.get(n.dataId).values, [i, p, u] = FR(a, n.shape, n.dtype, s); + let a = e.texData.get(n.dataId).values, [i, p, u] = PR(a, n.shape, n.dtype, s); return e.makeTensorInfo(i, p, u); } if (s === "int32") - return TA(n, e); + return _A(n, e); if (s === "bool") { - let a = e.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = Cv({ inputs: { a: n, b: a }, backend: e }); + let a = e.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = wv({ inputs: { a: n, b: a }, backend: e }); return e.disposeIntermediateTensorInfo(a), p; } throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); } -var _A = { kernelName: bo, backendName: "webgl", kernelFunc: wv }; -var $A = "return ceil(x);"; -var X9 = xe({ opSnippet: $A, packedOpSnippet: $A, cpuKernelImpl: PR }); -var EA = { kernelName: tn, backendName: "webgl", kernelFunc: X9 }; -var Rh = class { +var $A = { kernelName: yo, backendName: "webgl", kernelFunc: Sv }; +var EA = "return ceil(x);"; +var X9 = xe({ opSnippet: EA, packedOpSnippet: EA, cpuKernelImpl: OR }); +var RA = { kernelName: en, backendName: "webgl", kernelFunc: X9 }; +var Eh = class { constructor(t8) { this.variableNames = ["A"], this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = t8, this.userCode = ` @@ -20201,7 +20202,7 @@ var Rh = class { `; } }; -var Dh = class { +var Rh = class { constructor(t8) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = t8, this.userCode = ` void main() { @@ -20217,14 +20218,14 @@ var Dh = class { `; } }; -function Y9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { clipValueMin: s, clipValueMax: a } = o, i; - A().getBool("WEBGL_PACK_CLIP") ? i = new Dh(n.shape) : i = new Rh(n.shape); +function Y9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { clipValueMin: s, clipValueMax: a } = o, i; + A().getBool("WEBGL_PACK_CLIP") ? i = new Rh(n.shape) : i = new Eh(n.shape); let p = [[s], [a]]; return e.runWebGLProgram(i, [n], n.dtype, p); } -var RA = { kernelName: Co, backendName: "webgl", kernelFunc: Y9 }; -var Ah = class { +var DA = { kernelName: bo, backendName: "webgl", kernelFunc: Y9 }; +var Dh = class { constructor(t8) { this.variableNames = ["real", "imag"], this.outputShape = t8, this.userCode = ` void main() { @@ -20242,15 +20243,15 @@ var Ah = class { `; } }; -function DA(r, t8) { - return { dataId: t8.dataId, dtype: t8.dtype, shape: r.shape }; +function AA(r15, t8) { + return { dataId: t8.dataId, dtype: t8.dtype, shape: r15.shape }; } -function Q9(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = e.texData.get(o.dataId), s = new Ah(o.shape), a = [DA(o, n.complexTensorInfos.real), DA(o, n.complexTensorInfos.imag)]; +function Q9(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = e.texData.get(o.dataId), s = new Dh(o.shape), a = [AA(o, n.complexTensorInfos.real), AA(o, n.complexTensorInfos.imag)]; return e.runWebGLProgram(s, a, a[0].dtype); } -var AA = { kernelName: Pi, backendName: "webgl", kernelFunc: Q9 }; -var Fh = class { +var FA = { kernelName: Di, backendName: "webgl", kernelFunc: Q9 }; +var Ah = class { constructor(t8) { this.outputShape = [], this.outputShape = w.computeOutShape(t8, 1), this.variableNames = t8.map((a, i) => `T${i}`); let e = new Array(t8.length - 1); @@ -20275,10 +20276,10 @@ var Fh = class { `; } }; -var Oh = class { +var Ph = class { constructor(t8, e) { this.packedInputs = true, this.packedOutput = true, this.outputShape = [], this.outputShape = w.computeOutShape(t8, e); - let o = this.outputShape, n = o.length, s = Re(n), a = Dt("coords", n), i = ["x", "y", "z", "w", "u", "v"].slice(0, n); + let o = this.outputShape, n = o.length, s = Re(n), a = Rt("coords", n), i = ["x", "y", "z", "w", "u", "v"].slice(0, n); this.variableNames = t8.map((h, g) => `T${g}`); let p = new Array(t8.length - 1); p[0] = t8[0][e]; @@ -20293,15 +20294,15 @@ var Oh = class { m += ` if (${u} < ${p[h]} && ${u} >= ${p[h - 1]}) { return getChannel( - getT${h}(${Ph(i, u, g)}), - vec2(${Ph(c, u, g)})); + getT${h}(${Fh(i, u, g)}), + vec2(${Fh(c, u, g)})); }`; } let d = p.length, f = p[p.length - 1]; m += ` return getChannel( - getT${d}(${Ph(i, u, f)}), - vec2(${Ph(c, u, f)}));`, this.userCode = ` + getT${d}(${Fh(i, u, f)}), + vec2(${Fh(c, u, f)}));`, this.userCode = ` float getValue(${i.map((h) => "int " + h)}) { ${m} } @@ -20330,70 +20331,70 @@ var Oh = class { `; } }; -function Ph(r, t8, e) { - let o = r.indexOf(t8); - return r.map((s, a) => a === o ? `${s} - ${e}` : s).join(); +function Fh(r15, t8, e) { + let o = r15.indexOf(t8); + return r15.map((s, a) => a === o ? `${s} - ${e}` : s).join(); } -function $p(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.texData.get(o.dataId); - return At({ inputs: { x: n.complexTensorInfos.imag }, backend: e }); +function wp(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.texData.get(o.dataId); + return Dt({ inputs: { x: n.complexTensorInfos.imag }, backend: e }); } -var FA = { kernelName: Gi, backendName: "webgl", kernelFunc: $p }; -function Gc(r, t8, e) { - let o = r[0].dtype; +var PA = { kernelName: Vi, backendName: "webgl", kernelFunc: wp }; +function Bc(r15, t8, e) { + let o = r15[0].dtype; if (o === "complex64") { - let d = r.map((b) => wi({ inputs: { input: b }, backend: e })), f = r.map((b) => $p({ inputs: { input: b }, backend: e })), h = Gc(d, t8, e), g = Gc(f, t8, e), x = Or({ inputs: { real: h, imag: g }, backend: e }); + let d = r15.map((b) => yi({ inputs: { input: b }, backend: e })), f = r15.map((b) => wp({ inputs: { input: b }, backend: e })), h = Bc(d, t8, e), g = Bc(f, t8, e), x = Pr({ inputs: { real: h, imag: g }, backend: e }); return d.forEach((b) => e.disposeIntermediateTensorInfo(b)), f.forEach((b) => e.disposeIntermediateTensorInfo(b)), e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(g), x; } - let n = e.shouldExecuteOnCPU(r); + let n = e.shouldExecuteOnCPU(r15); if (o === "string" && (n = true), n) { - let d = r.map((S) => { + let d = r15.map((S) => { let _ = [-1, y.sizeFromShape(S.shape.slice(t8))]; return te({ inputs: { x: S }, backend: e, attrs: { shape: _ } }); - }), f = d.map((S) => ({ vals: e.readSync(S.dataId), shape: S.shape })), h = w.computeOutShape(d.map((S) => S.shape), 1), g = d[0].shape[0] === 1, x = OR(f, h, o, g), b = w.computeOutShape(r.map((S) => S.shape), t8), C = e.makeTensorInfo(b, o, x); + }), f = d.map((S) => ({ vals: e.readSync(S.dataId), shape: S.shape })), h = w.computeOutShape(d.map((S) => S.shape), 1), g = d[0].shape[0] === 1, x = MR(f, h, o, g), b = w.computeOutShape(r15.map((S) => S.shape), t8), C = e.makeTensorInfo(b, o, x); return d.forEach((S) => e.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; + let s = r15.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 or(r[0].shape, Ba) : new Fr(r[0].shape, Ba); - return e.runWebGLProgram(d, r, o); + let d = a ? new tr(r15[0].shape, La) : new Ar(r15[0].shape, La); + return e.runWebGLProgram(d, r15, o); } let i = A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); if (s.length > i) { let d = []; for (let h = 0; h < s.length; h += i) { let g = s.slice(h, h + i); - d.push(Gc(g, t8, e)); + d.push(Bc(g, t8, e)); } - let f = Gc(d, t8, e); + let f = Bc(d, t8, e); for (let h of d) e.disposeIntermediateTensorInfo(h); return f; } if (a) { - let d = new Oh(s.map((f) => f.shape), t8); + let d = new Ph(s.map((f) => f.shape), t8); return e.runWebGLProgram(d, s, o); } - let { tensors2D: p, outShape: u } = Z9(s, t8, e), c = new Fh(p.map((d) => d.shape)), l = e.runWebGLProgram(c, p, o); + let { tensors2D: p, outShape: u } = Z9(s, t8, e), c = new Ah(p.map((d) => d.shape)), l = e.runWebGLProgram(c, p, o); p.forEach((d) => e.disposeIntermediateTensorInfo(d)); let m = te({ inputs: { x: l }, attrs: { shape: u }, backend: e }); return e.disposeIntermediateTensorInfo(l), m; } -function Z9(r, t8, e) { - let o = w.computeOutShape(r.map((s) => s.shape), t8); - return { tensors2D: r.map((s) => te({ inputs: { x: s }, attrs: { shape: [-1, y.sizeFromShape(s.shape.slice(t8))] }, backend: e })), outShape: o }; +function Z9(r15, t8, e) { + let o = w.computeOutShape(r15.map((s) => s.shape), t8); + return { tensors2D: r15.map((s) => te({ inputs: { x: s }, attrs: { shape: [-1, y.sizeFromShape(s.shape.slice(t8))] }, backend: e })), outShape: o }; } -function Sv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((u) => u.shape); +function Iv(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((u) => u.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(t8.map((u) => u.shape), s); if (y.sizeFromShape(i) === 0) return e.makeTensorInfo(i, t8[0].dtype, []); let p = t8.filter((u) => y.sizeFromShape(u.shape) > 0); - return p.length === 1 ? At({ inputs: { x: p[0] }, backend: e }) : Gc(p, s, e); + return p.length === 1 ? Dt({ inputs: { x: p[0] }, backend: e }) : Bc(p, s, e); } -var PA = { kernelName: ta, backendName: "webgl", kernelFunc: Sv }; -var Hc = class { +var OA = { kernelName: ta, backendName: "webgl", kernelFunc: Iv }; +var zc = class { constructor(t8, e = false, o = null, n = false, s = false) { this.variableNames = ["x", "W"], this.outputShape = t8.outShape; let a = t8.padInfo.top, i = t8.padInfo.left, p = t8.strideHeight, u = t8.strideWidth, c = t8.dilationHeight, l = t8.dilationWidth, m = t8.filterHeight, d = t8.filterWidth, f = Math.floor(t8.inChannels / 4) * 4, h = t8.inChannels % 4, g = t8.dataFormat === "channelsLast", x = g ? 1 : 2, b = g ? 2 : 3, C = g ? 3 : 1, S = "", k = ""; @@ -20536,7 +20537,7 @@ var Hc = class { `; } }; -var Mh = class { +var Oh = class { constructor(t8) { this.variableNames = ["x", "W"], this.outputShape = t8.outShape; let e = t8.padInfo.front, o = t8.padInfo.top, n = t8.padInfo.left, s = t8.strideDepth, a = t8.strideHeight, i = t8.strideWidth, p = t8.dilationDepth, u = t8.dilationHeight, c = t8.dilationWidth, l = t8.filterDepth, m = t8.filterHeight, d = t8.filterWidth, f = Math.floor(t8.inChannels / 4) * 4, h = t8.inChannels % 4; @@ -20631,9 +20632,9 @@ var Mh = class { `; } }; -var Kc = class { +var Vc = class { constructor(t8, e = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = ut(this.outputShape.length); let a = t8.padInfo.left, i = t8.strideWidth, p = t8.dilationWidth, u = t8.filterHeight, c = t8.filterWidth, l = c, m = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; @@ -20855,10 +20856,10 @@ var Kc = class { `; } }; -var Lh = class { +var Mh = class { constructor(t8, e) { - 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 = t8, this.enableShapeUniforms = pt(this.outputShape.length); - let { dataFormat: o } = e, n = vt(), s = o === "channelsLast", a = s ? 1 : 2, i = s ? 2 : 3, p = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${t8[2]} && pos < ${t8[1]}) {`, u = ""; + 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 = t8, this.enableShapeUniforms = ut(this.outputShape.length); + let { dataFormat: o } = e, 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 < ${t8[2]} && pos < ${t8[1]}) {`, u = ""; for (let c = 0; c <= 1; c++) for (let l = 0; l <= 1; l++) u += ` @@ -20912,50 +20913,50 @@ var Lh = class { `; } }; -function Bh(r, t8) { - let e = r.length; - return e >= 3 ? t8 ? [...r.slice(0, -3), r[e - 3] * r[e - 2], r[e - 1]] : [...r.slice(0, -3), r[e - 3], r[e - 2] * r[e - 1]] : !t8 && e === 1 && r[0] > 1 ? [r[0], 1] : null; +function Lh(r15, t8) { + let e = r15.length; + return e >= 3 ? t8 ? [...r15.slice(0, -3), r15[e - 3] * r15[e - 2], r15[e - 1]] : [...r15.slice(0, -3), r15[e - 3], r15[e - 2] * r15[e - 1]] : !t8 && e === 1 && r15[0] > 1 ? [r15[0], 1] : null; } -function zh({ x: r, filter: t8, convInfo: e, 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 = e.inChannels, l = p[0] * p[1] * p[2], m = e.outChannels, d = e.dataFormat === "channelsLast", f = false, h = false, g, x = []; +function Bh({ x: r15, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = r15.shape, u = o.texData.get(r15.dataId), c = e.inChannels, l = p[0] * p[1] * p[2], m = e.outChannels, d = e.dataFormat === "channelsLast", f = false, h = false, g, x = []; if (s != null) { - let S = Bh(s.shape, d); + let S = Lh(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); + let S = Lh(n.shape, d); S != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: S } }), x.push(n)); } - if (!((l === 1 || m === 1) && c > yv) && 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, e.inChannels], dtype: r.dtype }, _ = u.shape; - u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, y.assert(Cu(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); + if (!((l === 1 || m === 1) && c > bv) && 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: r15.dataId, shape: [1, S, e.inChannels], dtype: r15.dtype }, _ = u.shape; + u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, y.assert(hu(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); let E = te({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, e.inChannels, e.outChannels] } }); x.push(E); - let R = _p({ a: k, b: E, 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 = e.outShape, g = At({ inputs: { x: R }, backend: o }), g.shape = e.outShape, x.push(R); + let R = Cp({ a: k, b: E, 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 = e.outShape, g = Dt({ inputs: { x: R }, backend: o }), g.shape = e.outShape, x.push(R); } else { - let S = e.outHeight * e.outWidth, k = te({ inputs: { x: r }, backend: o, attrs: { shape: d ? [e.batchSize, S, e.inChannels] : [e.batchSize, e.inChannels, S] } }), _ = te({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, e.inChannels, e.outChannels] } }), E = _p({ a: d ? k : _, b: d ? _ : k, transposeA: !d, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + let S = e.outHeight * e.outWidth, k = te({ inputs: { x: r15 }, backend: o, attrs: { shape: d ? [e.batchSize, S, e.inChannels] : [e.batchSize, e.inChannels, S] } }), _ = te({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, e.inChannels, e.outChannels] } }), E = Cp({ a: d ? k : _, b: d ? _ : k, transposeA: !d, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); g = te({ inputs: { x: E }, backend: o, attrs: { shape: e.outShape } }), x.push(k), x.push(_), x.push(E); } for (let S of x) o.disposeIntermediateTensorInfo(S); return g; } -function Vh({ x: r, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { +function zh({ x: r15, filter: t8, convInfo: e, 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 } = e, f = d === "channelsLast", h = p * u * c, g = m * l, x = [e.batchSize, h, g], b = true, C = false, S = []; if (s != null) { - let q = Bh(s.shape, f); + let q = Lh(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); + let q = Lh(n.shape, f); q != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: q } }), S.push(n)); } let k = te({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, h, y.sizeFromShape(t8.shape) / h] } }); S.push(k); - let _ = new Lh(x, e), E = [r.shape, [e.padInfo.top, e.padInfo.left], [e.strideHeight, e.strideWidth], [e.dilationHeight, e.dilationWidth], [e.inChannels], [e.filterWidth * e.inChannels], [e.outWidth]], R = o.runWebGLProgram(_, [r], "float32", E), D = te({ inputs: { x: R }, backend: o, attrs: { shape: x } }); + let _ = new Mh(x, e), E = [r15.shape, [e.padInfo.top, e.padInfo.left], [e.strideHeight, e.strideWidth], [e.dilationHeight, e.dilationWidth], [e.inChannels], [e.filterWidth * e.inChannels], [e.outWidth]], R = o.runWebGLProgram(_, [r15], "float32", E), 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 ? Ci(i, true) : null, B = new Uc(f ? D.shape : k.shape, f ? k.shape : D.shape, f ? [e.batchSize, g, e.outChannels] : [e.batchSize, e.outChannels, g], b, C, P, L, O, M), z = f ? [D, k] : [k, D]; + let P = n != null, O = s != null, M = i === "leakyrelu", L = i ? xi(i, true) : null, B = new Lc(f ? D.shape : k.shape, f ? k.shape : D.shape, f ? [e.batchSize, g, e.outChannels] : [e.batchSize, e.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); @@ -20966,24 +20967,24 @@ function Vh({ x: r, filter: t8, convInfo: e, backend: o, bias: n = null, preluAc o.disposeIntermediateTensorInfo(q); return j; } -function J9(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { 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; +function J9(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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: e }); + d = Bh({ x: n, filter: s, convInfo: m, backend: e }); else if (m.strideWidth <= 2 && l === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { - let h = new Kc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; + let h = new Vc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; d = e.runWebGLProgram(h, [n, s], "float32", g); } else if (A().getBool("WEBGL_CONV_IM2COL")) - d = Vh({ x: n, filter: s, convInfo: m, backend: e }); + d = zh({ x: n, filter: s, convInfo: m, backend: e }); else { - let h = new Hc(m); + let h = new zc(m); d = e.runWebGLProgram(h, [n, s], "float32"); } let f = te({ inputs: { x: d }, backend: e, attrs: { shape: m.outShape } }); return e.disposeIntermediateTensorInfo(d), f; } -var OA = { kernelName: rn, backendName: "webgl", kernelFunc: J9 }; -var Wh = class { +var MA = { kernelName: tn, backendName: "webgl", kernelFunc: J9 }; +var Vh = class { constructor(t8) { this.variableNames = ["x", "dy"], this.outputShape = t8.filterShape; let e = t8.strideHeight, o = t8.strideWidth, n = t8.padInfo.top, s = t8.padInfo.left, a = t8.dataFormat === "channelsLast"; @@ -21027,7 +21028,7 @@ var Wh = class { `; } }; -var Uh = class { +var Wh = class { constructor(t8) { this.variableNames = ["dy", "W"], this.outputShape = t8.inShape; let e = t8.filterHeight, o = t8.filterWidth, n = t8.strideHeight, s = t8.strideWidth, a = t8.dataFormat === "channelsLast", i = e - 1 - t8.padInfo.top, p = o - 1 - t8.padInfo.left, u = a ? 1 : 2, c = a ? 2 : 3, l = a ? 3 : 1; @@ -21087,7 +21088,7 @@ var Uh = class { `; } }; -var Gh = class { +var Uh = class { constructor(t8) { this.variableNames = ["x", "dy"], this.outputShape = t8.filterShape; let e = t8.strideDepth, o = t8.strideHeight, n = t8.strideWidth, s = t8.padInfo.front, a = t8.padInfo.top, i = t8.padInfo.left; @@ -21136,7 +21137,7 @@ var Gh = class { `; } }; -var Hh = class { +var Gh = class { constructor(t8) { this.variableNames = ["dy", "W"], this.outputShape = t8.inShape; let e = t8.filterDepth, o = t8.filterHeight, n = t8.filterWidth, s = t8.strideDepth, a = t8.strideHeight, i = t8.strideWidth, p = e - 1 - t8.padInfo.front, u = o - 1 - t8.padInfo.top, c = n - 1 - t8.padInfo.left; @@ -21200,14 +21201,14 @@ var Hh = class { `; } }; -function eJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { 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, false, l), d = new Wh(m); +function eJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { 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, false, l), d = new Vh(m); return e.runWebGLProgram(d, [n, s], "float32"); } -var MA = { kernelName: Oi, backendName: "webgl", kernelFunc: eJ }; -var Kh = class { +var LA = { kernelName: Ai, backendName: "webgl", kernelFunc: eJ }; +var Hh = class { constructor(t8) { - this.variableNames = ["dy", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "strides", type: "vec2" }], this.outputShape = t8.inShape, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["dy", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "strides", type: "vec2" }], this.outputShape = t8.inShape, this.enableShapeUniforms = ut(this.outputShape.length); let e = t8.filterHeight, o = t8.filterWidth, n = e - 1 - t8.padInfo.top, s = o - 1 - t8.padInfo.left; this.userCode = ` const ivec2 pads = ivec2(${n}, ${s}); @@ -21286,50 +21287,50 @@ var Kh = class { `; } }; -function tJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { 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); +function tJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { 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); if (A().getBool("WEBGL_PACK_CONV2DTRANSPOSE") && l === "channelsLast") { - let d = [[m.strideHeight, m.strideWidth]], f = new Kh(m); + let d = [[m.strideHeight, m.strideWidth]], f = new Hh(m); return e.runWebGLProgram(f, [n, s], "float32", d); } else { - let d = new Uh(m); + let d = new Wh(m); return e.runWebGLProgram(d, [n, s], "float32"); } } -var LA = { kernelName: on, backendName: "webgl", kernelFunc: tJ }; -function rJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o, u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = new Mh(u); +var BA = { kernelName: rn, backendName: "webgl", kernelFunc: tJ }; +function rJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o, u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = new Oh(u); return e.runWebGLProgram(c, [n, s], "float32"); } -var BA = { kernelName: nn, backendName: "webgl", kernelFunc: rJ }; -function oJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o, u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = new Gh(u); +var zA = { kernelName: on, backendName: "webgl", kernelFunc: rJ }; +function oJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o, u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = new Uh(u); return e.runWebGLProgram(c, [n, s], "float32"); } -var zA = { kernelName: Xa, backendName: "webgl", kernelFunc: oJ }; -function nJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { pad: a, strides: i, inputShape: p } = o, u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = new Hh(u); +var VA = { kernelName: ja, backendName: "webgl", kernelFunc: oJ }; +function nJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { pad: a, strides: i, inputShape: p } = o, u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = new Gh(u); return e.runWebGLProgram(c, [n, s], "float32"); } -var VA = { kernelName: sn, backendName: "webgl", kernelFunc: nJ }; -var sJ = Po + ` +var WA = { kernelName: nn, backendName: "webgl", kernelFunc: nJ }; +var sJ = Fo + ` return cos(x); `; var aJ = ` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${Xr} + ${jr} return result; `; var iJ = xe({ opSnippet: sJ, packedOpSnippet: aJ }); -var WA = { kernelName: an, backendName: "webgl", kernelFunc: iJ }; +var UA = { kernelName: sn, backendName: "webgl", kernelFunc: iJ }; var uJ = ` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `; var pJ = xe({ opSnippet: uJ }); -var UA = { kernelName: un, backendName: "webgl", kernelFunc: pJ }; -var qh = class { +var GA = { kernelName: an, backendName: "webgl", kernelFunc: pJ }; +var Kh = class { constructor(t8, e, o, n, s) { this.variableNames = ["Image", "Boxes", "BoxInd"], this.outputShape = []; let [a, i, p, u] = t8, [c] = e, [l, m] = o; @@ -21399,101 +21400,101 @@ var qh = class { `; } }; -var cJ = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { image: n, boxes: s, boxInd: a } = t8, { cropSize: i, method: p, extrapolationValue: u } = o, c = new qh(n.shape, s.shape, i, p, u); +var cJ = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = t8, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Kh(n.shape, s.shape, i, p, u); return e.runWebGLProgram(c, [n, s, a], "float32"); }; -var GA = { kernelName: ln, backendName: "webgl", kernelFunc: cJ }; -var Ep; -(function(r) { - r.Prod = "*", r.Sum = "+"; -})(Ep || (Ep = {})); -var om = class { +var HA = { kernelName: cn, backendName: "webgl", kernelFunc: cJ }; +var Sp; +(function(r15) { + r15.Prod = "*", r15.Sum = "+"; +})(Sp || (Sp = {})); +var tm = class { constructor(t8, e, o, n) { this.op = t8, this.outputShape = e, this.variableNames = ["x"], this.customUniforms = [{ name: "index", type: "float" }]; - let s = this.outputShape.length, a = this.op === Ep.Prod ? "1.0" : "0.0", i = o ? a : `getX(${HA(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", c = ""; + let s = this.outputShape.length, a = this.op === Sp.Prod ? "1.0" : "0.0", i = o ? a : `getX(${KA(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", c = ""; o ? (u = n ? `end != ${p - 1}` : "end != 0", c = n ? "end + 1" : "end - 1") : (u = n ? `end + pow2 < ${p}` : "end >= pow2", c = n ? "end + pow2" : "end - pow2"), this.userCode = ` void main() { ${Re(s)} coords = getOutputCoords(); - int end = ${KA(s, "coords", this.op)}; + int end = ${qA(s, "coords", this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { int idx = ${c}; - ${KA(s, "coords", this.op)} = idx; - val ${this.op}= getX(${HA(s, "coords", this.op)}); + ${qA(s, "coords", this.op)} = idx; + val ${this.op}= getX(${KA(s, "coords", this.op)}); } setOutput(val); } `; } }; -function HA(r, t8, e) { - if (r === 1) +function KA(r15, t8, e) { + if (r15 === 1) return `${t8}`; - if (r === 2) + if (r15 === 2) return `${t8}.x, ${t8}.y`; - if (r === 3) + if (r15 === 3) return `${t8}.x, ${t8}.y, ${t8}.z`; - if (r === 4) + if (r15 === 4) return `${t8}.x, ${t8}.y, ${t8}.z, ${t8}.w`; - throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`); + throw new Error(`Cumulative ${e} for rank ${r15} is not yet supported`); } -function KA(r, t8, e) { - if (r === 1) +function qA(r15, t8, e) { + if (r15 === 1) return `${t8}`; - if (r === 2) + if (r15 === 2) return `${t8}.y`; - if (r === 3) + if (r15 === 3) return `${t8}.z`; - if (r === 4) + if (r15 === 4) return `${t8}.w`; - throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`); + throw new Error(`Cumulative ${e} for rank ${r15} is not yet supported`); } -function jh(r, t8, e, o, n, s) { +function qh(r15, t8, e, o, n, s) { let a = t8.shape.length, i = w.getAxesPermutation([o], a), p = t8; - i != null && (p = Ct({ inputs: { x: t8 }, backend: e, attrs: { perm: i } })); + i != null && (p = bt({ inputs: { x: t8 }, backend: e, 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=${t8.shape.length - 1} but got axis=${o}`); - let c = p.shape[u], l = At({ inputs: { x: p }, backend: e }); + let c = p.shape[u], l = Dt({ inputs: { x: p }, backend: e }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { - let d = new om(r, p.shape, false, s), f = [[m]], h = l; + let d = new tm(r15, p.shape, false, s), f = [[m]], h = l; l = e.runWebGLProgram(d, [l], l.dtype, f), e.disposeIntermediateTensorInfo(h); } if (n) { - let m = new om(r, p.shape, n, s), d = l; + let m = new tm(r15, p.shape, n, s), d = l; l = e.runWebGLProgram(m, [l], l.dtype), e.disposeIntermediateTensorInfo(d); } if (i != null) { - let m = w.getUndoAxesPermutation(i), d = Ct({ inputs: { x: l }, backend: e, attrs: { perm: m } }); + let m = w.getUndoAxesPermutation(i), d = bt({ inputs: { x: l }, backend: e, attrs: { perm: m } }); return e.disposeIntermediateTensorInfo(l), e.disposeIntermediateTensorInfo(p), d; } return l; } -function lJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; - return jh(Ep.Prod, n, e, s, a, i); +function lJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; + return qh(Sp.Prod, n, e, s, a, i); } -var qA = { kernelName: pn, backendName: "webgl", kernelFunc: lJ }; -function mJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; - return jh(Ep.Sum, n, e, s, a, i); +var jA = { kernelName: un, backendName: "webgl", kernelFunc: lJ }; +function mJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; + return qh(Sp.Sum, n, e, s, a, i); } -var jA = { kernelName: cn, backendName: "webgl", kernelFunc: mJ }; -function dJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { size: a, binaryOutput: i } = o; +var XA = { kernelName: pn, backendName: "webgl", kernelFunc: mJ }; +function dJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = e.readSync(n.dataId), u = e.readSync(s.dataId), c = ph(p, u, s.dtype, s.shape, a); + let p = e.readSync(n.dataId), u = e.readSync(s.dataId), c = uh(p, u, s.dtype, s.shape, a); return e.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = e.bufferSync(n), u = e.bufferSync(s), c = DR(p, u, a, i); + let p = e.bufferSync(n), u = e.bufferSync(s), c = AR(p, u, a, i); return e.makeTensorInfo(c.shape, s.dtype, c.values); } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var XA = { kernelName: ra, backendName: "webgl", kernelFunc: dJ }; -var Xh = class { +var YA = { kernelName: ra, backendName: "webgl", kernelFunc: dJ }; +var jh = class { constructor(t8, e, o) { this.variableNames = ["x"], this.outputShape = [], this.outputShape = t8, this.blockSize = e, this.dataFormat = o, this.userCode = ` void main() { @@ -21532,14 +21533,14 @@ var Xh = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function fJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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); +function fJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 jh(f, s, a); return e.runWebGLProgram(h, [n], n.dtype); } -var YA = { kernelName: mn, backendName: "webgl", kernelFunc: fJ }; -var qc = class { +var QA = { kernelName: ln, backendName: "webgl", kernelFunc: fJ }; +var Wc = class { constructor(t8, e = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = ut(this.outputShape.length); let a = t8.filterHeight, i = t8.filterWidth, p = t8.outChannels / t8.inChannels, u = "", c = ""; o && (n ? u = `float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); @@ -21599,9 +21600,9 @@ var qc = class { `; } }; -var jc = class { +var Uc = class { constructor(t8, e = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = pt(this.outputShape.length); + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = t8.outShape, this.enableShapeUniforms = ut(this.outputShape.length); let a = t8.outChannels / t8.inChannels, i = t8.padInfo.left, p = t8.strideWidth, u = t8.dilationWidth, c = t8.filterHeight, l = t8.filterWidth, m = l, d = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; @@ -21816,16 +21817,16 @@ var jc = class { `; } }; -function hJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, c = p; +function hJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, c = p; c == null && (c = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(a, c), () => `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, true), m; - A().getBool("WEBGL_PACK_DEPTHWISECONV") && l.strideWidth <= 2 && l.outChannels / l.inChannels === 1 ? m = new jc(l) : m = new qc(l); + A().getBool("WEBGL_PACK_DEPTHWISECONV") && l.strideWidth <= 2 && l.outChannels / l.inChannels === 1 ? m = new Uc(l) : m = new Wc(l); let d = [[l.padInfo.top, l.padInfo.left], [l.strideHeight, l.strideWidth], [l.dilationHeight, l.dilationWidth], [l.inHeight, l.inWidth]]; return e.runWebGLProgram(m, [n, s], "float32", d); } -var QA = { kernelName: dn, backendName: "webgl", kernelFunc: hJ }; -var Yh = class { +var ZA = { kernelName: mn, backendName: "webgl", kernelFunc: hJ }; +var Xh = class { constructor(t8) { this.variableNames = ["x", "dy"], this.outputShape = t8.filterShape; let e = t8.strideHeight, o = t8.strideWidth, n = t8.padInfo.top, s = t8.padInfo.left, a = t8.outChannels / t8.inChannels; @@ -21867,7 +21868,7 @@ var Yh = class { `; } }; -var Qh = class { +var Yh = class { constructor(t8) { this.variableNames = ["dy", "W"], this.outputShape = t8.inShape; let e = t8.filterHeight, o = t8.filterWidth, n = t8.strideHeight, s = t8.strideWidth, a = e - 1 - t8.padInfo.top, i = o - 1 - t8.padInfo.left, p = t8.outChannels / t8.inChannels; @@ -21919,17 +21920,17 @@ var Qh = class { `; } }; -function gJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Yh(l); +function gJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Xh(l); return e.runWebGLProgram(m, [n, s], "float32"); } -var ZA = { kernelName: Mi, backendName: "webgl", kernelFunc: gJ }; -function xJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Qh(l); +var JA = { kernelName: Fi, backendName: "webgl", kernelFunc: gJ }; +function xJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Yh(l); return e.runWebGLProgram(m, [n, s], "float32"); } -var JA = { kernelName: Li, backendName: "webgl", kernelFunc: xJ }; -var Zh = class { +var eF = { kernelName: Pi, backendName: "webgl", kernelFunc: xJ }; +var Qh = class { constructor(t8) { this.variableNames = ["X"], this.outputShape = [t8, t8], this.userCode = ` void main() { @@ -21940,12 +21941,12 @@ var Zh = class { `; } }; -function yJ(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = te({ inputs: { x: o }, backend: e, attrs: { shape: [s] } }), i = new Zh(s), p = e.runWebGLProgram(i, [a], a.dtype), u = te({ inputs: { x: p }, backend: e, attrs: { shape: n } }); +function yJ(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = te({ inputs: { x: o }, backend: e, attrs: { shape: [s] } }), i = new Qh(s), p = e.runWebGLProgram(i, [a], a.dtype), u = te({ inputs: { x: p }, backend: e, attrs: { shape: n } }); return e.disposeIntermediateTensorInfo(a), e.disposeIntermediateTensorInfo(p), u; } -var eF = { kernelName: oa, backendName: "webgl", kernelFunc: yJ }; -var Jh = class { +var tF = { kernelName: oa, backendName: "webgl", kernelFunc: yJ }; +var Zh = class { constructor(t8) { this.variableNames = ["x", "W"], this.outputShape = t8.outShape; let { inHeight: e, inWidth: o, padInfo: n, strideHeight: s, strideWidth: a, filterHeight: i, filterWidth: p, dilationHeight: u, dilationWidth: c } = t8, { top: l, left: m } = n; @@ -21990,33 +21991,33 @@ var Jh = class { `; } }; -function bJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o, u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c, l = new Jh(u); +function bJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o, u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c, l = new Zh(u); c = e.runWebGLProgram(l, [n, s], "float32"); let m = te({ inputs: { x: c }, backend: e, attrs: { shape: u.outShape } }); return e.disposeIntermediateTensorInfo(c), m; } -var tF = { kernelName: fn, backendName: "webgl", kernelFunc: bJ }; -function CJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { equation: n } = o, s = t8, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); +var rF = { kernelName: dn, backendName: "webgl", kernelFunc: bJ }; +function CJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { equation: n } = o, s = t8, { 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 < l; ++h) { for (let g of c[h]) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; - w.isIdentityPermutation(x) ? C = s[g] : (C = Ct({ inputs: { x: s[g] }, backend: e, attrs: { perm: x } }), f.push(C)); + w.isIdentityPermutation(x) ? C = s[g] : (C = bt({ inputs: { x: s[g] }, backend: e, 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); - y.arraysEqual(C.shape, S) || (C = te({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = tm({ inputs: { a: C, b: m }, backend: e }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = te({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = Jl({ inputs: { a: C, b: m }, backend: e }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = Tp({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = bp({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && e.disposeIntermediateTensorInfo(h); return m; } -var rF = { kernelName: Vi, backendName: "webgl", kernelFunc: CJ }; +var oF = { kernelName: Li, backendName: "webgl", kernelFunc: CJ }; var wJ = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; var SJ = ` vec4 result; @@ -22029,23 +22030,23 @@ var SJ = ` return result; `; var IJ = xe({ opSnippet: wJ, packedOpSnippet: SJ }); -var oF = { kernelName: gn, backendName: "webgl", kernelFunc: IJ }; +var nF = { kernelName: hn, backendName: "webgl", kernelFunc: IJ }; var vJ = "return (b >= 0.0) ? a : a * (b + 1.0);"; var kJ = ` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `; -var NJ = (r) => { - let { inputs: t8, backend: e } = r, { dy: o, y: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(kJ, o.shape, n.shape) : new Pr(vJ, o.shape, n.shape); +var NJ = (r15) => { + let { inputs: t8, backend: e } = r15, { dy: o, y: n } = t8, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new qr(kJ, o.shape, n.shape) : new Fr(vJ, o.shape, n.shape); return e.runWebGLProgram(s, [o, n], o.dtype); }; -var nF = { kernelName: Ya, backendName: "webgl", kernelFunc: NJ }; +var sF = { kernelName: Xa, backendName: "webgl", kernelFunc: NJ }; var TJ = ` return vec4(equal(a, b)); `; var _J = "return float(a == b);"; -var $J = nt({ opSnippet: _J, packedOpSnippet: TJ, dtype: "bool", cpuKernelImpl: MR }); -var sF = { kernelName: yn, backendName: "webgl", kernelFunc: $J }; +var $J = nt({ opSnippet: _J, packedOpSnippet: TJ, dtype: "bool", cpuKernelImpl: LR }); +var aF = { kernelName: xn, backendName: "webgl", kernelFunc: $J }; var EJ = ` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, @@ -22063,8 +22064,8 @@ var EJ = ` return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `; var RJ = xe({ opSnippet: EJ }); -var aF = { kernelName: xn, backendName: "webgl", kernelFunc: RJ }; -var DJ = Po + ` +var iF = { kernelName: gn, backendName: "webgl", kernelFunc: RJ }; +var DJ = Fo + ` return exp(x); `; var AJ = ` @@ -22077,17 +22078,17 @@ var AJ = ` return result; `; -var Iv = xe({ opSnippet: DJ, packedOpSnippet: AJ, cpuKernelImpl: LR, dtype: "float32" }); -var iF = { kernelName: bn, backendName: "webgl", kernelFunc: Iv }; -function eg(r) { - let { inputs: t8, attrs: e, backend: o } = r, { dim: n } = e, { input: s } = t8, a = s.shape.length, i = s.shape.slice(), p = n; +var vv = xe({ opSnippet: DJ, packedOpSnippet: AJ, cpuKernelImpl: BR, dtype: "float32" }); +var uF = { kernelName: yn, backendName: "webgl", kernelFunc: vv }; +function Jh(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { dim: n } = e, { input: s } = t8, 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 uF = { kernelName: na, backendName: "webgl", kernelFunc: eg }; -var pF = "return exp(x) - 1.0;"; -var FJ = xe({ opSnippet: pF, packedOpSnippet: pF, cpuKernelImpl: BR }); -var cF = { kernelName: Cn, backendName: "webgl", kernelFunc: FJ }; -var nm = class { +var pF = { kernelName: na, backendName: "webgl", kernelFunc: Jh }; +var cF = "return exp(x) - 1.0;"; +var FJ = xe({ opSnippet: cF, packedOpSnippet: cF, cpuKernelImpl: zR }); +var lF = { kernelName: bn, backendName: "webgl", kernelFunc: FJ }; +var rm = class { constructor(t8, e, o) { this.variableNames = ["real", "imag"]; let n = e[1]; @@ -22135,18 +22136,18 @@ var nm = class { `; } }; -function tg(r, t8, e) { - let o = e.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: e, attrs: { shape: [a, s] } }), p = i.shape, u = new nm("real", p, t8), c = new nm("imag", p, t8), 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 = e.runWebGLProgram(u, l, "float32"), d = e.runWebGLProgram(c, l, "float32"), f = Or({ inputs: { real: m, imag: d }, backend: e }); +function eg(r15, t8, e) { + let o = e.texData.get(r15.dataId), n = y.sizeFromShape(r15.shape), s = r15.shape[r15.shape.length - 1], a = n / s, i = te({ inputs: { x: r15 }, backend: e, attrs: { shape: [a, s] } }), p = i.shape, u = new rm("real", p, t8), c = new rm("imag", p, t8), 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 = e.runWebGLProgram(u, l, "float32"), d = e.runWebGLProgram(c, l, "float32"), f = Pr({ inputs: { real: m, imag: d }, backend: e }); e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d); - let h = te({ inputs: { x: f }, backend: e, attrs: { shape: r.shape } }); + let h = te({ inputs: { x: f }, backend: e, attrs: { shape: r15.shape } }); return e.disposeIntermediateTensorInfo(i), e.disposeIntermediateTensorInfo(f), h; } -function PJ(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8; - return tg(o, false, e); +function PJ(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8; + return eg(o, false, e); } -var lF = { kernelName: Wi, backendName: "webgl", kernelFunc: PJ }; -var rg = class { +var mF = { kernelName: Bi, backendName: "webgl", kernelFunc: PJ }; +var tg = class { constructor(t8, e) { this.outputShape = [], this.customUniforms = [{ name: "value", type: "float" }], this.variableNames = ["x"], this.outputShape = t8, this.userCode = ` void main() { @@ -22156,18 +22157,18 @@ var rg = class { `; } }; -function Si(r) { - let { backend: t8, attrs: e } = r, { shape: o, value: n } = e, { dtype: s } = e; +function bi(r15) { + let { backend: t8, attrs: e } = r15, { shape: o, value: n } = e, { dtype: s } = e; if (s = s || y.inferDtype(n), s === "string") { let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), t8.makeTensorInfo(o, s, a); } else { - let a = new rg(o, n), i = [[n]]; + let a = new tg(o, n), i = [[n]]; return t8.runWebGLProgram(a, [], s, i); } } -var mF = { kernelName: sa, backendName: "webgl", kernelFunc: Si }; -var og = class { +var dF = { kernelName: sa, backendName: "webgl", kernelFunc: bi }; +var rg = class { constructor(t8) { this.variableNames = ["Image"], this.outputShape = []; let e = t8[2]; @@ -22188,13 +22189,13 @@ var og = class { `; } }; -var dF = { kernelName: wn, backendName: "webgl", kernelFunc: ({ inputs: r, backend: t8 }) => { - let { image: e } = r, o = t8, n = new og(e.shape); +var fF = { kernelName: Cn, backendName: "webgl", kernelFunc: ({ inputs: r15, backend: t8 }) => { + let { image: e } = r15, o = t8, n = new rg(e.shape); return o.runWebGLProgram(n, [e], e.dtype); } }; -var fF = "return floor(x);"; -var OJ = xe({ opSnippet: fF, packedOpSnippet: fF, cpuKernelImpl: zR }); -var hF = { kernelName: Sn, backendName: "webgl", kernelFunc: OJ }; +var hF = "return floor(x);"; +var OJ = xe({ opSnippet: hF, packedOpSnippet: hF, cpuKernelImpl: VR }); +var gF = { kernelName: wn, backendName: "webgl", kernelFunc: OJ }; var MJ = ` float s = sign(a) * sign(b); int ia = round(a); @@ -22229,11 +22230,11 @@ var LJ = ` return vec4(result); `; var BJ = nt({ opSnippet: MJ, packedOpSnippet: LJ, dtype: "int32" }); -var gF = { kernelName: In, backendName: "webgl", kernelFunc: BJ }; -var ng = class { +var xF = { kernelName: Sn, backendName: "webgl", kernelFunc: BJ }; +var og = class { constructor(t8) { this.variableNames = ["A"]; - let e = vt(), [o, n] = t8; + let e = It(), [o, n] = t8; this.outputShape = t8, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -22259,10 +22260,10 @@ var ng = class { `; } }; -var sg = class { +var ng = class { constructor(t8) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true; - let e = vt(), [o, n] = t8; + let e = It(), [o, n] = t8; this.outputShape = t8, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -22300,22 +22301,22 @@ var sg = class { `; } }; -var xF = { kernelName: Mu, backendName: "webgl", kernelFunc: zJ }; -var Xc; -var vv = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -function zJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { pixels: n } = t8, { numChannels: s } = o, a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, [p, u] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], c = [u, p], l = [u, p, s]; +var yF = { kernelName: Eu, backendName: "webgl", kernelFunc: zJ }; +var Gc; +var kv = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +function zJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { pixels: n } = t8, { 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"); - (Xc == null || h !== vv) && (vv = h, Xc = document.createElement("canvas").getContext("2d", { willReadFrequently: vv })), Xc.canvas.width = p, Xc.canvas.height = u, Xc.drawImage(n, 0, 0, p, u), n = Xc.canvas; + (Gc == null || h !== kv) && (kv = h, Gc = document.createElement("canvas").getContext("2d", { willReadFrequently: kv })), Gc.canvas.width = p, Gc.canvas.height = u, Gc.drawImage(n, 0, 0, p, u), n = Gc.canvas; } let m = e.makeTensorInfo(c, "int32"); - e.texData.get(m.dataId).usage = dr.PIXELS, e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId), n); - let d = A().getBool("WEBGL_PACK") ? new sg(l) : new ng(l), f = e.runWebGLProgram(d, [m], "int32"); + e.texData.get(m.dataId).usage = mr.PIXELS, e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId), n); + let d = A().getBool("WEBGL_PACK") ? new ng(l) : new og(l), f = e.runWebGLProgram(d, [m], "int32"); return e.disposeData(m.dataId), f; } -function VJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, false, h), x, b = [], C = a != null, S = i != null, k = d === "leakyrelu", _ = () => { +function VJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, false, 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: e, attrs: { shape: [P.shape[0], 1, 1] } }); @@ -22330,35 +22331,35 @@ function VJ(r) { 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: e, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + x = Bh({ x: n, filter: s, convInfo: g, backend: e, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else if (g.strideWidth <= 2 && h === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { - let R = d ? Ci(d, true) : null, D = new Kc(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 = _(); + let R = d ? xi(d, true) : null, D = new Vc(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 = e.runWebGLProgram(D, O, "float32", P); } else if (A().getBool("WEBGL_CONV_IM2COL")) - x = Vh({ x: n, filter: s, convInfo: g, backend: e, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + x = zh({ x: n, filter: s, convInfo: g, backend: e, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else { - let R = d ? Ci(d, false) : null, D = new Hc(g, C, R, S, k), P = _(); + let R = d ? xi(d, false) : null, D = new zc(g, C, R, S, k), P = _(); x = e.runWebGLProgram(D, P, "float32"); } let E = te({ inputs: { x }, backend: e, attrs: { shape: g.outShape } }); return b.push(x), b.forEach((R) => e.disposeIntermediateTensorInfo(R)), E; } -var yF = { kernelName: vo, backendName: "webgl", kernelFunc: VJ }; -function WJ(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = [], h = c; +var bF = { kernelName: Io, backendName: "webgl", kernelFunc: VJ }; +function WJ(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, true), x = A().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? Ci(m, x) : null, C = [n, s], S = a != null, k = i != null, _ = m === "leakyrelu"; + let g = w.computeConv2DInfo(n.shape, s.shape, p, h, u, l, true), x = A().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? xi(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 = e.makeTensorInfo([], "float32", y.createScalarValue(d, "float32")); C.push(P), f.push(P); } let E; - x ? E = new jc(g, S, b, k, _) : E = new qc(g, S, b, k, _); + x ? E = new Uc(g, S, b, k, _) : E = new Wc(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 = e.runWebGLProgram(E, C, "float32", R); return f.forEach((P) => e.disposeIntermediateTensorInfo(P)), D; } -var bF = { kernelName: ko, backendName: "webgl", kernelFunc: WJ }; -var ag = class { +var CF = { kernelName: vo, backendName: "webgl", kernelFunc: WJ }; +var sg = class { constructor(t8, e, o, n) { this.sliceDim = t8, this.strides = e, this.paramsShape = n, this.variableNames = ["x", "indices"], this.outputShape = o; let s = Re(o.length), a = ` @@ -22382,17 +22383,17 @@ var ag = class { `; } }; -function UJ(r) { - let { inputs: t8, backend: e } = r, { params: o, indices: n } = t8, 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: e, attrs: { shape: [u, a] } }), d = te({ inputs: { x: o }, backend: e, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); +function UJ(r15) { + let { inputs: t8, backend: e } = r15, { params: o, indices: n } = t8, 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: e, attrs: { shape: [u, a] } }), d = te({ inputs: { x: o }, backend: e, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); if (e.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let x = e.readSync(n.dataId), b = e.bufferSync(o), C = VR(x, b, o.dtype, u, a, c, l, o.shape, i); + let x = e.readSync(n.dataId), b = e.bufferSync(o), C = WR(x, b, o.dtype, u, a, c, l, o.shape, i); return e.makeTensorInfo(p, o.dtype, C.values); } - let f = new ag(a, l, [u, c], o.shape), h = e.runWebGLProgram(f, [d, m], d.dtype), g = te({ inputs: { x: h }, backend: e, attrs: { shape: p } }); + let f = new sg(a, l, [u, c], o.shape), h = e.runWebGLProgram(f, [d, m], d.dtype), g = te({ inputs: { x: h }, backend: e, attrs: { shape: p } }); return e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(h), g; } -var CF = { kernelName: kn, backendName: "webgl", kernelFunc: UJ }; -var ig = class { +var wF = { kernelName: vn, backendName: "webgl", kernelFunc: UJ }; +var ag = class { constructor(t8, e) { this.variableNames = ["A", "indices"], this.outputShape = e, this.rank = e.length; let o = Re(this.rank), n = GJ(t8, 2); @@ -22406,14 +22407,14 @@ var ig = class { `; } }; -function GJ(r, t8) { +function GJ(r15, t8) { let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r.length; n++) + for (let n = 0; n < r15.length; n++) n === 2 ? o.push("index") : o.push(`${e[n]}`); return o.join(); } -function kv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0]; +function Nv(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0]; if (A().get("DEBUG")) { let b = e.readSync(s.dataId), C = n.shape[p]; for (let S = 0; S < b.length; ++S) { @@ -22425,59 +22426,59 @@ function kv(r) { l.push(m), l.push(d); let f = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; if (e.shouldExecuteOnCPU([n, s]) || n.dtype === "string") { - let b = e.bufferSync(d), C = e.bufferSync(m), S = WR(C, b, f); + let b = e.bufferSync(d), C = e.bufferSync(m), S = UR(C, b, f); return l.forEach((k) => e.disposeIntermediateTensorInfo(k)), e.makeTensorInfo(u.outputShape, S.dtype, S.values); } - let h = new ig(m.shape, f), g = e.runWebGLProgram(h, [m, d], m.dtype); + let h = new ag(m.shape, f), g = e.runWebGLProgram(h, [m, d], m.dtype); l.push(g); let x = te({ inputs: { x: g }, backend: e, attrs: { shape: u.outputShape } }); return l.forEach((b) => e.disposeIntermediateTensorInfo(b)), x; } -var wF = { kernelName: aa, backendName: "webgl", kernelFunc: kv }; +var SF = { kernelName: aa, backendName: "webgl", kernelFunc: Nv }; var HJ = "return float(a > b);"; var KJ = ` return vec4(greaterThan(a, b)); `; -var qJ = nt({ opSnippet: HJ, packedOpSnippet: KJ, cpuKernelImpl: UR, dtype: "bool" }); -var SF = { kernelName: Nn, backendName: "webgl", kernelFunc: qJ }; +var qJ = nt({ opSnippet: HJ, packedOpSnippet: KJ, cpuKernelImpl: GR, dtype: "bool" }); +var IF = { kernelName: kn, backendName: "webgl", kernelFunc: qJ }; var jJ = "return float(a >= b);"; var XJ = ` return vec4(greaterThanEqual(a, b)); `; -var YJ = nt({ opSnippet: jJ, packedOpSnippet: XJ, dtype: "bool", cpuKernelImpl: GR }); -var IF = { kernelName: Tn, backendName: "webgl", kernelFunc: YJ }; -function QJ(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8; - return tg(o, true, e); +var YJ = nt({ opSnippet: jJ, packedOpSnippet: XJ, dtype: "bool", cpuKernelImpl: HR }); +var vF = { kernelName: Nn, backendName: "webgl", kernelFunc: YJ }; +function QJ(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8; + return eg(o, true, e); } -var vF = { kernelName: Ui, backendName: "webgl", kernelFunc: QJ }; +var kF = { kernelName: zi, backendName: "webgl", kernelFunc: QJ }; var ZJ = "return float(!isnan(x) && !isinf(x));"; var JJ = xe({ opSnippet: ZJ, dtype: "bool" }); -var kF = { kernelName: _n, backendName: "webgl", kernelFunc: JJ }; +var NF = { kernelName: Tn, backendName: "webgl", kernelFunc: JJ }; var eee = "return float(isinf(x));"; var tee = xe({ opSnippet: eee, dtype: "bool" }); -var NF = { kernelName: $n, backendName: "webgl", kernelFunc: tee }; +var TF = { kernelName: _n, backendName: "webgl", kernelFunc: tee }; var ree = "return float(isnan(x));"; var oee = xe({ opSnippet: ree, dtype: "bool" }); -var TF = { kernelName: En, backendName: "webgl", kernelFunc: oee }; +var _F = { kernelName: $n, backendName: "webgl", kernelFunc: oee }; var nee = "return float(a < b);"; var see = ` return vec4(lessThan(a, b)); `; -var aee = nt({ opSnippet: nee, packedOpSnippet: see, cpuKernelImpl: HR, dtype: "bool" }); -var _F = { kernelName: Dn, backendName: "webgl", kernelFunc: aee }; +var aee = nt({ opSnippet: nee, packedOpSnippet: see, cpuKernelImpl: KR, dtype: "bool" }); +var $F = { kernelName: Rn, backendName: "webgl", kernelFunc: aee }; var iee = "return float(a <= b);"; var uee = ` return vec4(lessThanEqual(a, b)); `; -var pee = nt({ opSnippet: iee, packedOpSnippet: uee, cpuKernelImpl: KR, dtype: "bool" }); -var $F = { kernelName: An, backendName: "webgl", kernelFunc: pee }; -function cee(r) { - let { backend: t8, attrs: e } = r, { start: o, stop: n, num: s } = e, a = qR(o, n, s); +var pee = nt({ opSnippet: iee, packedOpSnippet: uee, cpuKernelImpl: qR, dtype: "bool" }); +var EF = { kernelName: Dn, backendName: "webgl", kernelFunc: pee }; +function cee(r15) { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, num: s } = e, a = jR(o, n, s); return t8.makeTensorInfo([a.length], "float32", a); } -var EF = { kernelName: Fn, backendName: "webgl", kernelFunc: cee }; -var lee = Po + ` +var RF = { kernelName: An, backendName: "webgl", kernelFunc: cee }; +var lee = Fo + ` return x < 0.0 ? 0./0. : log(x); `; var mee = ` @@ -22489,13 +22490,13 @@ var mee = ` result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; `; -var dee = xe({ opSnippet: lee, packedOpSnippet: mee, cpuKernelImpl: jR }); -var RF = { kernelName: Pn, backendName: "webgl", kernelFunc: dee }; -var fee = Po + ` +var dee = xe({ opSnippet: lee, packedOpSnippet: mee, cpuKernelImpl: XR }); +var DF = { kernelName: Fn, backendName: "webgl", kernelFunc: dee }; +var fee = Fo + ` return log(1.0 + x); `; var hee = xe({ opSnippet: fee }); -var DF = { kernelName: On, backendName: "webgl", kernelFunc: hee }; +var AF = { kernelName: Pn, backendName: "webgl", kernelFunc: hee }; var gee = "return float(a >= 1.0 && b >= 1.0);"; var xee = ` return vec4( @@ -22503,10 +22504,10 @@ var xee = ` vec4(greaterThanEqual(b, vec4(1.0)))); `; var yee = nt({ opSnippet: gee, packedOpSnippet: xee, dtype: "bool" }); -var AF = { kernelName: Mn, backendName: "webgl", kernelFunc: yee }; +var FF = { kernelName: On, backendName: "webgl", kernelFunc: yee }; var bee = "return float(!(x >= 1.0));"; var Cee = xe({ opSnippet: bee }); -var FF = { kernelName: Ln, backendName: "webgl", kernelFunc: Cee }; +var PF = { kernelName: Mn, backendName: "webgl", kernelFunc: Cee }; var wee = "return float(a >= 1.0 || b >= 1.0);"; var See = ` return min( @@ -22515,8 +22516,8 @@ var See = ` vec4(1.0)); `; var Iee = nt({ opSnippet: wee, packedOpSnippet: See, dtype: "bool" }); -var PF = { kernelName: Bn, backendName: "webgl", kernelFunc: Iee }; -var ug = class { +var OF = { kernelName: Ln, backendName: "webgl", kernelFunc: Iee }; +var ig = class { constructor(t8, e, o, n, s) { this.variableNames = ["x"], this.outputShape = []; let a = e, i = t8[3] - 1; @@ -22544,7 +22545,7 @@ var ug = class { `; } }; -var pg = class { +var ug = class { constructor(t8, e, o, n, s) { this.variableNames = ["x"], this.outputShape = [], this.packedInputs = true, this.packedOutput = true; let a = e, i = t8[3] - 1; @@ -22615,12 +22616,12 @@ var pg = class { `; } }; -var vee = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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); +var vee = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u = A().getBool("WEBGL_PACK_NORMALIZATION") ? new ug(n.shape, s, a, i, p) : new ig(n.shape, s, a, i, p); return e.runWebGLProgram(u, [n], n.dtype); }; -var OF = { kernelName: zn, backendName: "webgl", kernelFunc: vee }; -var cg = class { +var MF = { kernelName: Bn, backendName: "webgl", kernelFunc: vee }; +var pg = class { constructor(t8, e, o, n, s) { this.variableNames = ["inputImage", "outputImage", "dy"], this.outputShape = [], this.outputShape = t8, this.depth = t8[3], this.depthRadius = e, this.bias = o, this.alpha = n, this.beta = s, this.userCode = ` void main() { @@ -22680,28 +22681,28 @@ var cg = class { `; } }; -var kee = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new cg(n.shape, i, p, u, c); +var kee = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new pg(n.shape, i, p, u, c); return e.runWebGLProgram(l, [n, s, a], n.dtype); }; -var MF = { kernelName: Qa, backendName: "webgl", kernelFunc: kee }; -function LF(r, t8, e, o) { - let n = y.sizeFromShape(t8), 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: e }, backend: o }); +var LF = { kernelName: Ya, backendName: "webgl", kernelFunc: kee }; +function BF(r15, t8, e, o) { + let n = y.sizeFromShape(t8), a = y.sizeFromShape(r15.shape) / n, i = te({ inputs: { x: r15 }, attrs: { shape: [a, n] }, backend: o }), p = Xr(i, r15.dtype, "max", o), u = te({ inputs: { x: p }, attrs: { shape: e }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -function Nv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 = e.shouldExecuteOnCPU([n]), d = n; +function Tv(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.shouldExecuteOnCPU([n]), d = n; if (l) { if (m) { let C = e.texData.get(d.dataId).values, S = new Array(i); for (let E = 0; E < S.length; E++) S[E] = n.shape[c[E]]; - let k = Np(C, n.shape, n.dtype, c, S); + let k = yp(C, n.shape, n.dtype, c, S); d = e.makeTensorInfo(S, n.dtype); let _ = e.texData.get(d.dataId); _.values = k; } else - d = Su(n, c, e); + d = gu(n, c, e); u = w.getInnerMostAxes(u.length, i); } w.assertAxesAreInnerMostDims("max", u, i); @@ -22709,16 +22710,16 @@ function Nv(r) { a && (g = w.expandShapeToKeepDim(f, p)); let x; if (m) { - let C = e.texData.get(d.dataId).values, S = XR(C, y.sizeFromShape(h), g, n.dtype); + let C = e.texData.get(d.dataId).values, S = YR(C, y.sizeFromShape(h), g, n.dtype); x = e.makeTensorInfo(g, n.dtype); let k = e.texData.get(x.dataId); k.values = S; } else - x = LF(d, h, g, e); + x = BF(d, h, g, e); return l && e.disposeIntermediateTensorInfo(d), x; } -var BF = { kernelName: Vn, backendName: "webgl", kernelFunc: Nv }; -var Nee = Wc + ` +var zF = { kernelName: zn, backendName: "webgl", kernelFunc: Tv }; +var Nee = Mc + ` return max(a, b); `; var Tee = ` @@ -22726,29 +22727,29 @@ var Tee = ` 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); - ` + Xr + ` + ` + jr + ` return result; `; -var _ee = nt({ opSnippet: Nee, packedOpSnippet: Tee, cpuKernelImpl: YR }); -var zF = { kernelName: Wn, backendName: "webgl", kernelFunc: _ee }; -function $ee(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8; +var _ee = nt({ opSnippet: Nee, packedOpSnippet: Tee, cpuKernelImpl: QR }); +var VF = { kernelName: Vn, backendName: "webgl", kernelFunc: _ee }; +function $ee(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8; Vs(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); if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) - return At({ inputs: { x: n }, backend: e }); + return Dt({ inputs: { x: n }, backend: e }); let l = new Us(c, "max", false); return e.runWebGLProgram(l, [n], n.dtype); } -var VF = { kernelName: Un, backendName: "webgl", kernelFunc: $ee }; -function Eee(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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", false); +var WF = { kernelName: Wn, backendName: "webgl", kernelFunc: $ee }; +function Eee(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 xu(l, "max", false); return e.runWebGLProgram(m, [n], n.dtype); } -var WF = { kernelName: ia, backendName: "webgl", kernelFunc: Eee }; -var lg = class { +var UF = { kernelName: ia, backendName: "webgl", kernelFunc: Eee }; +var cg = class { constructor(t8) { this.variableNames = ["dy", "maxPos"], this.outputShape = t8.inShape; let e = t8.strideHeight, o = t8.strideWidth, n = t8.dilationHeight, s = t8.effectiveFilterHeight, a = t8.effectiveFilterWidth, i = s - 1 - t8.padInfo.top, p = a - 1 - t8.padInfo.left, u = s * a - 1; @@ -22801,7 +22802,7 @@ var lg = class { `; } }; -var mg = class { +var lg = class { constructor(t8) { this.variableNames = ["dy", "maxPos"], this.outputShape = t8.inShape; let e = t8.strideDepth, o = t8.strideHeight, n = t8.strideWidth, s = t8.dilationDepth, a = t8.dilationHeight, i = t8.dilationWidth, p = t8.effectiveFilterDepth, u = t8.effectiveFilterHeight, c = t8.effectiveFilterWidth, l = p - 1 - t8.padInfo.front, m = u - 1 - t8.padInfo.top, d = c - 1 - t8.padInfo.left, f = p * u * c - 1; @@ -22872,63 +22873,63 @@ var mg = class { `; } }; -function Ree(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, 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", true), f = e.runWebGLProgram(d, [a], a.dtype), h = new mg(m), g = e.runWebGLProgram(h, [n, f], a.dtype); +function Ree(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, 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 xu(m, "max", true), f = e.runWebGLProgram(d, [a], a.dtype), h = new lg(m), g = e.runWebGLProgram(h, [n, f], a.dtype); return e.disposeIntermediateTensorInfo(f), g; } -var UF = { kernelName: Ki, backendName: "webgl", kernelFunc: Ree }; -function Dee(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s, output: a } = t8, i = s; +var GF = { kernelName: Ui, backendName: "webgl", kernelFunc: Ree }; +function Dee(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s, output: a } = t8, 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 = true, f = new Us(m, "max", d), h = e.runWebGLProgram(f, [i], i.dtype), g = new lg(m), x = e.runWebGLProgram(g, [n, h], i.dtype); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = true, f = new Us(m, "max", d), h = e.runWebGLProgram(f, [i], i.dtype), g = new cg(m), x = e.runWebGLProgram(g, [n, h], i.dtype); return e.disposeIntermediateTensorInfo(h), x; } -var GF = { kernelName: Hi, backendName: "webgl", kernelFunc: Dee }; -function HF(r, t8, e, o) { - let n = new Us(e, "max", false), s = o.runWebGLProgram(n, [r], "float32"); +var HF = { kernelName: Wi, backendName: "webgl", kernelFunc: Dee }; +function KF(r15, t8, e, o) { + let n = new Us(e, "max", false), s = o.runWebGLProgram(n, [r15], "float32"); n = new Us(e, "max", true, true, t8); - let a = o.runWebGLProgram(n, [r], "float32"); + let a = o.runWebGLProgram(n, [r15], "float32"); return [s, a]; } -var KF = { kernelName: ua, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { x: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = t8, p = e; +var qF = { kernelName: ua, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { x: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = t8, p = e; 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] = HF(o, i, c, p); + let c = w.computePool2DInfo(o.shape, n, s, u, a), [l, m] = KF(o, i, c, p); return [l, m]; } }; -function qF(r, t8, e, o) { - let n = y.sizeFromShape(t8), 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: e }, backend: o }); +function jF(r15, t8, e, o) { + let n = y.sizeFromShape(t8), a = y.sizeFromShape(r15.shape) / n, i = te({ inputs: { x: r15 }, attrs: { shape: [a, n] }, backend: o }), p = Xr(i, "float32", "mean", o), u = te({ inputs: { x: p }, attrs: { shape: e }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -var jF = { kernelName: Gn, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { x: o } = r, { keepDims: n, axis: s } = t8, a = e, 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; +var XF = { kernelName: Un, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { x: o } = r15, { keepDims: n, axis: s } = t8, a = e, 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; R < k.length; R++) k[R] = o.shape[c[R]]; - let _ = Np(S, o.shape, o.dtype, c, k); + let _ = yp(S, o.shape, o.dtype, c, k); f = a.makeTensorInfo(k, o.dtype); let E = a.texData.get(f.dataId); E.values = _; } else - f = Su(o, c, a); + f = gu(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 = qF(f, g, x, a); + let b = jF(f, g, x, a); for (let C of d) a.disposeIntermediateTensorInfo(C); return b; } }; -function Aee(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 = Ct({ inputs: { x: n }, backend: e, attrs: { perm: c } }), u = w.getInnerMostAxes(u.length, n.shape.length)), w.assertAxesAreInnerMostDims("min", u, i); - let [m, d] = w.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: e, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "min", e), x; +function Aee(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { perm: c } }), u = w.getInnerMostAxes(u.length, n.shape.length)), w.assertAxesAreInnerMostDims("min", u, i); + let [m, d] = w.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: e, attrs: { shape: [-1, f] } }), g = Xr(h, h.dtype, "min", e), x; if (a) { let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: e, attrs: { shape: b } }); @@ -22936,8 +22937,8 @@ function Aee(r) { x = te({ inputs: { x: g }, backend: e, attrs: { shape: m } }); return e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(g), c != null && e.disposeIntermediateTensorInfo(l), x; } -var XF = { kernelName: Hn, backendName: "webgl", kernelFunc: Aee }; -var Fee = Wc + ` +var YF = { kernelName: Gn, backendName: "webgl", kernelFunc: Aee }; +var Fee = Mc + ` return min(a, b); `; var Pee = ` @@ -22945,12 +22946,12 @@ var Pee = ` 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); - ` + Xr + ` + ` + jr + ` return result; `; -var Oee = nt({ opSnippet: Fee, packedOpSnippet: Pee, cpuKernelImpl: QR }); -var YF = { kernelName: Kn, backendName: "webgl", kernelFunc: Oee }; -var dg = class { +var Oee = nt({ opSnippet: Fee, packedOpSnippet: Pee, cpuKernelImpl: ZR }); +var QF = { kernelName: Hn, backendName: "webgl", kernelFunc: Oee }; +var mg = class { constructor(t8, e, o) { this.variableNames = ["x"], this.outputShape = e.map((c, l) => c[0] + t8[l] + c[1]); let n = t8.length, s = Re(n), a = e.map((c) => c[0]).join(","), i = e.map((c, l) => c[0] + t8[l]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n), u = o === "reflect" ? 0 : 1; @@ -22990,10 +22991,10 @@ var dg = class { `; } }; -var fg = class { +var dg = class { constructor(t8, e, o) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e.map((f, h) => f[0] + t8[h] + f[1]); - let n = t8.length, s = Re(n), a = e.map((f) => f[0]).join(","), i = e.map((f, h) => f[0] + t8[h]).join(","), p = Dt("rc", n), u = Dt("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 = ""; + let n = t8.length, s = Re(n), a = e.map((f) => f[0]).join(","), i = e.map((f, h) => f[0] + t8[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 = ` ${s} source = rc; @@ -23060,22 +23061,22 @@ var fg = class { `; } }; -var Mee = ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o } = r, { paddings: n, mode: s } = e, a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new fg(o.shape, n, s) : new dg(o.shape, n, s); +var Mee = ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o } = r15, { paddings: n, mode: s } = e, a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new dg(o.shape, n, s) : new mg(o.shape, n, s); return t8.runWebGLProgram(a, [o], o.dtype); }; -var QF = { kernelName: qn, backendName: "webgl", kernelFunc: Mee }; +var ZF = { kernelName: Kn, backendName: "webgl", kernelFunc: Mee }; var Lee = `if (b == 0.0) return NAN; return mod(a, b);`; var Bee = ` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - ` + Xr + ` + ` + jr + ` return result; `; var zee = nt({ opSnippet: Lee, packedOpSnippet: Bee }); -var ZF = { kernelName: jn, backendName: "webgl", kernelFunc: zee }; -var hg = class { +var JF = { kernelName: qn, backendName: "webgl", kernelFunc: zee }; +var fg = class { constructor(t8, e, o) { this.variableNames = ["probs"], this.customUniforms = [{ name: "seed", type: "float" }], this.outputShape = [t8, o], this.userCode = ` void main() { @@ -23124,22 +23125,22 @@ var Wee = ` return result; `; -var Tv = nt({ opSnippet: Vee, packedOpSnippet: Wee, checkOutOfBounds: true }); -var JF = { kernelName: hn, backendName: "webgl", kernelFunc: Tv }; -var e3 = "return a - b;"; -var _v = nt({ opSnippet: e3, packedOpSnippet: e3, supportsComplex: true, cpuKernelImpl: yD }); -var t3 = { kernelName: _s, backendName: "webgl", kernelFunc: _v }; -function $v(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = Nv({ inputs: { x: n }, backend: e, attrs: { reductionIndices: a, keepDims: false } }), p = w.expandShapeToKeepDim(i.shape, a), u = te({ inputs: { x: i }, backend: e, attrs: { shape: p } }), c = _v({ inputs: { a: n, b: u }, backend: e }), l = Iv({ inputs: { x: c }, backend: e }), m = Tp({ inputs: { x: l }, backend: e, attrs: { axis: a, keepDims: false } }), d = te({ inputs: { x: m }, backend: e, attrs: { shape: p } }), f = Tv({ inputs: { a: l, b: d }, backend: e }); +var _v = nt({ opSnippet: Vee, packedOpSnippet: Wee, checkOutOfBounds: true }); +var e3 = { kernelName: fn, backendName: "webgl", kernelFunc: _v }; +var t3 = "return a - b;"; +var $v = nt({ opSnippet: t3, packedOpSnippet: t3, supportsComplex: true, cpuKernelImpl: bD }); +var r32 = { kernelName: Ts, backendName: "webgl", kernelFunc: $v }; +function Ev(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = Tv({ inputs: { x: n }, backend: e, attrs: { reductionIndices: a, keepDims: false } }), p = w.expandShapeToKeepDim(i.shape, a), u = te({ inputs: { x: i }, backend: e, attrs: { shape: p } }), c = $v({ inputs: { a: n, b: u }, backend: e }), l = vv({ inputs: { x: c }, backend: e }), m = bp({ inputs: { x: l }, backend: e, attrs: { axis: a, keepDims: false } }), d = te({ inputs: { x: m }, backend: e, attrs: { shape: p } }), f = _v({ inputs: { a: l, b: d }, backend: e }); return e.disposeIntermediateTensorInfo(i), e.disposeIntermediateTensorInfo(u), e.disposeIntermediateTensorInfo(c), e.disposeIntermediateTensorInfo(l), e.disposeIntermediateTensorInfo(m), e.disposeIntermediateTensorInfo(d), f; } -var r3 = { kernelName: vs, backendName: "webgl", kernelFunc: $v }; -function Uee(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : $v({ inputs: { logits: n }, backend: e, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new hg(u, c, s), m = [[a]], d = e.runWebGLProgram(l, [p], "int32", m); +var o3 = { kernelName: Is, backendName: "webgl", kernelFunc: Ev }; +function Uee(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : Ev({ inputs: { logits: n }, backend: e, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new fg(u, c, s), m = [[a]], d = e.runWebGLProgram(l, [p], "int32", m); return i || e.disposeIntermediateTensorInfo(p), d; } -var o3 = { kernelName: Xn, backendName: "webgl", kernelFunc: Uee }; -var Gee = Ut + ` +var n3 = { kernelName: jn, backendName: "webgl", kernelFunc: Uee }; +var Gee = Wt + ` return -x; `; var Hee = ` @@ -23153,38 +23154,38 @@ var Hee = ` return result; `; -function Kee(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +function Kee(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (e.shouldExecuteOnCPU([o])) { - let s = e.texData.get(o.dataId), [a, i] = JR(s.values, o.shape, o.dtype); + let s = e.texData.get(o.dataId), [a, i] = eD(s.values, o.shape, o.dtype); return e.makeTensorInfo(i, o.dtype, a); } let n; - return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Fr(o.shape, Hee) : n = new or(o.shape, Gee), e.runWebGLProgram(n, [o], o.dtype); + return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Ar(o.shape, Hee) : n = new tr(o.shape, Gee), e.runWebGLProgram(n, [o], o.dtype); } -var n3 = { kernelName: pa, backendName: "webgl", kernelFunc: Kee }; -var qee = Wt.nonMaxSuppressionV3Impl; -function jee(r) { +var s3 = { kernelName: pa, backendName: "webgl", kernelFunc: Kee }; +var qee = Vt.nonMaxSuppressionV3Impl; +function jee(r15) { w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), { selectedIndices: l } = qee(u, c, a, i, p); + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), { selectedIndices: l } = qee(u, c, a, i, p); return e.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var s3 = { kernelName: Zn, backendName: "webgl", kernelFunc: jee }; -var Xee = Wt.nonMaxSuppressionV4Impl; -function Yee(r) { +var a3 = { kernelName: Qn, backendName: "webgl", kernelFunc: jee }; +var Xee = Vt.nonMaxSuppressionV4Impl; +function Yee(r15) { w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), { selectedIndices: m, validOutputs: d } = Xee(c, l, a, i, p, u); + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), { selectedIndices: m, validOutputs: d } = Xee(c, l, a, i, p, u); return [e.makeTensorInfo([m.length], "int32", new Int32Array(m)), e.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var a3 = { kernelName: Za, backendName: "webgl", kernelFunc: Yee }; -var Qee = Wt.nonMaxSuppressionV5Impl; -function Zee(r) { +var i3 = { kernelName: Qa, backendName: "webgl", kernelFunc: Yee }; +var Qee = Vt.nonMaxSuppressionV5Impl; +function Zee(r15) { w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Qee(c, l, m, d, f, h); + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Qee(c, l, m, d, f, h); return [e.makeTensorInfo([g.length], "int32", new Int32Array(g)), e.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var i3 = { kernelName: Jn, backendName: "webgl", kernelFunc: Zee }; -var gg = class { +var u3 = { kernelName: Zn, backendName: "webgl", kernelFunc: Zee }; +var hg = class { constructor(t8, e, o, n) { this.variableNames = ["indices"], this.outputShape = [t8, e], this.userCode = ` void main() { @@ -23196,49 +23197,49 @@ var gg = class { `; } }; -var Jee = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n } = t8, { 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: e, attrs: { shape: [u] } }), m = e.runWebGLProgram(c, [l], s); +var Jee = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n } = t8, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new hg(u, a, i, p), l = te({ inputs: { x: n }, backend: e, attrs: { shape: [u] } }), m = e.runWebGLProgram(c, [l], s); e.disposeIntermediateTensorInfo(l); let d = [...n.shape, a], f = te({ inputs: { x: m }, backend: e, attrs: { shape: d } }); return e.disposeIntermediateTensorInfo(m), f; }; -var u3 = { kernelName: es, backendName: "webgl", kernelFunc: Jee }; -function sm(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var p3 = { kernelName: Jn, backendName: "webgl", kernelFunc: Jee }; +function om(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "complex64") { - let n = wi({ inputs: { input: o }, backend: e }), s = sm({ inputs: { x: n }, backend: e }), a = $p({ inputs: { input: o }, backend: e }), i = sm({ inputs: { x: a }, backend: e }), p = Or({ inputs: { real: s, imag: i }, backend: e }); + let n = yi({ inputs: { input: o }, backend: e }), s = om({ inputs: { x: n }, backend: e }), a = wp({ inputs: { input: o }, backend: e }), i = om({ inputs: { x: a }, backend: e }), p = Pr({ inputs: { real: s, imag: i }, backend: e }); return e.disposeIntermediateTensorInfo(n), e.disposeIntermediateTensorInfo(s), e.disposeIntermediateTensorInfo(a), e.disposeIntermediateTensorInfo(i), p; } else - return Si({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: e }); + return bi({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: e }); } -var p3 = { kernelName: Sa, backendName: "webgl", kernelFunc: sm }; -function c3(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var c3 = { kernelName: Sa, backendName: "webgl", kernelFunc: om }; +function l3(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = wi({ inputs: { input: o }, backend: e }), s = c3({ inputs: { x: n }, backend: e }), a = $p({ inputs: { input: o }, backend: e }), i = sm({ inputs: { x: a }, backend: e }), p = Or({ inputs: { real: s, imag: i }, backend: e }); + let n = yi({ inputs: { input: o }, backend: e }), s = l3({ inputs: { x: n }, backend: e }), a = wp({ inputs: { input: o }, backend: e }), i = om({ inputs: { x: a }, backend: e }), p = Pr({ inputs: { real: s, imag: i }, backend: e }); return e.disposeIntermediateTensorInfo(n), e.disposeIntermediateTensorInfo(s), e.disposeIntermediateTensorInfo(a), e.disposeIntermediateTensorInfo(i), p; } else - return Si({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: e }); + return bi({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: e }); } -var l3 = { kernelName: ca, backendName: "webgl", kernelFunc: c3 }; -function ete(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o; +var m3 = { kernelName: ca, backendName: "webgl", kernelFunc: l3 }; +function ete(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o; if (t8.length === 1) - return eg({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); + return Jh({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); let s = t8[0].shape, a = t8[0].dtype; t8.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 = t8.map((c) => { - let l = eg({ inputs: { input: c }, backend: e, attrs: { dim: n } }); + let l = Jh({ inputs: { input: c }, backend: e, attrs: { dim: n } }); return i.push(l), l; - }), u = Sv({ inputs: p, backend: e, attrs: { axis: n } }); + }), u = Iv({ inputs: p, backend: e, attrs: { axis: n } }); return i.forEach((c) => e.disposeIntermediateTensorInfo(c)), u; } -var m3 = { kernelName: la, backendName: "webgl", kernelFunc: ete }; -var xg = class { +var d3 = { kernelName: la, backendName: "webgl", kernelFunc: ete }; +var gg = class { constructor(t8, e, o) { this.variableNames = ["x"], this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = e.map((u, c) => u[0] + t8[c] + u[1]); let n = t8.length, s = Re(n), a = e.map((u) => u[0]).join(","), i = e.map((u, c) => u[0] + t8[c]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n); @@ -23274,10 +23275,10 @@ var xg = class { `; } }; -var yg = class { +var xg = class { constructor(t8, e, o) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = e.map((h, g) => h[0] + t8[g] + h[1]); - let n = t8.length, s = Re(n), a = e.map((h) => h[0]).join(","), i = e.map((h, g) => h[0] + t8[g]).join(","), p = Dt("rc", n), u = Dt("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; + let n = t8.length, s = Re(n), a = e.map((h) => h[0]).join(","), i = e.map((h, g) => h[0] + t8[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; if(${c}) { `, n === 1 ? "" : `} rc = outputLoc; @@ -23307,16 +23308,16 @@ var yg = class { `; } }; -var Ev = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { paddings: s, constantValue: a } = o; +var Rv = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 Si({ backend: e, attrs: { shape: u, value: a, dtype: n.dtype } }); + return bi({ backend: e, 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]]; + let i = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new xg(n.shape, s, a) : new gg(n.shape, s, a), p = [[a]]; return e.runWebGLProgram(i, [n], n.dtype, p); }; -var d3 = { kernelName: ts, backendName: "webgl", kernelFunc: Ev }; +var f3 = { kernelName: es, backendName: "webgl", kernelFunc: Rv }; var tte = ` if(a < 0.0 && floor(b) < b){ return NAN; @@ -23343,20 +23344,20 @@ var rte = ` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - ` + Xr + ` + ` + jr + ` return result; `; var ote = nt({ opSnippet: tte, packedOpSnippet: rte }); -var f3 = { kernelName: rs, backendName: "webgl", kernelFunc: ote }; -function nte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 = Ct({ inputs: { x: n }, backend: e, attrs: { perm: l } }), c = w.getInnerMostAxes(c.length, i), p.push(m)), w.assertAxesAreInnerMostDims("prod", c, i); +var h3 = { kernelName: ts, backendName: "webgl", kernelFunc: ote }; +function nte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { perm: l } }), c = w.getInnerMostAxes(c.length, i), p.push(m)), w.assertAxesAreInnerMostDims("prod", c, i); let d; if (e.shouldExecuteOnCPU([m])) { - let f = e.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: x } = tD(m.shape, m.dtype, f, c); + let f = e.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: x } = rD(m.shape, m.dtype, f, c); d = e.makeTensorInfo(g, x, h); } else { - let [f, h] = w.computeOutAndReduceShapes(m.shape, c), g = y.sizeFromShape(h), x = te({ inputs: { x: m }, backend: e, attrs: { shape: [-1, g] } }), b = ni(n.dtype), C = Yr(x, b, "prod", e); + let [f, h] = w.computeOutAndReduceShapes(m.shape, c), g = y.sizeFromShape(h), x = te({ inputs: { x: m }, backend: e, attrs: { shape: [-1, g] } }), b = oi(n.dtype), C = Xr(x, b, "prod", e); d = te({ inputs: { x: C }, backend: e, attrs: { shape: f } }), p.push(x), p.push(C); } if (a) { @@ -23366,31 +23367,31 @@ function nte(r) { } return p.forEach((f) => e.disposeIntermediateTensorInfo(f)), d; } -var h3 = { kernelName: ns, backendName: "webgl", kernelFunc: nte }; -function ste(r) { - let { inputs: t8, backend: e, attrs: o } = r, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = t8, { outputRaggedRank: i } = o, p = n.map((x) => e.readSync(x.dataId)), u = n.map((x) => x.shape), c = e.readSync(s.dataId), l = e.readSync(a.dataId), [m, d, f] = rD(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => e.makeTensorInfo([x.length], "int32", x)), g = e.makeTensorInfo(f, s.dtype, d); +var g3 = { kernelName: os, backendName: "webgl", kernelFunc: nte }; +function ste(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = t8, { outputRaggedRank: i } = o, p = n.map((x) => e.readSync(x.dataId)), u = n.map((x) => x.shape), c = e.readSync(s.dataId), l = e.readSync(a.dataId), [m, d, f] = oD(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => e.makeTensorInfo([x.length], "int32", x)), g = e.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var g3 = { kernelName: Qp, backendName: "webgl", kernelFunc: ste }; -function ate(r) { - let { inputs: t8, backend: e } = r, { starts: o, limits: n, deltas: s } = t8, a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = oD(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = e.makeTensorInfo([u.length], "int32", u), m = e.makeTensorInfo([c.length], o.dtype, c); +var x3 = { kernelName: Up, backendName: "webgl", kernelFunc: ste }; +function ate(r15) { + let { inputs: t8, backend: e } = r15, { starts: o, limits: n, deltas: s } = t8, a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = nD(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = e.makeTensorInfo([u.length], "int32", u), m = e.makeTensorInfo([c.length], o.dtype, c); return [l, m]; } -var x3 = { kernelName: Zp, backendName: "webgl", kernelFunc: ate }; -function ite(r) { - let { inputs: t8, backend: e, attrs: o } = r, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = t8, { rowPartitionTypes: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), l = e.readSync(a.dataId), m = i.map((g) => e.readSync(g.dataId)), d = i.map((g) => g.shape), [f, h] = nD(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); +var y3 = { kernelName: Gp, backendName: "webgl", kernelFunc: ate }; +function ite(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = t8, { rowPartitionTypes: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), l = e.readSync(a.dataId), m = i.map((g) => e.readSync(g.dataId)), d = i.map((g) => g.shape), [f, h] = sD(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); return e.makeTensorInfo(f, s.dtype, h); } -var y3 = { kernelName: Jp, backendName: "webgl", kernelFunc: ite }; -var Rv = (r) => { - let { backend: t8, attrs: e } = r, { start: o, stop: n, step: s, dtype: a } = e, i = sD(o, n, s, a); +var b3 = { kernelName: Hp, backendName: "webgl", kernelFunc: ite }; +var Dv = (r15) => { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, step: s, dtype: a } = e, i = aD(o, n, s, a); return t8.makeTensorInfo([i.length], a, i); }; -var b3 = { kernelName: ma, backendName: "webgl", kernelFunc: Rv }; +var C3 = { kernelName: ma, backendName: "webgl", kernelFunc: Dv }; var ute = "return 1.0 / x;"; var pte = xe({ opSnippet: ute }); -var C3 = { kernelName: ss, backendName: "webgl", kernelFunc: pte }; -var cte = Ut + ` +var w3 = { kernelName: ns, backendName: "webgl", kernelFunc: pte }; +var cte = Wt + ` return (x < 0.0) ? 0.0 : x; `; var lte = ` @@ -23405,8 +23406,8 @@ var lte = ` return result; `; var mte = xe({ opSnippet: cte, packedOpSnippet: lte }); -var w3 = { kernelName: as, backendName: "webgl", kernelFunc: mte }; -var dte = Ut + ` +var S3 = { kernelName: ss, backendName: "webgl", kernelFunc: mte }; +var dte = Wt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; var fte = ` @@ -23421,8 +23422,8 @@ var fte = ` return result; `; var hte = xe({ opSnippet: dte, packedOpSnippet: fte }); -var S3 = { kernelName: ps, backendName: "webgl", kernelFunc: hte }; -var bg = class { +var I3 = { kernelName: us, backendName: "webgl", kernelFunc: hte }; +var yg = class { constructor(t8, e, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = t8; @@ -23464,7 +23465,7 @@ var bg = class { `; } }; -var Cg = class { +var bg = class { constructor(t8, e, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = t8; @@ -23550,12 +23551,12 @@ var Cg = class { `; } }; -function gte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { 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); +function gte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new bg(n.shape, p, u, s, a) : new yg(n.shape, p, u, s, a); return e.runWebGLProgram(c, [n], "float32"); } -var I3 = { kernelName: us, backendName: "webgl", kernelFunc: gte }; -var wg = class { +var v3 = { kernelName: is, backendName: "webgl", kernelFunc: gte }; +var Cg = class { constructor(t8, e, o) { this.variableNames = ["dy"], this.outputShape = [], this.outputShape = e; let [, n, s] = e, [, a, i] = t8, 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; @@ -23643,12 +23644,12 @@ var wg = class { `; } }; -function xte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o, i = new wg(s.shape, n.shape, a); +function xte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { alignCorners: a } = o, i = new Cg(s.shape, n.shape, a); return e.runWebGLProgram(i, [s], s.dtype); } -var v3 = { kernelName: ei, backendName: "webgl", kernelFunc: xte }; -var Sg = class { +var k3 = { kernelName: Ja, backendName: "webgl", kernelFunc: xte }; +var wg = class { constructor(t8, e, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = t8; @@ -23679,7 +23680,7 @@ var Sg = class { `; } }; -var Ig = class { +var Sg = class { constructor(t8, e, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = t8; @@ -23729,12 +23730,12 @@ var Ig = class { `; } }; -function yte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { 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); +function yte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new Sg(n.shape, p, u, s, a) : new wg(n.shape, p, u, s, a); return e.runWebGLProgram(c, [n], n.dtype); } -var k3 = { kernelName: is, backendName: "webgl", kernelFunc: yte }; -var vg = class { +var N3 = { kernelName: as, backendName: "webgl", kernelFunc: yte }; +var Ig = class { constructor(t8, e, o) { this.variableNames = ["dy"], this.outputShape = [], this.outputShape = e; let [, n, s] = e, [, a, i] = t8, 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; @@ -23811,12 +23812,12 @@ var vg = class { `; } }; -function bte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o, i = new vg(s.shape, n.shape, a); +function bte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { alignCorners: a } = o, i = new Ig(s.shape, n.shape, a); return e.runWebGLProgram(i, [s], s.dtype); } -var N3 = { kernelName: Ja, backendName: "webgl", kernelFunc: bte }; -var kg = class { +var T3 = { kernelName: Za, backendName: "webgl", kernelFunc: bte }; +var vg = class { constructor(t8, e) { this.variableNames = ["x"]; let o = t8.length; @@ -23840,14 +23841,14 @@ var kg = class { `; } }; -var Ng = class { +var kg = class { constructor(t8, e) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true; let o = t8.length; if (o > 4) throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`); this.outputShape = t8; - let n = Dt("rc", o), s = `${n[o - 1]} + 1 < ${this.outputShape[o - 1]}`, a = `${n[o - 2]} + 1 < ${this.outputShape[o - 2]}`, i = Re(o); + 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 = ` void main(){ int rc = getOutputCoords(); @@ -23898,15 +23899,15 @@ var Ng = class { } } }; -function Cte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); +function Cte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return At({ inputs: { x: n }, backend: e }); - let p = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Ng(n.shape, i) : new kg(n.shape, i); + return Dt({ inputs: { x: n }, backend: e }); + let p = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new kg(n.shape, i) : new vg(n.shape, i); return e.runWebGLProgram(p, [n], n.dtype); } -var T3 = { kernelName: cs, backendName: "webgl", kernelFunc: Cte }; -var Tg = class { +var _3 = { kernelName: ps, backendName: "webgl", kernelFunc: Cte }; +var Ng = class { constructor(t8, e) { this.variableNames = ["Image"], this.outputShape = [], this.customUniforms = [{ name: "params", type: "vec4" }]; let o = t8[1], n = t8[2]; @@ -23934,8 +23935,8 @@ var Tg = class { `; } }; -var _3 = { kernelName: As, backendName: "webgl", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = t8, i = e, 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)]]; +var $3 = { kernelName: Ds, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = t8, i = e, p = new Ng(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 wte = ` @@ -23955,11 +23956,11 @@ var wte = ` } `; var Ste = xe({ opSnippet: wte }); -var $3 = { kernelName: ls, backendName: "webgl", kernelFunc: Ste }; +var E3 = { kernelName: cs, backendName: "webgl", kernelFunc: Ste }; var Ite = "return inversesqrt(x);"; -var vte = xe({ opSnippet: Ite, cpuKernelImpl: aD }); -var E3 = { kernelName: ms, backendName: "webgl", kernelFunc: vte }; -var vu = class { +var vte = xe({ opSnippet: Ite, cpuKernelImpl: iD }); +var R3 = { kernelName: ls, backendName: "webgl", kernelFunc: vte }; +var yu = class { constructor(t8, e, o, n, s, a, i = true, p = false) { this.variableNames = ["updates", "indices", "defaultValue"], this.outputShape = a; let u = Re(s.length), c = Re(a.length), l = ""; @@ -23992,7 +23993,7 @@ var vu = class { `; } }; -var _g = class { +var Tg = class { constructor(t8, e, o, n, s, a, i = true, p = false) { this.variableNames = ["updates", "indices", "defaultValue"], this.packedInputs = true, this.packedOutput = true, this.outputShape = a; let u = Re(s.length), c = Re(a.length), l = ""; @@ -24042,17 +24043,17 @@ var _g = class { `; } }; -function kte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n, updates: s } = t8, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; +function kte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n, updates: s } = t8, { 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 e.makeTensorInfo(a, n.dtype); let d = te({ inputs: { x: n }, backend: e, attrs: { shape: [p, i] } }), f = te({ inputs: { x: s }, backend: e, attrs: { shape: [p, u] } }), h = e.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 vu(p, i, d.shape.length, f.shape.length, c, m); + A().getBool("WEBGL_PACK") ? g = new Tg(p, i, d.shape.length, f.shape.length, c, m) : g = new yu(p, i, d.shape.length, f.shape.length, c, m); let x = e.runWebGLProgram(g, [f, d, h], f.dtype), b = te({ inputs: { x }, backend: e, attrs: { shape: a } }); return e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), e.disposeIntermediateTensorInfo(x), e.disposeIntermediateTensorInfo(h), b; } -var R3 = { kernelName: ds, backendName: "webgl", kernelFunc: kte }; -var $g = class { +var D3 = { kernelName: ms, backendName: "webgl", kernelFunc: kte }; +var _g = class { constructor(t8, e, o, n) { this.variableNames = ["sortedSequence", "values"], this.customUniforms = [{ name: "numInputs", type: "int" }], this.outputShape = [t8, o]; let s = "while (left < right) {", a = `for (int i = 0; i < ${Math.ceil(Math.log2(e + 1))}; ++i) { if (left >= right) break;`, i = A().getNumber("WEBGL_VERSION") === 2 ? s : a, p = n === "left" ? "<" : "<="; @@ -24084,12 +24085,12 @@ var $g = class { `; } }; -function Nte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sortedSequence: n, values: s } = t8, { side: a } = o, i = new $g(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; +function Nte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sortedSequence: n, values: s } = t8, { side: a } = o, i = new _g(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; return e.runWebGLProgram(i, [n, s], "int32", p); } -var D3 = { kernelName: hs, backendName: "webgl", kernelFunc: Nte }; -var Eg = class { +var A3 = { kernelName: fs, backendName: "webgl", kernelFunc: Nte }; +var $g = class { constructor(t8, e, o) { this.variableNames = ["c", "a", "b"], this.outputShape = e; let n, s; @@ -24117,11 +24118,11 @@ var Eg = class { `; } }; -function Tte(r) { - let { inputs: t8, backend: e } = r, { condition: o, t: n, e: s } = t8, a = new Eg(o.shape.length, n.shape, n.shape.length); +function Tte(r15) { + let { inputs: t8, backend: e } = r15, { condition: o, t: n, e: s } = t8, a = new $g(o.shape.length, n.shape, n.shape.length); return e.runWebGLProgram(a, [o, n, s], dt(n.dtype, s.dtype)); } -var A3 = { kernelName: fa, backendName: "webgl", kernelFunc: Tte }; +var F3 = { kernelName: fa, backendName: "webgl", kernelFunc: Tte }; var _te = ` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 @@ -24130,8 +24131,8 @@ var _te = ` return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `; var $te = xe({ opSnippet: _te }); -var F3 = { kernelName: gs, backendName: "webgl", kernelFunc: $te }; -var Ete = Po + ` +var P3 = { kernelName: hs, backendName: "webgl", kernelFunc: $te }; +var Ete = Fo + ` return 1.0 / (1.0 + exp(-1.0 * x)); `; var Rte = ` @@ -24145,31 +24146,31 @@ var Rte = ` return result; `; -var Dte = xe({ opSnippet: Ete, packedOpSnippet: Rte, cpuKernelImpl: uD }); -var P3 = { kernelName: Cs, backendName: "webgl", kernelFunc: Dte }; +var Dte = xe({ opSnippet: Ete, packedOpSnippet: Rte, cpuKernelImpl: pD }); +var O3 = { kernelName: bs, backendName: "webgl", kernelFunc: Dte }; var Ate = ` if (isnan(x)) { return 0.0; } return sign(x); `; var Fte = xe({ opSnippet: Ate }); -var O3 = { kernelName: bs, backendName: "webgl", kernelFunc: Fte }; -var Pte = Po + ` +var M3 = { kernelName: ys, backendName: "webgl", kernelFunc: Fte }; +var Pte = Fo + ` return sin(x); `; var Ote = ` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${Xr} + ${jr} return result; `; var Mte = xe({ opSnippet: Pte, packedOpSnippet: Ote }); -var M3 = { kernelName: xs, backendName: "webgl", kernelFunc: Mte }; +var L3 = { kernelName: gs, backendName: "webgl", kernelFunc: Mte }; var Lte = ` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `; var Bte = xe({ opSnippet: Lte }); -var L3 = { kernelName: ys, backendName: "webgl", kernelFunc: Bte }; +var B3 = { kernelName: xs, backendName: "webgl", kernelFunc: Bte }; var zte = ` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -24192,20 +24193,20 @@ var zte = ` return result; `; var Vte = xe({ opSnippet: zte }); -var B3 = { kernelName: ws, backendName: "webgl", kernelFunc: Vte }; -var Wte = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, paddings: a } = o; +var z3 = { kernelName: Cs, backendName: "webgl", kernelFunc: Vte }; +var Wte = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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; x < n.shape.length; ++x) p.push([0, 0]); - let u = [], c = Ev({ inputs: { x: n }, backend: e, 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: e, attrs: { shape: l } }), h = Ct({ inputs: { x: f }, backend: e, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: e, attrs: { shape: d } }); + let u = [], c = Rv({ inputs: { x: n }, backend: e, 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: e, attrs: { shape: l } }), h = bt({ inputs: { x: f }, backend: e, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: e, attrs: { shape: d } }); return u.push(c), u.push(f), u.push(h), u.forEach((x) => e.disposeIntermediateTensorInfo(x)), g; }; -var z3 = { kernelName: ga, backendName: "webgl", kernelFunc: Wte }; -function Ute(r) { - let { inputs: t8, backend: e } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = t8; +var V3 = { kernelName: ga, backendName: "webgl", kernelFunc: Wte }; +function Ute(r15) { + let { inputs: t8, backend: e } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = t8; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -24218,24 +24219,24 @@ function Ute(r) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = e.readSync(o.dataId), p = e.readSync(n.dataId), u = e.readSync(s.dataId), c = e.readSync(a.dataId)[0], [l, m, d, f, h] = cD(i, o.shape, o.dtype, p, n.dtype, u, c); + let i = e.readSync(o.dataId), p = e.readSync(n.dataId), u = e.readSync(s.dataId), c = e.readSync(a.dataId)[0], [l, m, d, f, h] = lD(i, o.shape, o.dtype, p, n.dtype, u, c); return [e.makeTensorInfo(m, o.dtype, l), e.makeTensorInfo([m[0]], n.dtype, d), e.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), e.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var V3 = { kernelName: ji, backendName: "webgl", kernelFunc: Ute }; -function Gte(r) { - let { inputs: t8, backend: e } = r, { inputIndices: o, inputShape: n, newShape: s } = t8; +var W3 = { kernelName: Hi, backendName: "webgl", kernelFunc: Ute }; +function Gte(r15) { + let { inputs: t8, backend: e } = r15, { inputIndices: o, inputShape: n, newShape: s } = t8; 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(e.readSync(n.dataId)), i = e.readSync(o.dataId), p = Array.from(e.readSync(s.dataId)), [u, c, l] = lD(i, o.shape, o.dtype, a, p); + let a = Array.from(e.readSync(n.dataId)), i = e.readSync(o.dataId), p = Array.from(e.readSync(s.dataId)), [u, c, l] = mD(i, o.shape, o.dtype, a, p); return [e.makeTensorInfo(c, o.dtype, u), e.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var W3 = { kernelName: ti, backendName: "webgl", kernelFunc: Gte }; -function Hte(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; +var U3 = { kernelName: ei, backendName: "webgl", kernelFunc: Gte }; +function Hte(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -24244,12 +24245,12 @@ function Hte(r) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = lh(a, o.shape, o.dtype, i, p, true); + let a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = ch(a, o.shape, o.dtype, i, p, true); return e.makeTensorInfo(c, o.dtype, u); } -var U3 = { kernelName: ya, backendName: "webgl", kernelFunc: Hte }; -function Kte(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; +var G3 = { kernelName: ya, backendName: "webgl", kernelFunc: Hte }; +function Kte(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -24258,22 +24259,22 @@ function Kte(r) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = lh(a, o.shape, o.dtype, i, p); + let a = e.readSync(o.dataId), i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c] = ch(a, o.shape, o.dtype, i, p); return e.makeTensorInfo(c, o.dtype, u); } -var G3 = { kernelName: ba, backendName: "webgl", kernelFunc: Kte }; -function qte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; +var H3 = { kernelName: ba, backendName: "webgl", kernelFunc: Kte }; +function qte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let x = e.bufferSync(n), b = e.bufferSync(s), C = y.decodeString(e.readSync(a.dataId)[0]), S = iD(x, b, i, m, c, u, p, l, C, d); + let x = e.bufferSync(n), b = e.bufferSync(s), C = y.decodeString(e.readSync(a.dataId)[0]), S = uD(x, b, i, m, c, u, p, l, C, d); return e.makeTensorInfo(i, S.dtype, S.values); } - let f = new vu(u, p, n.shape.length, s.shape.length, l, [m, 1], d), h = e.runWebGLProgram(f, [s, n, a], s.dtype), g = te({ inputs: { x: h }, backend: e, attrs: { shape: i } }); + let f = new yu(u, p, n.shape.length, s.shape.length, l, [m, 1], d), h = e.runWebGLProgram(f, [s, n, a], s.dtype), g = te({ inputs: { x: h }, backend: e, attrs: { shape: i } }); return e.disposeIntermediateTensorInfo(h), g; } -var H3 = { kernelName: ks, backendName: "webgl", kernelFunc: qte }; -function jte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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(); +var K3 = { kernelName: vs, backendName: "webgl", kernelFunc: qte }; +function jte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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; @@ -24281,32 +24282,32 @@ function jte(r) { return c[i] += m, f; }); } -var K3 = { kernelName: xa, backendName: "webgl", kernelFunc: jte }; -var q3 = "return sqrt(x);"; -var Xte = xe({ opSnippet: q3, packedOpSnippet: q3, cpuKernelImpl: mD }); -var j3 = { kernelName: Ss, backendName: "webgl", kernelFunc: Xte }; +var q3 = { kernelName: xa, backendName: "webgl", kernelFunc: jte }; +var j3 = "return sqrt(x);"; +var Xte = xe({ opSnippet: j3, packedOpSnippet: j3, cpuKernelImpl: dD }); +var X3 = { kernelName: ws, backendName: "webgl", kernelFunc: Xte }; var Yte = "return x * x;"; var Qte = xe({ opSnippet: Yte }); -var X3 = { kernelName: Xi, backendName: "webgl", kernelFunc: Qte }; -var Y3 = "return (a - b) * (a - b);"; -var Zte = nt({ opSnippet: Y3, packedOpSnippet: Y3 }); -var Q3 = { kernelName: Ns, backendName: "webgl", kernelFunc: Zte }; -function Jte(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8; +var Y3 = { kernelName: Ki, backendName: "webgl", kernelFunc: Qte }; +var Q3 = "return (a - b) * (a - b);"; +var Zte = nt({ opSnippet: Q3, packedOpSnippet: Q3 }); +var Z3 = { kernelName: ks, backendName: "webgl", kernelFunc: Zte }; +function Jte(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8; if (n.dtype !== "string") throw new Error("Input must be of datatype string"); - let s = e.readSync(n.dataId), a = w.fromUint8ToStringArray(s), i = dD(a, "string", o); + let s = e.readSync(n.dataId), a = w.fromUint8ToStringArray(s), i = fD(a, "string", o); return e.makeTensorInfo(n.shape, "string", i); } -var Z3 = { kernelName: Ou, backendName: "webgl", kernelFunc: Jte }; -function ere({ inputs: r, attrs: t8, backend: e }) { - let { x: o } = r, n = Ut + ` +var J3 = { kernelName: $u, backendName: "webgl", kernelFunc: Jte }; +function ere({ inputs: r15, attrs: t8, backend: e }) { + let { x: o } = r15, n = Wt + ` return x > 0.0 ? 1.0 : float(${t8.alpha}); - `, s = new or(o.shape, n); + `, s = new tr(o.shape, n); return e.runWebGLProgram(s, [o], o.dtype); } -var J3 = { kernelName: So, backendName: "webgl", kernelFunc: ere }; -var Rg = class { +var eP = { kernelName: wo, backendName: "webgl", kernelFunc: ere }; +var Eg = class { constructor(t8, e, o) { this.variableNames = ["x"], this.outputShape = o; let n = o.length, s = Re(o.length), a = Re(o.length), i = ""; @@ -24327,70 +24328,70 @@ var Rg = class { `; } }; -function tre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 } = ct.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function tre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: 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 E = ct.computeOutShape(b, C, S), R = Gs({ inputs: { x: n }, backend: e, attrs: { begin: b, size: E } }); + let E = pt.computeOutShape(b, C, S), R = Gs({ inputs: { x: n }, backend: e, attrs: { begin: b, size: E } }); k = te({ inputs: { x: R }, backend: e, attrs: { shape: f } }), e.disposeIntermediateTensorInfo(R); } else if (e.shouldExecuteOnCPU([n])) { - let R = e.readSync(n.dataId), D = me(n.shape, n.dtype, R), P = fD(d, D, S, b); + let R = e.readSync(n.dataId), D = me(n.shape, n.dtype, R), P = hD(d, D, S, b); k = e.makeTensorInfo(f, n.dtype, P.values); } else { - let R = new Rg(b, S, d); + let R = new Eg(b, S, d); k = e.runWebGLProgram(R, [n], n.dtype); } let _ = te({ inputs: { x: k }, backend: e, attrs: { shape: f } }); return e.disposeIntermediateTensorInfo(k), _; } -var eP = { kernelName: Ts, backendName: "webgl", kernelFunc: tre }; -function rre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.readSync(c.dataId), d = e.readSync(l.dataId), [f, h] = hD(m, d, n, s, a, i, p, u); +var tP = { kernelName: Ns, backendName: "webgl", kernelFunc: tre }; +function rre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.readSync(c.dataId), d = e.readSync(l.dataId), [f, h] = gD(m, d, n, s, a, i, p, u); return [e.makeTensorInfo([f.length], "string", f), e.makeTensorInfo(l.shape, "int32", h)]; } -var tP = { kernelName: Ca, backendName: "webgl", kernelFunc: rre }; -function ore(r) { - let { inputs: t8, backend: e, attrs: o } = r, { skipEmpty: n } = o, { input: s, delimiter: a } = t8; +var rP = { kernelName: Ca, backendName: "webgl", kernelFunc: rre }; +function ore(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { skipEmpty: n } = o, { input: s, delimiter: a } = t8; 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 = e.readSync(s.dataId), p = e.readSync(a.dataId)[0], [u, c, l] = gD(i, p, n), m = c.length; + let i = e.readSync(s.dataId), p = e.readSync(a.dataId)[0], [u, c, l] = xD(i, p, n), m = c.length; return [e.makeTensorInfo([m, 2], "int32", u), e.makeTensorInfo([m], "string", c), e.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var rP = { kernelName: Yi, backendName: "webgl", kernelFunc: ore }; -function nre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { numBuckets: n } = o, { input: s } = t8; +var oP = { kernelName: qi, backendName: "webgl", kernelFunc: ore }; +function nre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { numBuckets: n } = o, { input: s } = t8; 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 = e.readSync(s.dataId), i = xD(a, n); + let a = e.readSync(s.dataId), i = yD(a, n); return e.makeTensorInfo(s.shape, "int32", i); } -var oP = { kernelName: Qi, backendName: "webgl", kernelFunc: nre }; +var nP = { kernelName: ji, backendName: "webgl", kernelFunc: nre }; var sre = "return tan(x);"; var are = xe({ opSnippet: sre }); -var nP = { kernelName: $s, backendName: "webgl", kernelFunc: are }; +var sP = { kernelName: _s, backendName: "webgl", kernelFunc: are }; var ire = ` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `; var ure = xe({ opSnippet: ire }); -var sP = { kernelName: Es, backendName: "webgl", kernelFunc: ure }; -function pre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { tensor: n, indices: s, updates: a } = t8, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; +var aP = { kernelName: $s, backendName: "webgl", kernelFunc: ure }; +function pre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { tensor: n, indices: s, updates: a } = t8, {} = 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 e.makeTensorInfo(n.shape, s.dtype); - let d = te({ inputs: { x: s }, backend: e, attrs: { shape: [p, i] } }), f = te({ inputs: { x: a }, backend: e, attrs: { shape: [p, u] } }), h = te({ inputs: { x: n }, backend: e, attrs: { shape: m } }), g = new vu(p, i, d.shape.length, f.shape.length, c, m, false, true), x = e.runWebGLProgram(g, [f, d, h], h.dtype), b = te({ inputs: { x }, backend: e, attrs: { shape: n.shape } }); + let d = te({ inputs: { x: s }, backend: e, attrs: { shape: [p, i] } }), f = te({ inputs: { x: a }, backend: e, attrs: { shape: [p, u] } }), h = te({ inputs: { x: n }, backend: e, attrs: { shape: m } }), g = new yu(p, i, d.shape.length, f.shape.length, c, m, false, true), x = e.runWebGLProgram(g, [f, d, h], h.dtype), b = te({ inputs: { x }, backend: e, attrs: { shape: n.shape } }); return e.disposeIntermediateTensorInfo(d), e.disposeIntermediateTensorInfo(f), e.disposeIntermediateTensorInfo(h), e.disposeIntermediateTensorInfo(x), b; } -var aP = { kernelName: fs, backendName: "webgl", kernelFunc: pre }; -var Dg = class { +var iP = { kernelName: ds, backendName: "webgl", kernelFunc: pre }; +var Rg = class { constructor(t8, e) { this.variableNames = ["A"]; let o = new Array(t8.length); @@ -24406,28 +24407,28 @@ var Dg = class { `; } }; -function cre(r) { - let t8 = r.length; +function cre(r15) { + let t8 = r15.length; if (t8 > 5) throw Error(`Tile for rank ${t8} is not yet supported`); if (t8 === 1) - return `imod(resRC, ${r[0]})`; + return `imod(resRC, ${r15[0]})`; let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"], o = []; - for (let n = 0; n < r.length; n++) - o.push(`imod(${e[n]}, ${r[n]})`); + for (let n = 0; n < r15.length; n++) + o.push(`imod(${e[n]}, ${r15[n]})`); return o.join(); } -function Dv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { reps: s } = o; +function Av(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { reps: s } = o; if (n.dtype === "string" || n.shape.length > 5) { - let p = e.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = bD(c, s); + let p = e.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = CD(c, s); return e.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new Dg(n.shape, s); + let a = new Rg(n.shape, s); return e.runWebGLProgram(a, [n], n.dtype); } -var iP = { kernelName: po, backendName: "webgl", kernelFunc: Dv }; -var Ag = class { +var uP = { kernelName: uo, backendName: "webgl", kernelFunc: Av }; +var Dg = class { constructor(t8) { 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 = t8, this.userCode = ` void main() { @@ -24472,7 +24473,7 @@ var Ag = class { `; } }; -var Fg = class { +var Ag = class { constructor(t8) { this.variableNames = ["x", "indices"], this.customUniforms = [{ name: "n", type: "int" }, { name: "firstPass", type: "int" }, { name: "k", type: "int" }], this.outputShape = t8, this.userCode = ` void main() { @@ -24511,30 +24512,30 @@ var Fg = class { `; } }; -function Rp(r, t8) { - t8 !== null && r.disposeIntermediateTensorInfo(t8); +function Ip(r15, t8) { + t8 !== null && r15.disposeIntermediateTensorInfo(t8); } -function uP(r) { +function pP(r15) { let t8 = 1; - for (; t8 < r; ) + for (; t8 < r15; ) t8 *= 2; return t8; } -function lre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { k: s, sorted: a } = o, i = A().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = A().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, c = u[u.length - 1]; +function lre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { k: s, sorted: a } = o, i = A().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = A().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, c = u[u.length - 1]; if (e.shouldExecuteOnCPU([n]) || c < i || s > p) { - let P = e.readSync(n.dataId), [O, M] = CD(P, u, n.dtype, s, a); + let P = e.readSync(n.dataId), [O, M] = wD(P, u, n.dtype, s, a); return [e.makeTensorInfo(O.shape, O.dtype, O.values), e.makeTensorInfo(M.shape, M.dtype, M.values)]; } if (s === 0) return u[u.length - 1] = 0, [e.makeTensorInfo(u, n.dtype, []), e.makeTensorInfo(u, "int32", [])]; if (c === 1) - return [n, Si({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: e })]; + return [n, bi({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: e })]; let l = e.texData.get(n.dataId), m = l !== null && l.isPacked, d = m ? e.unpackTensor(n) : n, h = y.sizeFromShape(u) / c, g = te({ inputs: { x: d }, attrs: { shape: [h, c] }, backend: e }); - m && Rp(e, d); - let x = uP(s), b = uP(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 = e.runWebGLProgram(B, L, "int32", U), Rp(e, j); + m && Ip(e, d); + let x = pP(s), b = pP(c), C = null, S = () => C === null ? [g, g] : [g, C], k = (P, O, M) => { + let L = S(), B = new Dg(M), U = [[c], [C === null ? 1 : 0], [Number.NEGATIVE_INFINITY], [P], [O]], j = C; + C = e.runWebGLProgram(B, L, "int32", U), Ip(e, j); }; for (let P = 1; P < x; P *= 2) { let O = P * 2; @@ -24542,23 +24543,23 @@ function lre(r) { 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 = e.runWebGLProgram(M, O, "int32", B), Rp(e, z); + let O = S(), M = new Ag([h, P / 2]), B = [[c], [C === null ? 1 : 0], [x]], z = C; + C = e.runWebGLProgram(M, O, "int32", B), Ip(e, 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: e, attrs: { begin: 0, size: [h, s] } }), Rp(e, _); - let E = kv({ inputs: { x: g, indices: C }, backend: e, attrs: { axis: 1, batchDims: 1 } }); - Rp(e, g); + C = Gs({ inputs: { x: C }, backend: e, attrs: { begin: 0, size: [h, s] } }), Ip(e, _); + let E = Nv({ inputs: { x: g, indices: C }, backend: e, attrs: { axis: 1, batchDims: 1 } }); + Ip(e, g); let R = u.slice(0, -1); - R.push(s), _ = C, C = te({ inputs: { x: C }, attrs: { shape: R }, backend: e }), Rp(e, _); + R.push(s), _ = C, C = te({ inputs: { x: C }, attrs: { shape: R }, backend: e }), Ip(e, _); let D = E; - return E = te({ inputs: { x: E }, attrs: { shape: R }, backend: e }), Rp(e, D), [E, C]; + return E = te({ inputs: { x: E }, attrs: { shape: R }, backend: e }), Ip(e, D), [E, C]; } -var pP = { kernelName: Rs, backendName: "webgl", kernelFunc: lre }; -var Pg = class { +var cP = { kernelName: Es, backendName: "webgl", kernelFunc: lre }; +var Fg = class { constructor(t8, e, o, n, s, a) { this.variableNames = ["Image", "Transforms"], this.outputShape = a; let i = o === "nearest" ? 1 : 2, p; @@ -24694,20 +24695,20 @@ var Pg = class { `; } }; -function mre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n, transforms: s } = t8, { 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); +function mre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n, transforms: s } = t8, { 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 Fg(l, m, a, i, p, g); return e.runWebGLProgram(x, [n, s], "float32"); } -var cP = { kernelName: Ds, backendName: "webgl", kernelFunc: mre }; -function dre(r) { - let { inputs: t8, attrs: e, backend: o } = r, { axis: n } = e, { x: s } = t8; +var lP = { kernelName: Rs, backendName: "webgl", kernelFunc: mre }; +function dre(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { axis: n } = e, { x: s } = t8; 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 } = wD(a, n, s.shape, s.dtype); + let a = o.readSync(s.dataId), { outputValues: i, outputShape: p, indices: u } = SD(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var lP = { kernelName: Zi, backendName: "webgl", kernelFunc: dre }; -function fre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { value: n } = t8, { axis: s } = o; +var mP = { kernelName: Xi, backendName: "webgl", kernelFunc: dre }; +function fre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { value: n } = t8, { 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++) @@ -24722,8 +24723,8 @@ function fre(r) { } return l.forEach((h) => e.disposeIntermediateTensorInfo(h)), f; } -var mP = { kernelName: wa, backendName: "webgl", kernelFunc: fre }; -var Og = class { +var dP = { kernelName: wa, backendName: "webgl", kernelFunc: fre }; +var Pg = class { constructor(t8, e) { this.variableNames = ["x", "segmentIds"]; let o = t8.windowSize, n = t8.batchSize, s = t8.inSize, a = t8.numSegments, i = a * Math.ceil(s / o); @@ -24840,43 +24841,43 @@ var Og = class { `; } }; -function hre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, segmentIds: s } = t8, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = w.getAxesPermutation([u], i), l = n; - c != null && (l = Ct({ inputs: { x: n }, backend: e, attrs: { perm: c } }), p.push(l), u = w.getInnerMostAxes(1, i)[0]); +function hre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, segmentIds: s } = t8, { 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: e, 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: e, attrs: { shape: [-1, d] } }); p.push(f); - let h = ni(n.dtype), g = (S, k, _, E, 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 = e.compileAndRun(L, [S, _], E); + let h = oi(n.dtype), g = (S, k, _, E, 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 Pg(M, k), B = e.compileAndRun(L, [S, _], E); if (p.push(B), B.shape[1] === R) return B; - let z = Rv({ backend: e, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), U = Dv({ inputs: { x: z }, backend: e, attrs: { reps: [P / O] } }); + let z = Dv({ backend: e, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), U = Av({ inputs: { x: z }, backend: e, attrs: { reps: [P / O] } }); return p.push(z), p.push(U), g(B, k, U, E, R); }, x = g(f, "unsortedSegmentSum", s, h, a), b = te({ inputs: { x }, backend: e, attrs: { shape: m } }), C = b; if (c != null) { p.push(b); let S = w.getUndoAxesPermutation(c); - C = Ct({ inputs: { x: C }, backend: e, attrs: { perm: S } }); + C = bt({ inputs: { x: C }, backend: e, attrs: { perm: S } }); } return p.forEach((S) => e.disposeIntermediateTensorInfo(S)), C; } -var dP = { kernelName: Ji, backendName: "webgl", kernelFunc: hre }; -var gre = [XD, QD, ZD, JD, tA, rA, oA, nA, iA, uA, pA, cA, lA, mA, dA, fA, hA, gA, xA, yA, bA, wA, SA, IA, vA, _A, EA, RA, BD, AA, PA, OA, MA, LA, BA, zA, VA, WA, UA, GA, qA, jA, XA, YA, QA, ZA, JA, eF, tF, rF, oF, nF, sF, aF, iF, uF, cF, lF, mF, dF, hF, gF, xF, yF, bF, CF, wF, SF, IF, LD, vF, FA, kF, NF, TF, zD, _F, $F, EF, RF, DF, AF, FF, PF, OF, MF, BF, zF, VF, WF, UF, GF, KF, jF, XF, YF, QF, ZF, o3, UD, n3, s3, a3, i3, kA, u3, l3, m3, d3, f3, VD, h3, g3, x3, y3, b3, NA, JF, C3, w3, S3, HD, I3, v3, k3, N3, T3, _3, $3, E3, R3, D3, A3, F3, P3, O3, M3, L3, CA, r3, B3, z3, V3, W3, U3, G3, H3, K3, j3, X3, Q3, Z3, J3, eP, tP, rP, oP, t3, qD, nP, sP, aP, iP, pP, cP, jD, lP, mP, dP, p3]; -for (let r of gre) - ri(r); +var fP = { kernelName: Yi, backendName: "webgl", kernelFunc: hre }; +var gre = [YD, ZD, JD, eA, rA, oA, nA, sA, uA, pA, cA, lA, mA, dA, fA, hA, gA, xA, yA, bA, CA, SA, IA, vA, kA, $A, RA, DA, zD, FA, OA, MA, LA, BA, zA, VA, WA, UA, GA, HA, jA, XA, YA, QA, ZA, JA, eF, tF, rF, oF, nF, sF, aF, iF, uF, pF, lF, mF, dF, fF, gF, xF, yF, bF, CF, wF, SF, IF, vF, BD, kF, PA, NF, TF, _F, VD, $F, EF, RF, DF, AF, FF, PF, OF, MF, LF, zF, VF, WF, UF, GF, HF, qF, XF, YF, QF, ZF, JF, n3, GD, s3, a3, i3, u3, NA, p3, m3, d3, f3, h3, WD, g3, x3, y3, b3, C3, TA, e3, w3, S3, I3, KD, v3, k3, N3, T3, _3, $3, E3, R3, D3, A3, F3, P3, O3, M3, L3, B3, wA, o3, z3, V3, W3, U3, G3, H3, K3, q3, X3, Y3, Z3, J3, eP, tP, rP, oP, nP, r32, jD, sP, aP, iP, uP, cP, lP, XD, mP, dP, fP, c3]; +for (let r15 of gre) + ti(r15); 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"; +(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"; })(we || (we = {})); -var ku; -(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"; -})(ku || (ku = {})); -var fP; -function xre(r) { - fP = r.wasm.cwrap(Io, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); +var bu; +(function(r15) { + r15[r15.linear = 0] = "linear", r15[r15.relu = 1] = "relu", r15[r15.relu6 = 2] = "relu6", r15[r15.prelu = 3] = "prelu", r15[r15.leakyrelu = 4] = "leakyrelu", r15[r15.sigmoid = 5] = "sigmoid", r15[r15.elu = 6] = "elu"; +})(bu || (bu = {})); +var hP; +function xre(r15) { + hP = r15.wasm.cwrap(So, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function yre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = t8; +function yre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = t8; 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 = e.dataIdMap.get(n.dataId).id, d = e.dataIdMap.get(s.dataId).id, f = 0; @@ -24886,89 +24887,89 @@ function yre(r) { throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`); f = R.id; } - let h = i == null ? 0 : e.dataIdMap.get(i.dataId).id, g = ku[c]; + let h = i == null ? 0 : e.dataIdMap.get(i.dataId).id, g = bu[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 = Ir.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), S = e.makeOutput([...C, x, b], n.dtype), k = e.dataIdMap.get(S.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), E = new Uint8Array(new Int32Array(s.shape).buffer); - return fP(m, _, n.shape.length, d, E, s.shape.length, p, u, g, f, h, l || 0, k), S; + 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 = e.makeOutput([...C, x, b], n.dtype), k = e.dataIdMap.get(S.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), E = new Uint8Array(new Int32Array(s.shape).buffer); + return hP(m, _, n.shape.length, d, E, s.shape.length, p, u, g, f, h, l || 0, k), S; } -var hP = { kernelName: Io, backendName: "wasm", setupFunc: xre, kernelFunc: yre }; -function he(r, t8) { +var gP = { kernelName: So, backendName: "wasm", setupFunc: xre, kernelFunc: yre }; +function he(r15, t8) { let e; function o(s) { - e = s.wasm.cwrap(r, null, ["number", "number", "number"]); + e = s.wasm.cwrap(r15, 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, t8 || i.dtype), c = a.dataIdMap.get(u.dataId).id; return y.sizeFromShape(u.shape) === 0 || e(p, we[i.dtype], c), u; } - return { kernelName: r, backendName: "wasm", setupFunc: o, kernelFunc: n }; + return { kernelName: r15, backendName: "wasm", setupFunc: o, kernelFunc: n }; } -var gP = he(Xs); -var xP = he(Wo); -var yP = he(Uo); -function Ue(r, t8, e) { +var xP = he(Xs); +var yP = he(Vo); +var bP = he(Wo); +function Ue(r15, t8, e) { let o; function n(a) { - o = a.wasm.cwrap(r, null, ["number", "array", "number", "number", "array", "number", "number", "number"]); + o = a.wasm.cwrap(r15, 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 = e != null ? e : 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 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 }; + return { kernelName: r15, backendName: "wasm", setupFunc: n, kernelFunc: s }; } var bre = true; -var bP = Ue(uo, bre); -var CP; -function Cre(r) { - CP = r.wasm.cwrap(Go, null, ["array", "number", "number", "number"]); +var CP = Ue(io, bre); +var wP; +function Cre(r15) { + wP = r15.wasm.cwrap(Uo, null, ["array", "number", "number", "number"]); } -function wre(r) { - let { inputs: t8, backend: e } = r, o = e.makeOutput(t8[0].shape, t8[0].dtype); +function wre(r15) { + let { inputs: t8, backend: e } = r15, o = e.makeOutput(t8[0].shape, t8[0].dtype); if (y.sizeFromShape(o.shape) === 0) return o; let n = t8.map((i) => e.dataIdMap.get(i.dataId).id), s = new Uint8Array(new Int32Array(n).buffer), a = e.dataIdMap.get(o.dataId).id; - return CP(s, n.length, we[o.dtype], a), o; + return wP(s, n.length, we[o.dtype], a), o; } -var wP = { kernelName: Go, backendName: "wasm", setupFunc: Cre, kernelFunc: wre }; -function Dp(r) { - let { inputs: { x: t8 }, backend: e } = r; +var SP = { kernelName: Uo, backendName: "wasm", setupFunc: Cre, kernelFunc: wre }; +function vp(r15) { + let { inputs: { x: t8 }, backend: e } = r15; if (t8.dtype === "string") - return ur(e.readSync(t8.dataId), t8.shape, t8.dtype); + return ar(e.readSync(t8.dataId), t8.shape, t8.dtype); let o = e.makeOutput(t8.shape, t8.dtype), n = e.typedArrayFromHeap(t8); return e.typedArrayFromHeap(o).set(n), o; } -var SP = { kernelName: wo, backendName: "wasm", kernelFunc: Dp }; -var IP; -function Sre(r) { - IP = r.wasm.cwrap(co, null, ["number", "array", "number", "number", "number", "array", "number"]); +var IP = { kernelName: Co, backendName: "wasm", kernelFunc: vp }; +var vP; +function Sre(r15) { + vP = r15.wasm.cwrap(po, null, ["number", "array", "number", "number", "number", "array", "number"]); } -function go(r) { - let { inputs: t8, backend: e, attrs: o } = r, [n, s] = vre(t8.x.shape, o.perm), a = true; +function ho(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, [n, s] = vre(t8.x.shape, o.perm), a = true; for (let f = 0; f < s.length; f++) s[f] !== f && (a = false); let i = Ire(t8.x.shape, o.perm), p = { dataId: t8.x.dataId, shape: n, dtype: t8.x.dtype }; if (a) { - let f = Dp({ inputs: t8, backend: e }); + let f = vp({ inputs: t8, backend: e }); return f.shape = i, f; } let u = e.makeOutput(i, p.dtype), c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = new Uint8Array(new Int32Array(s).buffer), d = new Uint8Array(new Int32Array(p.shape).buffer); - return IP(c, d, p.shape.length, we[p.dtype], l, m, s.length), u; + return vP(c, d, p.shape.length, we[p.dtype], l, m, s.length), u; } -function Ire(r, t8) { - let e = new Array(r.length); +function Ire(r15, t8) { + let e = new Array(r15.length); for (let o = 0; o < e.length; o++) - e[o] = r[t8[o]]; + e[o] = r15[t8[o]]; return e; } -function vre(r, t8) { +function vre(r15, t8) { let e = [], o = []; - for (let n = 0; n < r.length; ++n) - r[n] !== 1 && e.push(r[n]), r[t8[n]] !== 1 && o.push(t8[n]); + for (let n = 0; n < r15.length; ++n) + r15[n] !== 1 && e.push(r15[n]), r15[t8[n]] !== 1 && o.push(t8[n]); for (let n = 0; n < o.length; ++n) { let s = -1; for (let a = 0; a < o.length; ++a) @@ -24977,25 +24978,25 @@ function vre(r, t8) { } return [e, o]; } -var vP = { kernelName: co, backendName: "wasm", kernelFunc: go, setupFunc: Sre }; -function _r(r, t8, e) { - let o = r.shape, n = r.shape.length, s = y.parseAxisParam(t8, o), a = s, i = w.getAxesPermutation(a, n), p = null, u = false; +var kP = { kernelName: po, backendName: "wasm", kernelFunc: ho, setupFunc: Sre }; +function Tr(r15, t8, e) { + let o = r15.shape, n = r15.shape.length, s = y.parseAxisParam(t8, 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]]; - a = w.getInnerMostAxes(a.length, n), p = go({ inputs: { x: r }, attrs: { perm: i }, backend: e }); - let l = e.dataIdMap.get(r.dataId).id; + a = w.getInnerMostAxes(a.length, n), p = ho({ inputs: { x: r15 }, attrs: { perm: i }, backend: e }); + let l = e.dataIdMap.get(r15.dataId).id; e.dataIdMap.get(p.dataId).id !== l && (u = true); } return { transposed: p, originalAxes: s, axes: a, inputWasTransposed: u }; } -var kP; -function kre(r) { - kP = r.wasm.cwrap(Ho, null, ["number, number, number"]); +var NP; +function kre(r15) { + NP = r15.wasm.cwrap(Go, null, ["number, number, number"]); } -function Nre(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8); +function Nre(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8); if (d) { let C = t8.dataIdMap.get(c.dataId).id; u = c, p = C; @@ -25005,7 +25006,7 @@ function Nre(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = t8.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - kP(p, x, C); + NP(p, x, C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -25013,13 +25014,13 @@ function Nre(r) { } return b; } -var NP = { kernelName: Ho, backendName: "wasm", setupFunc: kre, kernelFunc: Nre }; -var TP; -function Tre(r) { - TP = r.wasm.cwrap(Ko, null, ["number, number, number"]); +var TP = { kernelName: Go, backendName: "wasm", setupFunc: kre, kernelFunc: Nre }; +var _P; +function Tre(r15) { + _P = r15.wasm.cwrap(Ho, null, ["number, number, number"]); } -function _re(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8); +function _re(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8); if (d) { let C = t8.dataIdMap.get(c.dataId).id; u = c, p = C; @@ -25029,7 +25030,7 @@ function _re(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = t8.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - TP(p, x, C); + _P(p, x, C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -25037,14 +25038,14 @@ function _re(r) { } return b; } -var _P = { kernelName: Ko, backendName: "wasm", setupFunc: Tre, kernelFunc: _re }; -function Mg(r) { +var $P = { kernelName: Ho, backendName: "wasm", setupFunc: Tre, kernelFunc: _re }; +function Og(r15) { let t8; function e(n) { - t8 = n.wasm.cwrap(r, null, ["number", "number", "number", "number", "number"]); + t8 = n.wasm.cwrap(r15, null, ["number", "number", "number", "number", "number"]); } function o(n) { - let { backend: s, inputs: a, attrs: i } = n, { axis: p } = i, { x: u } = a, c = s.dataIdMap.get(u.dataId).id, l = c, m = u, { transposed: d, axes: f, inputWasTransposed: h } = _r(u, p, s); + let { backend: s, inputs: a, attrs: i } = n, { axis: p } = i, { x: u } = a, c = s.dataIdMap.get(u.dataId).id, l = c, m = u, { transposed: d, axes: f, inputWasTransposed: h } = Tr(u, p, s); if (h) { let k = s.dataIdMap.get(d.dataId).id; k !== c && (m = d, l = k); @@ -25052,83 +25053,83 @@ function Mg(r) { let g = m.shape.slice(0, -1), x = s.makeOutput(g, "int32"), b = s.dataIdMap.get(x.dataId).id, C = y.sizeFromShape(x.shape), S = m.shape[f[0]]; return t8(l, we[m.dtype], C, S, b), h && s.disposeData(d.dataId), x; } - return { kernelName: r, backendName: "wasm", setupFunc: e, kernelFunc: o }; + return { kernelName: r15, backendName: "wasm", setupFunc: e, kernelFunc: o }; } -var $P = Mg(Ys); -var EP = Mg(Qs); -var RP = he(qo); -var DP = he(jo); -var AP = he(Xo); -var FP = Ue(Qo, false); -var PP = he(Yo); -var OP; -function $re(r) { - OP = r.wasm.cwrap(Zo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var EP = Og(Ys); +var RP = Og(Qs); +var DP = he(Ko); +var AP = he(qo); +var FP = he(jo); +var PP = Ue(Yo, false); +var OP = he(Xo); +var MP; +function $re(r15) { + MP = r15.wasm.cwrap(Qo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Ere(r) { - let { inputs: t8, attrs: e, backend: o } = r, n = t8.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = e, 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; +function Ere(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, n = t8.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = e, 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}].`); let S = o.makeOutput(c.outShape, "float32"), k = o.dataIdMap.get(S.dataId).id; - return OP(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, k), S; + return MP(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, k), S; } -var MP = { kernelName: Zo, backendName: "wasm", setupFunc: $re, kernelFunc: Ere }; -var LP; -function Rre(r) { - LP = r.wasm.cwrap("AvgPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var LP = { kernelName: Qo, backendName: "wasm", setupFunc: $re, kernelFunc: Ere }; +var BP; +function Rre(r15) { + BP = r15.wasm.cwrap("AvgPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Dre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.makeOutput(c.outShape, n.dtype); - return LP(e.dataIdMap.get(n.dataId).id, e.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; +function Dre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.makeOutput(c.outShape, n.dtype); + return BP(e.dataIdMap.get(n.dataId).id, e.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 BP = { kernelName: Zs, backendName: "wasm", setupFunc: Rre, kernelFunc: Dre }; -var zP; -function Are(r) { - zP = r.wasm.cwrap("AvgPool3DGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var zP = { kernelName: Zs, backendName: "wasm", setupFunc: Rre, kernelFunc: Dre }; +var VP; +function Are(r15) { + VP = r15.wasm.cwrap("AvgPool3DGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Fre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); - return zP(e.dataIdMap.get(n.dataId).id, e.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, c.filterDepth, c.filterHeight, c.filterWidth), l; +function Fre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); + return VP(e.dataIdMap.get(n.dataId).id, e.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, c.filterDepth, c.filterHeight, c.filterWidth), l; } -var VP = { kernelName: Ai, backendName: "wasm", setupFunc: Are, kernelFunc: Fre }; -var WP; -function Pre(r) { - WP = r.wasm.cwrap("AvgPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var WP = { kernelName: Ei, backendName: "wasm", setupFunc: Are, kernelFunc: Fre }; +var UP; +function Pre(r15) { + UP = r15.wasm.cwrap("AvgPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Ore(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p } = o, u = w.computePool2DInfo(s.shape, a, i, 1, p), c = e.makeOutput(s.shape, s.dtype); - return WP(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(c.dataId).id, u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.effectiveFilterHeight, u.effectiveFilterWidth, u.padInfo.top, u.padInfo.left, u.filterHeight, u.filterWidth), c; +function Ore(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p } = o, u = w.computePool2DInfo(s.shape, a, i, 1, p), c = e.makeOutput(s.shape, s.dtype); + return UP(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(c.dataId).id, u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.effectiveFilterHeight, u.effectiveFilterWidth, u.padInfo.top, u.padInfo.left, u.filterHeight, u.filterWidth), c; } -var UP = { kernelName: Di, backendName: "wasm", setupFunc: Pre, kernelFunc: Ore }; -function Vt(r) { - let { inputs: t8, attrs: e } = r, { x: o } = t8, { shape: n } = e, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s); - return y.assert(s === y.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; +var GP = { kernelName: $i, backendName: "wasm", setupFunc: Pre, kernelFunc: Ore }; +function zt(r15) { + let { inputs: t8, attrs: e } = r15, { x: o } = t8, { shape: n } = e, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s); + return y.assert(s === y.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r15.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; } -var GP = { kernelName: da, backendName: "wasm", kernelFunc: Vt }; -var HP; -function Mre(r) { - HP = r.wasm.cwrap(Jo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); +var HP = { kernelName: da, backendName: "wasm", kernelFunc: zt }; +var KP; +function Mre(r15) { + KP = r15.wasm.cwrap(Zo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); } -function Lre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; +function Lre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s } = t8, { 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 = Ir.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + 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], _ = Vt({ inputs: { x: n }, backend: e, attrs: { shape: S } }), E = Vt({ inputs: { x: s }, backend: e, attrs: { shape: k } }), R = e.dataIdMap.get(_.dataId).id, D = e.dataIdMap.get(E.dataId).id, P = a ? _.shape[2] : _.shape[1], O = i ? E.shape[1] : E.shape[2], M = Math.max(g, x), L = e.makeOutput([M, P, O], _.dtype), B = e.dataIdMap.get(L.dataId).id, z = new Uint8Array(new Int32Array(_.shape).buffer), U = new Uint8Array(new Int32Array(E.shape).buffer); - return HP(R, z, _.shape.length, D, U, E.shape.length, a, i, B), e.disposeData(_.dataId), e.disposeData(E.dataId), L.shape = C, L; + let S = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = zt({ inputs: { x: n }, backend: e, attrs: { shape: S } }), E = zt({ inputs: { x: s }, backend: e, attrs: { shape: k } }), R = e.dataIdMap.get(_.dataId).id, D = e.dataIdMap.get(E.dataId).id, P = a ? _.shape[2] : _.shape[1], O = i ? E.shape[1] : E.shape[2], M = Math.max(g, x), L = e.makeOutput([M, P, O], _.dtype), B = e.dataIdMap.get(L.dataId).id, z = new Uint8Array(new Int32Array(_.shape).buffer), U = new Uint8Array(new Int32Array(E.shape).buffer); + return KP(R, z, _.shape.length, D, U, E.shape.length, a, i, B), e.disposeData(_.dataId), e.disposeData(E.dataId), L.shape = C, L; } -var KP = { kernelName: Jo, backendName: "wasm", setupFunc: Mre, kernelFunc: Lre }; -function Oo(r) { - let { inputs: { x: t8 }, attrs: { begin: e, size: o }, backend: n } = r, [s, a] = ct.parseSliceParams(t8, e, o), i = ct.isSliceContinous(t8.shape, s, a), p = n.readSync(t8.dataId), u = n.makeOutput(a, t8.dtype), c = y.computeStrides(t8.shape), l = n.dataIdMap.get(u.dataId); +var qP = { kernelName: Zo, backendName: "wasm", setupFunc: Mre, kernelFunc: Lre }; +function Po(r15) { + let { inputs: { x: t8 }, attrs: { begin: e, size: o }, backend: n } = r15, [s, a] = pt.parseSliceParams(t8, e, o), i = pt.isSliceContinous(t8.shape, s, a), p = n.readSync(t8.dataId), u = n.makeOutput(a, t8.dtype), c = y.computeStrides(t8.shape), l = n.dataIdMap.get(u.dataId); if (i) { - let f = ct.computeFlatOffset(s, c); + let f = pt.computeFlatOffset(s, c); return t8.dtype === "string" ? l.stringBytes = p.slice(f, f + y.sizeFromShape(a)) : n.typedArrayFromHeap(u).set(p.subarray(f, f + y.sizeFromShape(a))), u; } if (t8.dtype === "string") { - let f = hp(p, s, a, t8.shape, t8.dtype); + let f = ip(p, s, a, t8.shape, t8.dtype); return l.stringBytes = f, u; } let m = n.typedArrayFromHeap(u), d = t8.shape.length; @@ -25139,91 +25140,91 @@ function Oo(r) { else if (d === 4) Vre(p, c[0], c[1], c[2], m, s, a); else { - let f = hp(p, s, a, t8.shape, t8.dtype); + let f = ip(p, s, a, t8.shape, t8.dtype); m.set(f); } return u; } -function Bre(r, t8, e, o, n) { +function Bre(r15, t8, e, o, n) { let s = 0, a = o[0], i = o[1], p = a + n[0]; for (let u = a; u < p; u++) { let c = u * t8 + i; - e.set(r.subarray(c, c + n[1]), s), s += n[1]; + e.set(r15.subarray(c, c + n[1]), s), s += n[1]; } } -function zre(r, t8, e, o, n, s) { +function zre(r15, t8, e, 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 * t8 + d * e + u; - o.set(r.subarray(f, f + s[2]), a), a += s[2]; + o.set(r15.subarray(f, f + s[2]), a), a += s[2]; } } -function Vre(r, t8, e, o, n, s, a) { +function Vre(r15, t8, e, 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 * t8 + g * e + x * o + f; - n.set(r.subarray(b, b + a[3]), i), i += a[3]; + n.set(r15.subarray(b, b + a[3]), i), i += a[3]; } } -var qP = { kernelName: ha, backendName: "wasm", kernelFunc: Oo }; -function Wre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, crops: a } = o, 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 = Vt({ inputs: { x: n }, backend: e, attrs: { shape: p } }), f = go({ inputs: { x: d }, backend: e, attrs: { perm: u } }), h = Vt({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Oo({ inputs: { x: h }, backend: e, attrs: { begin: l, size: m } }); +var jP = { kernelName: ha, backendName: "wasm", kernelFunc: Po }; +function Wre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { blockShape: s, crops: a } = o, 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 = zt({ inputs: { x: n }, backend: e, attrs: { shape: p } }), f = ho({ inputs: { x: d }, backend: e, attrs: { perm: u } }), h = zt({ inputs: { x: f }, backend: e, attrs: { shape: c } }), g = Po({ inputs: { x: h }, backend: e, attrs: { begin: l, size: m } }); return e.disposeData(d.dataId), e.disposeData(f.dataId), e.disposeData(h.dataId), g; } -var jP = { kernelName: Js, backendName: "wasm", kernelFunc: Wre }; -var XP; -function Ure(r) { - XP = r.wasm.cwrap(en, null, ["number", "number", "boolean", "number", "number", "number"]); +var XP = { kernelName: Js, backendName: "wasm", kernelFunc: Wre }; +var YP; +function Ure(r15) { + YP = r15.wasm.cwrap(Jo, null, ["number", "number", "boolean", "number", "number", "number"]); } -function Gre(r) { - let { backend: t8, inputs: e, attrs: o } = r, { x: n, weights: s } = e, { size: a } = o, i = s.shape.reduce((l, m) => l * m, 1) !== 0, p = n.shape.length === 1 ? [a] : [n.shape[0], a], u = t8.makeOutput(p, s.dtype); +function Gre(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { x: n, weights: s } = e, { size: a } = o, i = s.shape.reduce((l, m) => l * m, 1) !== 0, p = n.shape.length === 1 ? [a] : [n.shape[0], a], u = t8.makeOutput(p, s.dtype); function c(l) { return t8.dataIdMap.get(l.dataId).id; } - return XP(c(n), a, i, c(s), we[s.dtype], c(u)), u; + return YP(c(n), a, i, c(s), we[s.dtype], c(u)), u; } -var YP = { kernelName: en, backendName: "wasm", setupFunc: Ure, kernelFunc: Gre }; +var QP = { kernelName: Jo, backendName: "wasm", setupFunc: Ure, kernelFunc: Gre }; var Hre = true; -var QP = Ue(ja, Hre); -function Kre(r) { - let { inputs: t8, backend: e } = r, { s0: o, s1: n } = t8, s = e.typedArrayFromHeap(o), a = e.typedArrayFromHeap(n), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var ZP = Ue(qa, Hre); +function Kre(r15) { + let { inputs: t8, backend: e } = r15, { s0: o, s1: n } = t8, s = e.typedArrayFromHeap(o), a = e.typedArrayFromHeap(n), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return e.makeOutput([i.length], "int32", void 0, new Int32Array(i)); } -var ZP = { kernelName: ea, backendName: "wasm", kernelFunc: Kre }; -function Mr(r) { - let { inputs: { x: t8 }, attrs: { dtype: e }, backend: o } = r, n = o.makeOutput(t8.shape, e), s = o.typedArrayFromHeap(t8); +var JP = { kernelName: ea, backendName: "wasm", kernelFunc: Kre }; +function Or(r15) { + let { inputs: { x: t8 }, attrs: { dtype: e }, backend: o } = r15, n = o.makeOutput(t8.shape, e), s = o.typedArrayFromHeap(t8); return o.typedArrayFromHeap(n).set(s), n; } -var JP = { kernelName: bo, backendName: "wasm", kernelFunc: Mr }; -var eO = he(tn); -var tO; -function qre(r) { - tO = r.wasm.cwrap(Co, null, ["number", "number", "number", "number"]); +var eO = { kernelName: yo, backendName: "wasm", kernelFunc: Or }; +var tO = he(en); +var rO; +function qre(r15) { + rO = r15.wasm.cwrap(bo, null, ["number", "number", "number", "number"]); } -function jre(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { clipValueMin: s, clipValueMax: a } = o, i = e.dataIdMap.get(n.dataId).id, p = e.makeOutput(n.shape, n.dtype), u = e.dataIdMap.get(p.dataId).id; - return tO(i, s, a, u), p; +function jre(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { clipValueMin: s, clipValueMax: a } = o, i = e.dataIdMap.get(n.dataId).id, p = e.makeOutput(n.shape, n.dtype), u = e.dataIdMap.get(p.dataId).id; + return rO(i, s, a, u), p; } -var rO = { kernelName: Co, backendName: "wasm", setupFunc: qre, kernelFunc: jre }; -function Av(r) { - let { inputs: t8, backend: e } = r, o = y.parseAxisParam(r.attrs.axis, t8[0].shape)[0], n = t8.map((d) => d.shape); +var oO = { kernelName: bo, backendName: "wasm", setupFunc: qre, kernelFunc: jre }; +function Fv(r15) { + let { inputs: t8, backend: e } = r15, o = y.parseAxisParam(r15.attrs.axis, t8[0].shape)[0], n = t8.map((d) => d.shape); w.assertParamsConsistent(n, o); let s = w.computeOutShape(t8.map((d) => d.shape), o), a = t8.filter((d) => y.sizeFromShape(d.shape) > 0); if (a.length === 1) - return Dp({ inputs: { x: a[0] }, backend: e }); + return vp({ inputs: { x: a[0] }, backend: e }); let i = e.makeOutput(s, t8[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 Vt({ inputs: { x: C }, backend: e, attrs: { shape: k } }); + return zt({ inputs: { x: C }, backend: e, attrs: { shape: k } }); }), f = d.map((C) => ({ vals: e.readSync(C.dataId), shape: C.shape })); s = w.computeOutShape(d.map((C) => C.shape), 1); - let h = d[0].shape[0] === 1, g = mp(f, s, t8[0].dtype, h), x = w.computeOutShape(a.map((C) => C.shape), o); + let h = d[0].shape[0] === 1, g = np(f, s, t8[0].dtype, h), x = w.computeOutShape(a.map((C) => C.shape), o); i.shape = x; let b = e.dataIdMap.get(i.dataId); return b.stringBytes = w.fromStringArrayToUint8(g), d.forEach((C) => e.disposeData(C.dataId)), i; @@ -25241,262 +25242,264 @@ function Av(r) { } return i; } -var oO = { kernelName: ta, backendName: "wasm", kernelFunc: Av }; -var nO; -function Xre(r) { - nO = r.wasm.cwrap(rn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var nO = { kernelName: ta, backendName: "wasm", kernelFunc: Fv }; +var sO; +function Xre(r15) { + sO = r15.wasm.cwrap(tn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Yre(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n, filter: s } = t8, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l, dataFormat: m } = e, 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, E = f.strideHeight, R = f.strideWidth, D = f.inChannels, P = f.outChannels, O = f.padInfo.type === "SAME" ? 1 : 0; +function Yre(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n, filter: s } = t8, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l, dataFormat: m } = e, 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, E = 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'.`); let M = o.makeOutput(f.outShape, "float32"), L = o.dataIdMap.get(M.dataId).id; - return nO(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, C, S, O, k, _, E, R, D, P, L), M; + return sO(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, C, S, O, k, _, E, R, D, P, L), M; } -var sO = { kernelName: rn, backendName: "wasm", setupFunc: Xre, kernelFunc: Yre }; -var aO; -function Qre(r) { - aO = r.wasm.cwrap(on, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var aO = { kernelName: tn, backendName: "wasm", setupFunc: Xre, kernelFunc: Yre }; +var iO; +function Qre(r15) { + iO = r15.wasm.cwrap(rn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Zre(r) { - let { backend: t8, inputs: e, attrs: o } = r, { dy: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: c } = o, l = 1, m = w.convertConv2DDataFormat(p), d = w.computeConv2DInfo(c, s.shape, a, l, i, u, false, m), { batchSize: f, filterHeight: h, filterWidth: g, inChannels: x, inHeight: b, inWidth: C, outChannels: S, outHeight: k, outWidth: _, strideHeight: E, strideWidth: R } = d, D = h - 1 - d.padInfo.top, P = g - 1 - d.padInfo.left, O = d.dataFormat === "channelsLast", M = y.computeStrides(d.inShape), L = y.computeStrides(n.shape), [B, z, U] = y.computeStrides(s.shape), j = M[0], q = O ? M[1] : M[2], Y = O ? M[2] : 1, J = O ? 1 : M[1], re = L[0], ne = O ? L[1] : L[2], ee = O ? L[2] : 1, oe = O ? 1 : L[1], ie = t8.makeOutput(d.inShape, "float32"), le = t8.dataIdMap.get(ie.dataId).id, be = t8.dataIdMap.get(n.dataId).id, _e = t8.dataIdMap.get(s.dataId).id; - return aO(be, _e, f, h, g, b, C, x, k, _, S, E, R, D, P, B, z, U, j, q, Y, J, re, ne, ee, oe, le), ie; +function Zre(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: c } = o, l = 1, m = w.convertConv2DDataFormat(p), d = w.computeConv2DInfo(c, s.shape, a, l, i, u, false, m), { batchSize: f, filterHeight: h, filterWidth: g, inChannels: x, inHeight: b, inWidth: C, outChannels: S, outHeight: k, outWidth: _, strideHeight: E, strideWidth: R } = d, D = h - 1 - d.padInfo.top, P = g - 1 - d.padInfo.left, O = d.dataFormat === "channelsLast", M = y.computeStrides(d.inShape), L = y.computeStrides(n.shape), [B, z, U] = y.computeStrides(s.shape), j = M[0], q = O ? M[1] : M[2], Y = O ? M[2] : 1, J = O ? 1 : M[1], re = L[0], ne = O ? L[1] : L[2], ee = O ? L[2] : 1, oe = O ? 1 : L[1], ie = t8.makeOutput(d.inShape, "float32"), le = t8.dataIdMap.get(ie.dataId).id, be = t8.dataIdMap.get(n.dataId).id, _e = t8.dataIdMap.get(s.dataId).id; + return iO(be, _e, f, h, g, b, C, x, k, _, S, E, R, D, P, B, z, U, j, q, Y, J, re, ne, ee, oe, le), ie; } -var iO = { kernelName: on, backendName: "wasm", setupFunc: Qre, kernelFunc: Zre }; -var uO; -function Jre(r) { - uO = r.wasm.cwrap(nn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var uO = { kernelName: rn, backendName: "wasm", setupFunc: Qre, kernelFunc: Zre }; +var pO; +function Jre(r15) { + pO = r15.wasm.cwrap(on, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function eoe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o; +function eoe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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}`); let u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = e.makeOutput(u.outShape, n.dtype); - return uO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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; + return pO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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; } -var pO = { kernelName: nn, backendName: "wasm", setupFunc: Jre, kernelFunc: eoe }; -var cO; -function toe(r) { - cO = r.wasm.cwrap(Xa, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var cO = { kernelName: on, backendName: "wasm", setupFunc: Jre, kernelFunc: eoe }; +var lO; +function toe(r15) { + lO = r15.wasm.cwrap(ja, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function roe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o; +function roe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { 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}`); let u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = e.makeOutput(u.filterShape, s.dtype); - return cO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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; + return lO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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; } -var lO = { kernelName: Xa, backendName: "wasm", setupFunc: toe, kernelFunc: roe }; -var mO; -function ooe(r) { - mO = r.wasm.cwrap(sn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var mO = { kernelName: ja, backendName: "wasm", setupFunc: toe, kernelFunc: roe }; +var dO; +function ooe(r15) { + dO = r15.wasm.cwrap(nn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function noe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { pad: a, strides: i, inputShape: p } = o; +function noe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { 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}`); let u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = e.makeOutput(u.inShape, n.dtype); - return mO(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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; + return dO(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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; } -var dO = { kernelName: sn, backendName: "wasm", setupFunc: ooe, kernelFunc: noe }; -var fO = he(an); -var hO = he(un); -var Fv; -(function(r) { - r[r.bilinear = 0] = "bilinear", r[r.nearest = 1] = "nearest"; -})(Fv || (Fv = {})); -var gO; -function soe(r) { - gO = r.wasm.cwrap(ln, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); +var fO = { kernelName: nn, backendName: "wasm", setupFunc: ooe, kernelFunc: noe }; +var hO = he(sn); +var gO = he(an); +var Pv; +(function(r15) { + r15[r15.bilinear = 0] = "bilinear", r15[r15.nearest = 1] = "nearest"; +})(Pv || (Pv = {})); +var xO; +function soe(r15) { + xO = r15.wasm.cwrap(cn, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); } -function aoe(r) { - let { backend: t8, inputs: e, attrs: o } = r, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = e, c = p.shape[0], [l, m] = a, d = [c, l, m, i.shape[3]], f = t8.dataIdMap.get(i.dataId), h; - i.dtype !== "float32" && (h = Mr({ backend: t8, inputs: { x: i }, attrs: { dtype: "float32" } }), f = t8.dataIdMap.get(h.dataId)); +function aoe(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = e, c = p.shape[0], [l, m] = a, d = [c, l, m, i.shape[3]], f = t8.dataIdMap.get(i.dataId), h; + i.dtype !== "float32" && (h = Or({ backend: t8, inputs: { x: i }, attrs: { dtype: "float32" } }), f = t8.dataIdMap.get(h.dataId)); let g = f.id, x = t8.dataIdMap.get(p.dataId).id, b = t8.dataIdMap.get(u.dataId).id, C = t8.makeOutput(d, "float32"), S = t8.dataIdMap.get(C.dataId).id, k = new Uint8Array(new Int32Array(i.shape).buffer); - return gO(g, x, b, c, k, l, m, Fv[n], s, S), h != null && t8.disposeData(h.dataId), C; + return xO(g, x, b, c, k, l, m, Pv[n], s, S), h != null && t8.disposeData(h.dataId), C; } -var xO = { kernelName: ln, backendName: "wasm", setupFunc: soe, kernelFunc: aoe }; -var yO; -function ioe(r) { - yO = r.wasm.cwrap(pn, null, ["number", "number", "number", "number", "number", "number"]); +var yO = { kernelName: cn, backendName: "wasm", setupFunc: soe, kernelFunc: aoe }; +var bO; +function ioe(r15) { + bO = r15.wasm.cwrap(un, null, ["number", "number", "number", "number", "number", "number"]); } -function uoe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; +function uoe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; y.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumprod does not support ${n.dtype} tensors in the WASM backend`); let u = w.getAxesPermutation([s], p), c = n; - u !== null && (c = go({ inputs: { x: n }, attrs: { perm: u }, backend: e })); + u !== null && (c = ho({ inputs: { x: n }, attrs: { perm: u }, backend: e })); let l = w.getInnerMostAxes(1, p)[0]; w.assertAxesAreInnerMostDims("cumprod", [l], p); let m = e.makeOutput(c.shape, c.dtype), d = c.shape[l], f = e.dataIdMap.get(c.dataId).id, h = e.dataIdMap.get(m.dataId).id; - yO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); + bO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); let g = m; if (u !== null) { let x = w.getUndoAxesPermutation(u); - g = go({ inputs: { x: m }, attrs: { perm: x }, backend: e }), e.disposeData(c.dataId), e.disposeData(m.dataId); + g = ho({ inputs: { x: m }, attrs: { perm: x }, backend: e }), e.disposeData(c.dataId), e.disposeData(m.dataId); } return g; } -var bO = { kernelName: pn, backendName: "wasm", setupFunc: ioe, kernelFunc: uoe }; -var CO; -function poe(r) { - CO = r.wasm.cwrap(cn, null, ["number", "number", "number", "number", "number", "number"]); +var CO = { kernelName: un, backendName: "wasm", setupFunc: ioe, kernelFunc: uoe }; +var wO; +function poe(r15) { + wO = r15.wasm.cwrap(pn, null, ["number", "number", "number", "number", "number", "number"]); } -function coe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; +function coe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = go({ inputs: { x: n }, attrs: { perm: u }, backend: e })); + u !== null && (c = ho({ inputs: { x: n }, attrs: { perm: u }, backend: e })); let l = w.getInnerMostAxes(1, p)[0]; w.assertAxesAreInnerMostDims("cumsum", [l], p); let m = e.makeOutput(c.shape, c.dtype), d = c.shape[l], f = e.dataIdMap.get(c.dataId).id, h = e.dataIdMap.get(m.dataId).id; - CO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); + wO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); let g = m; if (u !== null) { let x = w.getUndoAxesPermutation(u); - g = go({ inputs: { x: m }, attrs: { perm: x }, backend: e }), e.disposeData(c.dataId), e.disposeData(m.dataId); + g = ho({ inputs: { x: m }, attrs: { perm: x }, backend: e }), e.disposeData(c.dataId), e.disposeData(m.dataId); } return g; } -var wO = { kernelName: cn, backendName: "wasm", setupFunc: poe, kernelFunc: coe }; -var SO; -function loe(r) { - SO = r.wasm.cwrap("DenseBincount", null, ["number", "array", "number", "number", "boolean", "number", "number", "boolean", "number"]); +var SO = { kernelName: pn, backendName: "wasm", setupFunc: poe, kernelFunc: coe }; +var IO; +function loe(r15) { + IO = r15.wasm.cwrap("DenseBincount", null, ["number", "array", "number", "number", "boolean", "number", "number", "boolean", "number"]); } -function moe(r) { - let { backend: t8, inputs: e, attrs: o } = r, { x: n, weights: s } = e, { 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 = t8.makeOutput(u, s.dtype); +function moe(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { x: n, weights: s } = e, { 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 = t8.makeOutput(u, s.dtype); function l(m) { return t8.dataIdMap.get(m.dataId).id; } - return SO(l(n), new Uint8Array(new Int32Array(n.shape).buffer), n.shape.length, a, p, l(s), we[s.dtype], i, l(c)), c; + return IO(l(n), new Uint8Array(new Int32Array(n.shape).buffer), n.shape.length, a, p, l(s), we[s.dtype], i, l(c)), c; } -var IO = { kernelName: ra, backendName: "wasm", setupFunc: loe, kernelFunc: moe }; -var vO; -function doe(r) { - vO = r.wasm.cwrap(mn, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); +var vO = { kernelName: ra, backendName: "wasm", setupFunc: loe, kernelFunc: moe }; +var kO; +function doe(r15) { + kO = r15.wasm.cwrap(ln, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); } -function foe(r) { - let { backend: t8, inputs: e, 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 = t8.makeOutput(f, "float32"), x = t8.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 = t8.dataIdMap.get(h.dataId).id; - return vO(x, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, C, S, f.length, k), h; +function foe(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { 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 = t8.makeOutput(f, "float32"), x = t8.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 = t8.dataIdMap.get(h.dataId).id; + return kO(x, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, C, S, f.length, k), h; } -var kO = { kernelName: mn, backendName: "wasm", setupFunc: doe, kernelFunc: foe }; -var NO; -function hoe(r) { - NO = r.wasm.cwrap(dn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var NO = { kernelName: ln, backendName: "wasm", setupFunc: doe, kernelFunc: foe }; +var TO; +function hoe(r15) { + TO = r15.wasm.cwrap(mn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function goe(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n, filter: s } = t8, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l } = e, 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, E = d.strideWidth, R = d.inChannels, D = d.outChannels, P = d.padInfo.type === "SAME" ? 1 : 0; +function goe(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n, filter: s } = t8, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l } = e, 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, E = 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 NO(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, C, P, S, k, _, E, R, D, M), O; + return TO(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, C, P, S, k, _, E, R, D, M), O; } -var TO = { kernelName: dn, backendName: "wasm", setupFunc: hoe, kernelFunc: goe }; -var _O; -function xoe(r) { - _O = r.wasm.cwrap("Diag", null, ["number", "number", "number", "number"]); +var _O = { kernelName: mn, backendName: "wasm", setupFunc: hoe, kernelFunc: goe }; +var $O; +function xoe(r15) { + $O = r15.wasm.cwrap("Diag", null, ["number", "number", "number", "number"]); } -function yoe(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = y.sizeFromShape(o.shape), s = e.makeOutput([...o.shape, ...o.shape], o.dtype); - return _O(e.dataIdMap.get(o.dataId).id, we[o.dtype], n, e.dataIdMap.get(s.dataId).id), s; +function yoe(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = y.sizeFromShape(o.shape), s = e.makeOutput([...o.shape, ...o.shape], o.dtype); + return $O(e.dataIdMap.get(o.dataId).id, we[o.dtype], n, e.dataIdMap.get(s.dataId).id), s; } -var $O = { kernelName: oa, backendName: "wasm", setupFunc: xoe, kernelFunc: yoe }; -var EO; -function boe(r) { - EO = r.wasm.cwrap(fn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var EO = { kernelName: oa, backendName: "wasm", setupFunc: xoe, kernelFunc: yoe }; +var RO; +function boe(r15) { + RO = r15.wasm.cwrap(dn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Coe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dilations: p } = o; +function Coe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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 = e.makeOutput(u.outShape, n.dtype); - return EO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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; + return RO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.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 RO = { kernelName: fn, backendName: "wasm", setupFunc: boe, kernelFunc: Coe }; -var DO; -function woe(r) { - DO = r.wasm.cwrap(zi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var DO = { kernelName: dn, backendName: "wasm", setupFunc: boe, kernelFunc: Coe }; +var AO; +function woe(r15) { + AO = r15.wasm.cwrap(Mi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Soe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, dy: a } = t8, { strides: i, pad: p, dilations: u } = o; +function Soe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, dy: a } = t8, { 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 = e.makeOutput(s.shape, s.dtype); - return DO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.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; + return AO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.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 AO = { kernelName: zi, backendName: "wasm", setupFunc: woe, kernelFunc: Soe }; -var FO; -function Ioe(r) { - FO = r.wasm.cwrap(Bi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var FO = { kernelName: Mi, backendName: "wasm", setupFunc: woe, kernelFunc: Soe }; +var PO; +function Ioe(r15) { + PO = r15.wasm.cwrap(Oi, 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: t8, backend: e, attrs: o } = r, { x: n, filter: s, dy: a } = t8, { strides: i, pad: p, dilations: u } = o; +function voe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, dy: a } = t8, { 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 = e.makeOutput(n.shape, n.dtype); - return FO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.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; + return PO(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.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 PO = { kernelName: Bi, backendName: "wasm", setupFunc: Ioe, kernelFunc: voe }; -var OO = he(gn); -var MO; -function koe(r) { - MO = r.wasm.cwrap(Ya, null, ["number", "number", "number"]); +var OO = { kernelName: Oi, backendName: "wasm", setupFunc: Ioe, kernelFunc: voe }; +var MO = he(hn); +var LO; +function koe(r15) { + LO = r15.wasm.cwrap(Xa, null, ["number", "number", "number"]); } -function Noe(r) { - let { inputs: t8, backend: e } = r, { dy: o, y: n } = t8, s = e.makeOutput(n.shape, "float32"), a = (i) => e.dataIdMap.get(i.dataId).id; - return MO(a(n), a(o), a(s)), s; +function Noe(r15) { + let { inputs: t8, backend: e } = r15, { dy: o, y: n } = t8, s = e.makeOutput(n.shape, "float32"), a = (i) => e.dataIdMap.get(i.dataId).id; + return LO(a(n), a(o), a(s)), s; } -var LO = { kernelName: Ya, backendName: "wasm", setupFunc: koe, kernelFunc: Noe }; +var BO = { kernelName: Xa, backendName: "wasm", setupFunc: koe, kernelFunc: Noe }; var Toe = false; -var BO = Ue(yn, Toe, "bool"); -var zO = he(xn); -var VO = he(bn, "float32"); -function Lg(r) { - let { inputs: t8, attrs: e, backend: o } = r, { input: n } = t8, { dim: s } = e, 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), Vt({ inputs: { x: n }, backend: o, attrs: { shape: i } }); +var zO = Ue(xn, Toe, "bool"); +var VO = he(gn); +var WO = he(yn, "float32"); +function Mg(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { input: n } = t8, { dim: s } = e, 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 WO = { kernelName: na, backendName: "wasm", kernelFunc: Lg }; -var UO = he(Cn, "float32"); -function Pv(r) { - let { attrs: { shape: t8, value: e, dtype: o }, backend: n } = r, s = n.makeOutput(t8, o); - return n.typedArrayFromHeap(s).fill(e), s; +var UO = { kernelName: na, backendName: "wasm", kernelFunc: Mg }; +var GO = he(bn, "float32"); +function Ov(r15) { + let { attrs: { shape: t8, value: e }, backend: o } = r15, { attrs: { dtype: n } } = r15; + n = n || y.inferDtype(e); + let s = o.makeOutput(t8, n); + return o.typedArrayFromHeap(s).fill(e), s; } -var GO = { kernelName: sa, backendName: "wasm", kernelFunc: Pv }; -var HO; -function _oe(r) { - HO = r.wasm.cwrap(wn, null, ["number", "number", "number", "number", "number", "number"]); +var HO = { kernelName: sa, backendName: "wasm", kernelFunc: Ov }; +var KO; +function _oe(r15) { + KO = r15.wasm.cwrap(Cn, null, ["number", "number", "number", "number", "number", "number"]); } -function $oe(r) { - let { inputs: t8, backend: e } = r, { image: o } = t8, n = e.makeOutput(o.shape, o.dtype), s = e.dataIdMap.get(o.dataId).id, a = e.dataIdMap.get(n.dataId).id, [i, p, u, c] = o.shape; - return HO(s, i, p, u, c, a), n; +function $oe(r15) { + let { inputs: t8, backend: e } = r15, { image: o } = t8, n = e.makeOutput(o.shape, o.dtype), s = e.dataIdMap.get(o.dataId).id, a = e.dataIdMap.get(n.dataId).id, [i, p, u, c] = o.shape; + return KO(s, i, p, u, c, a), n; } -var KO = { kernelName: wn, backendName: "wasm", kernelFunc: $oe, setupFunc: _oe }; -var qO = he(Sn); +var qO = { kernelName: Cn, backendName: "wasm", kernelFunc: $oe, setupFunc: _oe }; +var jO = he(wn); var Eoe = false; -var jO = Ue(In, Eoe); -var XO; -function Roe(r) { - XO = r.wasm.cwrap(vn, null, ["number", "number", "number", "number", "number", "number", "number"]); +var XO = Ue(Sn, Eoe); +var YO; +function Roe(r15) { + YO = r15.wasm.cwrap(In, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function Doe(r) { - let { backend: t8, inputs: e, attrs: o } = r, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = e, c = t8.dataIdMap.get(s.dataId).id, l = t8.dataIdMap.get(a.dataId).id, m = t8.dataIdMap.get(i.dataId).id, d = p != null ? t8.dataIdMap.get(p.dataId).id : 0, f = u != null ? t8.dataIdMap.get(u.dataId).id : 0, h = t8.makeOutput(s.shape, s.dtype); +function Doe(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = e, c = t8.dataIdMap.get(s.dataId).id, l = t8.dataIdMap.get(a.dataId).id, m = t8.dataIdMap.get(i.dataId).id, d = p != null ? t8.dataIdMap.get(p.dataId).id : 0, f = u != null ? t8.dataIdMap.get(u.dataId).id : 0, h = t8.makeOutput(s.shape, s.dtype); if (y.sizeFromShape(s.shape) === 0) return h; let g = t8.dataIdMap.get(h.dataId).id; - return XO(c, l, m, d, f, n, g), h; + return YO(c, l, m, d, f, n, g), h; } -var YO = { kernelName: vn, backendName: "wasm", setupFunc: Roe, kernelFunc: Doe }; -var QO; -function Aoe(r) { - QO = 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"]); +var QO = { kernelName: In, backendName: "wasm", setupFunc: Roe, kernelFunc: Doe }; +var ZO; +function Aoe(r15) { + ZO = r15.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 Foe(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = e, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = ku[d]; +function Foe(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = e, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = bu[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; @@ -25512,15 +25515,15 @@ function Foe(r) { 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 QO(x, j, q, Y, b, k, _, S, E, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; + return ZO(x, j, q, Y, b, k, _, S, E, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } -var ZO = { kernelName: vo, backendName: "wasm", setupFunc: Aoe, kernelFunc: Foe }; -var JO; -function Poe(r) { - JO = r.wasm.cwrap(ko, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var JO = { kernelName: Io, backendName: "wasm", setupFunc: Aoe, kernelFunc: Foe }; +var eM; +function Poe(r15) { + eM = r15.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 Ooe(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = e, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = ku[d]; +function Ooe(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = e, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = bu[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; @@ -25536,110 +25539,110 @@ function Ooe(r) { 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 JO(x, j, q, Y, b, k, _, S, E, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; + return eM(x, j, q, Y, b, k, _, S, E, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } -var eM = { kernelName: ko, backendName: "wasm", setupFunc: Poe, kernelFunc: Ooe }; -var tM; -function Moe(r) { - tM = r.wasm.cwrap(kn, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); +var tM = { kernelName: vo, backendName: "wasm", setupFunc: Poe, kernelFunc: Ooe }; +var rM; +function Moe(r15) { + rM = r15.wasm.cwrap(vn, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); } -function Loe(r) { - let { backend: t8, inputs: e } = r, { params: o, indices: n } = e, [s, a, i, p] = af.prepareAndValidate(o, n), u = t8.makeOutput(s, o.dtype); +function Loe(r15) { + let { backend: t8, inputs: e } = r15, { params: o, indices: n } = e, [s, a, i, p] = sf.prepareAndValidate(o, n), u = t8.makeOutput(s, o.dtype); if (a === 0) return u; let c = n.shape, l = c[c.length - 1], d = t8.dataIdMap.get(o.dataId).id, h = t8.dataIdMap.get(n.dataId).id, g = new Uint8Array(new Int32Array(p).buffer), x = t8.dataIdMap.get(u.dataId).id; - return tM(d, we[o.dtype], h, a, l, i, g, x), u; + return rM(d, we[o.dtype], h, a, l, i, g, x), u; } -var rM = { kernelName: kn, backendName: "wasm", setupFunc: Moe, kernelFunc: Loe }; -var oM; -function Boe(r) { - oM = r.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); +var oM = { kernelName: vn, backendName: "wasm", setupFunc: Moe, kernelFunc: Loe }; +var nM; +function Boe(r15) { + nM = r15.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); } -function zoe(r) { - let { backend: t8, inputs: e, attrs: o } = r, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = t8.readSync(s.dataId), c = n.shape[p]; +function zoe(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = t8.readSync(s.dataId), c = n.shape[p]; for (let D = 0; D < u.length; ++D) { let P = u[D]; 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 = Vt({ inputs: { x: n }, attrs: { shape: [l.batchSize, l.outerSize, l.dimSize, l.sliceSize] }, backend: t8 }), d = y.sizeFromShape(s.shape), f = Vt({ inputs: { x: s }, attrs: { shape: [l.batchSize, d / l.batchSize] }, backend: t8 }), h = [l.batchSize, l.outerSize, d / l.batchSize, l.sliceSize], g = t8.makeOutput(h, n.dtype); + 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: t8 }), d = y.sizeFromShape(s.shape), f = zt({ inputs: { x: s }, attrs: { shape: [l.batchSize, d / l.batchSize] }, backend: t8 }), h = [l.batchSize, l.outerSize, d / l.batchSize, l.sliceSize], g = t8.makeOutput(h, n.dtype); if (y.sizeFromShape(n.shape) === 0) return g; let x = m.shape.length - 1, C = t8.dataIdMap.get(m.dataId).id, k = t8.dataIdMap.get(f.dataId).id, _ = t8.dataIdMap.get(g.dataId).id, E = new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer), R = new Uint8Array(new Int32Array(y.computeStrides(h)).buffer); - return oM(C, we[n.dtype], E, x, k, l.batchSize, R, _), t8.disposeData(m.dataId), t8.disposeData(f.dataId), g.shape = l.outputShape, g; + return nM(C, we[n.dtype], E, x, k, l.batchSize, R, _), t8.disposeData(m.dataId), t8.disposeData(f.dataId), g.shape = l.outputShape, g; } -var nM = { kernelName: aa, backendName: "wasm", setupFunc: Boe, kernelFunc: zoe }; +var sM = { kernelName: aa, backendName: "wasm", setupFunc: Boe, kernelFunc: zoe }; var Voe = false; -var sM = Ue(Nn, Voe, "bool"); +var aM = Ue(kn, Voe, "bool"); var Woe = false; -var aM = Ue(Tn, Woe, "bool"); -var iM = he(_n, "bool"); -var uM = he($n, "bool"); -var pM = he(En, "bool"); -var cM; -function Uoe(r) { - cM = r.wasm.cwrap(Rn, null, ["number", "number", "number", "number"]); +var iM = Ue(Nn, Woe, "bool"); +var uM = he(Tn, "bool"); +var pM = he(_n, "bool"); +var cM = he($n, "bool"); +var lM; +function Uoe(r15) { + lM = r15.wasm.cwrap(En, null, ["number", "number", "number", "number"]); } -function Goe(r) { - let { inputs: { x: t8 }, attrs: { alpha: e }, backend: o } = r, n = o.dataIdMap.get(t8.dataId).id, s = o.makeOutput(t8.shape, "float32"); +function Goe(r15) { + let { inputs: { x: t8 }, attrs: { alpha: e }, backend: o } = r15, n = o.dataIdMap.get(t8.dataId).id, s = o.makeOutput(t8.shape, "float32"); if (y.sizeFromShape(t8.shape) !== 0) { let a = o.dataIdMap.get(s.dataId).id; - cM(n, we[t8.dtype], e, a); + lM(n, we[t8.dtype], e, a); } return s; } -var lM = { kernelName: Rn, backendName: "wasm", setupFunc: Uoe, kernelFunc: Goe }; +var mM = { kernelName: En, backendName: "wasm", setupFunc: Uoe, kernelFunc: Goe }; var Hoe = false; -var mM = Ue(Dn, Hoe, "bool"); +var dM = Ue(Rn, Hoe, "bool"); var Koe = false; -var dM = Ue(An, Koe, "bool"); -var fM; -function qoe(r) { - fM = r.wasm.cwrap(Fn, null, ["number", "number", "number", "number"]); +var fM = Ue(Dn, Koe, "bool"); +var hM; +function qoe(r15) { + hM = r15.wasm.cwrap(An, null, ["number", "number", "number", "number"]); } -function joe(r) { - let { attrs: t8, backend: e } = r, { start: o, stop: n, num: s } = t8, a = Math.floor(s), i = e.makeOutput([a], "float32"); - return fM(e.dataIdMap.get(i.dataId).id, o, n, a), i; +function joe(r15) { + let { attrs: t8, backend: e } = r15, { start: o, stop: n, num: s } = t8, a = Math.floor(s), i = e.makeOutput([a], "float32"); + return hM(e.dataIdMap.get(i.dataId).id, o, n, a), i; } -var hM = { kernelName: Fn, backendName: "wasm", setupFunc: qoe, kernelFunc: joe }; -var gM = he(Pn); -var xM = he(On); +var gM = { kernelName: An, backendName: "wasm", setupFunc: qoe, kernelFunc: joe }; +var xM = he(Fn); +var yM = he(Pn); var Xoe = false; -var yM = Ue(Mn, Xoe, "bool"); -var bM = he(Ln); +var bM = Ue(On, Xoe, "bool"); +var CM = he(Mn); var Yoe = false; -var CM = Ue(Bn, Yoe, "bool"); +var wM = Ue(Ln, Yoe, "bool"); var Qoe = false; -var wM = Ue($0, Qoe, "bool"); -var SM; -function Zoe(r) { - SM = r.wasm.cwrap(zn, null, ["number", "number", "number", "number", "number", "number", "number"]); +var SM = Ue(E0, Qoe, "bool"); +var IM; +function Zoe(r15) { + IM = r15.wasm.cwrap(Bn, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function Joe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o; +function Joe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.makeOutput(n.shape, n.dtype); - return SM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(u.dataId).id, n.shape[3], s, a, i, p), u; + return IM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(u.dataId).id, n.shape[3], s, a, i, p), u; } -var IM = { kernelName: zn, backendName: "wasm", setupFunc: Zoe, kernelFunc: Joe }; -var vM; -function ene(r) { - vM = r.wasm.cwrap(Qa, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var vM = { kernelName: Bn, backendName: "wasm", setupFunc: Zoe, kernelFunc: Joe }; +var kM; +function ene(r15) { + kM = r15.wasm.cwrap(Ya, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function tne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o; +function tne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, y: s, dy: a } = t8, { 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 = e.makeOutput(n.shape, n.dtype); - return vM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.dataIdMap.get(l.dataId).id, a.shape[3], i, p, u, c), l; + return kM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(a.dataId).id, e.dataIdMap.get(l.dataId).id, a.shape[3], i, p, u, c), l; } -var kM = { kernelName: Qa, backendName: "wasm", setupFunc: ene, kernelFunc: tne }; -var NM; -function rne(r) { - NM = r.wasm.cwrap(Vn, null, ["number", "number", "number", "number"]); +var NM = { kernelName: Ya, backendName: "wasm", setupFunc: ene, kernelFunc: tne }; +var TM; +function rne(r15) { + TM = r15.wasm.cwrap(zn, null, ["number", "number", "number", "number"]); } -function one(r) { - let { backend: t8, inputs: e, attrs: o } = r, { reductionIndices: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8); +function one(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { reductionIndices: n, keepDims: s } = o, { x: a } = e, p = t8.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8); if (d) { let C = t8.dataIdMap.get(c.dataId).id; u = c, p = C; @@ -25649,7 +25652,7 @@ function one(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = t8.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - NM(p, we[a.dtype], x, C); + TM(p, we[a.dtype], x, C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -25657,80 +25660,80 @@ function one(r) { } return b; } -var TM = { kernelName: Vn, backendName: "wasm", setupFunc: rne, kernelFunc: one }; +var _M = { kernelName: zn, backendName: "wasm", setupFunc: rne, kernelFunc: one }; var nne = false; -var _M = Ue(Wn, nne); -var $M; -function sne(r) { - $M = r.wasm.cwrap(Un, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var $M = Ue(Vn, nne); +var EM; +function sne(r15) { + EM = r15.wasm.cwrap(Wn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function ane(r) { - let { inputs: t8, attrs: e, backend: o } = r, n = t8.x, s = o.dataIdMap.get(n.dataId).id; +function ane(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, n = t8.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 } = e, 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 E = o.makeOutput(c.outShape, "float32"), R = o.dataIdMap.get(E.dataId).id; - return $M(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, S, k, _, R), E; + return EM(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, S, k, _, R), E; } -var EM = { kernelName: Un, backendName: "wasm", setupFunc: sne, kernelFunc: ane }; -var RM; -function ine(r) { - RM = 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"]); +var RM = { kernelName: Wn, backendName: "wasm", setupFunc: sne, kernelFunc: ane }; +var DM; +function ine(r15) { + DM = r15.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 une(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.makeOutput(c.outShape, n.dtype); - return RM(e.dataIdMap.get(n.dataId).id, e.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; +function une(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = e.makeOutput(c.outShape, n.dtype); + return DM(e.dataIdMap.get(n.dataId).id, e.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 DM = { kernelName: ia, backendName: "wasm", setupFunc: ine, kernelFunc: une }; -var AM; -function pne(r) { - AM = 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"]); +var AM = { kernelName: ia, backendName: "wasm", setupFunc: ine, kernelFunc: une }; +var FM; +function pne(r15) { + FM = r15.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 cne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); - return AM(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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; +function cne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); + return FM(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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 FM = { kernelName: Ki, backendName: "wasm", setupFunc: pne, kernelFunc: cne }; -var PM; -function lne(r) { - PM = r.wasm.cwrap("MaxPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var PM = { kernelName: Ui, backendName: "wasm", setupFunc: pne, kernelFunc: cne }; +var OM; +function lne(r15) { + OM = r15.wasm.cwrap("MaxPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function mne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool2DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); - return PM(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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; +function mne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool2DInfo(s.shape, a, i, 1, p, u), l = e.makeOutput(s.shape, s.dtype); + return OM(e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(n.dataId).id, e.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 OM = { kernelName: Hi, backendName: "wasm", setupFunc: lne, kernelFunc: mne }; -var MM; -function dne(r) { - MM = r.wasm.cwrap("MaxPoolWithArgmax", null, ["number", "number", "number", "number", "boolean", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var MM = { kernelName: Wi, backendName: "wasm", setupFunc: lne, kernelFunc: mne }; +var LM; +function dne(r15) { + LM = r15.wasm.cwrap("MaxPoolWithArgmax", null, ["number", "number", "number", "number", "boolean", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function fne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, includeBatchInIndex: p } = o; +function fne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 = e.makeOutput(c.outShape, n.dtype), m = e.makeOutput(c.outShape, "int32"); - return MM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(l.dataId).id, e.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]; + return LM(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(l.dataId).id, e.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 LM = { kernelName: ua, backendName: "wasm", setupFunc: dne, kernelFunc: fne }; -var BM; -function hne(r) { - BM = r.wasm.cwrap(Gn, null, ["number, number, number"]); +var BM = { kernelName: ua, backendName: "wasm", setupFunc: dne, kernelFunc: fne }; +var zM; +function hne(r15) { + zM = r15.wasm.cwrap(Un, null, ["number, number, number"]); } -function gne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8), f = l; +function gne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8), f = l; if (d) { let S = t8.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: t8, inputs: { x: u }, attrs: { dtype: "float32" } }), p = t8.dataIdMap.get(b.dataId).id); + u.dtype !== "float32" && (b = Or({ backend: t8, inputs: { x: u }, attrs: { dtype: "float32" } }), p = t8.dataIdMap.get(b.dataId).id); let C = t8.makeOutput(h, "float32"); if (y.sizeFromShape(u.shape) !== 0) { let S = t8.dataIdMap.get(C.dataId).id; - BM(p, x, S); + zM(p, x, S); } if (d && t8.disposeData(c.dataId), s) { let S = w.expandShapeToKeepDim(C.shape, m); @@ -25738,13 +25741,13 @@ function gne(r) { } return u.dtype !== "float32" && t8.disposeData(b.dataId), C; } -var zM = { kernelName: Gn, backendName: "wasm", setupFunc: hne, kernelFunc: gne }; -var VM; -function xne(r) { - VM = r.wasm.cwrap(Hn, null, ["number", "number", "number", "number"]); +var VM = { kernelName: Un, backendName: "wasm", setupFunc: hne, kernelFunc: gne }; +var WM; +function xne(r15) { + WM = r15.wasm.cwrap(Gn, null, ["number", "number", "number", "number"]); } -function yne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8); +function yne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8); if (d) { let C = t8.dataIdMap.get(c.dataId).id; C !== i && (u = c, p = C); @@ -25754,7 +25757,7 @@ function yne(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = t8.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - VM(p, we[a.dtype], x, C); + WM(p, we[a.dtype], x, C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -25762,144 +25765,144 @@ function yne(r) { } return b; } -var WM = { kernelName: Hn, backendName: "wasm", setupFunc: xne, kernelFunc: yne }; +var UM = { kernelName: Gn, backendName: "wasm", setupFunc: xne, kernelFunc: yne }; var bne = false; -var UM = Ue(Kn, bne); -var Ov; -(function(r) { - r[r.reflect = 0] = "reflect", r[r.symmetric = 1] = "symmetric"; -})(Ov || (Ov = {})); -var GM; -function Cne(r) { - GM = r.wasm.cwrap(qn, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +var GM = Ue(Hn, bne); +var Mv; +(function(r15) { + r15[r15.reflect = 0] = "reflect", r15[r15.symmetric = 1] = "symmetric"; +})(Mv || (Mv = {})); +var HM; +function Cne(r15) { + HM = r15.wasm.cwrap(Kn, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); } -function wne(r) { - let { inputs: { x: t8 }, backend: e, attrs: { paddings: o, mode: n } } = r, s = o.map((f, h) => f[0] + t8.shape[h] + f[1]), a = e.dataIdMap.get(t8.dataId).id, i = e.makeOutput(s, t8.dtype), p = e.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(t8.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 GM(a, u, t8.shape.length, we[t8.dtype], m, d, Ov[n], p), i; +function wne(r15) { + let { inputs: { x: t8 }, backend: e, attrs: { paddings: o, mode: n } } = r15, s = o.map((f, h) => f[0] + t8.shape[h] + f[1]), a = e.dataIdMap.get(t8.dataId).id, i = e.makeOutput(s, t8.dtype), p = e.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(t8.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 HM(a, u, t8.shape.length, we[t8.dtype], m, d, Mv[n], p), i; } -var HM = { kernelName: qn, backendName: "wasm", kernelFunc: wne, setupFunc: Cne }; -var KM; -function Sne(r) { - KM = r.wasm.cwrap(vs, null, ["number", "number", "number", "number"]); +var KM = { kernelName: Kn, backendName: "wasm", kernelFunc: wne, setupFunc: Cne }; +var qM; +function Sne(r15) { + qM = r15.wasm.cwrap(Is, null, ["number", "number", "number", "number"]); } -function Mv(r) { - let { backend: t8, inputs: { logits: e }, attrs: { dim: o } } = r, n = t8.dataIdMap.get(e.dataId).id, s = t8.makeOutput(e.shape, e.dtype), a = t8.dataIdMap.get(s.dataId).id, i = e.shape[o], p = y.sizeFromShape(e.shape) / i; - return y.sizeFromShape(s.shape) === 0 || KM(n, a, i, p), s; +function Lv(r15) { + let { backend: t8, inputs: { logits: e }, attrs: { dim: o } } = r15, n = t8.dataIdMap.get(e.dataId).id, s = t8.makeOutput(e.shape, e.dtype), a = t8.dataIdMap.get(s.dataId).id, i = e.shape[o], p = y.sizeFromShape(e.shape) / i; + return y.sizeFromShape(s.shape) === 0 || qM(n, a, i, p), s; } -var qM = { kernelName: vs, backendName: "wasm", setupFunc: Sne, kernelFunc: Mv }; -var jM; -function Ine(r) { - jM = r.wasm.cwrap(Xn, null, ["number", "number", "number", "number", "number", "number"]); +var jM = { kernelName: Is, backendName: "wasm", setupFunc: Sne, kernelFunc: Lv }; +var XM; +function Ine(r15) { + XM = r15.wasm.cwrap(jn, null, ["number", "number", "number", "number", "number", "number"]); } -function vne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o; +function vne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { 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 : Mv({ inputs: { logits: n }, backend: e, attrs: { dim: n.shape.length - 1 } }), [u, c] = p.shape, l = e.makeOutput([u, s], "int32"); - return jM(e.dataIdMap.get(p.dataId).id, u, c, s, a, e.dataIdMap.get(l.dataId).id), i || e.disposeData(p.dataId), l; + let p = i ? n : Lv({ inputs: { logits: n }, backend: e, attrs: { dim: n.shape.length - 1 } }), [u, c] = p.shape, l = e.makeOutput([u, s], "int32"); + return XM(e.dataIdMap.get(p.dataId).id, u, c, s, a, e.dataIdMap.get(l.dataId).id), i || e.disposeData(p.dataId), l; } -var XM = { kernelName: Xn, backendName: "wasm", setupFunc: Ine, kernelFunc: vne }; -var YM = Ue(jn, true); +var YM = { kernelName: jn, backendName: "wasm", setupFunc: Ine, kernelFunc: vne }; +var QM = Ue(qn, true); var kne = true; -var QM = Ue(Yn, kne); -var ZM = he(pa); -function Yc(r, t8) { - let e = new Int32Array(r.wasm.HEAPU8.buffer, t8, 4), o = e[0], n = e[1], s = e[2], a = e[3]; - return r.wasm._free(t8), { pSelectedIndices: o, selectedSize: n, pSelectedScores: s, pValidOutputs: a }; +var ZM = Ue(Xn, kne); +var JM = he(pa); +function Hc(r15, t8) { + let e = new Int32Array(r15.wasm.HEAPU8.buffer, t8, 4), o = e[0], n = e[1], s = e[2], a = e[3]; + return r15.wasm._free(t8), { pSelectedIndices: o, selectedSize: n, pSelectedScores: s, pValidOutputs: a }; } -var JM; -function Nne(r) { - JM = r.wasm.cwrap(Zn, "number", ["number", "number", "number", "number", "number"]); +var eL; +function Nne(r15) { + eL = r15.wasm.cwrap(Qn, "number", ["number", "number", "number", "number", "number"]); } -function Tne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = e, u = t8.dataIdMap.get(i.dataId).id, c = t8.dataIdMap.get(p.dataId).id, l = JM(u, c, s, n, a), { pSelectedIndices: m, selectedSize: d, pSelectedScores: f, pValidOutputs: h } = Yc(t8, l); +function Tne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = e, u = t8.dataIdMap.get(i.dataId).id, c = t8.dataIdMap.get(p.dataId).id, l = eL(u, c, s, n, a), { pSelectedIndices: m, selectedSize: d, pSelectedScores: f, pValidOutputs: h } = Hc(t8, l); return t8.wasm._free(f), t8.wasm._free(h), t8.makeOutput([d], "int32", m); } -var eL = { kernelName: Zn, backendName: "wasm", setupFunc: Nne, kernelFunc: Tne }; -var tL; -function _ne(r) { - tL = r.wasm.cwrap(Za, "number", ["number", "number", "number", "number", "number", "bool"]); +var tL = { kernelName: Qn, backendName: "wasm", setupFunc: Nne, kernelFunc: Tne }; +var rL; +function _ne(r15) { + rL = r15.wasm.cwrap(Qa, "number", ["number", "number", "number", "number", "number", "bool"]); } -function $ne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = e, c = t8.dataIdMap.get(p.dataId).id, l = t8.dataIdMap.get(u.dataId).id, m = tL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Yc(t8, m); +function $ne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = e, c = t8.dataIdMap.get(p.dataId).id, l = t8.dataIdMap.get(u.dataId).id, m = rL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Hc(t8, m); t8.wasm._free(h); let x = t8.makeOutput([f], "int32", d), b = t8.makeOutput([], "int32", g); return [x, b]; } -var rL = { kernelName: Za, backendName: "wasm", setupFunc: _ne, kernelFunc: $ne }; -var oL; -function Ene(r) { - oL = r.wasm.cwrap(Jn, "number", ["number", "number", "number", "number", "number", "number"]); +var oL = { kernelName: Qa, backendName: "wasm", setupFunc: _ne, kernelFunc: $ne }; +var nL; +function Ene(r15) { + nL = r15.wasm.cwrap(Zn, "number", ["number", "number", "number", "number", "number", "number"]); } -function Rne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = e, c = t8.dataIdMap.get(p.dataId).id, l = t8.dataIdMap.get(u.dataId).id, m = oL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Yc(t8, m); +function Rne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = e, c = t8.dataIdMap.get(p.dataId).id, l = t8.dataIdMap.get(u.dataId).id, m = nL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Hc(t8, m); t8.wasm._free(g); let x = t8.makeOutput([f], "int32", d), b = t8.makeOutput([f], "float32", h); return [x, b]; } -var nL = { kernelName: Jn, backendName: "wasm", setupFunc: Ene, kernelFunc: Rne }; +var sL = { kernelName: Zn, backendName: "wasm", setupFunc: Ene, kernelFunc: Rne }; var Dne = false; -var sL = Ue(Qn, Dne, "bool"); -var aL; -function Ane(r) { - aL = r.wasm.cwrap(es, null, ["number", "number", "number", "number", "number"]); +var aL = Ue(Yn, Dne, "bool"); +var iL; +function Ane(r15) { + iL = r15.wasm.cwrap(Jn, null, ["number", "number", "number", "number", "number"]); } -function Fne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n } = t8, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = e.makeOutput([...n.shape, a], s), c = e.dataIdMap.get(u.dataId).id, m = e.dataIdMap.get(n.dataId).id; - return aL(m, a, i, p, c), u; +function Fne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n } = t8, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = e.makeOutput([...n.shape, a], s), c = e.dataIdMap.get(u.dataId).id, m = e.dataIdMap.get(n.dataId).id; + return iL(m, a, i, p, c), u; } -var iL = { kernelName: es, backendName: "wasm", setupFunc: Ane, kernelFunc: Fne }; -function Pne(r) { - let { inputs: { x: t8 }, backend: e } = r, o = e.makeOutput(t8.shape, t8.dtype); +var uL = { kernelName: Jn, backendName: "wasm", setupFunc: Ane, kernelFunc: Fne }; +function Pne(r15) { + let { inputs: { x: t8 }, backend: e } = r15, o = e.makeOutput(t8.shape, t8.dtype); return e.typedArrayFromHeap(o).fill(1), o; } -var uL = { kernelName: ca, backendName: "wasm", kernelFunc: Pne }; -function One(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o; +var pL = { kernelName: ca, backendName: "wasm", kernelFunc: Pne }; +function One(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o; if (t8.length === 1) - return Lg({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); + return Mg({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); let s = t8[0].shape, a = t8[0].dtype; t8.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 = t8.map((c) => { - let l = Lg({ inputs: { input: c }, backend: e, attrs: { dim: n } }); + let l = Mg({ inputs: { input: c }, backend: e, attrs: { dim: n } }); return i.push(l), l; - }), u = Av({ inputs: p, backend: e, attrs: { axis: n } }); + }), u = Fv({ inputs: p, backend: e, attrs: { axis: n } }); return i.forEach((c) => e.disposeData(c.dataId)), u; } -var pL = { kernelName: la, backendName: "wasm", kernelFunc: One }; -var cL; -function Mne(r) { - cL = r.wasm.cwrap(ts, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +var cL = { kernelName: la, backendName: "wasm", kernelFunc: One }; +var lL; +function Mne(r15) { + lL = r15.wasm.cwrap(es, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); } -function Lne(r) { - let { inputs: { x: t8 }, backend: e, attrs: { paddings: o, constantValue: n } } = r, s = o.map((h, g) => h[0] + t8.shape[g] + h[1]); +function Lne(r15) { + let { inputs: { x: t8 }, backend: e, attrs: { paddings: o, constantValue: n } } = r15, s = o.map((h, g) => h[0] + t8.shape[g] + h[1]); if (y.sizeFromShape(t8.shape) === 0) - return Pv({ backend: e, attrs: { shape: s, value: n, dtype: t8.dtype } }); + return Ov({ backend: e, attrs: { shape: s, value: n, dtype: t8.dtype } }); let a = e.dataIdMap.get(t8.dataId).id, i = e.makeOutput(s, t8.dtype), u = e.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(t8.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 cL(a, c, t8.shape.length, we[t8.dtype], d, f, n, u), i; + return lL(a, c, t8.shape.length, we[t8.dtype], d, f, n, u), i; } -var Bg = { kernelName: ts, backendName: "wasm", kernelFunc: Lne, setupFunc: Mne }; +var Lg = { kernelName: es, backendName: "wasm", kernelFunc: Lne, setupFunc: Mne }; var Bne = false; -var lL = Ue(rs, Bne); -var mL; -function zne(r) { - mL = r.wasm.cwrap(os, null, ["number", "number", "number"]); +var mL = Ue(ts, Bne); +var dL; +function zne(r15) { + dL = r15.wasm.cwrap(rs, null, ["number", "number", "number"]); } -function Vne(r) { - let { inputs: t8, backend: e } = r, { x: o, alpha: n } = t8, s = e.dataIdMap.get(o.dataId).id, a = e.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; - p.dtype !== "float32" && (u = Mr({ backend: e, inputs: { x: o }, attrs: { dtype: "float32" } }), i = e.dataIdMap.get(u.dataId).id); +function Vne(r15) { + let { inputs: t8, backend: e } = r15, { x: o, alpha: n } = t8, s = e.dataIdMap.get(o.dataId).id, a = e.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; + p.dtype !== "float32" && (u = Or({ backend: e, inputs: { x: o }, attrs: { dtype: "float32" } }), i = e.dataIdMap.get(u.dataId).id); let c = e.makeOutput(o.shape, "float32"), l = e.dataIdMap.get(c.dataId).id; - return mL(i, a, l), p.dtype !== "float32" && e.disposeData(u.dataId), c; + return dL(i, a, l), p.dtype !== "float32" && e.disposeData(u.dataId), c; } -var dL = { kernelName: os, backendName: "wasm", setupFunc: zne, kernelFunc: Vne }; -var fL; -function Wne(r) { - fL = r.wasm.cwrap(ns, null, ["number", "number", "number", "number"]); +var fL = { kernelName: rs, backendName: "wasm", setupFunc: zne, kernelFunc: Vne }; +var hL; +function Wne(r15) { + hL = r15.wasm.cwrap(os, null, ["number", "number", "number", "number"]); } -function Une(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8), f = l; +function Une(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8), f = l; if (d) { let C = t8.dataIdMap.get(c.dataId).id; C !== i && (u = c, p = C, f = w.getInnerMostAxes(f.length, u.shape.length)); @@ -25908,7 +25911,7 @@ function Une(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = t8.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - fL(p, x, we[b.dtype], C); + hL(p, x, we[b.dtype], C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -25916,153 +25919,153 @@ function Une(r) { } return b; } -var hL = { kernelName: ns, backendName: "wasm", setupFunc: Wne, kernelFunc: Une }; -var Gne = (r) => { - let { backend: t8, attrs: e } = r, { start: o, stop: n, step: s, dtype: a } = e, i = fp(o, n, s, a), p = t8.makeOutput([i.length], a); +var gL = { kernelName: os, backendName: "wasm", setupFunc: Wne, kernelFunc: Une }; +var Gne = (r15) => { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, step: s, dtype: a } = e, i = ap(o, n, s, a), p = t8.makeOutput([i.length], a); return t8.typedArrayFromHeap(p).set(i), p; }; -var gL = { kernelName: ma, backendName: "wasm", kernelFunc: Gne }; +var xL = { kernelName: ma, backendName: "wasm", kernelFunc: Gne }; var Hne = true; -var xL = Ue(hn, Hne); -var yL = he(ss); -var bL = he(as); -var CL = he(ps); -var wL; -function Kne(r) { - wL = r.wasm.cwrap(us, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var yL = Ue(fn, Hne); +var bL = he(ns); +var CL = he(ss); +var wL = he(us); +var SL; +function Kne(r15) { + SL = r15.wasm.cwrap(is, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function qne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = t8.dataIdMap.get(n.dataId), g; - h.dtype !== "float32" && (g = Mr({ backend: t8, inputs: { x: n }, attrs: { dtype: "float32" } }), h = t8.dataIdMap.get(g.dataId)); +function qne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = t8.dataIdMap.get(n.dataId), g; + h.dtype !== "float32" && (g = Or({ backend: t8, inputs: { x: n }, attrs: { dtype: "float32" } }), h = t8.dataIdMap.get(g.dataId)); let x = h.id, b = t8.makeOutput(f, "float32"); if (y.sizeFromShape(n.shape) === 0) return b; let C = t8.dataIdMap.get(b.dataId).id; - return wL(x, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && t8.disposeData(g.dataId), b; + return SL(x, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && t8.disposeData(g.dataId), b; } -var SL = { kernelName: us, backendName: "wasm", setupFunc: Kne, kernelFunc: qne }; -var IL; -function jne(r) { - IL = r.wasm.cwrap(ei, null, ["number", "number", "number", "array", "array", "boolean"]); +var IL = { kernelName: is, backendName: "wasm", setupFunc: Kne, kernelFunc: qne }; +var vL; +function jne(r15) { + vL = r15.wasm.cwrap(Ja, null, ["number", "number", "number", "array", "array", "boolean"]); } -function Xne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o, i = e.makeOutput(n.shape, "float32"), p = e.dataIdMap.get(n.dataId), u; - return p.dtype !== "float32" && (u = Mr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(u.dataId)), IL(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && e.disposeData(u.dataId), i; +function Xne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { alignCorners: a } = o, i = e.makeOutput(n.shape, "float32"), p = e.dataIdMap.get(n.dataId), u; + return p.dtype !== "float32" && (u = Or({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(u.dataId)), vL(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && e.disposeData(u.dataId), i; } -var vL = { kernelName: ei, backendName: "wasm", setupFunc: jne, kernelFunc: Xne }; -var kL; -function Yne(r) { - kL = r.wasm.cwrap(is, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var kL = { kernelName: Ja, backendName: "wasm", setupFunc: jne, kernelFunc: Xne }; +var NL; +function Yne(r15) { + NL = r15.wasm.cwrap(as, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Qne(r) { - let { backend: t8, inputs: e, attrs: o } = r, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = t8.makeOutput(f, "float32"); +function Qne(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = t8.makeOutput(f, "float32"); if (y.sizeFromShape(n.shape) === 0) return h; let g = t8.dataIdMap.get(n.dataId), x; - g.dtype !== "float32" && (x = Mr({ backend: t8, inputs: { x: n }, attrs: { dtype: "float32" } }), g = t8.dataIdMap.get(x.dataId)); + g.dtype !== "float32" && (x = Or({ backend: t8, inputs: { x: n }, attrs: { dtype: "float32" } }), g = t8.dataIdMap.get(x.dataId)); let b = g.id, C = t8.dataIdMap.get(h.dataId).id; - return kL(b, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), x != null && t8.disposeData(x.dataId), h; + return NL(b, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), x != null && t8.disposeData(x.dataId), h; } -var NL = { kernelName: is, backendName: "wasm", setupFunc: Yne, kernelFunc: Qne }; -var TL; -function Zne(r) { - TL = r.wasm.cwrap(Ja, null, ["number", "number", "number", "array", "array", "boolean"]); +var TL = { kernelName: as, backendName: "wasm", setupFunc: Yne, kernelFunc: Qne }; +var _L; +function Zne(r15) { + _L = r15.wasm.cwrap(Za, null, ["number", "number", "number", "array", "array", "boolean"]); } -function Jne(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { alignCorners: a } = o, i = e.makeOutput(n.shape, "float32"), p = e.dataIdMap.get(n.dataId), u; - return p.dtype !== "float32" && (u = Mr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(u.dataId)), TL(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && e.disposeData(u.dataId), i; +function Jne(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { alignCorners: a } = o, i = e.makeOutput(n.shape, "float32"), p = e.dataIdMap.get(n.dataId), u; + return p.dtype !== "float32" && (u = Or({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(u.dataId)), _L(e.dataIdMap.get(n.dataId).id, e.dataIdMap.get(s.dataId).id, e.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && e.disposeData(u.dataId), i; } -var _L = { kernelName: Ja, backendName: "wasm", setupFunc: Zne, kernelFunc: Jne }; -var $L; -function ese(r) { - $L = r.wasm.cwrap(cs, null, ["number", "array", "number", "array", "number", "number"]); +var $L = { kernelName: Za, backendName: "wasm", setupFunc: Zne, kernelFunc: Jne }; +var EL; +function ese(r15) { + EL = r15.wasm.cwrap(ps, null, ["number", "array", "number", "array", "number", "number"]); } -function tse(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dims: s } = o, a = y.parseAxisParam(s, n.shape); +function tse(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dims: s } = o, a = y.parseAxisParam(s, n.shape); if (n.shape.length === 0) - return Dp({ inputs: { x: n }, backend: e }); + return vp({ inputs: { x: n }, backend: e }); let i = e.makeOutput(n.shape, n.dtype), p = e.dataIdMap.get(n.dataId).id, u = e.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(a).buffer), l = new Uint8Array(new Int32Array(n.shape).buffer); - $L(p, c, a.length, l, n.shape.length, u); - let m = Vt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: e }); + EL(p, c, a.length, l, n.shape.length, u); + let m = zt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: e }); return e.disposeData(i.dataId), m; } -var EL = { kernelName: cs, backendName: "wasm", kernelFunc: tse, setupFunc: ese }; -var RL; -function rse(r) { - RL = r.wasm.cwrap(As, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var RL = { kernelName: ps, backendName: "wasm", kernelFunc: tse, setupFunc: ese }; +var DL; +function rse(r15) { + DL = r15.wasm.cwrap(Ds, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function ose(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n } = t8, { radians: s, fillValue: a, center: i } = o, p = e.makeOutput(n.shape, n.dtype), u = e.dataIdMap.get(n.dataId).id, c = e.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 RL(u, l, m, d, f, s, h, g, S, C.length, c), p; +function ose(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n } = t8, { radians: s, fillValue: a, center: i } = o, p = e.makeOutput(n.shape, n.dtype), u = e.dataIdMap.get(n.dataId).id, c = e.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 DL(u, l, m, d, f, s, h, g, S, C.length, c), p; } -var DL = { kernelName: As, backendName: "wasm", kernelFunc: ose, setupFunc: rse }; -var AL = he(ls); -var FL = he(ms); -var PL; -function nse(r) { - PL = r.wasm.cwrap(ds, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var AL = { kernelName: Ds, backendName: "wasm", kernelFunc: ose, setupFunc: rse }; +var FL = he(cs); +var PL = he(ls); +var OL; +function nse(r15) { + OL = r15.wasm.cwrap(ms, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function sse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { indices: n, updates: s } = e, { shape: a } = o, i = t8.makeOutput(a, s.dtype); +function sse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, i = t8.makeOutput(a, s.dtype); if (y.sizeFromShape(a) === 0) return i; - let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = hu.calculateShapes(s, n, a), f = t8.dataIdMap.get(n.dataId).id, g = t8.dataIdMap.get(s.dataId).id, x = new Uint8Array(new Int32Array(l).buffer), b = t8.dataIdMap.get(i.dataId).id; - return PL(f, g, we[s.dtype], p, u, c, x, m, b), i; + let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = lu.calculateShapes(s, n, a), f = t8.dataIdMap.get(n.dataId).id, g = t8.dataIdMap.get(s.dataId).id, x = new Uint8Array(new Int32Array(l).buffer), b = t8.dataIdMap.get(i.dataId).id; + return OL(f, g, we[s.dtype], p, u, c, x, m, b), i; } -var OL = { kernelName: ds, backendName: "wasm", setupFunc: nse, kernelFunc: sse }; -var ML; -function ase(r) { - ML = r.wasm.cwrap(hs, null, ["number", "number", "number", "number", "number", "number", "bool", "number"]); +var ML = { kernelName: ms, backendName: "wasm", setupFunc: nse, kernelFunc: sse }; +var LL; +function ase(r15) { + LL = r15.wasm.cwrap(fs, null, ["number", "number", "number", "number", "number", "number", "bool", "number"]); } -function ise(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sortedSequence: n, values: s } = t8, { side: a } = o; +function ise(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sortedSequence: n, values: s } = t8, { 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 = e.makeOutput(s.shape, "int32"); function p(u) { return e.dataIdMap.get(u.dataId).id; } - return ML(p(n), p(s), n.shape[0], n.shape[1], s.shape[1], we[n.dtype], a === "left", p(i)), i; + return LL(p(n), p(s), n.shape[0], n.shape[1], s.shape[1], we[n.dtype], a === "left", p(i)), i; } -var LL = { kernelName: hs, backendName: "wasm", setupFunc: ase, kernelFunc: ise }; -var BL; -function use(r) { - BL = r.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); +var BL = { kernelName: fs, backendName: "wasm", setupFunc: ase, kernelFunc: ise }; +var zL; +function use(r15) { + zL = r15.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); } -function pse(r) { - let { inputs: t8, backend: e } = r, { condition: o, t: n, e: s } = t8, a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = e.makeOutput(n.shape, n.dtype), c = e.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 BL(a, i, p, d, c), u; +function pse(r15) { + let { inputs: t8, backend: e } = r15, { condition: o, t: n, e: s } = t8, a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = e.makeOutput(n.shape, n.dtype), c = e.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 zL(a, i, p, d, c), u; } -var zL = { kernelName: fa, backendName: "wasm", kernelFunc: pse, setupFunc: use }; -var VL = he(gs); -var WL; -function cse(r) { - WL = r.wasm.cwrap(Cs, null, ["number", "number"]); +var VL = { kernelName: fa, backendName: "wasm", kernelFunc: pse, setupFunc: use }; +var WL = he(hs); +var UL; +function cse(r15) { + UL = r15.wasm.cwrap(bs, null, ["number", "number"]); } -function lse(r) { - let { backend: t8, inputs: { x: e } } = r, o = t8.dataIdMap.get(e.dataId).id, n = t8.makeOutput(e.shape, e.dtype), s = t8.dataIdMap.get(n.dataId).id; - return y.sizeFromShape(n.shape) === 0 || WL(o, s), n; +function lse(r15) { + let { backend: t8, inputs: { x: e } } = r15, o = t8.dataIdMap.get(e.dataId).id, n = t8.makeOutput(e.shape, e.dtype), s = t8.dataIdMap.get(n.dataId).id; + return y.sizeFromShape(n.shape) === 0 || UL(o, s), n; } -var UL = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: cse, kernelFunc: lse }; -var GL = he(bs); -var HL = he(xs); -var KL = he(ys); -var qL = he(ws); -function mse(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, paddings: a } = o, i = y.sizeFromShape(s), p = [[0, 0]]; +var GL = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: cse, kernelFunc: lse }; +var HL = he(ys); +var KL = he(gs); +var qL = he(xs); +var jL = he(Cs); +function mse(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { blockShape: s, paddings: a } = o, i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); - let u = Bg.kernelFunc({ inputs: { x: n }, backend: e, 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 = Vt({ inputs: { x: u }, backend: e, attrs: { shape: c } }), b = go({ inputs: { x: h }, backend: e, attrs: { perm: l } }), k = Vt({ inputs: { x: b }, backend: e, attrs: { shape: m } }); + let u = Lg.kernelFunc({ inputs: { x: n }, backend: e, 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: e, attrs: { shape: c } }), b = ho({ inputs: { x: h }, backend: e, attrs: { perm: l } }), k = zt({ inputs: { x: b }, backend: e, attrs: { shape: m } }); return e.disposeData(u.dataId), e.disposeData(h.dataId), e.disposeData(b.dataId), k; } -var jL = { kernelName: ga, backendName: "wasm", kernelFunc: mse }; -var XL; -function dse(r) { - XL = r.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var XL = { kernelName: ga, backendName: "wasm", kernelFunc: mse }; +var YL; +function dse(r15) { + YL = r15.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function fse(r) { - let { backend: t8, inputs: e } = r, { indices: o, values: n, denseShape: s, defaultValue: a } = e, i = o.shape[0], p = o.shape[1], u = t8.readSync(s.dataId)[0], c = [i + u, p], l = t8.dataIdMap.get(o.dataId).id, m = t8.dataIdMap.get(n.dataId).id, d = t8.dataIdMap.get(a.dataId).id, f = t8.makeOutput(c, o.dtype), h = t8.dataIdMap.get(f.dataId).id, g = t8.makeOutput(c.slice(0, 1), n.dtype), x = t8.dataIdMap.get(g.dataId).id, b = t8.makeOutput([u], "bool"), C = t8.dataIdMap.get(b.dataId).id, S = t8.makeOutput([i], o.dtype), k = t8.dataIdMap.get(S.dataId).id, _ = t8.makeOutput([4], "int32"), E = t8.dataIdMap.get(_.dataId).id, R = XL(l, m, we[n.dtype], i, u, p, d, h, x, C, k, E), D = t8.readSync(_.dataId), P; +function fse(r15) { + let { backend: t8, inputs: e } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = e, i = o.shape[0], p = o.shape[1], u = t8.readSync(s.dataId)[0], c = [i + u, p], l = t8.dataIdMap.get(o.dataId).id, m = t8.dataIdMap.get(n.dataId).id, d = t8.dataIdMap.get(a.dataId).id, f = t8.makeOutput(c, o.dtype), h = t8.dataIdMap.get(f.dataId).id, g = t8.makeOutput(c.slice(0, 1), n.dtype), x = t8.dataIdMap.get(g.dataId).id, b = t8.makeOutput([u], "bool"), C = t8.dataIdMap.get(b.dataId).id, S = t8.makeOutput([i], o.dtype), k = t8.dataIdMap.get(S.dataId).id, _ = t8.makeOutput([4], "int32"), E = t8.dataIdMap.get(_.dataId).id, R = YL(l, m, we[n.dtype], i, u, p, d, h, x, C, k, E), D = t8.readSync(_.dataId), P; switch (D[0]) { case 1: { P = w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(D[1]); @@ -26081,15 +26084,15 @@ function fse(r) { if (t8.disposeData(_.dataId), P) throw t8.disposeData(f.dataId), t8.disposeData(g.dataId), t8.disposeData(b.dataId), t8.disposeData(S.dataId), new Error(P); let O = f, M = g; - return R !== c[0] && (O = Oo({ inputs: { x: f }, attrs: { begin: 0, size: [R, p] }, backend: t8 }), M = Oo({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: t8 }), t8.disposeData(f.dataId), t8.disposeData(g.dataId)), [O, M, b, S]; + return R !== c[0] && (O = Po({ inputs: { x: f }, attrs: { begin: 0, size: [R, p] }, backend: t8 }), M = Po({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: t8 }), t8.disposeData(f.dataId), t8.disposeData(g.dataId)), [O, M, b, S]; } -var YL = { kernelName: ji, backendName: "wasm", setupFunc: dse, kernelFunc: fse }; -var QL; -function hse(r) { - QL = r.wasm.cwrap(ti, null, ["number", "number", "number", "number", "number", "number", "number"]); +var QL = { kernelName: Hi, backendName: "wasm", setupFunc: dse, kernelFunc: fse }; +var ZL; +function hse(r15) { + ZL = r15.wasm.cwrap(ei, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function gse(r) { - let { backend: t8, inputs: e } = r, { inputIndices: o, inputShape: n, newShape: s } = e; +function gse(r15) { + let { backend: t8, inputs: e } = 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}`); @@ -26099,7 +26102,7 @@ function gse(r) { if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); let a = t8.dataIdMap.get(o.dataId).id, i = t8.dataIdMap.get(n.dataId).id, p = t8.dataIdMap.get(s.dataId).id, u = o.shape[0], c = y.sizeFromShape(s.shape), l = t8.makeOutput([u, c], o.dtype), m = t8.dataIdMap.get(l.dataId).id, d = t8.makeOutput([c], s.dtype), f = t8.dataIdMap.get(d.dataId).id, h = t8.makeOutput([3], "int32"), g = t8.dataIdMap.get(h.dataId).id; - QL(a, i, p, u, m, f, g); + ZL(a, i, p, u, m, f, g); let x = t8.readSync(h.dataId), b; switch (x[0]) { case 0: { @@ -26130,19 +26133,19 @@ function gse(r) { throw t8.disposeData(l.dataId), t8.disposeData(d.dataId), new Error(b); return [l, d]; } -var ZL = { kernelName: ti, backendName: "wasm", setupFunc: hse, kernelFunc: gse }; -var JL; -function zg(r) { - JL = r.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var JL = { kernelName: ei, backendName: "wasm", setupFunc: hse, kernelFunc: gse }; +var eB; +function Bg(r15) { + eB = r15.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Vg(r, t8) { - let { backend: e, inputs: o } = r, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = e.readSync(a.dataId, i - 1, i)[0], c = i > 0 ? p + 1 : 0; +function zg(r15, t8) { + let { backend: e, inputs: o } = r15, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = e.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 = e.dataIdMap.get(n.dataId).id, d = e.dataIdMap.get(s.dataId).id, f = e.dataIdMap.get(a.dataId).id, h = e.makeOutput(l, n.dtype), g = e.dataIdMap.get(h.dataId).id, x = e.makeOutput([4], "int32"), b = e.dataIdMap.get(x.dataId).id; - JL(m, we[n.dtype], n.shape[0], d, f, g, b, t8, 0); + eB(m, we[n.dtype], n.shape[0], d, f, g, b, t8, 0); let C = e.readSync(x.dataId), S; switch (C[0]) { case 0: { @@ -26166,97 +26169,97 @@ function Vg(r, t8) { throw e.disposeData(h.dataId), new Error(S); return h; } -function xse(r) { - return Vg(r, true); +function xse(r15) { + return zg(r15, true); } -var eB = { kernelName: ya, backendName: "wasm", setupFunc: zg, kernelFunc: xse }; -function yse(r) { - return Vg(r, false); +var tB = { kernelName: ya, backendName: "wasm", setupFunc: Bg, kernelFunc: xse }; +function yse(r15) { + return zg(r15, false); } -var tB = { kernelName: ba, backendName: "wasm", setupFunc: zg, kernelFunc: yse }; -var rB; -function bse(r) { - rB = r.wasm.cwrap(ks, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var rB = { kernelName: ba, backendName: "wasm", setupFunc: Bg, kernelFunc: yse }; +var oB; +function bse(r15) { + oB = r15.wasm.cwrap(vs, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function Cse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, p = t8.makeOutput(i, a.dtype); +function Cse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, p = t8.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 = t8.dataIdMap.get(n.dataId).id, h = t8.dataIdMap.get(s.dataId).id, g = t8.dataIdMap.get(a.dataId).id, x = new Uint8Array(new Int32Array(m).buffer), b = t8.dataIdMap.get(p.dataId).id; - return rB(f, h, s.shape.length, g, we[a.dtype], u, c, l, x, d, b), p; + return oB(f, h, s.shape.length, g, we[a.dtype], u, c, l, x, d, b), p; } -var oB = { kernelName: ks, backendName: "wasm", setupFunc: bse, kernelFunc: Cse }; -function wse(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n } = t8, { numOrSizeSplits: s, axis: a } = e, 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(); +var nB = { kernelName: vs, backendName: "wasm", setupFunc: bse, kernelFunc: Cse }; +function wse(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n } = t8, { numOrSizeSplits: s, axis: a } = e, 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 = Oo({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); + let d = Po({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); return u[i] += l, d; }); } -var nB = { kernelName: xa, backendName: "wasm", kernelFunc: wse }; -var sB = he(Ss); -var aB = he(Xi); +var sB = { kernelName: xa, backendName: "wasm", kernelFunc: wse }; +var aB = he(ws); +var iB = he(Ki); var Sse = true; -var iB = Ue(Ns, Sse); -var uB; -function Ise(r) { - uB = r.wasm.cwrap(So, null, ["number", "number", "number", "number"]); +var uB = Ue(ks, Sse); +var pB; +function Ise(r15) { + pB = r15.wasm.cwrap(wo, null, ["number", "number", "number", "number"]); } -function vse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { alpha: n } = o, { x: s } = e, a = t8.dataIdMap.get(s.dataId).id, i = t8.makeOutput(s.shape, s.dtype), p = t8.dataIdMap.get(i.dataId).id; - return uB(a, n, we[s.dtype], p), i; +function vse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { alpha: n } = o, { x: s } = e, a = t8.dataIdMap.get(s.dataId).id, i = t8.makeOutput(s.shape, s.dtype), p = t8.dataIdMap.get(i.dataId).id; + return pB(a, n, we[s.dtype], p), i; } -var pB = { kernelName: So, backendName: "wasm", setupFunc: Ise, kernelFunc: vse }; -var cB; -function kse(r) { - cB = r.wasm.cwrap(Ts, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); +var cB = { kernelName: wo, backendName: "wasm", setupFunc: Ise, kernelFunc: vse }; +var lB; +function kse(r15) { + lB = r15.wasm.cwrap(Ns, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); } -function Nse(r) { - let { backend: t8, inputs: e, 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 } = ct.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function Nse(r15) { + let { backend: t8, inputs: e, 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 = Vt({ inputs: { x: n }, backend: t8, attrs: { shape: f } }); + k = zt({ inputs: { x: n }, backend: t8, 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 _ = ct.computeOutShape(b, C, S), E = Oo({ inputs: { x: n }, backend: t8, attrs: { begin: b, size: _ } }); - k = Vt({ inputs: { x: E }, backend: t8, attrs: { shape: f } }), t8.disposeData(E.dataId); + let _ = pt.computeOutShape(b, C, S), E = Po({ inputs: { x: n }, backend: t8, attrs: { begin: b, size: _ } }); + k = zt({ inputs: { x: E }, backend: t8, attrs: { shape: f } }), t8.disposeData(E.dataId); } else { let _ = t8.makeOutput(d, "float32"), E = t8.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 = t8.dataIdMap.get(_.dataId).id; - cB(E, R, n.shape.length, D, P, O, M, L, d.length, B), k = Vt({ inputs: { x: _ }, backend: t8, attrs: { shape: f } }), t8.disposeData(_.dataId); + lB(E, R, n.shape.length, D, P, O, M, L, d.length, B), k = zt({ inputs: { x: _ }, backend: t8, attrs: { shape: f } }), t8.disposeData(_.dataId); } return k; } -var lB = { kernelName: Ts, backendName: "wasm", setupFunc: kse, kernelFunc: Nse }; -function Tse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { data: n, dataSplits: s } = e, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: c, preserveShortSequences: l } = o, m = t8.readSync(n.dataId), d = t8.readSync(s.dataId), [f, h] = gp(m, d, a, i, p, u, c, l), g = t8.makeOutput([f.length], "string"), x = t8.dataIdMap.get(g.dataId); +var mB = { kernelName: Ns, backendName: "wasm", setupFunc: kse, kernelFunc: Nse }; +function Tse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { data: n, dataSplits: s } = e, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: c, preserveShortSequences: l } = o, m = t8.readSync(n.dataId), d = t8.readSync(s.dataId), [f, h] = up(m, d, a, i, p, u, c, l), g = t8.makeOutput([f.length], "string"), x = t8.dataIdMap.get(g.dataId); x.stringBytes = f; let b = t8.makeOutput(s.shape, "int32"); return t8.typedArrayFromHeap(b).set(h), [g, b]; } -var mB = { kernelName: Ca, backendName: "wasm", kernelFunc: Tse }; -function _se(r) { - let { backend: t8, inputs: e, attrs: o } = r, { input: n, delimiter: s } = e, { skipEmpty: a } = o, i = t8.readSync(n.dataId), p = t8.readSync(s.dataId), [u, c, l] = xp(i, p[0], a), m = c.length, d = t8.makeOutput([m, 2], "int32"); +var dB = { kernelName: Ca, backendName: "wasm", kernelFunc: Tse }; +function _se(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { input: n, delimiter: s } = e, { skipEmpty: a } = o, i = t8.readSync(n.dataId), p = t8.readSync(s.dataId), [u, c, l] = pp(i, p[0], a), m = c.length, d = t8.makeOutput([m, 2], "int32"); t8.typedArrayFromHeap(d).set(u); let h = t8.makeOutput([m], "string"), g = t8.dataIdMap.get(h.dataId); g.stringBytes = c; let x = t8.makeOutput([2], "int32"); return t8.typedArrayFromHeap(x).set(l), [d, h, x]; } -var dB = { kernelName: Yi, backendName: "wasm", kernelFunc: _se }; -function $se(r) { - let { backend: t8, inputs: e, attrs: o } = r, { input: n } = e, { numBuckets: s } = o, a = t8.readSync(n.dataId), i = yp(a, s), p = t8.makeOutput(n.shape, "int32"); +var fB = { kernelName: qi, backendName: "wasm", kernelFunc: _se }; +function $se(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { input: n } = e, { numBuckets: s } = o, a = t8.readSync(n.dataId), i = cp(a, s), p = t8.makeOutput(n.shape, "int32"); return t8.typedArrayFromHeap(p).set(i), p; } -var fB = { kernelName: Qi, backendName: "wasm", kernelFunc: $se }; +var hB = { kernelName: ji, backendName: "wasm", kernelFunc: $se }; var Ese = true; -var hB = Ue(_s, Ese); -var gB; -function Rse(r) { - gB = r.wasm.cwrap(Is, null, ["number", "number", "number", "number"]); +var gB = Ue(Ts, Ese); +var xB; +function Rse(r15) { + xB = r15.wasm.cwrap(Ss, null, ["number", "number", "number", "number"]); } -function Dse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = _r(a, n, t8), f = l; +function Dse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = e, i = t8.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, t8), f = l; if (d) { let C = t8.dataIdMap.get(c.dataId).id; C !== i && (u = c, p = C, f = w.getInnerMostAxes(f.length, u.shape.length)); @@ -26265,7 +26268,7 @@ function Dse(r) { let [h, g] = w.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = t8.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { let C = t8.dataIdMap.get(b.dataId).id; - gB(p, x, we[b.dtype], C); + xB(p, x, we[b.dtype], C); } if (d && t8.disposeData(c.dataId), s) { let C = w.expandShapeToKeepDim(b.shape, m); @@ -26273,50 +26276,50 @@ function Dse(r) { } return b; } -var xB = { kernelName: Is, backendName: "wasm", setupFunc: Rse, kernelFunc: Dse }; -var yB = he($s); -var bB = he(Es); -var CB; -function Ase(r) { - CB = r.wasm.cwrap(fs, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number", "number"]); +var yB = { kernelName: Ss, backendName: "wasm", setupFunc: Rse, kernelFunc: Dse }; +var bB = he(_s); +var CB = he($s); +var wB; +function Ase(r15) { + wB = r15.wasm.cwrap(ds, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number", "number"]); } -function Fse(r) { - let { backend: t8, inputs: e, attrs: o } = r, { tensor: n, indices: s, updates: a } = e, {} = o, i = t8.makeOutput(n.shape, n.dtype); +function Fse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { tensor: n, indices: s, updates: a } = e, {} = o, i = t8.makeOutput(n.shape, n.dtype); if (y.sizeFromShape(n.shape) === 0) return i; - let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = hu.calculateShapes(a, s, n.shape), f = t8.dataIdMap.get(s.dataId).id, g = t8.dataIdMap.get(a.dataId).id, b = t8.dataIdMap.get(n.dataId).id, C = new Uint8Array(new Int32Array(l).buffer), S = t8.dataIdMap.get(i.dataId).id; - return CB(f, g, we[a.dtype], p, u, c, C, m, S, b), i; + let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = lu.calculateShapes(a, s, n.shape), f = t8.dataIdMap.get(s.dataId).id, g = t8.dataIdMap.get(a.dataId).id, b = t8.dataIdMap.get(n.dataId).id, C = new Uint8Array(new Int32Array(l).buffer), S = t8.dataIdMap.get(i.dataId).id; + return wB(f, g, we[a.dtype], p, u, c, C, m, S, b), i; } -var wB = { kernelName: fs, backendName: "wasm", setupFunc: Ase, kernelFunc: Fse }; -var SB; -function Pse(r) { - SB = r.wasm.cwrap(po, null, ["number", "array", "number", "array", "number", "number"]); +var SB = { kernelName: ds, backendName: "wasm", setupFunc: Ase, kernelFunc: Fse }; +var IB; +function Pse(r15) { + IB = r15.wasm.cwrap(uo, null, ["number", "array", "number", "array", "number", "number"]); } -function Ose(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, s = e.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); +function Ose(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, s = e.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); for (let m = 0; m < i.length; m++) i[m] = n.shape[m] * a[m]; let p = new Uint8Array(new Int32Array(n.shape).buffer), u = new Uint8Array(new Int32Array(i).buffer), c = e.makeOutput(i, n.dtype), l = e.dataIdMap.get(c.dataId).id; - return SB(s, p, n.shape.length, u, i.length, we[c.dtype], l), c; + return IB(s, p, n.shape.length, u, i.length, we[c.dtype], l), c; } -var IB = { kernelName: po, backendName: "wasm", setupFunc: Pse, kernelFunc: Ose }; -var vB; -function Mse(r) { - vB = r.wasm.cwrap(Rs, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); +var vB = { kernelName: uo, backendName: "wasm", setupFunc: Pse, kernelFunc: Ose }; +var kB; +function Mse(r15) { + kB = r15.wasm.cwrap(Es, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); } -var Lse = ({ inputs: r, backend: t8, attrs: e }) => { - let { x: o } = r, { k: n, sorted: s } = e, a = t8.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); +var Lse = ({ inputs: r15, backend: t8, attrs: e }) => { + let { x: o } = r15, { k: n, sorted: s } = e, a = t8.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); p[p.length - 1] = n; let u = t8.makeOutput(p, o.dtype), c = t8.dataIdMap.get(u.dataId).id, l = t8.makeOutput(p, "int32"), m = t8.dataIdMap.get(l.dataId).id; - return vB(a, i, o.shape.length, we[o.dtype], n, s, c, m), [u, l]; + return kB(a, i, o.shape.length, we[o.dtype], n, s, c, m), [u, l]; }; -var kB = { kernelName: Rs, backendName: "wasm", setupFunc: Mse, kernelFunc: Lse }; -var NB; -function Bse(r) { - NB = r.wasm.cwrap(Ds, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); +var NB = { kernelName: Es, backendName: "wasm", setupFunc: Mse, kernelFunc: Lse }; +var TB; +function Bse(r15) { + TB = r15.wasm.cwrap(Rs, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); } -function zse(r) { - let { backend: t8, inputs: e, 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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(y.computeStrides(g)).buffer), C = t8.makeOutput(g, n.dtype), S = t8.dataIdMap.get(C.dataId).id, _ = t8.dataIdMap.get(n.dataId).id, R = t8.dataIdMap.get(s.dataId).id, D = a === "nearest" ? 1 : 2, P; +function zse(r15) { + let { backend: t8, inputs: e, attrs: o } = r15, { 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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(y.computeStrides(g)).buffer), C = t8.makeOutput(g, n.dtype), S = t8.dataIdMap.get(C.dataId).id, _ = t8.dataIdMap.get(n.dataId).id, R = t8.dataIdMap.get(s.dataId).id, D = a === "nearest" ? 1 : 2, P; switch (i) { case "constant": P = 1; @@ -26334,16 +26337,16 @@ function zse(r) { P = 1; break; } - return NB(_, 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; + return TB(_, 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 TB = { kernelName: Ds, backendName: "wasm", setupFunc: Bse, kernelFunc: zse }; -function Vse(r) { - let { inputs: t8, attrs: e, backend: o } = r, { axis: n } = e, { x: s } = t8, { outputValues: a, outputShape: i, indices: p } = bp(o.readSync(s.dataId), n, s.shape, s.dtype); +var _B = { kernelName: Rs, backendName: "wasm", setupFunc: Bse, kernelFunc: zse }; +function Vse(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { axis: n } = e, { x: s } = t8, { outputValues: a, outputShape: i, indices: p } = lp(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 _B = { kernelName: Zi, backendName: "wasm", kernelFunc: Vse }; -function Wse(r) { - let { inputs: t8, backend: e, attrs: o } = r, { value: n } = t8, { axis: s } = o; +var $B = { kernelName: Xi, backendName: "wasm", kernelFunc: Vse }; +function Wse(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { value: n } = t8, { 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++) @@ -26351,43 +26354,43 @@ function Wse(r) { 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] = Oo({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: e }); + l[s] = d, c[d] = Po({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: e }); return c.map(({ dataId: d, dtype: f }) => ({ dataId: d, dtype: f, shape: p })); } -var $B = { kernelName: wa, backendName: "wasm", kernelFunc: Wse }; -function Use(r) { - let { inputs: { x: t8 }, backend: e } = r, o = e.makeOutput(t8.shape, t8.dtype); +var EB = { kernelName: wa, backendName: "wasm", kernelFunc: Wse }; +function Use(r15) { + let { inputs: { x: t8 }, backend: e } = r15, o = e.makeOutput(t8.shape, t8.dtype); return e.typedArrayFromHeap(o).fill(0), o; } -var EB = { kernelName: Sa, backendName: "wasm", kernelFunc: Use }; -var Gse = [hP, gP, xP, yP, bP, wP, NP, _P, $P, EP, RP, DP, AP, FP, PP, MP, UP, BP, VP, KP, jP, YP, QP, ZP, JP, eO, rO, oO, sO, iO, pO, lO, dO, fO, hO, xO, bO, wO, IO, kO, TO, $O, RO, AO, PO, OO, LO, BO, zO, VO, WO, UO, GO, KO, qO, jO, YO, ZO, eM, rM, nM, sM, aM, SP, iM, uM, pM, lM, mM, dM, hM, xM, gM, yM, bM, CM, wM, IM, kM, TM, _M, EM, DM, FM, OM, LM, zM, WM, UM, HM, XM, YM, QM, ZM, eL, rL, nL, sL, iL, uL, pL, Bg, lL, dL, hL, gL, xL, yL, bL, CL, GP, SL, vL, NL, _L, EL, DL, AL, FL, OL, LL, zL, VL, UL, GL, HL, KL, qP, qM, qL, jL, YL, ZL, eB, tB, oB, nB, sB, aB, iB, pB, lB, mB, dB, fB, hB, xB, yB, bB, wB, IB, kB, TB, vP, _B, $B, EB]; -for (let r of Gse) - ri(r); -var Lv = A(); -Lv.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { +var RB = { kernelName: Sa, backendName: "wasm", kernelFunc: Use }; +var Gse = [gP, xP, yP, bP, CP, SP, TP, $P, EP, RP, DP, AP, FP, PP, OP, LP, GP, zP, WP, qP, XP, QP, ZP, JP, eO, tO, oO, nO, aO, uO, cO, mO, fO, hO, gO, yO, CO, SO, vO, NO, _O, EO, DO, FO, OO, MO, BO, zO, VO, WO, UO, GO, HO, qO, jO, XO, QO, JO, tM, oM, sM, aM, iM, IP, uM, pM, cM, mM, dM, fM, gM, yM, xM, bM, CM, wM, SM, vM, NM, _M, $M, RM, AM, PM, MM, BM, VM, UM, GM, KM, YM, QM, ZM, JM, tL, oL, sL, aL, uL, pL, cL, Lg, mL, fL, gL, xL, yL, bL, CL, wL, HP, IL, kL, TL, $L, RL, AL, FL, PL, ML, BL, VL, WL, GL, HL, KL, qL, jP, jM, jL, XL, QL, JL, tB, rB, nB, sB, aB, iB, uB, cB, mB, dB, fB, hB, gB, yB, bB, CB, SB, vB, NB, _B, kP, $B, EB, RB]; +for (let r15 of Gse) + ti(r15); +var Bv = A(); +Bv.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) { + } catch (r15) { return false; } }); -Lv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { - if (Lv.get("IS_NODE")) +Bv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { + if (Bv.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 (r) { + } catch (r15) { return false; } }); -var Kv = Kp(FB()); -var zB = Kp(OB()); -var qv = Kp(MB()); -var LB = Kv.default || Kv; -var Hse = qv.default || qv; -var pm = class extends ao { +var qv = Lp(PB()); +var VB = Lp(MB()); +var jv = Lp(LB()); +var BB = qv.default || qv; +var Hse = jv.default || jv; +var im = class extends so { constructor(t8) { - super(), this.wasm = t8, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(WB), Hv = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new zo(this, pr()); + super(), this.wasm = t8, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(UB), Kv = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new Bo(this, ur()); } write(t8, e, o) { let n = { id: this.dataIdNextNumber++ }; @@ -26475,113 +26478,113 @@ var pm = class extends ao { } } }; -function Kse(r) { - return (t8, e) => (y.fetch(r, { credentials: "same-origin" }).then((o) => { - o.ok || t8.env.a(`failed to load wasm binary file at '${r}'`), o.arrayBuffer().then((n) => { +function Kse(r15) { + return (t8, e) => (y.fetch(r15, { credentials: "same-origin" }).then((o) => { + o.ok || t8.env.a(`failed to load wasm binary file at '${r15}'`), o.arrayBuffer().then((n) => { WebAssembly.instantiate(n, t8).then((s) => { e(s.instance, s.module); }); }); }), {}); } -function BB(r, t8, e) { - if (Gg != null) - return Gg; +function zB(r15, t8, e) { + if (Ug != null) + return Ug; let o = "tfjs-backend-wasm.wasm"; - return r && t8 ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r && (o = "tfjs-backend-wasm-simd.wasm"), im != null && im[o] != null ? im[o] : e + o; + return r15 && t8 ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r15 && (o = "tfjs-backend-wasm-simd.wasm"), sm != null && sm[o] != null ? sm[o] : e + o; } -async function VB() { - let [r, t8] = await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"), A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); +async function WB() { + let [r15, t8] = await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"), A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); return new Promise((e, o) => { let n = {}; n.locateFile = (i, p) => { if (i.endsWith(".worker.js")) { - let u = zB.wasmWorkerContents.replace(/\n/g, "\\n"), c = new Blob([u], { type: "application/javascript" }); + let u = VB.wasmWorkerContents.replace(/\n/g, "\\n"), c = new Blob([u], { type: "application/javascript" }); return URL.createObjectURL(c); } - return i.endsWith(".wasm") ? BB(r, t8, am != null ? am : p) : p + i; - }, jv && (n.instantiateWasm = Kse(BB(r, t8, am != null ? am : ""))); + return i.endsWith(".wasm") ? zB(r15, t8, nm != null ? nm : p) : p + i; + }, Xv && (n.instantiateWasm = Kse(zB(r15, t8, nm != null ? nm : ""))); let s = false; n.onAbort = () => { - if (s || um) + if (s || am) 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" }); + am = 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; - t8 && r && Gg == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + LB.toString()], { type: "text/javascript" }), a = LB(n)) : a = Hse(n), a.then((i) => { - s = true, um = false; + t8 && r15 && Ug == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + BB.toString()], { type: "text/javascript" }), a = BB(n)) : a = Hse(n), a.then((i) => { + s = true, am = false; let p = null; i.tfjs = { init: i.cwrap("init", null, []), initWithThreadsCount: i.cwrap("init_with_threads_count", null, ["number"]), getThreadsCount: i.cwrap("get_threads_count", "number", []), registerTensor: i.cwrap("register_tensor", null, ["number", "number", "number"]), disposeData: i.cwrap("dispose_data", p, ["number"]), dispose: i.cwrap("dispose", p, []) }, e({ wasm: i }); }).catch(o); }); } -function qse(r, t8) { +function qse(r15, t8) { switch (t8) { case "float32": - return new Float32Array(r); + return new Float32Array(r15); case "int32": - return new Int32Array(r); + return new Int32Array(r15); case "bool": - return new Uint8Array(r); + return new Uint8Array(r15); default: throw new Error(`Unknown dtype ${t8}`); } } var jse = ["tfjs-backend-wasm.wasm", "tfjs-backend-wasm-simd.wasm", "tfjs-backend-wasm-threaded-simd.wasm"]; -var Gg = null; -var am = null; -var im = {}; -var um = false; -var jv = false; -function Xse(r, t8 = false) { - if (Pw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), um) +var Ug = null; +var nm = null; +var sm = {}; +var am = false; +var Xv = false; +function Xse(r15, t8 = false) { + if (Pw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), am) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`"); - Gg = r, jv = t8; + Ug = r15, Xv = t8; } -function Yse(r, t8 = false) { - if (um) +function Yse(r15, t8 = false) { + if (am) 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; + if (typeof r15 == "string") + nm = r15; else { - im = r; - let e = jse.filter((o) => im[o] == null); + sm = r15; + let e = jse.filter((o) => sm[o] == null); if (e.length > 0) throw new Error(`There were no entries found for the following binaries: ${e.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.`); } - jv = t8; + Xv = t8; } -var WB = -1; -var Hv = -1; -function Qse(r) { - WB = r; +var UB = -1; +var Kv = -1; +function Qse(r15) { + UB = r15; } function Zse() { - if (Hv === -1) + if (Kv === -1) throw new Error("WASM backend not initialized."); - return Hv; + return Kv; } -var Jse = "4.11.0"; +var Jse = "4.14.0"; var eae = 2; -su("wasm", async () => { - let { wasm: r } = await VB(); - return new pm(r); +tu("wasm", async () => { + let { wasm: r15 } = await WB(); + return new im(r15); }, eae); -var xo = A(); -xo.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); -xo.registerFlag("WEBGPU_CPU_FORWARD", () => true); -xo.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); -xo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => true); -xo.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); -xo.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); -xo.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); -xo.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); -xo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); -xo.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL", () => -1); -xo.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER", () => false); -xo.registerFlag("WEBGPU_PRINT_SHADER", () => ""); -xo.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY", () => false); -var Hg = class { +var go = A(); +go.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); +go.registerFlag("WEBGPU_CPU_FORWARD", () => true); +go.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); +go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => true); +go.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); +go.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); +go.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); +go.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); +go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); +go.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL", () => -1); +go.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER", () => false); +go.registerFlag("WEBGPU_PRINT_SHADER", () => ""); +go.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY", () => false); +var Gg = class { constructor(t8) { t8 && (this.vendor = t8.vendor, this.architecture = t8.architecture, this.intelGPUGeneration = this.getIntelGPUGeneration()); } @@ -26598,18 +26601,18 @@ var Hg = class { return this.vendor === "intel"; } }; -var Kg = class { +var Hg = class { constructor(t8) { this.device = t8, this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } acquireBuffer(t8, e, o = false, n = true) { - let s, a = UB(t8, e); + let s, a = GB(t8, e); 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: t8, usage: e, mappedAtCreation: o }), this.numBytesAllocated += t8)) : (s = this.device.createBuffer({ size: t8, usage: e, mappedAtCreation: o }), this.numBytesAllocated += t8), this.usedBuffers.has(a) || this.usedBuffers.set(a, []), this.usedBuffers.get(a).push(s), this.numUsedBuffers++, this.numBytesUsed += t8, s; } releaseBuffer(t8, e = true) { if (this.freeBuffers.size === 0) return; - let o = t8.size, n = t8.usage, s = UB(o, n), a = this.usedBuffers.get(s), i = a.indexOf(t8); + let o = t8.size, n = t8.usage, s = GB(o, n), a = this.usedBuffers.get(s), i = a.indexOf(t8); 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, e ? (this.freeBuffers.get(s).push(t8), this.numFreeBuffers++) : (t8.destroy(), this.numBytesAllocated -= o); @@ -26632,15 +26635,15 @@ var Kg = class { }), this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function UB(r, t8) { - return `${r}_${t8}`; +function GB(r15, t8) { + return `${r15}_${t8}`; } -var qg = class { +var Kg = class { constructor(t8) { this.device = t8, this.numUsedTextures = 0, this.numFreeTextures = 0, this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } acquireTexture(t8, e, o, n) { - let s = HB(o), a = t8 * e * s, i = GB(t8, e, o, n); + let s = KB(o), a = t8 * e * s, i = HB(t8, e, 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(); @@ -26653,13 +26656,13 @@ var qg = class { releaseTexture(t8) { if (this.freeTextures.size === 0) return; - let e = t8.width, o = t8.height, n = t8.format, s = t8.usage, a = GB(e, o, n, s); + let e = t8.width, o = t8.height, n = t8.format, s = t8.usage, a = HB(e, o, n, s); this.freeTextures.has(a) || this.freeTextures.set(a, []), this.freeTextures.get(a).push(t8), this.numFreeTextures++, this.numUsedTextures--; let i = this.usedTextures.get(a), p = i.indexOf(t8); if (p < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); i.splice(p, 1); - let u = HB(n), c = e * o * u; + let u = KB(n), c = e * o * u; this.numBytesUsed -= c; } getNumUsedTextures() { @@ -26680,51 +26683,51 @@ var qg = class { }), this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numUsedTextures = 0, this.numFreeTextures = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function GB(r, t8, e, o) { - return `${r}_${t8}_${e}_${o}`; +function HB(r15, t8, e, o) { + return `${r15}_${t8}_${e}_${o}`; } -function HB(r) { - if (r === "rgba8unorm") +function KB(r15) { + if (r15 === "rgba8unorm") return 16; - throw new Error(`${r} is not supported!`); + throw new Error(`${r15} is not supported!`); } -function KB(r, t8) { - if (Math.max(...r) > 5) +function qB(r15, t8) { + if (Math.max(...r15) > 5) throw new Error("Cannot symbolically compute strides for rank > 6 tensor."); - let e = r.length, o = "xyzwuv", n = r.map((a) => `${t8}.${o[a]}`), s = new Array(e - 1); + let e = r15.length, o = "xyzwuv", n = r15.map((a) => `${t8}.${o[a]}`), s = new Array(e - 1); s[e - 2] = n[e - 1]; for (let a = e - 3; a >= 0; --a) s[a] = `(${s[a + 1]} * ${n[a + 1]})`; return s; } -var Qr = (r, t8, e) => e === "int32" ? `atomicAdd(${r}, bitcast(${t8}));` : ` +var Yr = (r15, t8, e) => e === "int32" ? `atomicAdd(${r15}, bitcast(${t8}));` : ` { var oldValue = 0; loop { let newValueF32 = bitcast(oldValue) + (${t8}); let newValue = bitcast(newValueF32); - let res = atomicCompareExchangeWeak(${r}, oldValue, newValue); + let res = atomicCompareExchangeWeak(${r15}, oldValue, newValue); if res.exchanged { break; } oldValue = res.old_value; } }`; -var Ii; -(function(r) { - r[r.FROM_PIXELS = 0] = "FROM_PIXELS", r[r.DRAW = 1] = "DRAW"; -})(Ii || (Ii = {})); -var YB = (r, t8, e, o, n) => { - let s = { dtype: o.dtype, shape: o.shape }, a = rae(e, s, t8), i = r.createShaderModule({ code: a, label: t8.constructor.name }), p = A().get("WEBGPU_PRINT_SHADER"); +var Ci; +(function(r15) { + r15[r15.FROM_PIXELS = 0] = "FROM_PIXELS", r15[r15.DRAW = 1] = "DRAW"; +})(Ci || (Ci = {})); +var QB = (r15, t8, e, o, n) => { + let s = { dtype: o.dtype, shape: o.shape }, a = rae(e, s, t8), i = r15.createShaderModule({ code: a, label: t8.constructor.name }), p = A().get("WEBGPU_PRINT_SHADER"); if (p !== "") { p = p.toLowerCase(); let u = p.split(","); (p === "all" || u.some((c) => t8.shaderKey.toLowerCase().includes(c))) && (console.group(t8.shaderKey), console.debug(a), console.groupEnd()); } - return n ? r.createComputePipelineAsync({ compute: { module: i, entryPoint: "_start" }, label: t8.constructor.name, layout: "auto" }) : r.createComputePipeline({ compute: { module: i, entryPoint: "_start" }, label: t8.constructor.name, layout: "auto" }); + return n ? r15.createComputePipelineAsync({ compute: { module: i, entryPoint: "_start" }, label: t8.constructor.name, layout: "auto" }) : r15.createComputePipeline({ compute: { module: i, entryPoint: "_start" }, label: t8.constructor.name, layout: "auto" }); }; -var Ae = (r, t8 = "f32") => { - switch (r) { +var Ae = (r15, t8 = "f32") => { + switch (r15) { case 1: return `${t8}`; case 2: @@ -26734,42 +26737,42 @@ var Ae = (r, t8 = "f32") => { case 4: return `vec4<${t8}>`; default: - throw new Error(`${r}-component ${t8} is not supported.`); + throw new Error(`${r15}-component ${t8} is not supported.`); } }; -function ht(r) { - if (r <= 1) +function ft(r15) { + if (r15 <= 1) return "i32"; - if (r === 2) + if (r15 === 2) return "vec2"; - if (r === 3) + if (r15 === 3) return "vec3"; - if (r === 4) + if (r15 === 4) return "vec4"; - if (r === 5) + if (r15 === 5) return "vec5"; - if (r === 6) + if (r15 === 6) return "vec6"; - throw Error(`GPU for rank ${r} is not yet supported`); + throw Error(`GPU for rank ${r15} is not yet supported`); } -function Mo(r) { - if (r === 0) +function Oo(r15) { + if (r15 === 0) return "x"; - if (r === 1) + if (r15 === 1) return "y"; - if (r === 2) + if (r15 === 2) return "z"; - if (r === 3) + if (r15 === 3) return "w"; - if (r === 4) + if (r15 === 4) return "u"; - if (r === 5) + if (r15 === 5) return "v"; - throw Error(`Index ${r} is not yet supported`); + throw Error(`Index ${r15} is not yet supported`); } -function G(...r) { +function G(...r15) { let t8; - switch (r.length) { + switch (r15.length) { case 0: t8 = ` fn main() @@ -26777,7 +26780,7 @@ function G(...r) { break; case 1: t8 = ` - fn main(${r[0]} : i32) + fn main(${r15[0]} : i32) `; break; default: @@ -26785,7 +26788,7 @@ function G(...r) { } return t8; } -function qB(r, t8) { +function jB(r15, t8) { let e; return e = ` ${tae(t8)} @@ -26799,16 +26802,16 @@ function qB(r, t8) { globalId = GlobalId; numWorkgroups = NumWorkgroups; workgroupId = WorkgroupId; - ${r ? "main(getGlobalIndex());" : "main();"}; + ${r15 ? "main(getGlobalIndex());" : "main();"}; } `, e; } -function tae(r) { +function tae(r15) { return ` - @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]}) + @compute @workgroup_size(${r15.workgroupSize[0]}, ${r15.workgroupSize[1]}, ${r15.workgroupSize[2]}) `; } -function rae(r, t8, e) { +function rae(r15, t8, e) { let o = [], n = e.workgroupSize[0] * e.workgroupSize[1] * e.workgroupSize[2]; if (e.outputComponent = e.outputComponent ? e.outputComponent : 1, o.push(` @@ -26820,13 +26823,13 @@ function rae(r, t8, e) { // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${ZB(e) ? " return i32(globalId.x);" : ` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${JB(e) ? " return i32(globalId.x);" : ` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u + localIndex); `} } `), e.pixelsOpType != null) { - let f = e.pixelsOpType === Ii.FROM_PIXELS ? `@group(0) @binding(0) var result: array<${Nu(t8.dtype, e.outputComponent)}>;` : `@group(0) @binding(1) var inBuf : array<${Nu(r[0].dtype, e.outputComponent)}>;`, h = t8.shape.length === 3 ? "vec2" : "i32"; + let f = e.pixelsOpType === Ci.FROM_PIXELS ? `@group(0) @binding(0) var result: array<${Cu(t8.dtype, e.outputComponent)}>;` : `@group(0) @binding(1) var inBuf : array<${Cu(r15[0].dtype, e.outputComponent)}>;`, h = t8.shape.length === 3 ? "vec2" : "i32"; o.push(` struct Uniform { outShapeStrides : ${h}, @@ -26838,53 +26841,53 @@ function rae(r, t8, e) { ${f} @group(0) @binding(2) var uniforms: Uniform; `); - let g = XB(e); - return [jB, o.join(` -`), cm(t8.shape), e.getUserCode(), qB(g, e)].join(` + let g = YB(e); + return [XB, o.join(` +`), um(t8.shape), e.getUserCode(), jB(g, e)].join(` `); } let s, a, i = "struct Uniforms { NAN : f32, INFINITY : f32, "; e.variableNames.forEach((f, h) => { - let g = ht(r[h].shape.length); - i += `${f.charAt(0).toLowerCase() + f.slice(1)}Shape : ${g}, `, s = r[h].shape.length - 1, a = ht(s), i += `${f.charAt(0).toLowerCase() + f.slice(1)}ShapeStrides: ${a}, `; + let g = ft(r15[h].shape.length); + i += `${f.charAt(0).toLowerCase() + f.slice(1)}Shape : ${g}, `, s = r15[h].shape.length - 1, a = ft(s), i += `${f.charAt(0).toLowerCase() + f.slice(1)}ShapeStrides: ${a}, `; }); - let p = ht(t8.shape.length); - i += `outShape : ${p}, `, s = t8.shape.length - 1, a = ht(s), i += ` + let p = ft(t8.shape.length); + i += `outShape : ${p}, `, s = t8.shape.length - 1, a = ft(s), i += ` outShapeStrides: ${a}, `, e.size && (i += "size : i32, "), e.uniforms && (i += e.uniforms), i += "};", i = cae(i), o.push(i), e.atomic ? o.push(` @group(0) @binding(0) var result: array>; `) : o.push(` - @group(0) @binding(0) var result: array<${Nu(t8.dtype, e.outputComponent)}>; + @group(0) @binding(0) var result: array<${Cu(t8.dtype, e.outputComponent)}>; `), e.variableNames.forEach((f, h) => { o.push(` - @group(0) @binding(${1 + h}) var ${f}: array<${e.variableComponents ? Nu(r[h].dtype, e.variableComponents[h]) : Nu(r[h].dtype, e.outputComponent)}>; + @group(0) @binding(${1 + h}) var ${f}: array<${e.variableComponents ? Cu(r15[h].dtype, e.variableComponents[h]) : Cu(r15[h].dtype, e.outputComponent)}>; `); }), i !== "" && o.push(` @group(0) @binding(${1 + e.variableNames.length}) var uniforms: Uniforms; `); - let u = iae(t8.shape, e.dispatchLayout), c = [jB, o.join(` -`) + oae, cm(t8.shape), u, uae(t8.shape.length)]; + let u = iae(t8.shape, e.dispatchLayout), c = [XB, o.join(` +`) + oae, um(t8.shape), u, uae(t8.shape.length)]; e.atomic || c.push(pae(t8.shape, t8.dtype, e.outputComponent)), e.variableNames.forEach((f, h) => { - c.push(`${cm(r[h].shape, f)}`); + c.push(`${um(r15[h].shape, f)}`); }); - let l = r.map((f, h) => aae(f, t8.shape, e.variableComponents ? e.variableComponents[h] : e.outputComponent, e.dispatchLayout.x.length === t8.shape.length)).join(` + let l = r15.map((f, h) => aae(f, t8.shape, e.variableComponents ? e.variableComponents[h] : e.outputComponent, e.dispatchLayout.x.length === t8.shape.length)).join(` `); c.push(l), c.push(e.getUserCode()); - let m = XB(e); - return c.push(qB(m, e)), c.join(` + let m = YB(e); + return c.push(jB(m, e)), c.join(` `); } -function QB(r, t8, e) { - let o = r.shaderKey; - if (r.pixelsOpType != null) +function ZB(r15, t8, e) { + let o = r15.shaderKey; + if (r15.pixelsOpType != null) return o; let n = [], s = []; t8.forEach((c) => { n.push(c.shape), s.push(c.dtype); }), n.push(e.shape), s.push(e.dtype); - let a = t8.map((c) => w.getBroadcastDims(c.shape, e.shape)), i = t8.map((c) => y.arraysEqual(c.shape, e.shape)).join("_"), p = a.map((c) => c.join("_")).join(";"), u = ZB(r) ? "flatDispatch" : ""; - return o += "_" + (r.workgroupSize ? r.workgroupSize.join(",") : "") + n.map((c) => c.length).join(",") + s.join(",") + r.variableNames.join(",") + p + i + u, o; + let a = t8.map((c) => w.getBroadcastDims(c.shape, e.shape)), i = t8.map((c) => y.arraysEqual(c.shape, e.shape)).join("_"), p = a.map((c) => c.join("_")).join(";"), u = JB(r15) ? "flatDispatch" : ""; + return o += "_" + (r15.workgroupSize ? r15.workgroupSize.join(",") : "") + n.map((c) => c.length).join(",") + s.join(",") + r15.variableNames.join(",") + p + i + u, o; } -var jB = ` +var XB = ` 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}; @@ -26940,11 +26943,11 @@ var oae = ` return abs(val) == uniforms.INFINITY; } `; -function cm(r, t8 = "") { - let e = r.length, o = t8 !== "" ? `get${t8.charAt(0).toUpperCase() + t8.slice(1)}CoordsFromIndex` : "getCoordsFromIndex", n = t8 !== "" ? `${t8.charAt(0).toLowerCase() + t8.slice(1)}ShapeStrides` : "outShapeStrides"; +function um(r15, t8 = "") { + let e = r15.length, o = t8 !== "" ? `get${t8.charAt(0).toUpperCase() + t8.slice(1)}CoordsFromIndex` : "getCoordsFromIndex", n = t8 !== "" ? `${t8.charAt(0).toLowerCase() + t8.slice(1)}ShapeStrides` : "outShapeStrides"; if (e <= 1) return `fn ${o}(index : i32) -> i32 { return index; }`; - let s = y.computeStrides(r), a = ht(e), i = []; + let s = y.computeStrides(r15), a = ft(e), i = []; for (let u = 0; u < e; u++) i.push(`d${u}`); if (s.length === 1) @@ -26954,7 +26957,7 @@ function cm(r, t8 = "") { }`; let p; return p = "var index2 = index;" + s.map((u, c) => { - let l = `let ${i[c]} = index2 / uniforms.${n}.${Mo(c)}`, m = c === s.length - 1 ? `let ${i[c + 1]} = index2 - ${i[c]} * uniforms.${n}.${Mo(c)}` : `index2 = index2 - ${i[c]} * uniforms.${n}.${Mo(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(""), ` fn ${o}(index : i32) -> ${a} { @@ -26963,8 +26966,8 @@ function cm(r, t8 = "") { } `; } -function nae(r, t8) { - let e = r.name, o = r.shape.length, n = ht(o), s = "get" + e.charAt(0).toUpperCase() + e.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((c) => `${c} : i32`).join(", "); +function nae(r15, t8) { + let e = r15.name, o = r15.shape.length, n = ft(o), s = "get" + e.charAt(0).toUpperCase() + e.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((c) => `${c} : i32`).join(", "); if (o < 1) return ` fn ${s}() -> ${Ae(t8)} { @@ -26979,9 +26982,9 @@ function nae(r, t8) { } `; } -function sae(r, t8, e, o) { - let n = r.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r.shape.length, p = t8.length, u = ht(p); - if (y.arraysEqual(r.shape, t8) && o) +function sae(r15, t8, e, o) { + let n = r15.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r15.shape.length, p = t8.length, u = ft(p); + if (y.arraysEqual(r15.shape, t8) && o) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(e)} { return ${Ae(e)}(${n}[globalIndex]); @@ -26991,7 +26994,7 @@ function sae(r, t8, e, o) { return ${Ae(e)}(${n}[${p > 1 ? "getOutputIndexFromCoords(coords)" : "coords"}${e === 1 ? "" : ` / ${e}`}]); } `; - let c = w.getBroadcastDims(r.shape, t8), l = p - i, m = ""; + let c = w.getBroadcastDims(r15.shape, t8), l = p - i, m = ""; if (i === 0) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(e)}{ @@ -27002,13 +27005,13 @@ function sae(r, t8, e, o) { return get${s}(); } `; - p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((g) => `coords.${Mo(g + l)} = 0;`).join(` + 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"; else if (p > 1) { - let g = ht(i), x = r.shape.map((b, C) => `coords.${Mo(C + l)}`).join(", "); + let g = ft(i), x = r15.shape.map((b, C) => `coords.${Oo(C + l)}`).join(", "); d = `${g}(${x})`; } else d = "coords"; @@ -27027,16 +27030,16 @@ function sae(r, t8, e, o) { } `; } -function aae(r, t8, e, o) { - let n = nae(r, e); - return r.shape.length <= t8.length && (n += sae(r, t8, e, o)), n; +function aae(r15, t8, e, o) { + let n = nae(r15, e); + return r15.shape.length <= t8.length && (n += sae(r15, t8, e, o)), n; } -function iae(r, t8) { - let { x: e, y: o = [], z: n = [] } = t8, s = r.length, a = e.length + o.length + n.length; +function iae(r15, t8) { + let { x: e, y: o = [], z: n = [] } = t8, s = r15.length, a = e.length + o.length + n.length; if (a !== s) return ""; if (e.length === s) - return `fn getOutputCoords() -> ${ht(s)}{ + return `fn getOutputCoords() -> ${ft(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } @@ -27048,7 +27051,7 @@ function iae(r, t8) { if (d.length === 1) i += `let d${d[0]} = i32(globalId[${m}]);`; else { - let f = KB(d, "uniforms.outShape"); + let f = qB(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]};`; @@ -27057,14 +27060,14 @@ function iae(r, t8) { let u = []; for (let m = 0; m < a; m++) u.push(`d${m}`); - let c = ht(a), l = `fn getOutputCoords() -> ${c} { + let c = ft(a), l = `fn getOutputCoords() -> ${c} { ${i} `; return u.length === 0 ? l += `return ${c}(0); }` : l += `return ${c}(${u.join(",")}); }`, l; } -function uae(r) { +function uae(r15) { let t8 = ""; - switch (r) { + switch (r15) { case 0: case 1: t8 += ` @@ -27119,23 +27122,23 @@ function uae(r) { `; break; default: - y.assert(false, () => `Unsupported ${r}D shape`); + y.assert(false, () => `Unsupported ${r15}D shape`); break; } return t8; } -function ZB(r) { - return r.dispatch[1] === 1 && r.dispatch[2] === 1; +function JB(r15) { + return r15.dispatch[1] === 1 && r15.dispatch[2] === 1; } -function Nu(r, t8 = 1) { - if (r === "float32") +function Cu(r15, t8 = 1) { + if (r15 === "float32") return Ae(t8, "f32"); - if (r === "int32" || r === "bool") + if (r15 === "int32" || r15 === "bool") return Ae(t8, "i32"); - throw new Error(`type ${r} is not supported.`); + throw new Error(`type ${r15} is not supported.`); } -function pae(r, t8, e) { - let o = r.length, n = Nu(t8, e), s = `fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) { +function pae(r15, t8, e) { + let o = r15.length, n = Cu(t8, e), s = `fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) { result[flatIndex] = ${n}(value); } @@ -27144,7 +27147,7 @@ function pae(r, t8, e) { } `; if (o >= 2) { - let a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = ht(o); + let a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = ft(o); s += ` fn setOutputAtCoords(${a.map((p) => `${p} : i32`).join(", ")}, value : ${Ae(e)}) { let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); @@ -27158,87 +27161,87 @@ function pae(r, t8, e) { } return s; } -function cae(r) { +function cae(r15) { let t8 = /(\w+)\s*:\s*vec(5|6)/g; - r = r.replace(t8, (o) => "@align(16) " + o); + r15 = r15.replace(t8, (o) => "@align(16) " + o); let e = /vec(5|6)\s*,\s*(\w+)/g; - return r = r.replace(e, (o, n, s) => `vec${n}, @align(16) ${s}`), r; + return r15 = r15.replace(e, (o, n, s) => `vec${n}, @align(16) ${s}`), r15; } -function XB(r) { - return !(r.dispatchLayout.hasOwnProperty("y") && r.dispatchLayout.y.length !== 0 || r.dispatchLayout.hasOwnProperty("z") && r.dispatchLayout.z.length !== 0); +function YB(r15) { + return !(r15.dispatchLayout.hasOwnProperty("y") && r15.dispatchLayout.y.length !== 0 || r15.dispatchLayout.hasOwnProperty("z") && r15.dispatchLayout.z.length !== 0); } -var Yv = {}; -qe(Yv, { GPUBytesPerElement: () => jg, MatMulProgramType: () => Lo, assertNotComplex: () => fm, computeDispatch: () => H, computeWorkPerThreadForConv2d: () => mm, computeWorkgroupInfoForMatMul: () => Xv, computeWorkgroupSizeForConv2d: () => lm, flatDispatchLayout: () => X, isWebGPUSupported: () => dm, tilesFitEvenlyIntoShape: () => mae }); -var Ap = (r) => { +var Qv = {}; +qe(Qv, { GPUBytesPerElement: () => qg, MatMulProgramType: () => Mo, assertNotComplex: () => mm, computeDispatch: () => H, computeWorkPerThreadForConv2d: () => cm, computeWorkgroupInfoForMatMul: () => Yv, computeWorkgroupSizeForConv2d: () => pm, flatDispatchLayout: () => X, isWebGPUSupported: () => lm, tilesFitEvenlyIntoShape: () => mae }); +var kp = (r15) => { let t8 = 1; - for (let e = 0; e < r.length; e++) - t8 *= r[e]; + for (let e = 0; e < r15.length; e++) + t8 *= r15[e]; return t8; }; -function mae(r, t8) { - if (r.length !== t8.length) - throw new Error(`Cannot compute whether rank ${r.length} tiles fit evenly into rank ${t8.length} shape - ranks must match.`); - return t8.every((e, o) => e % r[o] === 0); +function mae(r15, t8) { + if (r15.length !== t8.length) + throw new Error(`Cannot compute whether rank ${r15.length} tiles fit evenly into rank ${t8.length} shape - ranks must match.`); + return t8.every((e, o) => e % r15[o] === 0); } -function H(r, t8, e = [1, 1, 1], o = [1, 1, 1]) { - let [n, s, a] = [Math.ceil(Ap(r.x.map((i) => t8[i])) / (e[0] * o[0])), r.y ? Math.ceil(Ap(r.y.map((i) => t8[i])) / (e[1] * o[1])) : 1, r.z ? Math.ceil(Ap(r.z.map((i) => t8[i])) / (e[2] * o[2])) : 1]; +function H(r15, t8, e = [1, 1, 1], o = [1, 1, 1]) { + let [n, s, a] = [Math.ceil(kp(r15.x.map((i) => t8[i])) / (e[0] * o[0])), r15.y ? Math.ceil(kp(r15.y.map((i) => t8[i])) / (e[1] * o[1])) : 1, r15.z ? Math.ceil(kp(r15.z.map((i) => t8[i])) / (e[2] * o[2])) : 1]; return [n, s, a]; } -function Xv(r, t8, e, o = false) { +function Yv(r15, t8, e, o = false) { let n = [8, 8, 1], s = [4, 4, 1]; - return o || (r <= 8 && (s[1] = 1), t8 <= 16 && e <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; + return o || (r15 <= 8 && (s[1] = 1), t8 <= 16 && e <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; } -function lm(r, t8, e = false) { +function pm(r15, t8, e = false) { if (e) return [8, 8, 1]; - let o = Ap(r.x.map((s) => t8[s])), n = Ap(r.y.map((s) => t8[s])); + let o = kp(r15.x.map((s) => t8[s])), n = kp(r15.y.map((s) => t8[s])); return o <= 4 ? [4, 16, 1] : n <= 4 ? [16, 4, 1] : [16, 16, 1]; } -function mm(r, t8, e = false) { +function cm(r15, t8, e = false) { if (e) return [4, 4, 1]; - let o = Ap(r.x.map((s) => t8[s])), n = Ap(r.y.map((s) => t8[s])); + let o = kp(r15.x.map((s) => t8[s])), n = kp(r15.y.map((s) => t8[s])); return o <= 4 ? [1, 2, 1] : n <= 4 ? [2, 1, 1] : [2, 2, 1]; } -function X(r) { - return { x: r.map((t8, e) => e) }; +function X(r15) { + return { x: r15.map((t8, e) => e) }; } -function jg(r) { - if (r === "float32" || r === "int32" || r === "bool" || r === "string") +function qg(r15) { + if (r15 === "float32" || r15 === "int32" || r15 === "bool" || r15 === "string") return 4; - if (r === "complex64") + if (r15 === "complex64") return 8; - throw new Error(`Unknown dtype ${r}`); + throw new Error(`Unknown dtype ${r15}`); } -function dm() { - return (typeof window != "undefined" || typeof WorkerGlobalScope != "undefined") && !!navigator.gpu; +function lm() { + return !!(globalThis && globalThis.navigator && globalThis.navigator.gpu); } -function fm(r, t8) { - Array.isArray(r) || (r = [r]), r.forEach((e) => { +function mm(r15, t8) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((e) => { e != null && y.assert(e.dtype !== "complex64", () => `${t8} does not support complex64 tensors in the WebGPU backend.`); }); } -var Lo; -(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"; -})(Lo || (Lo = {})); +var Mo; +(function(r15) { + r15[r15.MatMulReduceProgram = 0] = "MatMulReduceProgram", r15[r15.MatMulSplitKProgram = 1] = "MatMulSplitKProgram", r15[r15.MatMulSmallOutputSizeProgram = 2] = "MatMulSmallOutputSizeProgram", r15[r15.MatMulPackedProgram = 3] = "MatMulPackedProgram", r15[r15.MatMulMax = 4] = "MatMulMax"; +})(Mo || (Mo = {})); var dae = A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); -var fae = (r, t8) => { - let e = r.limits.maxComputeWorkgroupsPerDimension, o = t8.dispatchLayout, n = t8.dispatch; +var fae = (r15, t8) => { + let e = r15.limits.maxComputeWorkgroupsPerDimension, o = t8.dispatchLayout, n = t8.dispatch; if (n.every((a) => a <= e)) return n; y.assert(n[0] > e && 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 > e ? (s = Math.ceil(Math.cbrt(n[0])), y.assert(s <= e, () => "Total dispatch size exceeds WebGPU maximum."), [s, s, s]) : [s, s, 1]; }; -var Tu = class extends ao { +var Kc = class r14 extends so { nextDataId() { - return Tu.nextDataId++; + return r14.nextDataId++; } constructor(t8, e) { - 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()) + 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, !lm()) throw new Error("WebGPU is not supported on this device"); - this.pipelineCache = {}, this.device = t8, this.queue = t8.queue, this.commandEncoder = null, this.computePassEncoder = null, this.adapterInfo = new Hg(e), 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 zo(this, pr()), 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: t8, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); + this.pipelineCache = {}, this.device = t8, this.queue = t8.queue, this.commandEncoder = null, this.computePassEncoder = null, this.adapterInfo = new Gg(e), this.supportTimestampQuery = this.device.features.has("timestamp-query"), this.thresholdToIncreaseWorkgroups = this.adapterInfo.intelGPUGeneration >= 12 ? 16 : 8, this.bufferManager = new Hg(this.device), this.textureManager = new Kg(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: t8, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); } floatPrecision() { return 32; @@ -27383,12 +27386,12 @@ var Tu = class extends ao { throw new Error("Cannot write to a complex64 dtype. "); let s = { id: this.nextDataId() }; this.tensorMap.set(s, { dtype: o, shape: e, values: null, refCount: 1, external: t8.zeroCopy }); - let a = this.tensorMap.get(s), i = jg(a.dtype) * y.sizeFromShape(a.shape); + let a = this.tensorMap.get(s), i = qg(a.dtype) * y.sizeFromShape(a.shape); if (t8.buffer.size < i) throw new Error(`GPUBuffer size(${t8.buffer.size}) is smaller than tensor size(${i})!`); if ((t8.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 t8.zeroCopy !== true && (n = this.copyBuffer(n)), a.resource = n, pr().makeTensorFromDataId(s, e, o, this); + return t8.zeroCopy !== true && (n = this.copyBuffer(n)), a.resource = n, ur().makeTensorFromDataId(s, e, o, this); } readToGPU(t8) { let e = this.tensorMap.get(t8), { values: o, dtype: n, shape: s, resource: a } = e; @@ -27398,7 +27401,7 @@ var Tu = class extends ao { 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 = pr().makeTensorFromTensorInfo(l), d = this.tensorMap.get(l.dataId); + let l = this.makeTensorInfo(s, n), m = ur().makeTensorFromTensorInfo(l), d = this.tensorMap.get(l.dataId); return d.resource = c, { tensorRef: m, buffer: c }; } bufferSync(t8) { @@ -27413,7 +27416,7 @@ var Tu = class extends ao { return me(t8.shape, t8.dtype, e); } async time(t8) { - !this.supportTimestampQuery && !this.hasTimestampQueryWarned && (console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."), this.hasTimestampQueryWarned = true); + !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 = true); let e = this.activeTimers, o = [], n = false; this.programTimersStack == null ? (this.programTimersStack = o, n = true) : this.activeTimers.push(o), this.activeTimers = o, t8(); 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); @@ -27434,7 +27437,7 @@ var Tu = class extends ao { let e = this.tensorMap.get(t8); if (e.resource != null) return; - let o = jg(e.dtype) * y.sizeFromShape(e.shape), n, s = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; + let o = qg(e.dtype) * y.sizeFromShape(e.shape), n, s = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; if (e.values) { if (n = this.bufferManager.acquireBuffer(o, s, true), n.mapState === "unmapped") { let a = this.bufferManager.acquireBuffer(o, GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, true, false), i = a.getMappedRange(); @@ -27494,9 +27497,9 @@ var Tu = class extends ao { 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: t8.variableNames[u] }; }); - t8.shaderKey = QB(t8, a, s); + t8.shaderKey = ZB(t8, a, s); let i = A().getBool("WEBGPU_ENGINE_COMPILE_ONLY"); - return t8.shaderKey in this.pipelineCache || (this.pipelineCache[t8.shaderKey] = YB(this.device, t8, a, s, i)), t8.pipeline = this.pipelineCache[t8.shaderKey], i || this.recordAndSubmit(t8, s, e, n), s; + return t8.shaderKey in this.pipelineCache || (this.pipelineCache[t8.shaderKey] = QB(this.device, t8, a, s, i)), t8.pipeline = this.pipelineCache[t8.shaderKey], i || this.recordAndSubmit(t8, s, e, n), s; } recordAndSubmit(t8, e, o, n) { if (t8.pipeline instanceof Promise) @@ -27526,7 +27529,7 @@ var Tu = class extends ao { let u = this.device.createBindGroup({ layout: t8.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, queryIndex: 0, location: "beginning" }, { querySet: this.querySet, queryIndex: 1, location: "end" }], this.computePassEncoder = this.commandEncoder.beginComputePass(l)) : this.computePassEncoder || (this.computePassEncoder = this.commandEncoder.beginComputePass(l)), this.computePassEncoder.setPipeline(t8.pipeline), this.computePassEncoder.setBindGroup(0, u), this.computePassEncoder.dispatchWorkgroups(t8.dispatch[0], t8.dispatch[1], t8.dispatch[2]), this.dispatchCountInPass++, (c || A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchCountInPass || t8.pixelsOpType === Ii.DRAW) && (this.endComputePassEncoder(), c ? this.activeTimers.push({ name: t8.constructor.name, query: this.getQueryTime() }) : this.submitQueue()); + 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(t8.pipeline), this.computePassEncoder.setBindGroup(0, u), this.computePassEncoder.dispatchWorkgroups(t8.dispatch[0], t8.dispatch[1], t8.dispatch[2]), this.dispatchCountInPass++, (c || A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchCountInPass || t8.pixelsOpType === Ci.DRAW) && (this.endComputePassEncoder(), c ? this.activeTimers.push({ name: t8.constructor.name, query: this.getQueryTime() }) : this.submitQueue()); } async getQueryTime() { if (!this.supportTimestampQuery) @@ -27547,18 +27550,18 @@ var Tu = class extends ao { this.disposed || (this.querySet != null && this.querySet.destroy(), this.bufferManager.dispose(), this.textureManager.dispose(), this.disposed = true); } }; -Tu.nextDataId = 0; -dm() && su("webgpu", async () => { - let r = { powerPreference: A().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, t8 = await navigator.gpu.requestAdapter(r), e = {}, o = []; +Kc.nextDataId = 0; +lm() && tu("webgpu", async () => { + let r15 = { powerPreference: A().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, t8 = await navigator.gpu.requestAdapter(r15), e = {}, o = []; t8.features.has("timestamp-query") && o.push("timestamp-query"), t8.features.has("bgra8unorm-storage") && o.push(["bgra8unorm-storage"]), e.requiredFeatures = o; let n = t8.limits; e.requiredLimits = { maxComputeWorkgroupStorageSize: n.maxComputeWorkgroupStorageSize, maxComputeWorkgroupsPerDimension: n.maxComputeWorkgroupsPerDimension, maxStorageBufferBindingSize: n.maxStorageBufferBindingSize, maxBufferSize: n.maxBufferSize, maxComputeWorkgroupSizeX: n.maxComputeWorkgroupSizeX, maxComputeInvocationsPerWorkgroup: n.maxComputeInvocationsPerWorkgroup }; let s = await t8.requestDevice(e), a = await t8.requestAdapterInfo(); - return new Tu(s, a); + return new Kc(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"; +(function(r15) { + r15[r15.ADD = 0] = "ADD", r15[r15.ATAN2 = 1] = "ATAN2", r15[r15.COMPLEX_MULTIPLY_IMAG = 2] = "COMPLEX_MULTIPLY_IMAG", r15[r15.COMPLEX_MULTIPLY_REAL = 3] = "COMPLEX_MULTIPLY_REAL", r15[r15.DIV = 4] = "DIV", r15[r15.ELU_DER = 5] = "ELU_DER", r15[r15.EQUAL = 6] = "EQUAL", r15[r15.FLOOR_DIV = 7] = "FLOOR_DIV", r15[r15.GREATER = 8] = "GREATER", r15[r15.GREATER_EQUAL = 9] = "GREATER_EQUAL", r15[r15.LESS = 10] = "LESS", r15[r15.LESS_EQUAL = 11] = "LESS_EQUAL", r15[r15.LOGICAL_AND = 12] = "LOGICAL_AND", r15[r15.LOGICAL_OR = 13] = "LOGICAL_OR", r15[r15.MAX = 14] = "MAX", r15[r15.MIN = 15] = "MIN", r15[r15.MOD = 16] = "MOD", r15[r15.MUL = 17] = "MUL", r15[r15.NOT_EQUAL = 18] = "NOT_EQUAL", r15[r15.POW = 19] = "POW", r15[r15.PRELU = 20] = "PRELU", r15[r15.SQUARED_DIFFERENCE = 21] = "SQUARED_DIFFERENCE", r15[r15.SUB = 22] = "SUB"; })(fe || (fe = {})); var hae = "let resultTemp = a + b;"; var gae = "let resultTemp = atan2(a, b);"; @@ -27674,10 +27677,10 @@ var Vae = ` `; var Wae = "let resultTemp = (a - b) * (a - b);"; var Uae = "let resultTemp = a - b;"; -function Qc(r, t8) { +function qc(r15, t8) { let e; do { - switch (r) { + switch (r15) { case fe.ATAN2: e = gae; break; @@ -27717,7 +27720,7 @@ function Qc(r, t8) { } `; } while (false); - switch (r) { + switch (r15) { case fe.ADD: e = hae; break; @@ -27774,8 +27777,8 @@ function Qc(r, t8) { `; } 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"; +(function(r15) { + r15[r15.ABS = 0] = "ABS", r15[r15.ACOS = 1] = "ACOS", r15[r15.ACOSH = 2] = "ACOSH", r15[r15.ASIN = 3] = "ASIN", r15[r15.ASINH = 4] = "ASINH", r15[r15.ATAN = 5] = "ATAN", r15[r15.ATANH = 6] = "ATANH", r15[r15.CEIL = 7] = "CEIL", r15[r15.COS = 8] = "COS", r15[r15.COSH = 9] = "COSH", r15[r15.ELU = 10] = "ELU", r15[r15.ERF = 11] = "ERF", r15[r15.EXP = 12] = "EXP", r15[r15.EXPM1 = 13] = "EXPM1", r15[r15.FLOOR = 14] = "FLOOR", r15[r15.IS_FINITE = 15] = "IS_FINITE", r15[r15.IS_INF = 16] = "IS_INF", r15[r15.IS_NAN = 17] = "IS_NAN", r15[r15.LINEAR = 18] = "LINEAR", r15[r15.LOG = 19] = "LOG", r15[r15.LOG1P = 20] = "LOG1P", r15[r15.LOGICAL_NOT = 21] = "LOGICAL_NOT", r15[r15.NEG = 22] = "NEG", r15[r15.RELU = 23] = "RELU", r15[r15.RELU6 = 24] = "RELU6", r15[r15.LEAKYRELU = 25] = "LEAKYRELU", r15[r15.RECIPROCAL = 26] = "RECIPROCAL", r15[r15.ROUND = 27] = "ROUND", r15[r15.RSQRT = 28] = "RSQRT", r15[r15.SELU = 29] = "SELU", r15[r15.SIGMOID = 30] = "SIGMOID", r15[r15.SIGN = 31] = "SIGN", r15[r15.SIN = 32] = "SIN", r15[r15.SINH = 33] = "SINH", r15[r15.SOFTPLUS = 34] = "SOFTPLUS", r15[r15.SQRT = 35] = "SQRT", r15[r15.SQUARE = 36] = "SQUARE", r15[r15.STEP = 37] = "STEP", r15[r15.TAN = 38] = "TAN", r15[r15.TANH = 39] = "TANH", r15[r15.TO_INT = 40] = "TO_INT"; })(Z || (Z = {})); var Gae = "return abs(a);"; var Hae = ` @@ -27928,8 +27931,8 @@ var Aie = ` return sign(a) * (1.0 - e2x) / (1.0 + e2x); `; var Fie = "return f32(i32((a)));"; -function vi(r, t8) { - switch (r) { +function wi(r15, t8) { + switch (r15) { case Z.ABS: return Gae; case Z.ACOS: @@ -28013,29 +28016,29 @@ function vi(r, t8) { case Z.TO_INT: return Fie; default: - throw new Error(`BinaryType ${r} is not implemented!`); + throw new Error(`BinaryType ${r15} is not implemented!`); } } -function fr(r, t8 = false, e = false, o = 3) { - if (r === null) +function dr(r15, t8 = false, e = false, o = 3) { + if (r15 === null) return ""; let n = ""; - if (r === "linear") - n = vi(Z.LINEAR); - else if (r === "relu") - n = vi(Z.RELU, e); - else if (r === "elu") - n = vi(Z.ELU, e); - else if (r === "relu6") - n = vi(Z.RELU6, e); - else if (r === "prelu") - n = Qc(fe.PRELU, e); - else if (r === "sigmoid") - n = vi(Z.SIGMOID, e); - else if (r === "leakyrelu") - n = vi(Z.LEAKYRELU, e); + if (r15 === "linear") + n = wi(Z.LINEAR); + else if (r15 === "relu") + n = wi(Z.RELU, e); + else if (r15 === "elu") + n = wi(Z.ELU, e); + else if (r15 === "relu6") + n = wi(Z.RELU6, e); + else if (r15 === "prelu") + n = qc(fe.PRELU, e); + else if (r15 === "sigmoid") + n = wi(Z.SIGMOID, e); + else if (r15 === "leakyrelu") + n = wi(Z.LEAKYRELU, e); else - throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`); + throw new Error(`Activation ${r15} has not been implemented for the WebGPU backend.`); let a = Ae(e ? 4 : 1), i = ""; return t8 ? i = ` fn activation(a : ${a}, coords : vec${o}) -> ${a} { @@ -28046,23 +28049,23 @@ function fr(r, t8 = false, e = false, o = 3) { ${n} }`, i; } -function Zr(r, t8) { +function Qr(r15, t8) { return ` - ${r ? "value = value + getBiasByOutputCoords(coords);" : ""} + ${r15 ? "value = value + getBiasByOutputCoords(coords);" : ""} ${t8 ? "value = activation(value, coords);" : ""} `; } -function Qv(r, t8, e = false, o = false, n = false, s = 1) { - y.assert(r && s === 1 || !r, () => `transposeA ${r} is not compatible with component size ${s}`); +function Zv(r15, t8, e = false, o = false, n = false, s = 1) { + y.assert(r15 && s === 1 || !r15, () => `transposeA ${r15} is not compatible with component size ${s}`); let a = ` - ${r ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} + ${r15 ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} `, i = t8 ? "value = getB(batch, col, row);" : "value = getB(batch, row, col);"; return ` fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} { var value = ${Ae(s)}(0.0); ${e && n ? a : ` - ${r ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} + ${r15 ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} { ${a} } @@ -28077,21 +28080,21 @@ function Qv(r, t8, e = false, o = false, n = false, s = 1) { } `; } -function hm(r, t8, e, o, n = false, s = false, a = false, i = 1) { +function dm(r15, t8, e, o, n = false, s = false, a = false, i = 1) { return ` - ${Qv(e, o, n, s, a, i)} + ${Zv(e, o, n, s, a, i)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) { ${n && s ? "" : "if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${Zr(r, t8)} + ${Qr(r15, t8)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } `; } -var Pie = (r, t8) => r ? ` +var Pie = (r15, t8) => r15 ? ` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${t8}); @@ -28100,8 +28103,8 @@ var Pie = (r, t8) => r ? ` globalRow + innerRow, kStart + inputCol * ${t8}); `; -var Oie = (r, t8, e, o) => { - if (r) +var Oie = (r15, t8, e, o) => { + if (r15) return ` for (var k = 0; k < ${o}; k++) { let BCached0 = mm_Bsub[k][tileCol]; @@ -28124,13 +28127,13 @@ var Oie = (r, t8, e, o) => { }`; } }; -function Fp(r, t8, e = false, o = 32, n = false, s = 32, a = false) { - let i = t8[1] * r[1], p = t8[0] * r[0], u = e ? i : o, c = e ? o : i, l = u / t8[0], m = o / t8[1], d = r[1], f = r[0]; - return y.assert((e && l === 4 && r[1] === 4 || !e && (l === 3 || l === 4)) && u % t8[0] === 0 && o % t8[1] === 0 && r[0] === 4, () => `If transposeA ${e} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. +function Np(r15, t8, e = false, o = 32, n = false, s = 32, a = false) { + let i = t8[1] * r15[1], p = t8[0] * r15[0], u = e ? i : o, c = e ? o : i, l = u / t8[0], m = o / t8[1], d = r15[1], f = r15[0]; + return y.assert((e && l === 4 && r15[1] === 4 || !e && (l === 3 || l === 4)) && u % t8[0] === 0 && o % t8[1] === 0 && r15[0] === 4, () => `If transposeA ${e} is true, innerElementSize ${l} and workPerThread[1] ${r15[1]} must be 4. Otherwise, innerElementSize ${l} must be 3 or 4. - tileAWidth ${u} must be divisible by workgroupSize[0]${t8[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${t8[1]}. colPerThread ${r[0]} must be 4.`), ` + tileAWidth ${u} must be divisible by workgroupSize[0]${t8[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${t8[1]}. colPerThread ${r15[0]} must be 4.`), ` var mm_Asub : array, ${u / l}>, ${c}>; - var mm_Bsub : array, ${p / r[0]}>, ${o}>; + var mm_Bsub : array, ${p / r15[0]}>, ${o}>; ${G()} { let localRow = i32(localId.y); @@ -28178,7 +28181,7 @@ function Fp(r, t8, e = false, o = 32, n = false, s = 32, a = false) { } }`; } -var JB = (r) => r ? ` +var ez = (r15) => r15 ? ` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -28187,11 +28190,11 @@ var JB = (r) => r ? ` globalRowStart + inputRow, kStart + inputCol); `; -var Mie = (r) => r ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; -function Pp(r, t8, e = false, o = 32, n = false, s = 32, a = false, i = false) { - let p = r[1] * t8[1], u = r[0] * t8[0], c = e ? p : o, l = e ? o : p; +var Mie = (r15) => r15 ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; +function Tp(r15, t8, e = false, o = 32, n = false, s = 32, a = false, i = false) { + let p = r15[1] * t8[1], u = r15[0] * t8[0], c = e ? p : o, l = e ? o : p; y.assert(l % t8[1] === 0 && c % t8[0] === 0 && o % t8[1] === 0, () => `tileAHight ${l} must be divisible by workgroupSize[1]${t8[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t8[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t8[1]}`); - let m = l / t8[1], d = c / t8[0], f = o / t8[1], h = r[1], g = r[0], x = a ? ` + let m = l / t8[1], d = c / t8[0], f = o / t8[1], h = r15[1], g = r15[0], x = a ? ` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${p}; @@ -28202,7 +28205,7 @@ function Pp(r, t8, e = false, o = 32, n = false, s = 32, a = false, i = false) { // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${t8[1]}) { for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t8[0]}) { - ${JB(e)} + ${ez(e)} } } // Load one tile of B into local memory. @@ -28257,7 +28260,7 @@ function Pp(r, t8, e = false, o = 32, n = false, s = 32, a = false, i = false) { for (var innerCol = 0; innerCol < ${d}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${JB(e)} + ${ez(e)} } } @@ -28323,7 +28326,7 @@ function Pp(r, t8, e = false, o = 32, n = false, s = 32, a = false, i = false) { } `; } -var Lie = (r) => r ? ` +var Lie = (r15) => r15 ? ` mm_readA(batchA, colA, globalRow), mm_readA(batchA, colA + 1, globalRow), mm_readA(batchA, colA + 2, globalRow), @@ -28334,11 +28337,11 @@ var Lie = (r) => r ? ` mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) `; -function Bie(r, t8 = false) { - y.assert(r[1] === 1 && r[2] === 1, () => `A linear work group size is required. But got ${r}.`); - let e = r[0] * 4; +function Bie(r15, t8 = false) { + y.assert(r15[1] === 1 && r15[2] === 1, () => `A linear work group size is required. But got ${r15}.`); + let e = r15[0] * 4; return ` - var mm_Asub : array, ${r[0]}>; + var mm_Asub : array, ${r15[0]}>; ${G()} { let tileCol = i32(localId.x); @@ -28378,14 +28381,14 @@ function Bie(r, t8 = false) { } `; } -var Xg = class { +var jg = class { constructor(t8, e, 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 = e, this.dispatchLayout = { x: [2], y: [1], z: [0] }; let u = o ? t8[1] : t8[2]; if (this.isVec4 = (u % 4 === 0 && !o || e[1] % 4 === 0 && o) && e[2] % 4 === 0 && !n, this.outputComponent = this.isVec4 ? 4 : 1, this.isVectorA = e[1] === 1 && !o, !this.isVec4 && this.isVectorA) this.elementsPerThread = [1, 1, 1], this.workgroupSize = [32, 1, 1]; else { - let m = Xv(e[1], u, e[2], o); + let m = Yv(e[1], u, e[2], o); this.workgroupSize = m.workgroupSize, this.elementsPerThread = m.elementsPerThread; } this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread); @@ -28400,15 +28403,15 @@ var Xg = class { } getUserCode() { return ` - ${fr(this.activation, this.hasPreluActivationWeights, this.isVec4)} - ${hm(this.addBias, this.activation, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} - ${this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, true) : this.isVectorA ? Bie(this.workgroupSize, this.transposeA) : Pp(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads, true)} + ${dr(this.activation, this.hasPreluActivationWeights, this.isVec4)} + ${dm(this.addBias, this.activation, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} + ${this.isVec4 ? Np(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, true) : this.isVectorA ? Bie(this.workgroupSize, this.transposeA) : Tp(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads, true)} `; } }; -function zie(r) { +function zie(r15) { return ` - var sumValues : array; + var sumValues : array; ${G()} { let coords = getOutputCoords(); let batch = coords[0]; @@ -28418,7 +28421,7 @@ function zie(r) { let col = coords[2]; var sum = 0.0; let Length = uniforms.dimInner; - for (var k = i32(localId.x); k < Length; k = k + ${r}) { + for (var k = i32(localId.x); k < Length; k = k + ${r15}) { let dataA = mm_readA(batchA, row, k); let dataB = mm_readB(batchB, k, col); sum = sum + dataA * dataB; @@ -28426,7 +28429,7 @@ function zie(r) { sumValues[localId.x] = sum; workgroupBarrier(); - for(var currentSize = ${r / 2}u; currentSize > 1u; + for(var currentSize = ${r15 / 2}u; currentSize > 1u; currentSize = currentSize / 2u) { if (localId.x < currentSize) { @@ -28442,7 +28445,7 @@ function zie(r) { } `; } -var Yg = class { +var Xg = class { constructor(t8, e = false, o = false, 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 = t8, this.dispatchLayout = { x: [], y: [1, 2], z: [0] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize); let i = n != null, p = a != null; @@ -28450,14 +28453,14 @@ var Yg = class { } getUserCode() { return ` - ${fr(this.activation, this.hasPreluActivationWeights)} - ${hm(this.addBias, this.activation, this.transposeA, this.transposeB)} + ${dr(this.activation, this.hasPreluActivationWeights)} + ${dm(this.addBias, this.activation, this.transposeA, this.transposeB)} ${zie(this.workgroupSize[0])} `; } }; -function Vie(r) { - let t8 = r[1], e = r[0], o = t8 > e ? t8 : e; +function Vie(r15) { + let t8 = r15[1], e = r15[0], o = t8 > e ? t8 : e; return ` var mm_Asub : array, ${t8}>; var mm_Bsub : array, ${o}>; @@ -28512,7 +28515,7 @@ function Vie(r) { } `; } -var Qg = class { +var Yg = class { constructor(t8, e, o, n = false, s = false, a = null, i = null, p = null) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [16, 8, 1], this.outputShape = o, this.dispatchLayout = { x: [2], y: [1], z: [0] }, this.dispatch = [Math.ceil(o[2] / this.workgroupSize[0]), Math.ceil(o[1] / this.workgroupSize[1]), o[0]]; let u = a != null; @@ -28522,13 +28525,13 @@ var Qg = class { } getUserCode() { return ` - ${fr(this.activation, this.hasPreluActivationWeights)} - ${hm(this.addBias, this.activation, this.transposeA, this.transposeB)} + ${dr(this.activation, this.hasPreluActivationWeights)} + ${dm(this.addBias, this.activation, this.transposeA, this.transposeB)} ${Vie(this.workgroupSize)} `; } }; -var Zg = class { +var Qg = class { constructor(t8, e, o = false, n = false) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [8, 8, 1], this.atomic = true, this.splitedDimInner = 128, y.assert(t8[0] === 1, () => "MatMulSplitKProgram only supports batch = 1."), this.outputShape = t8, this.dispatchLayout = { x: [2], y: [1], z: [0, 3] }; let s = (o && this.outputShape[1] % 4 === 0 || !o && e % 4 === 0) && this.outputShape[2] % 4 === 0; @@ -28537,7 +28540,7 @@ var Zg = class { getUserCode() { let t8 = this.outputComponent; return ` - ${Qv(false, this.transposeB, false, false, false, t8)} + ${Zv(false, this.transposeB, false, false, false, t8)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(t8)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -28545,33 +28548,33 @@ var Zg = class { // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${t8}; i = i + 1) { - ${Qr("&result[flatIndex + i]", `${t8 > 1 ? "value[i]" : "value"}`, "float32")} + ${Yr("&result[flatIndex + i]", `${t8 > 1 ? "value[i]" : "value"}`, "float32")} } } } - ${t8 === 4 ? Fp(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner) : Pp(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner)} + ${t8 === 4 ? Np(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner) : Tp(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner)} `; } }; -var Jg = class { +var Zg = class { constructor(t8, e = null, o = null, n = null) { this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.addBias = e != 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 ` - ${fr(this.activation, this.hasPreluActivationWeights)} + ${dr(this.activation, this.hasPreluActivationWeights)} ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${Zr(this.addBias, this.activation)} + ${Qr(this.addBias, this.activation)} setOutputAtIndex(index, value); } } `; } }; -var ex = class { +var Jg = class { constructor(t8) { this.variableNames = [], this.outputShape = [], this.uniforms = "value : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "fill"; } @@ -28585,38 +28588,38 @@ var ex = class { `; } }; -function kt(r) { - let { backend: t8, attrs: e } = r, { shape: o, value: n } = e, { dtype: s } = e; +function vt(r15) { + let { backend: t8, attrs: e } = r15, { shape: o, value: n } = e, { dtype: s } = e; if (s = s || y.inferDtype(n), s === "string") { let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), t8.makeTensorInfo(o, s, a); } else { - let a = new ex(o), i = [{ type: "float32", data: [n] }]; + let a = new Jg(o), i = [{ type: "float32", data: [n] }]; return t8.runWebGPUProgram(a, [], s, i); } } -var ez = { kernelName: sa, backendName: "webgpu", kernelFunc: kt }; -function pe(r) { - let { inputs: t8, attrs: e } = r, { x: o } = t8, { shape: n } = e, 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 tz = { kernelName: sa, backendName: "webgpu", kernelFunc: vt }; +function pe(r15) { + let { inputs: t8, attrs: e } = r15, { x: o } = t8, { shape: n } = e, 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.`), r15.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; } -var tz = { kernelName: da, backendName: "webgpu", kernelFunc: pe }; -function Op({ a: r, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r.shape.length, c = t8.shape.length, l = e ? r.shape[u - 2] : r.shape[u - 1], m = o ? t8.shape[c - 1] : t8.shape[c - 2], d = e ? r.shape[u - 1] : r.shape[u - 2], f = o ? t8.shape[c - 2] : t8.shape[c - 1], h = r.shape.slice(0, -2), g = t8.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Ir.assertAndGetBroadcastShape(r.shape.slice(0, -2), t8.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 ${t8.shape} and transposeA=${e} and transposeB=${o} must match.`); - let k = e ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], E = pe({ inputs: { x: r }, backend: n, attrs: { shape: k } }), R = pe({ inputs: { x: t8 }, backend: n, attrs: { shape: _ } }), D = [E, R], P = Math.max(x, b), O = [E, 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"); +var rz = { kernelName: da, backendName: "webgpu", kernelFunc: pe }; +function _p({ a: r15, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r15.shape.length, c = t8.shape.length, l = e ? r15.shape[u - 2] : r15.shape[u - 1], m = o ? t8.shape[c - 1] : t8.shape[c - 2], d = e ? r15.shape[u - 1] : r15.shape[u - 2], f = o ? t8.shape[c - 2] : t8.shape[c - 1], h = r15.shape.slice(0, -2), g = t8.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Sr.assertAndGetBroadcastShape(r15.shape.slice(0, -2), t8.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r15.shape} and ${t8.shape} and transposeA=${e} and transposeB=${o} must match.`); + let k = e ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], E = pe({ inputs: { x: r15 }, backend: n, attrs: { shape: k } }), R = pe({ inputs: { x: t8 }, backend: n, attrs: { shape: _ } }), D = [E, R], P = Math.max(x, b), O = [E, 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 = Lo.MatMulReduceProgram : P === 1 && m >= 2e3 ? U = Lo.MatMulSplitKProgram : U = Lo.MatMulSmallOutputSizeProgram : U = Lo.MatMulPackedProgram; + 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 Lo.MatMulReduceProgram: - L = new Yg(z, e, o, s, p, a); + case Mo.MatMulReduceProgram: + L = new Xg(z, e, o, s, p, a); break; - case Lo.MatMulSplitKProgram: { - if (B = kt({ backend: n, attrs: { shape: z, value: 0, dtype: r.dtype } }), L = new Zg(z, m, e, 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]; + case Mo.MatMulSplitKProgram: { + if (B = vt({ backend: n, attrs: { shape: z, value: 0, dtype: r15.dtype } }), L = new Qg(z, m, e, o), s || p) { + B = n.runWebGPUProgram(L, O, r15.dtype, M, B); + let Y = new Zg(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); @@ -28628,29 +28631,29 @@ function Op({ a: r, b: t8, transposeA: e, transposeB: o, backend: n, bias: s = n } break; } - case Lo.MatMulSmallOutputSizeProgram: - L = new Qg(k, _, z, e, o, s, p, a); + case Mo.MatMulSmallOutputSizeProgram: + L = new Yg(k, _, z, e, o, s, p, a); break; - case Lo.MatMulPackedProgram: + case Mo.MatMulPackedProgram: let q = n.adapterInfo.isIntel(); - L = new Xg(k, z, e, o, s, p, a, q); + L = new jg(k, z, e, 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); + 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); return j; } -function Wie(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; - return Op({ a: n, b: s, transposeA: p, transposeB: u, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); +function Wie(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = t8, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return _p({ a: n, b: s, transposeA: p, transposeB: u, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var rz = { kernelName: Io, backendName: "webgpu", kernelFunc: Wie }; -var gm = class { +var oz = { kernelName: So, backendName: "webgpu", kernelFunc: Wie }; +var fm = class { constructor(t8, e, o) { this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.workgroupSize = [128, 1, 1], this.size = true, this.outputShape = w.assertAndGetBroadcastShape(e, o), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `binaryOpComplex_${t8}`, this.op = t8; } @@ -28658,7 +28661,7 @@ var gm = class { return ` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${Qc(this.op, false)} + ${qc(this.op, false)} } ${G("index")} { @@ -28673,7 +28676,7 @@ var gm = class { `; } }; -var ki = class { +var Si = class { constructor(t8, e, o) { if (this.size = true, this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(e, o), this.dispatchLayout = X(this.outputShape), this.op = t8, this.useSharedMemoryWithA = e.length <= 1 && o.length > 1 && e[0] < 128, this.useSharedMemoryWithB = o.length <= 1 && e.length > 1 && o[0] < 128, this.useSharedMemoryWithA || this.useSharedMemoryWithB) this.outputComponent = 1, this.variableComponents = [1, 1], this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : e[0], this.shaderKey = `binary_${t8}_${this.lastDimensionSize}`, this.type = "shared", this.workgroupSize = [256, 1, 1]; @@ -28686,7 +28689,7 @@ var ki = class { getUserCode() { let t8, e = this.outputComponent === 4 ? "vec4" : "f32", o = ` fn binaryOperation(a : ${e}, b : ${e}) -> ${e} { - ${Qc(this.op, this.outputComponent === 4)} + ${qc(this.op, this.outputComponent === 4)} }; `; if (this.type === "shared") { @@ -28726,17 +28729,17 @@ var ki = class { return t8; } }; -function Ft(r) { - let { inputs: t8 } = r, { x: e } = t8; - return r.backend.incRef(e.dataId), { dataId: e.dataId, shape: e.shape, dtype: e.dtype }; +function At(r15) { + let { inputs: t8 } = r15, { x: e } = t8; + return r15.backend.incRef(e.dataId), { dataId: e.dataId, shape: e.shape, dtype: e.dtype }; } -var oz = { kernelName: wo, backendName: "webgpu", kernelFunc: Ft }; -function yo(r) { - let { inputs: t8, backend: e } = r, { real: o, imag: n } = t8, s = e.makeTensorInfo(o.shape, "complex64"), a = e.tensorMap.get(s.dataId), i = Ft({ inputs: { x: o }, backend: e }), p = Ft({ inputs: { x: n }, backend: e }); +var nz = { kernelName: Co, backendName: "webgpu", kernelFunc: At }; +function xo(r15) { + let { inputs: t8, backend: e } = r15, { real: o, imag: n } = t8, s = e.makeTensorInfo(o.shape, "complex64"), a = e.tensorMap.get(s.dataId), i = At({ inputs: { x: o }, backend: e }), p = At({ inputs: { x: n }, backend: e }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var nz = { kernelName: Fi, backendName: "webgpu", kernelFunc: yo }; -var Jr = class { +var sz = { kernelName: Ri, backendName: "webgpu", kernelFunc: xo }; +var Zr = class { constructor(t8, e, o = "") { this.variableNames = ["A"], this.size = true; let n = 128; @@ -28745,7 +28748,7 @@ var Jr = class { getUserCode() { return ` fn unaryOperation(a : f32) -> f32 { - ${vi(this.op, false)} + ${wi(this.op, false)} } ${G("index")} { if (index < uniforms.size) { @@ -28756,32 +28759,32 @@ var Jr = class { `; } }; -function ye({ opType: r, cpuKernelImpl: t8, dtype: e }) { +function ye({ opType: r15, cpuKernelImpl: t8, dtype: e }) { return ({ inputs: o, backend: n }) => { let { x: s } = o, a = n, i = e || s.dtype; if (a.shouldExecuteOnCPU([s]) && t8 != null) { let u = a.tensorMap.get(s.dataId), c = t8(u.values, i); return a.makeTensorInfo(s.shape, i, c); } - let p = new Jr(s.shape, r); + let p = new Zr(s.shape, r15); return a.runWebGPUProgram(p, [s], i); }; } -function et({ opType: r, cpuKernelImpl: t8, supportsComplex: e = false, dtype: o }) { +function et({ opType: r15, cpuKernelImpl: t8, supportsComplex: e = false, dtype: o }) { return ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; if (e && a.dtype === "complex64") { let l = p.tensorMap.get(a.dataId), m = p.tensorMap.get(i.dataId), d, f; - if (r !== fe.MUL) + 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 ki(r, a.shape, i.shape); + 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 Si(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 }]; + let g = new fm(fe.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), x = new fm(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 = yo({ inputs: { real: d, imag: f }, backend: p }); + 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); @@ -28789,20 +28792,20 @@ function et({ opType: r, cpuKernelImpl: t8, supportsComplex: e = false, dtype: o 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] = t8(a.shape, i.shape, d, f, u); return p.makeTensorInfo(g, u, h); } - let c = new ki(r, a.shape, i.shape); + let c = new Si(r15, a.shape, i.shape); return p.runWebGPUProgram(c, [a, i], u); }; } -var { addImpl: sz, castImpl: az, ceilImpl: iz, concatImpl: uz, equalImpl: pz, expImpl: cz, expm1Impl: lz, floorImpl: mz, floorDivImpl: dz, gatherNdImpl: fz, gatherV2Impl: hz, greaterEqualImpl: gz, greaterImpl: xz, lessEqualImpl: yz, lessImpl: bz, logImpl: Cz, maxImpl: wz, maximumImpl: Sz, minimumImpl: Iz, multiplyImpl: vz, negImpl: kz, notEqualImpl: Nz, prodImpl: Tz, rangeImpl: _z, rsqrtImpl: $z, scatterImpl: Ez, simpleAbsImpl: Rz, sliceImpl: Dz, stridedSliceImpl: Az, stringNGramsImpl: Fz, subImpl: Pz, tileImpl: Oz, topKImpl: Mz, transposeImpl: Lz, uniqueImpl: HPt } = Tc; -var Uie = ye({ opType: Z.ABS, cpuKernelImpl: Rz }); -var Bz = { kernelName: Xs, backendName: "webgpu", kernelFunc: Uie }; +var { addImpl: az, castImpl: iz, ceilImpl: uz, concatImpl: pz, equalImpl: cz, expImpl: lz, expm1Impl: mz, floorImpl: dz, floorDivImpl: fz, gatherNdImpl: hz, gatherV2Impl: gz, greaterEqualImpl: xz, greaterImpl: yz, lessEqualImpl: bz, lessImpl: Cz, logImpl: wz, maxImpl: Sz, maximumImpl: Iz, minimumImpl: vz, multiplyImpl: kz, negImpl: Nz, notEqualImpl: Tz, prodImpl: _z, rangeImpl: $z, rsqrtImpl: Ez, scatterImpl: Rz, simpleAbsImpl: Dz, sliceImpl: Az, stridedSliceImpl: Fz, stringNGramsImpl: Pz, subImpl: Oz, tileImpl: Mz, topKImpl: Lz, transposeImpl: Bz, uniqueImpl: KPt } = wc; +var Uie = ye({ opType: Z.ABS, cpuKernelImpl: Dz }); +var zz = { kernelName: Xs, backendName: "webgpu", kernelFunc: Uie }; var Gie = ye({ opType: Z.ACOS }); -var zz = { kernelName: Wo, backendName: "webgpu", kernelFunc: Gie }; +var Vz = { kernelName: Vo, backendName: "webgpu", kernelFunc: Gie }; var Hie = ye({ opType: Z.ACOSH }); -var Vz = { kernelName: Uo, backendName: "webgpu", kernelFunc: Hie }; -var Kie = et({ opType: fe.ADD, cpuKernelImpl: sz, supportsComplex: true }); -var Wz = { kernelName: uo, backendName: "webgpu", kernelFunc: Kie }; -var tx = class { +var Wz = { kernelName: Wo, backendName: "webgpu", kernelFunc: Hie }; +var Kie = et({ opType: fe.ADD, cpuKernelImpl: az, supportsComplex: true }); +var Uz = { kernelName: io, backendName: "webgpu", kernelFunc: Kie }; +var ex = class { constructor(t8) { this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8[0], this.variableNames = t8.map((e, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "addN"; } @@ -28827,15 +28830,15 @@ var tx = class { `; } }; -function qie(r) { - let { inputs: t8, backend: e } = r, o = t8; +function qie(r15) { + let { inputs: t8, backend: e } = r15, o = t8; if (o.length === 1) - return Ft({ inputs: { x: o[0] }, backend: e }); - let n = o.map((i) => i.dtype).reduce((i, p) => dt(i, p)), s = o.map((i) => i.shape), a = new tx(s); + return At({ inputs: { x: o[0] }, backend: e }); + let n = o.map((i) => i.dtype).reduce((i, p) => dt(i, p)), s = o.map((i) => i.shape), a = new ex(s); return e.runWebGPUProgram(a, o, n); } -var Uz = { kernelName: Go, backendName: "webgpu", kernelFunc: qie }; -var rx = class { +var Gz = { kernelName: Uo, backendName: "webgpu", kernelFunc: qie }; +var tx = class { constructor(t8, e) { this.variableNames = ["A"], this.workgroupSize = [16, 16, 1]; let o = new Array(t8.length); @@ -28868,7 +28871,7 @@ var rx = class { `; } }; -var ox = class { +var rx = class { constructor(t8, e) { this.variableNames = ["A"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true; let o = new Array(t8.length); @@ -28877,7 +28880,7 @@ var ox = class { this.outputShape = o, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.newDim = e, this.shaderKey = `transpose_${e}`; } getUserCode() { - let t8 = ht(this.outputShape.length), e = Zv(this.newDim); + let t8 = ft(this.outputShape.length), e = Jv(this.newDim); return ` ${G("index")} { for(var i = 0; i < ${this.workPerThread}; i = i + 1) { @@ -28892,32 +28895,32 @@ var ox = class { `; } }; -function Zv(r) { - let t8 = r.length; +function Jv(r15) { + let t8 = r15.length; if (t8 > 6) throw Error(`Transpose for rank ${t8} is not yet supported`); let e = new Array(t8); - for (let o = 0; o < r.length; o++) - e[r[o]] = `coords.${Mo(o)}`; + for (let o = 0; o < r15.length; o++) + e[r15[o]] = `coords.${Oo(o)}`; return e.join(); } -function yr(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { perm: s } = o, a = e, i = n.shape.length, p = new Array(i); +function xr(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { perm: s } = o, a = e, i = n.shape.length, p = new Array(i); for (let c = 0; c < p.length; c++) p[c] = n.shape[s[c]]; if (e.shouldExecuteOnCPU([n])) { - let l = a.tensorMap.get(n.dataId).values, m = Lz(l, n.shape, n.dtype, s, p); + let l = a.tensorMap.get(n.dataId).values, m = Bz(l, n.shape, n.dtype, s, p); return e.makeTensorInfo(p, n.dtype, m); } if (n.shape.length === 2 && y.arraysEqual(s, [1, 0])) { - let c = new rx(n.shape, s); + let c = new tx(n.shape, s); return a.runWebGPUProgram(c, [n], n.dtype); } - let u = new ox(n.shape, s); + let u = new rx(n.shape, s); return a.runWebGPUProgram(u, [n], n.dtype); } -var Gz = { kernelName: co, backendName: "webgpu", kernelFunc: yr }; -var nx = class { +var Hz = { kernelName: po, backendName: "webgpu", kernelFunc: xr }; +var ox = class { constructor(t8, e, o) { this.variableNames = ["x"], this.uniforms = "reduceSize : i32,", this.size = true, this.inputShape = [t8.batchSize, t8.inSize]; let [n] = w.computeOutAndReduceShapes(this.inputShape, [1]); @@ -28979,9 +28982,9 @@ var nx = class { } }; var jie = { mean: "float32", all: "bool", any: "bool" }; -function eo(r, t8, e, o, n) { - let s = r.shape.length, a = [], i = y.parseAxisParam(t8, r.shape), p = i, u = w.getAxesPermutation(p, s), c = r; - u != null && (c = yr({ inputs: { x: r }, attrs: { perm: u }, backend: n }), p = w.getInnerMostAxes(p.length, s), a.push(c)), w.assertAxesAreInnerMostDims(o, p, s); +function Jr(r15, t8, e, o, n) { + let s = r15.shape.length, a = [], i = y.parseAxisParam(t8, r15.shape), p = i, u = w.getAxesPermutation(p, s), c = r15; + u != null && (c = xr({ inputs: { x: r15 }, 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; e && (d = w.expandShapeToKeepDim(l, i)); let f; @@ -28989,33 +28992,33 @@ function eo(r, t8, e, o, n) { let h = n.tensorMap.get(c.dataId).values; switch (o) { case "max": - let g = wz(h, y.sizeFromShape(m), d, r.dtype); - f = n.makeTensorInfo(d, r.dtype, g); + let g = Sz(h, y.sizeFromShape(m), d, r15.dtype); + f = n.makeTensorInfo(d, r15.dtype, g); break; case "prod": - let { outVals: x, outShape: b, outDtype: C } = Tz(c.shape, c.dtype, h, p); + let { outVals: x, outShape: b, outDtype: C } = _z(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 = jie[o] || ni(r.dtype), S = [{ type: "int32", data: [h] }], k = new nx(b, o, n.device.limits.maxComputeWorkgroupSizeX), _ = n.runWebGPUProgram(k, [c], C, S); + let h = y.sizeFromShape(m), x = y.sizeFromShape(c.shape) / h, b = { windowSize: h, inSize: h, batchSize: x, outSize: 1 }, C = jie[o] || oi(r15.dtype), S = [{ type: "int32", data: [h] }], k = new ox(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 Xie(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { keepDims: s, axis: a } = o; - return eo(n, a, s, "all", e); +function Xie(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { keepDims: s, axis: a } = o; + return Jr(n, a, s, "all", e); } -var Hz = { kernelName: Ho, backendName: "webgpu", kernelFunc: Xie }; -function Yie(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { keepDims: s, axis: a } = o; - return eo(n, a, s, "any", e); +var Kz = { kernelName: Go, backendName: "webgpu", kernelFunc: Xie }; +function Yie(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { keepDims: s, axis: a } = o; + return Jr(n, a, s, "any", e); } -var Kz = { kernelName: Ko, backendName: "webgpu", kernelFunc: Yie }; -var Zc = class { +var qz = { kernelName: Ho, backendName: "webgpu", kernelFunc: Yie }; +var jc = class { constructor(t8, e, o) { this.workgroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "infinityValue : f32,", this.size = true; let n = [e]; @@ -29024,13 +29027,13 @@ var Zc = class { 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 = t8, this.shaderKey = `argMinMax_${this.op}_${this.type}`; } getUserCode() { - let t8 = this.workgroupSize[0], e = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${Mo(this.inputShape.length - 1)}`, o = () => { + let t8 = this.workgroupSize[0], e = () => 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.${Mo(s)},`; + n += `outputCoords.${Oo(s)},`; return n; }; return this.type === "shared" ? ` @@ -29102,31 +29105,31 @@ var Zc = class { `; } }; -function Qie(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = yr({ inputs: { x: n }, backend: e, 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 Zc(p.shape, a[0], "max"), l = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = e.runWebGPUProgram(c, [p], "int32", l); +function Qie(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, 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 jc(p.shape, a[0], "max"), l = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = e.runWebGPUProgram(c, [p], "int32", l); return u.forEach((d) => e.disposeData(d.dataId)), m; } -var qz = { kernelName: Ys, backendName: "webgpu", kernelFunc: Qie }; -function Zie(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = yr({ inputs: { x: n }, backend: e, 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 Zc(p.shape, a[0], "min"), l = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = e.runWebGPUProgram(c, [p], "int32", l); +var jz = { kernelName: Ys, backendName: "webgpu", kernelFunc: Qie }; +function Zie(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, 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 jc(p.shape, a[0], "min"), l = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = e.runWebGPUProgram(c, [p], "int32", l); return u.forEach((d) => e.disposeData(d.dataId)), m; } -var jz = { kernelName: Qs, backendName: "webgpu", kernelFunc: Zie }; +var Xz = { kernelName: Qs, backendName: "webgpu", kernelFunc: Zie }; var Jie = ye({ opType: Z.ASIN }); -var Xz = { kernelName: qo, backendName: "webgpu", kernelFunc: Jie }; +var Yz = { kernelName: Ko, backendName: "webgpu", kernelFunc: Jie }; var eue = ye({ opType: Z.ASINH }); -var Yz = { kernelName: jo, backendName: "webgpu", kernelFunc: eue }; +var Qz = { kernelName: qo, backendName: "webgpu", kernelFunc: eue }; var tue = ye({ opType: Z.ATAN }); -var Qz = { kernelName: Xo, backendName: "webgpu", kernelFunc: tue }; +var Zz = { kernelName: jo, backendName: "webgpu", kernelFunc: tue }; var rue = et({ opType: fe.ATAN2 }); -var Zz = { kernelName: Qo, backendName: "webgpu", kernelFunc: rue }; +var Jz = { kernelName: Yo, backendName: "webgpu", kernelFunc: rue }; var oue = ye({ opType: Z.ATANH }); -var Jz = { kernelName: Yo, backendName: "webgpu", kernelFunc: oue }; -var sx = class { +var eV = { kernelName: Xo, backendName: "webgpu", kernelFunc: oue }; +var nx = class { constructor(t8) { this.variableNames = ["x"], this.uniforms = "strides : vec2,", this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = t8.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "poolWithFilterSizeEqualsOne"; } @@ -29149,7 +29152,7 @@ var sx = class { `; } }; -var za = class { +var Ba = class { constructor(t8, e, 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, e === "avg" && o) throw new Error("Cannot compute positions for average pool."); @@ -29203,7 +29206,7 @@ var za = class { `; } }; -var _u = class { +var wu = class { constructor(t8, e, 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, e === "avg" && o) throw new Error("Cannot compute positions for average pool."); @@ -29265,39 +29268,39 @@ var _u = class { `; } }; -function Jv(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { reductionIndices: s, keepDims: a } = o; - return eo(n, s, a, "max", e); +function e0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { reductionIndices: s, keepDims: a } = o; + return Jr(n, s, a, "max", e); } -var eV = { kernelName: Vn, backendName: "webgpu", kernelFunc: Jv }; -function e0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { keepDims: s, axis: a } = o; - return eo(n, a, s, "mean", e); +var tV = { kernelName: zn, backendName: "webgpu", kernelFunc: e0 }; +function t0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { keepDims: s, axis: a } = o; + return Jr(n, a, s, "mean", e); } -var tV = { kernelName: Gn, backendName: "webgpu", kernelFunc: e0 }; -function ax(r, t8, e, o) { +var rV = { kernelName: Un, backendName: "webgpu", kernelFunc: t0 }; +function sx(r15, t8, e, o) { if (t8.filterWidth === 1 && t8.filterHeight === 1 && y.arraysEqual(t8.inShape, t8.outShape)) - return Ft({ inputs: { x: r }, backend: o }); + return At({ inputs: { x: r15 }, backend: o }); if (t8.filterWidth === t8.inWidth && t8.filterHeight === t8.inHeight && t8.batchSize === 1 && t8.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; - e === "avg" ? p = e0({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(e === "max", () => `Invalid pool type ${e}`), p = Jv({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); + 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; + e === "avg" ? p = t0({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(e === "max", () => `Invalid pool type ${e}`), p = e0({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); let u = pe({ inputs: { x: p }, backend: o, attrs: { shape: t8.outShape } }); return o.disposeData(i.dataId), o.disposeData(p.dataId), u; } let n, s = [{ type: "int32", data: [t8.strideHeight, t8.strideWidth] }]; - return t8.filterHeight === 1 && t8.filterWidth === 1 ? n = new sx(t8) : (e === "avg" ? n = new za(t8, "avg") : (y.assert(e === "max", () => `Invalid pool type ${e}`), n = new za(t8, "max")), s.push({ type: "int32", data: [t8.padInfo.top, t8.padInfo.left] }, { type: "int32", data: [t8.dilationHeight, t8.dilationWidth] }, { type: "int32", data: [t8.inHeight, t8.inWidth] }, { type: "int32", data: [t8.effectiveFilterHeight, t8.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r], r.dtype, s); + return t8.filterHeight === 1 && t8.filterWidth === 1 ? n = new nx(t8) : (e === "avg" ? n = new Ba(t8, "avg") : (y.assert(e === "max", () => `Invalid pool type ${e}`), n = new Ba(t8, "max")), s.push({ type: "int32", data: [t8.padInfo.top, t8.padInfo.left] }, { type: "int32", data: [t8.dilationHeight, t8.dilationWidth] }, { type: "int32", data: [t8.inHeight, t8.inWidth] }, { type: "int32", data: [t8.effectiveFilterHeight, t8.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r15], r15.dtype, s); } -function nue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = w.computePool2DInfo(n.shape, s, a, u, i, p); - return ax(n, c, "avg", e); +function nue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = w.computePool2DInfo(n.shape, s, a, u, i, p); + return sx(n, c, "avg", e); } -var rV = { kernelName: Zo, backendName: "webgpu", kernelFunc: nue }; -function sue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 _u(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] }]; +var oV = { kernelName: Qo, backendName: "webgpu", kernelFunc: nue }; +function sue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 wu(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 e.runWebGPUProgram(m, [n], n.dtype, d); } -var oV = { kernelName: Zs, backendName: "webgpu", kernelFunc: sue }; -var ix = class { +var nV = { kernelName: Zs, backendName: "webgpu", kernelFunc: sue }; +var ax = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "avgPool2DBackprop"; @@ -29344,7 +29347,7 @@ var ix = class { `; } }; -var ux = class { +var ix = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "avgPool3DBackprop"; @@ -29401,30 +29404,30 @@ var ux = class { `; } }; -function aue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, 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] }]; +function aue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = w.computePool3DInfo(a.shape, i, p, 1, u, c), m = new ix(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 e.runWebGPUProgram(m, [n], a.dtype, f); } -var nV = { kernelName: Ai, backendName: "webgpu", kernelFunc: aue }; -function iue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, 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] }]; +var sV = { kernelName: Ei, backendName: "webgpu", kernelFunc: aue }; +function iue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, a = s; + mm([n, s], "avgPoolGrad"); + let { filterSize: i, strides: p, pad: u } = o, c = w.computePool2DInfo(a.shape, i, p, 1, u), l = new ax(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 e.runWebGPUProgram(l, [n], a.dtype, d); } -var sV = { kernelName: Di, backendName: "webgpu", kernelFunc: iue }; -function uue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; - return Op({ a: n, b: s, transposeA: a, transposeB: i, backend: e }); +var aV = { kernelName: $i, backendName: "webgpu", kernelFunc: iue }; +function uue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { a: n, b: s } = t8, { transposeA: a, transposeB: i } = o; + return _p({ a: n, b: s, transposeA: a, transposeB: i, backend: e }); } -var aV = { kernelName: Jo, backendName: "webgpu", kernelFunc: uue }; -var px = class { +var iV = { kernelName: Zo, backendName: "webgpu", kernelFunc: uue }; +var ux = class { constructor(t8, e) { - this.variableNames = ["source"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.rank = e.length, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.start = t8, this.uniforms = `start : ${ht(t8.length)}, `, this.shaderKey = "slice"; + this.variableNames = ["source"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.rank = e.length, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.start = t8, this.uniforms = `start : ${ft(t8.length)}, `, this.shaderKey = "slice"; } getUserCode() { - let t8 = ht(this.rank), e = pue(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.${t0[a]} = uniforms.start.${Mo(a)} + coords.${t0[a]};`), ` + let t8 = ft(this.rank), e = pue(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.${r0[a]} = uniforms.start.${Oo(a)} + coords.${r0[a]};`), ` ${G("index")} { if (index < uniforms.size) { var sourceLoc : ${t8}; @@ -29437,36 +29440,36 @@ var px = class { `; } }; -var t0 = ["x", "y", "z", "w", "u", "v"]; -function pue(r) { - if (r === 1) +var r0 = ["x", "y", "z", "w", "u", "v"]; +function pue(r15) { + if (r15 === 1) return "sourceLoc"; - if (r <= 6) - return t0.slice(0, r).map((t8) => `sourceLoc.${t8}`).join(","); - throw Error(`Slicing for rank ${r} is not yet supported`); + if (r15 <= 6) + return r0.slice(0, r15).map((t8) => `sourceLoc.${t8}`).join(","); + throw Error(`Slicing for rank ${r15} is not yet supported`); } -function Hs(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { begin: s, size: a } = o, [i, p] = ct.parseSliceParams(n, s, a); - if (ct.assertParamsValid(n, i, p), e.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let l = e.tensorMap.get(n.dataId), m = Dz(l.values, i, p, n.shape, n.dtype); +function Hs(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { begin: s, size: a } = o, [i, p] = pt.parseSliceParams(n, s, a); + if (pt.assertParamsValid(n, i, p), e.shouldExecuteOnCPU([n]) || n.dtype === "string") { + let l = e.tensorMap.get(n.dataId), m = Az(l.values, i, p, n.shape, n.dtype); return e.makeTensorInfo(p, n.dtype, m); } if (y.sizeFromShape(p) === 0) return e.makeTensorInfo(p, n.dtype, []); - let u = new px(i, p), c = [{ type: "int32", data: i }]; + let u = new ux(i, p), c = [{ type: "int32", data: i }]; return e.runWebGPUProgram(u, [n], n.dtype, c); } -var iV = { kernelName: ha, backendName: "webgpu", kernelFunc: Hs }; -var cue = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, crops: a } = o; +var uV = { kernelName: ha, backendName: "webgpu", kernelFunc: Hs }; +var cue = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: e, attrs: { shape: p } }), h = yr({ inputs: { x: f }, backend: e, attrs: { perm: u } }), g = pe({ inputs: { x: h }, backend: e, attrs: { shape: c } }), x = Hs({ inputs: { x: g }, backend: e, attrs: { begin: l, size: m } }); + 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: e, attrs: { shape: p } }), h = xr({ inputs: { x: f }, backend: e, attrs: { perm: u } }), g = pe({ inputs: { x: h }, backend: e, attrs: { shape: c } }), x = Hs({ inputs: { x: g }, backend: e, attrs: { begin: l, size: m } }); return d.push(f), d.push(h), d.push(g), d.forEach((b) => e.disposeData(b.dataId)), x; }; -var uV = { kernelName: Js, backendName: "webgpu", kernelFunc: cue }; +var pV = { kernelName: Js, backendName: "webgpu", kernelFunc: cue }; var lue = ` fn bincount_write(index: i32, value: f32) { - ${Qr("&result[index]", "value", "float32")} + ${Yr("&result[index]", "value", "float32")} } `; var mue = ` @@ -29474,7 +29477,7 @@ var mue = ` atomicStore(&result[index], bitcast(value)); } `; -var Jc = class { +var Xc = class { constructor(t8, e, o = false) { this.outputShape = [], this.variableNames = ["x"], this.uniforms = "binCountSize : i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.hasWeights = true, this.binaryOutput = false, this.outputShape = t8, this.rank = t8.length, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.binaryOutput = o, o && (this.atomic = false), this.hasWeights = e, this.hasWeights && this.variableNames.push("w"), this.shaderKey = `bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`; } @@ -29500,12 +29503,12 @@ var Jc = class { `; } }; -function due(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { size: a } = o, i = y.sizeFromShape(n.shape), u = y.sizeFromShape(s.shape) > 0, c = [a], l = s.dtype, m = kt({ backend: e, attrs: { shape: c, value: 0, dtype: l } }), d = new Jc([i], u), f = [{ type: "int32", data: [a] }], h = u ? [n, s] : [n]; +function due(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { size: a } = o, i = y.sizeFromShape(n.shape), u = y.sizeFromShape(s.shape) > 0, c = [a], l = s.dtype, m = vt({ backend: e, attrs: { shape: c, value: 0, dtype: l } }), d = new Xc([i], u), f = [{ type: "int32", data: [a] }], h = u ? [n, s] : [n]; return e.runWebGPUProgram(d, h, l, f, m); } -var pV = { kernelName: en, backendName: "webgpu", kernelFunc: due }; -var cx = class { +var cV = { kernelName: Jo, backendName: "webgpu", kernelFunc: due }; +var px = class { constructor(t8) { this.outputShape = [], this.variableNames = ["s0", "s1"], this.uniforms = "s0Size : i32, s1Size : i32, ", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "broadcastArgs"; } @@ -29538,59 +29541,59 @@ var cx = class { `; } }; -function fue(r) { - let { inputs: t8, backend: e } = r, { s0: o, s1: n } = t8; +function fue(r15) { + let { inputs: t8, backend: e } = r15, { s0: o, s1: n } = t8; if (e.shouldExecuteOnCPU([o, n])) { let c = e.tensorMap.get(o.dataId), l = e.tensorMap.get(n.dataId), m = c.values, d = l.values, f = w.assertAndGetBroadcastShape(Array.from(m), Array.from(d)); return e.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] }]; + let s = y.sizeFromShape(o.shape), a = y.sizeFromShape(n.shape), i = Math.max(s, a), p = new px(i), u = [{ type: "int32", data: [s] }, { type: "int32", data: [a] }]; return e.runWebGPUProgram(p, [o, n], "int32", u); } -var cV = { kernelName: ea, backendName: "webgpu", kernelFunc: fue }; -var r0 = et({ opType: fe.NOT_EQUAL, dtype: "bool", cpuKernelImpl: Nz }); -var lV = { kernelName: Qn, backendName: "webgpu", kernelFunc: r0 }; -function Ni(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.tensorMap.get(o.dataId); - return Ft({ inputs: { x: n.complexTensorInfos.real }, backend: e }); +var lV = { kernelName: ea, backendName: "webgpu", kernelFunc: fue }; +var o0 = et({ opType: fe.NOT_EQUAL, dtype: "bool", cpuKernelImpl: Tz }); +var mV = { kernelName: Yn, backendName: "webgpu", kernelFunc: o0 }; +function Ii(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.tensorMap.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.real }, backend: e }); } -var mV = { kernelName: qi, backendName: "webgpu", kernelFunc: Ni }; -function dV(r, t8) { - let e = new Jr(r.shape, Z.TO_INT), o = t8.runWebGPUProgram(e, [r], "int32"); +var dV = { kernelName: Gi, backendName: "webgpu", kernelFunc: Ii }; +function fV(r15, t8) { + let e = new Zr(r15.shape, Z.TO_INT), o = t8.runWebGPUProgram(e, [r15], "int32"); return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -function o0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dtype: s } = o; +function n0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return Ft({ inputs: { x: n }, backend: e }); - let a = Gr(n.shape), i = o0({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), p = yo({ inputs: { real: i, imag: a }, backend: e }); + return At({ inputs: { x: n }, backend: e }); + let a = Ur(n.shape), i = n0({ inputs: { x: n }, backend: e, attrs: { dtype: "float32" } }), p = xo({ inputs: { real: i, imag: a }, backend: e }); return a.dispose(), e.disposeData(i.dataId), p; } if (n.dtype === "complex64") { - let a = Ni({ inputs: { input: n }, backend: e }), i = o0({ inputs: { x: a }, backend: e, attrs: { dtype: s } }); + let a = Ii({ inputs: { input: n }, backend: e }), i = n0({ inputs: { x: a }, backend: e, attrs: { dtype: s } }); return e.disposeData(a.dataId), i; } if (!y.hasEncodingLoss(n.dtype, s)) { - let a = Ft({ inputs: { x: n }, backend: e }); + let a = At({ inputs: { x: n }, backend: e }); return { dataId: a.dataId, shape: a.shape, dtype: s }; } if (e.shouldExecuteOnCPU([n])) { - let a = e.tensorMap.get(n.dataId).values, [i, p, u] = az(a, n.shape, n.dtype, s); + let a = e.tensorMap.get(n.dataId).values, [i, p, u] = iz(a, n.shape, n.dtype, s); return e.makeTensorInfo(i, p, u); } if (s === "int32") - return dV(n, e); + return fV(n, e); if (s === "bool") { - let a = e.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = r0({ inputs: { a: n, b: a }, backend: e }); + let a = e.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = o0({ inputs: { a: n, b: a }, backend: e }); return e.disposeData(a.dataId), p; } throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); } -var fV = { kernelName: bo, backendName: "webgpu", kernelFunc: o0 }; -var hue = ye({ opType: Z.CEIL, cpuKernelImpl: iz }); -var hV = { kernelName: tn, backendName: "webgpu", kernelFunc: hue }; -var lx = class { +var hV = { kernelName: yo, backendName: "webgpu", kernelFunc: n0 }; +var hue = ye({ opType: Z.CEIL, cpuKernelImpl: uz }); +var gV = { kernelName: en, backendName: "webgpu", kernelFunc: hue }; +var cx = class { constructor(t8) { this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workPerThread = 4, this.workgroupSize = [64, 1, 1], this.outputComponent = 4, this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "clipVec4"; } @@ -29608,7 +29611,7 @@ var lx = class { `; } }; -var mx = class { +var lx = class { constructor(t8) { this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "clip"; } @@ -29627,12 +29630,12 @@ var mx = class { `; } }; -function gue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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), e.runWebGPUProgram(i, [n], n.dtype, p); +function gue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { clipValueMin: s, clipValueMax: a } = o, i, p = [{ type: "float32", data: [s] }, { type: "float32", data: [a] }]; + return y.sizeFromShape(n.shape) % 4 === 0 ? i = new cx(n.shape) : i = new lx(n.shape), e.runWebGPUProgram(i, [n], n.dtype, p); } -var gV = { kernelName: Co, backendName: "webgpu", kernelFunc: gue }; -var dx = class { +var xV = { kernelName: bo, backendName: "webgpu", kernelFunc: gue }; +var mx = class { constructor(t8) { this.outputShape = [], this.variableNames = ["real", "imag"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "complexAbs"; } @@ -29652,15 +29655,15 @@ var dx = class { `; } }; -function xV(r, t8) { - return { dataId: t8.dataId, dtype: t8.dtype, shape: r.shape }; +function yV(r15, t8) { + return { dataId: t8.dataId, dtype: t8.dtype, shape: r15.shape }; } -function xue(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = e.tensorMap.get(o.dataId), s = new dx(o.shape), a = [xV(o, n.complexTensorInfos.real), xV(o, n.complexTensorInfos.imag)]; +function xue(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = e.tensorMap.get(o.dataId), s = new mx(o.shape), a = [yV(o, n.complexTensorInfos.real), yV(o, n.complexTensorInfos.imag)]; return e.runWebGPUProgram(s, a, a[0].dtype); } -var yV = { kernelName: Pi, backendName: "webgpu", kernelFunc: xue }; -var fx = class { +var bV = { kernelName: Di, backendName: "webgpu", kernelFunc: xue }; +var dx = class { constructor(t8) { this.uniforms = "", this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = w.computeOutShape(t8, 1), this.variableNames = t8.map((e, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.offsetLength = t8.length - 1; for (let e = 0; e < this.offsetLength; e++) @@ -29694,38 +29697,38 @@ var fx = class { `; } }; -function Mp(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8, n = e.tensorMap.get(o.dataId); - return Ft({ inputs: { x: n.complexTensorInfos.imag }, backend: e }); +function $p(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8, n = e.tensorMap.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.imag }, backend: e }); } -var bV = { kernelName: Gi, backendName: "webgpu", kernelFunc: Mp }; -function el(r, t8, e) { - let o = r[0].dtype; +var CV = { kernelName: Vi, backendName: "webgpu", kernelFunc: $p }; +function Yc(r15, t8, e) { + let o = r15[0].dtype; if (o === "complex64") { - let f = r.map((C) => Ni({ inputs: { input: C }, backend: e })), h = r.map((C) => Mp({ inputs: { input: C }, backend: e })), g = el(f, t8, e), x = el(h, t8, e), b = yo({ inputs: { real: g, imag: x }, backend: e }); + let f = r15.map((C) => Ii({ inputs: { input: C }, backend: e })), h = r15.map((C) => $p({ inputs: { input: C }, backend: e })), g = Yc(f, t8, e), x = Yc(h, t8, e), b = xo({ inputs: { real: g, imag: x }, backend: e }); return f.forEach((C) => e.disposeData(C.dataId)), h.forEach((C) => e.disposeData(C.dataId)), e.disposeData(g.dataId), e.disposeData(x.dataId), b; } - let n = e.shouldExecuteOnCPU(r); + let n = e.shouldExecuteOnCPU(r15); if (o === "string" && (n = true), n) { - let f = r.map((k) => { + let f = r15.map((k) => { let E = [-1, y.sizeFromShape(k.shape.slice(t8))]; return pe({ inputs: { x: k }, backend: e, attrs: { shape: E } }); - }), h = f.map((k) => ({ vals: e.readSync(k.dataId), shape: k.shape })), g = w.computeOutShape(f.map((k) => k.shape), 1), x = f[0].shape[0] === 1, b = uz(h, g, o, x), C = w.computeOutShape(r.map((k) => k.shape), t8), S = e.makeTensorInfo(C, o, b); + }), h = f.map((k) => ({ vals: e.readSync(k.dataId), shape: k.shape })), g = w.computeOutShape(f.map((k) => k.shape), 1), x = f[0].shape[0] === 1, b = pz(h, g, o, x), C = w.computeOutShape(r15.map((k) => k.shape), t8), S = e.makeTensorInfo(C, o, b); return f.forEach((k) => e.disposeData(k.dataId)), S; } let s = e.device.limits.maxStorageBuffersPerShaderStage - 1; - if (r.length > s) { + if (r15.length > s) { let f = []; - for (let g = 0; g < r.length; g += s) { - let x = r.slice(g, g + s); - f.push(el(x, t8, e)); + for (let g = 0; g < r15.length; g += s) { + let x = r15.slice(g, g + s); + f.push(Yc(x, t8, e)); } - let h = el(f, t8, e); + let h = Yc(f, t8, e); for (let g of f) e.disposeData(g.dataId); return h; } - let { tensors2D: a, outShape: i } = yue(r, t8, e), p = a.map((f) => f.shape), u = new fx(p), c = [], l = new Array(p.length - 1); + let { tensors2D: a, outShape: i } = yue(r15, t8, e), p = a.map((f) => f.shape), u = new dx(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++) @@ -29736,21 +29739,21 @@ function el(r, t8, e) { let d = pe({ inputs: { x: m }, backend: e, attrs: { shape: i } }); return e.disposeData(m.dataId), d; } -function yue(r, t8, e) { - let o = w.computeOutShape(r.map((s) => s.shape), t8); - return { tensors2D: r.map((s) => pe({ inputs: { x: s }, backend: e, attrs: { shape: [y.sizeFromShape(s.shape.slice(0, t8)), y.sizeFromShape(s.shape.slice(t8))] } })), outShape: o }; +function yue(r15, t8, e) { + let o = w.computeOutShape(r15.map((s) => s.shape), t8); + return { tensors2D: r15.map((s) => pe({ inputs: { x: s }, backend: e, attrs: { shape: [y.sizeFromShape(s.shape.slice(0, t8)), y.sizeFromShape(s.shape.slice(t8))] } })), outShape: o }; } -function n0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((u) => u.shape); +function s0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, t8[0].shape)[0], a = t8.map((u) => u.shape); w.assertParamsConsistent(a, s); let i = w.computeOutShape(t8.map((u) => u.shape), s); if (y.sizeFromShape(i) === 0) return e.makeTensorInfo(i, t8[0].dtype, []); let p = t8.filter((u) => y.sizeFromShape(u.shape) > 0); - return p.length === 1 ? Ft({ inputs: { x: p[0] }, backend: e }) : el(p, s, e); + return p.length === 1 ? At({ inputs: { x: p[0] }, backend: e }) : Yc(p, s, e); } -var CV = { kernelName: ta, backendName: "webgpu", kernelFunc: n0 }; -function bue(r, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { +var wV = { kernelName: ta, backendName: "webgpu", kernelFunc: s0 }; +function bue(r15, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { let c = (D) => { switch (D) { case 1: @@ -29771,11 +29774,11 @@ function bue(r, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { default: throw new Error(`innerElementSize ${D} is not supported.`); } - }, m = r ? ` + }, m = r15 ? ` let coord = vec4(batch, xRow, xCol, xCh); ` : ` let coord = vec4(batch, xCh, xRow, xCol); - `, d = r ? ` + `, d = r15 ? ` let coords = vec4( batch, row / outWidth, @@ -29787,9 +29790,9 @@ function bue(r, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { row, col / outWidth, col % outWidth); - `, 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 = ` + `, f = r15 ? "uniforms.xShape[1]" : "uniforms.xShape[2]", h = r15 ? "uniforms.xShape[2]" : "uniforms.xShape[3]", g = r15 ? "row" : "col", x = r15 ? "col" : "row", b = ` let inChannels = uniforms.wShape[2]; - let outWidth = ${r ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; + let outWidth = ${r15 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; let outRow = ${g} / outWidth; let outCol = ${g} % outWidth; @@ -29806,7 +29809,7 @@ function bue(r, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); ${c(i)} } - return resData;`, C = r ? t8 && o ? ` + return resData;`, C = r15 ? t8 && o ? ` ${b}` : ` if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${b} @@ -29816,47 +29819,47 @@ function bue(r, t8, e, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${b} } - return ${Ae(i)}(0.0);`, S = `${l(p)}`, k = Ae(u), _ = r ? Ae(i) : Ae(p), E = r ? Ae(p) : Ae(i); + return ${Ae(i)}(0.0);`, S = `${l(p)}`, k = Ae(u), _ = r15 ? Ae(i) : Ae(p), E = r15 ? Ae(p) : Ae(i); return ` - ${fr(s, a, u === 4, 4)} + ${dr(s, a, u === 4, 4)} fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} { - ${r ? C : S} + ${r15 ? C : S} } fn mm_readB(batch: i32, row : i32, col : i32) -> ${E} { - ${r ? S : C} + ${r15 ? S : C} } fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { var value = valueIn; - let outWidth = ${r ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; + let outWidth = ${r15 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; ${d} - ${Zr(n, s)} + ${Qr(n, s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } }`; } -var hx = class { +var fx = class { constructor(t8, e, o, n, s = false, a = null, i = false, p = false) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t8.outShape, this.isChannelsLast = t8.dataFormat === "channelsLast", this.isVec4 = ((t8.inChannels % 4 === 0 || t8.inChannels % 3 === 0) && this.isChannelsLast || t8.outWidth % 4 === 0 && !this.isChannelsLast) && t8.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 && t8.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 = e % 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}`; + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t8.outShape, this.isChannelsLast = t8.dataFormat === "channelsLast", this.isVec4 = ((t8.inChannels % 4 === 0 || t8.inChannels % 3 === 0) && this.isChannelsLast || t8.outWidth % 4 === 0 && !this.isChannelsLast) && t8.outChannels % 4 === 0, this.dispatchLayout = this.isChannelsLast ? { x: [3], y: [1, 2], z: [0] } : { x: [2, 3], y: [1], z: [0] }, this.workgroupSize = pm(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = cm(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 ? (this.outputComponent = 4, this.isChannelsLast && t8.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 = e % 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 t8 = this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner) : Pp(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), e = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; + let t8 = this.isVec4 ? Np(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner) : Tp(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), e = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; return ` ${bue(this.isChannelsLast, this.fitAOuter, this.fitBOuter, this.fitInner, this.addBias, this.activation, this.hasPreluActivationWeights, e[0], e[1], e[2])} ${t8} `; } }; -var gx = class { +var hx = class { constructor(t8, e = false, o = null, n = false) { this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,", this.workgroupSize = [4, 4, 8], this.outputShape = t8.outShape, this.isChannelsLast = t8.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 = e, this.activation = o, this.hasPreluActivationWeights = n, e && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.shaderKey = `conv2dnaive_${this.activation}_${this.isChannelsLast}`; } getUserCode() { return ` - ${fr(this.activation, this.hasPreluActivationWeights, false, 4)} + ${dr(this.activation, this.hasPreluActivationWeights, false, 4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -29877,7 +29880,7 @@ var gx = class { let coords = ${this.isChannelsLast ? "vec4(batch, row, col, chan);" : "vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${Zr(this.addBias, this.activation)} + ${Qr(this.addBias, this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -29904,7 +29907,7 @@ var gx = class { `; } }; -var xx = class { +var gx = class { constructor(t8, e) { this.variableNames = ["x"], this.uniforms = `pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, inChannels : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = e, this.shaderKey = `im2col_${this.isChannelsLast}`; @@ -29937,78 +29940,78 @@ var xx = class { `; } }; -function yx(r, t8) { - let e = r.length; - return e >= 3 ? t8 ? [...r.slice(0, -3), r[e - 3] * r[e - 2], r[e - 1]] : [...r.slice(0, -3), r[e - 3], r[e - 2] * r[e - 1]] : !t8 && e === 1 && r[0] > 1 ? [r[0], 1] : null; +function xx(r15, t8) { + let e = r15.length; + return e >= 3 ? t8 ? [...r15.slice(0, -3), r15[e - 3] * r15[e - 2], r15[e - 1]] : [...r15.slice(0, -3), r15[e - 3], r15[e - 2] * r15[e - 1]] : !t8 && e === 1 && r15[0] > 1 ? [r15[0], 1] : null; } -function Cue({ x: r, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { +function Cue({ x: r15, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { let p = e.dataFormat === "channelsLast", u = !p, c = false, l = p && e.filterHeight === e.inHeight && e.filterWidth === e.inWidth && e.padInfo.type === "VALID", m = [], d, f; if (l) { let x = e.inHeight * e.inWidth * e.inChannels; - d = pe({ inputs: { x: r }, backend: o, attrs: { shape: [1, e.batchSize, x] } }), f = pe({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, x, e.outChannels] } }); + d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: [1, e.batchSize, x] } }), f = pe({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, x, e.outChannels] } }); } else - d = pe({ inputs: { x: r }, backend: o, attrs: { shape: p ? [e.batchSize, e.inHeight * e.inWidth, e.inChannels] : [e.batchSize, e.inChannels, e.inHeight * e.inWidth] } }), f = pe({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, e.inChannels, e.outChannels] } }); + d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: p ? [e.batchSize, e.inHeight * e.inWidth, e.inChannels] : [e.batchSize, e.inChannels, e.inHeight * e.inWidth] } }), f = pe({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, e.inChannels, e.outChannels] } }); if (m.push(d), m.push(f), s != null) { - let x = yx(s.shape, p); + let x = xx(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); + let x = xx(n.shape, p); x != null && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: x } }), m.push(n)); } - let h = Op({ 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: e.outShape } }); + 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: e.outShape } }); m.push(h); for (let x of m) o.disposeData(x.dataId); return g; } -function wue({ x: r, filter: t8, convInfo: e, 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 } = e, C = b === "channelsLast", S = p * u * c, k = h * f, _ = C ? [e.batchSize, k, S] : [e.batchSize, S, k], E = 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(E, [r], r.dtype, R), P = []; +function wue({ x: r15, filter: t8, convInfo: e, 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 } = e, C = b === "channelsLast", S = p * u * c, k = h * f, _ = C ? [e.batchSize, k, S] : [e.batchSize, S, k], E = new gx(_, 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(E, [r15], r15.dtype, R), P = []; P.push(D); let O = pe({ inputs: { x: t8 }, backend: o, attrs: { shape: [1, S, -1] } }); if (P.push(O), s != null) { - let U = yx(s.shape, C); + let U = xx(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); + let U = xx(n.shape, C); U != null && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: U } }), P.push(n)); } - let B = Op({ 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: e.outShape } }); + 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: e.outShape } }); P.push(B); for (let U of P) o.disposeData(U.dataId); return z; } -function bx({ x: r, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { +function yx({ x: r15, filter: t8, convInfo: e, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { let p = n != null, u = s != null, c = e.dataFormat === "channelsLast", l = c && e.filterHeight === e.inHeight && e.filterWidth === e.inWidth && e.padInfo.type === "VALID", m = A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG"); if (!m && (l || e.filterHeight === 1 && e.filterWidth === 1 && e.dilationHeight === 1 && e.dilationWidth === 1 && e.strideHeight === 1 && e.strideWidth === 1 && (e.padInfo.type === "SAME" || e.padInfo.type === "VALID"))) - return Cue({ x: r, filter: t8, convInfo: e, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + return Cue({ x: r15, filter: t8, convInfo: e, 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 = e.batchSize * Math.ceil(e.outHeight * e.outWidth / 32) * Math.ceil(e.outChannels / 32); if (A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER") || h <= f) - return wue({ x: r, filter: t8, convInfo: e, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); + return wue({ x: r15, filter: t8, convInfo: e, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); let g, x = [e.padInfo.top, e.padInfo.left], b = [{ type: "int32", data: [e.filterHeight, e.filterWidth] }, { type: "int32", data: [...x] }, { type: "int32", data: [e.strideHeight, e.strideWidth] }, { type: "int32", data: [e.dilationHeight, e.dilationWidth] }]; if (m) - g = new gx(e, p, i, u); + g = new hx(e, p, i, u); else { let _ = c ? e.outHeight * e.outWidth : e.outChannels, E = c ? e.outChannels : e.outHeight * e.outWidth, R = e.filterHeight * e.filterWidth * e.inChannels; b.push({ type: "int32", data: [_] }, { type: "int32", data: [E] }, { type: "int32", data: [R] }); let D = o.adapterInfo.isIntel(); - g = new hx(e, _, E, R, p, i, u, D); + g = new fx(e, _, E, R, p, i, u, D); } - let C = [], S = [r, t8]; + let C = [], S = [r15, t8]; 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); + let k = o.runWebGPUProgram(g, S, r15.dtype, b); for (let _ of C) o.disposeData(_.dataId); return k; } -function Sue(r) { - let { inputs: t8, attrs: e, backend: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = e, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l); - return bx({ x: n, filter: s, convInfo: m, backend: o }); +function Sue(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { x: n, filter: s } = t8, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = e, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l); + return yx({ x: n, filter: s, convInfo: m, backend: o }); } -var wV = { kernelName: rn, backendName: "webgpu", kernelFunc: Sue }; -var Cx = class { +var SV = { kernelName: tn, backendName: "webgpu", kernelFunc: Sue }; +var bx = class { constructor(t8) { this.variableNames = ["dy", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,", this.workgroupSize = [64, 1, 1], this.size = false, this.isVec4 = false, this.workPerThread = 1, this.outputShape = t8.inShape, this.isChannelsLast = t8.dataFormat === "channelsLast", this.isVec4 = this.isChannelsLast && t8.outChannels % 4 === 0 && t8.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 = true, 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}`; } @@ -30160,7 +30163,7 @@ var Cx = class { `; } }; -var wx = class { +var Cx = class { constructor(t8) { 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 = true, this.outputShape = t8.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = t8.dataFormat === "channelsLast", this.shaderKey = `conv2DDerFilter_${this.isChannelsLast}`; } @@ -30209,7 +30212,7 @@ var wx = class { `; } }; -var Sx = class { +var wx = class { constructor(t8) { 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 = true, this.outputShape = t8.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3DDerFilter"; @@ -30258,7 +30261,7 @@ var Sx = class { `; } }; -var Ix = class { +var Sx = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3DDerInput"; @@ -30320,12 +30323,12 @@ var Ix = class { `; } }; -function Iue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { 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, false, 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] }]; +function Iue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { 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, false, l), d = new Cx(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 e.runWebGPUProgram(d, [n, s], n.dtype, f); } -var SV = { kernelName: Oi, backendName: "webgpu", kernelFunc: Iue }; -function vue(r = 4) { +var IV = { kernelName: Ai, backendName: "webgpu", kernelFunc: Iue }; +function vue(r15 = 4) { let t8 = (s) => { switch (s) { case 1: @@ -30354,25 +30357,25 @@ function vue(r = 4) { let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.strides[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${Ae(r)}(0.0); + return ${Ae(r15)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${Ae(r)}(0.0); + return ${Ae(r15)}(0.0); } let coord = vec4( batch, i32(xR), i32(xC), col % uniforms.outBackprop[3]); - return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`} + return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r15}];`} } - return ${Ae(r)}(0.0);`; + return ${Ae(r15)}(0.0);`; return ` - fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r)} { + fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r15)} { ${o} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r)} { + fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r15)} { let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); let coordY = uniforms.filterDims.y - 1 - @@ -30381,12 +30384,12 @@ function vue(r = 4) { coordX >= 0 && coordY >= 0) { let rowInner = row % uniforms.outBackprop[3]; let coord = vec4(coordX, coordY, col, rowInner); - ${t8(r)} + ${t8(r15)} } - return ${Ae(r)}(0.0); + return ${Ae(r15)}(0.0); } - fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r)}) { + fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r15)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { var value = valueInput; let outCoord = vec4( @@ -30394,35 +30397,35 @@ function vue(r = 4) { row / uniforms.outShape[2], row % uniforms.outShape[2], col); - result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value; + result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r15}] = value; } }`; } -var vx = class { +var Ix = class { constructor(t8) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t8.inShape, y.assert(t8.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = t8.inChannels % 4 === 0 && t8.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}`; + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t8.inShape, y.assert(t8.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = t8.inChannels % 4 === 0 && t8.outChannels % 4 === 0, this.dispatchLayout = { x: [3], y: [1, 2], z: [0] }, this.workgroupSize = pm(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = cm(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 t8 = this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize) : Pp(this.elementsPerThread, this.workgroupSize); + let t8 = this.isVec4 ? Np(this.elementsPerThread, this.workgroupSize) : Tp(this.elementsPerThread, this.workgroupSize); return ` ${vue(this.isVec4 ? 4 : 1)} ${t8} `; } }; -function kue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { 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; +function kue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { 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); + f = new bx(m); else { - f = new vx(m); + f = new Ix(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 e.runWebGPUProgram(f, [n, s], "float32", d); } -var IV = { kernelName: on, backendName: "webgpu", kernelFunc: kue }; -var kx = class { +var vV = { kernelName: rn, backendName: "webgpu", kernelFunc: kue }; +var vx = class { constructor(t8) { this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3dnaive"; } @@ -30512,26 +30515,26 @@ var kx = class { }`; } }; -function Nue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { 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); +function Nue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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 vx(u), d = dt(n.dtype, s.dtype); return e.runWebGPUProgram(m, [n, s], d, l); } -var vV = { kernelName: nn, backendName: "webgpu", kernelFunc: Nue }; -function Tue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { 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] }]; +var kV = { kernelName: on, backendName: "webgpu", kernelFunc: Nue }; +function Tue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, pad: i, filterShape: p } = o, u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = new wx(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 e.runWebGPUProgram(c, [n, s], s.dtype, l); } -var kV = { kernelName: Xa, backendName: "webgpu", kernelFunc: Tue }; -function _ue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { 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] }]; +var NV = { kernelName: ja, backendName: "webgpu", kernelFunc: Tue }; +function _ue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { strides: a, pad: i, inputShape: p } = o, u = w.computeConv3DInfo(p, s.shape, a, 1, i), c = new Sx(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 e.runWebGPUProgram(c, [n, s], n.dtype, l); } -var NV = { kernelName: sn, backendName: "webgpu", kernelFunc: _ue }; +var TV = { kernelName: nn, backendName: "webgpu", kernelFunc: _ue }; var $ue = ye({ opType: Z.COS }); -var TV = { kernelName: an, backendName: "webgpu", kernelFunc: $ue }; +var _V = { kernelName: sn, backendName: "webgpu", kernelFunc: $ue }; var Eue = ye({ opType: Z.COSH }); -var _V = { kernelName: un, backendName: "webgpu", kernelFunc: Eue }; -var Nx = class { +var $V = { kernelName: an, backendName: "webgpu", kernelFunc: Eue }; +var kx = class { constructor(t8, e, o, n) { this.variableNames = ["Image", "Boxes", "BoxInd"], this.uniforms = "extrapolationValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true; let [s] = e; @@ -30598,33 +30601,33 @@ var Nx = class { `; } }; -var Rue = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { image: n, boxes: s, boxInd: a } = t8, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Nx(n.shape[3], s.shape, i, p), l = [{ type: "float32", data: [u] }]; +var Rue = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = t8, { cropSize: i, method: p, extrapolationValue: u } = o, c = new kx(n.shape[3], s.shape, i, p), l = [{ type: "float32", data: [u] }]; return e.runWebGPUProgram(c, [n, s, a], "float32", l); }; -var $V = { kernelName: ln, backendName: "webgpu", kernelFunc: Rue }; -var Lp; -(function(r) { - r.Prod = "*", r.Sum = "+"; -})(Lp || (Lp = {})); -var xm = class { +var EV = { kernelName: cn, backendName: "webgpu", kernelFunc: Rue }; +var Ep; +(function(r15) { + r15.Prod = "*", r15.Sum = "+"; +})(Ep || (Ep = {})); +var hm = class { constructor(t8, e, o, n) { this.variableNames = ["x"], this.uniforms = "index : f32,", this.size = true, this.workgroupSize = [128, 1, 1], this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.exclusive = o, this.reverse = n, this.op = t8, this.shaderKey = `cum_${this.op}_${this.exclusive}_${this.reverse}`; } getUserCode() { - let t8 = this.outputShape.length, e = this.op === Lp.Prod ? "1.0" : "0.0", o = this.exclusive ? e : `getX(${EV(t8, "coords", this.op)})`, n = this.outputShape[this.outputShape.length - 1], s = "", a = ""; + let t8 = this.outputShape.length, e = this.op === Ep.Prod ? "1.0" : "0.0", o = this.exclusive ? e : `getX(${RV(t8, "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"), ` ${G("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${RV(t8, "coords", this.op)}; + let end = ${DV(t8, "coords", this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${RV(t8, "coords", this.op)} = idx; - val ${this.op}= getX(${EV(t8, "coords", this.op)}); + ${DV(t8, "coords", this.op)} = idx; + val ${this.op}= getX(${RV(t8, "coords", this.op)}); } setOutputAtIndex(index, val); } @@ -30632,65 +30635,65 @@ var xm = class { `; } }; -function EV(r, t8, e) { - if (r === 1) +function RV(r15, t8, e) { + if (r15 === 1) return `${t8}`; - if (r === 2) + if (r15 === 2) return `${t8}.x, ${t8}.y`; - if (r === 3) + if (r15 === 3) return `${t8}.x, ${t8}.y, ${t8}.z`; - if (r === 4) + if (r15 === 4) return `${t8}.x, ${t8}.y, ${t8}.z, ${t8}.w`; - throw Error(`Cumulative ${e} for rank ${r} is not yet supported`); + throw Error(`Cumulative ${e} for rank ${r15} is not yet supported`); } -function RV(r, t8, e) { - if (r === 1) +function DV(r15, t8, e) { + if (r15 === 1) return `${t8}`; - if (r === 2) + if (r15 === 2) return `${t8}.y`; - if (r === 3) + if (r15 === 3) return `${t8}.z`; - if (r === 4) + if (r15 === 4) return `${t8}.w`; - throw Error(`Cumulative ${e} for rank ${r} is not yet supported`); + throw Error(`Cumulative ${e} for rank ${r15} is not yet supported`); } -function Tx(r, t8, e, o, n, s) { +function Nx(r15, t8, e, o, n, s) { let a = t8.shape.length, i = w.getAxesPermutation([o], a), p = t8; - i != null && (p = yr({ inputs: { x: t8 }, backend: e, attrs: { perm: i } })); + i != null && (p = xr({ inputs: { x: t8 }, backend: e, 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=${t8.shape.length - 1} but got axis=${o}`); - let c = p.shape[u], l = Ft({ inputs: { x: p }, backend: e }); + let c = p.shape[u], l = At({ inputs: { x: p }, backend: e }); for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { - let d = new xm(r, p.shape, false, s), f = l, h = [{ type: "float32", data: [m] }]; + let d = new hm(r15, p.shape, false, s), f = l, h = [{ type: "float32", data: [m] }]; l = e.runWebGPUProgram(d, [l], l.dtype, h), e.disposeData(f.dataId); } if (n) { - let m = new xm(r, p.shape, n, s), d = l, f = [{ type: "float32", data: [0] }]; + let m = new hm(r15, p.shape, n, s), d = l, f = [{ type: "float32", data: [0] }]; l = e.runWebGPUProgram(m, [l], l.dtype, f), e.disposeData(d.dataId); } if (i != null) { - let m = w.getUndoAxesPermutation(i), d = yr({ inputs: { x: l }, backend: e, attrs: { perm: m } }); + let m = w.getUndoAxesPermutation(i), d = xr({ inputs: { x: l }, backend: e, attrs: { perm: m } }); return e.disposeData(l.dataId), e.disposeData(p.dataId), d; } return l; } -function Due(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; - return Tx(Lp.Prod, n, e, s, a, i); +function Due(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; + return Nx(Ep.Prod, n, e, s, a, i); } -var DV = { kernelName: pn, backendName: "webgpu", kernelFunc: Due }; -function Aue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; - return Tx(Lp.Sum, n, e, s, a, i); +var AV = { kernelName: un, backendName: "webgpu", kernelFunc: Due }; +function Aue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, exclusive: a, reverse: i } = o; + return Nx(Ep.Sum, n, e, s, a, i); } -var AV = { kernelName: cn, backendName: "webgpu", kernelFunc: Aue }; -function Fue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, weights: s } = t8, { 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 = kt({ backend: e, attrs: { shape: d, value: 0, dtype: l } }), h = new Jc(m, c, i), g = [{ type: "int32", data: [a] }], x = c ? [n, s] : [n]; +var FV = { kernelName: pn, backendName: "webgpu", kernelFunc: Aue }; +function Fue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, weights: s } = t8, { 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: e, attrs: { shape: d, value: 0, dtype: l } }), h = new Xc(m, c, i), g = [{ type: "int32", data: [a] }], x = c ? [n, s] : [n]; return e.runWebGPUProgram(h, x, l, g, f); } -var FV = { kernelName: ra, backendName: "webgpu", kernelFunc: Fue }; -var _x = class { +var PV = { kernelName: ra, backendName: "webgpu", kernelFunc: Fue }; +var Tx = class { constructor(t8, e) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.uniforms = "blockSize : i32,", this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `depthToSpace_${e}`, this.dataFormat = e; } @@ -30733,19 +30736,19 @@ var _x = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function Pue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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); +function Pue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 Tx(f, a); return e.runWebGPUProgram(g, [n], n.dtype, h); } -var PV = { kernelName: mn, backendName: "webgpu", kernelFunc: Pue }; -var $x = class { +var OV = { kernelName: ln, backendName: "webgpu", kernelFunc: Pue }; +var _x = class { constructor(t8, e, o, n = false, s = null, a = false) { this.variableNames = ["x", "W"], this.uniforms = "pads : vec2, inDims : vec2,", this.workgroupSize = [16, 16, 1], this.outputShape = t8, 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 = e, this.filterWidth = o, this.shaderKey = `depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`; } getUserCode() { let t8 = this.filterWidth * this.filterHeight, e = this.workgroupSize[0] * this.workgroupSize[1] * this.workgroupSize[2], o = this.workgroupSize[1] + this.filterHeight - 1, n = this.workgroupSize[0] + this.filterWidth - 1; return ` - ${fr(this.activation, this.hasPreluActivation, false, 4)} + ${dr(this.activation, this.hasPreluActivation, false, 4)} var mm_Asub : array, ${o}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -30801,7 +30804,7 @@ var $x = class { value = fma(xVal, wVal, value); } } - ${Zr(this.addBias, this.activation)} + ${Qr(this.addBias, this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } @@ -30809,7 +30812,7 @@ var $x = class { `; } }; -var tl = class { +var Qc = class { constructor(t8, e = false, o = null, n = false) { 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 = t8.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]]; @@ -30818,7 +30821,7 @@ var tl = class { getUserCode() { let t8 = (this.workPerThread - 1) * this.convInfo.strideWidth + this.convInfo.filterWidth, e = this.convInfo.strideHeight, o = this.convInfo.strideWidth; return ` - ${fr(this.activation, this.hasPreluActivation, true, 4)} + ${dr(this.activation, this.hasPreluActivation, true, 4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -30867,7 +30870,7 @@ var tl = class { let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${Zr(this.addBias, this.activation)} + ${Qr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } @@ -30875,7 +30878,7 @@ var tl = class { `; } }; -var rl = class { +var Zc = class { constructor(t8, e = false, o = null, n = false) { 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 = true, this.outputShape = t8.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = t8.dataFormat === "channelsLast", e && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = t8, this.addBias = e, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwise_${this.activation}_${this.isChannelsLast}`; @@ -30883,7 +30886,7 @@ var rl = class { getUserCode() { let t8 = this.isChannelsLast ? "getX(batch, xR, xC, d1);" : "getX(batch, d1, xR, xC);"; return ` - ${fr(this.activation, this.hasPreluActivation, false, 4)} + ${dr(this.activation, this.hasPreluActivation, false, 4)} ${G("index")} { if (index < uniforms.size) { @@ -30944,21 +30947,21 @@ var rl = class { } } } - ${Zr(this.addBias, this.activation)} + ${Qr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } `; } }; -function Oue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(p), m = u; +function Oue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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, true, l), f = [{ type: "int32", data: [d.padInfo.top, d.padInfo.left] }, { type: "int32", data: [d.inHeight, d.inWidth] }], h = d.dataFormat === "channelsLast", g; - return !h && d.inHeight > 16 && d.inWidth > 16 && d.strideHeight === 1 && d.strideWidth === 1 && d.dilationWidth === 1 && d.dilationHeight === 1 && d.inChannels === d.outChannels ? g = new $x(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 tl(d), f.push({ type: "int32", data: [g.virtualWidth] })) : (g = new rl(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] })), e.runWebGPUProgram(g, [n, s], n.dtype, f); + 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 _x(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 Qc(d), f.push({ type: "int32", data: [g.virtualWidth] })) : (g = new Zc(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] })), e.runWebGPUProgram(g, [n, s], n.dtype, f); } -var OV = { kernelName: dn, backendName: "webgpu", kernelFunc: Oue }; -var Ex = class { +var MV = { kernelName: mn, backendName: "webgpu", kernelFunc: Oue }; +var $x = class { constructor(t8) { 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 = true, this.outputShape = t8.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "depthwise_conv2d_backprop_filter"; @@ -31002,7 +31005,7 @@ var Ex = class { `; } }; -var Rx = class { +var Ex = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "depthwise_conv2d_backprop_input"; @@ -31053,17 +31056,17 @@ var Rx = class { `; } }; -function Mue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, dy: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Ex(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] }]; +function Mue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, dy: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), 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 e.runWebGPUProgram(m, [n, s], "float32", d); } -var MV = { kernelName: Mi, backendName: "webgpu", kernelFunc: Mue }; -function Lue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, filter: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), 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] }]; +var LV = { kernelName: Fi, backendName: "webgpu", kernelFunc: Mue }; +function Lue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, filter: s } = t8, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Ex(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 e.runWebGPUProgram(m, [n, s], n.dtype, d); } -var LV = { kernelName: Li, backendName: "webgpu", kernelFunc: Lue }; -var Dx = class { +var BV = { kernelName: Pi, backendName: "webgpu", kernelFunc: Lue }; +var Rx = class { constructor(t8) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8, t8], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "diag"; } @@ -31079,12 +31082,12 @@ var Dx = class { `; } }; -function Bue(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = pe({ inputs: { x: o }, backend: e, attrs: { shape: [s] } }), i = new Dx(s), p = e.runWebGPUProgram(i, [a], a.dtype), u = pe({ inputs: { x: p }, backend: e, attrs: { shape: n } }); +function Bue(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = pe({ inputs: { x: o }, backend: e, attrs: { shape: [s] } }), i = new Rx(s), p = e.runWebGPUProgram(i, [a], a.dtype), u = pe({ inputs: { x: p }, backend: e, attrs: { shape: n } }); return e.disposeData(a.dataId), e.disposeData(p.dataId), u; } -var BV = { kernelName: oa, backendName: "webgpu", kernelFunc: Bue }; -var Ax = class { +var zV = { kernelName: oa, backendName: "webgpu", kernelFunc: Bue }; +var Dx = class { constructor(t8) { this.variableNames = ["x", "w"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "dilation2d"; } @@ -31124,12 +31127,12 @@ var Ax = class { `; } }; -function zue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s } = t8, { 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); +function zue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s } = t8, { 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 Dx(u); return e.runWebGPUProgram(m, [n, s], n.dtype, l); } -var zV = { kernelName: fn, backendName: "webgpu", kernelFunc: zue }; -var Fx = class { +var VV = { kernelName: dn, backendName: "webgpu", kernelFunc: zue }; +var Ax = class { constructor(t8, e) { 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 = t8.inShape, this.dispatchLayout = X(t8.outShape), this.dispatch = H(this.dispatchLayout, t8.outShape, this.workgroupSize), e !== "float32" && e !== "int32") throw new Error(`Dilation2DBackpropInput only supports float32 and int32 @@ -31177,13 +31180,13 @@ var Fx = class { let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${Qr("&result[flatIndexIn]", "value", this.type)} + ${Yr("&result[flatIndexIn]", "value", this.type)} } } `; } }; -var Px = class { +var Fx = class { constructor(t8, e, 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 = t8.filterShape, this.dispatchLayout = X(t8.outShape), this.dispatch = H(this.dispatchLayout, t8.outShape, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 @@ -31230,25 +31233,25 @@ var Px = class { let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${Qr("&result[flatIndexIn]", "value", this.type)} + ${Yr("&result[flatIndexIn]", "value", this.type)} } } `; } }; -function Vue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, dy: a } = t8, { 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 = kt({ backend: e, attrs: { shape: s.shape, value: 0, dtype: l } }); +function Vue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, dy: a } = t8, { strides: i, pad: p, dilations: u } = o, c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = s.dtype, m = new Fx(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: e, attrs: { shape: s.shape, value: 0, dtype: l } }); return e.runWebGPUProgram(m, [n, s, a], l, d, f); } -var VV = { kernelName: zi, backendName: "webgpu", kernelFunc: Vue }; -function Wue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, dy: a } = t8, { 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 = kt({ backend: e, attrs: { shape: c.inShape, value: 0, dtype: l } }); +var WV = { kernelName: Mi, backendName: "webgpu", kernelFunc: Vue }; +function Wue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, dy: a } = t8, { strides: i, pad: p, dilations: u } = o, c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = n.dtype, m = new Ax(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: e, attrs: { shape: c.inShape, value: 0, dtype: l } }); return e.runWebGPUProgram(m, [n, s, a], l, d, f); } -var WV = { kernelName: Bi, backendName: "webgpu", kernelFunc: Wue }; -var Ox = class { +var UV = { kernelName: Oi, backendName: "webgpu", kernelFunc: Wue }; +var Px = class { constructor(t8, e, o) { - this.variableNames = ["Image"], this.uniforms = "alpha: f32,", this.workgroupSize = [64, 1, 1], this.pixelsOpType = Ii.DRAW, this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.type = e, this.textureFormat = o, this.shaderKey = `draw_${e}_${o}`; + this.variableNames = ["Image"], this.uniforms = "alpha: f32,", this.workgroupSize = [64, 1, 1], this.pixelsOpType = Ci.DRAW, this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.type = e, this.textureFormat = o, this.shaderKey = `draw_${e}_${o}`; } getUserCode() { let t8, e = this.type === "float32" ? "value" : "value / 255.0"; @@ -31278,8 +31281,8 @@ var Ox = class { `; } }; -function Uue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n } = t8, { canvas: s, options: a } = o, [i, p] = n.shape.slice(0, 2), { imageOptions: u } = a || {}, c = (u == null ? void 0 : u.alpha) || 1, l = e.device.features.has("bgra8unorm-storage") ? "bgra8unorm" : "rgba8unorm", m = [i, p], d = new Ox(m, n.dtype, l); +function Uue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n } = t8, { canvas: s, options: a } = o, [i, p] = n.shape.slice(0, 2), { imageOptions: u } = a || {}, c = (u == null ? void 0 : u.alpha) || 1, l = e.device.features.has("bgra8unorm-storage") ? "bgra8unorm" : "rgba8unorm", m = [i, p], d = new Px(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)); @@ -31296,55 +31299,55 @@ function Uue(r) { } return e.disposeData(C.dataId), n; } -var UV = { kernelName: Pu, backendName: "webgpu", kernelFunc: Uue }; -var s0 = et({ opType: fe.MUL, cpuKernelImpl: vz, supportsComplex: true }); -var GV = { kernelName: Yn, backendName: "webgpu", kernelFunc: s0 }; -function a0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; - return eo(n, s, a, "sum", e); +var GV = { kernelName: _u, backendName: "webgpu", kernelFunc: Uue }; +var a0 = et({ opType: fe.MUL, cpuKernelImpl: kz, supportsComplex: true }); +var HV = { kernelName: Xn, backendName: "webgpu", kernelFunc: a0 }; +function i0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; + return Jr(n, s, a, "sum", e); } -var HV = { kernelName: Is, backendName: "webgpu", kernelFunc: a0 }; -function Gue(r) { - let { inputs: t8, backend: e, attrs: o } = r, { equation: n } = o, s = t8, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); +var KV = { kernelName: Ss, backendName: "webgpu", kernelFunc: i0 }; +function Gue(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { equation: n } = o, s = t8, { 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 < l; ++h) { for (let g of c[h]) { let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; - w.isIdentityPermutation(x) ? C = s[g] : (C = yr({ inputs: { x: s[g] }, backend: e, attrs: { perm: x } }), f.push(C)); + w.isIdentityPermutation(x) ? C = s[g] : (C = xr({ inputs: { x: s[g] }, backend: e, 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); - y.arraysEqual(C.shape, S) || (C = pe({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = s0({ inputs: { a: C, b: m }, backend: e }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = pe({ inputs: { x: C }, backend: e, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = a0({ inputs: { a: C, b: m }, backend: e }), f.push(m)); } - h < l - 1 && (u[h] >= 0 && (m = a0({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = i0({ inputs: { x: m }, backend: e, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && e.disposeData(h.dataId); return m; } -var KV = { kernelName: Vi, backendName: "webgpu", kernelFunc: Gue }; +var qV = { kernelName: Li, backendName: "webgpu", kernelFunc: Gue }; var Hue = ye({ opType: Z.ELU }); -var qV = { kernelName: gn, backendName: "webgpu", kernelFunc: Hue }; -var Kue = (r) => { - let { inputs: t8, backend: e } = r, { dy: o, y: n } = t8, s = new ki(fe.ELU_DER, o.shape, n.shape); +var jV = { kernelName: hn, backendName: "webgpu", kernelFunc: Hue }; +var Kue = (r15) => { + let { inputs: t8, backend: e } = r15, { dy: o, y: n } = t8, s = new Si(fe.ELU_DER, o.shape, n.shape); return e.runWebGPUProgram(s, [o, n], o.dtype); }; -var jV = { kernelName: Ya, backendName: "webgpu", kernelFunc: Kue }; -var que = et({ opType: fe.EQUAL, dtype: "bool", cpuKernelImpl: pz }); -var XV = { kernelName: yn, backendName: "webgpu", kernelFunc: que }; +var XV = { kernelName: Xa, backendName: "webgpu", kernelFunc: Kue }; +var que = et({ opType: fe.EQUAL, dtype: "bool", cpuKernelImpl: cz }); +var YV = { kernelName: xn, backendName: "webgpu", kernelFunc: que }; var jue = ye({ opType: Z.ERF }); -var YV = { kernelName: xn, backendName: "webgpu", kernelFunc: jue }; -var Xue = ye({ opType: Z.EXP, cpuKernelImpl: cz, dtype: "float32" }); -var QV = { kernelName: bn, backendName: "webgpu", kernelFunc: Xue }; -function Mx(r) { - let { inputs: t8, attrs: e, backend: o } = r, { dim: n } = e, { input: s } = t8, a = s.shape.length, i = s.shape.slice(), p = n; +var QV = { kernelName: gn, backendName: "webgpu", kernelFunc: jue }; +var Xue = ye({ opType: Z.EXP, cpuKernelImpl: lz, dtype: "float32" }); +var ZV = { kernelName: yn, backendName: "webgpu", kernelFunc: Xue }; +function Ox(r15) { + let { inputs: t8, attrs: e, backend: o } = r15, { dim: n } = e, { input: s } = t8, 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 ZV = { kernelName: na, backendName: "webgpu", kernelFunc: Mx }; -var Yue = ye({ opType: Z.EXPM1, cpuKernelImpl: lz }); -var JV = { kernelName: Cn, backendName: "webgpu", kernelFunc: Yue }; -var ym = class { +var JV = { kernelName: na, backendName: "webgpu", kernelFunc: Ox }; +var Yue = ye({ opType: Z.EXPM1, cpuKernelImpl: mz }); +var eW = { kernelName: bn, backendName: "webgpu", kernelFunc: Yue }; +var gm = class { constructor(t8, e) { this.variableNames = ["real", "imag"], this.outputShape = [], this.uniforms = "exponentMultiplier : f32, denominator: f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.component = t8, this.shaderKey = `fft_${t8}`; } @@ -31385,24 +31388,24 @@ var ym = class { `; } }; -function Lx(r, t8, e) { - let o = e.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: e, attrs: { shape: [a, s] } }); +function Mx(r15, t8, e) { + let o = e.tensorMap.get(r15.dataId), n = y.sizeFromShape(r15.shape), s = r15.shape[r15.shape.length - 1], a = n / s, i = [], p = pe({ inputs: { x: r15 }, backend: e, 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 = t8 ? 2 * Math.PI : -2 * Math.PI, f = t8 ? u[1] : 1, h = [{ type: "float32", data: [d] }, { type: "float32", data: [f] }], g = e.runWebGPUProgram(c, m, "float32", h); + let u = p.shape, c = new gm("real", u), l = new gm("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 = t8 ? 2 * Math.PI : -2 * Math.PI, f = t8 ? u[1] : 1, h = [{ type: "float32", data: [d] }, { type: "float32", data: [f] }], g = e.runWebGPUProgram(c, m, "float32", h); i.push(g); let x = e.runWebGPUProgram(l, m, "float32", h); i.push(x); - let b = yo({ inputs: { real: g, imag: x }, backend: e }); + let b = xo({ inputs: { real: g, imag: x }, backend: e }); i.push(b); - let C = pe({ inputs: { x: b }, backend: e, attrs: { shape: r.shape } }); + let C = pe({ inputs: { x: b }, backend: e, attrs: { shape: r15.shape } }); return i.forEach((S) => e.disposeData(S.dataId)), C; } -function Que(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8; - return Lx(o, false, e); +function Que(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8; + return Mx(o, false, e); } -var eW = { kernelName: Wi, backendName: "webgpu", kernelFunc: Que }; -var Bx = class { +var tW = { kernelName: Bi, backendName: "webgpu", kernelFunc: Que }; +var Lx = class { constructor(t8) { this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "flipLeftRight"; } @@ -31419,17 +31422,17 @@ var Bx = class { `; } }; -var tW = { kernelName: wn, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: t8 }) => { - let { image: e } = r, o = t8, n = new Bx(e.shape); +var rW = { kernelName: Cn, backendName: "webgpu", kernelFunc: ({ inputs: r15, backend: t8 }) => { + let { image: e } = r15, o = t8, n = new Lx(e.shape); return o.runWebGPUProgram(n, [e], e.dtype); } }; -var Zue = ye({ opType: Z.FLOOR, cpuKernelImpl: mz }); -var rW = { kernelName: Sn, backendName: "webgpu", kernelFunc: Zue }; -var Jue = et({ opType: fe.FLOOR_DIV, cpuKernelImpl: dz, dtype: "int32" }); -var oW = { kernelName: In, backendName: "webgpu", kernelFunc: Jue }; -var zx = class { +var Zue = ye({ opType: Z.FLOOR, cpuKernelImpl: dz }); +var oW = { kernelName: wn, backendName: "webgpu", kernelFunc: Zue }; +var Jue = et({ opType: fe.FLOOR_DIV, cpuKernelImpl: fz, dtype: "int32" }); +var nW = { kernelName: Sn, backendName: "webgpu", kernelFunc: Jue }; +var Bx = class { constructor(t8, e, o = false) { - this.pixelsOpType = Ii.FROM_PIXELS, this.outputShape = [0], this.variableNames = [], this.workgroupSize = [256, 1, 1], this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [e, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; + this.pixelsOpType = Ci.FROM_PIXELS, this.outputShape = [0], this.variableNames = [], this.workgroupSize = [256, 1, 1], this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [e, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; } getUserCode() { let t8 = this.importVideo ? "textureLoad(src, vec2(coords.yx));" : "textureLoad(src, vec2(coords.yx), 0)"; @@ -31448,14 +31451,14 @@ var zx = class { `; } }; -var nW = { kernelName: Mu, backendName: "webgpu", kernelFunc: epe }; -var ol; -var i0 = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -function epe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { pixels: n } = t8, { numChannels: s } = o; +var sW = { kernelName: Eu, backendName: "webgpu", kernelFunc: epe }; +var Jc; +var u0 = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +function epe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { pixels: n } = t8, { 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 = false, f = a || i; + 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) @@ -31463,12 +31466,12 @@ function epe(r) { else { if (f) { let L = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); - (ol == null || L !== i0) && (i0 = L, ol = document.createElement("canvas").getContext("2d", { willReadFrequently: i0 })), ol.canvas.width = c, ol.canvas.height = l, ol.drawImage(n, 0, 0, c, l), n = ol.canvas; + (Jc == null || L !== u0) && (u0 = L, Jc = document.createElement("canvas").getContext("2d", { willReadFrequently: u0 })), Jc.canvas.width = c, Jc.canvas.height = l, Jc.drawImage(n, 0, 0, c, l), n = Jc.canvas; } let P = GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, O = "rgba8unorm", M = e.textureManager.acquireTexture(m[1], m[0], O, P); e.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] }], E = e.makeTensorInfo([l, c], "int32"), R = e.tensorMap.get(E.dataId); + let C = y.sizeFromShape(m), S = y.computeStrides(m), k = new Bx(m, s, d), _ = [{ type: "uint32", data: [C] }, { type: "uint32", data: [s] }, { type: "uint32", data: [...S] }], E = e.makeTensorInfo([l, c], "int32"), R = e.tensorMap.get(E.dataId); R.resource = b; let D = e.runWebGPUProgram(k, [E], "int32", _); return e.disposeData(E.dataId), D; @@ -31483,7 +31486,7 @@ function epe(r) { let x = e.makeTensorInfo(m, "int32", new Int32Array(g)); return e.uploadToGPU(x.dataId), x; } -var Vx = class { +var zx = class { constructor(t8, e, o, n, s) { this.uniforms = "varianceEpsilon : f32,", this.workgroupSize = [128, 1, 1], this.size = true, this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(t8, e), w.assertAndGetBroadcastShape(t8, o), this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), n != null && (w.assertAndGetBroadcastShape(t8, n), this.variableNames.push("offset")), s != null && (w.assertAndGetBroadcastShape(t8, s), this.variableNames.push("scale")), this.offsetShape = n, this.scaleShape = s, this.shaderKey = "batchNorm"; } @@ -31507,31 +31510,31 @@ var Vx = class { `; } }; -var sW = { kernelName: vn, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { x: o, scale: n, offset: s, mean: a, variance: i } = r, { varianceEpsilon: p } = t8, u = e, c = [o, a, i], l = null; +var aW = { kernelName: In, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { x: o, scale: n, offset: s, mean: a, variance: i } = r15, { varianceEpsilon: p } = t8, u = e, 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] }]; + let d = new zx(o.shape, a.shape, i.shape, l, m), f = [{ type: "float32", data: [p] }]; return u.runWebGPUProgram(d, c, o.dtype, f); } }; -function tpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, false, h); - return bx({ x: n, filter: s, convInfo: g, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: f, activation: d }); +function tpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, false, h); + return yx({ x: n, filter: s, convInfo: g, backend: e, bias: a, preluActivationWeights: i, leakyreluAlpha: f, activation: d }); } -var aW = { kernelName: vo, backendName: "webgpu", kernelFunc: tpe }; -function rpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = c; +var iW = { kernelName: Io, backendName: "webgpu", kernelFunc: tpe }; +function rpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = t8, { 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, true), g = [n, s], x = a != null, b = i != null; x && g.push(a), b && g.push(i); let C = [{ type: "int32", data: [h.padInfo.top, h.padInfo.left] }, { type: "int32", data: [h.inHeight, h.inWidth] }], 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 tl(h, x, m, b), C.push({ type: "int32", data: [S.virtualWidth] })) : (S = new rl(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,"), e.runWebGPUProgram(S, g, "float32", C); + return h.outHeight > 4 && h.outWidth > 4 && h.strideWidth <= 2 && h.inChannels === h.outChannels && h.dilationHeight === 1 && h.dilationWidth === 1 && h.inChannels % 4 === 0 ? (S = new Qc(h, x, m, b), C.push({ type: "int32", data: [S.virtualWidth] })) : (S = new Zc(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,"), e.runWebGPUProgram(S, g, "float32", C); } -var iW = { kernelName: ko, backendName: "webgpu", kernelFunc: rpe }; -var Wx = class { +var uW = { kernelName: vo, backendName: "webgpu", kernelFunc: rpe }; +var Vx = class { constructor(t8, e) { - this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `gathernd_${t8}`, this.sliceDim = t8, this.uniforms = `sliceDim : i32, strides : ${ht(t8)},`; + this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `gathernd_${t8}`, this.sliceDim = t8, this.uniforms = `sliceDim : i32, strides : ${ft(t8)},`; } getUserCode() { let t8; @@ -31552,17 +31555,17 @@ var Wx = class { `; } }; -function ope(r) { - let { inputs: t8, backend: e } = r, { params: o, indices: n } = t8, 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: e, attrs: { shape: [u, a] } }), d = pe({ inputs: { x: o }, backend: e, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); +function ope(r15) { + let { inputs: t8, backend: e } = r15, { params: o, indices: n } = t8, 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: e, attrs: { shape: [u, a] } }), d = pe({ inputs: { x: o }, backend: e, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); if (e.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let b = e.readSync(n.dataId), C = e.bufferSync(o), S = fz(b, C, o.dtype, u, a, c, l, o.shape, i); + let b = e.readSync(n.dataId), C = e.bufferSync(o), S = hz(b, C, o.dtype, u, a, c, l, o.shape, i); return e.makeTensorInfo(p, o.dtype, S.values); } - let f = new Wx(a, [u, c]), h = [{ type: "int32", data: [a] }, { type: "int32", data: l }], g = e.runWebGPUProgram(f, [d, m], d.dtype, h), x = pe({ inputs: { x: g }, backend: e, attrs: { shape: p } }); + let f = new Vx(a, [u, c]), h = [{ type: "int32", data: [a] }, { type: "int32", data: l }], g = e.runWebGPUProgram(f, [d, m], d.dtype, h), x = pe({ inputs: { x: g }, backend: e, attrs: { shape: p } }); return e.disposeData(m.dataId), e.disposeData(d.dataId), e.disposeData(g.dataId), x; } -var uW = { kernelName: kn, backendName: "webgpu", kernelFunc: ope }; -var Ux = class { +var pW = { kernelName: vn, backendName: "webgpu", kernelFunc: ope }; +var Wx = class { constructor(t8, e) { this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8.slice(), this.aShape = t8, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "gather"; } @@ -31580,51 +31583,51 @@ var Ux = class { `; } }; -function npe(r) { +function npe(r15) { let t8 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], e = []; - for (let o = 0; o < r.length; o++) + for (let o = 0; o < r15.length; o++) o === 2 ? e.push("indexZ") : e.push(`${t8[o]}`); return e.join(); } -function u0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = pe({ inputs: { x: n }, backend: e, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = pe({ inputs: { x: s }, backend: e, attrs: { shape: [u.batchSize, c / u.batchSize] } }); +function p0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, indices: s } = t8, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = pe({ inputs: { x: n }, backend: e, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = pe({ inputs: { x: s }, backend: e, 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 (e.shouldExecuteOnCPU([n, s])) { - let C = e.tensorMap.get(d.dataId).values, S = me(d.shape, d.dtype, C), _ = e.tensorMap.get(m.dataId).values, E = me(m.shape, m.dtype, _), R = hz(E, S, f); + let C = e.tensorMap.get(d.dataId).values, S = me(d.shape, d.dtype, C), _ = e.tensorMap.get(m.dataId).values, E = me(m.shape, m.dtype, _), R = gz(E, S, f); return l.forEach((D) => e.disposeData(D.dataId)), e.makeTensorInfo(u.outputShape, R.dtype, R.values); } - let h = new Ux(m.shape, f), g = e.runWebGPUProgram(h, [m, d], m.dtype); + let h = new Wx(m.shape, f), g = e.runWebGPUProgram(h, [m, d], m.dtype); l.push(g); let x = pe({ inputs: { x: g }, backend: e, attrs: { shape: u.outputShape } }); return l.forEach((b) => e.disposeData(b.dataId)), x; } -var pW = { kernelName: aa, backendName: "webgpu", kernelFunc: u0 }; -var spe = et({ opType: fe.GREATER, cpuKernelImpl: xz, dtype: "bool" }); -var cW = { kernelName: Nn, backendName: "webgpu", kernelFunc: spe }; -var ape = et({ opType: fe.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: gz }); -var lW = { kernelName: Tn, backendName: "webgpu", kernelFunc: ape }; -function ipe(r) { - let { inputs: t8, backend: e } = r, { input: o } = t8; - return Lx(o, true, e); +var cW = { kernelName: aa, backendName: "webgpu", kernelFunc: p0 }; +var spe = et({ opType: fe.GREATER, cpuKernelImpl: yz, dtype: "bool" }); +var lW = { kernelName: kn, backendName: "webgpu", kernelFunc: spe }; +var ape = et({ opType: fe.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: xz }); +var mW = { kernelName: Nn, backendName: "webgpu", kernelFunc: ape }; +function ipe(r15) { + let { inputs: t8, backend: e } = r15, { input: o } = t8; + return Mx(o, true, e); } -var mW = { kernelName: Ui, backendName: "webgpu", kernelFunc: ipe }; +var dW = { kernelName: zi, backendName: "webgpu", kernelFunc: ipe }; var upe = ye({ opType: Z.IS_FINITE, dtype: "bool" }); -var dW = { kernelName: _n, backendName: "webgpu", kernelFunc: upe }; +var fW = { kernelName: Tn, backendName: "webgpu", kernelFunc: upe }; var ppe = ye({ opType: Z.IS_INF, dtype: "bool" }); -var fW = { kernelName: $n, backendName: "webgpu", kernelFunc: ppe }; +var hW = { kernelName: _n, backendName: "webgpu", kernelFunc: ppe }; var cpe = ye({ opType: Z.IS_NAN, dtype: "bool" }); -var hW = { kernelName: En, backendName: "webgpu", kernelFunc: cpe }; -function lpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new Jr(n.shape, Z.LEAKYRELU, "alpha : f32,"); +var gW = { kernelName: $n, backendName: "webgpu", kernelFunc: cpe }; +function lpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new Zr(n.shape, Z.LEAKYRELU, "alpha : f32,"); return e.runWebGPUProgram(i, [n], "float32", a); } -var gW = { kernelName: Rn, backendName: "webgpu", kernelFunc: lpe }; -var mpe = et({ opType: fe.LESS, dtype: "bool", cpuKernelImpl: bz }); -var xW = { kernelName: Dn, backendName: "webgpu", kernelFunc: mpe }; -var dpe = et({ opType: fe.LESS_EQUAL, dtype: "bool", cpuKernelImpl: yz }); -var yW = { kernelName: An, backendName: "webgpu", kernelFunc: dpe }; -var Gx = class { +var xW = { kernelName: En, backendName: "webgpu", kernelFunc: lpe }; +var mpe = et({ opType: fe.LESS, dtype: "bool", cpuKernelImpl: Cz }); +var yW = { kernelName: Rn, backendName: "webgpu", kernelFunc: mpe }; +var dpe = et({ opType: fe.LESS_EQUAL, dtype: "bool", cpuKernelImpl: bz }); +var bW = { kernelName: Dn, backendName: "webgpu", kernelFunc: dpe }; +var Ux = class { constructor(t8) { this.variableNames = [], this.outputShape = [], this.uniforms = "start : f32, step : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "linSpace"; } @@ -31638,22 +31641,22 @@ var Gx = class { `; } }; -function fpe(r) { - let { backend: t8, attrs: e } = r, { start: o, stop: n, num: s } = e, a = (n - o) / (s - 1), i = new Gx(s), p = [{ type: "float32", data: [o] }, { type: "float32", data: [a] }]; +function fpe(r15) { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, num: s } = e, a = (n - o) / (s - 1), i = new Ux(s), p = [{ type: "float32", data: [o] }, { type: "float32", data: [a] }]; return t8.runWebGPUProgram(i, [], "float32", p); } -var bW = { kernelName: Fn, backendName: "webgpu", kernelFunc: fpe }; -var hpe = ye({ opType: Z.LOG, cpuKernelImpl: Cz }); -var CW = { kernelName: Pn, backendName: "webgpu", kernelFunc: hpe }; +var CW = { kernelName: An, backendName: "webgpu", kernelFunc: fpe }; +var hpe = ye({ opType: Z.LOG, cpuKernelImpl: wz }); +var wW = { kernelName: Fn, backendName: "webgpu", kernelFunc: hpe }; var gpe = ye({ opType: Z.LOG1P }); -var wW = { kernelName: On, backendName: "webgpu", kernelFunc: gpe }; +var SW = { kernelName: Pn, backendName: "webgpu", kernelFunc: gpe }; var xpe = et({ opType: fe.LOGICAL_AND, dtype: "bool" }); -var SW = { kernelName: Mn, backendName: "webgpu", kernelFunc: xpe }; +var IW = { kernelName: On, backendName: "webgpu", kernelFunc: xpe }; var ype = ye({ opType: Z.LOGICAL_NOT }); -var IW = { kernelName: Ln, backendName: "webgpu", kernelFunc: ype }; +var vW = { kernelName: Mn, backendName: "webgpu", kernelFunc: ype }; var bpe = et({ opType: fe.LOGICAL_OR }); -var vW = { kernelName: Bn, backendName: "webgpu", kernelFunc: bpe }; -var kW = ` +var kW = { kernelName: Ln, backendName: "webgpu", kernelFunc: bpe }; +var NW = ` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -31664,7 +31667,7 @@ var kW = ` powValue = exp(log(basis) * (-uniforms.beta)); } `; -var Hx = class { +var Gx = class { constructor(t8) { this.outputShape = [], this.variableNames = ["x"], this.uniforms = "radius : i32, bias : f32, alpha : f32, beta : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "lrn"; } @@ -31687,7 +31690,7 @@ var Hx = class { sum = sum + z * z; } } - ${kW} + ${NW} setOutputAtIndex(index, x * powValue); } @@ -31695,7 +31698,7 @@ var Hx = class { `; } }; -var Kx = class { +var Hx = class { constructor(t8, e) { 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(e <= this.maxAllowRadius, () => `Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${e}`), this.outputShape = t8, 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"; } @@ -31728,21 +31731,21 @@ var Kx = class { let z = lrnSub[index + i]; sum = sum + z * z; } - ${kW} + ${NW} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } } `; } }; -function Cpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u; - s > 16 ? u = new Hx(n.shape) : u = new Kx(n.shape, s); +function Cpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u; + s > 16 ? u = new Gx(n.shape) : u = new Hx(n.shape, s); let c = [{ type: "int32", data: [s] }, { type: "float32", data: [a] }, { type: "float32", data: [i] }, { type: "float32", data: [p] }]; return e.runWebGPUProgram(u, [n], n.dtype, c); } -var NW = { kernelName: zn, backendName: "webgpu", kernelFunc: Cpe }; -var qx = class { +var TW = { kernelName: Bn, backendName: "webgpu", kernelFunc: Cpe }; +var Kx = class { constructor(t8) { this.outputShape = [], this.variableNames = ["inputImage", "outputImage", "dy"], this.uniforms = "depthRadius : i32, bias : f32, alpha : f32, beta : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "lrn_grad"; } @@ -31800,24 +31803,24 @@ var qx = class { `; } }; -function wpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, y: s, dy: a } = t8, { 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] }]; +function wpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, y: s, dy: a } = t8, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new Kx(n.shape), m = [{ type: "int32", data: [i] }, { type: "float32", data: [p] }, { type: "float32", data: [u] }, { type: "float32", data: [c] }]; return e.runWebGPUProgram(l, [n, s, a], n.dtype, m); } -var TW = { kernelName: Qa, backendName: "webgpu", kernelFunc: wpe }; -var Spe = et({ opType: fe.MAX, cpuKernelImpl: Sz }); -var _W = { kernelName: Wn, backendName: "webgpu", kernelFunc: Spe }; -function Ipe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = w.computePool2DInfo(n.shape, s, a, u, i, p); - return ax(n, c, "max", e); +var _W = { kernelName: Ya, backendName: "webgpu", kernelFunc: wpe }; +var Spe = et({ opType: fe.MAX, cpuKernelImpl: Iz }); +var $W = { kernelName: Vn, backendName: "webgpu", kernelFunc: Spe }; +function Ipe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1, c = w.computePool2DInfo(n.shape, s, a, u, i, p); + return sx(n, c, "max", e); } -var $W = { kernelName: Un, backendName: "webgpu", kernelFunc: Ipe }; -function vpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 _u(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] }]; +var EW = { kernelName: Wn, backendName: "webgpu", kernelFunc: Ipe }; +function vpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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 wu(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 e.runWebGPUProgram(m, [n], n.dtype, d); } -var EW = { kernelName: ia, backendName: "webgpu", kernelFunc: vpe }; -var jx = class { +var RW = { kernelName: ia, backendName: "webgpu", kernelFunc: vpe }; +var qx = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "maxPool2DBackprop"; @@ -31870,7 +31873,7 @@ var jx = class { `; } }; -var Xx = class { +var jx = class { constructor(t8) { 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 = true, this.outputShape = t8.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "maxPool3DBackprop"; @@ -31936,48 +31939,48 @@ var Xx = class { `; } }; -function kpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s } = t8, 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 _u(m, "max", true), 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 = e.runWebGPUProgram(d, [a], "int32", f), g = new Xx(m); +function kpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s } = t8, 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 wu(m, "max", true), 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 = e.runWebGPUProgram(d, [a], "int32", f), g = new jx(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 = e.runWebGPUProgram(g, [n, h], a.dtype, f); return e.disposeData(h.dataId), x; } -var RW = { kernelName: Ki, backendName: "webgpu", kernelFunc: kpe }; -function Npe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { dy: n, input: s, output: a } = t8, 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 za(m, "max", true), 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 = e.runWebGPUProgram(d, [i], "int32", f), g = new jx(m); +var DW = { kernelName: Ui, backendName: "webgpu", kernelFunc: kpe }; +function Npe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { dy: n, input: s, output: a } = t8, i = s; + mm([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", true), 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 = e.runWebGPUProgram(d, [i], "int32", f), g = new qx(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 = e.runWebGPUProgram(g, [n, h], i.dtype, f); return e.disposeData(h.dataId), x; } -var DW = { kernelName: Hi, backendName: "webgpu", kernelFunc: Npe }; -function Tpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = o, { x: p } = t8; +var AW = { kernelName: Wi, backendName: "webgpu", kernelFunc: Npe }; +function Tpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = o, { x: p } = t8; 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 za(c, "max", false), d = e.runWebGPUProgram(m, [p], p.dtype, l); - m = new za(c, "max", true, true, i); + 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", false), d = e.runWebGPUProgram(m, [p], p.dtype, l); + m = new Ba(c, "max", true, true, i); let f = e.runWebGPUProgram(m, [p], "int32", l); return [d, f]; } -var AW = { kernelName: ua, backendName: "webgpu", kernelFunc: Tpe }; -function _pe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; - return eo(n, s, a, "min", e); +var FW = { kernelName: ua, backendName: "webgpu", kernelFunc: Tpe }; +function _pe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; + return Jr(n, s, a, "min", e); } -var FW = { kernelName: Hn, backendName: "webgpu", kernelFunc: _pe }; -var $pe = et({ opType: fe.MIN, cpuKernelImpl: Iz }); -var PW = { kernelName: Kn, backendName: "webgpu", kernelFunc: $pe }; -var Yx = class { +var PW = { kernelName: Gn, backendName: "webgpu", kernelFunc: _pe }; +var $pe = et({ opType: fe.MIN, cpuKernelImpl: vz }); +var OW = { kernelName: Hn, backendName: "webgpu", kernelFunc: $pe }; +var Xx = class { constructor(t8, e, o) { this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.map((n, s) => n[0] + t8[s] + n[1]), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = t8, e.map((n, s) => { this.uniforms += ` pad${s} : vec2,`; }), this.offset = o === "reflect" ? 0 : 1, this.shaderKey = `mirrorPad_${o}`; } getUserCode() { - let t8 = this.xShape.length, e = this.xShape.map((u, c) => `uniforms.pad${c}[0]`).join(","), o = this.xShape.map((u, c) => `uniforms.pad${c}[0] + uniforms.xShape${t8 > 1 ? `[${c}]` : ""}`).join(","), n = t8 === 1 ? "start" : "start[i]", s = t8 === 1 ? "end" : "end[i]", a = t8 === 1 ? "outC" : "outC[i]", i = ht(t8), p = t8 > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, t8) : "coords"; + let t8 = this.xShape.length, e = this.xShape.map((u, c) => `uniforms.pad${c}[0]`).join(","), o = this.xShape.map((u, c) => `uniforms.pad${c}[0] + uniforms.xShape${t8 > 1 ? `[${c}]` : ""}`).join(","), n = t8 === 1 ? "start" : "start[i]", s = t8 === 1 ? "end" : "end[i]", a = t8 === 1 ? "outC" : "outC[i]", i = ft(t8), p = t8 > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, t8) : "coords"; return ` ${G("index")} { if (index < uniforms.size) { @@ -31998,13 +32001,13 @@ var Yx = class { `; } }; -var OW = { kernelName: qn, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { x: o } = r, { paddings: n, mode: s } = t8, a = e, i = n.map((c) => ({ type: "int32", data: [c[0], c[1]] })), p = new Yx(o.shape, n, s); +var MW = { kernelName: Kn, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { x: o } = r15, { paddings: n, mode: s } = t8, a = e, i = n.map((c) => ({ type: "int32", data: [c[0], c[1]] })), p = new Xx(o.shape, n, s); return a.runWebGPUProgram(p, [o], o.dtype, i); } }; var Epe = et({ opType: fe.MOD }); -var MW = { kernelName: jn, backendName: "webgpu", kernelFunc: Epe }; -var Qx = class { +var LW = { kernelName: qn, backendName: "webgpu", kernelFunc: Epe }; +var Yx = class { constructor(t8, e) { this.variableNames = ["probs"], this.outputShape = [], this.uniforms = "seed : f32, numOutcomes: i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8, e], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "multinomial"; } @@ -32045,7 +32048,7 @@ var Qx = class { `; } }; -var Zx = class { +var Qx = class { constructor(t8) { this.variableNames = ["logits"], this.outputShape = t8, 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"; } @@ -32112,39 +32115,39 @@ var Zx = class { `; } }; -function p0(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { dim: s } = o, a = pe({ inputs: { x: n }, backend: e, attrs: { shape: [y.sizeFromShape(n.shape) / n.shape[s], n.shape[s]] } }), i = new Zx(a.shape), p = e.runWebGPUProgram(i, [a], n.dtype), u = pe({ inputs: { x: p }, backend: e, attrs: { shape: n.shape } }); +function c0(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { dim: s } = o, a = pe({ inputs: { x: n }, backend: e, attrs: { shape: [y.sizeFromShape(n.shape) / n.shape[s], n.shape[s]] } }), i = new Qx(a.shape), p = e.runWebGPUProgram(i, [a], n.dtype), u = pe({ inputs: { x: p }, backend: e, attrs: { shape: n.shape } }); return e.disposeData(a.dataId), e.disposeData(p.dataId), u; } -var LW = { kernelName: vs, backendName: "webgpu", kernelFunc: p0 }; -function Rpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : p0({ inputs: { logits: n }, backend: e, 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 = e.runWebGPUProgram(l, [p], "int32", m); +var BW = { kernelName: Is, backendName: "webgpu", kernelFunc: c0 }; +function Rpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { logits: n } = t8, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : c0({ inputs: { logits: n }, backend: e, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new Yx(u, s), m = [{ type: "float32", data: [a] }, { type: "int32", data: [c] }], d = e.runWebGPUProgram(l, [p], "int32", m); return i || e.disposeData(p.dataId), d; } -var BW = { kernelName: Xn, backendName: "webgpu", kernelFunc: Rpe }; -function Dpe(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var zW = { kernelName: jn, backendName: "webgpu", kernelFunc: Rpe }; +function Dpe(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (e.shouldExecuteOnCPU([o])) { - let s = e.tensorMap.get(o.dataId), [a, i] = kz(s.values, o.shape, o.dtype); + let s = e.tensorMap.get(o.dataId), [a, i] = Nz(s.values, o.shape, o.dtype); return e.makeTensorInfo(i, o.dtype, a); } - let n = new Jr(o.shape, Z.NEG); + let n = new Zr(o.shape, Z.NEG); return e.runWebGPUProgram(n, [o], o.dtype); } -var zW = { kernelName: pa, backendName: "webgpu", kernelFunc: Dpe }; -function Ape(r) { +var VW = { kernelName: pa, backendName: "webgpu", kernelFunc: Dpe }; +function Ape(r15) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), { selectedIndices: l } = Wt.nonMaxSuppressionV3Impl(u, c, a, i, p); + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = e.readSync(n.dataId), c = e.readSync(s.dataId), { selectedIndices: l } = Vt.nonMaxSuppressionV3Impl(u, c, a, i, p); return e.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var VW = { kernelName: Zn, backendName: "webgpu", kernelFunc: Ape }; -function Fpe(r) { +var WW = { kernelName: Qn, backendName: "webgpu", kernelFunc: Ape }; +function Fpe(r15) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: t8, backend: e, attrs: o } = r, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Wt.nonMaxSuppressionV5Impl(c, l, m, d, f, h); + let { inputs: t8, backend: e, attrs: o } = r15, { boxes: n, scores: s } = t8, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = e.readSync(n.dataId), l = e.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Vt.nonMaxSuppressionV5Impl(c, l, m, d, f, h); return [e.makeTensorInfo([g.length], "int32", new Int32Array(g)), e.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var WW = { kernelName: Jn, backendName: "webgpu", kernelFunc: Fpe }; -var Jx = class { +var UW = { kernelName: Zn, backendName: "webgpu", kernelFunc: Fpe }; +var Zx = class { constructor(t8, e) { this.variableNames = ["x"], this.uniforms = "onValue : f32, offValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8, e], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "onehot"; } @@ -32160,50 +32163,50 @@ var Jx = class { `; } }; -function Ppe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n } = t8, { 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: e, attrs: { shape: [u] } }), m = [{ type: "float32", data: [i] }, { type: "float32", data: [p] }], d = e.runWebGPUProgram(c, [l], s, m); +function Ppe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n } = t8, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new Zx(u, a), l = pe({ inputs: { x: n }, backend: e, attrs: { shape: [u] } }), m = [{ type: "float32", data: [i] }, { type: "float32", data: [p] }], d = e.runWebGPUProgram(c, [l], s, m); e.disposeData(l.dataId); let f = [...n.shape, a], h = pe({ inputs: { x: d }, backend: e, attrs: { shape: f } }); return e.disposeData(d.dataId), h; } -var UW = { kernelName: es, backendName: "webgpu", kernelFunc: Ppe }; -function bm(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var GW = { kernelName: Jn, backendName: "webgpu", kernelFunc: Ppe }; +function xm(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "complex64") { - let n = Ni({ inputs: { input: o }, backend: e }), s = bm({ inputs: { x: n }, backend: e }), a = Mp({ inputs: { input: o }, backend: e }), i = bm({ inputs: { x: a }, backend: e }), p = yo({ inputs: { real: s, imag: i }, backend: e }); + let n = Ii({ inputs: { input: o }, backend: e }), s = xm({ inputs: { x: n }, backend: e }), a = $p({ inputs: { input: o }, backend: e }), i = xm({ inputs: { x: a }, backend: e }), p = xo({ inputs: { real: s, imag: i }, backend: e }); return e.disposeData(n.dataId), e.disposeData(s.dataId), e.disposeData(a.dataId), e.disposeData(i.dataId), p; } else - return kt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: e }); + return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: e }); } -var GW = { kernelName: Sa, backendName: "webgpu", kernelFunc: bm }; -function HW(r) { - let { inputs: t8, backend: e } = r, { x: o } = t8; +var HW = { kernelName: Sa, backendName: "webgpu", kernelFunc: xm }; +function KW(r15) { + let { inputs: t8, backend: e } = r15, { x: o } = t8; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = Ni({ inputs: { input: o }, backend: e }), s = HW({ inputs: { x: n }, backend: e }), a = Mp({ inputs: { input: o }, backend: e }), i = bm({ inputs: { x: a }, backend: e }), p = yo({ inputs: { real: s, imag: i }, backend: e }); + let n = Ii({ inputs: { input: o }, backend: e }), s = KW({ inputs: { x: n }, backend: e }), a = $p({ inputs: { input: o }, backend: e }), i = xm({ inputs: { x: a }, backend: e }), p = xo({ inputs: { real: s, imag: i }, backend: e }); return e.disposeData(n.dataId), e.disposeData(s.dataId), e.disposeData(a.dataId), e.disposeData(i.dataId), p; } else - return kt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: e }); + return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: e }); } -var KW = { kernelName: ca, backendName: "webgpu", kernelFunc: HW }; -function Ope(r) { - let { inputs: t8, backend: e, attrs: o } = r, { axis: n } = o; +var qW = { kernelName: ca, backendName: "webgpu", kernelFunc: KW }; +function Ope(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { axis: n } = o; if (t8.length === 1) - return Mx({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); + return Ox({ inputs: { input: t8[0] }, backend: e, attrs: { dim: n } }); let s = t8[0].shape, a = t8[0].dtype; t8.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 = t8.map((c) => { - let l = Mx({ inputs: { input: c }, backend: e, attrs: { dim: n } }); + let l = Ox({ inputs: { input: c }, backend: e, attrs: { dim: n } }); return i.push(l), l; - }), u = n0({ inputs: p, backend: e, attrs: { axis: n } }); + }), u = s0({ inputs: p, backend: e, attrs: { axis: n } }); return i.forEach((c) => e.disposeData(c.dataId)), u; } -var qW = { kernelName: la, backendName: "webgpu", kernelFunc: Ope }; -function c0(r, t8 = false) { - let e = r.length, o = ht(e), n = r.map((l, m) => `uniforms.pad${m}[0]`).join(","), s = r.map((l, m) => `uniforms.pad${m}[0] + uniforms.xShape${e > 1 ? `[${m}]` : ""}`).join(","), a = e > 1 ? `${o}(${n})` : `${n}`, i = e > 1 ? `${o}(${s})` : `${s}`, p = e > 1 ? "any(paddedCoords < start)" : "paddedCoords < start", u = e > 1 ? "any(paddedCoords >= end)" : "paddedCoords >= end", c = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; +var jW = { kernelName: la, backendName: "webgpu", kernelFunc: Ope }; +function l0(r15, t8 = false) { + let e = r15.length, o = ft(e), n = r15.map((l, m) => `uniforms.pad${m}[0]`).join(","), s = r15.map((l, m) => `uniforms.pad${m}[0] + uniforms.xShape${e > 1 ? `[${m}]` : ""}`).join(","), a = e > 1 ? `${o}(${n})` : `${n}`, i = e > 1 ? `${o}(${s})` : `${s}`, p = e > 1 ? "any(paddedCoords < start)" : "paddedCoords < start", u = e > 1 ? "any(paddedCoords >= end)" : "paddedCoords >= end", c = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; return ` let start = ${a}; let end = ${i}; @@ -32215,7 +32218,7 @@ function c0(r, t8 = false) { } `; } -var ey = class { +var Jx = class { constructor(t8, e) { this.variableNames = ["x"], this.uniforms = "constantValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.map((o, n) => o[0] + t8[n] + o[1]), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), e.map((o, n) => { this.uniforms += ` pad${n} : vec2,`; @@ -32226,52 +32229,52 @@ var ey = class { ${G("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${c0(this.xShape)} + ${l0(this.xShape)} } } `; } }; -var Mpe = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { paddings: s, constantValue: a } = o; +var Mpe = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { paddings: s, constantValue: a } = o; if (s.every((u) => y.arraysEqual(u, [0, 0]))) - return Ft({ inputs: { x: n }, backend: e }); + return At({ inputs: { x: n }, backend: e }); if (y.sizeFromShape(n.shape) === 0) { let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); - return kt({ backend: e, attrs: { shape: u, value: a, dtype: n.dtype } }); + return vt({ backend: e, 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); + let p = new Jx(n.shape, s); return e.runWebGPUProgram(p, [n], n.dtype, i); }; -var jW = { kernelName: ts, backendName: "webgpu", kernelFunc: Mpe }; +var XW = { kernelName: es, backendName: "webgpu", kernelFunc: Mpe }; var Lpe = et({ opType: fe.POW }); -var XW = { kernelName: rs, backendName: "webgpu", kernelFunc: Lpe }; -function Bpe(r) { - let { inputs: t8, backend: e } = r, { x: o, alpha: n } = t8, s = new ki(fe.PRELU, o.shape, n.shape); +var YW = { kernelName: ts, backendName: "webgpu", kernelFunc: Lpe }; +function Bpe(r15) { + let { inputs: t8, backend: e } = r15, { x: o, alpha: n } = t8, s = new Si(fe.PRELU, o.shape, n.shape); return e.runWebGPUProgram(s, [o, n], "float32"); } -var YW = { kernelName: os, backendName: "webgpu", kernelFunc: Bpe }; -function zpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { axis: s, keepDims: a } = o; - return eo(n, s, a, "prod", e); +var QW = { kernelName: rs, backendName: "webgpu", kernelFunc: Bpe }; +function zpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { axis: s, keepDims: a } = o; + return Jr(n, s, a, "prod", e); } -var QW = { kernelName: ns, backendName: "webgpu", kernelFunc: zpe }; -var Vpe = (r) => { - let { backend: t8, attrs: e } = r, { start: o, stop: n, step: s, dtype: a } = e, i = _z(o, n, s, a); +var ZW = { kernelName: os, backendName: "webgpu", kernelFunc: zpe }; +var Vpe = (r15) => { + let { backend: t8, attrs: e } = r15, { start: o, stop: n, step: s, dtype: a } = e, i = $z(o, n, s, a); return t8.makeTensorInfo([i.length], a, i); }; -var ZW = { kernelName: ma, backendName: "webgpu", kernelFunc: Vpe }; +var JW = { kernelName: ma, backendName: "webgpu", kernelFunc: Vpe }; var Wpe = et({ opType: fe.DIV }); -var JW = { kernelName: hn, backendName: "webgpu", kernelFunc: Wpe }; +var eU = { kernelName: fn, backendName: "webgpu", kernelFunc: Wpe }; var Upe = ye({ opType: Z.RECIPROCAL }); -var eU = { kernelName: ss, backendName: "webgpu", kernelFunc: Upe }; +var tU = { kernelName: ns, backendName: "webgpu", kernelFunc: Upe }; var Gpe = ye({ opType: Z.RELU }); -var tU = { kernelName: as, backendName: "webgpu", kernelFunc: Gpe }; +var rU = { kernelName: ss, backendName: "webgpu", kernelFunc: Gpe }; var Hpe = ye({ opType: Z.RELU6 }); -var rU = { kernelName: ps, backendName: "webgpu", kernelFunc: Hpe }; -var ty = class { +var oU = { kernelName: us, backendName: "webgpu", kernelFunc: Hpe }; +var ey = class { constructor(t8, e, o) { this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, halfPixelCenters : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8[0], e, o, t8[3]], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "resizeBilinear"; } @@ -32322,12 +32325,12 @@ var ty = class { `; } }; -function Kpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [i ? 0.5 : 0] }], f = new ty(n.shape, p, u); +function Kpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [i ? 0.5 : 0] }], f = new ey(n.shape, p, u); return e.runWebGPUProgram(f, [n], "float32", d); } -var oU = { kernelName: us, backendName: "webgpu", kernelFunc: Kpe }; -var ry = class { +var nU = { kernelName: is, backendName: "webgpu", kernelFunc: Kpe }; +var ty = class { constructor(t8, e) { 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 = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.alignCorners = e, this.shaderKey = `resizeBilinearBackprop_${e}`; @@ -32410,12 +32413,12 @@ var ry = class { `; } }; -function qpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { 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] }]; +function qpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { 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 ty(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 e.runWebGPUProgram(C, [s], s.dtype, S); } -var nU = { kernelName: ei, backendName: "webgpu", kernelFunc: qpe }; -var oy = class { +var sU = { kernelName: Ja, backendName: "webgpu", kernelFunc: qpe }; +var ry = class { constructor(t8, e, o, n) { this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, roundBase : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [t8[0], e, o, t8[3]], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.halfPixelCenters = n, this.shaderKey = `resizeNearest_${n}`; } @@ -32455,12 +32458,12 @@ var oy = class { `; } }; -function jpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [s ? 0.5 : 0] }], f = new oy(n.shape, p, u, a); +function jpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n } = t8, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [s ? 0.5 : 0] }], f = new ry(n.shape, p, u, a); return e.runWebGPUProgram(f, [n], n.dtype, d); } -var sU = { kernelName: is, backendName: "webgpu", kernelFunc: jpe }; -var ny = class { +var aU = { kernelName: as, backendName: "webgpu", kernelFunc: jpe }; +var oy = class { constructor(t8, e) { this.variableNames = ["dy"], this.uniforms = `effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.alignCorners = e, this.shaderKey = `resizeNearestNeigborBackprop_${e}`; @@ -32528,12 +32531,12 @@ var ny = class { `; } }; -function Xpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { images: n, dy: s } = t8, { 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] }]; +function Xpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { images: n, dy: s } = t8, { 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 oy(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 e.runWebGPUProgram(C, [s], s.dtype, S); } -var aU = { kernelName: Ja, backendName: "webgpu", kernelFunc: Xpe }; -var sy = class { +var iU = { kernelName: Za, backendName: "webgpu", kernelFunc: Xpe }; +var ny = class { constructor(t8) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = " axis : vec4,", this.shaderKey = "reverse"; } @@ -32571,10 +32574,10 @@ var sy = class { `; } }; -function Ype(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { dims: s } = o, a = n.shape.length; +function Ype(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { dims: s } = o, a = n.shape.length; if (a === 0) - return Ft({ inputs: { x: n }, backend: e }); + return At({ inputs: { x: n }, backend: e }); let i = n.shape, p = [1, 1, 1, 1]; i.forEach((g, x) => { let b = x + 4 - a; @@ -32585,13 +32588,13 @@ function Ype(r) { let x = g + 4 - a; c[x] = 1; }); - let l = [{ type: "int32", data: c }], m = pe({ inputs: { x: n }, backend: e, attrs: { shape: p } }), d = new sy(p), f = e.runWebGPUProgram(d, [m], m.dtype, l); + let l = [{ type: "int32", data: c }], m = pe({ inputs: { x: n }, backend: e, attrs: { shape: p } }), d = new ny(p), f = e.runWebGPUProgram(d, [m], m.dtype, l); e.disposeData(m.dataId); let h = pe({ inputs: { x: f }, backend: e, attrs: { shape: i } }); return e.disposeData(f.dataId), h; } -var iU = { kernelName: cs, backendName: "webgpu", kernelFunc: Ype }; -var ay = class { +var uU = { kernelName: ps, backendName: "webgpu", kernelFunc: Ype }; +var sy = class { constructor(t8, e) { this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`, this.shaderKey = "rotate", this.outputShape = t8, typeof e == "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"); @@ -32620,18 +32623,18 @@ var ay = class { `; } }; -var uU = { kernelName: As, backendName: "webgpu", kernelFunc: ({ inputs: r, attrs: t8, backend: e }) => { - let { image: o } = r, { radians: n, fillValue: s, center: a } = t8, i = e, 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)] }]; +var pU = { kernelName: Ds, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: t8, backend: e }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = t8, i = e, p = new sy(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 Qpe = ye({ opType: Z.ROUND }); -var pU = { kernelName: ls, backendName: "webgpu", kernelFunc: Qpe }; -var Zpe = ye({ opType: Z.RSQRT, cpuKernelImpl: $z }); -var cU = { kernelName: ms, backendName: "webgpu", kernelFunc: Zpe }; -var Va = class { +var cU = { kernelName: cs, backendName: "webgpu", kernelFunc: Qpe }; +var Zpe = ye({ opType: Z.RSQRT, cpuKernelImpl: Ez }); +var lU = { kernelName: ls, backendName: "webgpu", kernelFunc: Zpe }; +var za = class { constructor(t8, e, o, n, s, a, i, p = true) { - this.variableNames = ["updates", "indices"], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = a, this.type = i, this.sumDupeIndices = p, this.dispatchLayout = X(t8), this.dispatch = H(this.dispatchLayout, t8, this.workgroupSize), this.sliceDimGreaterThanOne = e > 1, this.shaderKey = `scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`; - let u = ht(s.length); + this.variableNames = ["updates", "indices"], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = a, this.type = i, this.sumDupeIndices = p, this.dispatchLayout = X(t8), this.dispatch = H(this.dispatchLayout, t8, this.workgroupSize), this.sliceDimGreaterThanOne = e > 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() { @@ -32666,23 +32669,23 @@ var Va = class { flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Nu(this.type)}(${i}); + ${Cu(this.type)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices ? Qr("&result[flatIndex]", "updateValue", this.type) : "atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices ? Yr("&result[flatIndex]", "updateValue", this.type) : "atomicStore(&result[flatIndex], bitcast(updateValue));"} } }`; } }; -function Jpe(r) { - let { inputs: t8, backend: e, attrs: o } = r, { indices: n, updates: s } = t8, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; +function Jpe(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { indices: n, updates: s } = t8, { 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 e.makeTensorInfo(a, n.dtype); - let d = pe({ inputs: { x: n }, backend: e, attrs: { shape: [p, i] } }), f = pe({ inputs: { x: s }, backend: e, attrs: { shape: [p, u] } }), h = f.dtype, g = kt({ backend: e, 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 Va(f.shape, i, d.shape.length, f.shape.length, c, m, h), S = e.runWebGPUProgram(C, [f, d], h, b, g), k = pe({ inputs: { x: S }, backend: e, attrs: { shape: a } }); + let d = pe({ inputs: { x: n }, backend: e, attrs: { shape: [p, i] } }), f = pe({ inputs: { x: s }, backend: e, attrs: { shape: [p, u] } }), h = f.dtype, g = vt({ backend: e, 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 = e.runWebGPUProgram(C, [f, d], h, b, g), k = pe({ inputs: { x: S }, backend: e, attrs: { shape: a } }); return e.disposeData(d.dataId), e.disposeData(f.dataId), e.disposeData(S.dataId), k; } -var lU = { kernelName: ds, backendName: "webgpu", kernelFunc: Jpe }; -var iy = class { +var mU = { kernelName: ms, backendName: "webgpu", kernelFunc: Jpe }; +var ay = class { constructor(t8, e) { this.outputShape = [], this.variableNames = ["sortedSequence", "values"], this.uniforms = "numInputs : i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.side = e, this.shaderKey = `search_sorted_${e}`; } @@ -32712,12 +32715,12 @@ var iy = class { `; } }; -function ece(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sortedSequence: n, values: s } = t8, { side: a } = o, i = new iy([s.shape[0], s.shape[1]], a), p = [{ type: "int32", data: [n.shape[1]] }]; +function ece(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sortedSequence: n, values: s } = t8, { side: a } = o, i = new ay([s.shape[0], s.shape[1]], a), p = [{ type: "int32", data: [n.shape[1]] }]; return e.runWebGPUProgram(i, [n, s], "int32", p); } -var mU = { kernelName: hs, backendName: "webgpu", kernelFunc: ece }; -var uy = class { +var dU = { kernelName: fs, backendName: "webgpu", kernelFunc: ece }; +var iy = class { constructor(t8, e, o) { this.variableNames = ["c", "a", "b"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.cRank = t8, this.rank = o, this.shaderKey = "select"; } @@ -32748,62 +32751,62 @@ var uy = class { `; } }; -function tce(r) { - let { inputs: t8, backend: e } = r, { condition: o, t: n, e: s } = t8, a = new uy(o.shape.length, n.shape, n.shape.length); +function tce(r15) { + let { inputs: t8, backend: e } = r15, { condition: o, t: n, e: s } = t8, a = new iy(o.shape.length, n.shape, n.shape.length); return e.runWebGPUProgram(a, [o, n, s], dt(n.dtype, s.dtype)); } -var dU = { kernelName: fa, backendName: "webgpu", kernelFunc: tce }; +var fU = { kernelName: fa, backendName: "webgpu", kernelFunc: tce }; var rce = ye({ opType: Z.SELU }); -var fU = { kernelName: gs, backendName: "webgpu", kernelFunc: rce }; +var hU = { kernelName: hs, backendName: "webgpu", kernelFunc: rce }; var oce = ye({ opType: Z.SIGMOID }); -var hU = { kernelName: Cs, backendName: "webgpu", kernelFunc: oce }; +var gU = { kernelName: bs, backendName: "webgpu", kernelFunc: oce }; var nce = ye({ opType: Z.SIGN }); -var gU = { kernelName: bs, backendName: "webgpu", kernelFunc: nce }; +var xU = { kernelName: ys, backendName: "webgpu", kernelFunc: nce }; var sce = ye({ opType: Z.SIN }); -var xU = { kernelName: xs, backendName: "webgpu", kernelFunc: sce }; +var yU = { kernelName: gs, backendName: "webgpu", kernelFunc: sce }; var ace = ye({ opType: Z.SINH }); -var yU = { kernelName: ys, backendName: "webgpu", kernelFunc: ace }; +var bU = { kernelName: xs, backendName: "webgpu", kernelFunc: ace }; var ice = ye({ opType: Z.SOFTPLUS }); -var bU = { kernelName: ws, backendName: "webgpu", kernelFunc: ice }; -var py = class { +var CU = { kernelName: Cs, backendName: "webgpu", kernelFunc: ice }; +var uy = class { constructor(t8, e, 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]]; - this.outputShape = i, this.newDim = s, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = t8, this.paddedXShape = e, this.uniforms += `reshapedPaddedXShape : ${ht(n.length)}, paddedXShapeStrides : ${ht(a)}, `, o.map((p, u) => { + this.outputShape = i, this.newDim = s, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = t8, this.paddedXShape = e, this.uniforms += `reshapedPaddedXShape : ${ft(n.length)}, paddedXShapeStrides : ${ft(a)}, `, o.map((p, u) => { this.uniforms += ` pad${u} : vec2,`; }), this.shaderKey = `spaceToBatchND_${s}`; } getUserCode() { - let t8 = ht(this.outputShape.length), e = Zv(this.newDim); + let t8 = ft(this.outputShape.length), e = Jv(this.newDim); return ` - ${cm(this.paddedXShape, "PaddedX")} + ${um(this.paddedXShape, "PaddedX")} ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${t8}(${e}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${c0(this.xShape, true)} + ${l0(this.xShape, true)} } } `; } }; -var uce = (r) => { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { blockShape: s, paddings: a } = o; +var uce = (r15) => { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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; 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 }]; + 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 uy(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 = e.runWebGPUProgram(f, [n], n.dtype, h), x = pe({ inputs: { x: g }, backend: e, attrs: { shape: m } }); return e.disposeData(g.dataId), x; }; -var CU = { kernelName: ga, backendName: "webgpu", kernelFunc: uce }; -var cy = class { +var wU = { kernelName: ga, backendName: "webgpu", kernelFunc: uce }; +var py = class { constructor(t8, e, o) { this.variableNames = ["input", "indices", "segmentIds"], this.outputShape = [], this.uniforms = "segmentSize : i32, sparseSize : i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = t8, this.type = o, this.dispatchLayout = X([e]), this.dispatch = H(this.dispatchLayout, [e], this.workgroupSize), this.shaderKey = "sparseSegmentSum"; } @@ -32818,13 +32821,13 @@ var cy = class { let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${Qr("&result[outIndex]", "value", this.type)} + ${Yr("&result[outIndex]", "value", this.type)} } } `; } }; -var ly = class { +var cy = class { constructor(t8, e) { this.variableNames = ["segmentIds"], this.outputShape = [], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = [t8], this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), this.shaderKey = "sparseSegmentIdCountProgram"; } @@ -32833,13 +32836,13 @@ var ly = class { ${G("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; - ${Qr("&result[segmentId]", "1", "int32")} + ${Yr("&result[segmentId]", "1", "int32")} } } `; } }; -var my = class { +var ly = class { constructor(t8, e) { this.variableNames = ["segmentSum", "sameSegmentIdCount"], this.outputShape = [], this.uniforms = "segmentSize : i32", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.type = e, this.dispatchLayout = X(t8), this.dispatch = H(this.dispatchLayout, t8, this.workgroupSize), this.shaderKey = "sparseSegmentMean"; } @@ -32857,32 +32860,32 @@ var my = class { `; } }; -function dy(r, t8, e, o = false, n) { - let a = y.sizeFromShape(r.shape) / r.shape[0], i = r.dtype, p = y.sizeFromShape(t8.shape), u = n.readSync(e.dataId), l = p > 0 ? u[p - 1] + 1 : 0, m, d = r.shape.slice(); +function my(r15, t8, e, o = false, n) { + let a = y.sizeFromShape(r15.shape) / r15.shape[0], i = r15.dtype, p = y.sizeFromShape(t8.shape), u = n.readSync(e.dataId), l = p > 0 ? u[p - 1] + 1 : 0, m, d = r15.shape.slice(); d[0] = l; - let f = p * a, h = kt({ 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, t8, e], i, g, h); + let f = p * a, h = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); + m = new py(d, f, i); + let g = [{ type: "int32", data: [a] }, { type: "int32", data: [f] }], x = n.runWebGPUProgram(m, [r15, t8, e], i, g, h); if (o) return x; - let b = kt({ backend: n, attrs: { shape: [l], value: 0, dtype: "int32" } }); - m = new ly(l, e.shape); - let C = n.runWebGPUProgram(m, [e], "int32", null, b), S = kt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); - m = new my(d, i), g = [{ type: "int32", data: [a] }]; + let b = vt({ backend: n, attrs: { shape: [l], value: 0, dtype: "int32" } }); + m = new cy(l, e.shape); + let C = n.runWebGPUProgram(m, [e], "int32", null, b), S = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); + m = new ly(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 pce(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; - return dy(o, n, s, false, e); +function pce(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; + return my(o, n, s, false, e); } -var wU = { kernelName: ya, backendName: "webgpu", kernelFunc: pce }; -function cce(r) { - let { inputs: t8, backend: e } = r, { data: o, indices: n, segmentIds: s } = t8; - return dy(o, n, s, true, e); +var SU = { kernelName: ya, backendName: "webgpu", kernelFunc: pce }; +function cce(r15) { + let { inputs: t8, backend: e } = r15, { data: o, indices: n, segmentIds: s } = t8; + return my(o, n, s, true, e); } -var SU = { kernelName: ba, backendName: "webgpu", kernelFunc: cce }; -var fy = class { +var IU = { kernelName: ba, backendName: "webgpu", kernelFunc: cce }; +var dy = class { constructor(t8, e) { this.variableNames = ["A"], this.workgroupSize = [64, 1, 1], this.size = true; let o = new Array(t8.length); @@ -32902,58 +32905,58 @@ var fy = class { `; } }; -function lce(r, t8 = "") { - if (r >= 5) - throw Error(`Tile for rank ${r} is not yet supported`); - if (r === 1) +function lce(r15, t8 = "") { + if (r15 >= 5) + throw Error(`Tile for rank ${r15} is not yet supported`); + if (r15 === 1) return `(resRC % ${t8}aShape)`; let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r; n++) + for (let n = 0; n < r15; n++) o.push(`(${e[n]} % ${t8}aShape[${n}])`); return o.join(); } -function Cm(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { reps: s } = o; +function ym(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { reps: s } = o; if (e.shouldExecuteOnCPU([n]) || n.dtype === "string" || n.shape.length >= 5) { - let p = e.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = Oz(c, s); + let p = e.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = Mz(c, s); return e.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new fy(n.shape, s); + let a = new dy(n.shape, s); return e.runWebGPUProgram(a, [n], n.dtype); } -var IU = { kernelName: po, backendName: "webgpu", kernelFunc: Cm }; -function mce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; +var vU = { kernelName: uo, backendName: "webgpu", kernelFunc: ym }; +function mce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = t8, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let R = e.bufferSync(n), D = e.bufferSync(s), P = y.decodeString(e.readSync(a.dataId)[0]), O = Ez(R, D, i, m, c, u, p, l, P, d); + let R = e.bufferSync(n), D = e.bufferSync(s), P = y.decodeString(e.readSync(a.dataId)[0]), O = Rz(R, D, i, m, c, u, p, l, P, d); return e.makeTensorInfo(i, O.dtype, O.values); } - let f = [m / c, c], h = pe({ inputs: { x: n }, backend: e, attrs: { shape: [u, p] } }), g = s.shape.length ? pe({ inputs: { x: s }, backend: e, attrs: { shape: [u, c] } }) : Ft({ inputs: { x: s }, backend: e }), x = g.dtype, b = e.makeTensorInfo([], x, y.makeZerosTypedArray(1, x)), C = pe({ inputs: { x: a }, backend: e, attrs: { shape: Array(f.length).fill(1) } }), S = Cm({ inputs: { x: C }, backend: e, attrs: { reps: f } }), k = y.sizeFromShape([u, c]), _ = [{ type: "int32", data: [p] }, { type: "int32", data: l }, { type: "int32", data: [k] }]; + let f = [m / c, c], h = pe({ inputs: { x: n }, backend: e, attrs: { shape: [u, p] } }), g = s.shape.length ? pe({ inputs: { x: s }, backend: e, attrs: { shape: [u, c] } }) : At({ inputs: { x: s }, backend: e }), x = g.dtype, b = e.makeTensorInfo([], x, y.makeZerosTypedArray(1, x)), C = pe({ inputs: { x: a }, backend: e, attrs: { shape: Array(f.length).fill(1) } }), S = ym({ inputs: { x: C }, backend: e, 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 Va([u, c], p, h.shape.length, g.shape.length, l, f, x, d); + let R = new za([u, c], p, h.shape.length, g.shape.length, l, f, x, d); e.runWebGPUProgram(R, [g, h], x, _, S); } break; default: { - let R = new Va([u, c], p, h.shape.length, b.shape.length, l, f, x, d); + let R = new za([u, c], p, h.shape.length, b.shape.length, l, f, x, d); e.runWebGPUProgram(R, [b, h], x, _, S); } { - let R = new Va([u, c], p, h.shape.length, g.shape.length, l, f, x); + let R = new za([u, c], p, h.shape.length, g.shape.length, l, f, x); e.runWebGPUProgram(R, [g, h], x, _, S); } } let E = pe({ inputs: { x: S }, backend: e, attrs: { shape: i } }); return e.disposeData(h.dataId), e.disposeData(g.dataId), e.disposeData(C.dataId), e.disposeData(b.dataId), e.disposeData(S.dataId), E; } -var vU = { kernelName: ks, backendName: "webgpu", kernelFunc: mce }; -function dce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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(); +var kU = { kernelName: vs, backendName: "webgpu", kernelFunc: mce }; +function dce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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; @@ -32961,24 +32964,24 @@ function dce(r) { return c[i] += m, f; }); } -var kU = { kernelName: xa, backendName: "webgpu", kernelFunc: dce }; +var NU = { kernelName: xa, backendName: "webgpu", kernelFunc: dce }; var fce = ye({ opType: Z.SQRT }); -var NU = { kernelName: Ss, backendName: "webgpu", kernelFunc: fce }; -var TU = { kernelName: Xi, backendName: "webgpu", kernelFunc: ({ inputs: r, backend: t8 }) => { - let { x: e } = r, o = t8, n = new Jr(e.shape, Z.SQUARE); +var TU = { kernelName: ws, backendName: "webgpu", kernelFunc: fce }; +var _U = { kernelName: Ki, backendName: "webgpu", kernelFunc: ({ inputs: r15, backend: t8 }) => { + let { x: e } = r15, o = t8, n = new Zr(e.shape, Z.SQUARE); return o.runWebGPUProgram(n, [e], e.dtype); } }; var hce = et({ opType: fe.SQUARED_DIFFERENCE }); -var _U = { kernelName: Ns, backendName: "webgpu", kernelFunc: hce }; -function gce({ inputs: r, attrs: t8, backend: e }) { - let { x: o } = r, n = new Jr(o.shape, Z.STEP, "stepAlpha : f32,"), s = [{ type: "float32", data: [t8.alpha] }]; +var $U = { kernelName: ks, backendName: "webgpu", kernelFunc: hce }; +function gce({ inputs: r15, attrs: t8, backend: e }) { + let { x: o } = r15, n = new Zr(o.shape, Z.STEP, "stepAlpha : f32,"), s = [{ type: "float32", data: [t8.alpha] }]; return e.runWebGPUProgram(n, [o], o.dtype, s); } -var $U = { kernelName: So, backendName: "webgpu", kernelFunc: gce }; -var hy = class { +var EU = { kernelName: wo, backendName: "webgpu", kernelFunc: gce }; +var fy = class { constructor(t8) { this.variableNames = ["x"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]); - let e = ht(this.outputShape.length); + let e = ft(this.outputShape.length); this.uniforms = `begin : ${e}, strides : ${e}, `, this.shaderKey = "stridedSlice"; } getUserCode() { @@ -32999,37 +33002,37 @@ var hy = class { `; } }; -function xce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { 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 } = ct.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; +function xce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { 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: 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 _ = ct.computeOutShape(b, C, S), E = Hs({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); + let _ = pt.computeOutShape(b, C, S), E = Hs({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); k = pe({ inputs: { x: E }, backend: e, attrs: { shape: f } }), e.disposeData(E.dataId); } else if (e.shouldExecuteOnCPU([n])) { - let E = e.readSync(n.dataId), R = me(n.shape, n.dtype, E), D = Az(d, R, S, b); + let E = e.readSync(n.dataId), R = me(n.shape, n.dtype, E), D = Fz(d, R, S, b); k = e.makeTensorInfo(f, n.dtype, D.values); } else { - let E = new hy(d), R = [{ type: "int32", data: b }, { type: "int32", data: S }], D = e.runWebGPUProgram(E, [n], n.dtype, R); + let E = new fy(d), R = [{ type: "int32", data: b }, { type: "int32", data: S }], D = e.runWebGPUProgram(E, [n], n.dtype, R); k = pe({ inputs: { x: D }, backend: e, attrs: { shape: f } }), e.disposeData(D.dataId); } return k; } -var EU = { kernelName: Ts, backendName: "webgpu", kernelFunc: xce }; -function yce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.readSync(c.dataId), d = e.readSync(l.dataId), [f, h] = Fz(m, d, n, s, a, i, p, u); +var RU = { kernelName: Ns, backendName: "webgpu", kernelFunc: xce }; +function yce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = t8, m = e.readSync(c.dataId), d = e.readSync(l.dataId), [f, h] = Pz(m, d, n, s, a, i, p, u); return [e.makeTensorInfo([f.length], "string", f), e.makeTensorInfo(l.shape, "int32", h)]; } -var RU = { kernelName: Ca, backendName: "webgpu", kernelFunc: yce }; -var bce = et({ opType: fe.SUB, cpuKernelImpl: Pz, supportsComplex: true }); -var DU = { kernelName: _s, backendName: "webgpu", kernelFunc: bce }; +var DU = { kernelName: Ca, backendName: "webgpu", kernelFunc: yce }; +var bce = et({ opType: fe.SUB, cpuKernelImpl: Oz, supportsComplex: true }); +var AU = { kernelName: Ts, backendName: "webgpu", kernelFunc: bce }; var Cce = ye({ opType: Z.TAN }); -var AU = { kernelName: $s, backendName: "webgpu", kernelFunc: Cce }; +var FU = { kernelName: _s, backendName: "webgpu", kernelFunc: Cce }; var wce = ye({ opType: Z.TANH }); -var FU = { kernelName: Es, backendName: "webgpu", kernelFunc: wce }; -function Sce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { tensor: n, indices: s, updates: a } = t8, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; +var PU = { kernelName: $s, backendName: "webgpu", kernelFunc: wce }; +function Sce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { tensor: n, indices: s, updates: a } = t8, {} = 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 e.makeTensorInfo(n.shape, s.dtype); let d = [], f = pe({ inputs: { x: s }, backend: e, attrs: { shape: [p, i] } }); @@ -33038,13 +33041,13 @@ function Sce(r) { d.push(h); let g = pe({ inputs: { x: n }, backend: e, attrs: { shape: m } }); d.push(g); - let x = Cm({ inputs: { x: g }, backend: e, attrs: { reps: Array(m.length).fill(1) } }), b = new Va([p, u], i, f.shape.length, h.shape.length, c, m, n.dtype, false), C = y.sizeFromShape([p, u]), S = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [C] }], k = e.runWebGPUProgram(b, [h, f], g.dtype, S, x); + let x = ym({ inputs: { x: g }, backend: e, attrs: { reps: Array(m.length).fill(1) } }), b = new za([p, u], i, f.shape.length, h.shape.length, c, m, n.dtype, false), C = y.sizeFromShape([p, u]), S = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [C] }], k = e.runWebGPUProgram(b, [h, f], g.dtype, S, x); d.push(k); let _ = pe({ inputs: { x: k }, backend: e, attrs: { shape: n.shape } }); return d.forEach((E) => e.disposeData(E.dataId)), _; } -var PU = { kernelName: fs, backendName: "webgpu", kernelFunc: Sce }; -var gy = class { +var OU = { kernelName: ds, backendName: "webgpu", kernelFunc: Sce }; +var hy = class { constructor(t8) { this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`, this.shaderKey = "swap"; @@ -33120,7 +33123,7 @@ var gy = class { `; } }; -var xy = class { +var gy = class { constructor(t8) { this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = t8, 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"; } @@ -33187,28 +33190,28 @@ var xy = class { `; } }; -function nl(r, t8) { - t8 !== null && r.disposeData(t8.dataId); +function el(r15, t8) { + t8 !== null && r15.disposeData(t8.dataId); } -function OU(r) { +function MU(r15) { let t8 = 1; - for (; t8 < r; ) + for (; t8 < r15; ) t8 *= 2; return t8; } -function Ice(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n } = t8, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; +function Ice(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n } = t8, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; if (e.shouldExecuteOnCPU([n])) { - let k = e.readSync(n.dataId), [_, E] = Mz(k, i, n.dtype, s, a); + let k = e.readSync(n.dataId), [_, E] = Lz(k, i, n.dtype, s, a); return [e.makeTensorInfo(_.shape, _.dtype, _.values), e.makeTensorInfo(E.shape, E.dtype, E.values)]; } if (s === 0) return i[i.length - 1] = 0, [e.makeTensorInfo(i, n.dtype, []), e.makeTensorInfo(i, "int32", [])]; if (p === 1) - return [n, kt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: e })]; - let c = y.sizeFromShape(i) / p, l = pe({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: e }), m = OU(s), d = OU(p), f = null, h = () => f === null ? [l, l] : [l, f], g = (k, _, E) => { - let R = h(), D = new gy(E), 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 = e.runWebGPUProgram(D, R, "int32", O), nl(e, M); + return [n, vt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: e })]; + let c = y.sizeFromShape(i) / p, l = pe({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: e }), m = MU(s), d = MU(p), f = null, h = () => f === null ? [l, l] : [l, f], g = (k, _, E) => { + let R = h(), D = new hy(E), 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 = e.runWebGPUProgram(D, R, "int32", O), el(e, M); }; for (let k = 1; k < m; k *= 2) { let _ = k * 2; @@ -33216,23 +33219,23 @@ function Ice(r) { g(_, E, [c, d]); } for (let k = d; k > m; k /= 2) { - let _ = h(), E = new xy([c, k / 2]), D = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], P = f; - f = e.runWebGPUProgram(E, _, "int32", D), nl(e, P); + let _ = h(), E = new gy([c, k / 2]), D = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], P = f; + f = e.runWebGPUProgram(E, _, "int32", D), el(e, 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: e, attrs: { begin: 0, size: [c, s] } }), nl(e, x); - let b = u0({ inputs: { x: l, indices: f }, backend: e, attrs: { axis: 1, batchDims: 1 } }); - nl(e, l); + f = Hs({ inputs: { x: f }, backend: e, attrs: { begin: 0, size: [c, s] } }), el(e, x); + let b = p0({ inputs: { x: l, indices: f }, backend: e, attrs: { axis: 1, batchDims: 1 } }); + el(e, l); let C = i.slice(0, -1); - C.push(s), x = f, f = pe({ inputs: { x: f }, attrs: { shape: C }, backend: e }), nl(e, x); + C.push(s), x = f, f = pe({ inputs: { x: f }, attrs: { shape: C }, backend: e }), el(e, x); let S = b; - return b = pe({ inputs: { x: b }, attrs: { shape: C }, backend: e }), nl(e, S), [b, f]; + return b = pe({ inputs: { x: b }, attrs: { shape: C }, backend: e }), el(e, S), [b, f]; } -var MU = { kernelName: Rs, backendName: "webgpu", kernelFunc: Ice }; -var yy = class { +var LU = { kernelName: Es, backendName: "webgpu", kernelFunc: Ice }; +var xy = class { constructor(t8) { this.variableNames = ["Image", "Transforms"], this.uniforms = "interpolationModeId : i32, fillModeId : i32, fillValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t8, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "transform"; } @@ -33356,8 +33359,8 @@ var yy = class { `; } }; -function vce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { image: n, transforms: s } = t8, { 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; +function vce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { image: n, transforms: s } = t8, { 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 xy(g), b = a === "nearest" ? 1 : 2, C; switch (i) { case "constant": C = 1; @@ -33378,9 +33381,9 @@ function vce(r) { let S = [{ type: "int32", data: [b] }, { type: "int32", data: [C] }, { type: "float32", data: [p] }]; return e.runWebGPUProgram(x, [n, s], "float32", S); } -var LU = { kernelName: Ds, backendName: "webgpu", kernelFunc: vce }; -function kce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { value: n } = t8, { axis: s } = o; +var BU = { kernelName: Rs, backendName: "webgpu", kernelFunc: vce }; +function kce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { value: n } = t8, { 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++) @@ -33395,8 +33398,8 @@ function kce(r) { } return l.forEach((h) => e.disposeData(h.dataId)), f; } -var BU = { kernelName: wa, backendName: "webgpu", kernelFunc: kce }; -var by = class { +var zU = { kernelName: wa, backendName: "webgpu", kernelFunc: kce }; +var yy = class { constructor(t8, e, o) { if (this.outputShape = [], this.variableNames = ["x", "segmentIds"], this.uniforms = "numSegments : i32, xSize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e, this.dispatchLayout = X(t8), this.dispatch = H(this.dispatchLayout, t8, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`UnsortedSegmentSum only supports float32 and int32 @@ -33416,39 +33419,40 @@ var by = class { let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${Qr("&result[flatIndex]", "value", this.type)} + ${Yr("&result[flatIndex]", "value", this.type)} } } } `; } }; -function Nce(r) { - let { inputs: t8, backend: e, attrs: o } = r, { x: n, segmentIds: s } = t8, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = w.getAxesPermutation([u], i), l = n; - c != null && (l = yr({ inputs: { x: n }, backend: e, attrs: { perm: c } }), p.push(l), u = w.getInnerMostAxes(1, i)[0]); +function Nce(r15) { + let { inputs: t8, backend: e, attrs: o } = r15, { x: n, segmentIds: s } = t8, { 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: e, 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: e, attrs: { shape: [-1, d] } }); p.push(f); - let h = n.dtype, g = [f.shape[0], a], x = kt({ backend: e, 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 = e.runWebGPUProgram(b, [f, s], h, C, x), k = pe({ inputs: { x: S }, backend: e, attrs: { shape: m } }); + let h = n.dtype, g = [f.shape[0], a], x = vt({ backend: e, attrs: { shape: g, value: 0, dtype: h } }), b = new yy(f.shape, g, h), C = [{ type: "int32", data: [a] }, { type: "int32", data: [y.sizeFromShape(f.shape)] }], S = e.runWebGPUProgram(b, [f, s], h, C, x), k = pe({ inputs: { x: S }, backend: e, attrs: { shape: m } }); p.push(S); let _ = k; if (c != null) { p.push(k); let E = w.getUndoAxesPermutation(c); - _ = yr({ inputs: { x: _ }, backend: e, attrs: { perm: E } }); + _ = xr({ inputs: { x: _ }, backend: e, attrs: { perm: E } }); } return p.forEach((E) => e.disposeData(E.dataId)), _; } -var zU = { kernelName: Ji, backendName: "webgpu", kernelFunc: Nce }; -var Tce = [rz, Bz, zz, Vz, Wz, Uz, Hz, Kz, qz, jz, Xz, Yz, Qz, Zz, Jz, rV, oV, nV, sV, aV, uV, pV, cV, fV, hV, gV, nz, yV, CV, wV, SV, IV, vV, kV, NV, TV, _V, $V, DV, AV, FV, PV, MV, LV, OV, BV, zV, VV, WV, UV, KV, qV, jV, XV, YV, QV, ZV, JV, eW, ez, tW, nW, rW, oW, sW, aW, iW, uW, pW, cW, lW, oz, mW, bV, dW, fW, hW, gW, xW, yW, bW, wW, CW, SW, IW, vW, NW, TW, eV, _W, $W, DW, EW, RW, AW, tV, FW, PW, OW, MW, BW, GV, zW, VW, WW, lV, UW, KW, qW, jW, XW, YW, QW, ZW, mV, JW, eU, tU, rU, tz, oU, nU, sU, aU, iU, uU, pU, cU, lU, mU, dU, fU, hU, gU, xU, yU, iV, $U, EU, RU, LW, bU, CU, wU, SU, vU, kU, NU, TU, _U, DU, HV, AU, FU, PU, IU, MU, LU, Gz, BU, zU, GW]; -for (let r of Tce) - ri(r); -var VU = "4.11.0"; -var _ce = "4.11.0"; -var $ce = "4.11.0"; -var Ece = "4.11.0"; -var Rce = "4.11.0"; -var Dce = "4.11.0"; -var Ace = { tfjs: VU, "tfjs-core": VU, "tfjs-converter": _ce, "tfjs-backend-cpu": $ce, "tfjs-backend-webgl": Ece, "tfjs-backend-wasm": Rce, "tfjs-backend-webgpu": Dce }; +var VU = { kernelName: Yi, backendName: "webgpu", kernelFunc: Nce }; +var Tce = [oz, zz, Vz, Wz, Uz, Gz, Kz, qz, jz, Xz, Yz, Qz, Zz, Jz, eV, oV, nV, sV, aV, iV, pV, cV, lV, hV, gV, xV, sz, bV, wV, SV, IV, vV, kV, NV, TV, _V, $V, EV, AV, FV, PV, OV, LV, BV, MV, zV, VV, WV, UV, GV, qV, jV, XV, YV, QV, ZV, JV, eW, tW, tz, rW, sW, oW, nW, aW, iW, uW, pW, cW, lW, mW, nz, dW, CV, fW, hW, gW, xW, yW, bW, CW, SW, wW, IW, vW, kW, TW, _W, tV, $W, EW, AW, RW, DW, FW, rV, PW, OW, MW, LW, zW, HV, VW, WW, UW, mV, GW, qW, jW, XW, YW, QW, ZW, JW, dV, eU, tU, rU, oU, rz, nU, sU, aU, iU, uU, pU, cU, lU, mU, dU, fU, hU, gU, xU, yU, bU, uV, EU, RU, DU, BW, CU, wU, SU, IU, kU, NU, TU, _U, $U, AU, KV, FU, PU, OU, vU, LU, BU, Hz, zU, VU, HW]; +for (let r15 of Tce) + ti(r15); +var WU = "4.14.0"; +var _ce = "4.14.0"; +var $ce = "4.14.0"; +var Ece = "4.14.0"; +var Rce = "4.14.0"; +var Dce = "4.14.0"; +var Ace = { tfjs: WU, "tfjs-core": WU, "tfjs-converter": _ce, "tfjs-backend-cpu": $ce, "tfjs-backend-webgl": Ece, "tfjs-backend-wasm": Rce, "tfjs-backend-webgpu": Dce }; +var bQt = void 0; // src/util/util.ts function log(...msg) { @@ -33742,8 +33746,8 @@ var convolution = ` // src/image/imagefx.ts var collect = (source, prefix, collection) => { - const r = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); - source.replace(r, (match2, name) => { + const r15 = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r15, (match2, name) => { collection[name] = 0; return match2; }); @@ -34347,9 +34351,9 @@ function GLImageFilter() { // src/image/enhance.ts async function histogramEqualization(inputImage) { - const squeeze = inputImage.shape.length === 4 ? gc(inputImage) : inputImage; - const rgb3 = li(squeeze, 3, 2); - const min = [Tl(rgb3[0]), Tl(rgb3[1]), Tl(rgb3[2])]; + const squeeze = inputImage.shape.length === 4 ? uc(inputImage) : inputImage; + const rgb3 = ci(squeeze, 3, 2); + const min = [vl(rgb3[0]), vl(rgb3[1]), vl(rgb3[2])]; const max = [Ra(rgb3[0]), Ra(rgb3[1]), Ra(rgb3[2])]; const absMax = await Promise.all(max.map((channel) => channel.data())); const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); @@ -34360,13 +34364,13 @@ async function histogramEqualization(inputImage) { const sub = [Te(rgb3[0], min[0]), Te(rgb3[1], min[1]), Te(rgb3[2], min[2])]; const range = [Te(max[0], min[0]), Te(max[1], min[1]), Te(max[2], min[2])]; const enh = [se(sub[0], factor), se(sub[1], factor), se(sub[2], factor)]; - const stack = kr([enh[0], enh[1], enh[2]], 2); + const stack = vr([enh[0], enh[1], enh[2]], 2); final = W(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]); - Mt([...sub, ...range, ...enh, stack]); + Ot([...sub, ...range, ...enh, stack]); } else { final = Ms(squeeze, 0); } - Mt([...rgb3, ...min, ...max, rgb3, squeeze, inputImage]); + Ot([...rgb3, ...min, ...max, rgb3, squeeze, inputImage]); return final; } @@ -34432,10 +34436,10 @@ async function process2(input, config3, getTensor = true) { log("input error: input is missing"); return { tensor: null, canvas: null }; } - if (!(input instanceof ut) && !(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)) { + 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)) { throw new Error("input error: type not recognized"); } - if (input instanceof ut) { + if (input instanceof mt) { let tensor2 = null; if (input["isDisposedInternal"]) throw new Error("input error: attempted to use tensor but it is disposed"); @@ -34445,22 +34449,22 @@ async function process2(input, config3, getTensor = true) { if (input.shape[2] === 3) { tensor2 = Ms(input, 0); } else if (input.shape[2] === 4) { - const rgb3 = A1(input, [0, 0, 0], [-1, -1, 3]); + const rgb3 = F1(input, [0, 0, 0], [-1, -1, 3]); tensor2 = Ms(rgb3, 0); - Mt(rgb3); + Ot(rgb3); } } else if (input.shape.length === 4) { if (input.shape[3] === 3) { - tensor2 = Ur(input); + tensor2 = Wr(input); } else if (input.shape[3] === 4) { - tensor2 = F1(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + tensor2 = P1(input, [0, 0, 0, 0], [-1, -1, -1, 3]); } } if (tensor2 == null || tensor2.shape.length !== 4 || tensor2.shape[0] !== 1 || tensor2.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); if (tensor2.dtype === "int32") { const cast = We(tensor2, "float32"); - Mt(tensor2); + Ot(tensor2); tensor2 = cast; } return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null }; @@ -34572,22 +34576,22 @@ async function process2(input, config3, getTensor = true) { let pixels; let depth = 3; if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { - if (env.browser && oT) { - pixels = oT ? oT.fromPixels(input) : null; + if (env.browser && nT) { + pixels = nT ? nT.fromPixels(input) : null; } else { depth = input.data.length / input.height / input.width; const arr = new Uint8Array(input.data.buffer); - pixels = ur(arr, [input.height, input.width, depth], "int32"); + 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 (oT && env.browser) { + if (nT && env.browser) { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { - pixels = oT.fromPixels(outCanvas); + pixels = nT.fromPixels(outCanvas); } else { tmpCanvas = copy(outCanvas); - pixels = oT.fromPixels(tmpCanvas); + pixels = nT.fromPixels(tmpCanvas); } } else { const tempCanvas = copy(outCanvas); @@ -34595,24 +34599,24 @@ async function process2(input, config3, getTensor = true) { const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); depth = tempData.data.length / targetWidth / targetHeight; const arr = new Uint8Array(tempData.data.buffer); - pixels = ur(arr, [targetWidth, targetHeight, depth]); + pixels = ar(arr, [targetWidth, targetHeight, depth]); } } if (depth === 4) { - const rgb3 = A1(pixels, [0, 0, 0], [-1, -1, 3]); - Mt(pixels); + const rgb3 = F1(pixels, [0, 0, 0], [-1, -1, 3]); + Ot(pixels); pixels = rgb3; } if (!pixels) throw new Error("input error: cannot create tensor"); const casted = We(pixels, "float32"); const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Ms(casted, 0); - Mt([pixels, casted]); + Ot([pixels, casted]); if (config3.filter.autoBrightness) { const max = Ra(tensor); const maxVal = await max.data(); config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; - Mt(max); + Ot(max); } return { tensor, canvas: config3.filter.return ? outCanvas : null }; } @@ -34621,10 +34625,10 @@ async function skip(config3, input) { if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; if (!last.inputTensor) { - last.inputTensor = Ur(input); + last.inputTensor = Wr(input); } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { - Mt(last.inputTensor); - last.inputTensor = Ur(input); + Ot(last.inputTensor); + last.inputTensor = Wr(input); } else { const t8 = {}; t8.diff = Te(input, last.inputTensor); @@ -34632,8 +34636,8 @@ async function skip(config3, input) { t8.sum = ot(t8.squared); const diffSum = await t8.sum.data(); const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; - Mt([last.inputTensor, t8.diff, t8.squared, t8.sum]); - last.inputTensor = Ur(input); + Ot([last.inputTensor, t8.diff, t8.squared, t8.sum]); + last.inputTensor = Wr(input); skipFrame = diffRelative <= (config3.cacheSensitivity || 0); } return skipFrame; @@ -34650,14 +34654,14 @@ async function compare(config3, input1, input2) { log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); return 0; } - t8.input1 = Ur(input1); - t8.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? Kj.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : Ur(input2); + t8.input1 = Wr(input1); + t8.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? Kj.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : Wr(input2); t8.diff = Te(t8.input1, t8.input2); t8.squared = se(t8.diff, t8.diff); t8.sum = ot(t8.squared); const diffSum = await t8.sum.data(); const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; - Mt([t8.input1, t8.input2, t8.diff, t8.squared, t8.sum]); + Ot([t8.input1, t8.input2, t8.diff, t8.squared, t8.sum]); return diffRelative; } @@ -34725,7 +34729,7 @@ var Env = class { __privateAdd(this, _canvas, void 0); __privateAdd(this, _image, void 0); __privateAdd(this, _imageData, void 0); - this.browser = typeof navigator !== "undefined"; + 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: Ace["tfjs-core"] }; this.offscreen = typeof OffscreenCanvas !== "undefined"; @@ -34772,7 +34776,7 @@ var Env = class { } /** update backend information */ async updateBackend() { - this.backends = Object.keys(pr().registryFactory); + this.backends = Object.keys(ur().registryFactory); try { this.tensorflow = { version: vde()["binding"] ? vde()["binding"].TF_Version : void 0, @@ -34807,7 +34811,7 @@ var Env = class { this.webgpu.supported = false; } try { - this.kernels = Ym(Cde()).map((kernel) => kernel.kernelName.toLowerCase()); + this.kernels = jm(Cde()).map((kernel) => kernel.kernelName.toLowerCase()); } catch (e) { } } @@ -35246,14 +35250,14 @@ async function loadModel(modelPath) { options.cacheSupported = typeof indexedDB !== "undefined"; let cachedModels = {}; try { - cachedModels = options.cacheSupported && options.cacheModels ? await fi.listModels() : {}; + cachedModels = options.cacheSupported && options.cacheModels ? await mi.listModels() : {}; } catch (e) { options.cacheSupported = false; } modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; - let model23 = new Bl(modelStats[shortModelName].url, tfLoadOptions); + let model23 = new Ml(modelStats[shortModelName].url, tfLoadOptions); let loaded = false; try { model23.findIOHandler(); @@ -35289,7 +35293,7 @@ async function loadModel(modelPath) { } // package.json -var version = "3.1.2"; +var version = "3.2.0"; // src/tfjs/humangl.ts var config2 = { @@ -35322,7 +35326,7 @@ function register(instance) { var _a; if (instance.config.backend !== "humangl") return; - if (config2.name in pr().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { + 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(); } @@ -35364,23 +35368,23 @@ function register(instance) { return; } try { - vI(2, config2.gl); + kI(2, config2.gl); } catch (err) { log("humangl error: cannot set webgl context:", err); return; } try { - const ctx = new kp(config2.gl); - su(config2.name, () => new wu(ctx), config2.priority); + const ctx = new xp(config2.gl); + tu(config2.name, () => new Oc(ctx), config2.priority); } catch (err) { log("humangl error: cannot register webgl backend:", err); return; } try { - const kernels = Ym("webgl"); + const kernels = jm("webgl"); kernels.forEach((kernelConfig) => { const newKernelConfig = { ...kernelConfig, backendName: config2.name }; - ri(newKernelConfig); + ti(newKernelConfig); }); } catch (err) { log("humangl error: cannot update webgl backend registration:", err); @@ -35420,7 +35424,7 @@ function init() { constants.tf2 = ke(2, "float32"); constants.tf05 = ke(0.5, "float32"); constants.tf127 = ke(127.5, "float32"); - constants.rgb = tr([0.2989, 0.587, 0.114], "float32"); + constants.rgb = Jt([0.2989, 0.587, 0.114], "float32"); } // src/tfjs/backend.ts @@ -35445,7 +35449,7 @@ function registerCustomOps(config3) { backendName: Cde(), kernelFunc: (op2) => De(() => Te(op2.inputs.a, se(je(op2.inputs.a, op2.inputs.b), op2.inputs.b))) }; - ri(kernelMod); + ti(kernelMod); env.kernels.push("mod"); newKernels.push("mod"); } @@ -35453,9 +35457,9 @@ function registerCustomOps(config3) { const kernelFloorMod = { kernelName: "FloorMod", backendName: Cde(), - kernelFunc: (op2) => De(() => Ce(se(dd(op2.inputs.a, op2.inputs.b), op2.inputs.b), F2(op2.inputs.a, op2.inputs.b))) + kernelFunc: (op2) => De(() => Ce(se(ld(op2.inputs.a, op2.inputs.b), op2.inputs.b), P2(op2.inputs.a, op2.inputs.b))) }; - ri(kernelFloorMod); + ti(kernelFloorMod); env.kernels.push("floormod"); newKernels.push("floormod"); } @@ -35471,7 +35475,7 @@ function registerCustomOps(config3) { return t8; }) }; - ri(kernelRotateWithOffset); + ti(kernelRotateWithOffset); env.kernels.push("rotatewithoffset"); newKernels.push("rotatewithoffset"); } @@ -35495,10 +35499,10 @@ async function check(instance, force = false) { if (instance.config.debug) log("running inside electron"); } - let available = Object.keys(pr().registryFactory); + let available = Object.keys(ur().registryFactory); if (instance.config.backend === "humangl" && !available.includes("humangl")) { register(instance); - available = Object.keys(pr().registryFactory); + available = Object.keys(ur().registryFactory); } if (instance.config.debug) log("available backends:", available); @@ -35546,13 +35550,13 @@ async function check(instance, force = false) { Yse(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 mt2 = false; let simd = false; try { - mt = await A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + 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"} ${mt ? "multithreaded" : "singlethreaded"}`); + 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) { @@ -35622,9 +35626,9 @@ function fakeOps(kernelNames, config3) { // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, }; - ri(kernelConfig); + ti(kernelConfig); } - env.kernels = Ym(Cde()).map((kernel) => kernel.kernelName.toLowerCase()); + env.kernels = jm(Cde()).map((kernel) => kernel.kernelName.toLowerCase()); } // src/draw/draw.ts @@ -39579,7 +39583,7 @@ var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ // src/draw/face.ts var localOptions; function drawLabels(f, ctx) { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2; if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) return; let l = localOptions.faceLabels.slice(); @@ -39610,7 +39614,7 @@ function drawLabels(f, ctx) { 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 ((_i = (_h2 = f.rotation) == null ? void 0 : _h2.gaze) == null ? void 0 : _i.bearing) + 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); } @@ -40143,7 +40147,7 @@ function createAnchors() { } layerId = lastSameStrideLayer; } - anchorTensor = { x: tr(anchors3.map((a) => a.x)), y: tr(anchors3.map((a) => a.y)) }; + anchorTensor = { x: Jt(anchors3.map((a) => a.x)), y: Jt(anchors3.map((a) => a.y)) }; } async function loadDetector(config3) { if (env.initial) @@ -40160,11 +40164,11 @@ async function loadDetector(config3) { var cropFactor = [5, 5]; function decodeBoxes(boxesTensor, anchor) { return De(() => { - const split = li(boxesTensor, 12, 1); - let xCenter = gc(split[0]); - let yCenter = gc(split[1]); - let width = gc(split[2]); - let height = gc(split[3]); + const split = ci(boxesTensor, 12, 1); + let xCenter = uc(split[0]); + let yCenter = uc(split[1]); + let width = uc(split[2]); + let height = uc(split[3]); xCenter = Ce(je(xCenter, inputSize), anchor.x); yCenter = Ce(je(yCenter, inputSize), anchor.y); width = se(je(width, inputSize), cropFactor[0]); @@ -40173,7 +40177,7 @@ function decodeBoxes(boxesTensor, anchor) { const yMin = Te(yCenter, je(height, 2)); const xMax = Ce(xMin, width); const yMax = Ce(yMin, height); - const boxes = kr([xMin, yMin, xMax, yMax], 1); + const boxes = vr([xMin, yMin, xMax, yMax], 1); return boxes; }); } @@ -40194,7 +40198,7 @@ async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { const detectedBox = { score, boxRaw, box }; detectedBoxes.push(detectedBox); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return detectedBoxes; } async function detectBoxes(input, config3, outputSize2) { @@ -40202,10 +40206,10 @@ async function detectBoxes(input, config3, outputSize2) { t8.res = model == null ? void 0 : model.execute(input, ["Identity"]); t8.logitsRaw = Xe(t8.res, [0, 0, 0], [1, -1, 1]); t8.boxesRaw = Xe(t8.res, [0, 0, 1], [1, -1, -1]); - t8.logits = gc(t8.logitsRaw); - t8.boxes = gc(t8.boxesRaw); + t8.logits = uc(t8.logitsRaw); + t8.boxes = uc(t8.boxesRaw); const boxes = await decodeResults(t8.boxes, t8.logits, config3, outputSize2); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return boxes; } @@ -40300,7 +40304,7 @@ function prepareImage(input, size2, cropBox) { } else { final = je(t8.cropped || input, constants.tf255); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return final; } function rescaleKeypoints(keypoints, outputSize2, cropBox) { @@ -40357,7 +40361,7 @@ async function detectLandmarks(input, config3, outputSize2) { const poseScore = (await t8.poseflag.data())[0]; const points = await t8.ld.data(); const distances = await t8.world.data(); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); const keypointsRelative = []; const depth = 5; for (let i = 0; i < points.length / depth; i++) { @@ -40401,7 +40405,7 @@ async function predict(input, config3) { 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); - Mt(preparedImage); + Ot(preparedImage); } else { boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; } @@ -40409,7 +40413,7 @@ async function predict(input, config3) { const preparedBox = prepareImage(input, 256, (_c2 = boxes[i]) == null ? void 0 : _c2.boxRaw); cache.length = 0; const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); - Mt(preparedBox); + Ot(preparedBox); if (!bodyResult) continue; bodyResult.id = i; @@ -40528,13 +40532,13 @@ async function process3(res, outputShape, config3) { const t8 = {}; const results = []; const detections = await res.array(); - t8.squeeze = gc(res); - const arr = li(t8.squeeze, 6, 1); - t8.stack = kr([arr[1], arr[0], arr[3], arr[2]], 1); - t8.boxes = gc(t8.stack); - t8.scores = gc(arr[4]); - t8.classes = gc(arr[5]); - Mt([res, ...arr]); + t8.squeeze = uc(res); + const arr = ci(t8.squeeze, 6, 1); + t8.stack = vr([arr[1], arr[0], arr[3], arr[2]], 1); + t8.boxes = uc(t8.stack); + t8.scores = uc(arr[4]); + t8.classes = uc(arr[5]); + Ot([res, ...arr]); t8.nms = await Kj.nonMaxSuppressionAsync(t8.boxes, t8.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); const nms = await t8.nms.data(); let i = 0; @@ -40562,7 +40566,7 @@ async function process3(res, outputShape, config3) { ]; results.push({ id: i++, score, class: classVal, label, box, boxRaw }); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return results; } async function predict2(input, config3) { @@ -40580,7 +40584,7 @@ async function predict2(input, config3) { const resize = Kj.resizeBilinear(input, [inputSize3, inputSize3]); const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; lastTime2 = now(); - Mt(resize); + Ot(resize); const obj = await process3(objectT, outputSize2, config3); last2 = obj; resolve(obj); @@ -40640,15 +40644,15 @@ async function max2d(inputs, minScore) { const max = Ra(reshaped, 0); const newScore = (await max.data())[0]; if (newScore > minScore) { - const coordinates = Ek(reshaped, 0); - const mod = F2(coordinates, width); + const coordinates = Rk(reshaped, 0); + const mod = P2(coordinates, width); const x = (await mod.data())[0]; const div = je(coordinates, width); const y8 = (await div.data())[0]; - Mt([reshaped, max, coordinates, mod, div]); + Ot([reshaped, max, coordinates, mod, div]); return [x, y8, newScore]; } - Mt([reshaped, max]); + Ot([reshaped, max]); return [0, 0, newScore]; } async function predict3(image, config3) { @@ -40673,13 +40677,13 @@ async function predict3(image, config3) { if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor); lastTime3 = now(); - Mt(tensor); + Ot(tensor); if (resT) { cache2.keypoints.length = 0; - const squeeze = gc(resT); - Mt(resT); - const stack = fo(squeeze, 2); - Mt(squeeze); + const squeeze = uc(resT); + Ot(resT); + const stack = mo(squeeze, 2); + Ot(squeeze); for (let id2 = 0; id2 < stack.length; id2++) { const [x8, y10, partScore] = await max2d(stack[id2], config3.body.minConfidence); if (partScore > (config3.body.minConfidence || 0)) { @@ -40701,7 +40705,7 @@ async function predict3(image, config3) { }); } } - stack.forEach((s) => Mt(s)); + stack.forEach((s) => Ot(s)); } cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); const x = cache2.keypoints.map((a) => a.position[0]); @@ -40761,7 +40765,7 @@ var cutAndResize = (box, image, cropSize) => { const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w10, box.endPoint[1] / h, box.endPoint[0] / w10]; const crop = Kj.cropAndResize(image, [cutBox], [0], cropSize); const norm = je(crop, constants.tf255); - Mt(crop); + Ot(crop); return norm; }; var enlargeBox = (box, factor) => { @@ -40892,7 +40896,7 @@ function correctFaceRotation(rotate, box, input, inputSize10) { const rotated = Kj.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); rotationMatrix = buildRotationMatrix(-angle, center); face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); - Mt(rotated); + Ot(rotated); } else { face4 = cutAndResize(box, input, [inputSize10, inputSize10]); } @@ -40934,12 +40938,12 @@ async function load3(config3) { log("cached model:", model5["modelUrl"]); inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; inputSizeT = ke(inputSize4, "int32"); - anchors = fu(generateAnchors(inputSize4)); + anchors = cu(generateAnchors(inputSize4)); return model5; } function decodeBoxes2(boxOutputs) { if (!anchors || !inputSizeT) - return Gr([0, 0]); + return Ur([0, 0]); const t8 = {}; t8.boxStarts = Xe(boxOutputs, [0, 1], [-1, 2]); t8.centers = Ce(t8.boxStarts, anchors); @@ -40951,8 +40955,8 @@ function decodeBoxes2(boxOutputs) { t8.ends = Ce(t8.centersNormalized, t8.halfBoxSize); t8.startNormalized = se(t8.starts, inputSizeT); t8.endNormalized = se(t8.ends, inputSizeT); - const boxes = Yk([t8.startNormalized, t8.endNormalized], 1); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + const boxes = Qk([t8.startNormalized, t8.endNormalized], 1); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return boxes; } async function getBoxes(inputImage, config3) { @@ -40966,20 +40970,20 @@ async function getBoxes(inputImage, config3) { const res = model5 == null ? void 0 : model5.execute(t8.normalized); if (Array.isArray(res) && res.length > 2) { const sorted = res.sort((a, b) => a.size - b.size); - t8.concat384 = bt([sorted[0], sorted[2]], 2); - t8.concat512 = bt([sorted[1], sorted[3]], 2); - t8.concat = bt([t8.concat512, t8.concat384], 1); - t8.batch = gc(t8.concat, [0]); + t8.concat384 = yt([sorted[0], sorted[2]], 2); + t8.concat512 = yt([sorted[1], sorted[3]], 2); + t8.concat = yt([t8.concat512, t8.concat384], 1); + t8.batch = uc(t8.concat, [0]); } else if (Array.isArray(res)) { - t8.batch = gc(res[0]); + t8.batch = uc(res[0]); } else { - t8.batch = gc(res); + t8.batch = uc(res); } - Mt(res); + Ot(res); t8.boxes = decodeBoxes2(t8.batch); t8.logits = Xe(t8.batch, [0, 0], [-1, 1]); t8.sigmoid = $a(t8.logits); - t8.scores = gc(t8.sigmoid); + t8.scores = uc(t8.sigmoid); t8.nms = await Kj.nonMaxSuppressionAsync(t8.boxes, t8.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c2 = config3.face.detector) == null ? void 0 : _c2.minConfidence) || 0); const nms = await t8.nms.array(); const boxes = []; @@ -40990,7 +40994,7 @@ async function getBoxes(inputImage, config3) { const b = {}; b.bbox = Xe(t8.boxes, [nms[i], 0], [1, -1]); b.slice = Xe(t8.batch, [nms[i], keypointsCount - 1], [1, -1]); - b.squeeze = gc(b.slice); + b.squeeze = uc(b.slice); b.landmarks = W(b.squeeze, [keypointsCount, -1]); const points = await b.bbox.data(); const rawBox = { @@ -41006,10 +41010,10 @@ async function getBoxes(inputImage, config3) { const squaredBox = squarifyBox(enlargedBox); if (squaredBox.size[0] > (((_e = config3.face.detector) == null ? void 0 : _e["minSize"]) || 0) && squaredBox.size[1] > (((_f2 = config3.face.detector) == null ? void 0 : _f2["minSize"]) || 0)) boxes.push(squaredBox); - Object.keys(b).forEach((tensor) => Mt(b[tensor])); + Object.keys(b).forEach((tensor) => Ot(b[tensor])); } } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return boxes; } @@ -41074,7 +41078,7 @@ var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, mes ]], [0], [inputSize5, inputSize5]); if (flip && env.kernels.includes("flipleftright")) { const flipped = Kj.flipLeftRight(crop); - Mt(crop); + Ot(crop); crop = flipped; } return { box, boxSize, crop }; @@ -41112,13 +41116,13 @@ async function augmentIris(rawCoords, face4, meshSize) { return rawCoords; const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true); const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true); - const combined = bt([leftEyeCrop, rightEyeCrop]); - Mt(leftEyeCrop); - Mt(rightEyeCrop); + const combined = yt([leftEyeCrop, rightEyeCrop]); + Ot(leftEyeCrop); + Ot(rightEyeCrop); const eyePredictions = model6.execute(combined); - Mt(combined); + Ot(combined); const eyePredictionsData = await eyePredictions.data(); - Mt(eyePredictions); + Ot(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); @@ -41140,20 +41144,20 @@ async function augmentIris(rawCoords, face4, meshSize) { // src/face/attention.ts async function augment(rawCoords, results) { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; const t8 = { // 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()), + lips: await ((_b = (_a = results.filter((r15) => r15.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), // 80 x 2d = 160 // output_lips - irisL: await ((_d2 = (_c2 = results.filter((r) => r.size === 10)) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.data()), + irisL: await ((_d2 = (_c2 = results.filter((r15) => r15.size === 10)) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.data()), // 5 x 2d = 10 // output_right_iris - eyeL: await ((_f2 = (_e = results.filter((r) => r.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f2.data()), + eyeL: await ((_f2 = (_e = results.filter((r15) => r15.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f2.data()), // 71 x 2d = 142 // output_right_eye - irisR: await ((_h2 = (_g2 = results.filter((r) => r.size === 10)) == null ? void 0 : _g2[1]) == null ? void 0 : _h2.data()), + irisR: await ((_h2 = (_g2 = results.filter((r15) => r15.size === 10)) == null ? void 0 : _g2[1]) == null ? void 0 : _h2.data()), // 5 x 2d = 10 // output_left_iris - eyeR: await ((_j2 = (_i = results.filter((r) => r.size === 142)) == null ? void 0 : _i[1]) == null ? void 0 : _j2.data()) + eyeR: await ((_j2 = (_i2 = results.filter((r15) => r15.size === 142)) == null ? void 0 : _i2[1]) == null ? void 0 : _j2.data()) // 71 x 2d = 142// output_left_eye }; for (const val of Object.values(t8)) { @@ -41184,7 +41188,7 @@ var cache3 = { var model7 = null; var inputSize6 = 0; async function predict4(input, config3) { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; 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) { @@ -41220,7 +41224,7 @@ async function predict4(input, config3) { [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c2 = config3.face.detector) == null ? void 0 : _c2.rotation, box, input, ((_d2 = config3.face.mesh) == null ? void 0 : _d2.enabled) ? inputSize6 : size()); if (config3.filter.equalization) { const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; - Mt(face4.tensor); + Ot(face4.tensor); if (equilized) face4.tensor = equilized; } @@ -41240,7 +41244,7 @@ async function predict4(input, config3) { } else { if (((_f2 = config3.face.attention) == null ? void 0 : _f2.enabled) && !env.kernels.includes("atan2")) { config3.face.attention.enabled = false; - Mt(face4.tensor); + Ot(face4.tensor); return faces; } const results = model7.execute(face4.tensor); @@ -41264,10 +41268,10 @@ async function predict4(input, config3) { const meshT = results.find((t8) => t8.shape[t8.shape.length - 1] === 1404); const coordsReshaped = W(meshT, [-1, 3]); let rawCoords = await coordsReshaped.array(); - Mt(coordsReshaped); + Ot(coordsReshaped); if ((_h2 = config3.face.attention) == null ? void 0 : _h2.enabled) { rawCoords = await augment(rawCoords, results); - } else if ((_i = config3.face.iris) == null ? void 0 : _i.enabled) { + } else if ((_i2 = config3.face.iris) == null ? void 0 : _i2.enabled) { rawCoords = await augmentIris(rawCoords, face4.tensor, inputSize6); } face4.mesh = transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize6); @@ -41286,12 +41290,12 @@ async function predict4(input, config3) { face4.size = calculatedBox.size; newCache.push(calculatedBox); } - Mt(results); + Ot(results); } if (face4.score > (((_j2 = config3.face.detector) == null ? void 0 : _j2.minConfidence) || 1)) faces.push(face4); else - Mt(face4.tensor); + Ot(face4.tensor); } cache3.boxes = newCache; return faces; @@ -41384,7 +41388,7 @@ async function predict5(image, config3, idx, count2) { 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(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); } last3[idx] = obj; lastCount = count2; @@ -41422,7 +41426,7 @@ function enhance(input, config3) { crop = Kj.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); } const norm = se(crop, constants.tf255); - Mt(crop); + Ot(crop); return norm; } async function predict6(image, config3, idx, count2) { @@ -41448,7 +41452,7 @@ async function predict6(image, config3, idx, count2) { const enhanced = enhance(image, config3); const resT = model9 == null ? void 0 : model9.execute(enhanced); lastTime5 = now(); - Mt(enhanced); + Ot(enhanced); const genderT = resT.find((t8) => t8.shape[1] === 1); const gender2 = await genderT.data(); const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; @@ -41456,9 +41460,9 @@ async function predict6(image, config3, idx, count2) { obj.gender = gender2[0] <= 0.5 ? "female" : "male"; obj.genderScore = Math.min(0.99, confidence); } - const argmax = Ek(resT.find((t8) => t8.shape[1] === 100), 1); + const argmax = Rk(resT.find((t8) => t8.shape[1] === 100), 1); const ageIdx = (await argmax.data())[0]; - Mt(argmax); + Ot(argmax); const ageT = resT.find((t8) => t8.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; @@ -41467,7 +41471,7 @@ async function predict6(image, config3, idx, count2) { const desc = resT.find((t8) => t8.shape[1] === 1024); const descriptor = desc ? await desc.data() : []; obj.descriptor = Array.from(descriptor); - resT.forEach((t8) => Mt(t8)); + resT.forEach((t8) => Ot(t8)); } last4[idx] = obj; lastCount2 = count2; @@ -41548,7 +41552,7 @@ async function predict7(image, config3, idx, count2) { cached[idx] = Math.round(100 * num) / 100; lastCount3 = count2; lastTime6 = now(); - Mt([resize, res]); + Ot([resize, res]); resolve(cached[idx]); }); } @@ -41587,7 +41591,7 @@ async function predict8(image, config3, idx, count2) { cached2[idx] = Math.round(100 * num) / 100; lastCount4 = count2; lastTime7 = now(); - Mt([resize, res]); + Ot([resize, res]); resolve(cached2[idx]); }); } @@ -41650,7 +41654,7 @@ async function predict9(image, config3, idx, count2) { 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(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); last5[idx] = obj; lastCount5 = count2; lastTime8 = now(); @@ -41704,7 +41708,7 @@ async function predict10(image, config3, idx, count2) { const data = await t8.age.data(); obj.age = Math.trunc(10 * data[0]) / 10; } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); last6[idx] = obj; lastCount6 = count2; lastTime9 = now(); @@ -41756,11 +41760,11 @@ async function predict11(image, config3, idx, count2) { 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] = li(t8.resize, 3, 3); + const [red, green, blue] = ci(t8.resize, 3, 3); const redNorm = se(red, rgb2[0]); const greenNorm = se(green, rgb2[1]); const blueNorm = se(blue, rgb2[2]); - const grayscale = Tk([redNorm, greenNorm, blueNorm]); + const grayscale = _k([redNorm, greenNorm, blueNorm]); normalize2 = se(Te(grayscale, constants.tf05), 2); } else { normalize2 = se(Te(t8.resize, constants.tf05), 2); @@ -41773,7 +41777,7 @@ async function predict11(image, config3, idx, count2) { const data = await t8.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(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); last7[idx] = obj; lastCount7 = count2; lastTime10 = now(); @@ -41816,7 +41820,7 @@ async function predict12(input, config3, idx, count2) { t8.data = model15.execute(t8.crop); const output = await t8.data.data(); data = Array.from(output); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); } last8[idx] = data; lastCount8 = count2; @@ -41859,7 +41863,7 @@ async function predict13(input, config3, idx, count2) { t8.data = model16.execute(t8.crop); const output = await t8.data.data(); data = Array.from(output); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); } last9[idx] = data; lastCount9 = count2; @@ -41909,24 +41913,24 @@ var calculateFaceAngle = (face4, imageSize) => { const z = a[0] * b[1] - a[1] * b[0]; return [x, y8, z]; }; - const rotationMatrixToEulerAngle = (r) => { - const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; + const rotationMatrixToEulerAngle = (r15) => { + const [r00, _r01, _r02, r102, r112, r122, r20, r21, r222] = r15; let thetaX; let thetaY; let thetaZ; - if (r10 < 1) { - if (r10 > -1) { - thetaZ = Math.asin(r10); + if (r102 < 1) { + if (r102 > -1) { + thetaZ = Math.asin(r102); thetaY = Math.atan2(-r20, r00); - thetaX = Math.atan2(-r12, r11); + thetaX = Math.atan2(-r122, r112); } else { thetaZ = -Math.PI / 2; - thetaY = -Math.atan2(r21, r22); + thetaY = -Math.atan2(r21, r222); thetaX = 0; } } else { thetaZ = Math.PI / 2; - thetaY = Math.atan2(r21, r22); + thetaY = Math.atan2(r21, r222); thetaX = 0; } if (Number.isNaN(thetaX)) @@ -41974,7 +41978,7 @@ function calculateCameraDistance(face4, width) { // src/face/face.ts var detectFace = async (instance, input) => { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2, _k2, _l2, _m, _n2, _o, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2; let timeStamp = now(); let ageRes; let gearRes; @@ -42001,90 +42005,90 @@ var detectFace = async (instance, input) => { } if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { const masked = await mask(faces[i]); - Mt(faces[i].tensor); + Ot(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 || ur([]), instance.config, i, faces.length) : []; + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || ar([]), instance.config, i, faces.length) : []; } else { instance.state = "run:emotion"; timeStamp = now(); - emotionRes = ((_c2 = instance.config.face.emotion) == null ? void 0 : _c2.enabled) ? await predict5(faces[i].tensor || ur([]), instance.config, i, faces.length) : []; + emotionRes = ((_c2 = instance.config.face.emotion) == null ? void 0 : _c2.enabled) ? await predict5(faces[i].tensor || ar([]), 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 = ((_d2 = instance.config.face.antispoof) == null ? void 0 : _d2.enabled) ? predict7(faces[i].tensor || ur([]), instance.config, i, faces.length) : 0; + antispoofRes = ((_d2 = instance.config.face.antispoof) == null ? void 0 : _d2.enabled) ? predict7(faces[i].tensor || ar([]), 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 || ur([]), instance.config, i, faces.length) : 0; + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || ar([]), 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 = ((_f2 = instance.config.face.liveness) == null ? void 0 : _f2.enabled) ? predict8(faces[i].tensor || ur([]), instance.config, i, faces.length) : 0; + livenessRes = ((_f2 = instance.config.face.liveness) == null ? void 0 : _f2.enabled) ? predict8(faces[i].tensor || ar([]), instance.config, i, faces.length) : 0; } else { instance.state = "run:liveness"; timeStamp = now(); - livenessRes = ((_g2 = instance.config.face.liveness) == null ? void 0 : _g2.enabled) ? await predict8(faces[i].tensor || ur([]), instance.config, i, faces.length) : 0; + livenessRes = ((_g2 = instance.config.face.liveness) == null ? void 0 : _g2.enabled) ? await predict8(faces[i].tensor || ar([]), 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 = ((_h2 = instance.config.face.gear) == null ? void 0 : _h2.enabled) ? predict9(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; + gearRes = ((_h2 = instance.config.face.gear) == null ? void 0 : _h2.enabled) ? predict9(faces[i].tensor || ar([]), 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 || ur([]), instance.config, i, faces.length) : null; + gearRes = ((_i2 = instance.config.face.gear) == null ? void 0 : _i2.enabled) ? await predict9(faces[i].tensor || ar([]), 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 = ((_j2 = instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) ? predict10(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; - genderRes = ((_k2 = instance.config.face["ssrnet"]) == null ? void 0 : _k2.enabled) ? predict11(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; + ageRes = ((_j2 = instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) ? predict10(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; + genderRes = ((_k2 = instance.config.face["ssrnet"]) == null ? void 0 : _k2.enabled) ? predict11(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; } else { instance.state = "run:ssrnet"; timeStamp = now(); - ageRes = ((_l2 = instance.config.face["ssrnet"]) == null ? void 0 : _l2.enabled) ? await predict10(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; - genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; + ageRes = ((_l2 = instance.config.face["ssrnet"]) == null ? void 0 : _l2.enabled) ? await predict10(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || ar([]), 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 = ((_n2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _n2.enabled) ? predict12(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; + mobilefacenetRes = ((_n2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _n2.enabled) ? predict12(faces[i].tensor || ar([]), 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 || ur([]), instance.config, i, faces.length) : null; + mobilefacenetRes = ((_o2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _o2.enabled) ? await predict12(faces[i].tensor || ar([]), 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 = ((_p2 = instance.config.face["insightface"]) == null ? void 0 : _p2.enabled) ? predict13(faces[i].tensor || ur([]), instance.config, i, faces.length) : null; + insightfaceRes = ((_p2 = instance.config.face["insightface"]) == null ? void 0 : _p2.enabled) ? predict13(faces[i].tensor || ar([]), 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 || ur([]), instance.config, i, faces.length) : null; + insightfaceRes = ((_q = instance.config.face["insightface"]) == null ? void 0 : _q.enabled) ? await predict13(faces[i].tensor || ar([]), 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 || ur([]), instance.config, i, faces.length); + descRes = predict6(faces[i].tensor || ar([]), instance.config, i, faces.length); } else { instance.state = "run:description"; timeStamp = now(); - descRes = await predict6(faces[i].tensor || ur([]), instance.config, i, faces.length); + descRes = await predict6(faces[i].tensor || ar([]), 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:"); @@ -42116,8 +42120,8 @@ var detectFace = async (instance, input) => { descRes.descriptor = insightfaceRes; } const irisSize = ((_v2 = instance.config.face.iris) == null ? void 0 : _v2.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; - const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? gc(faces[i].tensor) : null; - Mt(faces[i].tensor); + const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? uc(faces[i].tensor) : null; + Ot(faces[i].tensor); if (faces[i].tensor) delete faces[i].tensor; const res = { @@ -45770,10 +45774,10 @@ var HandDetector = class { var _a, _b, _c2, _d2; this.model = model23; this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); - this.anchorsTensor = fu(this.anchors); + this.anchorsTensor = cu(this.anchors); this.inputSize = ((_d2 = (_c2 = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c2.shape) == null ? void 0 : _d2[2]) || 0; - this.inputSizeTensor = tr([this.inputSize, this.inputSize]); - this.doubleInputSizeTensor = tr([this.inputSize * 2, this.inputSize * 2]); + this.inputSizeTensor = Jt([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = Jt([this.inputSize * 2, this.inputSize * 2]); } normalizeBoxes(boxes) { const t8 = {}; @@ -45786,8 +45790,8 @@ var HandDetector = class { t8.startPoints = se(t8.sub, this.inputSizeTensor); t8.add = Ce(t8.boxCenterPoints, t8.halfBoxSizes); t8.endPoints = se(t8.add, this.inputSizeTensor); - const res = Yk([t8.startPoints, t8.endPoints], 1); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + const res = Qk([t8.startPoints, t8.endPoints], 1); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return res; } normalizeLandmarks(rawPalmLandmarks, index2) { @@ -45796,7 +45800,7 @@ var HandDetector = class { t8.div = je(t8.reshape, this.inputSizeTensor); t8.landmarks = Ce(t8.div, this.anchors[index2] ? this.anchors[index2] : 0); const res = se(t8.landmarks, this.inputSizeTensor); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return res; } async predict(input, config3) { @@ -45806,10 +45810,10 @@ var HandDetector = class { t8.div = je(t8.resize, constants.tf127); t8.image = Te(t8.div, constants.tf1); t8.batched = this.model.execute(t8.image); - t8.predictions = gc(t8.batched); + t8.predictions = uc(t8.batched); t8.slice = Xe(t8.predictions, [0, 0], [-1, 1]); t8.sigmoid = $a(t8.slice); - t8.scores = gc(t8.sigmoid); + t8.scores = uc(t8.sigmoid); const scores = await t8.scores.data(); t8.boxes = Xe(t8.predictions, [0, 1], [-1, 4]); t8.norm = this.normalizeBoxes(t8.boxes); @@ -45829,9 +45833,9 @@ var HandDetector = class { const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); hands.push(scaled); - Object.keys(p).forEach((tensor) => Mt(p[tensor])); + Object.keys(p).forEach((tensor) => Ot(p[tensor])); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return hands; } }; @@ -45936,18 +45940,18 @@ var HandPipeline = class { const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); const handImage = je(croppedInput, constants.tf255); - Mt(croppedInput); - Mt(rotatedImage); + Ot(croppedInput); + Ot(rotatedImage); const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); lastTime13 = now(); - Mt(handImage); + Ot(handImage); const confidence = (await confidenceT.data())[0]; - Mt(confidenceT); + Ot(confidenceT); if (confidence >= config3.hand.minConfidence / 4) { const keypointsReshaped = W(keypoints, [-1, 3]); const rawCoords = await keypointsReshaped.array(); - Mt(keypoints); - Mt(keypointsReshaped); + Ot(keypoints); + Ot(keypointsReshaped); const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); const nextBoundingBox = this.getBoxForHandLandmarks(coords); this.storedBoxes[i] = { ...nextBoundingBox, confidence }; @@ -45962,7 +45966,7 @@ var HandPipeline = class { } else { this.storedBoxes[i] = null; } - Mt(keypoints); + Ot(keypoints); } else { const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); const result = { @@ -46153,15 +46157,15 @@ async function detectHands(input, config3) { t8.resize = Kj.resizeBilinear(input, [height, width]); t8.cast = We(t8.resize, "int32"); [t8.rawScores, t8.rawBoxes] = await models2[0].executeAsync(t8.cast, modelOutputNodes); - t8.boxes = gc(t8.rawBoxes, [0, 2]); - t8.scores = gc(t8.rawScores, [0]); - const classScores = fo(t8.scores, 1); - Mt(classScores[faceIndex]); + t8.boxes = uc(t8.rawBoxes, [0, 2]); + t8.scores = uc(t8.rawScores, [0]); + const classScores = mo(t8.scores, 1); + Ot(classScores[faceIndex]); classScores.splice(faceIndex, 1); - t8.filtered = kr(classScores, 1); - Mt(classScores); + t8.filtered = vr(classScores, 1); + Ot(classScores); t8.max = Ra(t8.filtered, 1); - t8.argmax = Ek(t8.filtered, 1); + t8.argmax = Rk(t8.filtered, 1); let id2 = 0; t8.nms = await Kj.nonMaxSuppressionAsync(t8.boxes, t8.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); const nms = await t8.nms.data(); @@ -46170,7 +46174,7 @@ async function detectHands(input, config3) { for (const nmsIndex of Array.from(nms)) { const boxSlice = Xe(t8.boxes, nmsIndex, 1); const boxYX = await boxSlice.data(); - Mt(boxSlice); + Ot(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])]; @@ -46179,7 +46183,7 @@ async function detectHands(input, config3) { const hand3 = { id: id2++, score, box: boxFull, boxRaw, label }; hands.push(hand3); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); hands.sort((a, b) => b.score - a.score); if (hands.length > (config3.hand.maxDetected || 1)) hands.length = config3.hand.maxDetected || 1; @@ -46219,7 +46223,7 @@ async function detectFingers(input, h, config3) { hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); } } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); } return hand3; } @@ -46337,7 +46341,7 @@ var connected3 = { var bufferedResult = empty(); var interpolateTime = 0; function calc2(newResult, config3) { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2, _k2, _l2, _m, _n2, _o, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2; const t02 = now(); if (!newResult) return empty(); @@ -46354,7 +46358,7 @@ function calc2(newResult, config3) { const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { - var _a2, _b2, _c3, _d3, _e2, _f3, _g3, _h3, _i2; + var _a2, _b2, _c3, _d3, _e2, _f3, _g3, _h3, _i3; return { score: newKpt.score, part: newKpt.part, @@ -46371,7 +46375,7 @@ function calc2(newResult, config3) { 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 : (_c3 = newKpt.distance) == null ? void 0 : _c3[0], bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d3[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f3 = newKpt.distance) == null ? void 0 : _f3[1], - bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g3[2]) || 0) + (((_h3 = newKpt.distance) == null ? void 0 : _h3[2]) || 0)) / bufferedFactor : (_i2 = newKpt.distance) == null ? void 0 : _i2[2] + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g3[2]) || 0) + (((_h3 = newKpt.distance) == null ? void 0 : _h3[2]) || 0)) / bufferedFactor : (_i3 = newKpt.distance) == null ? void 0 : _i3[2] ] }; }); @@ -46429,7 +46433,7 @@ function calc2(newResult, config3) { annotations2 = bufferedResult.face[i].annotations; } else if (newResult.face[i].annotations) { for (const key of Object.keys(newResult.face[i].annotations)) { - annotations2[key] = ((_i = (_h2 = (_g2 = newResult.face[i]) == null ? void 0 : _g2.annotations) == null ? void 0 : _h2[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; + annotations2[key] = ((_i2 = (_h2 = (_g2 = newResult.face[i]) == null ? void 0 : _g2.annotations) == null ? void 0 : _h2[key]) == null ? void 0 : _i2[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) { @@ -46437,7 +46441,7 @@ function calc2(newResult, config3) { rotation.matrix = (_j2 = newResult.face[i].rotation) == null ? void 0 : _j2.matrix; rotation.angle = { roll: ((bufferedFactor - 1) * (((_l2 = (_k2 = bufferedResult.face[i].rotation) == null ? void 0 : _k2.angle) == null ? void 0 : _l2.roll) || 0) + (((_n2 = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n2.roll) || 0)) / bufferedFactor, - yaw: ((bufferedFactor - 1) * (((_p2 = (_o = bufferedResult.face[i].rotation) == null ? void 0 : _o.angle) == null ? void 0 : _p2.yaw) || 0) + (((_r2 = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r2.yaw) || 0)) / bufferedFactor, + yaw: ((bufferedFactor - 1) * (((_p2 = (_o2 = bufferedResult.face[i].rotation) == null ? void 0 : _o2.angle) == null ? void 0 : _p2.yaw) || 0) + (((_r2 = (_q = newResult.face[i].rotation) == null ? void 0 : _q.angle) == null ? void 0 : _r2.yaw) || 0)) / bufferedFactor, pitch: ((bufferedFactor - 1) * (((_t = (_s2 = bufferedResult.face[i].rotation) == null ? void 0 : _s2.angle) == null ? void 0 : _t.pitch) || 0) + (((_v2 = (_u2 = newResult.face[i].rotation) == null ? void 0 : _u2.angle) == null ? void 0 : _v2.pitch) || 0)) / bufferedFactor }; rotation.gaze = { @@ -46474,8 +46478,8 @@ function calc2(newResult, config3) { 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); + const t1 = now(); + interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t02) : Math.round(t1 - t02); if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime }; return bufferedResult; @@ -46500,26 +46504,26 @@ async function predict16(input, config3) { t8.resize = Kj.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); t8.norm = je(t8.resize, constants.tf255); t8.res = model17.execute(t8.norm); - t8.squeeze = gc(t8.res, [0]); - [t8.bgRaw, t8.fgRaw] = fo(t8.squeeze, 2); - t8.fg = P1(t8.fgRaw); + t8.squeeze = uc(t8.res, [0]); + [t8.bgRaw, t8.fgRaw] = mo(t8.squeeze, 2); + t8.fg = O1(t8.fgRaw); t8.mul = se(t8.fg, constants.tf255); t8.expand = Ms(t8.mul, 2); t8.output = Kj.resizeBilinear(t8.expand, [input.shape[1] || 0, input.shape[2] || 0]); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t8.input = gc(input); - t8.concat = bt([t8.input, t8.output], -1); + t8.input = uc(input); + t8.concat = yt([t8.input, t8.output], -1); rgba = We(t8.concat, "int32"); break; case "alpha": rgba = We(t8.output, "int32"); break; default: - rgba = ur(0); + rgba = ar(0); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return rgba; } @@ -46660,7 +46664,7 @@ function padInput(input, inputSize10) { t8.pad = Aa(input, cache5.padding); t8.resize = Kj.resizeBilinear(t8.pad, [inputSize10, inputSize10]); const final = We(t8.resize, "int32"); - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return final; } function rescaleBody(body4, outputSize2) { @@ -46811,7 +46815,7 @@ async function predict17(input, config3) { rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); jitter(body4.keypoints); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); resolve(cache6.bodies); }); } @@ -46839,11 +46843,11 @@ async function process4(res, outputShape, config3) { const size2 = inputSize9; for (const strideSize of [1, 2, 4]) { const baseSize = strideSize * 13; - const scoresT = gc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scoresT = uc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); const scores = await scoresT.array(); - const featuresT = gc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const featuresT = uc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); const boxesMaxT = W(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); - const boxIdxT = Ek(boxesMaxT, 2); + const boxIdxT = Rk(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++) { @@ -46884,7 +46888,7 @@ async function process4(res, outputShape, config3) { } } } - Mt([scoresT, featuresT, boxesMaxT, boxIdxT]); + Ot([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); @@ -46892,7 +46896,7 @@ async function process4(res, outputShape, config3) { if (nmsBoxes && nmsBoxes.length > 0) { const nms = await Kj.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); nmsIdx = Array.from(await nms.data()); - Mt(nms); + Ot(nms); } results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); return results; @@ -46913,14 +46917,14 @@ async function predict18(image, config3) { const outputSize2 = [image.shape[2] || 0, image.shape[1] || 0]; const resizeT = Kj.resizeBilinear(image, [inputSize9, inputSize9], false); const normT = je(resizeT, constants.tf255); - const transposeT = yc(normT, [0, 3, 1, 2]); + const transposeT = cc(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; - Mt([resizeT, normT, transposeT, ...objectT]); + Ot([resizeT, normT, transposeT, ...objectT]); resolve(obj); }); } @@ -47254,13 +47258,13 @@ async function predict19(input, config3) { const resized = Kj.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); const normalized = Te(je(We(resized, "float32"), 127.5), 1); const results = model20.execute(normalized, poseNetOutputs); - const results3d = results.map((y8) => gc(y8, [0])); + const results3d = results.map((y8) => uc(y8, [0])); results3d[1] = $a(results3d[1]); return results3d; }); const buffers = await Promise.all(res.map((tensor) => tensor.buffer())); for (const t8 of res) - Mt(t8); + Ot(t8); const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); if (!model20.inputs[0].shape) return []; @@ -47281,13 +47285,13 @@ var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; var t = {}; var ratio = 0; function init3(config3) { - Mt([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); - t.r1i = ur(0); - t.r2i = ur(0); - t.r3i = ur(0); - t.r4i = ur(0); + Ot([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = ar(0); + t.r2i = ar(0); + t.r3i = ar(0); + t.r4i = ar(0); ratio = config3.segmentation.ratio || 0.5; - t.downsample_ratio = ur(ratio); + t.downsample_ratio = ar(ratio); } async function load19(config3) { if (!model21 || env.initial) @@ -47297,8 +47301,8 @@ async function load19(config3) { init3(config3); return model21; } -var normalize = (r) => De(() => { - const squeeze = gc(r, [0]); +var normalize = (r15) => De(() => { + const squeeze = uc(r15, [0]); const mul = se(squeeze, constants.tf255); const cast = We(mul, "int32"); return cast; @@ -47306,25 +47310,25 @@ var normalize = (r) => De(() => { function getRGBA(fgr, pha) { const rgb3 = fgr ? normalize(fgr) : Ea([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); const a = pha ? normalize(pha) : Ea([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); - const rgba = bt([rgb3, a], -1); - Mt([rgb3, a]); + const rgba = yt([rgb3, a], -1); + Ot([rgb3, a]); return rgba; } function getState(state) { return De(() => { - const r = {}; - r.unstack = fo(state, -1); - r.concat = bt(r.unstack, 1); - r.split = li(r.concat, 4, 1); - r.stack = bt(r.split, 2); - r.squeeze = gc(r.stack, [0]); - r.expand = Ms(r.squeeze, -1); - r.add = Ce(r.expand, 1); - r.mul = se(r.add, 127.5); - r.cast = We(r.mul, "int32"); - r.tile = cu(r.cast, [1, 1, 3]); - r.alpha = Ea([r.tile.shape[0] || 0, r.tile.shape[1] || 0, 1], 255, "int32"); - return bt([r.tile, r.alpha], -1); + const r15 = {}; + r15.unstack = mo(state, -1); + r15.concat = yt(r15.unstack, 1); + r15.split = ci(r15.concat, 4, 1); + r15.stack = yt(r15.split, 2); + r15.squeeze = uc(r15.stack, [0]); + r15.expand = Ms(r15.squeeze, -1); + r15.add = Ce(r15.expand, 1); + r15.mul = se(r15.add, 127.5); + r15.cast = We(r15.mul, "int32"); + r15.tile = au(r15.cast, [1, 1, 3]); + r15.alpha = Ea([r15.tile.shape[0] || 0, r15.tile.shape[1] || 0, 1], 255, "int32"); + return yt([r15.tile, r15.alpha], -1); }); } async function predict20(input, config3) { @@ -47351,9 +47355,9 @@ async function predict20(input, config3) { rgba = getState(r1o); break; default: - rgba = ur(0); + rgba = ar(0); } - Mt([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + Ot([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; } @@ -47377,23 +47381,23 @@ async function predict21(input, config3) { t8.resize = Kj.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); t8.norm = je(t8.resize, constants.tf255); t8.res = model22.execute(t8.norm); - t8.squeeze = gc(t8.res, [0]); + t8.squeeze = uc(t8.res, [0]); t8.alpha = Kj.resizeBilinear(t8.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); t8.mul = se(t8.alpha, constants.tf255); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t8.input = gc(input); - t8.concat = bt([t8.input, t8.mul], -1); + t8.input = uc(input); + t8.concat = yt([t8.input, t8.mul], -1); rgba = We(t8.concat, "int32"); break; case "alpha": rgba = We(t8.mul, "int32"); break; default: - rgba = ur(0); + rgba = ar(0); } - Object.keys(t8).forEach((tensor) => Mt(t8[tensor])); + Object.keys(t8).forEach((tensor) => Ot(t8[tensor])); return rgba; } @@ -47462,7 +47466,7 @@ var Models = class { this.models[model23] = null; } async load(instance) { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2, _k2, _l2, _m, _n2, _o, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2, _A2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2, _A2; if (env.initial) this.reset(); if (instance) @@ -47476,14 +47480,14 @@ var Models = class { m.iris = this.instance.config.face.enabled && ((_e = this.instance.config.face.iris) == null ? void 0 : _e.enabled) && !((_f2 = this.instance.config.face.attention) == null ? void 0 : _f2.enabled) && !this.models.iris ? load4(this.instance.config) : null; m.facemesh = this.instance.config.face.enabled && ((_g2 = this.instance.config.face.mesh) == null ? void 0 : _g2.enabled) && !this.models.facemesh ? load5(this.instance.config) : null; m.gear = this.instance.config.face.enabled && ((_h2 = this.instance.config.face["gear"]) == null ? void 0 : _h2.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.ssrnetage = this.instance.config.face.enabled && ((_i2 = this.instance.config.face["ssrnet"]) == null ? void 0 : _i2.enabled) && !this.models.ssrnetage ? load11(this.instance.config) : null; m.ssrnetgender = this.instance.config.face.enabled && ((_j2 = this.instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; m.mobilefacenet = this.instance.config.face.enabled && ((_k2 = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k2.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; m.insightface = this.instance.config.face.enabled && ((_l2 = this.instance.config.face["insightface"]) == null ? void 0 : _l2.enabled) && !this.models.insightface ? load14(this.instance.config) : null; m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n2 = this.instance.config.body.modelPath) == null ? void 0 : _n2.includes("efficientpose")) ? load2(this.instance.config) : null; - m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o = this.instance.config.body.modelPath) == null ? void 0 : _o.includes("movenet")) ? load16(this.instance.config) : null; + m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o2 = this.instance.config.body.modelPath) == null ? void 0 : _o2.includes("movenet")) ? load16(this.instance.config) : null; m.posenet = this.instance.config.body.enabled && !this.models.posenet && ((_p2 = this.instance.config.body.modelPath) == null ? void 0 : _p2.includes("posenet")) ? load18(this.instance.config) : null; m.handtrack = this.instance.config.hand.enabled && !this.models.handtrack && ((_r2 = (_q = this.instance.config.hand.detector) == null ? void 0 : _q.modelPath) == null ? void 0 : _r2.includes("handtrack")) ? loadDetect3(this.instance.config) : null; m.handskeleton = this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && ((_t = (_s2 = this.instance.config.hand.detector) == null ? void 0 : _s2.modelPath) == null ? void 0 : _t.includes("handtrack")) ? loadSkeleton2(this.instance.config) : null; @@ -48391,7 +48395,7 @@ async function warmupNode(instance) { img = atob2(body3); let res; if ("node" in tfjs_esm_exports && Cde() === "tensorflow") { - const data = (void 0).decodeJpeg(img); + const data = bQt.decodeJpeg(img); const expanded = Ms(data, 0); instance.tf.dispose(data); res = await instance.detect(expanded, instance.config); @@ -48422,7 +48426,7 @@ async function runCompile(instance) { return; } A().set("ENGINE_COMPILE_ONLY", true); - const numTensorsStart = pr().state.numTensors; + const numTensorsStart = ur().state.numTensors; const compiledModels = []; for (const [modelName, model23] of Object.entries(instance.models.models)) { if (!model23) @@ -48433,26 +48437,26 @@ async function runCompile(instance) { if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; } - const tensor = Gr(shape, dtype); + const tensor = Ur(shape, dtype); try { const res = model23.execute(tensor); compiledModels.push(modelName); if (Array.isArray(res)) - res.forEach((t8) => Mt(t8)); + res.forEach((t8) => Ot(t8)); else - Mt(res); + Ot(res); } catch (e) { if (instance.config.debug) log("compile fail model:", modelName); } - Mt(tensor); + Ot(tensor); } const kernels = await webGLBackend["checkCompileCompletionAsync"](); webGLBackend["getUniformLocations"](); if (instance.config.debug) log("compile pass:", { models: compiledModels, kernels: kernels.length }); A().set("ENGINE_COMPILE_ONLY", false); - const numTensorsEnd = pr().state.numTensors; + const numTensorsEnd = ur().state.numTensors; if (numTensorsEnd - numTensorsStart > 0) log("tensor leak:", numTensorsEnd - numTensorsStart); } @@ -48469,9 +48473,9 @@ async function warmup(instance, userConfig) { await instance.models.load(); await runCompile(instance); const res = await runInference(instance); - const t12 = now(); + const t1 = now(); if (instance.config.debug) - log("warmup", instance.config.warmup, Math.round(t12 - t02), "ms"); + log("warmup", instance.config.warmup, Math.round(t1 - t02), "ms"); instance.emit("warmup"); resolve(res); }); @@ -48564,7 +48568,7 @@ var Human = class { return null; if (!input) return "input is not defined"; - if (this.env.node && !(input instanceof ut)) + if (this.env.node && !(input instanceof mt)) return "input must be a tensor"; try { this.tf.getBackend(); @@ -48672,7 +48676,7 @@ var Human = class { 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); - Mt(processed.tensor); + Ot(processed.tensor); return tensor; } /** Compare two input tensors for pixel similarity @@ -48748,8 +48752,8 @@ var Human = class { async warmup(userConfig) { const t02 = now(); const res = await warmup(this, userConfig); - const t12 = now(); - this.performance.warmup = Math.trunc(t12 - t02); + const t1 = now(); + this.performance.warmup = Math.trunc(t1 - t02); return res; } /** Run detect with tensorflow profiling @@ -48791,7 +48795,7 @@ var Human = class { async detect(input, userConfig) { this.state = "detect"; return new Promise(async (resolve) => { - var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i, _j2, _k2, _l2, _m, _n2, _o, _p2, _q, _r2, _s2, _t, _u2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q, _r2, _s2, _t, _u2; this.state = "config"; let timeStamp; this.config = mergeDeep(this.config, userConfig); @@ -48877,7 +48881,7 @@ 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 = (_i = this.config.hand.detector) == null ? void 0 : _i.modelPath) == null ? void 0 : _j2.includes("handdetect")) + 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) : []; @@ -48887,7 +48891,7 @@ var Human = class { 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 = (_o = this.config.hand.detector) == null ? void 0 : _o.modelPath) == null ? void 0 : _p2.includes("handtrack")) + 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); } @@ -48941,7 +48945,7 @@ var Human = class { return join2(faceRes, bodyRes, handRes, gestureRes, shape); } }; - Mt(img.tensor); + Ot(img.tensor); this.emit("detect"); this.state = "idle"; resolve(this.result); diff --git a/dist/human.esm.js.map b/dist/human.esm.js.map index ca48ffc4..8f824470 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 wG=Object.create;var QC=Object.defineProperty;var SG=Object.getOwnPropertyDescriptor;var IG=Object.getOwnPropertyNames;var vG=Object.getPrototypeOf,kG=Object.prototype.hasOwnProperty;var qt=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),qe=(r,t)=>{for(var e in t)QC(r,e,{get:t[e],enumerable:!0})},NG=(r,t,e,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of IG(t))!kG.call(r,n)&&n!==e&&QC(r,n,{get:()=>t[n],enumerable:!(o=SG(t,n))||o.enumerable});return r};var Kp=(r,t,e)=>(e=r!=null?wG(vG(r)):{},NG(t||!r||!r.__esModule?QC(e,\"default\",{value:r,enumerable:!0}):e,r));var V0=qt((tle,z0)=>{z0.exports=Nt;var No=null;try{No=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 Nt(r,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}Nt.prototype.__isLong__;Object.defineProperty(Nt.prototype,\"__isLong__\",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}Nt.isLong=Wr;var R0={},D0={};function Bu(r,t){var e,o,n;return t?(r>>>=0,(n=0<=r&&r<256)&&(o=D0[r],o)?o:(e=Tt(r,(r|0)<0?-1:0,!0),n&&(D0[r]=e),e)):(r|=0,(n=-128<=r&&r<128)&&(o=R0[r],o)?o:(e=Tt(r,r<0?-1:0,!1),n&&(R0[r]=e),e))}Nt.fromInt=Bu;function To(r,t){if(isNaN(r))return t?Lu:_o;if(t){if(r<0)return Lu;if(r>=O0)return B0}else{if(r<=-F0)return Vr;if(r+1>=F0)return L0}return r<0?To(-r,t).neg():Tt(r%oc|0,r/oc|0,t)}Nt.fromNumber=To;function Tt(r,t,e){return new Nt(r,t,e)}Nt.fromBits=Tt;var Zm=Math.pow;function cw(r,t,e){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return _o;if(typeof t==\"number\"?(e=t,t=!1):t=!!t,e=e||10,e<2||360)throw Error(\"interior hyphen\");if(o===0)return cw(r.substring(1),t,e).neg();for(var n=To(Zm(e,8)),s=_o,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*oc+(this.low>>>0):this.high*oc+(this.low>>>0)};de.toString=function(t){if(t=t||10,t<2||36>>0,c=u.toString(t);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 t=this.high!=0?this.high:this.low,e=31;e>0&&!(t&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(t){return Wr(t)||(t=Fs(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};de.eq=de.equals;de.notEquals=function(t){return!this.eq(t)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(t){return this.comp(t)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(t){return this.comp(t)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(t){return this.comp(t)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(t){return this.comp(t)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(t){if(Wr(t)||(t=Fs(t)),this.eq(t))return 0;var e=this.isNegative(),o=t.isNegative();return e&&!o?-1:!e&&o?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(rc)};de.neg=de.negate;de.add=function(t){Wr(t)||(t=Fs(t));var e=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=t.high>>>16,i=t.high&65535,p=t.low>>>16,u=t.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+=e+a,c&=65535,Tt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(t){return Wr(t)||(t=Fs(t)),this.add(t.neg())};de.sub=de.subtract;de.multiply=function(t){if(this.isZero())return _o;if(Wr(t)||(t=Fs(t)),No){var e=No.mul(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}if(t.isZero())return _o;if(this.eq(Vr))return t.isOdd()?Vr:_o;if(t.eq(Vr))return this.isOdd()?Vr:_o;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(P0)&&t.lt(P0))return To(this.toNumber()*t.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=t.high>>>16,p=t.high&65535,u=t.low>>>16,c=t.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,Tt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(t){if(Wr(t)||(t=Fs(t)),t.isZero())throw Error(\"division by zero\");if(No){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?No.div_u:No.div_s)(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Lu:_o;var o,n,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Lu;if(t.gt(this.shru(1)))return M0;s=Lu}else{if(this.eq(Vr)){if(t.eq(rc)||t.eq(pw))return Vr;if(t.eq(Vr))return rc;var a=this.shr(1);return o=a.div(t).shl(1),o.eq(_o)?t.isNegative()?rc:pw:(n=this.sub(t.mul(o)),s=o.add(n.div(t)),s)}else if(t.eq(Vr))return this.unsigned?Lu:_o;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();s=_o}for(n=this;n.gte(t);){o=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Zm(2,i-48),u=To(o),c=u.mul(t);c.isNegative()||c.gt(n);)o-=p,u=To(o,this.unsigned),c=u.mul(t);u.isZero()&&(u=rc),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(t){if(Wr(t)||(t=Fs(t)),No){var e=(this.unsigned?No.rem_u:No.rem_s)(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Tt(~this.low,~this.high,this.unsigned)};de.and=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low&t.low,this.high&t.high,this.unsigned)};de.or=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low|t.low,this.high|t.high,this.unsigned)};de.xor=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low^t.low,this.high^t.high,this.unsigned)};de.shiftLeft=function(t){return Wr(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Tt(this.low<>>32-t,this.unsigned):Tt(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Tt(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(t){if(Wr(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var o=this.low;return Tt(o>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Tt(e,0,this.unsigned):Tt(e>>>t-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Tt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Tt(this.low,this.high,!0)};de.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};de.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};Nt.fromBytes=function(t,e,o){return o?Nt.fromBytesLE(t,e):Nt.fromBytesBE(t,e)};Nt.fromBytesLE=function(t,e){return new Nt(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};Nt.fromBytesBE=function(t,e){return new Nt(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var Ik=qt(()=>{});var vk=qt(()=>{});var Q2=qt((Y2,Vw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(Y2,typeof Vw==\"object\"&&Vw,typeof define==\"function\"&&define)});var J2=qt((Z2,Ww)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(Z2,typeof Ww==\"object\"&&Ww,typeof define==\"function\"&&define)});var t1=qt((e1,Uw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(e1,typeof Uw==\"object\"&&Uw,typeof define==\"function\"&&define)});var o1=qt((r1,Gw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(r1,typeof Gw==\"object\"&&Gw,typeof define==\"function\"&&define)});var s1=qt((n1,Hw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(n1,typeof Hw==\"object\"&&Hw,typeof define==\"function\"&&define)});var i1=qt((a1,Kw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(a1,typeof Kw==\"object\"&&Kw,typeof define==\"function\"&&define)});var u1=qt(()=>{});var c1=qt((p1,Ld)=>{(function(r,t,e){var o=256,n=6,s=52,a=\"random\",i=e.pow(o,n),p=e.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[C,b(t)]: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),t),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(e[a]=P,O):P})(D,E,\"global\"in S?S.global:this==e,S.state)}function d(C){var S,k=C.length,_=this,E=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);E{var vq=Q2(),kq=J2(),Nq=t1(),Tq=o1(),_q=s1(),$q=i1(),Qu=c1();Qu.alea=vq;Qu.xor128=kq;Qu.xorwow=Nq;Qu.xorshift7=Tq;Qu.xor4096=_q;Qu.tychei=$q;l1.exports=Qu});var Bv=qt(()=>{});var zv=qt(()=>{});var RB=qt(()=>{});var DB=qt(()=>{});var AB=qt(()=>{});var FB=qt((Wg,Wv)=>{var Vv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};function e(){return oe.buffer!=Ge&&_t(oe.buffer),mt}function o(){return oe.buffer!=Ge&&_t(oe.buffer),it}function n(){return oe.buffer!=Ge&&_t(oe.buffer),gt}function s(){return oe.buffer!=Ge&&_t(oe.buffer),Lr}function a(){return oe.buffer!=Ge&&_t(oe.buffer),Lt}function i(){return oe.buffer!=Ge&&_t(oe.buffer),to}function p(){return oe.buffer!=Ge&&_t(oe.buffer),nr}var u=typeof t!=\"undefined\"?t:{},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 E,R,D,P;function O(F){if(F instanceof Eu)return;j(\"exiting due to exception: \"+F)}if(C){var M=Bv(),L=zv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",E=(V,ue)=>(V=zp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:\"utf8\")),D=V=>{var ue=E(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,Ee)=>{V=zp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?Ee(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 Eu))throw V}),process.on(\"unhandledRejection\",function(V){throw V}),g=(V,ue)=>{if(Bo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=RB()}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||(E=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 Ee=new XMLHttpRequest;Ee.open(\"GET\",F,!0),Ee.responseType=\"arraybuffer\",Ee.onload=()=>{if(Ee.status==200||Ee.status==0&&Ee.response){V(Ee.response);return}ue()},Ee.onerror=ue,Ee.send(null)}),P=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=DB().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\"&&$u(\"no native wasm support detected\");var oe,ie,le=!1,be;function _e(F,V){F||$u(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(F,V,ue){V>>>=0;for(var Ee=V+ue,Be=V;F[Be]&&!(Be>=Ee);)++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,Ee){if(ue>>>=0,!(Ee>0))return 0;for(var Be=ue,Le=ue+Ee-1,ge=0;ge=55296&&Ne<=57343){var Pt=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Pt&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 lt(F,V,ue){return st(F,o(),V,ue)}var Ge,mt,it,gt,xt,Lr,Lt,to,nr;S&&(Ge=u.buffer);function _t(F){Ge=F,u.HEAP8=mt=new Int8Array(F),u.HEAP16=gt=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=xt=new Uint16Array(F),u.HEAPU32=Lt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=nr=new Float64Array(F)}var sr=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ge=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:sr/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&&(Ge=oe.buffer),sr=Ge.byteLength,_t(Ge);var ar,ro=[],oo=[],hr=[],Wa=!1;function Bo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)sl(u.preRun.shift());ul(ro)}function Yt(){Wa=!0,!S&&ul(oo)}function Ua(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)l0(u.postRun.shift());ul(hr)}}function sl(F){ro.unshift(F)}function al(F){oo.unshift(F)}function l0(F){hr.unshift(F)}var Ti=0,Bp=null,Ga=null;function Cy(F){Ti++,u.monitorRunDependencies&&u.monitorRunDependencies(Ti)}function wm(F){if(Ti--,u.monitorRunDependencies&&u.monitorRunDependencies(Ti),Ti==0&&(Bp!==null&&(clearInterval(Bp),Bp=null),Ga)){var V=Ga;Ga=null,V()}}function $u(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 zp(F){return F.startsWith(\"file://\")}var gr;gr=\"tfjs-backend-wasm-threaded-simd.wasm\",Sm(gr)||(gr=_(gr));function Im(F){try{if(F==gr&&ne)return new Uint8Array(ne);if(D)return D(F);throw\"both async and sync fetching of the wasm failed\"}catch(V){$u(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!zp(gr))return fetch(gr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+gr+\"'\";return F.arrayBuffer()}).catch(function(){return Im(gr)});if(R)return new Promise(function(F,V){R(gr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(gr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Pt=ge.exports;if(u.asm=Pt,Dy(u.asm._emscripten_tls_init),ar=u.asm.__indirect_function_table,al(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ka){Me.loadWasmModuleToWorker(Ka,function(){--so||wm(\"wasm-instantiate\")})})}}S||Cy(\"wasm-instantiate\");function ue(ge){V(ge.instance,ge.module)}function Ee(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),$u(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Sm(gr)&&!zp(gr)&&!C&&typeof fetch==\"function\"?fetch(gr,{credentials:\"same-origin\"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Pt){return j(\"wasm streaming compile failed: \"+Pt),j(\"falling back to ArrayBuffer instantiation\"),Ee(ue)})}):Ee(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 m0,d0,vm={};function Eu(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 il(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 _i(1,1,F);be=F,Bo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new Eu(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 Eu||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 Pt=Me.pthreads[ge.targetThread];Pt?Pt.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\"?pl(ge.queue):Ne===\"spawnThread\"?Ny(ge):Ne===\"cleanupThread\"?il(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=[],Ee=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of Ee)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 ul(F){for(;F.length>0;)F.shift()(u)}function $y(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],Ee=V-ue;b0(V,Ee),Um(V)}u.establishStackSpace=$y;function _m(F){if(S)return _i(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Vp=[];function Ey(F){var V=Vp[F];return V||(F>=Vp.length&&(Vp.length=F+1),Vp[F]=V=ar.get(F)),V}function Ry(F,V){var ue=Ey(F)(V);Bo()?Me.setExitStatus(ue):y0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){h0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:\"cleanupThread\",thread:F}):il(F)}function $m(F,V,ue,Ee){return S?_i(3,1,F,V,ue,Ee):Em(F,V,ue,Ee)}function Em(F,V,ue,Ee){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 $m(F,V,ue,Ee);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:Ee,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 pl(F){Atomics.store(s(),F>>2,1),Wm()&&x0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=pl;function Ly(F,V,ue,Ee){if(F==V)setTimeout(()=>pl(Ee));else if(S)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:Ee});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:Ee})}return 1}function By(F,V,ue){return-1}function zy(){$u(\"\")}function Ru(F){Ru.shown||(Ru.shown={}),Ru.shown[F]||(Ru.shown[F]=1,C&&(F=\"warning: \"+F),j(F))}function Vy(){C||b||Ru(\"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 cl;C?cl=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:cl=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?AB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function _i(F,V){var ue=arguments.length-2,Ee=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Pt}return g0(F,Be,Le,V)})}var ll=[];function qy(F,V,ue){ll.length=V;for(var Ee=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,ll)}function jy(F){try{return oe.grow(F-Ge.byteLength+65535>>>16),_t(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 Ee=(Pt,so)=>Pt+(so-Pt%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,Ee(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw\"unwind\"}function Dm(F){return S?_i(4,1,F):52}function Am(F,V,ue,Ee,Be){return S?_i(5,1,F,V,ue,Ee,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,Ee){if(S)return _i(6,1,F,V,ue,Ee);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Pt=0;Pt>>0]);Be+=Ne}return a()[Ee>>>2]=Be,0}function Pm(F){var V=u[\"_\"+F];return V}function Jy(F,V){e().set(F,V>>>0)}function eb(F,V,ue,Ee,Be){var Le={string:Br=>{var Hp=0;if(Br!=null&&Br!==0){var S0=(Br.length<<2)+1;Hp=Gm(S0),lt(Br,Hp,S0)}return Hp},array:Br=>{var Hp=Gm(Br.length);return Jy(Br,Hp),Hp}};function ge(Br){return V===\"string\"?Pe(Br):V===\"boolean\"?!!Br:Br}var Ne=Pm(F),Pt=[],so=0;if(Ee)for(var Ka=0;Kage===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!Ee?Pm(F):function(){return eb(F,V,ue,arguments,Ee)}}Me.init();var rb=[null,Nm,_m,$m,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:Em,_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:cl,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},f0=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)},$b=u._Bincount=function(){return($b=u._Bincount=u.asm.Bincount).apply(null,arguments)},Eb=u._BitwiseAnd=function(){return(Eb=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)},$C=u._MaxPool3D=function(){return($C=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},EC=u._MaxPool3DGrad=function(){return(EC=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)},ml=u._OneHot=function(){return(ml=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)},Wp=u._Prelu=function(){return(Wp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Up=u._RealDiv=function(){return(Up=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Gp=u._Reciprocal=function(){return(Gp=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)},$e=u._ResizeBilinearGrad=function(){return($e=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)},Gt=u._Rsqrt=function(){return(Gt=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ha=u._SearchSorted=function(){return(Ha=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},dl=u._Selu=function(){return(dl=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},br=u._Sign=function(){return(br=u._Sign=u.asm.Sign).apply(null,arguments)},$i=u._Sin=function(){return($i=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},WU=u._Softmax=function(){return(WU=u._Softmax=u.asm.Softmax).apply(null,arguments)},UU=u._Softplus=function(){return(UU=u._Softplus=u.asm.Softplus).apply(null,arguments)},GU=u._SparseFillEmptyRows=function(){return(GU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},HU=u._SparseReshape=function(){return(HU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},KU=u._SparseSegmentReduction=function(){return(KU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},qU=u._SparseToDense=function(){return(qU=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},jU=u._Sqrt=function(){return(jU=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},XU=u._Square=function(){return(XU=u._Square=u.asm.Square).apply(null,arguments)},YU=u._SquaredDifference=function(){return(YU=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},QU=u._Step=function(){return(QU=u._Step=u.asm.Step).apply(null,arguments)},ZU=u._StridedSlice=function(){return(ZU=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},JU=u._Sub=function(){return(JU=u._Sub=u.asm.Sub).apply(null,arguments)},eG=u._Sum=function(){return(eG=u._Sum=u.asm.Sum).apply(null,arguments)},tG=u._Tan=function(){return(tG=u._Tan=u.asm.Tan).apply(null,arguments)},rG=u._Tanh=function(){return(rG=u._Tanh=u.asm.Tanh).apply(null,arguments)},oG=u._TensorScatterUpdate=function(){return(oG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},nG=u._Tile=function(){return(nG=u._Tile=u.asm.Tile).apply(null,arguments)},sG=u._TopK=function(){return(sG=u._TopK=u.asm.TopK).apply(null,arguments)},aG=u._Transform=function(){return(aG=u._Transform=u.asm.Transform).apply(null,arguments)},iG=u._Transpose=function(){return(iG=u._Transpose=u.asm.Transpose).apply(null,arguments)},uG=u.__FusedMatMul=function(){return(uG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},pG=u._malloc=function(){return(pG=u._malloc=u.asm.malloc).apply(null,arguments)},cG=u._free=function(){return(cG=u._free=u.asm.free).apply(null,arguments)},lG=u.__emscripten_tls_init=function(){return(lG=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)},mG=u.___errno_location=function(){return(mG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},h0=u.__emscripten_thread_init=function(){return(h0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},dG=u.__emscripten_thread_crashed=function(){return(dG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},fG=u._emscripten_main_thread_process_queued_calls=function(){return(fG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},hG=u._emscripten_main_browser_thread_id=function(){return(hG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},g0=u._emscripten_run_in_main_runtime_thread_js=function(){return(g0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},gG=u._emscripten_dispatch_to_thread_=function(){return(gG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},x0=u.__emscripten_proxy_execute_task_queue=function(){return(x0=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)},y0=u.__emscripten_thread_exit=function(){return(y0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},b0=u._emscripten_stack_set_limits=function(){return(b0=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)},xG=u.dynCall_iijjiiii=function(){return(xG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},yG=u.dynCall_jiji=function(){return(yG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Bo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=Eu,u.PThread=Me;var Hm;Ga=function F(){Hm||C0(),Hm||(Ga=F)};function C0(F){if(F=F||f,Ti>0)return;if(S){c(u),Yt(),startWorker(u);return}if(Ks(),Ti>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Yt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Ua()))}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()();C0();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 t!=\"undefined\")qm=t;else throw new Error(\"Could not find wasm module in post.js\");if(Km){var bG=qm._dispose;qm._dispose=function(){bG(),Km.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return t.ready}})();typeof Wg==\"object\"&&typeof Wv==\"object\"?Wv.exports=Vv:typeof define==\"function\"&&define.amd?define([],function(){return Vv}):typeof Wg==\"object\"&&(Wg.WasmBackendModuleThreadedSimd=Vv)});var OB=qt((UFt,PB)=>{PB.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 MB=qt((Ug,Gv)=>{var Uv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!=\"undefined\"?t:{},o,n;e.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({},e),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 e.locateFile?e.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Bp)return;E(\"exiting due to exception: \"+K)}if(m){var S=Bv(),k=zv();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,$e)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,$t){at?$e(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 Bp))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},e.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,$e)=>{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}$e()},at.onerror=$e,at.send(null)},b=K=>document.title=K);var _=e.print||console.log.bind(console),E=e.printErr||console.warn.bind(console);Object.assign(e,a),a=null,e.arguments&&(i=e.arguments),e.thisProgram&&(p=e.thisProgram),e.quit&&(u=e.quit);var R=4,D;e.wasmBinary&&(D=e.wasmBinary);var P=e.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&hr(\"no native wasm support detected\");var O,M=!1,L;function B(K,ae){K||hr(ae)}var z=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(K,ae,$e){ae>>>=0;for(var at=ae+$e,$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 Gt=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Gt:Qe=(Qe&7)<<18|Ke<<12|Gt<<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,$e,at){if($e>>>=0,!(at>0))return 0;for(var $t=$e,Et=$e+at-1,Qe=0;Qe=55296&&Ke<=57343){var Gt=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Gt&1023}if(Ke<=127){if($e>=Et)break;ae[$e++>>>0]=Ke}else if(Ke<=2047){if($e+1>=Et)break;ae[$e++>>>0]=192|Ke>>6,ae[$e++>>>0]=128|Ke&63}else if(Ke<=65535){if($e+2>=Et)break;ae[$e++>>>0]=224|Ke>>12,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}else{if($e+3>=Et)break;ae[$e++>>>0]=240|Ke>>18,ae[$e++>>>0]=128|Ke>>12&63,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}}return ae[$e>>>0]=0,$e-$t}function Y(K,ae,$e){return q(K,ne,ae,$e)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,e.HEAP8=re=new Int8Array(K),e.HEAP16=ee=new Int16Array(K),e.HEAP32=ie=new Int32Array(K),e.HEAPU8=ne=new Uint8Array(K),e.HEAPU16=oe=new Uint16Array(K),e.HEAPU32=le=new Uint32Array(K),e.HEAPF32=be=new Float32Array(K),e.HEAPF64=_e=new Float64Array(K)}var Fe=e.INITIAL_MEMORY||16777216,Pe,st=[],lt=[],Ge=[],mt=!1;function it(){return P}function gt(){if(e.preRun)for(typeof e.preRun==\"function\"&&(e.preRun=[e.preRun]);e.preRun.length;)Lt(e.preRun.shift());Ga(st)}function xt(){mt=!0,Ga(lt)}function Lr(){if(e.postRun)for(typeof e.postRun==\"function\"&&(e.postRun=[e.postRun]);e.postRun.length;)nr(e.postRun.shift());Ga(Ge)}function Lt(K){st.unshift(K)}function to(K){lt.unshift(K)}function nr(K){Ge.unshift(K)}var _t=0,sr=null,ar=null;function ro(K){_t++,e.monitorRunDependencies&&e.monitorRunDependencies(_t)}function oo(K){if(_t--,e.monitorRunDependencies&&e.monitorRunDependencies(_t),_t==0&&(sr!==null&&(clearInterval(sr),sr=null),ar)){var ae=ar;ar=null,ae()}}function hr(K){e.onAbort&&e.onAbort(K),K=\"Aborted(\"+K+\")\",E(K),M=!0,L=1,K+=\". Build with -sASSERTIONS for more info.\";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Wa=\"data:application/octet-stream;base64,\";function Bo(K){return K.startsWith(Wa)}function Ks(K){return K.startsWith(\"file://\")}var Yt;Yt=\"tfjs-backend-wasm.wasm\",Bo(Yt)||(Yt=f(Yt));function Ua(K){try{if(K==Yt&&D)return new Uint8Array(D);if(x)return x(K);throw\"both async and sync fetching of the wasm failed\"}catch(ae){hr(ae)}}function sl(){if(!D&&(c||l)){if(typeof fetch==\"function\"&&!Ks(Yt))return fetch(Yt,{credentials:\"same-origin\"}).then(function(K){if(!K.ok)throw\"failed to load wasm binary file at '\"+Yt+\"'\";return K.arrayBuffer()}).catch(function(){return Ua(Yt)});if(g)return new Promise(function(K,ae){g(Yt,function($e){K(new Uint8Array($e))},ae)})}return Promise.resolve().then(function(){return Ua(Yt)})}function al(){var K={env:il,wasi_snapshot_preview1:il};function ae(Qe,Ke){var Gt=Qe.exports;e.asm=Gt,O=e.asm.memory,ve(O.buffer),Pe=e.asm.__indirect_function_table,to(e.asm.__wasm_call_ctors),oo(\"wasm-instantiate\")}ro(\"wasm-instantiate\");function $e(Qe){ae(Qe.instance)}function at(Qe){return sl().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){E(\"failed to asynchronously prepare wasm: \"+Ke),hr(Ke)})}function $t(){return!D&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Bo(Yt)&&!Ks(Yt)&&!m&&typeof fetch==\"function\"?fetch(Yt,{credentials:\"same-origin\"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then($e,function(Gt){return E(\"wasm streaming compile failed: \"+Gt),E(\"falling back to ArrayBuffer instantiation\"),at($e)})}):at($e)}if(e.instantiateWasm)try{var Et=e.instantiateWasm(K,ae);return Et}catch(Qe){E(\"Module.instantiateWasm callback failed with error: \"+Qe),n(Qe)}return $t().catch(n),{}}var l0,Ti;function Bp(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ga(K){for(;K.length>0;)K.shift()(e)}function Cy(){hr(\"\")}function wm(){return 4294901760}function $u(){return wm()}function wy(K,ae,$e){ne.copyWithin(K>>>0,ae>>>0,ae+$e>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function zp(K){var ae=ne.length;K=K>>>0;var $e=wm();if(K>$e)return!1;let at=(Gt,no)=>Gt+(no-Gt%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($e,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var gr={varargs:void 0,get:function(){gr.varargs+=4;var K=ie[gr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,$e,at,$t){return 70}var Iy=[null,[],[]];function m0(K,ae){var $e=Iy[K];ae===0||ae===10?((K===1?_:E)(U($e,0)),$e.length=0):$e.push(ae)}function d0(K,ae,$e,at){for(var $t=0,Et=0;Et<$e;Et++){var Qe=le[ae>>>2],Ke=le[ae+4>>>2];ae+=8;for(var Gt=0;Gt>>0]);$t+=Ke}return le[at>>>2]=$t,0}function vm(K){var ae=e[\"_\"+K];return ae}function Eu(K,ae){re.set(K,ae>>>0)}function vy(K,ae,$e,at,$t){var Et={string:br=>{var $i=0;if(br!=null&&br!==0){var Vm=(br.length<<2)+1;$i=ml(Vm),Y(br,$i,Vm)}return $i},array:br=>{var $i=ml(br.length);return Eu(br,$i),$i}};function Qe(br){return ae===\"string\"?j(br):ae===\"boolean\"?!!br:br}var Ke=vm(K),Gt=[],no=0;if(at)for(var Ha=0;HaQe===\"number\"||Qe===\"boolean\"),Et=ae!==\"string\";return Et&&$t&&!at?vm(K):function(){return vy(K,ae,$e,arguments,at)}}var il={abort:Cy,emscripten_get_heap_max:$u,emscripten_memcpy_big:wy,emscripten_resize_heap:zp,fd_close:Im,fd_seek:Sy,fd_write:d0},Ny=al(),km=e.___wasm_call_ctors=function(){return(km=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},Nm=e._init=function(){return(Nm=e._init=e.asm.init).apply(null,arguments)},Ty=e._init_with_threads_count=function(){return(Ty=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},Tm=e._get_threads_count=function(){return(Tm=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},_y=e._register_tensor=function(){return(_y=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},Me=e._dispose_data=function(){return(Me=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},ul=e._dispose=function(){return(ul=e._dispose=e.asm.dispose).apply(null,arguments)},$y=e._Abs=function(){return($y=e._Abs=e.asm.Abs).apply(null,arguments)},_m=e._Acos=function(){return(_m=e._Acos=e.asm.Acos).apply(null,arguments)},Vp=e._Acosh=function(){return(Vp=e._Acosh=e.asm.Acosh).apply(null,arguments)},Ey=e._Add=function(){return(Ey=e._Add=e.asm.Add).apply(null,arguments)},Ry=e._AddN=function(){return(Ry=e._AddN=e.asm.AddN).apply(null,arguments)},Dy=e._All=function(){return(Dy=e._All=e.asm.All).apply(null,arguments)},Ay=e._Any=function(){return(Ay=e._Any=e.asm.Any).apply(null,arguments)},Fy=e._ArgMax=function(){return(Fy=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},$m=e._ArgMin=function(){return($m=e._ArgMin=e.asm.ArgMin).apply(null,arguments)},Em=e._Asin=function(){return(Em=e._Asin=e.asm.Asin).apply(null,arguments)},Py=e._Asinh=function(){return(Py=e._Asinh=e.asm.Asinh).apply(null,arguments)},Oy=e._Atan=function(){return(Oy=e._Atan=e.asm.Atan).apply(null,arguments)},My=e._Atan2=function(){return(My=e._Atan2=e.asm.Atan2).apply(null,arguments)},pl=e._Atanh=function(){return(pl=e._Atanh=e.asm.Atanh).apply(null,arguments)},Ly=e._AvgPool=function(){return(Ly=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},By=e._AvgPool3D=function(){return(By=e._AvgPool3D=e.asm.AvgPool3D).apply(null,arguments)},zy=e._AvgPool3DGrad=function(){return(zy=e._AvgPool3DGrad=e.asm.AvgPool3DGrad).apply(null,arguments)},Ru=e._AvgPoolGrad=function(){return(Ru=e._AvgPoolGrad=e.asm.AvgPoolGrad).apply(null,arguments)},Vy=e._BatchMatMul=function(){return(Vy=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},Wy=e._Bincount=function(){return(Wy=e._Bincount=e.asm.Bincount).apply(null,arguments)},Rm=e._BitwiseAnd=function(){return(Rm=e._BitwiseAnd=e.asm.BitwiseAnd).apply(null,arguments)},Uy=e._Ceil=function(){return(Uy=e._Ceil=e.asm.Ceil).apply(null,arguments)},cl=e._ClipByValue=function(){return(cl=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},Gy=e._Conv2D=function(){return(Gy=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},Hy=e._Conv2DBackpropInput=function(){return(Hy=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=e._Conv3D=function(){return(Ky=e._Conv3D=e.asm.Conv3D).apply(null,arguments)},_i=e._Conv3DBackpropFilterV2=function(){return(_i=e._Conv3DBackpropFilterV2=e.asm.Conv3DBackpropFilterV2).apply(null,arguments)},ll=e._Conv3DBackpropInputV2=function(){return(ll=e._Conv3DBackpropInputV2=e.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=e._Cos=function(){return(qy=e._Cos=e.asm.Cos).apply(null,arguments)},jy=e._Cosh=function(){return(jy=e._Cosh=e.asm.Cosh).apply(null,arguments)},Xy=e._CropAndResize=function(){return(Xy=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},Yy=e._Cumprod=function(){return(Yy=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},Dm=e._Cumsum=function(){return(Dm=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},Am=e._DenseBincount=function(){return(Am=e._DenseBincount=e.asm.DenseBincount).apply(null,arguments)},Qy=e._DepthToSpace=function(){return(Qy=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},Zy=e._DepthwiseConv2dNative=function(){return(Zy=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=e._Diag=function(){return(Fm=e._Diag=e.asm.Diag).apply(null,arguments)},Pm=e._Dilation2D=function(){return(Pm=e._Dilation2D=e.asm.Dilation2D).apply(null,arguments)},Jy=e._Dilation2DBackpropFilter=function(){return(Jy=e._Dilation2DBackpropFilter=e.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=e._Dilation2DBackpropInput=function(){return(eb=e._Dilation2DBackpropInput=e.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=e._Elu=function(){return(tb=e._Elu=e.asm.Elu).apply(null,arguments)},rb=e._EluGrad=function(){return(rb=e._EluGrad=e.asm.EluGrad).apply(null,arguments)},Om=e._Equal=function(){return(Om=e._Equal=e.asm.Equal).apply(null,arguments)},f0=e._Erf=function(){return(f0=e._Erf=e.asm.Erf).apply(null,arguments)},ob=e._Exp=function(){return(ob=e._Exp=e.asm.Exp).apply(null,arguments)},nb=e._Expm1=function(){return(nb=e._Expm1=e.asm.Expm1).apply(null,arguments)},sb=e._FlipLeftRight=function(){return(sb=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},ab=e._Floor=function(){return(ab=e._Floor=e.asm.Floor).apply(null,arguments)},ib=e._FloorDiv=function(){return(ib=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},ub=e._FusedBatchNorm=function(){return(ub=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},pb=e._FusedConv2D=function(){return(pb=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},cb=e._FusedDepthwiseConv2D=function(){return(cb=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=e._Gather=function(){return(lb=e._Gather=e.asm.Gather).apply(null,arguments)},mb=e._GatherNd=function(){return(mb=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},db=e._Greater=function(){return(db=e._Greater=e.asm.Greater).apply(null,arguments)},fb=e._GreaterEqual=function(){return(fb=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},hb=e._IsFinite=function(){return(hb=e._IsFinite=e.asm.IsFinite).apply(null,arguments)},gb=e._IsInf=function(){return(gb=e._IsInf=e.asm.IsInf).apply(null,arguments)},xb=e._IsNan=function(){return(xb=e._IsNan=e.asm.IsNan).apply(null,arguments)},yb=e._LRN=function(){return(yb=e._LRN=e.asm.LRN).apply(null,arguments)},bb=e._LRNGrad=function(){return(bb=e._LRNGrad=e.asm.LRNGrad).apply(null,arguments)},Cb=e._LeakyRelu=function(){return(Cb=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},wb=e._Less=function(){return(wb=e._Less=e.asm.Less).apply(null,arguments)},Sb=e._LessEqual=function(){return(Sb=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},Ib=e._LinSpace=function(){return(Ib=e._LinSpace=e.asm.LinSpace).apply(null,arguments)},vb=e._Log=function(){return(vb=e._Log=e.asm.Log).apply(null,arguments)},kb=e._Log1p=function(){return(kb=e._Log1p=e.asm.Log1p).apply(null,arguments)},Nb=e._LogicalAnd=function(){return(Nb=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},Tb=e._LogicalNot=function(){return(Tb=e._LogicalNot=e.asm.LogicalNot).apply(null,arguments)},_b=e._LogicalOr=function(){return(_b=e._LogicalOr=e.asm.LogicalOr).apply(null,arguments)},$b=e._LogicalXor=function(){return($b=e._LogicalXor=e.asm.LogicalXor).apply(null,arguments)},Eb=e._Max=function(){return(Eb=e._Max=e.asm.Max).apply(null,arguments)},Rb=e._MaxPool=function(){return(Rb=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},Db=e._MaxPool3D=function(){return(Db=e._MaxPool3D=e.asm.MaxPool3D).apply(null,arguments)},Ab=e._MaxPool3DGrad=function(){return(Ab=e._MaxPool3DGrad=e.asm.MaxPool3DGrad).apply(null,arguments)},Fb=e._MaxPoolGrad=function(){return(Fb=e._MaxPoolGrad=e.asm.MaxPoolGrad).apply(null,arguments)},Pb=e._MaxPoolWithArgmax=function(){return(Pb=e._MaxPoolWithArgmax=e.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=e._Maximum=function(){return(Ob=e._Maximum=e.asm.Maximum).apply(null,arguments)},Mb=e._Mean=function(){return(Mb=e._Mean=e.asm.Mean).apply(null,arguments)},Lb=e._Min=function(){return(Lb=e._Min=e.asm.Min).apply(null,arguments)},Bb=e._Minimum=function(){return(Bb=e._Minimum=e.asm.Minimum).apply(null,arguments)},zb=e._MirrorPad=function(){return(zb=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},Vb=e._Mod=function(){return(Vb=e._Mod=e.asm.Mod).apply(null,arguments)},Wb=e._Multinomial=function(){return(Wb=e._Multinomial=e.asm.Multinomial).apply(null,arguments)},Ub=e._Multiply=function(){return(Ub=e._Multiply=e.asm.Multiply).apply(null,arguments)},Gb=e._Neg=function(){return(Gb=e._Neg=e.asm.Neg).apply(null,arguments)},Hb=e._NonMaxSuppressionV3=function(){return(Hb=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=e._NonMaxSuppressionV4=function(){return(Kb=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=e._NonMaxSuppressionV5=function(){return(qb=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=e._NotEqual=function(){return(jb=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},Xb=e._OneHot=function(){return(Xb=e._OneHot=e.asm.OneHot).apply(null,arguments)},Yb=e._PadV2=function(){return(Yb=e._PadV2=e.asm.PadV2).apply(null,arguments)},Qb=e._Pow=function(){return(Qb=e._Pow=e.asm.Pow).apply(null,arguments)},Zb=e._Prelu=function(){return(Zb=e._Prelu=e.asm.Prelu).apply(null,arguments)},Jb=e._Prod=function(){return(Jb=e._Prod=e.asm.Prod).apply(null,arguments)},eC=e._RealDiv=function(){return(eC=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},tC=e._Reciprocal=function(){return(tC=e._Reciprocal=e.asm.Reciprocal).apply(null,arguments)},rC=e._Relu=function(){return(rC=e._Relu=e.asm.Relu).apply(null,arguments)},oC=e._Relu6=function(){return(oC=e._Relu6=e.asm.Relu6).apply(null,arguments)},nC=e._ResizeBilinear=function(){return(nC=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},sC=e._ResizeBilinearGrad=function(){return(sC=e._ResizeBilinearGrad=e.asm.ResizeBilinearGrad).apply(null,arguments)},aC=e._ResizeNearestNeighbor=function(){return(aC=e._ResizeNearestNeighbor=e.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=e._ResizeNearestNeighborGrad=function(){return(iC=e._ResizeNearestNeighborGrad=e.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=e._Reverse=function(){return(uC=e._Reverse=e.asm.Reverse).apply(null,arguments)},pC=e._RotateWithOffset=function(){return(pC=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},cC=e._Round=function(){return(cC=e._Round=e.asm.Round).apply(null,arguments)},lC=e._Rsqrt=function(){return(lC=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},mC=e._ScatterNd=function(){return(mC=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},dC=e._SearchSorted=function(){return(dC=e._SearchSorted=e.asm.SearchSorted).apply(null,arguments)},fC=e._SelectV2=function(){return(fC=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},hC=e._Selu=function(){return(hC=e._Selu=e.asm.Selu).apply(null,arguments)},gC=e._Sigmoid=function(){return(gC=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},xC=e._Sign=function(){return(xC=e._Sign=e.asm.Sign).apply(null,arguments)},yC=e._Sin=function(){return(yC=e._Sin=e.asm.Sin).apply(null,arguments)},bC=e._Sinh=function(){return(bC=e._Sinh=e.asm.Sinh).apply(null,arguments)},CC=e._Softmax=function(){return(CC=e._Softmax=e.asm.Softmax).apply(null,arguments)},wC=e._Softplus=function(){return(wC=e._Softplus=e.asm.Softplus).apply(null,arguments)},SC=e._SparseFillEmptyRows=function(){return(SC=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},IC=e._SparseReshape=function(){return(IC=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},vC=e._SparseSegmentReduction=function(){return(vC=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},kC=e._SparseToDense=function(){return(kC=e._SparseToDense=e.asm.SparseToDense).apply(null,arguments)},NC=e._Sqrt=function(){return(NC=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},TC=e._Square=function(){return(TC=e._Square=e.asm.Square).apply(null,arguments)},_C=e._SquaredDifference=function(){return(_C=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},$C=e._Step=function(){return($C=e._Step=e.asm.Step).apply(null,arguments)},EC=e._StridedSlice=function(){return(EC=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},RC=e._Sub=function(){return(RC=e._Sub=e.asm.Sub).apply(null,arguments)},DC=e._Sum=function(){return(DC=e._Sum=e.asm.Sum).apply(null,arguments)},AC=e._Tan=function(){return(AC=e._Tan=e.asm.Tan).apply(null,arguments)},FC=e._Tanh=function(){return(FC=e._Tanh=e.asm.Tanh).apply(null,arguments)},PC=e._TensorScatterUpdate=function(){return(PC=e._TensorScatterUpdate=e.asm.TensorScatterUpdate).apply(null,arguments)},OC=e._Tile=function(){return(OC=e._Tile=e.asm.Tile).apply(null,arguments)},MC=e._TopK=function(){return(MC=e._TopK=e.asm.TopK).apply(null,arguments)},LC=e._Transform=function(){return(LC=e._Transform=e.asm.Transform).apply(null,arguments)},BC=e._Transpose=function(){return(BC=e._Transpose=e.asm.Transpose).apply(null,arguments)},zC=e.__FusedMatMul=function(){return(zC=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},VC=e._malloc=function(){return(VC=e._malloc=e.asm.malloc).apply(null,arguments)},WC=e._free=function(){return(WC=e._free=e.asm.free).apply(null,arguments)},UC=e.___errno_location=function(){return(UC=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},Mm=e.stackSave=function(){return(Mm=e.stackSave=e.asm.stackSave).apply(null,arguments)},Lm=e.stackRestore=function(){return(Lm=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},ml=e.stackAlloc=function(){return(ml=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},GC=e.dynCall_iijjiiii=function(){return(GC=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},HC=e.dynCall_jiji=function(){return(HC=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=ky;var Wp;ar=function K(){Wp||Bm(),Wp||(ar=K)};function Bm(K){if(K=K||i,_t>0||(gt(),_t>0))return;function ae(){Wp||(Wp=!0,e.calledRun=!0,!M&&(xt(),o(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),Lr()))}e.setStatus?(e.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){e.setStatus(\"\")},1),ae()},1)):ae()}if(e.preInit)for(typeof e.preInit==\"function\"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();Bm();var Up;s&&(Up={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 Gp;if(typeof t!=\"undefined\")Gp=t;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Gp=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Up){var KC=Gp._dispose;Gp._dispose=function(){KC(),Up.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Up.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return t.ready}})();typeof Ug==\"object\"&&typeof Gv==\"object\"?Gv.exports=Uv:typeof define==\"function\"&&define.amd?define([],function(){return Uv}):typeof Ug==\"object\"&&(Ug.WasmBackendModule=Uv)});var zo=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},ao=class{refCount(t){return zr(\"refCount\")}incRef(t){return zr(\"incRef\")}timerAvailable(){return!0}time(t){return zr(\"time\")}read(t){return zr(\"read\")}readSync(t){return zr(\"readSync\")}readToGPU(t,e){return zr(\"readToGPU\")}numDataIds(){return zr(\"numDataIds\")}disposeData(t,e){return zr(\"disposeData\")}write(t,e,o){return zr(\"write\")}move(t,e,o,n,s){return zr(\"move\")}createTensorFromGPUData(t,e,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 I0(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,jm(r,t,e)}function TG(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,o=0;for(;e>0;)o=Math.random()*e|0,e--,jm(r,e,o),jm(t,e,o)}function qp(r,t,e){return Math.max(r,Math.min(t,e))}function _G(r){return r%2===0?r:r+1}function jm(r,t,e){let o=r[t];r[t]=r[e],r[e]=o}function $G(r){let t=0;for(let e=0;ee+` Shapes ${r} and ${t} must match`)}function io(r){$(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function He(r){if(r.length===0)return 1;let t=r[0];for(let e=1;e0,e,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=t(a);if(e!=null&&a>=e){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function MG(r,t){let e=1,o=-1;for(let s=0;s=0)e*=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(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let n=r.slice();return n[o]=t/e,n}function Ei(r,t){let e=t.length;return r=r==null?t.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-e&&o`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),$(r.every(o=>qa(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?e+o:o)}function JC(r,t){let e=[],o=[],n=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||n?null:Ei(t,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(e.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(e.push(r[i]),o.push(i))}return{newShape:e,keptDims:o}}function ew(r,t){return Xm(r,t)}function Xm(r,t){let e=null;if(r==null||r===\"float32\")e=new Float32Array(t);else if(r===\"int32\")e=new Int32Array(t);else if(r===\"bool\")e=new Uint8Array(t);else if(r===\"string\")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function tw(r,t){for(let e=0;et+=e.length),t}function Vo(r){return typeof r==\"string\"||r instanceof String}function v0(r){return typeof r==\"boolean\"}function k0(r){return typeof r==\"number\"}function Ri(r){return Array.isArray(r)?Ri(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":k0(r)?\"float32\":Vo(r)?\"string\":v0(r)?\"bool\":\"float32\"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Xp(r,t){for(let e=t;e=0;--o)e[o]=e[o+1]*r[o+1];return e}function N0(r,t,e,o=!1){let n=new Array;if(t.length===1){let s=t[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(e?2:1);if(o===0)return[];if(o!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?\" for a complex tensor\":\"\"}.`);return N0(0,r,t,e)}function BG(r,t){if(Array.isArray(r))return r;if(t===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(t===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(t===\"bool\"||t===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${t}`)}function fl(r,t){let e=Yp(r,t);for(let o=0;oo*n,1);if(t==null||t===\"float32\")return Du(r,new Float32Array(e));if(t===\"int32\")return Du(r,new Int32Array(e));if(t===\"bool\")return Du(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function wt(r){r.forEach(t=>{$(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function VG(r,t,e){if(t===0)return 0;if(t===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=KG(n,s)})}};function GG(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...o)=>(HG(t,o[0],o[1]),o.join(\"=\"))),t}function HG(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||\"\")}function KG(r,t){let e=t.toLowerCase();return e===\"true\"||e===\"false\"?e===\"true\":`${+e}`===e?+e:t}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 qG(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function gl(r,t){let e=qG();if(e.has(r))return e.get(r);{let o=t();return e.set(r,o),e.get(r)}}var Xs=\"Abs\",Wo=\"Acos\",Uo=\"Acosh\",uo=\"Add\",Go=\"AddN\",Ho=\"All\",Ko=\"Any\",Ys=\"ArgMax\",Qs=\"ArgMin\",qo=\"Asin\",jo=\"Asinh\",Xo=\"Atan\",Yo=\"Atanh\",Qo=\"Atan2\",Zo=\"AvgPool\",Di=\"AvgPoolGrad\",Zs=\"AvgPool3D\",Ai=\"AvgPool3DGrad\",Jo=\"BatchMatMul\",Js=\"BatchToSpaceND\",en=\"Bincount\",ja=\"BitwiseAnd\",Bce=\"BroadcastTo\",ea=\"BroadcastArgs\",bo=\"Cast\",tn=\"Ceil\",Co=\"ClipByValue\",Fi=\"Complex\",Pi=\"ComplexAbs\",ta=\"Concat\",rn=\"Conv2D\",Oi=\"Conv2DBackpropFilter\",on=\"Conv2DBackpropInput\",nn=\"Conv3D\",Xa=\"Conv3DBackpropFilterV2\",sn=\"Conv3DBackpropInputV2\",an=\"Cos\",un=\"Cosh\",pn=\"Cumprod\",cn=\"Cumsum\",ln=\"CropAndResize\",ra=\"DenseBincount\",mn=\"DepthToSpace\",dn=\"DepthwiseConv2dNative\",Mi=\"DepthwiseConv2dNativeBackpropFilter\",Li=\"DepthwiseConv2dNativeBackpropInput\",oa=\"Diag\",fn=\"Dilation2D\",Bi=\"Dilation2DBackpropInput\",zi=\"Dilation2DBackpropFilter\",Pu=\"Draw\",hn=\"RealDiv\",Vi=\"Einsum\",gn=\"Elu\",Ya=\"EluGrad\",xn=\"Erf\",yn=\"Equal\",bn=\"Exp\",na=\"ExpandDims\",Cn=\"Expm1\",Wi=\"FFT\",sa=\"Fill\",wn=\"FlipLeftRight\",Sn=\"Floor\",In=\"FloorDiv\",vn=\"FusedBatchNorm\",aa=\"GatherV2\",kn=\"GatherNd\",Nn=\"Greater\",Tn=\"GreaterEqual\",wo=\"Identity\",Ui=\"IFFT\",Gi=\"Imag\",_n=\"IsFinite\",$n=\"IsInf\",En=\"IsNan\",Rn=\"LeakyRelu\",Dn=\"Less\",An=\"LessEqual\",Fn=\"LinSpace\",Pn=\"Log\",On=\"Log1p\",Mn=\"LogicalAnd\",Ln=\"LogicalNot\",Bn=\"LogicalOr\",$0=\"LogicalXor\",zce=\"LogSoftmax\",Vce=\"LowerBound\",zn=\"LRN\",Qa=\"LRNGrad\",Wce=\"MatrixBandPart\",Vn=\"Max\",Wn=\"Maximum\",Un=\"MaxPool\",Hi=\"MaxPoolGrad\",ia=\"MaxPool3D\",Ki=\"MaxPool3DGrad\",ua=\"MaxPoolWithArgmax\",Gn=\"Mean\",Hn=\"Min\",Kn=\"Minimum\",qn=\"MirrorPad\",jn=\"Mod\",Xn=\"Multinomial\",Yn=\"Multiply\",pa=\"Neg\",Qn=\"NotEqual\",Zn=\"NonMaxSuppressionV3\",Za=\"NonMaxSuppressionV4\",Jn=\"NonMaxSuppressionV5\",ca=\"OnesLike\",es=\"OneHot\",la=\"Pack\",ts=\"PadV2\",Uce=\"Pool\",rs=\"Pow\",os=\"Prelu\",ns=\"Prod\",Qp=\"RaggedGather\",Zp=\"RaggedRange\",Jp=\"RaggedTensorToTensor\",ma=\"Range\",qi=\"Real\",ss=\"Reciprocal\",as=\"Relu\",da=\"Reshape\",is=\"ResizeNearestNeighbor\",Ja=\"ResizeNearestNeighborGrad\",us=\"ResizeBilinear\",ei=\"ResizeBilinearGrad\",ps=\"Relu6\",cs=\"Reverse\",ls=\"Round\",ms=\"Rsqrt\",ds=\"ScatterNd\",fs=\"TensorScatterUpdate\",hs=\"SearchSorted\",fa=\"Select\",gs=\"Selu\",ha=\"Slice\",xs=\"Sin\",ys=\"Sinh\",bs=\"Sign\",Cs=\"Sigmoid\",ws=\"Softplus\",Ss=\"Sqrt\",Is=\"Sum\",ga=\"SpaceToBatchND\",xa=\"SplitV\",vs=\"Softmax\",ji=\"SparseFillEmptyRows\",ti=\"SparseReshape\",ya=\"SparseSegmentMean\",ba=\"SparseSegmentSum\",ks=\"SparseToDense\",Ns=\"SquaredDifference\",Xi=\"Square\",Ou=\"StaticRegexReplace\",Ts=\"StridedSlice\",Ca=\"StringNGrams\",Yi=\"StringSplit\",Qi=\"StringToHashBucketFast\",_s=\"Sub\",$s=\"Tan\",Es=\"Tanh\",po=\"Tile\",Rs=\"TopK\",Ds=\"Transform\",co=\"Transpose\",Zi=\"Unique\",wa=\"Unpack\",Ji=\"UnsortedSegmentSum\",Gce=\"UpperBound\",Sa=\"ZerosLike\",So=\"Step\",Mu=\"FromPixels\",As=\"RotateWithOffset\",Io=\"_FusedMatMul\",vo=\"FusedConv2D\",ko=\"FusedDepthwiseConv2D\";function Ia(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function jG(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var ec=gl(\"kernelRegistry\",()=>new Map),xl=gl(\"gradRegistry\",()=>new Map);function tc(r,t){let e=uw(r,t);return ec.get(e)}function iw(r){return xl.get(r)}function Ym(r){let t=ec.entries(),e=[];for(;;){let{done:o,value:n}=t.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&e.push(a)}return e}function ri(r){let{kernelName:t,backendName:e}=r,o=uw(t,e);ec.has(o)&&Ia(`The kernel '${t}' for backend '${e}' is already registered`),ec.set(o,r)}function Xce(r){let{kernelName:t}=r;xl.has(t)&&A().getBool(\"DEBUG\")&&Ia(`Overriding the gradient for '${t}'`),xl.set(t,r)}function Yce(r,t){let e=uw(r,t);if(!ec.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);ec.delete(e)}function Qce(r){if(!xl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);xl.delete(r)}function Zce(r,t){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:t});ri(n)})}function uw(r,t){return`${t}_${r}`}var y={};qe(y,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>ZC,assert:()=>$,assertNonNegativeIntegerDimensions:()=>wt,assertNonNull:()=>io,assertShapesMatch:()=>yt,bytesFromStringArray:()=>ow,bytesPerElement:()=>jp,checkConversionForErrors:()=>tw,clamp:()=>qp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>BG,createScalarValue:()=>t4,createShuffledIndices:()=>PG,decodeString:()=>sc,distSquared:()=>RG,encodeString:()=>tu,fetch:()=>o4,fingerPrint64:()=>e4,flatten:()=>Ps,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>LG,hexToLong:()=>yl,indexToLoc:()=>WG,inferDtype:()=>Ri,inferFromImplicitShape:()=>MG,isBoolean:()=>v0,isFunction:()=>qs,isInt:()=>qa,isNumber:()=>k0,isPromise:()=>Fu,isScalarShape:()=>DG,isString:()=>Vo,isTypedArray:()=>Ot,isValidDtype:()=>rw,locToIndex:()=>VG,makeOnesTypedArray:()=>fl,makeZerosNestedTypedArray:()=>zG,makeZerosTypedArray:()=>Yp,nearestDivisor:()=>Xp,nearestLargerEven:()=>_G,now:()=>Wu,parseAxisParam:()=>Ei,randUniform:()=>EG,repeatedTry:()=>OG,rightPad:()=>Au,shuffle:()=>I0,shuffleCombo:()=>TG,sizeFromShape:()=>He,sizeToSquarishShape:()=>FG,squeezeShape:()=>JC,sum:()=>$G,swap:()=>jm,tanh:()=>AG,toNestedArray:()=>Du,toTypedArray:()=>nc});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=Kp(V0());var Vu=mw.default||mw;function yl(r){return Vu.fromString(r,!0,16)}var U0=yl(\"c3a5c85c97cb3127\"),zu=yl(\"b492b66fbe98f273\"),wr=yl(\"9ae16a3b2f90404f\");function lw(r){return r.xor(r.shru(47))}function G0(r,t,e){let o=r.slice(t,t+e);return Vu.fromBytes(Array.from(o),!0,!0)}function St(r,t){return G0(r,t,8)}function W0(r,t){return G0(r,t,4)}function Qt(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function eu(r,t,e=yl(\"9ddfea08eb382d69\")){let o=r.xor(t).mul(e);o=o.xor(o.shru(47));let n=t.xor(o).mul(e);return n=n.xor(n.shru(47)),n=n.mul(e),n}function YG(r,t,e,o,n,s){n=n.add(r),s=Qt(s.add(n).add(o),21);let a=n;return n=n.add(t),n=n.add(e),s=s.add(Qt(n,44)),[n.add(o),s.add(a)]}function Jm(r,t,e,o){return YG(St(r,t),St(r,t+8),St(r,t+16),St(r,t+24),e,o)}function QG(r,t=r.length){if(t>=8){let e=wr.add(t*2),o=St(r,0).add(wr),n=St(r,t-8),s=Qt(n,37).mul(e).add(o),a=Qt(o,25).add(n).mul(e);return eu(s,a,e)}if(t>=4){let e=wr.add(t*2),o=W0(r,0);return eu(o.shl(3).add(t),W0(r,t-4),e)}if(t>0){let e=r[0],o=r[t>>1],n=r[t-1],s=e+(o<<8),a=t+(n<<2);return lw(wr.mul(s).xor(U0.mul(a))).mul(wr)}return wr}function ZG(r,t=r.length){let e=wr.add(t*2),o=St(r,0).mul(zu),n=St(r,8),s=St(r,t-8).mul(e),a=St(r,t-16).mul(wr);return eu(Qt(o.add(n),43).add(Qt(s,30)).add(a),o.add(Qt(n.add(wr),18)).add(s),e)}function JG(r,t=r.length){let e=wr.add(t*2),o=St(r,0).mul(wr),n=St(r,8),s=St(r,t-8).mul(e),a=St(r,t-16).mul(wr),i=Qt(o.add(n),43).add(Qt(s,30)).add(a),p=eu(i,o.add(Qt(n.add(wr),18)).add(s),e),u=St(r,16).mul(e),c=St(r,24),l=i.add(St(r,t-32)).mul(e),m=p.add(St(r,t-24)).mul(e);return eu(Qt(u.add(c),43).add(Qt(l,30)).add(m),u.add(Qt(c.add(o),18)).add(l),e)}function e4(r,t=r.length){let e=Vu.fromNumber(81,!0);if(t<=32)return t<=16?QG(r,t):ZG(r,t);if(t<=64)return JG(r,t);let o=e,n=e.mul(zu).add(113),s=lw(n.mul(wr).add(113)).mul(wr),a=[Vu.UZERO,Vu.UZERO],i=[Vu.UZERO,Vu.UZERO];o=o.mul(wr).add(St(r,0));let p=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do o=Qt(o.add(n).add(a[0]).add(St(r,p+8)),37).mul(zu),n=Qt(n.add(a[1]).add(St(r,p+48)),42).mul(zu),o=o.xor(i[1]),n=n.add(a[0]).add(St(r,p+40)),s=Qt(s.add(i[0]),33).mul(zu),a=Jm(r,p,a[1].mul(zu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(St(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=zu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(t-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Qt(o.add(n).add(a[0]).add(St(r,p+8)),37).mul(l),n=Qt(n.add(a[1]).add(St(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(St(r,p+40))),s=Qt(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(St(r,p+16))),[s,o]=[o,s],eu(eu(a[0],i[0],l).add(lw(n).mul(U0)).add(s),eu(a[1],i[1],l).add(o),l)}function t4(r,t){return t===\"string\"?tu(r):nc([r],t)}function r4(r,t){return r instanceof Float32Array&&t===\"float32\"||r instanceof Int32Array&&t===\"int32\"||r instanceof Uint8Array&&t===\"bool\"}function nc(r,t){if(t===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Ps(r)),A().getBool(\"DEBUG\")&&tw(r,t),r4(r,t))return r;if(t==null||t===\"float32\"||t===\"complex64\")return new Float32Array(r);if(t===\"int32\")return new Int32Array(r);if(t===\"bool\"){let e=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Wu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Wu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{n4(l,c.dtype,t)})}return{kernelName:t,outputs:n,inputs:e,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(t){let{kernelName:e,outputs:o,timeMs:n,inputs:s,extraInfo:a}=t;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(e,i,p[0],p[1],s,p[2])})})}};function n4(r,t,e){if(t!==\"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 H0(r,t,e){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[e.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=t[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=e(()=>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(!Cr(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 q0=20,bl=3,fw=7;function j0(r,t,e,o){let n=js(t),s=s4(r,t,e,n),a=t.length,i=td(r,t,e,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${e}`),p.push(` rank: ${a}`),p.push(` shape: [${t}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function s4(r,t,e,o){let n=He(t),s=o[o.length-1],a=new Array(s).fill(0),i=t.length,p=e===\"complex64\"?wl(r):r;if(i>1)for(let u=0;uq0){let g=bl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-bl)*a,i*a));return e===\"complex64\"&&(x=wl(x),b=wl(b)),[\"[\"+x.map((C,S)=>Cl(C,n[S],e)).join(\", \")+\", ..., \"+b.map((C,S)=>Cl(C,n[i-bl+S],e)).join(\", \")+\"]\"]}return[\"[\"+(e===\"complex64\"?wl(r):Array.from(r)).map((g,x)=>Cl(g,n[x],e)).join(\", \")+\"]\"]}let u=t.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>q0){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(e===\"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(e,this.size),this.strides=js(t)}set(t,...e){e.length===0&&(e=[0]),$(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let o=this.locToIndex(e);this.values[o]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let n of t){if(n<0||n>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let o=t[t.length-1];for(let n=0;nsc(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return t}dataToGPU(t){return this.throwIfDisposed(),Os().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Os().readSync(this.dataId);if(this.dtype===\"string\")try{return t.map(e=>sc(e))}catch(e){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}return t}async bytes(){this.throwIfDisposed();let t=await Os().read(this.dataId);return this.dtype===\"string\"?t:new Uint8Array(t.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Os().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(t=!1){return ac.print(this,t)}clone(){return this.throwIfDisposed(),ac.clone(this)}toString(t=!1){let e=this.dataSync();return j0(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),ac.cast(this,t)}variable(t=!0,e,o){return this.throwIfDisposed(),Os().makeVariable(this,t,e,o)}};Object.defineProperty(ut,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function i4(){return gl(\"Tensor\",()=>ut)}i4();var oi=class extends ut{constructor(t,e,o,n){super(t.shape,t.dtype,t.dataId,n),this.trainable=e,this.name=o}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!Cr(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Os().disposeTensor(this),this.dataId=t.dataId,Os().incRef(this,null)}dispose(){Os().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(oi,Symbol.hasInstance,{value:r=>r instanceof ut&&r.assign!=null&&r.assign instanceof Function});var ek={};qe(ek,{assertTypesMatch:()=>Cw,getTensorsInContainer:()=>Sl,isTensorInList:()=>p4,makeTypesMatch:()=>Oe});var hw;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(hw||(hw={}));var gw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(gw||(gw={}));var xw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(xw||(xw={}));var yw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(yw||(yw={}));var bw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(bw||(bw={}));var u4={float32:yw,int32:gw,bool:xw,complex64:bw};function dt(r,t){if(r===\"string\"||t===\"string\"){if(r===\"string\"&&t===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${t}`)}return u4[r][t]}function ni(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,t){if(r.dtype===t.dtype)return[r,t];let e=dt(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function Cw(r,t){$(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function p4(r,t){return t.some(e=>e.id===r.id)}function Sl(r){let t=[];return J0(r,t,new Set),t}function J0(r,t,e){if(r==null)return;if(r instanceof ut){t.push(r);return}if(!c4(r))return;let o=r;for(let n in o){let s=o[n];e.has(s)||(e.add(s),J0(s,t,e))}}function c4(r){return Array.isArray(r)||typeof r==\"object\"}function ww(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(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},ru=class{constructor(t){this.ENV=t,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 t=this.getSortedBackends();for(let e=0;e{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Ym(t).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let o=e.factory();if(o&&!(o instanceof ao)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;ethis.startScope(o),()=>this.endScope(n),()=>(n=e(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(t,e,o){t();try{let n=o();return e(),n}catch(n){throw e(),n}}nextTensorId(){return ru.nextTensorId++}nextVariableId(){return ru.nextVariableId++}clone(t){let e=T.runKernel(wo,{x:t}),o={x:t},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return T.runKernel(bo,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[e],n,s,{}),e}runKernel(t,e,o){if(this.backendName==null&&this.backend,!(tc(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(t,e,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-e-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let e,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=ww(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(ww(t)){let{kernelName:f,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let x=tc(f,this.backendName);$(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}=t,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}=t,m=ww(t)?null:t.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool(\"DEBUG\")&&!this.state.profiling?e=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(d),e=d.outputs)}),n&&this.addTapeNode(u,c,e,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:e.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(t,e,o){let n=iw(t);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(e),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(e).map(u=>e[u])):i=s.map(u=>e[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(t,e,o,n){if(t==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=t;o===\"string\"&&Vo(t[0])&&(s=t.map(p=>tu(p)));let a=n.write(s,e,o),i=new ut(e,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(t,e,o,n){o=o||\"float32\";let s={dataId:t,shape:e,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(t,e){let{dataId:o,shape:n,dtype:s}=t,a=new ut(n,s,o,this.nextTensorId());return this.trackTensor(a,e),a}makeVariable(t,e=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==t.dtype&&(t=t.cast(n));let s=new oi(t,e,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(t,e){this.state.numTensors++,t.dtype===\"string\"&&this.state.numStringTensors++;let o=0;t.dtype!==\"complex64\"&&t.dtype!==\"string\"&&(o=t.size*jp(t.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:o})),t instanceof oi||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype===\"string\"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!==\"complex64\"&&t.dtype!==\"string\"){let o=t.size*jp(t.dtype);this.state.numBytes-=o}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}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 e=this.state.numBytes,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,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(t,e,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:o,saved:s},p=iw(t);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Yp(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(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let e={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=Sl(t),o=new Set(e.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(t,e,o,n=!1){if($(e.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\",t));$(s instanceof ut,()=>\"The result y returned by f() must be a tensor.\");let a=H0(this.state.activeTape,e,s);if(!n&&a.length===0&&e.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?l4(s.shape):o,K0(i,a,u=>this.tidy(u),m4);let p=e.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(t){return $(qs(t),()=>\"The f passed in customGrad(f) must be a function.\"),(...e)=>{$(e.every(i=>i instanceof ut),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};e.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=t(...e,p),$(o.value instanceof ut,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),$(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];$(c.length===e.length,()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).\"),$(c.every(m=>m instanceof ut),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.\");let l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=Wu(),o=await this.backend.time(t);return o.wallMs=Wu()-e,o}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 nd;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}};ru.nextTensorId=0;ru.nextVariableId=0;function l4(r){let t=fl(He(r),\"float32\");return T.makeTensor(t,r,\"float32\")}function Sw(){let r=aw();if(r._tfengine==null){let t=new hl(r);r._tfengine=new ru(t)}return _0(r._tfengine.ENV),Y0(()=>r._tfengine),r._tfengine}var T=Sw();function m4(r,t){let e={a:r,b:t};return T.runKernel(uo,e)}var ou={};qe(ou,{isBrowser:()=>vw,isMobile:()=>h4,mockIsMobile:()=>f4});function d4(){return typeof navigator!=\"undefined\"&&navigator!=null}var Iw;function f4(r){Iw=r}function h4(r){if(Iw!==void 0)return Iw;if(r||d4()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let t=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!t){let e=r;return e.userAgentData&&e.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 vw(){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\",()=>vw());$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 ir(r,t){let e=r;if(Ot(r))return t===\"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/(t==null?4:jp(t))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(e)||Ot(e)&&t!==\"string\";)o.push(e.length),e=e[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&rk(r,o,[]),o}function rk(r,t,e){if(e=e||[],!Array.isArray(r)&&!Ot(r)){$(t.length===0,()=>`Element arr[${e.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}$(t.length>0,()=>`Element arr[${e.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===t[0],()=>`Element arr[${e.join(\"][\")}] should have ${t[0]} elements, but has ${r.length} elements`);let o=t.slice(1);for(let n=0;n=0&&(n=o),tk(o,n,t,e),r==null||!Ot(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 '${t}' passed to '${e}' must be a Tensor or TensorLike, but got '${p}'`)}let s=ir(r,n);!Ot(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?nc(r,n):Ps(r,[],!0);return T.makeTensor(i,s,n)}function si(r,t,e,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${t}[${a}]`,e,o))}var kw=\"__op\";function N(r){let t=Object.keys(r);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 e=t[0],o=r[e];e.endsWith(\"_\")&&(e=e.substring(0,e.length-1)),e=e+kw;let n=(...s)=>{T.startScope(e);try{let a=o(...s);return Fu(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:e,configurable:!0}),n}function g4(r,t){let e=v(r,\"real\",\"complex\"),o=v(t,\"imag\",\"complex\");yt(e.shape,o.shape,`real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:e,imag:o};return T.runKernel(Fi,n)}var Er=N({complex_:g4});function Sr(r,t,e,o){if(o==null)o=Ri(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,t||e,o)}if(!Ot(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(t!=null){wt(t);let n=He(t),s=He(e);$(n===s,()=>`Based on the provided shape, [${t}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!Ot(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=o!==\"string\"?nc(r,o):Ps(r,[],!0),T.makeTensor(r,t,o)}function ur(r,t,e){let o=ir(r,e);return Sr(r,t,o,e)}var Il={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var jt=class{static join(t){return new jt(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(o=>Ot(o)?o.buffer:o),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let e=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function e(n){return t=n.end?1:0}if(e(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=x4(this.shards,e);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function x4(r,t){let e=0,o=r.length;for(;e<=o;){let n=Math.floor((o-e)/2)+e,s=t(r[n]);if(s===0)return n;s<0?o=n:e=n+1}return-1}var sd=4;async function nk(r,t){let e=[],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)+sd*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(t+=s.byteLength,e.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(t),n=0;return e.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Nw=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function ok(r){return Nw?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function sk(r){if(Nw)return Buffer.from(r).toString(\"base64\");let t=new Uint8Array(r),e=\"\";for(let o=0,n=t.length;o{let o=e<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function C4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function w4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function S4(){let r=b4(),t=C4(),e=w4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+t[i>>10];s[a]=p}return new Float32Array(n)}}var ft=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return ft.instance==null&&(ft.instance=new ft),ft.instance}static registerSaveRouter(t){ft.getInstance().saveRouters.push(t)}static registerLoadRouter(t){ft.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return ft.getHandlers(t,\"save\")}static getLoadHandlers(t,e){return ft.getHandlers(t,\"load\",e)}static getHandlers(t,e,o){let n=[];return(e===\"load\"?ft.getInstance().loadRouters:ft.getInstance().saveRouters).forEach(a=>{let i=a(t,o);i!==null&&n.push(i)}),n}},uk=r=>ft.registerSaveRouter(r),pk=r=>ft.registerLoadRouter(r),ck=r=>ft.getSaveHandlers(r),lk=(r,t)=>ft.getLoadHandlers(r,t);var $w=\"tensorflowjs\",Ew=1,Uu=\"models_store\",nu=\"model_info_store\";function mk(){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,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return t}function Rw(r){let t=r.result;t.createObjectStore(Uu,{keyPath:\"modelPath\"}),t.createObjectStore(nu,{keyPath:\"modelPath\"})}var ka=class{constructor(t){if(this.indexedDB=mk(),t==null||!t)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((o,n)=>{let s=this.indexedDB.open($w,Ew);s.onupgradeneeded=()=>Rw(s),s.onsuccess=()=>{let a=s.result;if(e==null){let i=a.transaction(Uu,\"readonly\"),u=i.objectStore(Uu).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{e.weightData=jt.join(e.weightData);let i=va(e),p=a.transaction(nu,\"readwrite\"),u=p.objectStore(nu),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Uu,\"readwrite\");let m=l.objectStore(Uu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(nu);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 dk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?I4(r.slice(ka.URL_SCHEME.length)):null;ft.registerSaveRouter(dk);ft.registerLoadRouter(dk);function I4(r){return new ka(r)}function v4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var pd=class{constructor(){this.indexedDB=mk()}async listModels(){return new Promise((t,e)=>{let o=this.indexedDB.open($w,Ew);o.onupgradeneeded=()=>Rw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(nu,\"readonly\"),i=s.objectStore(nu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;t(p)},i.onerror=p=>(n.close(),e(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>e(o.error)})}async removeModel(t){return t=v4(t),new Promise((e,o)=>{let n=this.indexedDB.open($w,Ew);n.onupgradeneeded=()=>Rw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(nu,\"readwrite\"),i=a.objectStore(nu),p=i.get(t),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=i.delete(t),l=()=>{u=s.transaction(Uu,\"readwrite\");let d=u.objectStore(Uu).delete(t);d.onsuccess=()=>e(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=\"/\",uc=\"tensorflowjs_models\",fk=\"info\",k4=\"model_topology\",N4=\"weight_specs\",T4=\"weight_data\",_4=\"model_metadata\";function hk(r){return{info:[uc,r,fk].join(ai),topology:[uc,r,k4].join(ai),weightSpecs:[uc,r,N4].join(ai),weightData:[uc,r,T4].join(ai),modelMetadata:[uc,r,_4].join(ai)}}function gk(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function $4(r){let t=r.split(ai);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(ai)}function E4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(t){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,t==null||!t)throw new Error(\"For local storage, modelPath must not be null, undefined or empty.\");this.modelPath=t,this.keys=hk(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");{let e=JSON.stringify(t.modelTopology),o=JSON.stringify(t.weightSpecs),n=va(t),s=jt.join(t.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,sk(s));let a={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,initializerSignature:t.initializerSignature!=null?t.initializerSignature:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw gk(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 t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!==\"JSON\")throw new Error(\"BrowserLocalStorage does not support loading non-JSON model topology yet.\");let e={},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.`);e.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.`);e.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);e.format=i.format,e.generatedBy=i.generatedBy,e.convertedBy=i.convertedBy,i.signature!=null&&(e.signature=i.signature),i.userDefinedMetadata!=null&&(e.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(e.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(e.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(e.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 e.weightData=ak(a),e}};Na.URL_SCHEME=\"localstorage://\";var xk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?R4(r.slice(Na.URL_SCHEME.length)):null;ft.registerSaveRouter(xk);ft.registerLoadRouter(xk);function R4(r){return new Na(r)}var cd=class{constructor(){$(A().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),$(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let t={},e=uc+ai,o=ai+fk;for(let n=0;n\"scheme must not be undefined or null.\"),t.endsWith(pc)&&(t=t.slice(0,t.indexOf(pc))),$(t.length>0,()=>\"scheme must not be an empty string.\");let o=Zt.getInstance();$(o.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),o.managers[t]=e}static getManager(t){let e=Zt.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(Zt.getInstance().managers)}};function ld(r){if(r.indexOf(pc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Zt.getSchemes().join(\",\")}`);return{scheme:r.split(pc)[0],path:r.split(pc)[1]}}async function yk(r,t,e=!1){$(r!==t,()=>`Old path and new path are the same: '${r}'`);let o=ft.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=ft.getSaveHandlers(t);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${t}.`);let a=s[0],i=ld(r).scheme,p=ld(r).path,u=i===ld(r).scheme,c=await n.load();e&&u&&await Zt.getManager(i).removeModel(p);let l=await a.save(c);return e&&!u&&await Zt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function bk(){let r=Zt.getSchemes(),t={};for(let e of r){let o=await Zt.getManager(e).listModels();for(let n in o){let s=e+pc+n;t[s]=o[n]}}return t}async function Ck(r){let t=ld(r);return Zt.getManager(t.scheme).removeModel(t.path)}async function wk(r,t){return yk(r,t,!1)}async function Sk(r,t){return yk(r,t,!0)}var Dw=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}setTimeoutCustom(t,e){if(typeof window==\"undefined\"||!A().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(t,e);return}this.functionRefs.push(t),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},e),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(t){return Qm(t)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new Dw);try{Zt.registerManager(Na.URL_SCHEME,new cd)}catch(r){}try{Zt.registerManager(ka.URL_SCHEME,new pd)}catch(r){}}var D4={importFetch:()=>Ik()},Aw;var Fw=class{constructor(){this.util=vk(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return A().global.fetch!=null?A().global.fetch(t,e):(Aw==null&&(Aw=D4.importFetch()),Aw(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?\"\":new this.util.TextDecoder(e).decode(t)}isTypedArray(t){return this.util.types.isFloat32Array(t)||this.util.types.isInt32Array(t)||this.util.types.isUint8Array(t)||this.util.types.isUint8ClampedArray(t)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Fw);function me(r,t=\"float32\",e){return t=t||\"float32\",wt(r),new tt(r,t,e)}function A4(r,t){let e=v(r,\"x\",\"cast\");if(!rw(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t===\"string\"&&e.dtype!==\"string\"||t!==\"string\"&&e.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:e},n={dtype:t};return T.runKernel(bo,o,n)}var We=N({cast_:A4});function F4(r){let e={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(wo,e)}var Ur=N({clone_:F4});function md(r,t=!1){console.log(r.toString(t))}Sw();var P4={buffer:me,cast:We,clone:Ur,print:md};Q0(P4);function lde(){A().set(\"PROD\",!0)}function mde(){A().set(\"DEBUG\",!0)}function dde(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Pw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}Z0(Pw);function fde(){T.disposeVariables()}function pr(){return T}function hde(){return T.memory()}function gde(r){return T.profile(r)}function De(r,t){return T.tidy(r,t)}function Mt(r){Sl(r).forEach(e=>e.dispose())}function Rr(r){return T.keep(r)}function xde(r){return T.time(r)}function yde(r){return T.setBackend(r)}function bde(){return T.ready()}function Cde(){return T.backendName}function wde(r){T.removeBackend(r)}function Sde(r){return T.findBackend(r)}function Ide(r){return T.findBackendFactory(r)}function su(r,t,e=1){return T.registerBackend(r,t,e)}function vde(){return T.backend}function kde(r,t){A().setPlatform(r,t)}function O4(r,t){let e=v(r,\"a\",\"add\"),o=v(t,\"b\",\"add\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(uo,n)}var Ce=N({add_:O4});function M4(r,t){let e=v(r,\"a\",\"floorDiv\"),o=v(t,\"b\",\"floorDiv\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(In,n)}var dd=N({floorDiv_:M4});function L4(r,t){let e=v(r,\"a\",\"div\"),o=v(t,\"b\",\"div\");if([e,o]=Oe(e,o),e.dtype===\"int32\"&&o.dtype===\"int32\")return dd(e,o);let n={a:e,b:o},s={};return T.runKernel(hn,n,s)}var je=N({div_:L4});function B4(r,t){let e=v(r,\"a\",\"mul\"),o=v(t,\"b\",\"mul\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Yn,n)}var se=N({mul_:B4});function z4(r){let t=v(r,\"x\",\"abs\");if(t.dtype===\"complex64\"){let e={x:t};return T.runKernel(Pi,e)}else{let e={x:t};return T.runKernel(Xs,e)}}var Jt=N({abs_:z4});function V4(r){let e={x:v(r,\"x\",\"acos\")};return T.runKernel(Wo,e)}var kk=N({acos_:V4});function W4(r){let e={x:v(r,\"x\",\"acosh\")};return T.runKernel(Uo,e)}var Nk=N({acosh_:W4});function U4(r){$(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let t=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),e=t[0];t.forEach(n=>{if(n.dtype!==e.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),t.forEach(n=>{if(!Cr(n.shape,e.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=t;return T.runKernel(Go,o)}var Tk=N({addN_:U4});function G4(r,t=null,e=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:t,keepDims:e};return T.runKernel(Ho,n,s)}var _k=N({all_:G4});function H4(r,t=null,e=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:t,keepDims:e};return T.runKernel(Ko,n,s)}var $k=N({any_:H4});function K4(r,t=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:t};return T.runKernel(Ys,o,n)}var Ek=N({argMax_:K4});function q4(r,t=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:t};return T.runKernel(Qs,o,n)}var Rk=N({argMin_:q4});function j4(r){let e={x:v(r,\"x\",\"asin\")};return T.runKernel(qo,e)}var Dk=N({asin_:j4});function X4(r){let e={x:v(r,\"x\",\"asinh\")};return T.runKernel(jo,e)}var Ak=N({asinh_:X4});function Y4(r){let e={x:v(r,\"x\",\"atan\")};return T.runKernel(Xo,e)}var Fk=N({atan_:Y4});function Q4(r,t){let e=v(r,\"a\",\"atan2\"),o=v(t,\"b\",\"atan2\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Qo,n)}var Pk=N({atan2_:Q4});function Z4(r){let e={x:v(r,\"x\",\"atanh\")};return T.runKernel(Yo,e)}var Ok=N({atanh_:Z4});function J4(r,t,e,o,n=\"NHWC\",s){let a=r[3],i=[...t,a],p=Lk(n);return Hu(r,i,e,s,o,null,null,p)}function Mw(r,t,e,o,n,s,a=\"channelsLast\"){let[i,p]=vl(t),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 Hu(r,u,e,o,n,s,!1,a)}function eH(r,t,e,o,n,s,a=\"NDHWC\"){let[i,p,u]=Ow(t),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 Mk(r,c,e,o,n,!1,l,s)}function Hu(r,t,e,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]=t,[h,g]=vl(e),[x,b]=vl(o),C=cc(m,x),S=cc(d,b),{padInfo:k,outHeight:_,outWidth:E}=oH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i===\"channelsFirst\"?D=[p,R,_,E]:i===\"channelsLast\"&&(D=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:t}}function Mk(r,t,e,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]=t,[x,b,C]=Ow(e),[S,k,_]=Ow(o),E=cc(d,S),R=cc(f,k),D=cc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=nH(n,u,c,l,x,b,C,E,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:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:t}}function tH(r,t,e,o,n){o==null&&(o=Lw(r,t,e));let s=r[0],a=r[1],i=kl((s-t+2*o)/e+1,n),p=kl((a-t+2*o)/e+1,n);return[i,p]}function rH(r,t,e,o,n,s){n==null&&(n=Lw(r,t[0],o[0]));let a=[0,0,0,e];for(let i=0;i<3;i++)r[i]+2*n>=t[i]&&(a[i]=kl((r[i]-t[i]+2*n)/o[i]+1,s));return a}function Lw(r,t,e,o=1){let n=cc(t,o);return Math.floor((r[0]*(e-1)-e+n)/2)}function vl(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Ow(r){return typeof r==\"number\"?[r,r,r]:r}function cc(r,t){return t<=1?r:r+(r-1)*(t-1)}function oH(r,t,e,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=tH([t,e],s,o,r,i);c=d[0],l=d[1]}else if(r===\"same\"){c=Math.ceil(t/o),l=Math.ceil(e/n);let m=Math.max(0,(c-1)*o+s-t),d=Math.max(0,(l-1)*n+a-e),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((t-s+1)/o),l=Math.ceil((e-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=kl((t-s+m+d)/o+1,i),l=kl((e-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function nH(r,t,e,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=rH([t,e,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(t/n),d=Math.ceil(e/s),f=Math.ceil(o/a);let h=(m-1)*n+i-t,g=(d-1)*s+p-e,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),E=x-_;l={top:S,bottom:k,left:_,right:E,front:b,back:C,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function kl(r,t){if(!t)return Math.trunc(r);switch(t){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${t}`)}}function Gu(r){let[t,e,o]=vl(r);return t===1&&e===1&&o===1}function xr(r,t){return Gu(r)||Gu(t)}function Ta(r){return vl(r).every(t=>t>0)}function Lk(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Bt(r,t,e){if(e!=null){if(typeof t==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);if(typeof t==\"number\")$(qa(t),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);else if(typeof t==\"object\")t.forEach(o=>{o.forEach(n=>{$(qa(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${t}`)}}function sH(r,t){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:t};return T.runKernel(da,o,n)}var W=N({reshape_:sH});function aH(r,t,e,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;$(xr(e,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${e} 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]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Bt(\"avgPool\",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Zo,u,c);return l=We(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var fd=N({avgPool_:aH});function iH(r,t,e,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]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof e==\"number\"&&e>0||Array.isArray(e)&&e[0]>0&&e[1]>0&&e[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${e}'`),Bt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=We(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Bk=N({avgPool3d_:iH});function uH(r,t=0){$(r.length>=1,()=>\"Pass at least one tensor to concat\");let e=si(r,\"tensors\",\"concat\",\"string_or_numeric\");if(e[0].dtype===\"complex64\"&&e.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),e.length===1)return Ur(e[0]);let o=e,n={axis:t};return T.runKernel(ta,o,n)}var bt=N({concat_:uH});function pH(r,t,e=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(t,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:e,transposeB:o};return T.runKernel(Jo,a,i)}var Ze=N({matMul_:pH});function cH(r){let e={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(Cs,e)}var $a=N({sigmoid_:cH});function lH(r,t,e){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:t,size:e};return T.runKernel(ha,n,s)}var Xe=N({slice_:lH});function mH(r){let e={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel(Es,e)}var Nl=N({tanh_:mH});function dH(r,t,e,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(t,\"lstmKernel\",\"basicLSTMCell\"),p=v(e,\"lstmBias\",\"basicLSTMCell\"),u=v(o,\"data\",\"basicLSTMCell\"),c=v(n,\"c\",\"basicLSTMCell\"),l=v(s,\"h\",\"basicLSTMCell\"),m=bt([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($a(b),Nl(C)),se(c,$a(Ce(a,S)))),E=se(Nl(_),$a(k));return[_,E]}var zk=N({basicLSTMCell_:dH});function fH(r,t,e){let o=v(r,\"x\",\"batchToSpaceND\"),n=t.reduce((i,p)=>i*p);$(o.rank>=1+t.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${t.length}`),$(e.length===t.length,()=>`crops.length is ${e.length} but should be equal to blockShape.length ${t.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:t,crops:e};return T.runKernel(Js,s,a)}var hd=N({batchToSpaceND_:fH});function Vk(r){let t;return r.rank===0||r.rank===1?t=W(r,[1,1,1,r.size]):r.rank===2?t=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?t=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):t=r,t}function hH(r,t,e,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),$(c==null||i.rank===c.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),$(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:Vk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(vn,m,d);return W(f,a.shape)}var au=N({batchNorm_:hH});function gH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Wk=N({batchNorm2d_:gH});function xH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Uk=N({batchNorm3d_:xH});function yH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Gk=N({batchNorm4d_:yH});function bH(r,t,e){let o=v(r,\"x\",\"bincount\"),n=v(t,\"weights\",\"bincount\");$(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(e>=0,()=>`size must be non-negative, but got ${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:e};return T.runKernel(en,s,a)}var gd=N({bincount_:bH});function CH(r,t){let e=v(r,\"x\",\"bitwiseAnd\"),o=v(t,\"y\",\"bitwiseAnd\");if(!Cr(e.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${e.shape}, y: ${o.shape}`);if(e.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${e.dtype} and type of y: ${o.dtype}`);let n={a:e,b:o};return T.runKernel(ja,n)}var Hk=N({bitwiseAnd_:CH});function wH(r,t){let e=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(t,\"s1\",\"broadcastArgs\",\"int32\");if(e.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:e,s1:o};return T.runKernel(ea,n)}var Kk=N({broadcastArgs_:wH});function SH(r,t){let e=v(r,\"broadcastTo\",\"x\"),o=e.shape;if(wt(t),t.lengthe.rank){let u=e.shape.slice();for(;u.length=0;u--)if(n[u]===t[u])s[u]=1;else if(e.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${t}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Ur(e);let i={x:e},p={reps:s};return T.runKernel(po,i,p)}var iu=N({broadcastTo_:SH});function IH(r){let e={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(tn,e)}var qk=N({ceil_:IH});function Ea(r,t,e){wt(r),e=e||Ri(t);let o={shape:r,value:t,dtype:e};return T.runKernel(sa,{},o)}function vH(r,t,e){let o=v(r,\"x\",\"clipByValue\");if($(t<=e,()=>`Error in clip: min (${t}) must be less than or equal to max (${e}).`),t===e)return Ea(o.shape,t,o.dtype);let n={x:o},s={clipValueMin:t,clipValueMax:e};return T.runKernel(Co,n,s)}var jk=N({clipByValue_:vH});function kH(r){return bt(r,0)}var Xk=N({concat1d_:kH});function NH(r,t){return bt(r,t)}var Yk=N({concat2d_:NH});function TH(r,t){return bt(r,t)}var Qk=N({concat3d_:TH});function _H(r,t){return bt(r,t)}var Zk=N({concat4d_:_H});function $H(r,t,e,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(t,\"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]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Bt(\"conv2d\",o,a);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(xr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(Ta(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(rn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var uu=N({conv2d_:$H});function EH(r,t,e,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(t,\"filter\",\"conv1d\"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Bt(\"conv1d\",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(xr(e,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`),$(Ta(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv1D: Stride should be larger than 0.\"),$(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=uu(m,l,[1,e],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 Jk=N({conv1d_:EH});function RH(r,t,e,o,n,s=\"NHWC\",a){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let i=r,p=t,u=!1;t.rank===3&&(u=!0,p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(e.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`);let c=s===\"NHWC\"?i[3]:i[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];$(c===e.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`),$(l===e.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`),Bt(\"conv2dDerInput\",n,a);let m={dy:p,filter:e},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(on,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var xd=N({conv2DBackpropInput_:RH});function DH(r,t,e,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(t,\"filter\",\"conv2dTranspose\");return xd(e,a,i,o,n,\"NHWC\",s)}var e2=N({conv2dTranspose_:DH});function AH(r,t,e,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(t,\"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]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(xr(e,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Ta(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv3D: Strides should be larger than 0.\");let c={x:p,filter:i},l={strides:e,pad:o,dataFormat:n,dilations:s},m=T.runKernel(nn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var t2=N({conv3d_:AH});function FH(r,t,e,o,n){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let s=r,a=t,i=!1;t.rank===4&&(i=!0,a=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(e.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`),$(p===e.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${e.shape[3]}.`),$(u===e.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${e.shape[4]}.`);let c={dy:a,filter:e},l={pad:n,strides:o,inputShape:s},m=T.runKernel(sn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var r2=N({conv3DBackpropInput_:FH});function PH(r,t,e,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(t,\"filter\",\"conv3dTranspose\");return r2(e,s,a,o,n)}var o2=N({conv3dTranspose_:PH});function OH(r){let e={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(an,e)}var n2=N({cos_:OH});function MH(r){let e={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(un,e)}var s2=N({cosh_:MH});function LH(r,t=0,e=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(pn,s,a)}var a2=N({cumprod_:LH});function BH(r,t=0,e=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(cn,s,a)}var i2=N({cumsum_:BH});function zH(r,t,e,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(t,\"weights\",\"denseBincount\");$(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(e>=0,()=>`size must be non-negative, but got ${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:e,binaryOutput:o};return T.runKernel(ra,a,i)}var u2=N({denseBincount_:zH});function VH(r,t,e=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=e===\"NHWC\"?o.shape[1]:o.shape[2],s=e===\"NHWC\"?o.shape[2]:o.shape[3],a=e===\"NHWC\"?o.shape[3]:o.shape[1];$(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),$(n*t>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${t} for depthToSpace with input shape\n ${o.shape}`),$(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${t} for depthToSpace with input shape\n ${o.shape}`),$(a%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:t,dataFormat:e};return T.runKernel(mn,i,p)}var p2=N({depthToSpace_:VH});function WH(r,t,e,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(t,\"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]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Bt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(dn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var lc=N({depthwiseConv2d_:WH});function UH(r){let e={x:v(r,\"x\",\"diag\")};return T.runKernel(oa,e)}var c2=N({diag_:UH});function GH(r,t,e,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(t,\"filter\",\"dilation2d\");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(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:e,pad:o,dilations:n},m=T.runKernel(fn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var l2=N({dilation2d_:GH});var Ir={};qe(Ir,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>m2,getReductionAxes:()=>yd});function m2(r,t){let e=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function yd(r,t){let e=[];for(let o=0;o1)&&e.unshift(s)}return e}function rt(r,t){let e=Math.max(r.length,t.length),o=new Array(e);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${o.rank}.`);let n=e.rank===1?e.size:e.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),e.rank===1&&o.rank===1){let a=W(e,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(e.rank===1&&o.rank===2){let a=W(e,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(e.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(e,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(e,a)}}var f2=N({dot_:XH});function YH(r,...t){let e=t.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(Vi,e,o)}var pu=N({einsum_:YH});function QH(r){let e={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(gn,e)}var Cd=N({elu_:QH});function ZH(r,t){let e=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!ZC(e.shape,t))throw new Error(`EnsureShape: Shape of tensor ${e.shape} is not compatible with expected shape ${t}`);return r}var h2=N({ensureShape_:ZH});function JH(r){let t=v(r,\"x\",\"erf\");$(t.dtype===\"int32\"||t.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),t.dtype===\"int32\"&&(t=We(t,\"float32\"));let e={x:t};return T.runKernel(xn,e)}var g2=N({erf_:JH});function Bw(r,t){for(let e=0;er[s]);return[e,n]}function ii(r,t){let e=t.map(o=>1);return x2(r,e,t)}function tK(r,t,e){$(Bw(t,e),()=>`${r} supports only inner-most axes for now. Got axes ${t} and rank-${e} input.`)}function rK(r,t){if(Bw(r,t))return null;let e=[];for(let o=0;oe.push(o)),e}function oK(r){return r.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]).map(t=>t[0])}function nK(r,t){let e=[];for(let o=t-r;o\"Axis must be <= rank of the tensor\");let o={input:e},n={dim:t};return T.runKernel(na,o,n)}var Ms=N({expandDims_:hK});function gK(r){let e={x:v(r,\"x\",\"expm1\")};return T.runKernel(Cn,e)}var C2=N({expm1_:gK});function xK(r,t){let e=v(r,\"x\",\"tile\",\"string_or_numeric\");$(e.rank===t.length,()=>`Error in transpose: rank of input ${e.rank} must match length of reps ${t}.`);let o={x:e},n={reps:t};return T.runKernel(po,o,n)}var cu=N({tile_:xK});function yK(r,t,e,o=\"float32\"){t==null&&(t=r);let n=me([r,t],o),s=r<=t?r:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),$(qa(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);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:t,bias:e,alpha:o,beta:n},c=T.runKernel(zn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var k2=N({localResponseNormalization_:EK});function RK(r){let e={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(Pn,e)}var pi=N({log_:RK});function DK(r){let e={x:v(r,\"x\",\"log1p\")};return T.runKernel(On,e)}var Nd=N({log1p_:DK});function AK(r){return $(qs(r),()=>\"The f passed in grad(f) must be a function\"),(t,e)=>{let o=v(t,\"x\",\"tf.grad\",\"string_or_numeric\"),n=e!=null?v(e,\"dy\",\"tf.grad\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&yt(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),Td(a),a[0]})}}function FK(r){return $(qs(r),()=>\"The f passed in grads(f) must be a function\"),(t,e)=>{$(Array.isArray(t),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=si(t,\"args\",\"tf.grads\",\"string_or_numeric\"),n=e!=null?v(e,\"dy\",\"tf.grads\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&yt(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Td(a),a})}}function PK(r){return $(qs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(t,e)=>{$(t instanceof ut,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),$(e==null||e instanceof ut,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(t),[t],e);return Td(o),{grad:o[0],value:n}}}function OK(r){return $(qs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(t,e)=>{$(Array.isArray(t)&&t.every(n=>n instanceof ut),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),$(e==null||e instanceof ut,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...t),t,e);return e!=null&&yt(o.value.shape,e.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Td(o.grads),o}}function zw(r,t){$(qs(r),()=>\"The f passed in variableGrads(f) must be a function\"),$(t==null||Array.isArray(t)&&t.every(u=>u instanceof oi),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let e=t!=null;if(!e){t=[];for(let u in T.registeredVariables)t.push(T.registeredVariables[u])}let o=e?t.filter(u=>!u.trainable):null,n=t.length;t=t.filter(u=>u.trainable),$(t.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,t,null,s);$(i.some(u=>u!=null),()=>\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return t.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 vr(r){return T.customGrad(r)}function Td(r){if(r.filter(e=>e==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 MK(r){let e={x:v(r,\"x\",\"neg\")};return T.runKernel(pa,e)}var cr=N({neg_:MK});function LK(r){let e={x:v(r,\"x\",\"softplus\")};return T.runKernel(ws,e)}var _d=N({softplus_:LK});function BK(r){let t=v(r,\"x\",\"logSigmoid\");return vr(o=>({value:cr(_d(cr(o))),gradFunc:a=>se(a,$a(cr(o)))}))(t)}var N2=N({logSigmoid_:BK});function zK(r,t){let e=v(r,\"a\",\"sub\"),o=v(t,\"b\",\"sub\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(_s,n)}var Te=N({sub_:zK});function VK(r,t=-1){let e=v(r,\"logits\",\"logSoftmax\");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t}`);return vr((n,s)=>{let i=Ra(n,t,!0),p=Te(n,i),u=Te(We(p,\"float32\"),pi(ot($o(p),t,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=$o(d);return Te(l,se(ot(l,t,f),h))}}})(e)}var T2=N({logSoftmax_:VK});function WK(r,t=null,e=!1){let o=v(r,\"x\",\"logSumExp\"),n=Ei(t,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(e){let l=ii(c.shape,n);return W(c,l)}return c}var $d=N({logSumExp_:WK});function UK(r,t){let e=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(t,\"b\",\"logicalAnd\",\"bool\");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Mn,n)}var ju=N({logicalAnd_:UK});function GK(r){let e={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(Ln,e)}var Ed=N({logicalNot_:GK});function HK(r,t){let e=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(t,\"b\",\"logicalOr\",\"bool\");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Bn,n)}var Rd=N({logicalOr_:HK});function KK(r,t){let e=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(t,\"b\",\"logicalXor\",\"bool\");return rt(e.shape,o.shape),ju(Rd(r,t),Ed(ju(r,t)))}var _2=N({logicalXor_:KK});var Dd=2147483648;function qK(r,t,e=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(t,\"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(He(p.shape)>=Dd)throw new Error(`values tensor size must less than ${Dd}`);if(i.shape[1]>=Dd)throw new Error(`trailing dim_size must less than ${Dd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:e};return T.runKernel(hs,u,c)}var $l=N({searchSorted_:qK});function $2(r,t){return $l(r,t,\"left\")}function jK(r,t,e,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]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(xr(e,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`),Bt(\"maxPool\",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Un,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Ad=N({maxPool_:jK});function XK(r,t=[1,1,1],e,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]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Bt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:t,strides:e,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 E2=N({maxPool3d_:XK});function YK(r,t,e,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:t,strides:e,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var R2=N({maxPoolWithArgmax_:YK});function QK(r,t){let e=v(r,\"a\",\"maximum\"),o=v(t,\"b\",\"maximum\");[e,o]=Oe(e,o),e.dtype===\"bool\"&&(e=We(e,\"int32\"),o=We(o,\"int32\")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Wn,n)}var Fd=N({maximum_:QK});function ZK(r,t=null,e=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:t,keepDims:e};return T.runKernel(Gn,n,s)}var Xu=N({mean_:ZK});function Gr(r,t=\"float32\"){if(wt(r),t===\"complex64\"){let o=Gr(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let e=Yp(He(r),t);return T.makeTensor(e,r,t)}function Da(r,t=\"float32\"){if(wt(r),t===\"complex64\"){let o=Da(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let e=fl(He(r),t);return T.makeTensor(e,r,t)}function D2(r,t,{indexing:e=\"xy\"}={}){if(e!==\"xy\"&&e!==\"ij\")throw new TypeError(`${e} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,\"x\",\"meshgrid\",r instanceof ut?r.dtype:\"float32\");if(t===void 0)return[o];let n=v(t,\"y\",\"meshgrid\",t instanceof ut?t.dtype:\"float32\"),s=He(o.shape),a=He(n.shape);return e===\"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 JK(r,t){let e=v(r,\"a\",\"minimum\"),o=v(t,\"b\",\"minimum\");[e,o]=Oe(e,o),e.dtype===\"bool\"&&(e=We(e,\"int32\"),o=We(o,\"int32\")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Kn,n)}var Yu=N({minimum_:JK});function eq(r,t,e){$(e===\"reflect\"||e===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");$(t.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${t.length}.`);let n=e===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),$(t[i][0]>=0&&t[i][0]<=o.shape[i]-n&&t[i][1]>=0&&t[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:t,mode:e},a={x:o};return T.runKernel(qn,a,s)}var A2=N({mirrorPad_:eq});function tq(r,t){let e=v(r,\"a\",\"mod\"),o=v(t,\"b\",\"mod\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(jn,n)}var F2=N({mod_:tq});function rq(r,t=null,e=!1){r=v(r,\"x\",\"moments\");let o=Ei(t,r.shape),n=Xu(r,o,e),s=n.shape;e||(s=ii(n.shape,o));let a=er(Te(We(r,\"float32\"),W(n,s))),i=Xu(a,o,e);return{mean:n,variance:i}}var P2=N({moments_:rq});function oq(r,t,e,o){let n=v(t,\"data\",\"multiRNNCell\"),s=si(e,\"c\",\"multiRNNCell\"),a=si(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}`);e=e||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:t,seed:e,normalized:o},c=T.runKernel(Xn,p,u);return a===1?W(c,[c.size]):c}var M2=N({multinomial_:nq});function sq(r,t){let e=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(t,\"b\",\"notEqual\",\"string_or_numeric\");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Qn,n)}var Pd=N({notEqual_:sq});function aq(r,t,e=1,o=0,n=\"int32\"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:t,onValue:e,offValue:o};return T.runKernel(es,a,i)}var El=N({oneHot_:aq});function iq(r){let e={x:v(r,\"x\",\"onesLike\")};return T.runKernel(ca,e)}var L2=N({onesLike_:iq});function uq(r,t){let e=v(r,\"v1\",\"outerProduct\"),o=v(t,\"v2\",\"outerProduct\");$(e.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${o.rank}.`);let n=W(e,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var B2=N({outerProduct_:uq});function pq(r,t,e=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:t,constantValue:e},s={x:o};return T.runKernel(ts,s,n)}var Aa=N({pad_:pq});function cq(r,t,e=0){return $(t.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Aa(r,[t],e)}var z2=N({pad1d_:cq});function lq(r,t,e=0){return $(t.length===2&&t[0].length===2&&t[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Aa(r,t,e)}var V2=N({pad2d_:lq});function mq(r,t,e=0){return $(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.\"),Aa(r,t,e)}var W2=N({pad3d_:mq});function dq(r,t,e=0){return $(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.\"),Aa(r,t,e)}var U2=N({pad4d_:dq});function fq(r,t,e){let o=v(r,\"x\",\"spaceToBatchND\");$(o.rank>=1+t.length,()=>`input rank ${o.rank} should be > than [blockShape] ${t.length}`),$(e.length===t.length,()=>`paddings.shape[0] ${e.length} must be equal to [blockShape] ${t.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=t.length?a&&(i+e[p-1][0]+e[p-1][1])%t[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t.toString()}`);let n={x:o},s={blockShape:t,paddings:e};return T.runKernel(ga,n,s)}var Od=N({spaceToBatchND_:fq});function hq(r,t,e,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]])),$(xr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Mw(p.shape,t,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=xq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=gq([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Od(p,l,f),C=(e===\"avg\"?()=>fd(x,t,s,g,a):()=>Ad(x,t,s,g,a))(),S=d?C:hd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function gq(r,t,e){let o=e.map(c=>c[0]),n=e.map(c=>c[1]),s=r.concat(o,n),a=t.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=t.map((c,l)=>[o[l],i[l]]),u=t.map((c,l)=>[0,a[l]]);return[p,u]}function xq(r,t){let o=r.map((a,i)=>a+(a-1)*(t[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 G2=N({pool_:hq});function yq(r,t){let e=v(r,\"x\",\"prelu\"),o=v(t,\"alpha\",\"prelu\"),n={x:e,alpha:o};return T.runKernel(os,n)}var Md=N({prelu_:yq});function bq(r,t=null,e=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=We(o,\"int32\"));let n={x:o},s={axis:t,keepDims:e};return T.runKernel(ns,n,s)}var H2=N({prod_:bq});function Cq(r,t,e,o){let n=r.map((c,l)=>v(c,`tensors${l}`,\"raggedGather\",\"int32\")),s=v(t,\"paramsDenseValues\",\"raggedGather\"),a=v(e,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Qp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var K2=N({raggedGather_:Cq});function wq(r,t,e){let o=v(r,\"starts\",\"raggedRange\"),n=v(t,\"limits\",\"raggedRange\",o.dtype),s=v(e,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Zp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var q2=N({raggedRange_:wq});function Sq(r,t,e,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(t,\"values\",\"raggedTensorToTensor\"),i=v(e,\"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(Jp,u,c)}var j2=N({raggedTensorToTensor_:Sq});function Iq(r,t,e){wt(r);let o=He(r),n=null;if(e==null||e===\"float32\")n=new Float32Array(o);else if(e===\"int32\")n=new Int32Array(o);else if(e===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${e}`);for(let s=0;sm1,createVideoElement:()=>Oq,encodeStrings:()=>f1,expectArrayBuffersEqual:()=>Pq,expectArraysClose:()=>Rq,expectArraysEqual:()=>Aq,expectNumbersClose:()=>d1,expectPromiseToFail:()=>Dq,expectValuesInRange:()=>Fq,play:()=>Mq,testEpsilon:()=>Bd});var Eq=.001,m1=.1;function Rq(r,t,e){return e==null&&(e=Bd()),jw(r,t,(o,n)=>Xw(o,n,e))}function Bd(){return T.backend.floatPrecision()===32?Eq:m1}function jw(r,t,e){let o=!0;if((Ot(r)||Ot(t))&&(o=!1),Ot(r)&&Ot(t)&&(o=!0),o){let a=r.constructor.name,i=t.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(t)){let a=ir(r),i=ir(t);if(!Cr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Ot(r)?r:Ps(r),s=Ot(t)?t:Ps(t);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;at.fail(),()=>t()),typeof expect!=\"undefined\"&&expect().nothing()}function Aq(r,t){let e=typeof t==\"string\"||typeof t==\"number\"||typeof t==\"boolean\"?[t]:t;return Vo(r)||Vo(r[0])||Vo(t)||Vo(t[0])?jw(r,e,(o,n)=>o==n):jw(r,t,(o,n)=>Xw(o,n,0))}function d1(r,t,e){if(e==null&&(e=Bd()),!Xw(r,t,e))throw new Error(`Numbers differ: actual === ${r}, expected === ${t}`);typeof expect!=\"undefined\"&&expect().nothing()}function Xw(r,t,e){return!isFinite(r)&&!isFinite(t)?!0:!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}function Fq(r,t,e){for(let o=0;oe)throw new Error(`Value out of range:${r[o]} low: ${t}, high: ${e}`)}function Pq(r,t){let e=new Float32Array(r),o=new Float32Array(t);if(e.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${e.length}`);for(let n=0;n{t.addEventListener(\"loadeddata\",o=>e(t)),t.load()})}async function Mq(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(t=>{r.requestVideoFrameCallback(t)})}var Zu=class{constructor(t,e,o,n,s){this.mean=t,this.stdDev=e,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=Wd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let t,e,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);t=this.mean+this.stdDev*n*i,e=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(t))&&(o=!0)}return(!this.truncated||this.isValidTruncated(e))&&(this.nextVal=this.convertValue(e)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype===\"float32\"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}},zd=class{constructor(t,e,o,n){this.alpha=t,this.beta=1/e,this.dtype=o;let s=n||Math.random();this.randu=Wd.alea(s.toString()),this.randn=new Zu(0,1,o,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let t,e,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,t=n*n,e=1-.331*t*t,o=.5*t+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=t,this.range=e-t,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 ${t} - ${e} <= 1 and dtype is not float`);this.random=Wd.alea(n)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Lq(r,t,e=1,o=\"float32\",n){if(wt(r),e==null&&(e=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new zd(t,e,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),mo(t,0)}var C1=N({reverse1d_:jq});function Xq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`),mo(e,t)}var w1=N({reverse2d_:Xq});function Yq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`),mo(e,t)}var S1=N({reverse3d_:Yq});function Qq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`),mo(e,t)}var I1=N({reverse4d_:Qq});function Zq(r){let e={x:v(r,\"x\",\"round\")};return T.runKernel(ls,e)}var Hd=N({round_:Zq});function Jq(r){let e={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(ms,e)}var v1=N({rsqrt_:Jq});function e6(r){let e={x:v(r,\"x\",\"selu\")};return T.runKernel(gs,e)}var k1=N({selu_:e6});function t6(r,t,e,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(t,\"depthwiseFilter\",\"separableConv2d\"),u=v(e,\"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\");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(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=lc(c,p,o,n,a,s),g=uu(f,u,1,\"valid\",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var N1=N({separableConv2d_:t6});async function r6(r,t){let e=v(r,\"x\",\"setdiff1d\"),o=v(t,\"y\",\"setdiff1d\");$(e.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${e.dtype}) and y (${o.dtype}).`),$(e.rank===1,()=>`x should be 1D tensor, but got x (${e.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await e.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,[t],[e])}var R1=N({slice1d_:a6});function i6(r,t,e){let o=v(r,\"x\",\"slice2d\");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var D1=N({slice2d_:i6});function u6(r,t,e){let o=v(r,\"x\",\"slice3d\");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var A1=N({slice3d_:u6});function p6(r,t,e){let o=v(r,\"x\",\"slice4d\");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var F1=N({slice4d_:p6});function c6(r,t=-1){let e=v(r,\"logits\",\"softmax\",\"float32\");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t}`);let o={logits:e},n={dim:t};return T.runKernel(vs,o,n)}var P1=N({softmax_:c6});function l6(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Wi,t)}var fc=N({fft_:l6});function m6(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Ui,t)}var Ju=N({ifft_:m6});function d6(r){let t=r.shape[r.shape.length-1],e=r.size/t,o;if(t<=2){let n=W(r,[e,t]);o=Ju(n)}else{let n=[e,2*(t-1)],s=W(ci(r),[e,t]),a=W(lu(r),[e,t]),i=mo(Xe(s,[0,1],[e,t-2]),1),p=se(mo(Xe(a,[0,1],[e,t-2]),1),ke(-1)),u=bt([s,i],1),c=bt([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 Kd=N({irfft_:d6});function f6(r,t,e=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:t,axis:e};return T.runKernel(xa,n,s)}var li=N({split_:f6});function h6(r,t){$(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let e=r.shape[r.shape.length-1],o=r.size/e,n;if(t!=null&&t0),h=r.shape.map(g=>g);h[r.shape.length-1]=t,n=Xe(r,f,h),e=t}else if(t!=null&&t>e){let f=r.shape.map(h=>h);f[r.shape.length-1]=t-e,n=bt([r,Gr(f)],r.shape.length-1),e=t}else n=r;let s=Ht(n),a=W(Er(n,s),[o,e]),i=fc(a),p=Math.floor(e/2)+1,u=ci(i),c=lu(i),l=li(u,[p,e-p],u.shape.length-1),m=li(c,[p,e-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var hc=N({rfft_:h6});function g6(r,t){let e=v(r,\"a\",\"squaredDifference\"),o=v(t,\"b\",\"squaredDifference\");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o},s={};return T.runKernel(Ns,n,s)}var qd=N({squaredDifference_:g6});function x6(r,t){let e=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(e,JC(e.shape,t).newShape)}var gc=N({squeeze_:x6});function y6(r,t=0){let e=si(r,\"tensors\",\"stack\",\"string_or_numeric\");$(e.length>=1,()=>\"Pass at least one tensor to tf.stack\"),e.length>0&&$(t<=e[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=e,n={axis:t};return T.runKernel(la,o,n)}var kr=N({stack_:y6});function b6(r,t=0){let o={x:v(r,\"x\",\"step\")},n={alpha:t};return T.runKernel(So,o,n)}var jd=N({step_:b6});function C6(r,t,e,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},l={begin:t,end:e,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ts,c,l)}var O1=N({stridedSlice_:C6});function w6(r){let e={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel($s,e)}var M1=N({tan_:w6});function tr(r,t){io(r);let e=ir(r,t);if(e.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return Sr(r,null,e,t)}function fu(r,t,e){if(io(r),t!=null&&t.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=ir(r,e);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return Sr(r,t,o,e)}function Xd(r,t,e){if(io(r),t!=null&&t.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=ir(r,e);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return Sr(r,t,o,e)}function L1(r,t,e){if(io(r),t!=null&&t.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=ir(r,e);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return Sr(r,t,o,e)}function B1(r,t,e){if(io(r),t!=null&&t.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=ir(r,e);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return Sr(r,t,o,e)}function z1(r,t,e){if(io(r),t!=null&&t.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=ir(r,e);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return t=t||o,Sr(r,t,o,e)}var hu={};qe(hu,{calculateShapes:()=>V1,validateInput:()=>xc,validateUpdateShape:()=>Yw});function Yw(r,t,e){let o=t.rank>1?t.shape[t.rank-1]:1,n=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(e.rank1?t.shape[o-1]:1,s=e.length,a=1;for(let l=n;l= 0 but got ${t}`);if(t>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${t}`);let s={x:o},a={k:t,sorted:e},[i,p]=T.runKernel(Rs,s,a);return{values:i,indices:p}}var U1=N({topk_:I6});function v6(r,t=0,e=1,o,n){if(wt(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new Zu(t,e,o,!0,n),a=me(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:e},n={axis:t},[s,a]=T.runKernel(Zi,o,n);return{values:s,indices:a}}var H1=N({unique_:k6});function N6(r,t,e){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(t,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");$(qa(e),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:e};return T.runKernel(Ji,s,a)}var K1=N({unsortedSegmentSum_:N6});function T6(r,t=0){let e=v(r,\"x\",\"unstack\",\"string_or_numeric\");$(t>=-e.shape.length&&t`Axis = ${t} is not in [-${e.shape.length}, ${e.shape.length})`);let o={value:e},n={axis:t};return T.runKernel(wa,o,n)}var fo=N({unstack_:T6});function q1(r,t){return $l(r,t,\"right\")}function j1(r,t=!0,e,o){return T.makeVariable(r,t,e,o)}function Yd(r,t){let e=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),yt(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()),$(o.rank===t.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${t}.`),t.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${t}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:t};return o.dtype===\"complex64\"?De(()=>{let a=ci(o),i=lu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),e&&(i=cr(i)),Er(a,i)}):T.runKernel(co,n,s)}var yc=N({transpose_:R6});function D6(r,t,e,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(t,\"x\",\"movingAverage\"),i=v(e,\"decay\",\"movingAverage\");Cw(s,a),$(Cr(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){$(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 A6=N({movingAverage_:D6});function F6(r,t,e){wt(e);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(t,\"updates\",\"scatterND\");xc(n,o,e);let s={indices:o,updates:n},a={shape:e};return T.runKernel(ds,s,a)}var P6=N({scatterND_:F6});function X1(r,t,e,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(e.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${n}]`);if(t.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function M6(r,t,e,o=0){wt(e);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(t,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);X1(n,s,e,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:e};return T.runKernel(ks,i,p)}var L6=N({sparseToDense_:M6});function B6(r,t){let e=v(t,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:e};return T.runKernel(kn,n)}var z6=N({gatherND_:B6});function Y1(r,t){if(t==null)return r.shape.slice();if(Cr(r.shape,t))return t;if(r.shape.length===t.length){let e=[];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.`),$(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return r instanceof ut?n.clone():n;let s=Y1(n,e),a=1-t,i=je(Sd(Ce(dc(s,0,1,\"float32\",o),a)),a);return se(n,i)}var W6=N({dropout_:V6});function Qw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Rl(r,t,e){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),yt(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>0&&e<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`);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;hZ1,depthwiseConv2d:()=>tN,matMul:()=>rN});function H6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(e.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];$(u===e[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`),$(c===e[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`),Bt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:e};return T.runKernel(Oi,l,m)}var Q1=N({conv2DBackpropFilter_:H6});function ep(r,t,e){if(e==null||e===\"linear\")return r;if(e===\"relu\")return se(r,jd(t));throw new Error(`Cannot compute gradient for fused activation ${e}.`)}function tp(r,t){let e=t,o=yd(r.shape,t.shape);return o.length>0&&(e=ot(e,o)),W(e,r.shape)}function rp(r,t,e,o){if(t===\"linear\")return r;if(t===\"relu\")return du(r);if(t===\"elu\")return Cd(r);if(t===\"relu6\")return Gd(r);if(t===\"prelu\")return Md(r,e);if(t===\"leakyrelu\")return kd(r,o);if(t===\"sigmoid\")return $a(r);throw new Error(`Unknown fused activation ${t}.`)}var op=(r,t)=>!(r>0)||t===\"linear\";function K6({x:r,filter:t,strides:e,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||\"linear\",op(T.state.gradientDepth,p)===!1){$(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=uu(r,t,e,o,n,s,a);return i!=null&&(_=Ce(_,i)),rp(_,p,u,c)}let l=v(r,\"x\",\"conv2d\",\"float32\"),m=v(t,\"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]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Bt(\"fused conv2d\",o,a);let h=n===\"NHWC\"?d.shape[3]:d.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(xr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let g=Hu(d.shape,m.shape,e,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,l),n===\"NHWC\"?rt(g.outShape,x.shape):($(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}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,\"prelu weights\",\"fused conv2d\")}let C=(_,E)=>{$(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=E,M=ep(_,P,p);$(Gu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=xd(D.shape,M,R,e,o),B=Q1(D,M,R.shape,e,o),z=[L,B];if(O!=null){let U=tp(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?vr((E,R,D)=>{let P=T.runKernel(vo,S,k);return D([R,E,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):vr((E,R,D,P)=>{let O=T.runKernel(vo,S,k);return P([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var Z1=N({fusedConv2d_:K6});function q6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:e};return T.runKernel(Mi,u,c)}var J1=N({depthwiseConv2dNativeBackpropFilter_:q6});function j6(r,t,e,o,n,s=[1,1],a){let i=t,p=!1;t.rank===3&&(p=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:e},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Li,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var eN=N({depthwiseConv2dNativeBackpropInput_:j6});function X6({x:r,filter:t,strides:e,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(op(T.state.gradientDepth,p)===!1){let k=lc(r,t,e,o,n,s,a);return i!=null&&(k=Ce(k,i)),rp(k,p,u,c)}let l=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(t,\"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]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(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]),$(xr(e,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),Bt(\"fused depthwiseConv2d\",o,a);let h=Hu(d.shape,m.shape,e,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,_)=>{$(Gu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,P]=_,O=ep(k,D,p),M=eN(R.shape,O,E,e,o,s,a),L=J1(R,O,E.shape,e,o,s,a);if(P!=null){let B=tp(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?vr((_,E,R)=>{let D=T.runKernel(ko,C,S);return R([E,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):vr((_,E,R,D)=>{let P=T.runKernel(ko,C,S);return D([E,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var tN=N({fusedDepthwiseConv2d_:X6});function Y6({a:r,b:t,transposeA:e=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(op(T.state.gradientDepth,s)===!1){let O=Ze(r,t,e,o);return n!=null&&(O=Ce(O,n)),rp(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(t,\"b\",\"fused matMul\");[p,u]=Oe(p,u);let c=e?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=e?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=He(f),x=He(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${e} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=e?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 E;a!=null&&(E=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=ep(W(O,z.shape),z,s),q,Y;if(!e&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!e&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):e&&!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=tp(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:E},P={transposeA:e,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?vr((M,L,B)=>{let z=T.runKernel(Io,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):vr((M,L,B,z)=>{let U=T.runKernel(Io,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var rN=N({fusedMatMul_:Y6});function Q6(r){return Rl(r,.54,.46)}var oN=N({hammingWindow_:Q6});function Z6(r){return Rl(r,.5,.5)}var Zd=N({hannWindow_:Z6});function J6(r,t,e,o=!1,n=0){let s=0,a=[];for(;s+t<=r.size;)a.push(Xe(r,s,t)),s+=e;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(ln,c,l)}var sN=N({cropAndResize_:tj});function rj(r){let t=v(r,\"image\",\"flipLeftRight\",\"float32\");$(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let e={image:t};return T.runKernel(wn,e,{})}var aN=N({flipLeftRight_:rj});function oj(r){let t=v(r,\"image\",\"grayscaleToRGB\"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(t.rank);return n.fill(1,0,e),n[e]=3,cu(t,n)}var iN=N({grayscaleToRGB_:oj});function nj(r){let t=v(r,\"image\",\"RGBToGrayscale\"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=t.dtype,s=We(t,\"float32\"),a=tr([.2989,.587,.114]),i;switch(t.rank){case 2:i=pu(\"ij,j->i\",s,a);break;case 3:i=pu(\"ijk,k->ij\",s,a);break;case 4:i=pu(\"ijkl,l->ijk\",s,a);break;case 5:i=pu(\"ijklm,m->ijkl\",s,a);break;case 6:i=pu(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ms(i,-1),We(i,n)}var uN=N({rgbToGrayscale_:nj});function sj(r,t,e=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:t,fillValue:e,center:o};return T.runKernel(As,s,a)}var pN=N({rotateWithOffset_:sj});function Eo(r,t,e,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return e=Math.min(e,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(t.rank===1,()=>\"scores must be a 1D tensor\"),$(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function aj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(t,\"scores\",\"nonMaxSuppression\",\"float32\"),i=Eo(s,a,e,o,n);e=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:e,iouThreshold:o,scoreThreshold:n};return T.runKernel(Zn,{boxes:s,scores:a},p)}var cN=N({nonMaxSuppression_:aj});function lN(r,t,e){let o=ij(r,t,e),n=o<0?-(o+1):o;r.splice(n,0,t)}function ij(r,t,e){return pj(r,t,e||uj)}function uj(r,t){return r>t?1:r>>1);let i=e(t,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function ef(r,t,e,o,n){return Jw(r,t,e,o,n,0)}function tf(r,t,e,o,n,s){return Jw(r,t,e,o,n,0,!1,s,!0)}function rf(r,t,e,o,n,s){return Jw(r,t,e,o,n,s,!0)}function Jw(r,t,e,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(mN);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 _=cj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*lj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&lN(u,g,mN))}let d=l.length,f=e-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 cj(r,t,e){let o=r.subarray(t*4,t*4+4),n=r.subarray(e*4,e*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 lj(r,t,e){let o=Math.exp(t*e*e);return e<=r?o:0}function mN(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}async function mj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(t,\"scores\",\"nonMaxSuppressionAsync\"),i=Eo(s,a,e,o,n);e=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}=ef(u,c,e,o,n);return s!==r&&s.dispose(),a!==t&&a.dispose(),tr(l,\"int32\")}var dN=mj;function dj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(t,\"scores\",\"nonMaxSuppression\"),p=Eo(a,i,e,o,n,s);e=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Jn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var fN=N({nonMaxSuppressionWithScore_:dj});async function fj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(t,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(a,i,e,o,n,s);e=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}=rf(c,l,e,o,n,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:tr(m,\"int32\"),selectedScores:tr(d)}}var hN=fj;function hj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(t,\"scores\",\"nonMaxSuppression\"),p=Eo(a,i,e,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(Za,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var gN=N({nonMaxSuppressionPadded_:hj});async function gj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(t,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(a,i,e,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}=tf(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:tr(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var xN=gj;function xj(r,t,e=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(us,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var yN=N({resizeBilinear_:xj});function yj(r,t,e=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),$(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var bN=N({resizeNearestNeighbor_:yj});function bj(r,t=\"binary\",e=!1,o=.5){let n=v(r,\"image\",\"threshold\"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(tr([o]),255),c,l,m,d;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(t===\"otsu\"||t===\"binary\",()=>`Method must be binary or otsu, but was ${t}`),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(t===\"otsu\"){let g=gd(We(Hd(d),\"int32\"),ur([]),256);u=Cj(g,p)}let f=e?mc(d,u):qu(d,u);return We(se(f,255),\"int32\")}function Cj(r,t){let e=tr([-1]),o=tr([0]),n=tr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:e,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Ds,p,u)}var wN=N({transform_:wj});function Sj(r,t,e){let o=v(r,\"a\",\"bandPart\");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof t==\"number\"?($(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),$(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),i=v(t<0?s:t,\"numLower\",\"bandPart\")):($(t.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=lo(_l(t,0),s,Yu(t,s))),typeof e==\"number\"?($(e%1===0,()=>`bandPart(): numUpper must be an integer, got ${e}.`),$(e<=a,()=>`bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`),p=v(e<0?a:e,\"numUpper\",\"bandPart\")):($(e.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=lo(_l(e,0),a,Yu(e,a)));let u=W(mu(0,s,1,\"int32\"),[-1,1]),c=mu(0,a,1,\"int32\"),l=Te(u,c),m=ju(mc(l,i),vd(l,cr(p))),d=Gr([s,a],o.dtype);return W(kr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var SN=N({bandPart_:Sj});function Ij(r){let t;if(Array.isArray(r)){t=!1,$(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else t=!0,r=li(r,r.shape[0],0).map(n=>gc(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let e=[],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 vN(r,t);{let e=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=vN(p,t);n.push(u),s.push(c)});let a=W(kr(n,0),r.shape),i=W(kr(s,0),r.shape);return[a,i]}}function vN(r,t=!1){return T.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let e=r.shape[0],o=r.shape[1],n=wd(e),s=Ur(r),a=fu([[1]],[1,1]),i=Ur(a),p=e>=o?o:e;for(let u=0;u{let d=Xe(s,[u,u],[e-u,1]),f=Ku(d),h=Xe(s,[u,u],[1,1]),g=lo(qu(h,0),fu([[-1]]),fu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=bt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=cr(je(Ze(g,x),f)),S=Xe(s,[u,0],[e-u,o]),k=se(C,i),_=yc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=bt([Xe(s,[0,0],[u,o]),D],0)}let E=yc(k),R=Xe(n,[0,u],[e,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),E));else{let D=Te(R,Ze(Ze(R,i),E));n=bt([Xe(n,[0,0],[e,u]),D],1)}return[i,s,n]}),Mt([c,l,m])}return!t&&e>o&&(n=Xe(n,[0,0],[e,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var kN=N({qr_:vj});var Rt;(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\"})(Rt||(Rt={}));function kj(r,t,e=Rt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;t!=null&&(n=v(t,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(e===Rt.NONE)return s;if(e===Rt.SUM)return ot(s);if(e===Rt.MEAN){if(n==null)return Xu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(e===Rt.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=We(ot(Pd(a,ke(0))),\"float32\");return je(ot(s),i)}}throw Error(`Unknown reduction: ${e}`)}var lr=N({computeWeightedLoss_:kj});function Nj(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(t,\"predictions\",\"absoluteDifference\"),a=null;e!=null&&(a=v(e,\"weights\",\"absoluteDifference\")),yt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Jt(Te(n,s));return lr(i,a,o)}var NN=N({absoluteDifference_:Nj});function Tj(r,t,e,o,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(t,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),yt(s.shape,a.shape,\"Error in cosineDistance: \");let p=ke(1),u=Te(p,ot(se(s,a),e,!0));return lr(u,i,n)}var TN=N({cosineDistance_:Tj});function _j(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(t,\"predictions\",\"hingeLoss\"),a=null;e!=null&&(a=v(e,\"weights\",\"hingeLoss\")),yt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=du(Te(i,se(n,s)));return lr(p,a,o)}var _N=N({hingeLoss_:_j});function $j(r,t,e,o=1,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(t,\"predictions\",\"huberLoss\"),i=null;e!=null&&(i=v(e,\"weights\",\"huberLoss\")),yt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=Jt(Te(a,s)),c=Yu(u,p),l=Te(u,c),m=Ce(se(ke(.5),er(c)),se(p,l));return lr(m,i,n)}var $N=N({huberLoss_:$j});function Ej(r,t,e,o=1e-7,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(t,\"predictions\",\"logLoss\"),i=null;e!=null&&(i=v(e,\"weights\",\"logLoss\")),yt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),c=cr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return lr(m,i,n)}var EN=N({logLoss_:Ej});function Rj(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(t,\"predictions\",\"meanSquaredError\"),a=null;e!=null&&(a=v(e,\"weights\",\"meanSquaredError\")),yt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=qd(n,s);return lr(i,a,o)}var RN=N({meanSquaredError_:Rj});function Dj(r,t){let e=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(t,\"logits\",\"sigmoidCrossEntropyWithLogits\");yt(e.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=du(o),s=se(o,e),a=Nd($o(cr(Jt(o))));return Ce(Te(n,s),a)}function Aj(r,t,e,o=0,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(t,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(e!=null&&(i=v(e,\"weights\",\"sigmoidCrossEntropy\")),yt(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=Dj(s,a);return lr(p,i,n)}var DN=N({sigmoidCrossEntropy_:Aj});function Fj(r,t,e=-1){if(e===-1&&(e=t.rank-1),e!==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 ${e}`);return vr((n,s,a)=>{let p=$d(s,[e],!0),u=Te(We(s,\"float32\"),p);a([n,u]);let c=cr(se(u,n));return{value:ot(c,[e]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[e]);return[se(W(d,x),Te(We(h,\"float32\"),$o(g))),se(W(d,x),Te($o(g),We(h,\"float32\")))]}}})(r,t)}function Pj(r,t,e,o=0,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(t,\"logits\",\"softmaxCrossEntropy\"),i=null;if(e!=null&&(i=v(e,\"weights\",\"softmaxCrossEntropy\")),yt(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=Fj(s,a);return lr(p,i,n)}var AN=N({softmaxCrossEntropy_:Pj});function Oj(r,t,e,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(t,\"values\",\"sparseFillEmptyRows\"),a=v(e,\"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(ji,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var FN=N({sparseFillEmptyRows_:Oj});function Mj(r,t,e){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(t,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(e,\"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(ti,a);return{outputIndices:i[0],outputShape:i[1]}}var PN=N({sparseReshape_:Mj});function Lj(r,t,e){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(t,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(e,\"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 ON=N({sparseSegmentMean_:Lj});function Bj(r,t,e){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(t,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(e,\"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 MN=N({sparseSegmentSum_:Bj});function zj(r,t,e,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(t,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let c={separator:e,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 LN=N({stringNGrams_:zj});function Vj(r,t,e=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(t,\"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:e},a={input:o,delimiter:n},i=T.runKernel(Yi,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var BN=N({stringSplit_:Vj});function Wj(r,t){let e=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:t};if(t<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:e};return T.runKernel(Qi,n,o)}var zN=N({stringToHashBucketFast_:Wj});function Uj(r,t,e,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:t,rewrite:e,replaceGlobal:o};return T.runKernel(Ou,{x:n},s)}var VN=N({staticRegexReplace_:Uj});var Gj={fft:fc,ifft:Ju,rfft:hc,irfft:Kd},Hj={hammingWindow:oN,hannWindow:Zd,frame:Jd,stft:nN},Kj={flipLeftRight:aN,grayscaleToRGB:iN,resizeNearestNeighbor:bN,resizeBilinear:yN,rgbToGrayscale:uN,rotateWithOffset:pN,cropAndResize:sN,nonMaxSuppression:cN,nonMaxSuppressionAsync:dN,nonMaxSuppressionWithScore:fN,nonMaxSuppressionWithScoreAsync:hN,nonMaxSuppressionPadded:gN,nonMaxSuppressionPaddedAsync:xN,threshold:CN,transform:wN},qj={bandPart:SN,gramSchmidt:IN,qr:kN},jj={absoluteDifference:NN,computeWeightedLoss:lr,cosineDistance:TN,hingeLoss:_N,huberLoss:$N,logLoss:EN,meanSquaredError:RN,sigmoidCrossEntropy:DN,softmaxCrossEntropy:AN},Xj={sparseFillEmptyRows:FN,sparseReshape:PN,sparseSegmentMean:ON,sparseSegmentSum:MN},Yj={stringNGrams:LN,stringSplit:BN,stringToHashBucketFast:zN,staticRegexReplace:VN};var WN={};qe(WN,{Serializable:()=>Dl,SerializationMap:()=>Fa,getRegisteredName:()=>Zj,registerClass:()=>tS});var Qj=new Map,eS=new Map,Dl=class{getClassName(){return this.constructor.className}static fromConfig(t,e){return new t(e)}},Fa=class{constructor(){this.classNameMap={}}static getMap(){return Fa.instance==null&&(Fa.instance=new Fa),Fa.instance}static register(t){Fa.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function tS(r,t,e){$(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),$(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),$(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),typeof t==\"undefined\"&&(t=\"Custom\"),typeof e==\"undefined\"&&(e=r.className);let o=e,n=t+\">\"+o;return Fa.register(r),Qj.set(n,r),eS.set(r,n),r}function Zj(r){return eS.has(r)?eS.get(r):r.className}var Nr=class extends Dl{minimize(t,e=!1,o){let{value:n,grads:s}=this.computeGradients(t,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Mt(s),e?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,e){return zw(t,e)}dispose(){this.iterations_!=null&&Mt(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(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(Nr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var np=class extends Nr{static get className(){return\"Adadelta\"}constructor(t,e,o=null){super(),this.learningRate=t,this.rho=e,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Ht(s).variable(a))});let i=Array.isArray(t)?t[n].tensor:t[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(er(i),1-this.rho)),l=se(je(Dr(Ce(u,this.epsilon)),Dr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(er(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&&(Mt(this.accumulatedGrads.map(t=>t.variable)),Mt(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=t.length/2,o=!1;this.accumulatedGrads=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.rho,e.epsilon)}};var sp=class extends Nr{static get className(){return\"Adagrad\"}constructor(t,e=.1){super(),this.learningRate=t,this.initialAccumulatorValue=e,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ea(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(t)?t[n].tensor:t[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,er(a));i.assign(p);let u=Ce(se(je(a,Dr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Mt(this.accumulatedGrads.map(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulatedGrads=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,e){return new t(e.learningRate,e.initialAccumulatorValue)}};var ap=class extends Nr{static get className(){return\"Adam\"}constructor(t,e,o,n=null){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(e).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);e.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Ht(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Ht(i).variable(p))});let u=Array.isArray(t)?t[a].tensor:t[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(er(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(Dr(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&&Mt(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedSecondMoment!=null&&Mt(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(this.beta2,this.iterations_+1))});let e=t.length/2,o=!1;this.accumulatedFirstMoment=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=t.slice(e,e*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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)}};var ip=class extends Nr{static get className(){return\"Adamax\"}constructor(t,e,o,n=null,s=0){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(e).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));e.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ht(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Ht(i).variable(p)});let u=Array.isArray(t)?t[a].tensor:t[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=Jt(u),h=Fd(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&&Mt(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&Mt(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error(\"getWeights() is not implemented for Adamax yet.\")}async setWeights(t){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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)}};var mi=class extends Nr{static get className(){return\"SGD\"}constructor(t){super(),this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=Array.isArray(t)?t[n].tensor:t[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(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=Rr(ke(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error(\"SGD optimizer does not have settable weights.\")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,e){return new t(e.learningRate)}};var up=class extends mi{static get className(){return\"Momentum\"}constructor(t,e,o=!1){super(t),this.learningRate=t,this.momentum=e,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Ht(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(t)?t[n].tensor:t[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&&Mt(this.accumulations.map(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulations=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)}};var pp=class extends Nr{static get className(){return\"RMSProp\"}constructor(t,e=.9,o=0,n=null,s=!1){if(super(),this.learningRate=t,this.decay=e,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),t==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Ht(s).variable(a))});let i=Array.isArray(t)?t[n].tensor:t[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(er(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),Dr(Te(c,Ce(er(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(er(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Dr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Mt(this.accumulatedMeanSquares.map(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Mt(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&Mt(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=this.centered?t.length/3:t.length/2,o=!1;this.accumulatedMeanSquares=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=t.slice(e*2,e*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(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)}};var Jj=[np,sp,ap,ip,up,pp,mi];function UN(){for(let r of Jj)tS(r)}var fi={};qe(fi,{CompositeArrayBuffer:()=>jt,browserFiles:()=>HN,browserHTTPRequest:()=>jN,concatenateArrayBuffers:()=>ik,copyModel:()=>wk,decodeWeights:()=>ad,encodeWeights:()=>nk,fromMemory:()=>XN,fromMemorySync:()=>iS,getLoadHandlers:()=>lk,getModelArtifactsForJSON:()=>ic,getModelArtifactsForJSONSync:()=>_w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>ck,getWeightSpecs:()=>ud,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>bk,loadWeights:()=>KN,moveModel:()=>Sk,registerLoadRouter:()=>pk,registerSaveRouter:()=>uk,removeModel:()=>Ck,weightsLoaderFactory:()=>sS,withSaveHandler:()=>YN,withSaveHandlerSync:()=>QN});var eX=\"model\",tX=\".json\",rX=\".weights.bin\";function GN(r){return new Promise(t=>setTimeout(t)).then(r)}var di=class{constructor(t){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");t.startsWith(di.URL_SCHEME)&&(t=t.slice(di.URL_SCHEME.length)),(t==null||t.length===0)&&(t=eX),this.modelJsonFileName=t+tX,this.weightDataFileName=t+rX}async save(t){if(typeof document==\"undefined\")throw new Error(\"Browser downloads are not supported in this environment since `document` is not present\");let e=jt.join(t.weightData),o=window.URL.createObjectURL(new Blob([e],{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 n=[{paths:[\"./\"+this.weightDataFileName],weights:t.weightSpecs}],s=id(t,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 GN(()=>i.dispatchEvent(new MouseEvent(\"click\"))),t.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await GN(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:va(t)}}}};di.URL_SCHEME=\"downloads://\";var rS=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:a});return}let p=ic(s,u=>this.loadWeights(u));t(p)},o.onerror=n=>e(`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(t){let e=[],o=[];for(let a of t)e.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(t),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[e,a])}loadWeightsFile(t,e){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 '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],o=this.weightsFiles.map(s=>Tw(s.name)),n={};for(let s of t)s.paths.forEach(a=>{let i=Tw(a);if(e.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(e.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(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},oX=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(di.URL_SCHEME)?nX(r.slice(di.URL_SCHEME.length)):null;ft.registerSaveRouter(oX);function nX(r=\"model\"){return new di(r)}function HN(r){return new rS(r)}function oS(r,t,e,o){a(r),e=e==null?0:e,o=o==null?1:o,i(e,o);let n=0,s=p=>(p.then(u=>{let c=e+ ++n/r.length*(o-e);return t(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function nS(r,t){t==null&&(t={});let e=t.fetchFunc==null?A().platform.fetch:t.fetchFunc,o=r.map(l=>e(l,t.requestInit,{isBinary:!0})),n=0,s=.5,i=(t.onProgress==null?await Promise.all(o):await oS(o,t.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return t.onProgress==null?await Promise.all(i):await oS(i,t.onProgress,p,u)}async function KN(r,t=\"\",e,o){return sS(a=>nS(a,{requestInit:o}))(r,t,e)}function sS(r){return async(t,e=\"\",o)=>{let n=t.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(t.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x=\"quantization\"in g?g.quantization.dtype:g.dtype,b=Il[x]*He(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=>{t[d].paths.forEach(f=>{let h=e+(e.endsWith(\"/\")?\"\":\"/\")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=t[d].paths.length,h=new jt(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=ad(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var sX=\"application/octet-stream\",aX=\"application/json\",Al=class{constructor(t,e){if(this.DEFAULT_METHOD=\"POST\",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?($(typeof e.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=e.fetchFunc):this.fetch=A().platform.fetch,$(t!=null&&t.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(t)&&$(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let o=[{paths:[\"./model.weights.bin\"],weights:t.weightSpecs}],n=id(t,o);if(e.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:aX}),\"model.json\"),t.weightData!=null){let a=jt.join(t.weightData);e.body.append(\"model.weights.bin\",new Blob([a],{type:sX}),\"model.weights.bin\")}let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:va(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.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=e.modelTopology,n=e.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 ic(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=iX(e),s=this.weightPathPrefix||o,a=ud(t),i=[],p=[];for(let c of t)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await nS(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,u]}};Al.URL_SCHEME_REGEX=/^https?:\\/\\//;function iX(r){let t=r.lastIndexOf(\"/\"),e=r.lastIndexOf(\"?\"),o=r.substring(0,t),n=e>t?r.substring(e):\"\";return[o+\"/\",n]}function of(r){return r.match(Al.URL_SCHEME_REGEX)!=null}var qN=(r,t)=>{if(typeof fetch==\"undefined\"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(o=>of(o)):e=of(r),e)return nf(r,t)}return null};ft.registerSaveRouter(qN);ft.registerLoadRouter(qN);function nf(r,t){return new Al(r,t)}function jN(r,t){return nf(r,t)}var Fl=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},sf=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},aS=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function XN(r,t,e,o){let n=arguments;return new aS(iS(...n))}function iS(r,t,e,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Fl(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 Fl({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 Fl({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:o}))}function YN(r){return new sf(r)}function QN(r){return new sf(r)}var JN={};qe(JN,{confusionMatrix:()=>ZN});function uX(r,t,e){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(t,\"predictions\",\"confusionMatrix\");$(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=El(We(o,\"int32\"),e),a=El(We(n,\"int32\"),e),i=yc(s),p=Ze(i,a);return We(p,\"int32\")}var ZN=N({confusionMatrix_:uX});var oT={};qe(oT,{draw:()=>gX,fromPixels:()=>xX,fromPixelsAsync:()=>dX,toPixels:()=>hX});var cp,eT=!1;function tT(r,t=3){if(t>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 e=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)e=!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(tc(Mu,T.backendName)!=null){let f={pixels:r},h={numChannels:t};return T.runKernel(Mu,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||e)l=r.data;else if(s||n||i){if(cp==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")cp=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else cp=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});cp.canvas.width=u,cp.canvas.height=c,cp.drawImage(r,0,0,u,c),l=cp.getImageData(0,0,u,c).data}let m;if(t===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*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(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function fX(r){let t=(r==null?void 0:r.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function hX(r,t){let e=v(r,\"img\",\"toPixels\");if(!(r instanceof ut)){let u=e;e=We(u,\"int32\"),u.dispose()}rT(e);let[o,n]=e.shape.slice(0,2),s=e.rank===2?1:e.shape[2],a=await e.data(),i=e.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(e.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(t!=null){eT||tc(Pu,T.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),eT=!0),t.width=n,t.height=o;let u=t.getContext(\"2d\"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return e!==r&&e.dispose(),p}function gX(r,t,e){let o=v(r,\"img\",\"draw\");if(!(r instanceof ut)){let a=o;o=We(a,\"int32\"),a.dispose()}rT(o),fX(e==null?void 0:e.imageOptions);let n={image:o},s={canvas:t,options:e};T.runKernel(Pu,n,s)}var xX=N({fromPixels_:tT});var af={};qe(af,{prepareAndValidate:()=>nT});function nT(r,t){let e=r.shape.length,o=t.shape.length;if(e<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);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[o-1]>e)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[o-1]} vs. ${e}`);if(He(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=t.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var ct={};qe(ct,{assertParamsValid:()=>bX,computeFlatOffset:()=>vX,computeOutShape:()=>wX,getNormalizedAxes:()=>SX,isSliceContinous:()=>IX,maskToAxes:()=>CX,parseSliceParams:()=>kX,sliceInfo:()=>NX,startForAxis:()=>mT,startIndicesWithElidedDims:()=>pT,stopForAxis:()=>dT,stopIndicesWithElidedDims:()=>cT,stridesForAxis:()=>lT,stridesWithElidedDims:()=>aT});var uS=-2,yX=-1;function bX(r,t,e){let o=r.shape.length;$(o===t.length,()=>`Error in slice${o}D: Length of begin ${t} must match the rank of the array (${o}).`),$(o===e.length,()=>`Error in slice${o}D: Length of size ${e} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${t[n]+e[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function CX(r){let t=[],e=0;for(;r>0;)r&1&&t.push(e),r/=2,e++;return t}function wX(r,t,e){let o=[];for(let n=0;n0){let d=t[0],f=e+1;c=pT(a,d,f,o,r),l=cT(i,d,f,n,r),m=aT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=iT(t,e,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=iT(t,e,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=qp(0,a,p-1),a}function dT(r,t,e,o,n,s){let a=t[n],i=e[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=qp(0,a,p):a=qp(-1,a,p-1),a}function IX(r,t,e){let o=e.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||e[n]!==r[n])return!1;return!0}function vX(r,t){let e=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return e==null?s=new Array(n).fill(-1):typeof e==\"number\"?s=[e,...new Array(n-1).fill(-1)]:e.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function NX(r,t,e,o,n,s,a,i,p){let u;if(o==null?(u=new Array(t.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:t.slice(),end:e.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]=sT(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=sT(m.end[C],1,m.strides[C],k,_,E);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===uS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==uS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function TX(r,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let e=0;t.beginValid=r.begin!=null,t.endValid=r.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 o=0;o0?s[t]:s[t+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var _X=\"4.11.0\";var Pl=class{static sgd(t){return new mi(t)}static momentum(t,e,o=!1){return new up(t,e,o)}static rmsprop(t,e=.9,o=0,n=null,s=!1){return new pp(t,e,o,n,s)}static adam(t=.001,e=.9,o=.999,n=null){return new ap(t,e,o,n)}static adadelta(t=.001,e=.95,o=null){return new np(t,e,o)}static adamax(t=.002,e=.9,o=.999,n=null,s=0){return new ip(t,e,o,n,s)}static adagrad(t,e=.1){return new sp(t,e)}};var TGe=Pl;var $X=(()=>typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r())();function pS(){return new Promise(r=>$X(()=>r()))}var w={};qe(w,{ERF_A1:()=>KX,ERF_A2:()=>qX,ERF_A3:()=>jX,ERF_A4:()=>XX,ERF_A5:()=>YX,ERF_P:()=>HX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Pa,SELU_SCALE:()=>GX,SELU_SCALEALPHA:()=>UX,applyActivation:()=>rp,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>tK,assertParamsConsistent:()=>EX,assignToTypedArray:()=>r5,axesAreInnerMostDims:()=>Bw,calculateShapes:()=>V1,checkEinsumDimSizes:()=>u5,checkPadOnDimRoundingMode:()=>Bt,combineLocations:()=>x2,combineRaggedTensorToTensorShapes:()=>DX,complexWithEvenIndex:()=>JX,complexWithOddIndex:()=>e5,computeConv2DInfo:()=>Hu,computeConv3DInfo:()=>Mk,computeDefaultPad:()=>Lw,computeDilation2DInfo:()=>J4,computeOptimalWindowSize:()=>OX,computeOutAndReduceShapes:()=>eK,computeOutShape:()=>RX,computePool2DInfo:()=>Mw,computePool3DInfo:()=>eH,convertConv2DDataFormat:()=>Lk,decodeEinsumEquation:()=>a5,eitherStridesOrDilationsAreOne:()=>xr,expandShapeToKeepDim:()=>ii,exponent:()=>n5,exponents:()=>o5,fromStringArrayToUint8:()=>$5,fromUint8ToStringArray:()=>_5,getAxesPermutation:()=>rK,getBroadcastDims:()=>m2,getComplexWithIndex:()=>t5,getEinsumComputePath:()=>p5,getEinsumPermutation:()=>i5,getFusedBiasGradient:()=>tp,getFusedDyActivation:()=>ep,getImageCenter:()=>MX,getInnerMostAxes:()=>nK,getPermuted:()=>BX,getRaggedRank:()=>FX,getReductionAxes:()=>yd,getReshaped:()=>LX,getReshapedPermuted:()=>zX,getRowPartitionTypesHelper:()=>AX,getSliceBeginCoords:()=>VX,getSliceSize:()=>WX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>d5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>f5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>h5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>y5,getSparseReshapeInputOutputMismatchErrorMessage:()=>C5,getSparseReshapeInputOutputMultipleErrorMessage:()=>b5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>g5,getSparseReshapeNegativeOutputDimErrorMessage:()=>x5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>v5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>w5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>S5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>I5,getUndoAxesPermutation:()=>oK,isIdentityPermutation:()=>c5,log:()=>jG,mergeRealAndImagArrays:()=>QX,prepareAndValidate:()=>nT,prepareSplitSize:()=>m5,segment_util:()=>lS,shouldFuse:()=>op,slice_util:()=>ct,splitRealAndImagArrays:()=>ZX,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Gu,upcastType:()=>dt,validateDefaultValueShape:()=>PX,validateInput:()=>xc,validateUpdateShape:()=>Yw,warn:()=>Ia});function EX(r,t){let e=r[0].length;r.forEach((n,s)=>{$(n.length===e,()=>`Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`)}),$(t>=0&&t`Error in concat${e}D: axis must be between 0 and ${e-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${e}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function RX(r,t){let e=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function AX(r){let t={FIRST_DIM_SIZE:Pa.FIRST_DIM_SIZE,VALUE_ROWIDS:Pa.VALUE_ROWIDS,ROW_LENGTHS:Pa.ROW_LENGTHS,ROW_SPLITS:Pa.ROW_SPLITS,ROW_LIMITS:Pa.ROW_LIMITS,ROW_STARTS:Pa.ROW_STARTS},e=[];for(let o of r)if(o in t)e.push(t[o]);else break;return e}function FX(r){return r.length===0?0:r[0]===Pa.FIRST_DIM_SIZE?r.length-1:r.length}function PX(r,t){if(r==null||t==null)return;let e=r.length,o=t.length;if(e>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${e} 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=${t} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var uf=30;function OX(r){return r<=uf?r:Xp(r,Math.floor(Math.sqrt(r)))}function MX(r,t,e){let o=e*(typeof r==\"number\"?r:r[0]),n=t*(typeof r==\"number\"?r:r[1]);return[o,n]}function LX(r,t,e,o=!0){let n=[];if(o)n=n.concat(t.slice(0)),n.push(r[0]/e),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=t.length;for(let a=0;a=t*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function zX(r,t,e,o=!0){let n=[];o?n.push(r[0]/e):n.push(r[0]*e);for(let s=1;s\",s5=/->/g,fT=\",\",hT=\"...\";function a5(r,t){r=r.replace(/\\s/g,\"\");let e=(r.length-r.replace(s5,\"\").length)/cS.length;if(e<1)throw new Error(\"Equations without an arrow are not supported.\");if(e>1)throw new Error(`Equation must contain exactly one arrow (\"${cS}\").`);let[o,n]=r.split(cS);$(o.indexOf(hT)===-1,()=>`The ellipsis notation (\"${hT}\") is not supported yet.`);let s=o.split(fT),a=s.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);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:e,expandDims:o}}function u5(r,t,e){let o=new Array(r);for(let n=0;n`Expected dimension ${o[t[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function p5(r,t){let e=r,o=[],n=0;r.length===0&&e.push(-1),n=r.length+1;for(let a=0;at===e)}function l5(r,t){let e=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(t).fill(r.shape[e]/t);else{let n=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>\"There should be only one negative value in split array.\");let s=t.indexOf(-1);if(s!==-1){let a=t.reduce((i,p)=>p>0?i+p:i);t[s]=r.shape[e]-a}$(r.shape[e]===t.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=t}return o}function d5(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function f5(r,t){return`indices(${r}, 0) is invalid: ${t} < 0`}function h5(r,t,e){return`indices(${r}, 0) is invalid: ${t} >= ${e}`}function g5(r,t){return`only one output dimension may be -1, not both ${r} and ${t}`}function x5(r,t){return`size ${r} must be non-negative, not ${t}`}function y5(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function b5(r,t){let e=He(r),o=He(t);return`Input to reshape is a SparseTensor with ${e}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${t}`}function C5(r,t){let e=He(r),o=He(t);return`Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${t}`}function w5(){return\"segment ids must be >= 0\"}function S5(){return\"segment ids are not increasing\"}function I5(r,t){return`Segment id ${r} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function v5(r,t,e){return`Bad: indices[${r}] == ${t} out of range [0, ${e})`}var lS={};qe(lS,{collectGatherOpShapeInfo:()=>T5,computeOutShape:()=>N5,segOpComputeOptimalWindowSize:()=>k5});function k5(r,t){let e=!1,o;for(r<=uf?(o=r,e=!0):o=Xp(r,Math.floor(Math.sqrt(r)));!e;)o>t||o===r?e=!0:o=Xp(r,o+1);return o}function N5(r,t,e){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(esc(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function $5(r){return r.map(t=>tu(t))}var Wt={};qe(Wt,{nonMaxSuppressionV3Impl:()=>ef,nonMaxSuppressionV4Impl:()=>tf,nonMaxSuppressionV5Impl:()=>rf,whereImpl:()=>Yd});UN();var E5=A();E5.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 ho;(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\"})(ho||(ho={}));var gT;(function(r){let t;(function(e){e[e.LEGACY=0]=\"LEGACY\",e[e.V1=1]=\"V1\",e[e.V2=2]=\"V2\"})(t=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(gT||(gT={}));var dS={};function D5(r,t){let e={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:t};dS[r]=e}function pf(r){return dS[r]}function A5(r){delete dS[r]}function I(r,t,e,o,n){let s=t.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?t.inputNames.length+i:i;if(s.type===\"tensor\")return zt(t.inputNames[u],e,o,n);if(s.type===\"tensors\"){let m=t.inputs.slice(i,p);return t.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!==\"NoOp\"}).map(f=>zt(f,e,o,n))}let c=zt(t.inputNames[u],e,o,n),l=c.dataSync();return s.type===\"number\"?l[0]:y.toNestedArray(c.shape,l)}let a=t.attrParams[r];return a&&a.value}function zt(r,t,e,o){let[n,s]=Tr(r,e);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=e.currentContextIds.find(i=>!!t[cf(n,i)]);return a!==void 0?t[cf(n,a)][s]:void 0}function fS(r,t,e){return t[cf(r,e.currentContextId)]}function Ls(r,t){let[e,o,n]=Tr(r,t);return[cf(e,t&&t.currentContextId),o,n]}function cf(r,t){return t?`${r}-${t}`:r}function Tr(r,t){if(r===\"\")return[\"\",0,void 0];let e=t!=null&&t.parseNodeNameCache!=null;if(e){let s=t.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 e&&t.parseNodeNameCache.set(r,n),n}function Ol(r,t,e){let o=I(\"pad\",r,t,e);if(o===\"explicit\"){o=I(\"explicitPaddings\",r,t,e);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 hS={};qe(hS,{json:()=>F5});var F5=[{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 gS={};qe(gS,{json:()=>P5});var P5=[{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 xS={};qe(xS,{json:()=>O5});var O5=[{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 yS={};qe(yS,{json:()=>M5});var M5=[{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 bS={};qe(bS,{json:()=>L5});var L5=[{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 CS={};qe(CS,{json:()=>B5});var B5=[{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 wS={};qe(wS,{json:()=>z5});var z5=[{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 SS={};qe(SS,{json:()=>V5});var V5=[{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 IS={};qe(IS,{json:()=>W5});var W5=[{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 vS={};qe(vS,{json:()=>U5});var U5=[{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 kS={};qe(kS,{json:()=>G5});var G5=[{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 NS={};qe(NS,{json:()=>H5});var H5=[{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 TS={};qe(TS,{json:()=>K5});var K5=[{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 _S={};qe(_S,{json:()=>q5});var q5=[{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:()=>j5});var j5=[{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 ES={};qe(ES,{json:()=>X5});var X5=[{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 RS={};qe(RS,{json:()=>Y5});var Y5=[{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 DS={};qe(DS,{json:()=>Q5});var Q5=[{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 AS={};qe(AS,{json:()=>Z5});var Z5=[{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 Ml=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[hS,gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,$S,ES,RS,DS,AS],e=[].concat(...t.map(o=>o.json));this.opMappers=e.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(t,e={}){let o=t.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={};e!=null&&(c=this.mapSignatureEntries(e.inputs),l=this.mapSignatureEntries(e.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 E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=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={};t.library!=null&&t.library.function!=null&&(d=t.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:e,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(t){return Object.keys(t||{}).reduce((e,o)=>(e[t[o].name]=o,e),{})}mapNode(t){let e=pf(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let o={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:e.outputs};return e.inputs!=null&&(o.inputParams=e.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),e.attrs!=null&&(o.attrParams=e.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=lf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=yf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=df(t.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=xf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=mf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=Cf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=gf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=bf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=ff(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=hf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=xT(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xT(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${t.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(t){let e=t.nodeDef,o=[],n=[],s={};e!=null&&(s=e.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(l[m.name]),l),{}));let a=[],i=[];t.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:FS(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=t.ret;t.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(t);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o),e),{}),outputs:t.signature.outputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o,t.ret),e),{})}}mapArgToTensorInfo(t,e){let o=t.name;return e!=null&&(o=e[o]),{name:o,dtype:t.type}}};function J5(r){let t=A().global;if(typeof t.atob!=\"undefined\")return t.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 yT(r,t){let e=Array.isArray(r)?String.fromCharCode.apply(null,r):J5(r);return t?e:e.toLowerCase()}function lf(r,t,e,o=!1){let n=r[t];return n!=null?yT(n.s,o):e}function mf(r,t,e){let o=r[t];return o?o.b:e}function df(r,t,e){let o=r[t]||{},n=o.i!=null?o.i:o.f!=null?o.f:e;return typeof n==\"number\"?n:parseInt(n,10)}function FS(r){switch(typeof r==\"string\"&&(r=ho[r]),r){case ho.DT_FLOAT:case ho.DT_HALF:return\"float32\";case ho.DT_INT32:case ho.DT_INT64:case ho.DT_INT8:case ho.DT_UINT8:return\"int32\";case ho.DT_BOOL:return\"bool\";case ho.DT_DOUBLE:return\"float32\";case ho.DT_STRING:return\"string\";default:return null}}function xT(r,t,e){let o=r[t];return o&&o.func?o.func.name:e}function ff(r,t,e){let o=r[t];return o&&o.type?FS(o.type):e}function hf(r,t,e){let o=r[t];return o&&o.list&&o.list.type?o.list.type.map(n=>FS(n)):e}function bT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(t=>typeof t.size==\"number\"?t.size:parseInt(t.size,10)):[]}function gf(r,t,e){let o=r[t];return o&&o.shape?bT(o.shape):e}function xf(r,t,e){let o=r[t];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):e}function yf(r,t,e,o=!1){let n=r[t];return n&&n.list&&n.list.s?n.list.s.map(s=>yT(s,o)):e}function bf(r,t,e){let o=r[t];return o&&o.list&&o.list.shape?o.list.shape.map(n=>bT(n)):e}function Cf(r,t,e){let o=r[t];return o&&o.list&&o.list.b?o.list.b:e}var wf=class{constructor(t,e,o){this.node=t,this.tensorMap=e,this.context=o,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(n=>this.getInput(n)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(t){return zt(t,this.tensorMap,this.context)}getAttr(t,e){let o=this.node.rawAttrs[t];if(o.tensor!=null)return zt(t,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,t,e);if(o.s!=null)return lf(this.node.rawAttrs,t,e);if(o.b!=null)return mf(this.node.rawAttrs,t,e);if(o.shape!=null)return gf(this.node.rawAttrs,t,e);if(o.type!=null)return ff(this.node.rawAttrs,t,e);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,t,e);if(o.list.s!=null)return yf(this.node.rawAttrs,t,e);if(o.list.shape!=null)return bf(this.node.rawAttrs,t,e);if(o.list.b!=null)return Cf(this.node.rawAttrs,t,e);if(o.list.type!=null)return hf(this.node.rawAttrs,t,e)}return e}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>kw,abs:()=>Jt,acos:()=>kk,acosh:()=>Nk,add:()=>Ce,addN:()=>Tk,all:()=>_k,any:()=>$k,argMax:()=>Ek,argMin:()=>Rk,asin:()=>Dk,asinh:()=>Ak,atan:()=>Fk,atan2:()=>Pk,atanh:()=>Ok,avgPool:()=>fd,avgPool3d:()=>Bk,basicLSTMCell:()=>zk,batchNorm:()=>au,batchNorm2d:()=>Wk,batchNorm3d:()=>Uk,batchNorm4d:()=>Gk,batchToSpaceND:()=>hd,bincount:()=>gd,bitwiseAnd:()=>Hk,booleanMaskAsync:()=>E6,broadcastArgs:()=>Kk,broadcastTo:()=>iu,buffer:()=>me,cast:()=>We,ceil:()=>qk,clipByValue:()=>jk,clone:()=>Ur,complex:()=>Er,concat:()=>bt,concat1d:()=>Xk,concat2d:()=>Yk,concat3d:()=>Qk,concat4d:()=>Zk,conv1d:()=>Jk,conv2d:()=>uu,conv2dTranspose:()=>e2,conv3d:()=>t2,conv3dTranspose:()=>o2,cos:()=>n2,cosh:()=>s2,cosineWindow:()=>Rl,cumprod:()=>a2,cumsum:()=>i2,denseBincount:()=>u2,depthToSpace:()=>p2,depthwiseConv2d:()=>lc,diag:()=>c2,dilation2d:()=>l2,div:()=>je,divNoNan:()=>d2,dot:()=>f2,dropout:()=>W6,einsum:()=>pu,elu:()=>Cd,enclosingPowerOfTwo:()=>Qw,ensureShape:()=>h2,equal:()=>bd,erf:()=>g2,euclideanNorm:()=>b2,exp:()=>$o,expandDims:()=>Ms,expm1:()=>C2,eye:()=>wd,fft:()=>fc,fill:()=>Ea,floor:()=>Sd,floorDiv:()=>dd,fused:()=>Zw,gather:()=>Id,gatherND:()=>z6,greater:()=>qu,greaterEqual:()=>vd,ifft:()=>Ju,imag:()=>lu,image:()=>Kj,inTopKAsync:()=>G6,irfft:()=>Kd,isFinite:()=>w2,isInf:()=>S2,isNaN:()=>I2,leakyRelu:()=>kd,less:()=>_l,lessEqual:()=>mc,linalg:()=>qj,linspace:()=>v2,localResponseNormalization:()=>k2,log:()=>pi,log1p:()=>Nd,logSigmoid:()=>N2,logSoftmax:()=>T2,logSumExp:()=>$d,logicalAnd:()=>ju,logicalNot:()=>Ed,logicalOr:()=>Rd,logicalXor:()=>_2,losses:()=>jj,lowerBound:()=>$2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Ad,maxPool3d:()=>E2,maxPoolWithArgmax:()=>R2,maximum:()=>Fd,mean:()=>Xu,meshgrid:()=>D2,min:()=>Tl,minimum:()=>Yu,mirrorPad:()=>A2,mod:()=>F2,moments:()=>P2,movingAverage:()=>A6,mul:()=>se,multiRNNCell:()=>O2,multinomial:()=>M2,neg:()=>cr,norm:()=>Ku,notEqual:()=>Pd,oneHot:()=>El,ones:()=>Da,onesLike:()=>L2,op:()=>N,outerProduct:()=>B2,pad:()=>Aa,pad1d:()=>z2,pad2d:()=>V2,pad3d:()=>W2,pad4d:()=>U2,pool:()=>G2,pow:()=>ui,prelu:()=>Md,print:()=>md,prod:()=>H2,raggedGather:()=>K2,raggedRange:()=>q2,raggedTensorToTensor:()=>j2,rand:()=>X2,randomGamma:()=>g1,randomNormal:()=>Ud,randomStandardNormal:()=>x1,randomUniform:()=>dc,randomUniformInt:()=>y1,range:()=>mu,real:()=>ci,reciprocal:()=>b1,relu:()=>du,relu6:()=>Gd,reshape:()=>W,reverse:()=>mo,reverse1d:()=>C1,reverse2d:()=>w1,reverse3d:()=>S1,reverse4d:()=>I1,rfft:()=>hc,round:()=>Hd,rsqrt:()=>v1,scalar:()=>ke,scatterND:()=>P6,searchSorted:()=>$l,selu:()=>k1,separableConv2d:()=>N1,setdiff1dAsync:()=>T1,sigmoid:()=>$a,sign:()=>_1,signal:()=>Hj,sin:()=>$1,sinh:()=>E1,slice:()=>Xe,slice1d:()=>R1,slice2d:()=>D1,slice3d:()=>A1,slice4d:()=>F1,softmax:()=>P1,softplus:()=>_d,spaceToBatchND:()=>Od,sparse:()=>Xj,sparseToDense:()=>L6,spectral:()=>Gj,split:()=>li,sqrt:()=>Dr,square:()=>er,squaredDifference:()=>qd,squeeze:()=>gc,stack:()=>kr,step:()=>jd,stridedSlice:()=>O1,string:()=>Yj,sub:()=>Te,sum:()=>ot,tan:()=>M1,tanh:()=>Nl,tensor:()=>ur,tensor1d:()=>tr,tensor2d:()=>fu,tensor3d:()=>Xd,tensor4d:()=>L1,tensor5d:()=>B1,tensor6d:()=>z1,tensorScatterUpdate:()=>W1,tile:()=>cu,topk:()=>U1,transpose:()=>yc,truncatedNormal:()=>G1,unique:()=>H1,unsortedSegmentSum:()=>K1,unstack:()=>fo,upperBound:()=>q1,variable:()=>j1,where:()=>lo,whereAsync:()=>Qd,zeros:()=>Gr,zerosLike:()=>Ht});var CT=(r,t,e,o=Je)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"AddN\":return[o.addN(I(\"tensors\",r,t,e))];case\"FloorMod\":case\"Mod\":return[o.mod(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Mul\":return[o.mul(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"RealDiv\":case\"Div\":return[o.div(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"DivNoNan\":return[o.divNoNan(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"FloorDiv\":return[o.floorDiv(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Sub\":return[o.sub(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Minimum\":return[o.minimum(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Maximum\":return[o.maximum(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Pow\":return[o.pow(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"SquaredDifference\":return[o.squaredDifference(I(\"a\",r,t,e),I(\"b\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var wT=(r,t,e,o=Je)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(I(\"x\",r,t,e))];case\"Acos\":return[o.acos(I(\"x\",r,t,e))];case\"Acosh\":return[o.acosh(I(\"x\",r,t,e))];case\"Asin\":return[o.asin(I(\"x\",r,t,e))];case\"Asinh\":return[o.asinh(I(\"x\",r,t,e))];case\"Atan\":return[o.atan(I(\"x\",r,t,e))];case\"Atan2\":return[o.atan2(I(\"x\",r,t,e),I(\"y\",r,t,e))];case\"Atanh\":return[o.atanh(I(\"x\",r,t,e))];case\"Ceil\":return[o.ceil(I(\"x\",r,t,e))];case\"Complex\":return[o.complex(I(\"real\",r,t,e),I(\"imag\",r,t,e))];case\"Cos\":return[o.cos(I(\"x\",r,t,e))];case\"Cosh\":return[o.cosh(I(\"x\",r,t,e))];case\"Elu\":return[o.elu(I(\"x\",r,t,e))];case\"Erf\":return[o.erf(I(\"x\",r,t,e))];case\"Exp\":return[o.exp(I(\"x\",r,t,e))];case\"Expm1\":return[o.expm1(I(\"x\",r,t,e))];case\"Floor\":return[o.floor(I(\"x\",r,t,e))];case\"Log\":return[o.log(I(\"x\",r,t,e))];case\"Log1p\":return[o.log1p(I(\"x\",r,t,e))];case\"Imag\":return[o.imag(I(\"x\",r,t,e))];case\"Neg\":return[o.neg(I(\"x\",r,t,e))];case\"Reciprocal\":return[o.reciprocal(I(\"x\",r,t,e))];case\"Real\":return[o.real(I(\"x\",r,t,e))];case\"Relu\":return[o.relu(I(\"x\",r,t,e))];case\"Round\":return[o.round(I(\"x\",r,t,e))];case\"Selu\":return[o.selu(I(\"x\",r,t,e))];case\"Sigmoid\":return[o.sigmoid(I(\"x\",r,t,e))];case\"Sin\":return[o.sin(I(\"x\",r,t,e))];case\"Sign\":return[o.sign(I(\"x\",r,t,e))];case\"Sinh\":return[o.sinh(I(\"x\",r,t,e))];case\"Softplus\":return[o.softplus(I(\"x\",r,t,e))];case\"Sqrt\":return[o.sqrt(I(\"x\",r,t,e))];case\"Square\":return[o.square(I(\"x\",r,t,e))];case\"Tanh\":return[o.tanh(I(\"x\",r,t,e))];case\"Tan\":return[o.tan(I(\"x\",r,t,e))];case\"ClipByValue\":return[o.clipByValue(I(\"x\",r,t,e),I(\"clipValueMin\",r,t,e),I(\"clipValueMax\",r,t,e))];case\"Relu6\":return[o.relu6(I(\"x\",r,t,e))];case\"Rsqrt\":return[o.rsqrt(zt(r.inputNames[0],t,e))];case\"LeakyRelu\":return[o.leakyRelu(I(\"x\",r,t,e),I(\"alpha\",r,t,e))];case\"Prelu\":return[o.prelu(I(\"x\",r,t,e),I(\"alpha\",r,t,e))];case\"IsNan\":return[o.isNaN(zt(r.inputNames[0],t,e))];case\"IsInf\":return[o.isInf(zt(r.inputNames[0],t,e))];case\"IsFinite\":return[o.isFinite(zt(r.inputNames[0],t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(r,t,e=\"\"){if(!(typeof r==\"number\"||typeof t==\"number\")){y.assert(r.length===t.length,()=>e+` Shapes ${r} and ${t} must match`);for(let o=0;oe+` Shapes ${r} and ${t} must match`)}}}function ST(r){return!(typeof r==\"number\"||r.some(t=>t<0))}function bc(r,t,e){let o=Sf(r,e),n=!ST(o);if(n&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&t.forEach(s=>{o=Sf(s.shape,o)}),!ST(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(r,t){if(typeof r==\"number\")return t;if(typeof t==\"number\")return r;if(r.length!==t.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${t}`);let e=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${t}`);e[o]=n>=0?n:s}return e}var If=class{constructor(t,e,o,n,s,a,i){this.name=t,this.dtype=e,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Rr(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.tensor.id))&&e.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let e=this.tensors[t];if(e.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor}readMany(t){return t.map(e=>this.read(e))}write(t,e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t},\n because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),Hr(this.elementShape,e.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);o.tensor=e,Rr(e),o.written=!0,this.tensors[t]=o}writeMany(t,e){if(t.length!==e.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${e.length}.`);t.forEach((o,n)=>this.write(o,e[n]))}gather(t,e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${e}`);if(t)t=t.slice(0,this.size());else{t=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(t,fo(e,0))}split(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);let o=0,n=t.map(p=>(o+=p,o));if(o!==e.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: ${e.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:e.size/o,a=[];De(()=>{e=W(e,[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(e,s.shape,\"TensorList shape mismatch: \"),Rr(s)}),this.idTensor=ke(0),this.maxNumElements=n,Rr(this.idTensor)}copy(){return new hi([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.id))&&e.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,e,o=-1){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, 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(t,this.elementShape,\"TensorList shape mismatch: \");let n=bc(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(a=>W(a,n));return kr(s,0)})}popBack(t,e){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error(\"Trying to pop from an empty list.\");let o=bc(this.elementShape,this.tensors,t),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,t,\"TensorList shape mismatch: \"),W(n,o)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Hr(t.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");Rr(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 e=new hi([],this.elementShape,this.elementDtype,this.maxNumElements);e.tensors.length=t;for(let o=0;othis.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.`);Hr(this.tensors[t].shape,e,\"TensorList shape mismatch: \");let n=bc(this.elementShape,this.tensors,e);return W(this.tensors[t],n)}setItem(t,e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.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.`);Hr(this.elementShape,e.shape,\"TensorList shape mismatch: \"),Rr(e),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=e}gather(t,e,o){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);Hr(this.elementShape,o,\"TensorList shape mismatch: \"),t=t.slice(0,this.size());let n=bc(this.elementShape,this.tensors,o);return t.length===0?ur([],[0].concat(n)):De(()=>{let s=t.map(a=>W(this.tensors[a],n));return kr(s,0)})}concat(t,e){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Hr(this.elementShape,e,\"TensorList shape mismatch: \");let o=bc(this.elementShape,this.tensors,e);return this.size()===0?ur([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return bt(n,0)})}};function IT(r,t,e){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!==e)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`);let n=r.shape.slice(1);Hr(n,t,\"TensorList shape mismatch: \");let s=fo(r);return new hi(s,t,o)}function vT(r,t,e,o){return new hi([],r,t,o)}function kT(r,t,e,o){if(t.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${r.shape[0]}`);let n=Math.max(...t);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new hi([],e,r.dtype,o),a=fo(r,0);return t.forEach((i,p)=>{s.setItem(i,a[p])}),s}function NT(r,t,e){let o=0,n=t.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,e),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,t,e),n=I(\"elseBranch\",r,t,e),s=I(\"cond\",r,t,e),a=I(\"args\",r,t,e);return(await s.data())[0]?e.functionMap[o].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap):e.functionMap[n].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=I(\"body\",r,t,e),n=I(\"cond\",r,t,e),s=I(\"args\",r,t,e),a=await e.functionMap[n].executeFunctionAsync(s,e.tensorArrayMap,e.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 e.functionMap[o].executeFunctionAsync(u,e.tensorArrayMap,e.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 e.functionMap[n].executeFunctionAsync(u,e.tensorArrayMap,e.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,t,e);return[Bs(o)]}case\"Switch\":{let o=I(\"pred\",r,t,e),n=I(\"data\",r,t,e);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>zt(n,t,e)!==void 0);if(o){let n=zt(o,t,e);return[Bs(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,t,e),n=I(\"tensor\",r,t,e);return e.enterFrame(o),[Bs(n)]}case\"Exit\":{let o=I(\"tensor\",r,t,e);return e.exitFrame(),[Bs(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,t,e);return e.nextIteration(),[Bs(o)]}case\"TensorArrayV3\":{let o=I(\"size\",r,t,e),n=I(\"dtype\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"dynamicSize\",r,t,e),i=I(\"clearAfterRead\",r,t,e),p=I(\"identicalElementShapes\",r,t,e),u=I(\"name\",r,t,e),c=new If(u,n,o,s,p,a,i);return e.addTensorArray(c),[c.idTensor,ke(1)]}case\"TensorArrayWriteV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"index\",r,t,e);return[e.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"dtype\",r,t,e);return[e.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id),s=I(\"dtype\",r,t,e);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"tensor\",r,t,e),s=I(\"lengths\",r,t,e),a=e.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id);return[ke(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=I(\"tensorListId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=I(\"tensorListId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=I(\"indices\",r,t,e),n=I(\"tensor\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"numElements\",r,t,e),i=kT(n,o,s,a);return e.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=I(\"elementShape\",r,t,e),n=I(\"elementDType\",r,t,e),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=I(s,r,t,e),i=r.op===\"TensorListReserve\"?-1:a,p=vT(o,n,a,i);return e.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=I(\"tensorListId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e),a=I(\"numElements\",r,t,e);return[e.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=I(\"tensor\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e),a=IT(o,n,s);return e.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=I(\"tensorListId\",r,t,e),n=e.getTensorList(o.id),s=I(\"dtype\",r,t,e),a=I(\"elementShape\",r,t,e);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"tensor\",r,t,e),s=e.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=I(\"tensor\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"lengths\",r,t,e),a=NT(o,s,n);return e.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,t,e),n=e.getTensorList(o.id);return[ke(n.size(),\"int32\")]}case\"TensorListResize\":{let o=I(\"tensorListId\",r,t,e),n=I(\"size\",r,t,e),a=e.getTensorList(o.id).resize(n);return e.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function _T(r,t,e){let[o,n]=I(\"fusedOps\",r,t,e),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=I(\"numArgs\",r,t,e);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,t,e),l=Ol(r,t,e),m=I(\"dataFormat\",r,t,e).toUpperCase(),d=I(\"dilations\",r,t,e),[f,h]=I(\"args\",r,t,e);a&&(h=f,f=void 0);let g=I(\"leakyreluAlpha\",r,t,e);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var $T=(r,t,e,o=Je)=>{switch(r.op){case\"Conv1D\":{let n=I(\"stride\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilation\",r,t,e);return[o.conv1d(I(\"x\",r,t,e),I(\"filter\",r,t,e),n,s,a,i)]}case\"Conv2D\":{let n=I(\"strides\",r,t,e),s=Ol(r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilations\",r,t,e);return[o.conv2d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[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}=_T(r,t,e);return[o.fused.conv2d({x:I(\"x\",r,t,e),filter:I(\"filter\",r,t,e),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}=_T(r,t,e);return[o.fused.depthwiseConv2d({x:I(\"x\",r,t,e),filter:I(\"filter\",r,t,e),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,t,e),s=I(\"strides\",r,t,e),a=Ol(r,t,e);return[o.conv2dTranspose(I(\"x\",r,t,e),I(\"filter\",r,t,e),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=I(\"strides\",r,t,e),s=Ol(r,t,e),a=I(\"dilations\",r,t,e),i=I(\"dataFormat\",r,t,e).toUpperCase();return[o.depthwiseConv2d(I(\"input\",r,t,e),I(\"filter\",r,t,e),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilations\",r,t,e);return[o.conv3d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.avgPool(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.maxPool(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e),i=I(\"includeBatchInIndex\",r,t,e),{result:p,indexes:u}=o.maxPoolWithArgmax(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.avgPool3d(I(\"x\",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.maxPool3d(I(\"x\",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dilations\",r,t,e),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[i,p],s,[u,c],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ET=(r,t,e,o=Je)=>{switch(r.op){case\"Fill\":{let n=I(\"shape\",r,t,e),s=I(\"dtype\",r,t,e),a=I(\"value\",r,t,e);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=I(\"start\",r,t,e),s=I(\"stop\",r,t,e),a=I(\"num\",r,t,e);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=I(\"logits\",r,t,e),s=I(\"numSamples\",r,t,e),a=I(\"seed\",r,t,e);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=I(\"indices\",r,t,e),s=I(\"depth\",r,t,e),a=I(\"onValue\",r,t,e),i=I(\"offValue\",r,t,e),p=I(\"dtype\",r,t,e);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(I(\"shape\",r,t,e),I(\"dtype\",r,t,e))];case\"OnesLike\":return[o.onesLike(I(\"x\",r,t,e))];case\"RandomStandardNormal\":return[o.randomStandardNormal(I(\"shape\",r,t,e),I(\"dtype\",r,t,e),I(\"seed\",r,t,e))];case\"RandomUniform\":return[o.randomUniform(I(\"shape\",r,t,e),I(\"minval\",r,t,e),I(\"maxval\",r,t,e),I(\"dtype\",r,t,e))];case\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,t,e),I(\"minval\",r,t,e),I(\"maxval\",r,t,e),I(\"seed\",r,t,e))];case\"Range\":{let n=I(\"start\",r,t,e),s=I(\"stop\",r,t,e),a=I(\"step\",r,t,e);return[o.range(n,s,a,I(\"dtype\",r,t,e))]}case\"TruncatedNormal\":{let n=I(\"shape\",r,t,e),s=I(\"mean\",r,t,e),a=I(\"stdDev\",r,t,e),i=I(\"seed\",r,t,e);return[o.truncatedNormal(n,s,a,I(\"dtype\",r,t,e),i)]}case\"Zeros\":return[o.zeros(I(\"shape\",r,t,e),I(\"dtype\",r,t,e))];case\"ZerosLike\":return[o.zerosLike(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PS(r,t,e){let o=I(\"boxes\",r,t,e),n=I(\"scores\",r,t,e),s=I(\"maxOutputSize\",r,t,e),a=I(\"iouThreshold\",r,t,e),i=I(\"scoreThreshold\",r,t,e),p=I(\"softNmsSigma\",r,t,e);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var RT=async(r,t,e,o,n=Je)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=PS(r,t,e),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}=PS(r,t,e),c=I(\"padToMaxOutputSize\",r,t,e),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}=PS(r,t,e);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(I(\"condition\",r,t,e),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(I(\"x\",r,t,e),I(\"y\",r,t,e));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var DT=(r,t,e,o=Je)=>{switch(r.op){case\"LowerBound\":{let n=I(\"sortedSequence\",r,t,e),s=I(\"values\",r,t,e);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=I(\"x\",r,t,e),s=I(\"k\",r,t,e),a=I(\"sorted\",r,t,e),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=I(\"sortedSequence\",r,t,e),s=I(\"values\",r,t,e);return[o.upperBound(n,s)]}case\"Unique\":{let n=I(\"x\",r,t,e),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=I(\"x\",r,t,e),s=I(\"axis\",r,t,e),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var AT=(r,t,e,o=Je)=>{switch(r.op){case\"Const\":return t[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,t,e);return[zt(r.name,t,e)||n];case\"Placeholder\":return[zt(r.name,t,e)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,t,e);return[Bs(c)]}case\"IdentityN\":return I(\"x\",r,t,e).map(c=>Bs(c));case\"Snapshot\":let s=I(\"x\",r,t,e);return[Bs(s)];case\"Shape\":return[o.tensor1d(I(\"x\",r,t,e).shape,\"int32\")];case\"ShapeN\":return I(\"x\",r,t,e).map(c=>o.tensor1d(c.shape));case\"Size\":return[o.scalar(I(\"x\",r,t,e).size,\"int32\")];case\"Rank\":return[o.scalar(I(\"x\",r,t,e).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=I(\"x\",r,t,e),i=I(\"data\",r,t,e),p=I(\"message\",r,t,e),u=I(\"summarize\",r,t,e);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let c=0;ct.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),\"int32\")}async import(t,e){this.checkKeyAndValueTensor(t,e);let o=await t.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=fo(e),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,t,e),a=I(\"valueDType\",r,t,e),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,t,e,o),s=I(\"keys\",r,t,e),a=I(\"values\",r,t,e);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=I(\"tableHandle\",r,t,e,o),s=I(\"keys\",r,t,e),a=I(\"defaultValue\",r,t,e);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=I(\"tableHandle\",r,t,e,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var PT=(r,t,e,o=Je)=>{switch(r.op){case\"ResizeBilinear\":{let n=I(\"images\",r,t,e),s=I(\"size\",r,t,e),a=I(\"alignCorners\",r,t,e),i=I(\"halfPixelCenters\",r,t,e);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=I(\"images\",r,t,e),s=I(\"size\",r,t,e),a=I(\"alignCorners\",r,t,e),i=I(\"halfPixelCenters\",r,t,e);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=I(\"image\",r,t,e),s=I(\"boxes\",r,t,e),a=I(\"boxInd\",r,t,e),i=I(\"cropSize\",r,t,e),p=I(\"method\",r,t,e),u=I(\"extrapolationValue\",r,t,e);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=I(\"images\",r,t,e),s=I(\"transforms\",r,t,e),a=I(\"outputShape\",r,t,e),i=I(\"fillValue\",r,t,e),p=I(\"interpolation\",r,t,e),u=I(\"fillMode\",r,t,e);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var OT=(r,t,e,o=Je)=>{switch(r.op){case\"Equal\":return[o.equal(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"NotEqual\":return[o.notEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Greater\":return[o.greater(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"GreaterEqual\":return[o.greaterEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Less\":return[o.less(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LessEqual\":return[o.lessEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LogicalAnd\":return[o.logicalAnd(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LogicalNot\":return[o.logicalNot(I(\"a\",r,t,e))];case\"LogicalOr\":return[o.logicalOr(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Select\":case\"SelectV2\":return[o.where(I(\"condition\",r,t,e),I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,t,e),I(\"b\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,t,e,o=Je)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(I(\"a\",r,t,e),I(\"b\",r,t,e),I(\"transposeA\",r,t,e),I(\"transposeB\",r,t,e))];case\"Einsum\":return[o.einsum(I(\"equation\",r,t,e),...I(\"tensors\",r,t,e))];case\"Transpose\":return[o.transpose(I(\"x\",r,t,e),I(\"perm\",r,t,e))];case\"_FusedMatMul\":let[n,s]=I(\"fusedOps\",r,t,e),a=n===\"biasadd\",i=s===\"prelu\",p=I(\"numArgs\",r,t,e),u=I(\"leakyreluAlpha\",r,t,e);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,t,e);return[o.fused.matMul({a:I(\"a\",r,t,e),b:I(\"b\",r,t,e),transposeA:I(\"transposeA\",r,t,e),transposeB:I(\"transposeB\",r,t,e),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,t,e),I(\"numLower\",r,t,e),I(\"numUpper\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LT=(r,t,e,o=Je)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(I(\"x\",r,t,e),I(\"axis\",r,t,e),I(\"keepDims\",r,t,e))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(I(\"x\",r,t,e),I(\"mean\",r,t,e),I(\"variance\",r,t,e),I(\"offset\",r,t,e),I(\"scale\",r,t,e),I(\"epsilon\",r,t,e))];case\"FusedBatchNormV3\":return[o.batchNorm(I(\"x\",r,t,e),I(\"mean\",r,t,e),I(\"variance\",r,t,e),I(\"offset\",r,t,e),I(\"scale\",r,t,e),I(\"epsilon\",r,t,e))];case\"LRN\":return[o.localResponseNormalization(I(\"x\",r,t,e),I(\"radius\",r,t,e),I(\"bias\",r,t,e),I(\"alpha\",r,t,e),I(\"beta\",r,t,e))];case\"Softmax\":return[o.softmax(I(\"x\",r,t,e))];case\"LogSoftmax\":return[o.logSoftmax(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,t,e,o=Je)=>{switch(r.op){case\"RaggedGather\":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I(\"paramsNestedSplits\",r,t,e),I(\"paramsDenseValues\",r,t,e),I(\"indices\",r,t,e),I(\"outputRaggedRank\",r,t,e));return n.concat(s)}case\"RaggedRange\":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I(\"starts\",r,t,e),I(\"limits\",r,t,e),I(\"splits\",r,t,e));return[n,s]}case\"RaggedTensorToTensor\":return[o.raggedTensorToTensor(I(\"shape\",r,t,e),I(\"values\",r,t,e),I(\"defaultValue\",r,t,e),I(\"rowPartitionTensors\",r,t,e),I(\"rowPartitionTypes\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,t,e,o=Je)=>{switch(r.op){case\"Max\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.max(I(\"x\",r,t,e),i,p)]}case\"Mean\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.mean(I(\"x\",r,t,e),i,p)]}case\"Min\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.min(I(\"x\",r,t,e),i,p)]}case\"Sum\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.sum(I(\"x\",r,t,e),i,p)]}case\"All\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.all(I(\"x\",r,t,e),i,p)]}case\"Any\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.any(I(\"x\",r,t,e),i,p)]}case\"ArgMax\":{let i=I(\"axis\",r,t,e);return[o.argMax(I(\"x\",r,t,e),i)]}case\"ArgMin\":{let i=I(\"axis\",r,t,e);return[o.argMin(I(\"x\",r,t,e),i)]}case\"Prod\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.prod(I(\"x\",r,t,e),i,p)]}case\"Cumprod\":{let i=I(\"axis\",r,t,e),p=I(\"exclusive\",r,t,e),u=I(\"reverse\",r,t,e);return[o.cumprod(I(\"x\",r,t,e),i,p,u)]}case\"Cumsum\":{let i=I(\"axis\",r,t,e),p=I(\"exclusive\",r,t,e),u=I(\"reverse\",r,t,e);return[o.cumsum(I(\"x\",r,t,e),i,p,u)]}case\"Bincount\":let n=I(\"x\",r,t,e),s=I(\"weights\",r,t,e),a=I(\"size\",r,t,e);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=I(\"x\",r,t,e),p=I(\"weights\",r,t,e),u=I(\"size\",r,t,e),c=I(\"binaryOutput\",r,t,e);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VT=(r,t,e,o=Je)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=I(\"n\",r,t,e),s=I(\"axis\",r,t,e),a=I(\"tensors\",r,t,e);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=I(\"x\",r,t,e),s=I(\"indices\",r,t,e);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=I(\"axis\",r,t,e),s=I(\"batchDims\",r,t,e),a=I(\"x\",r,t,e),i=I(\"indices\",r,t,e);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=I(\"dims\",r,t,e),s=[];for(let i=0;i{let n=I(\"axis\",r,t,e),s=I(\"tensors\",r,t,e),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,t,e),s=I(\"tensor\",r,t,e);return o.unstack(s,n)}case\"Tile\":{let n=I(\"reps\",r,t,e);return[o.tile(I(\"x\",r,t,e),n)]}case\"Split\":case\"SplitV\":{let n=I(\"axis\",r,t,e),s=I(\"numOrSizeSplits\",r,t,e),a=I(\"x\",r,t,e);return o.split(a,s,n)}case\"ScatterNd\":{let n=I(\"indices\",r,t,e),s=I(\"values\",r,t,e),a=I(\"shape\",r,t,e);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=I(\"x\",r,t,e),s=I(\"indices\",r,t,e);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=I(\"sparseIndices\",r,t,e),s=I(\"outputShape\",r,t,e),a=I(\"sparseValues\",r,t,e),i=I(\"defaultValue\",r,t,e);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,t,e),s=I(\"values\",r,t,e),a=I(\"tensor\",r,t,e);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,t,e,o=Je)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I(\"indices\",r,t,e),I(\"values\",r,t,e),I(\"denseShape\",r,t,e),I(\"defaultValue\",r,t,e));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I(\"inputIndices\",r,t,e),I(\"inputShape\",r,t,e),I(\"newShape\",r,t,e));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(I(\"data\",r,t,e),I(\"indices\",r,t,e),I(\"segmentIds\",r,t,e))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(I(\"data\",r,t,e),I(\"indices\",r,t,e),I(\"segmentIds\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,t,e,o=Je)=>{switch(r.op){case\"FFT\":return[o.fft(I(\"x\",r,t,e))];case\"IFFT\":return[o.ifft(I(\"x\",r,t,e))];case\"RFFT\":return[o.rfft(I(\"x\",r,t,e))];case\"IRFFT\":return[o.irfft(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,t,e,o=Je)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,t,e),I(\"pattern\",r,t,e),I(\"rewrite\",r,t,e),I(\"replaceGlobal\",r,t,e))];case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I(\"data\",r,t,e),I(\"dataSplits\",r,t,e),I(\"separator\",r,t,e),I(\"nGramWidths\",r,t,e),I(\"leftPad\",r,t,e),I(\"rightPad\",r,t,e),I(\"padWidth\",r,t,e),I(\"preserveShortSequences\",r,t,e));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I(\"input\",r,t,e),I(\"delimiter\",r,t,e),I(\"skipEmpty\",r,t,e));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(I(\"input\",r,t,e),I(\"numBuckets\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,t,e,o=Je)=>{switch(r.op){case\"Cast\":return[o.cast(I(\"x\",r,t,e),I(\"dtype\",r,t,e))];case\"ExpandDims\":{let n=I(\"axis\",r,t,e);return[o.expandDims(I(\"x\",r,t,e),n)]}case\"Squeeze\":{let n=I(\"axis\",r,t,e);return[o.squeeze(I(\"x\",r,t,e),n)]}case\"Reshape\":return[o.reshape(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"EnsureShape\":return[o.ensureShape(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"MirrorPad\":return[o.mirrorPad(I(\"x\",r,t,e),I(\"padding\",r,t,e),I(\"mode\",r,t,e))];case\"PadV2\":case\"Pad\":return[o.pad(I(\"x\",r,t,e),I(\"padding\",r,t,e),I(\"constantValue\",r,t,e))];case\"SpaceToBatchND\":{let n=I(\"blockShape\",r,t,e),s=I(\"paddings\",r,t,e);return[o.spaceToBatchND(I(\"x\",r,t,e),n,s)]}case\"BatchToSpaceND\":{let n=I(\"blockShape\",r,t,e),s=I(\"crops\",r,t,e);return[o.batchToSpaceND(I(\"x\",r,t,e),n,s)]}case\"DepthToSpace\":{let n=I(\"blockSize\",r,t,e),s=I(\"dataFormat\",r,t,e).toUpperCase();return[o.depthToSpace(I(\"x\",r,t,e),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"BroadcastArgs\":return[o.broadcastArgs(I(\"s0\",r,t,e),I(\"s1\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,t,e,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>CT(a,i,p));case\"basic_math\":return n(()=>wT(a,i,p));case\"control\":return TT(a,i,p);case\"convolution\":return n(()=>$T(a,i,p));case\"creation\":return n(()=>ET(a,i,p));case\"dynamic\":return RT(a,i,p);case\"evaluation\":return n(()=>DT(a,i,p));case\"image\":return n(()=>PT(a,i,p));case\"graph\":return n(()=>AT(a,i,p));case\"logical\":return n(()=>OT(a,i,p));case\"matrices\":return n(()=>MT(a,i,p));case\"normalization\":return n(()=>LT(a,i,p));case\"ragged\":return n(()=>BT(a,i,p));case\"reduction\":return n(()=>zT(a,i,p));case\"slice_join\":return n(()=>VT(a,i,p));case\"sparse\":return n(()=>WT(a,i,p));case\"spectral\":return n(()=>UT(a,i,p));case\"string\":return n(()=>GT(a,i,p));case\"transformation\":return n(()=>HT(a,i,p));case\"hash_table\":return FT(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,t,e);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Ll=class{constructor(t={},e={},o={},n={},s){this.weightMap=t,this.tensorArrayMap=e,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(t,e){return{id:t,frameName:e,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let e=0;ee.id===0&&e.iterationId===0?\"\":`${e.frameName}-${e.iterationId}`).join(\"/\"):\"\"}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),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 t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error(\"Cannot increase frame iteration, the context is empty\")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(let e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)}};function MS(r,t,e,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Tr(m)[0]));o=o||[];let c=new Set(o.map(m=>Tr(m.name)[0])),l=[...t];for(;l.length>0;){let m=l.pop();if((gu(m)||k8(m)||N8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),e[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:t,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function KT(r,t){let{usedNodes:e,inputs:o}=t,n=Object.keys(o).map(g=>Tr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>e.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=C8(f,p);return w8(h,p),h}function C8(r,t){let e=new Map(r.map(a=>[a.name,a])),o=t.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=e.get(a);for(let p of i.children)!e.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var Cc=class extends Error{constructor(t){super(`NodesExecutionOrderError: ${t}`)}};function w8(r,t){let e=new Map(r.map((i,p)=>[i.name,p])),o=new Set(t.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(!e.has(p.name))throw new Cc(`Child ${p.name} of node ${i.name} is unreachable.`);if(e.get(i.name)>e.get(p.name))throw new Cc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!e.has(p.name))throw new Cc(`Input ${p.name} of node ${i.name} is unreachable.`);if(e.get(p.name)>e.get(i.name))throw new Cc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function qT(r){let t=new Map(r.map((i,p)=>[i.name,p])),e=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>gu(i)?e:p),n=i=>{let p=o[t.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;it[o].map(n=>n.id));this._weightIds=[].concat(...e),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 e=t.signatureKey||t.name;return t.defaultOutput?`${e}:${t.defaultOutput}`:e})}get functions(){return Object.keys(this._functions).reduce((t,e)=>(t[e]=this._functions[e].signature,t),{})}constructor(t,e){this.graph=t,this.parent=e,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(o=>{this._functionExecutorMap[o]=new lp(t.functions[o],this)})}getCompilationKey(t,e){let o=t.map(s=>s.name).sort(),n=e.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(t,e){let o=MS(t,e,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=e.map(l=>l.name),c=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=KT(this.graph,o),p=qT(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(t){if(t==null)return null;let e=t.clone();return Rr(e),e}cloneTensorList(t){return t?t.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([e,o])=>[e,this.cloneTensorList(o)]))}execute(t,e){this.disposeIntermediateTensors(),t=this.mapInputs(t);let o=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);let n=o.map(m=>this.graph.nodes[Tr(m)[0]]),s=e.map(m=>Tr(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(t,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 Ll(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(x=>{let[b,C]=Tr(x,m),S=[];S[C]=t[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=OS(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),e.map(x=>zt(x,d,m))})}getFrozenTensorIds(t){let e=[].concat.apply([],Object.keys(t).map(o=>t[o]).map(o=>o.map(n=>n.id)));return new Set(e)}checkTensorForDisposal(t,e,o,n,s,a,i){if(!(gu(e)||a.has(t))){for(let p of o[t])p!=null&&(i[p.id]=(i[p.id]||0)+e.children.length);for(let p of e.inputs){if(gu(p))continue;let u=fS(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(t,e,o,n,s,a){function i(p){return gu(p)||s.has(p.name)}if(!(gu(t)||a==null))for(let p of a){if(i(p))continue;let u=fS(p.name,e,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(t,e){return this._executeAsync(t,e)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let e of t)e&&!e.isDisposed&&e.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,e,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ll(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(t,a,e,o),p=e.map(m=>zt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(t).map(m=>t[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(t,e,o){let n=t.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,e,o)}async executeWithControlFlow(t,e,o,n){let s=Object.keys(t),a=s.map(S=>this.graph.nodes[Tr(S)[0]]),i=o.map(S=>Tr(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}=MS(t,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:e.currentContext})),h=Object.assign({},this.weightMap);Object.keys(t).forEach(S=>{let[k,_]=Tr(S),E=[];E[_]=t[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,e,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=>!gu(S)&&!zt(S.name,h,e)).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(t,e,o,n,s,a,i,p,u){let c=[];for(;e.length>0;){let l=e.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=OS(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,e,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,e,o,n,s,u))}else this.processChildNodes(l.node,e,o,n,s,u)}return c}processChildNodes(t,e,o,n,s,a){t.children.forEach(i=>{let[p]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!zt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!zt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(e=>e.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(e=>{let o=t[e],[n]=Tr(e),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(t){var e,o;let n={};for(let s in t){let a=(o=(e=this._signature)===null||e===void 0?void 0:e.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=t[s]:n[s]=t[s]}return n}checkInputs(t){let e=Object.keys(t).filter(o=>{let[n]=Tr(o);return this.graph.nodes[n]==null});if(e.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${e}] that are not part of graph`)}mapOutputs(t){return t.map(e=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[e];return s!=null?s.name:e},{})}checkOutputs(t){t.forEach(e=>{let[o]=Tr(e);if(!this.graph.nodes[o])throw new Error(`The output '${e}' is not found in the graph`)})}};var kf=class{constructor(t={},e={}){this.hashTableNameToHandle=t,this.hashTableMap=e}addHashTable(t,e){this.hashTableNameToHandle[t]=e.handle,this.hashTableMap[e.id]=e}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var T8=\"?tfjs-format=file\",_8=\"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(t,e={},o=fi){this.modelUrl=t,this.loadOptions=e,this.version=\"n/a\",this.io=o,e==null&&(this.loadOptions={}),this.resourceManager=new kf}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(t,this.loadOptions);else{let e=this.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(this.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error(`Found more than one (${e.length}) load handlers for URL '${[t]}'`);this.handler=e[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 t=this.handler.load();return y.isPromise(t)?t.then(e=>this.loadSync(e)):this.loadSync(t)}loadSync(t){this.artifacts=t;let e=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${e.versions.producer}.${e.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new lp(Ml.Instance.transformGraph(e,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let s=Ml.Instance.transformGraph(t.modelInitializer);this.initializer=new lp(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=t.initializerSignature}return!0}async save(t,e){if(typeof t==\"string\"){let o=this.io.getSaveHandlers(t);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${t}'`);t=o[0]}if(t.save==null)throw new Error(\"GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.\");return t.save(this.artifacts)}addStructuredOutputNames(t){if(this.structuredOutputKeys){let e=t instanceof ut?[t]:t,o={};return e.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return t}predict(t,e){let o=this.execute(t,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(t,e){let o=await this.executeAsync(t,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(t){var e;if(!(t instanceof ut)&&!Array.isArray(t)){let s=(e=this.signature)===null||e===void 0?void 0:e.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(t[a]=this.resourceIdToCapturedInput[i.resourceId])}return t}t=Array.isArray(t)?t:[t];let o=Object.keys(this.resourceIdToCapturedInput).length;if(t.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 ${t.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]=t[n++],s},{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}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(t){if(this.resourceIdToCapturedInput={},this.initializerSignature){let e=this.initializerSignature.outputs,o=Object.keys(e);for(let n=0;n1?o:o[0]}async executeAsync(t,e){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let o=await this.executor.executeAsync(t,e);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((e,o)=>(e[o]=[t[o]],e),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Mt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function $8(r,t={},e=fi){if(r==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 r==\"string\"&&(r=R8(r));let o=new Bl(r,t,e);return await o.load(),o}function E8(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 t;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=fi.getWeightSpecs(o.weightsManifest),a=fi.getModelArtifactsForJSONSync(o,s,n);t=fi.fromMemorySync(a)}else if(\"load\"in r)t=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)t=fi.fromMemorySync(r);else throw new Error(\"Unknown model format\");let e=new Bl(t);return e.load(),e}function R8(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${_8}${T8}`}var D8=\"4.11.0\";function Q(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var A8=Wt.whereImpl,xu=class extends ao{nextDataId(){return xu.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new zo(this,pr())}write(t,e,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:t,dtype:o,refCount:1}),n}makeTensorInfo(t,e,o){let n;if(e===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,t,e)}else n=this.write(o,t,e);return{dataId:n,shape:t,dtype:e}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let e=this.data.get(t);e.refCount++}decRef(t){if(this.data.has(t)){let e=this.data.get(t);e.refCount--}}move(t,e,o,n,s){this.data.set(t,{values:e,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:e,complexTensorInfos:o}=this.data.get(t);if(e===\"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(t).values,e)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype===\"string\")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}makeOutput(t,e,o){return pr().makeTensorFromTensorInfo(this.makeTensorInfo(e,o,t),this)}disposeData(t,e=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!e&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(t);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}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){Q([t],\"where\");let e=this.readSync(t.dataId);return A8(t.shape,e)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xu.nextDataId=0;var Tc={};qe(Tc,{addImpl:()=>zS,bincountImpl:()=>Ic,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>VS,castImpl:()=>BS,ceilImpl:()=>WS,concatImpl:()=>mp,equalImpl:()=>US,expImpl:()=>HS,expm1Impl:()=>qS,floorDivImpl:()=>XS,floorImpl:()=>jS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>QS,greaterImpl:()=>YS,lessEqualImpl:()=>JS,lessImpl:()=>ZS,linSpaceImpl:()=>$f,logImpl:()=>eI,maxImpl:()=>Ef,maximumImpl:()=>tI,minimumImpl:()=>rI,multiplyImpl:()=>zl,negImpl:()=>oI,notEqualImpl:()=>nI,prodImpl:()=>sI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>fp,rsqrtImpl:()=>aI,scatterImpl:()=>zs,sigmoidImpl:()=>v_,simpleAbsImpl:()=>LS,sliceImpl:()=>hp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Nc,sqrtImpl:()=>T_,squaredDifferenceImpl:()=>uI,staticRegexReplaceImpl:()=>pI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>gp,stringSplitImpl:()=>xp,stringToHashBucketFastImpl:()=>yp,subImpl:()=>lI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>vc,uniqueImpl:()=>bp});function LS(r){let t=new Float32Array(r.length);for(let e=0;e{let{x:t}=r.inputs,e=r.backend;Q(t,\"abs\");let o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId).values;return o=LS(n),e.makeOutput(o,t.shape,t.dtype)},jT={kernelName:Xs,backendName:\"cpu\",kernelFunc:F8};function ze(r){return(t,e,o,n,s)=>{let a=w.assertAndGetBroadcastShape(t,e),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=t.length,m=e.length,d=y.computeStrides(t),f=y.computeStrides(e),h=w.getBroadcastDims(t,a),g=w.getBroadcastDims(e,a);if(h.length+g.length===0)for(let x=0;xC[E]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Kt(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=e.makeTensorInfo(o.shape,\"complex64\"),p=e.data.get(i.dataId);return p.complexTensorInfos={real:e.makeTensorInfo(o.shape,\"float32\",s),imag:e.makeTensorInfo(n.shape,\"float32\",a)},i}var XT={kernelName:Fi,backendName:\"cpu\",kernelFunc:Kt};function wc(r,t,e=\"float32\"){if(e===\"complex64\"){let n=wc(r,t,\"float32\"),s=wc(r,t,\"float32\");return Kt({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(t),e);return r.makeTensorInfo(t,e,o)}function mr(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var YT={kernelName:wo,backendName:\"cpu\",kernelFunc:mr};function Ro(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.data.get(o.dataId).complexTensorInfos.real,s=e.data.get(n.dataId).values;return e.makeTensorInfo(n.shape,n.dtype,s)}var QT={kernelName:qi,backendName:\"cpu\",kernelFunc:Ro};function BS(r,t,e,o){if(o===\"int32\"){let n=Int32Array.from(r);return[t,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],e),[s,a]=ze((i,p)=>i!==p?1:0)(t,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${e} to ${o}`)}function Do(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return mr({inputs:{x:n},backend:e});let c=wc(e,n.shape,n.dtype),l=Do({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),m=Kt({inputs:{real:l,imag:c},backend:e});return e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=Ro({inputs:{input:n},backend:e}),l=Do({inputs:{x:c},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=mr({inputs:{x:n},backend:e});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=e.data.get(n.dataId).values,[i,p,u]=BS(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}var ZT={kernelName:bo,backendName:\"cpu\",kernelFunc:Do};function Ye(r,t,e,o){return e==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]=t(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=Do({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=Do({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,_,E]=e(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo(E,\"float32\",k),D=p.makeTensorInfo(E,\"float32\",_),P=Kt({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]=t(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function Sc(r){return(t,e,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(t,e),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=w.getBroadcastDims(t,i),f=w.getBroadcastDims(e,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=t.length,b=y.computeStrides(t),C=e.length,S=y.computeStrides(e);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,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 zS=ze((r,t)=>r+t),P8=Sc((r,t,e,o)=>({real:r+e,imag:t+o})),Oa=Ye(uo,zS,P8),JT={kernelName:uo,backendName:\"cpu\",kernelFunc:Oa};function Ic(r,t,e,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,e);for(let i=0;i=n||(s>0?a[p]+=t[i]:a[p]+=1)}return a}function Nf(r,t,e,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,e],t.dtype);for(let i=0;i=e||(o?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var VS=ze((r,t)=>r&t),O8=Ye(ja,VS),e_={kernelName:ja,backendName:\"cpu\",kernelFunc:O8};function Xt(r){return(t,e,o)=>{let n=y.getArrayFromDType(e,t.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=e||a.dtype,l=t(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var WS=Xt(r=>Math.ceil(r)),M8=Ar(tn,WS),t_={kernelName:tn,backendName:\"cpu\",kernelFunc:M8};function mp(r,t,e,o){let n=y.getArrayFromDType(e,y.sizeFromShape(t));if(o&&e!==\"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=e===\"string\"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===t?1:0),GS=Ye(yn,US,null,\"bool\"),r_={kernelName:yn,backendName:\"cpu\",kernelFunc:GS};var HS=Xt(r=>Math.exp(r)),KS=Ar(bn,HS,\"float32\"),o_={kernelName:bn,backendName:\"cpu\",kernelFunc:KS};var qS=Xt(r=>Math.expm1(r)),L8=Ar(Cn,qS),n_={kernelName:Cn,backendName:\"cpu\",kernelFunc:L8};var jS=Xt(r=>Math.floor(r)),B8=Ar(Sn,jS),s_={kernelName:Sn,backendName:\"cpu\",kernelFunc:B8};var XS=ze((r,t)=>Math.floor(r/t)),z8=Ye(In,XS,null,\"int32\"),a_={kernelName:In,backendName:\"cpu\",kernelFunc:z8};function Tf(r,t,e,o,n,s,a,i,p){let u=me([o,s],e);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>t?1:0),V8=Ye(Nn,YS,null,\"bool\"),i_={kernelName:Nn,backendName:\"cpu\",kernelFunc:V8};var QS=ze((r,t)=>r>=t?1:0),W8=Ye(Tn,QS,null,\"bool\"),u_={kernelName:Tn,backendName:\"cpu\",kernelFunc:W8};var ZS=ze((r,t)=>rr<=t?1:0),G8=Ye(An,JS,null,\"bool\"),c_={kernelName:An,backendName:\"cpu\",kernelFunc:G8};function $f(r,t,e){let o=(t-r)/(e-1),n=y.makeZerosTypedArray(e,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),H8=Ar(Pn,eI),l_={kernelName:Pn,backendName:\"cpu\",kernelFunc:H8};function Ef(r,t,e,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(e));for(let s=0;si)&&(i=u)}n[s]=i}return n}var tI=ze((r,t)=>Math.max(r,t)),K8=Ye(Wn,tI),m_={kernelName:Wn,backendName:\"cpu\",kernelFunc:K8};var rI=ze((r,t)=>Math.min(r,t)),q8=Ye(Kn,rI),d_={kernelName:Kn,backendName:\"cpu\",kernelFunc:q8};var zl=ze((r,t)=>r*t),j8=Sc((r,t,e,o)=>({real:r*e-t*o,imag:r*o+t*e})),dp=Ye(Yn,zl,j8),f_={kernelName:Yn,backendName:\"cpu\",kernelFunc:dp};function oI(r,t,e){let o=y.createScalarValue(-1,e);return zl([],t,o,r,e)}function X8(r){let{inputs:t,backend:e}=r,{x:o}=t;Q(o,\"neg\");let n=e.data.get(o.dataId).values,[s,a]=oI(n,o.shape,o.dtype);return e.makeTensorInfo(a,o.dtype,s)}var h_={kernelName:pa,backendName:\"cpu\",kernelFunc:X8};var nI=ze((r,t)=>r!==t?1:0),Y8=Ye(Qn,nI,null,\"bool\"),g_={kernelName:Qn,backendName:\"cpu\",kernelFunc:Y8};function vc(r,t,e,o,n){let s=t.length,a=y.sizeFromShape(t),i=y.computeStrides(t),p=y.computeStrides(n),u=y.getTypedArrayFromDType(e,y.sizeFromShape(n));for(let c=0;ce.disposeIntermediateTensorInfo(b)),e.makeTensorInfo(x,g,f)}var y_={kernelName:ns,backendName:\"cpu\",kernelFunc:Q8};function Z8(r,t,e){r.forEach((o,n)=>{if(o<0||o>=e){let s=y.indexToLoc(n,t.length,y.computeStrides(t)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${e})`)}})}function J8(r,t){for(let e=0;en)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 eY(r,t,e,o){let n=[],s=0,a=t.length-1+e.length,i=new Array(a).fill(null).map(()=>[0]);J8(e,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 t}function b_(r,t){let e=r.slice(0,t);for(;e.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=t.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(t[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>C_)throw new Error(`Requires ((limit - start) / delta) <= ${C_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(e,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(t){let e=t.length;if(e===0)return 0;let o=0,n=t[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(t,e,o,n){let s=t.length,a=[];for(let i=0;i0&&a.length!==t[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(t,e,o,n){let s=t.length,a=[];if(s===0)return[];let i=0,p=t[0];if(p>=e.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${e.length}`);let u=e[p];a.push(u);for(let c=1;c=0&&(++i,i=e.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${e.length}`);u=e[l]}a.push(u)}if(a.length!==t.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(t,e,o,n){let s=this.getRowPartitionTensor(t),a=this.getRowPartitionTypeByDimension(t);switch(a){case Ao.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,e,o,n);case Ao.ROW_SPLITS:if(s.length-1>e.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${e.length}`);return this.calculateOutputIndexRowSplit(s,e,o,n);default:throw new Error(`Unsupported partition type: ${Ao[a]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let e=this.rowPartitionTypes[0];switch(e){case Ao.FIRST_DIM_SIZE:return t[0];case Ao.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case Ao.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Ao[e]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let e=this.getFirstDimensionSize(),o=this.calculateOutputSize(e),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=S_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(e,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(t,e,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(t+1);let p=y.sizeFromShape(i),u=e.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=iu(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);w_(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function w_(r,t,e){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}e.push(o)}return e}function Af(r,t,e,o,n,s,a,i,p,u){return new kc(r,t,e,o,n,s,a,i,p,u).compute()}function fp(r,t,e,o){let n=r===t,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((t-r)/e)),p=y.makeZerosTypedArray(i,o);t1/Math.sqrt(r)),nY=Ar(ms,aI),I_={kernelName:ms,backendName:\"cpu\",kernelFunc:nY};function zs(r,t,e,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=t.values;if(o===0)return me(e,t.dtype);let d=p instanceof tt?p:me(c,t.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 ${e}`);for(let x=0;x1/(1+Math.exp(-r))),iI=Ie(Cs,r=>1/(1+Math.exp(-r))),k_={kernelName:Cs,backendName:\"cpu\",kernelFunc:iI};function hp(r,t,e,o,n){let s=ct.isSliceContinous(o,t,e),a=y.sizeFromShape(e),i=y.computeStrides(o);if(s){let l=ct.computeFlatOffset(t,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(e,n);for(let l=0;lf+t[h]);c.set(u.get(...d),...m)}return n===\"string\"?w.fromStringArrayToUint8(c.values):c.values}function Fo(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=ct.parseSliceParams(n,s,a);ct.assertParamsValid(n,i,p);let u=e.data.get(n.dataId).values,c=hp(u,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,c)}var N_={kernelName:ha,backendName:\"cpu\",kernelFunc:Fo};function Ff(r,t,e,o,n,s,a){let i=t[0],p=s[0],u=new Array(p),c=new Array(i),l=t[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(e,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(e,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=t.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(e,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)),sY=Ie(Ss,r=>Math.sqrt(r)),__={kernelName:Ss,backendName:\"cpu\",kernelFunc:sY};var uI=ze((r,t)=>{let e=r-t;return e*e}),aY=Ye(Ns,uI),$_={kernelName:Ns,backendName:\"cpu\",kernelFunc:aY};var pI=Xt((r,t)=>{let{pattern:e,replaceGlobal:o,rewrite:n}=t;return r.replace(new RegExp(e,o?\"g\":\"\"),n)}),iY=Ar(Ou,pI),E_={kernelName:Ou,backendName:\"cpu\",kernelFunc:iY};function Of(r,t,e,o){let n=me(r,t.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(t[m+l-1]);for(let b=0;b0){let p=e[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&e[u]<=o,!c)throw new Error(`Invalid split value ${e[u]}, must be in [${p}, ${o}]`);p=e[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=e[p]-e[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=e[p+1]-e[p],d=this.getNumNGrams(m,l);this.createNGrams(t,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=e[p+1]-e[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(t,u,i,c,d,m)}}return[i,a]}};function gp(r,t,e,o,n,s,a,i){return new cI(e,o,n,s,a,i).compute(r,t)}function uY(r,t,e,o){if(!r.length)return;if(t.length===0){for(let s=0;sr-t),pY=Sc((r,t,e,o)=>({real:r-e,imag:t-o})),Vl=Ye(_s,lI,pY),R_={kernelName:_s,backendName:\"cpu\",kernelFunc:Vl};function Mf(r,t){let e=new Array(r.rank);for(let n=0;n{let e=t.value-r.value;return e===0?r.index-t.index:e};function D_(r,t,e=0,o=r.length-1){for(;o>e;){if(o-e>600){let i=o-e+1,p=t-e+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(e,Math.floor(t-p*c/i+l)),d=Math.min(o,Math.floor(t+(i-p)*c/i+l));D_(r,t,m,d)}let n=r[t],s=e,a=o;for(y.swap(r,e,t),Wl(r[o],n)>0&&y.swap(r,e,o);s0;)a=a-1}Wl(r[e],n)===0?y.swap(r,e,a):(a=a+1,y.swap(r,a,o)),a<=t&&(e=a+1),t<=a&&(o=a-1)}}function Lf(r,t,e,o,n){let s=t[t.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(e,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew xu,1);var mI=Ie(gn,r=>r>=0?r:Math.exp(r)-1),A_={kernelName:gn,backendName:\"cpu\",kernelFunc:mI};function dI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o;Q([n],\"leakyRelu\");let a=y.sizeFromShape(n.shape),i=e.data.get(n.dataId).values,p=y.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?t*r:r);function fI(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t;Q([o,n],\"prelu\");let s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,[i,p]=lY(o.shape,n.shape,s,a,\"float32\");return e.makeTensorInfo(p,\"float32\",i)}var P_={kernelName:os,backendName:\"cpu\",kernelFunc:fI};var hI=Ie(as,r=>Math.max(0,r)),O_={kernelName:as,backendName:\"cpu\",kernelFunc:hI};var gI=Ie(ps,r=>Math.min(Math.max(0,r),6)),M_={kernelName:ps,backendName:\"cpu\",kernelFunc:gI};function Cp(r,t,e,o,n){if(e===\"linear\")return mr({inputs:{x:t},backend:r});if(e===\"relu\")return hI({inputs:{x:t},backend:r});if(e===\"elu\")return mI({inputs:{x:t},backend:r});if(e===\"relu6\")return gI({inputs:{x:t},backend:r});if(e===\"prelu\")return fI({inputs:{x:t,alpha:o},backend:r});if(e===\"leakyrelu\")return dI({inputs:{x:t},backend:r,attrs:{alpha:n}});if(e===\"sigmoid\")return iI({inputs:{x:t},backend:r});throw new Error(`Activation ${e} has not been implemented for the CPU backend.`)}function Ve(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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.`),e.incRef(n.dataId);let u=e.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 L_={kernelName:da,backendName:\"cpu\",kernelFunc:Ve};function xI(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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=Ir.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],_=Ve({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Ve({inputs:{x:s},backend:e,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=e.data.get(_.dataId).values,L=e.data.get(E.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides(E.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=e.blockSize;for(let le=0;leMath.acos(r)),V_={kernelName:Wo,backendName:\"cpu\",kernelFunc:dY};var fY=Ie(Uo,r=>Math.acosh(r)),W_={kernelName:Uo,backendName:\"cpu\",kernelFunc:fY};function hY(r){let{inputs:t,backend:e}=r,o=t;Q(t,\"addN\");let n=o.map(i=>e.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=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,\"int32\",d)}var K_={kernelName:Ys,backendName:\"cpu\",kernelFunc:yY};function bY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=It({inputs:{x:n},backend:e,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=e.data.get(p.dataId).values;for(let g=0;ge.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,\"int32\",d)}var q_={kernelName:Qs,backendName:\"cpu\",kernelFunc:bY};var CY=Ie(qo,r=>Math.asin(r)),j_={kernelName:qo,backendName:\"cpu\",kernelFunc:CY};var wY=Ie(jo,r=>Math.asinh(r)),X_={kernelName:jo,backendName:\"cpu\",kernelFunc:wY};var SY=Ie(Xo,r=>Math.atan(r)),Y_={kernelName:Xo,backendName:\"cpu\",kernelFunc:SY};var IY=ze((r,t)=>Math.atan2(r,t)),vY=Ye(Qo,IY),Q_={kernelName:Qo,backendName:\"cpu\",kernelFunc:vY};var kY=Ie(Yo,r=>Math.atanh(r)),Z_={kernelName:Yo,backendName:\"cpu\",kernelFunc:kY};function _c(r,t,e,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,e),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+E;g[J]=s===\"avg\"?q/Y:j}}}return h}function Bf(r,t,e,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(t,e,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,t,e,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,e),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],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=xt:s===\"avg\"&&(ve+=xt,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 J_(r,t){let e=me(t.outShape,\"int32\"),o=t.strideDepth,n=t.strideHeight,s=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,p=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,l=t.effectiveFilterWidth,m=t.padInfo.front,d=t.padInfo.top,f=t.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}e.set(B,h,x,k,D,g)}}}return e}function NY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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=mr({inputs:{x:n},backend:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=_c(m,n.shape,n.dtype,d,c,\"avg\");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var e$={kernelName:Zo,backendName:\"cpu\",kernelFunc:NY};function TY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return e.makeTensorInfo(m.shape,\"float32\",m.values)}var t$={kernelName:Zs,backendName:\"cpu\",kernelFunc:TY};function _Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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,E=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=e.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 e.makeTensorInfo(P.shape,P.dtype,P.values)}var r$={kernelName:Ai,backendName:\"cpu\",kernelFunc:_Y};function $Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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),E=e.data.get(n.dataId).values,R=me(n.shape,\"float32\",E);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 e.makeTensorInfo(k.shape,k.dtype,k.values)}var o$={kernelName:Di,backendName:\"cpu\",kernelFunc:$Y};function EY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=t;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=e.data.get(n.dataId).values,l=e.data.get(i.dataId).values,m=e.data.get(p.dataId).values,d=s?e.data.get(s.dataId).values:new Float32Array([1]),f=a?e.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,E=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),E>=b&&(E=0);return e.makeTensorInfo(n.shape,n.dtype,h)}var n$={kernelName:vn,backendName:\"cpu\",kernelFunc:EY};function RY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({inputs:{x:n},backend:e,attrs:{shape:p}}),f=It({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Fo({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var s$={kernelName:Js,backendName:\"cpu\",kernelFunc:RY};function DY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,u=Ic(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var a$={kernelName:en,backendName:\"cpu\",kernelFunc:DY};function AY(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var i$={kernelName:ea,backendName:\"cpu\",kernelFunc:AY};var FY=Ie(Co,(r,t)=>{let e=t;return r>e.clipValueMax?e.clipValueMax:r{let{x:t}=r.inputs,e=r.backend,o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return mr({inputs:{x:p[0]},backend:e});if(p[0].dtype===\"complex64\"){let h=p.map(S=>Ro({inputs:{input:S},backend:e})),g=p.map(S=>Ma({inputs:{input:S},backend:e})),x=yu({inputs:h,backend:e,attrs:{axis:s}}),b=yu({inputs:g,backend:e,attrs:{axis:s}}),C=Kt({inputs:{real:x,imag:b},backend:e});return h.forEach(S=>e.disposeIntermediateTensorInfo(S)),g.forEach(S=>e.disposeIntermediateTensorInfo(S)),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Ve({inputs:{x:h},backend:e,attrs:{shape:x}})}),c=u.map(h=>({vals:e.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=mp(c,i,t[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=e.makeTensorInfo(d,t[0].dtype,m);return u.forEach(h=>e.disposeIntermediateTensorInfo(h)),f}var l$={kernelName:ta,backendName:\"cpu\",kernelFunc:yu};function yI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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),E=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=e.data.get(n.dataId).values,U=e.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 lt=le+Pe*_[1],Ge=be+st*D,mt=lt;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],lt=le+Pe*u.inChannels,Ge=st;for(let mt=0;mtMath.cos(r)),y$={kernelName:an,backendName:\"cpu\",kernelFunc:VY};var WY=Ie(un,r=>Math.cosh(r)),b$={kernelName:un,backendName:\"cpu\",kernelFunc:WY};function UY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{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=e.data.get(s.dataId).values,C=e.data.get(a.dataId).values,S=e.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let E=0;E=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=e.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),E=e.data.get(n.dataId).values,R=e.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}=e,p=t,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:E,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 E$={kernelName:zi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${zi}, 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 R$={kernelName:Bi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Bi}, 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 QY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{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=e.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 ${E}.`)}else if(n.dtype===\"int32\"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[_]=E*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 D$={kernelName:Pu,backendName:\"cpu\",kernelFunc:QY};function gi(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=Do({inputs:{x:n},backend:e,attrs:{dtype:\"int32\"}}):i=mr({inputs:{x:n},backend:e});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=It({inputs:{x:i},backend:e,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=wc(e,d,h),x=y.sizeFromShape(f),b=e.data.get(g.dataId).values,C=e.data.get(m.dataId).values;for(let S=0;S=0&&(m=gi({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var F$={kernelName:Vi,backendName:\"cpu\",kernelFunc:ZY};function JY(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t;Q([o,n],\"eluGrad\");let s=new Float32Array(y.sizeFromShape(n.shape)),a=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return e.makeTensorInfo(n.shape,\"float32\",s)}var P$={kernelName:Ya,backendName:\"cpu\",kernelFunc:JY};var eQ=w.ERF_P,tQ=w.ERF_A1,rQ=w.ERF_A2,oQ=w.ERF_A3,nQ=w.ERF_A4,sQ=w.ERF_A5,aQ=Ie(xn,r=>{let t=Math.sign(r),e=Math.abs(r),o=1/(1+eQ*e);return t*(1-((((sQ*o+nQ)*o+oQ)*o+rQ)*o+tQ)*o*Math.exp(-e*e))}),O$={kernelName:xn,backendName:\"cpu\",kernelFunc:aQ};function $c(r){let{inputs:t,backend:e,attrs:o}=r,{input:n}=t,{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),Ve({inputs:{x:n},backend:e,attrs:{shape:i}})}var M$={kernelName:na,backendName:\"cpu\",kernelFunc:$c};var iQ=ze((r,t)=>r/t),Ul=Ye(hn,iQ),Gl={kernelName:hn,backendName:\"cpu\",kernelFunc:Ul};function Vf(r,t,e){let o=r.shape,n=o[0],s=o[1],a=e.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=e,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=Ve({inputs:{x:n},backend:e,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Ve({inputs:{x:s},backend:e,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=e.bufferSync(h),b=e.bufferSync(f),C=_f(b,x,g);return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.makeTensorInfo(d.outputShape,C.dtype,C.values)}var G$={kernelName:aa,backendName:\"cpu\",kernelFunc:gQ};function xQ(r){let{inputs:t,backend:e}=r,{input:o}=t,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Ve({inputs:{x:o},backend:e,attrs:{shape:[a,s]}}),p=Vf(i,!0,e),u=Ve({inputs:{x:p},backend:e,attrs:{shape:o.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(p),u}var H$={kernelName:Ui,backendName:\"cpu\",kernelFunc:xQ};var yQ=Ie(_n,r=>Number.isFinite(r)?1:0,\"bool\"),K$={kernelName:_n,backendName:\"cpu\",kernelFunc:yQ};var bQ=Ie($n,r=>Math.abs(r)===1/0?1:0,\"bool\"),q$={kernelName:$n,backendName:\"cpu\",kernelFunc:bQ};var CQ=Ie(En,r=>Number.isNaN(r)?1:0,\"bool\"),j$={kernelName:En,backendName:\"cpu\",kernelFunc:CQ};function wQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=$f(o,n,s);return t.makeTensorInfo([a.length],\"float32\",a)}var X$={kernelName:Fn,backendName:\"cpu\",kernelFunc:wQ};var SQ=Ie(On,r=>Math.log1p(r)),Y$={kernelName:On,backendName:\"cpu\",kernelFunc:SQ};var IQ=ze((r,t)=>r&&t),vQ=Ye(Mn,IQ,null,\"bool\"),Q$={kernelName:Mn,backendName:\"cpu\",kernelFunc:vQ};var kQ=Ie(Ln,r=>r?0:1,\"bool\"),Z$={kernelName:Ln,backendName:\"cpu\",kernelFunc:kQ};var NQ=ze((r,t)=>r||t),TQ=Ye(Bn,NQ,null,\"bool\"),J$={kernelName:Bn,backendName:\"cpu\",kernelFunc:TQ};function _Q(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,\"LRN\");let u=n.shape[3],c=u-1,l=e.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=mr({inputs:{x:n},backend:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=_c(m,n.shape,n.dtype,d,c,\"max\");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var oE={kernelName:Un,backendName:\"cpu\",kernelFunc:EQ};function RQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return e.makeTensorInfo(m.shape,\"float32\",m.values)}var nE={kernelName:ia,backendName:\"cpu\",kernelFunc:RQ};function DQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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=e.bufferSync(s),m=J_(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,E=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,\"float32\"),P=e.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 e.makeTensorInfo(D.shape,D.dtype,D.values)}var sE={kernelName:Ki,backendName:\"cpu\",kernelFunc:DQ};function AQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.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,E=me(i.shape,\"float32\"),R=e.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}}E.set(U,P,M,L,O)}return e.makeTensorInfo(E.shape,E.dtype,E.values)}var aE={kernelName:Hi,backendName:\"cpu\",kernelFunc:AQ};function iE(r,t,e,o,n){let s=y.computeStrides(t),a=_c(r,t,e,s,n,\"max\"),i=Bf(r,t,e,n,!0,o);return[a.values,i.values]}var uE={kernelName:ua,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=iE(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 FQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=e.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Do({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:e});l.push(f);let h=gi({inputs:{x:f},backend:e,attrs:{axis:s,keepDims:a}});return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),h}var pE={kernelName:Gn,backendName:\"cpu\",kernelFunc:FQ};function PQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=It({inputs:{x:n},backend:e,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=e.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=e.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((_,E)=>_-p[E]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:e.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var lE={kernelName:qn,backendName:\"cpu\",kernelFunc:OQ};var MQ=ze((r,t)=>{let e=r%t;return r<0&&t<0||r>=0&&t>=0?e:(e+t)%t}),LQ=Ye(jn,MQ),mE={kernelName:jn,backendName:\"cpu\",kernelFunc:LQ};var fE=Kp(qw());function SI(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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=wI({inputs:{x:n},backend:e,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=Ve({inputs:{x:u},backend:e,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:e}),d=KS({inputs:{x:m},backend:e}),f=gi({inputs:{x:d},backend:e,attrs:{axis:p,keepDims:!1}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Ul({inputs:{a:d,b:h},backend:e});return e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var dE={kernelName:vs,backendName:\"cpu\",kernelFunc:SI};function BQ(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:SI({inputs:{logits:n},backend:e,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=e.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=t.map(c=>{let l=$c({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=yu({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var IE={kernelName:la,backendName:\"cpu\",kernelFunc:II};function qQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.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[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:e.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:ts,backendName:\"cpu\",kernelFunc:qQ};var jQ=ze((r,t)=>Math.pow(r,t)),XQ=Ye(rs,jQ),vE={kernelName:rs,backendName:\"cpu\",kernelFunc:XQ};function YQ(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.data.get(x.dataId).values),u=n.map(x=>x.shape),c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,[m,d,f]=Rf(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],\"int32\",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var kE={kernelName:Qp,backendName:\"cpu\",kernelFunc:YQ};function QQ(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Df(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],\"int32\",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var NE={kernelName:Zp,backendName:\"cpu\",kernelFunc:QQ};function ZQ(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.data.get(n.dataId).values,c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,m=i.map(g=>e.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 e.makeTensorInfo(f,s.dtype,h)}var TE={kernelName:Jp,backendName:\"cpu\",kernelFunc:ZQ};function JQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,dtype:s,step:a}=e,i=fp(o,n,a,s);return t.makeTensorInfo([i.length],s,i)}var _E={kernelName:ma,backendName:\"cpu\",kernelFunc:JQ};var e7=Ie(ss,r=>1/r),$E={kernelName:ss,backendName:\"cpu\",kernelFunc:e7};function t7(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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=e.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=e.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,E=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 e.makeTensorInfo(n.shape,n.dtype,h)}var AE={kernelName:Ja,backendName:\"cpu\",kernelFunc:n7};function s7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o;Q(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return mr({inputs:{x:n},backend:e});let p=new tt(n.shape,n.dtype),u=e.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return e.makeTensorInfo(p.shape,p.dtype,p.values)}var FE={kernelName:cs,backendName:\"cpu\",kernelFunc:s7};var PE={kernelName:As,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 t=Math.floor(r);return r-t<.5?Math.floor(r):r-t>.5?Math.ceil(r):t%2===0?t:t+1}),OE={kernelName:ls,backendName:\"cpu\",kernelFunc:a7};function i7(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=e.bufferSync(n),f=e.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return e.makeTensorInfo(a,h.dtype,h.values)}var ME={kernelName:ds,backendName:\"cpu\",kernelFunc:i7};function u7(r,t){let e=0,o=r.length,n=0;for(;e1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?d7*r:m7*(Math.exp(r)-1)),VE={kernelName:gs,backendName:\"cpu\",kernelFunc:f7};var h7=Ie(bs,r=>r<0?-1:r>0?1:0),WE={kernelName:bs,backendName:\"cpu\",kernelFunc:h7};var g7=Ie(xs,r=>Math.sin(r)),UE={kernelName:xs,backendName:\"cpu\",kernelFunc:g7};var x7=Ie(ys,r=>Math.sinh(r)),GE={kernelName:ys,backendName:\"cpu\",kernelFunc:x7};var y7=11920928955078125e-23,HE=Math.log(y7)+2,b7=Ie(ws,r=>{let t=r>-HE,e=rNumber(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var jE={kernelName:ji,backendName:\"cpu\",kernelFunc:w7};function S7(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.data.get(n.dataId).values),i=e.data.get(o.dataId).values,p=Array.from(e.data.get(s.dataId).values),[u,c,l]=Pf(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var XE={kernelName:ti,backendName:\"cpu\",kernelFunc:S7};function I7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Nc(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var YE={kernelName:ya,backendName:\"cpu\",kernelFunc:I7};function v7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Nc(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var QE={kernelName:ba,backendName:\"cpu\",kernelFunc:v7};function k7(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1,f=e.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=e.bufferSync(s),x=!!e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"float32\":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"int32\":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"string\":{let g=e.bufferSync(s),x=y.decodeString(e.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 e.makeTensorInfo(i,h.dtype,h.values)}var ZE={kernelName:ks,backendName:\"cpu\",kernelFunc:k7};function N7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Fo({inputs:{x:n},backend:e,attrs:{begin:u,size:m}});return u[i]+=l,d})}var JE={kernelName:xa,backendName:\"cpu\",kernelFunc:N7};var eR={kernelName:Xi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t;Q(e,\"square\");let n=o.data.get(e.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let e=t;return isNaN(r)?NaN:r>0?1:e.alpha}),tR={kernelName:So,backendName:\"cpu\",kernelFunc:T7};function _7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Ve({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 _=ct.computeOutShape(b,C,S),E=Fo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Ve({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(E)}else{let _=e.bufferSync(n),E=Of(d,_,S,b);k=e.makeTensorInfo(f,E.dtype,E.values)}return k}var rR={kernelName:Ts,backendName:\"cpu\",kernelFunc:_7};function $7(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.data.get(c.dataId).values,d=e.data.get(l.dataId).values,[f,h]=gp(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var oR={kernelName:Ca,backendName:\"cpu\",kernelFunc:$7};function E7(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values[0],[u,c,l]=xp(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],\"int32\",u),e.makeTensorInfo([m],\"string\",c),e.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var nR={kernelName:Yi,backendName:\"cpu\",kernelFunc:E7};function R7(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.data.get(s.dataId).values,i=yp(a,n);return e.makeTensorInfo(s.shape,\"int32\",i)}var sR={kernelName:Qi,backendName:\"cpu\",kernelFunc:R7};var D7=Ie($s,r=>Math.tan(r)),aR={kernelName:$s,backendName:\"cpu\",kernelFunc:D7};var A7=Ie(Es,r=>Math.tanh(r)),iR={kernelName:Es,backendName:\"cpu\",kernelFunc:A7};function F7(r){let{inputs:t,backend:e}=r,{tensor:o,indices:n,updates:s}=t,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=e.bufferSync(n),d=e.bufferSync(s),f=e.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return e.makeTensorInfo(o.shape,h.dtype,h.values)}var uR={kernelName:fs,backendName:\"cpu\",kernelFunc:F7};function P7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reps:s}=o;Q(n,\"tile\");let a=Mf(e.bufferSync(n),s);return e.makeTensorInfo(a.shape,a.dtype,a.values)}var pR={kernelName:po,backendName:\"cpu\",kernelFunc:P7};function O7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{k:s,sorted:a}=o;Q(n,\"topk\");let i=e.data.get(n.dataId).values,[p,u]=Lf(i,n.shape,n.dtype,s,a);return[e.makeTensorInfo(p.shape,p.dtype,p.values),e.makeTensorInfo(u.shape,u.dtype,u.values)]}var cR={kernelName:Rs,backendName:\"cpu\",kernelFunc:O7};function M7(r){let{inputs:t,attrs:e,backend:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=e,[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],E=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;Lt-1)if(t<=1)e=0;else{let o=2*t;e-=o*Math.trunc(e/o),e>=t&&(e=o-e-1)}return y.clamp(0,e,t-1)}function B7(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let o=t-1;e+=t*(Math.trunc(-e/o)+1)}else if(e>t-1)if(t<=1)e=0;else{let o=t-1;e-=t*Math.trunc(e/o)}return y.clamp(0,e,t-1)}function z7(r,t){return r}function V7(r,t){return y.clamp(0,r,t-1)}function ql(r,t,e,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&ie.disposeIntermediateTensorInfo(f)),d}var hR={kernelName:Ji,backendName:\"cpu\",kernelFunc:K7};var q7=[z_,jT,V_,W_,JT,U_,G_,H_,K_,q_,j_,X_,Y_,Q_,Z_,e$,t$,r$,o$,B_,n$,s$,a$,e_,i$,ZT,t_,u$,XT,p$,l$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,k$,N$,T$,_$,$$,E$,R$,D$,F$,A_,P$,r_,O$,o_,M$,n_,L$,B$,z$,s_,a_,V$,W$,U$,G$,i_,u_,YT,H$,c$,K$,q$,j$,F_,p_,c_,X$,l_,Y$,Q$,Z$,J$,eE,tE,rE,m_,oE,nE,sE,aE,uE,pE,cE,d_,lE,mE,hE,f_,h_,gE,xE,yE,g_,bE,SE,IE,Wf,vE,P_,y_,kE,NE,TE,_E,QT,Gl,$E,O_,M_,L_,EE,RE,DE,AE,FE,PE,OE,I_,ME,BE,zE,VE,k_,WE,UE,GE,N_,dE,KE,qE,jE,XE,YE,QE,ZE,JE,__,eR,$_,E_,tR,rR,oR,nR,sR,R_,A$,aR,iR,uR,pR,cR,mR,x_,dR,fR,hR,CE];for(let r of q7)ri(r);var Ac={};qe(Ac,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>rZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>BI,bindTextureUnit:()=>bR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>TI,createFragmentShader:()=>$I,createFramebuffer:()=>OI,createProgram:()=>EI,createStaticIndexBuffer:()=>AI,createStaticVertexBuffer:()=>DI,createTexture:()=>FI,createVertexShader:()=>_I,getBatchDim:()=>yi,getExtensionOrThrow:()=>Ec,getFramebufferErrorMessage:()=>CR,getMaxTexturesInShader:()=>WI,getNumChannels:()=>eZ,getProgramUniformLocation:()=>LI,getProgramUniformLocationOrThrow:()=>MI,getRowsCols:()=>bi,getShapeAs3D:()=>Dc,getTextureShapeFromLogicalShape:()=>zI,getWebGLDisjointQueryTimerVersion:()=>UI,getWebGLErrorMessage:()=>yR,getWebGLMaxTextureSize:()=>VI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>GI,isDownloadFloatTextureEnabled:()=>HI,isReshapeFree:()=>Cu,isWebGLFenceEnabled:()=>KI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>RI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>oZ,resetMaxTexturesInShader:()=>nZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>tZ,validateFramebuffer:()=>Rc,validateProgram:()=>Yl,validateTextureSize:()=>PI});var wp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function vI(r,t){wp[r]=t}function Kr(r,t){if(!(r in wp)||t!=null){let o=X7(r,t);if(o!==null)wp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let e=wp[r];return e==null||e.isContextLost()?(delete wp[r],Kr(r)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),wp[r])}function j7(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 X7(r,t){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let e=t==null?j7(r):t;return e.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete wp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?e.getContext(\"webgl\",Uf)||e.getContext(\"experimental-webgl\",Uf):e.getContext(\"webgl2\",Uf)}var bu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(bu||(bu={}));var dr;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(dr||(dr={}));var rr;(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\"})(rr||(rr={}));function Sp(r,t){return[t,r]}function gR(r,t){return r*t}function jl(r){let t=y.sizeFromShape(r),e=Math.ceil(t/4);return y.sizeToSquarishShape(e)}function La(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function xR(r,t){let[e,o]=La(r,t);return e*o*4}function Xl(r,t){let e=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber(\"WEBGL_VERSION\")===2?(o=e.R32F,n=e.R16F,s=e.RGBA16F,a=e.RGBA32F,i=e.RED,u=4,c=1,l=e.HALF_FLOAT,m=e.FLOAT,p=e.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=e.RGBA,i=r.RGBA,u=4,c=4,l=t!=null?t.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,t){let e=t();return A().getBool(\"DEBUG\")&&Y7(r),e}function Y7(r){let t=r.getError();if(t!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+yR(r,t))}var Q7=596e-10,Z7=65504;function TI(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||Q7r.getExtension(t),'Extension \"'+t+'\" not supported on this browser.')}function _I(r,t){let e=xi(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(e)),new Error(\"Failed to compile vertex shader.\");return e}function $I(r,t){let e=xi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),A().get(\"ENGINE_COMPILE_ONLY\"))return e;if(r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw qf(t,r.getShaderInfoLog(e)),new Error(\"Failed to compile fragment shader.\");return e}var J7=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,t){let e=J7.exec(t);if(e==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(r);return}let o=+e[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 RI(r,t){if(ce(r,()=>r.linkProgram(t)),!A().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(t,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error(\"Failed to link vertex and fragment shaders.\")}function Yl(r,t){if(ce(r,()=>r.validateProgram(t)),r.getProgramParameter(t,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error(\"Shader program validation failed.\")}function DI(r,t){let e=xi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function AI(r,t){let e=xi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function eZ(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function FI(r){return xi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function PI(r,t){let e=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||t<=0){let o=`[${r}x${t}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>e||t>e){let o=`[${r}x${t}]`,n=`[${e}x${e}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function OI(r){return xi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function jf(r,t,e,o,n,s,a){let i=r.getAttribLocation(t,e);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 bR(r,t,e){wR(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,t))}function tZ(r,t){wR(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function MI(r,t,e){return xi(r,()=>r.getUniformLocation(t,e),'uniform \"'+e+'\" not present in program.')}function LI(r,t,e){return r.getUniformLocation(t,e)}function BI(r,t,e,o){ce(r,()=>bR(r,t,o)),ce(r,()=>r.uniform1i(e,o))}function rZ(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,t,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0))}function Xf(r,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Rc(r){let t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+CR(r,t))}function CR(r,t){switch(t){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 ${t}`}}function xi(r,t,e){let o=ce(r,()=>t());if(o==null)throw new Error(e);return o}function wR(r,t){let e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=t+r.TEXTURE0;if(oe){let n=`[gl.TEXTURE0, gl.TEXTURE${e}]`;throw new Error(`textureUnit must be in ${n}.`)}}function yi(r,t=2){return y.sizeFromShape(r.slice(0,r.length-t))}function bi(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 Dc(r){let t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[yi(r),...bi(r)]),t}function zI(r,t=!1){let e=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=e/2),t&&(e=e*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<=e?s=[1,n]:r.length===2&&r[0]<=e&&r[1]<=e?s=r:r.length===3&&r[0]*r[1]<=e&&r[2]<=e?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=e&&r[1]*r[2]<=e?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=e&&r[3]<=e?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=e&&r[1]*r[2]*r[3]<=e&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||a)if(t){let i=yi(r),p=2,u=2;r.length&&([p,u]=bi(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 Cu(r,t){if(r=r.slice(-2),t=t.slice(-2),y.arraysEqual(r,t)||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){let e=r[r.length-1],o=t[t.length-1];if(e===o||Gf(e)&&Gf(o)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&Gf(r[0])&&Gf(t[0])}var Hf,Kf;function VI(r){if(Hf==null){let t=Kr(r);Hf=t.getParameter(t.MAX_TEXTURE_SIZE)}return Hf}function oZ(){Hf=null}function nZ(){Kf=null}function WI(r){if(Kf==null){let t=Kr(r);Kf=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function UI(r){if(r===0)return 0;let t,e=Kr(r);return qr(e,\"EXT_disjoint_timer_query_webgl2\")&&r===2?t=2:qr(e,\"EXT_disjoint_timer_query\")?t=1:t=0,t}function qr(r,t){return r.getExtension(t)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(t){return console.log(\"Error when getting WebGL context: \",t),!1}return!1}function GI(r){if(r===0)return!1;let t=Kr(r);if(r===1){if(!qr(t,\"OES_texture_float\"))return!1}else if(!qr(t,\"EXT_color_buffer_float\"))return!1;return NI(t)}function HI(r){if(r===0)return!1;let t=Kr(r);if(r===1){if(!qr(t,\"OES_texture_float\")||!qr(t,\"WEBGL_color_buffer_float\"))return!1}else{if(qr(t,\"EXT_color_buffer_float\"))return NI(t);let o=\"EXT_color_buffer_half_float\";if(qr(t,o)){let n=t.getExtension(o);return sZ(t,n)}return!1}return NI(t)}function NI(r){let t=Xl(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,o,n,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(s),a}function sZ(r,t){let e=Xl(r,t),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatHalfFloat,n,s,0,e.textureFormatFloat,e.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 KI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} 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\",()=>VI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>WI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:UI(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!ou.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>GI(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\",()=>HI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>KI(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\",()=>ou.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 vt(){let r,t,e,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",t=\"in\",e=\"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=\"\",t=\"attribute\",e=\"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:t,varyingVs:e,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,t,e=\"index\"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function Ip(r,t,e=\"index\"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function aZ(r,t){let e=r.length,o=r.map(s=>`${t}[${s}]`),n=new Array(e-1);n[e-2]=o[e-1];for(let s=e-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function SR(r,t,e=\"index\"){let o=r.map((s,a)=>a),n=aZ(o,t);return n.map((s,a)=>{let i=`int ${r[a]} = ${e} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${e} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function Fc(r){let t=y.computeStrides(r).map(e=>e.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;\n }\n`}function Pc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var 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:IR}=w;function vR(r,t,e){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};`)),e.enableShapeUniforms){let{uniformShape:h}=Zf(e.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;`)}}),e.enableShapeUniforms){switch(t.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;\")}e.customUniforms&&e.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(d=>iZ(d,t,e.packedInputs,e.enableShapeUniforms)).join(`\n`),a=t.texShape,i=vt(),p=cZ(i),u,c,l=dZ(i);return t.isPacked?(u=uZ(t.logicalShape,a,e.enableShapeUniforms),c=mZ(i)):(u=pZ(t.logicalShape,a,e.enableShapeUniforms),c=lZ(i)),e.packedInputs&&(l+=xZ),[l,p,c,n,u,s,e.userCode].join(`\n`)}function Mc(r,t=!1){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return $Z(r,t);case 1:return RZ(r,t);case 2:return AZ(r,t);case 3:return PZ(r,t);case 4:return MZ(r,t);case 5:return LZ(r);case 6:return BZ(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function kR(r,t){switch(r.shapeInfo.logicalShape.length){case 0:return _Z(r);case 1:return EZ(r,t);case 2:return DZ(r,t);case 3:return FZ(r,t);default:return OZ(r,t)}}function iZ(r,t,e=!1,o){let n=\"\";e?n+=kR(r,o):n+=Mc(r,o);let s=r.shapeInfo.logicalShape,a=t.logicalShape;return s.length<=a.length&&(e?n+=zZ(r,t):n+=VZ(r,t)),n}function uZ(r,t,e){switch(r.length){case 0:return NR();case 1:return yZ(r,t,e);case 2:return NZ(r,t,e);case 3:return CZ(r,t,e);default:return SZ(r,t,e)}}function pZ(r,t,e){switch(r.length){case 0:return NR();case 1:return bZ(r,t,e);case 2:return TZ(r,t,e);case 3:return wZ(r,t,e);case 4:return IZ(r,t,e);case 5:return vZ(r,t);case 6:return kZ(r,t);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function cZ(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function lZ(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function mZ(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function dZ(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 ${fZ}\n ${hZ}\n ${gZ}\n `}var fZ=`\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`,hZ=`\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`,gZ=`\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`,xZ=`\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 NR(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function yZ(r,t,e){let o=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return o[0]===1?e?`\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?e?`\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 `:e?`\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 bZ(r,t,e){return t[0]===1?e?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${t[1]}.0);\n }\n `:t[1]===1?e?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${t[0]}.0);\n }\n `:e?`\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(${t[0]}, ${t[1]}));\n return resTexRC.x * ${t[1]} + resTexRC.y;\n }\n `}function CZ(r,t,e){if(e)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(t[0]/2),Math.ceil(t[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 wZ(r,t,e){if(e)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 ${Ip([\"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(${t[0]}, ${t[1]}));\n int index = resTexRC.x * ${t[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function SZ(r,t,e){if(e)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(t[0]/2),Math.ceil(t[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(t.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 VZ(r,t){let e=r.name,o=e.charAt(0).toUpperCase()+e.slice(1),n=\"get\"+o+\"AtOutCoords\",s=t.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=t.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${e}, resultUV);\n }\n `;let u=Re(p),c=IR(r.shapeInfo.logicalShape,t.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,t,e){let{newShape:o,keptDims:n}=y.squeezeShape(t),s=t.length,a=r&&s===3&&t[0]===1,i=a?t.slice(1):o,p=!r&&s>1&&!y.arraysEqual(t,e)&&o.lengthr[e]).join(\", \")}function _R(r,t,e,o){let n=e.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:t.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=vR(n,a,t),p=$I(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:t,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:t,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},qI(r,t,u)))}function qI(r,t,e){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(e,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(e,\"INFINITY\",!1));let c=!1;for(let l of t.variableNames){let m={name:l,uniform:r.getUniformLocation(e,l,c),offset:r.getUniformLocation(e,`offset${l}`,c)};t.enableShapeUniforms&&(m.shape=r.getUniformLocation(e,`${l}Shape`,c),m.texShape=r.getUniformLocation(e,`${l}TexShape`,c)),o.push(m)}if(t.enableShapeUniforms&&(s=r.getUniformLocation(e,\"outShape\",c),i=r.getUniformLocation(e,\"outShapeStrides\",c),a=r.getUniformLocation(e,\"outTexShape\",c)),t.customUniforms)for(let l of t.customUniforms)n.push(r.getUniformLocation(e,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function TR(r,t){if(r.length!==t.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t.length} inputs`);r.forEach((e,o)=>{let n=e.logicalShape,s=t[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(e.isUniform&&s.isUniform)return;let i=e.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 $R(r,t,e,o,n){t.program.enableShapeUniforms||(TR(t.inShapeInfos,e),TR([t.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(t.webGLProgram),r.bindVertexArray(t.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&t.infLoc!==null&&r.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&r.gl.uniform1f(t.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,e.shape),C=!r.packedInputs&&h===e.shape.length&&y.arraysEqual(p,e.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 pt(r){return A().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Jf=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=bu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let e=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ip([\"r\",\"c\",\"d\"],t):Ws([\"r\",\"c\",\"d\"],t)}\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 ${e.output} = result;\n }\n `}};var eh=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=bu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let e=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ip([\"r\",\"c\",\"d\"],t):Ws([\"r\",\"c\",\"d\"],t)}\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 ${e.output} = result;\n }\n `}};var th=class{constructor(t){this.variableNames=[\"A\"],this.outTexUsage=dr.DOWNLOAD;let e=vt();this.outputShape=t,this.userCode=`\n ${Qf}\n\n void main() {\n float x = getAAtOutCoords();\n ${e.output} = encode_float(x);\n }\n `}};var rh=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=dr.DOWNLOAD;let e=vt();this.outputShape=t,this.userCode=`\n ${Qf}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${e.output} = encode_float(x);\n }\n `}};var GZ={R:0,G:1,B:2,A:3},Zl=class{constructor(t,e=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length);let s=\"result\";e&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;irv,createBufferFromOutputTexture:()=>sv,createFloat16MatrixTexture:()=>ZI,createFloat16PackedMatrixTexture:()=>tv,createFloat32MatrixTexture:()=>QI,createIndexBuffer:()=>YI,createPackedMatrixTexture:()=>ev,createUnsignedBytesMatrixTexture:()=>JI,createVertexBuffer:()=>XI,createVertexShader:()=>jI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>iv,downloadFloat32MatrixFromBuffer:()=>av,downloadMatrixFromPackedOutputTexture:()=>pv,downloadPackedMatrixFromBuffer:()=>uv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>ov,uploadPixelDataToTexture:()=>nv});function jI(r){let t=vt(),e=`${t.version}\n precision highp float;\n ${t.attribute} vec3 clipSpacePos;\n ${t.attribute} vec2 uv;\n ${t.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return _I(r,e)}function XI(r){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 DI(r,t)}function YI(r){let t=new Uint16Array([0,1,2,2,1,3]);return AI(r,t)}function Jl(r,t,e,o,n,s){PI(t,e);let a=FI(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,t,e,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,t,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[e,t]}}function nh(r){return r.internalFormatFloat}function QI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ZI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function JI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function ev(r,t,e,o){let[n,s]=La(t,e);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function tv(r,t,e,o){let[n,s]=La(t,e);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function rv(r,t,e){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),jf(r,t,\"clipSpacePos\",e,3,20,0)&&jf(r,t,\"uv\",e,2,20,12)}function ov(r,t,e,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(e*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(e*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,e,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,e,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function nv(r,t,e){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t)),e.data instanceof Uint8Array?A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width,e.height,0,r.RGBA,r.UNSIGNED_BYTE,e.data)):A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,e)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function sv(r,t,e,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*t*e;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function av(r,t,e){let o=r,n=new Float32Array(e);return o.bindBuffer(o.PIXEL_PACK_BUFFER,t),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function iv(r,t,e,o){let[n,s]=Sp(t,e),a=4,i=new Uint8Array(gR(t*e,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function uv(r,t,e,o,n,s,a,i){let p=r,u=new Float32Array(xR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,t),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function pv(r,t,e){let o=new Float32Array(t*e*4);return ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,o)),o}var kp=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let e=A().getNumber(\"WEBGL_VERSION\");if(t!=null?(this.gl=t,vI(e,t)):this.gl=Kr(e),t=this.gl,A().getNumber(\"WEBGL_VERSION\")===2){let s=t;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(t!=null){let s=t.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(t,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(t,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(t,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(t,()=>t.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=Ec(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Ec(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=Ec(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=XI(this.gl),this.indexBuffer=YI(this.gl),this.framebuffer=OI(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 t=this.gl;ce(t,()=>t.finish()),ce(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),ce(t,()=>t.deleteFramebuffer(this.framebuffer)),ce(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),ce(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,e){return this.throwIfDisposed(),QI(this.gl,t,e,this.textureConfig)}createFloat16MatrixTexture(t,e){return this.throwIfDisposed(),ZI(this.gl,t,e,this.textureConfig)}createUnsignedBytesMatrixTexture(t,e){return this.throwIfDisposed(),JI(this.gl,t,e,this.textureConfig)}uploadPixelDataToTexture(t,e){this.throwIfDisposed(),nv(this.gl,t,e)}uploadDenseMatrixToTexture(t,e,o,n){this.throwIfDisposed(),ov(this.gl,t,e,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(t,e){return this.throwIfDisposed(),tv(this.gl,t,e,this.textureConfig)}createPackedMatrixTexture(t,e){return this.throwIfDisposed(),ev(this.gl,t,e,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,e,o){return this.downloadMatrixDriver(t,()=>iv(this.gl,e,o,this.textureConfig))}downloadPackedMatrixFromBuffer(t,e,o,n,s,a){return uv(this.gl,t,e,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,e){return av(this.gl,t,e)}createBufferFromTexture(t,e,o){this.bindTextureToFrameBuffer(t);let n=sv(this.gl,e,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e,o;if(A().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=t,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},e=s}else A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(e=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:e,isFencePassed:o}}downloadMatrixFromPackedTexture(t,e,o){return this.downloadMatrixDriver(t,()=>pv(this.gl,e,o))}createProgram(t){this.throwIfDisposed();let e=this.gl;this.vertexShader==null&&(this.vertexShader=jI(e));let o=EI(e);ce(e,()=>e.attachShader(o,this.vertexShader)),ce(e,()=>e.attachShader(o,t)),RI(e,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(e,n),n}buildVao(t){this.setProgram(t),this.bindVertexArray(t.vao);let e=this.gl;ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),rv(e,t,this.vertexBuffer)}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&(ce(this.gl,()=>this.gl.deleteProgram(t)),this.deleteVertexArray(t.vao))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,e,o=!0){return this.throwIfDisposed(),o?MI(this.gl,t,e):LI(this.gl,t,e)}getAttributeLocation(t,e){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(t,e))}getUniformLocationNoThrow(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)}setInputMatrixTexture(t,e,o){this.throwIfDisposed(),this.throwIfNoProgram(),BI(this.gl,t,e,o)}setOutputMatrixTexture(t,e,o){this.setOutputMatrixTextureDriver(t,o,e)}setOutputPackedMatrixTexture(t,e,o){this.throwIfDisposed();let[n,s]=La(e,o);this.setOutputMatrixTextureDriver(t,n,s)}setOutputMatrixWriteRegion(t,e,o,n){this.setOutputMatrixWriteRegionDriver(o,t,n,e)}setOutputPackedMatrixWriteRegion(t,e,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&Yl(this.gl,this.program),Rc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;if(this.debug){let e=this.getVertexArray();console.assert(e===this.program.vao,\"VAO changed between setProgram and executeProgram!\"),this.debugValidate()}ce(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Ec(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 t=this.getQueryTimerExtensionWebGL1(),e=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,e),e}endQuery(){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let e=this.gl,o=this.getQueryTimerExtensionWebGL2();e.endQuery(o.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(t,e){if(e===0)return null;if(e===2){let o=this.gl;return o.getQueryParameter(t,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(t,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,e){if(e===0)return!0;if(e===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(t,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(t,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(t){return new Promise(e=>{this.addItemToPoll(()=>t.isFencePassed(),()=>e())})}pollItems(){let t=HZ(this.itemsToPoll.map(e=>e.isDoneFn));for(let e=0;e<=t;++e){let{resolveFn:o}=this.itemsToPoll[e];o()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,e){if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),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(t){this.throwIfDisposed(),Ql(this.gl,t,this.framebuffer),this.debug&&Rc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Rc(this.gl)):Xf(this.gl,this.framebuffer)}downloadMatrixDriver(t,e){this.bindTextureToFrameBuffer(t);let o=e();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(t,e,o){this.throwIfDisposed();let n=this.gl;Ql(n,t,this.framebuffer),this.debug&&Rc(n),this.outputTexture=t,ce(n,()=>n.viewport(0,0,e,o)),ce(n,()=>n.scissor(0,0,e,o))}setOutputMatrixWriteRegionDriver(t,e,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(t,e,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 HZ(r){let t=0;for(;t`${r}.${e}`)}function Dt(r,t){return t===1?[r]:lv(r,t)}function SD(r,t){if(r===1)return\"rc\";let e=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let e=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(t){let e=this.getSourceCoordsArr(t);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${e[0]}),\n cEdge ? 0. : getA(${e[1]}),\n rEdge ? 0. : getA(${e[2]}),\n rEdge || cEdge ? 0. : getA(${e[3]})`}};var Vc=class{constructor(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=t,this.enableShapeUniforms=pt(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 ${KZ(e,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?Pc():Fc(t)}\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]\":t[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":t[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function KZ(r,t){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${t?SR([\"r\",\"c\",\"d\"],\"inputShape\"):Ws([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var dh=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(t,e,o){let n=vD(e,o),s=kD(t,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=ID(t,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===rr.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):n===rr.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):n===rr.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):n===rr.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):n===rr.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(t,e,o,n){if(this.freeTextures==null)return;let s=vD(o,n),a=kD(e,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=ID(e,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(t.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(t),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(t);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 t=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let e=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*e)}%)`)}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 t in this.freeTextures)this.freeTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});for(let t in this.usedTextures)this.usedTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function qZ(r,t){let e=r;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===r.RGBA)return 16;if(t===e.RGBA16F)return 8;if(t===e.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function ID(r,t,e,o,n){let s=jZ(t,o),a;if(n){let[p,u]=La(r[0],r[1]);a=p*u}else{let[p,u]=Sp(r[0],r[1]);a=p*u}let i=qZ(e,s);return a*i}function jZ(r,t){switch(r){case rr.PACKED_2X2_FLOAT32:return ih(t);case rr.PACKED_2X2_FLOAT16:return uh(t);case rr.UNPACKED_FLOAT32:return nh(t);case rr.UNPACKED_FLOAT16:return sh(t);case rr.PACKED_4X1_UNSIGNED_BYTE:return ah(t);default:throw new Error(`Unknown physical texture type ${r}`)}}function XZ(r){return A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?rr.PACKED_2X2_FLOAT32:rr.UNPACKED_FLOAT32:r?rr.PACKED_2X2_FLOAT16:rr.UNPACKED_FLOAT16}function vD(r,t){if(r===dr.UPLOAD)return rr.PACKED_2X2_FLOAT32;if(r===dr.RENDER||r==null)return XZ(t);if(r===dr.DOWNLOAD||r===dr.PIXELS)return rr.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function kD(r,t,e){return`${r[0]}_${r[1]}_${t}_${e}`}var or=class{constructor(t,e){this.variableNames=[\"A\"],this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${e}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}},Ut=\"if (isnan(x)) return x;\",ND=\"return x;\",mv=\"return abs(x);\";var TD=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",_D=Ut+`\n return (x < 0.0) ? 0.0 : x;\n`,$D=Ut+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Ba=\"return x;\",ED=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var DD=\"return x;\",AD=`\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`,FD=`\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`,PD=`\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`,OD=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Fr=class{constructor(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${e}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var fh=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length);let e=t.length,o=Dt(\"rc\",e),n=Re(e),s=SD(e,o),a=o.slice(-2),i=e<=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 QZ=Wt.whereImpl,ZZ=1e-7,JZ=1e-4,hh={};function e9(r){return r in hh||(hh[r]={}),hh[r]}var t9=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),r9=600;function o9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*r9/1024/1024}var wu=class extends ao{nextDataId(){return wu.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,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let e;if(t!=null){if(t instanceof kp)e=t;else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"),t);e=new kp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"));e=new kp(o),this.binaryCache=e9(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=e,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=o9(),this.texData=new zo(this,pr())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,e,o,n,s,a){let i=this.makeTensorInfo(e,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:t,texShape:[n,s]},p.texShape=[n,s];let u=Dc(e),c=new Zl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=e,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(t,e,o){if((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().getBool(\"DEBUG\"))&&this.checkNumericalProblems(t),o===\"complex64\"&&t!=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:e,dtype:o,values:t,usage:dr.UPLOAD,refCount:1}),n}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let e=this.texData.get(t);e.refCount++}decRef(t){if(this.texData.has(t)){let e=this.texData.get(t);e.refCount--}}move(t,e,o,n,s){if(A().getBool(\"DEBUG\")&&this.checkNumericalProblems(e),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(t,{shape:o,dtype:n,values:e,usage:dr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let e=this.texData.get(t),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=e;if(a!=null){let m;p?m=new Fr(i,Ba):m=new or(i,Ba);let d=this.runWebGLProgram(m,[{dataId:t,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(t,l)}async read(t){if(this.pendingRead.has(t)){let f=this.pendingRead.get(t);return new Promise(h=>f.push(h))}let e=this.texData.get(t),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=e;if(s!=null){let f;p?f=new Fr(n,Ba):f=new or(n,Ba);let h=this.runWebGLProgram(f,[{dataId:t,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(n))}this.pendingRead.set(t,[]),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(t);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(t,l),d=this.pendingRead.get(t);return this.pendingRead.delete(t),d.forEach(f=>f(m)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&pr().removeDataId(t,this),this.pendingDeletes--),m}readToGPU(t,e={}){let o=this.texData.get(t),{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,Ba):d=new or(s,Ba);let f=this.runWebGLProgram(d,[{dataId:t,shape:s,dtype:i}],i),h=this.readToGPU(f,e);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(t,e.customTexShape),l=pr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype===\"string\")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}checkNumericalProblems(t){if(t!=null)for(let e=0;e0}time(t){let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),t):(t.endMs=y.now(),t)}async getQueryTime(t){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0)return this.gpgpu.waitForQueryAndGetTime(t);let e=t;return e.endMs-e.startMs}disposeData(t,e=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(e?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!e&&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:o}=this.texData.get(t);return o!=null&&(this.disposeData(o.real.dataId,e),this.disposeData(o.imag.dataId,e)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:e,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(t),p=i&&i.origDataId||t,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),e!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(e,n,s,a)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,e=t9){return A().getBool(\"WEBGL_CPU_FORWARD\")&&t.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,t,e)}else n=this.write(o,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}}makeOutput(t,e,o){return pr().makeTensorFromTensorInfo(this.makeTensorInfo(t,e,o),this)}unpackTensor(t){let e=new fh(t.shape);return this.runWebGLProgram(e,[t],t.dtype)}packTensor(t){let e=new mh(t.shape),o=!0;return this.runWebGLProgram(e,[t],t.dtype,null,o)}packedReshape(t,e){let o=[yi(t.shape),...bi(t.shape)],n={dtype:t.dtype,shape:o,dataId:t.dataId},s=[yi(e),...bi(e)],a=new Vc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],t.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}decode(t,e){let o=this.texData.get(t),{isPacked:n,shape:s,dtype:a}=o;if(e!=null){let m=y.sizeFromShape(s),d=e[0]*e[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=Dc(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[e!=null?e:jl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:t}],a,c,u,e);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(t,e,o,n,s=!1,a){let i=this.makeTensorInfo(t.outputShape,o),p=this.texData.get(i.dataId);if(t.packedOutput&&(p.isPacked=!0),t.outPackingScheme===bu.DENSE){let x=a!=null?a:jl(t.outputShape);p.texShape=x.map(b=>b*2)}if(t.outTexUsage!=null&&(p.usage=t.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=e.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(!t.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};t.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!t.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!Cu(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=ER(t,c,l),d=this.getAndSaveBinary(m,()=>_R(this.gpgpu,t,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||$R(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:t.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(t,e,o,n,s=!1){return o=o||e[0].dtype,this.runWebGLProgram(t,e,o,n,s)}getAndSaveBinary(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!=\"undefined\"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let t=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let e=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",t),e>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?ZZ:JZ}uploadToGPU(t){let e=this.texData.get(t),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=e;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=e.texShape;if(l==null&&(l=zI(o,p),e.texShape=l),s!=null){let m=Dc(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=La(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=dr.PIXELS:C.usage=dr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],k=!0,_=this.runWebGLProgram(d,[b],n,S,k),E=this.texData.get(_.dataId);e.texShape=E.texShape,e.isPacked=E.isPacked,e.usage=E.usage,A().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(_.dataId):(e.texture=E.texture,e.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);e.texture=m}}convertAndCacheOnCPU(t,e){let o=this.texData.get(t),{dtype:n}=o;return e!=null&&(o.values=n9(e,n)),o.values}acquireTexture(t,e,o,n){if(this.numBytesInGPU+=this.computeBytes(t,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(t,e,n)}computeBytes(t,e){return t[0]*t[1]*y.bytesPerElement(e)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,e]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(e));return Promise.all(t)}else{for(let[,e]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(e),n(!0)}catch(s){throw s}});t.push(o)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await pS(),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?(qf(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:e,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=qI(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=e,t.customUniformLocations=o,t.infLoc=n,t.nanLoc=s,t.outShapeLocation=a,t.outShapeStridesLocation=i,t.outTexShapeLocation=p}}createTensorFromGPUData(t,e,o){t.channels=t.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=t,p=pr().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,e,o,s,a,i);return pr().makeTensorFromDataId(u,e,o,p)}};wu.nextDataId=0;function n9(r,t){if(t===\"float32\"||t===\"complex64\")return r;if(t===\"int32\"||t===\"bool\"){let e=t===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew wu,2);var Cat={forceHalfFloat:MD};var Wc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Pr=class{constructor(t,e,o){this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${t}\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(t,e,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o);let s=this.outputShape.length;this.enableShapeUniforms=pt(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=Dt(\"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 ${t}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${a}\n\n setOutput(result);\n }\n `}};function At(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var LD={kernelName:wo,backendName:\"webgl\",kernelFunc:At};function Or(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,\"complex64\"),a=e.texData.get(s.dataId),i=At({inputs:{x:o},backend:e}),p=At({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var BD={kernelName:Fi,backendName:\"webgl\",kernelFunc:Or};var dv=\"return (a < 0.) ? b * a : a;\",fv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function a9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=e.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(fv,n.shape,a.shape):new Pr(dv,n.shape,a.shape),p=e.runWebGLProgram(i,[n,a],\"float32\");return e.disposeIntermediateTensorInfo(a),p}var zD={kernelName:Rn,backendName:\"webgl\",kernelFunc:a9};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 i9(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(gv,o.shape,n.shape):new Pr(hv,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],\"float32\")}var VD={kernelName:os,backendName:\"webgl\",kernelFunc:i9};var Po=\"if (isnan(x)) return x;\";function xe({opSnippet:r,packedOpSnippet:t,cpuKernelImpl:e,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&e!=null){let l=i.texData.get(a.dataId),m=e(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&t!=null,c;return u?c=new Fr(a.shape,t):c=new or(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:t,checkOutOfBounds:e=!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},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],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\")&&t!=null,d;return m?d=new jr(t,p.shape,u.shape,e):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function Ci(r,t=!1){if(r===\"linear\")return t?DD:ND;if(r===\"relu\")return t?FD:_D;if(r===\"elu\")return t?AD:TD;if(r===\"relu6\")return t?PD:$D;if(r===\"prelu\")return t?gv:hv;if(r===\"leakyrelu\")return t?fv:dv;if(r===\"sigmoid\")return t?OD:ED;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Uc=class{constructor(t,e,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=pt(this.outputShape.length);let c=n?t[1]:t[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\";t[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&&!Cu(n.shape,p)&&!(c.texture!==null&&Cu(c.shape,p))?GD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var HD={kernelName:da,backendName:\"webgl\",kernelFunc:te};var rm=class{constructor(t,e){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(e!=null){let l=1/e;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(t,e){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=\"0.0\",p=\"\";e===\"prod\"?i=\"1.0\":e===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):e===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"sum\"?u=\"sumValue\":e===\"prod\"?u=\"prodValue\":e===\"all\"?u=\"allValue\":e===\"any\"&&(u=\"anyValue\");let c=Math.floor(o/4)*4,l=o%4,m=`\n if (${e===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${e===\"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 (${e===\"min\"} || ${e===\"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\";e===\"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\"):e===\"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 p9(r){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let e=t.length?t[t.length-1].outSize:r[1],o=w.computeOptimalWindowSize(e);t.push({inSize:e,windowSize:o,outSize:Math.ceil(e/o)})}return t}function Yr(r,t,e,o){let n=p9(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(t);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=lv(\"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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=e?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?Ci(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>yv&&U===!1){let Y=E,J=R;e&&(Y=Ct({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=Ct({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=Tp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,t.dtype),J=new Uc(k,_,[P,d,f],e,o,M,z,L,B),re=[E,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 l9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var XD={kernelName:Io,backendName:\"webgl\",kernelFunc:l9};var YD=\"return abs(x);\";function m9(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=e.texData.get(o.dataId),a=ch(s.values);return e.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,YD):n=new or(o.shape,YD),e.runWebGLProgram(n,[o],o.dtype)}var QD={kernelName:Xs,backendName:\"webgl\",kernelFunc:m9};var d9=Ut+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,f9=xe({opSnippet:d9}),ZD={kernelName:Wo,backendName:\"webgl\",kernelFunc:f9};var h9=Ut+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,backendName:\"webgl\",kernelFunc:g9};var eA=\"return a + b;\",x9=nt({opSnippet:eA,packedOpSnippet:eA,supportsComplex:!0,cpuKernelImpl:RR}),tA={kernelName:uo,backendName:\"webgl\",kernelFunc:x9};var bh=class{constructor(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.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(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.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:t,backend:e}=r,o=t;if(o.length===1)return At({inputs:{x:o[0]},backend:e});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:e}),c=wh({inputs:o.slice(p),backend:e});return wh({inputs:[u,c],backend:e})}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 e.runWebGLProgram(i,o,n)}var rA={kernelName:Go,backendName:\"webgl\",kernelFunc:wh};function y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"all\",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var oA={kernelName:Ho,backendName:\"webgl\",kernelFunc:y9};function b9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"any\",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Ko,backendName:\"webgl\",kernelFunc:b9};var Sh=class{constructor(t,e,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=t;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=e===\"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(t,e,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,y.assert(t.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=t[t.length-1],a=Math.ceil(s/e);this.outputShape=t.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=Dt(\"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=Dt(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=Dt(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=Dt(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=Dt(\"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.)`,E=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 ${E}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${c[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${c[p-2]} < ${i[p-2]-1};\n ${l}\n ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f},\n sourceLocB${f}, sourceLocA${f}) * ${e};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${e}; 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 sA(r,t,e,o=null){let n=t.shape[0],s=t.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,e,o==null),u=[t];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,\"int32\");if(c.shape[1]===1)return c;let l=sA(r,t,e,c);return r.disposeIntermediateTensorInfo(c),l}function aA(r,t,e,o=null){let n=o!=null?o.shape:t.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(n,a,e,o==null),p=o==null?[t]:[t,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===t.shape.length){let c=aA(r,t,e,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,t,e,o){let n=[e];if(w.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,t.shape.length),!A().getBool(\"WEBGL_PACK_REDUCE\")||t.shape.length<=2){let s=[],a=r.texData.get(t.dataId),i=a!==null&&a.isPacked,p=t;i&&(p=r.unpackTensor(t),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=sA(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 aA(r,t,o)}function C9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:e,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(e,p,a[0],\"max\");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var iA={kernelName:Ys,backendName:\"webgl\",kernelFunc:C9};function w9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:e,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(e,p,a[0],\"min\");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Qs,backendName:\"webgl\",kernelFunc:w9};var S9=Ut+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,I9=xe({opSnippet:S9}),pA={kernelName:qo,backendName:\"webgl\",kernelFunc:I9};var v9=Ut+\"return log(x + sqrt(x * x + 1.0));\",k9=xe({opSnippet:v9}),cA={kernelName:jo,backendName:\"webgl\",kernelFunc:k9};var N9=Ut+`\n return atan(x);\n`,T9=xe({opSnippet:N9}),lA={kernelName:Xo,backendName:\"webgl\",kernelFunc:T9};var _9=Wc+`\n return atan(a, b);\n`,$9=`\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`,E9=nt({opSnippet:_9,packedOpSnippet:$9}),mA={kernelName:Qo,backendName:\"webgl\",kernelFunc:E9};var R9=Ut+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelName:Yo,backendName:\"webgl\",kernelFunc:D9};var Us=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=[\"x\"],e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=t.filterWidth,i=t.strideHeight,p=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterHeight,m=t.effectiveFilterWidth,d=t.padInfo.top,f=t.padInfo.left;this.outputShape=t.outShape;let h=e===\"avg\",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.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 >= ${t.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 >= ${t.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=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");let k=Math.floor(a/4)*4,_=a%4,E=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${C}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${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 >= ${t.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 >= ${t.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${c};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n getValue(batch, xR, xC + 3 * ${c}, d)\n );\n\n ${E}\n }\n\n int xC = xCCorner + ${k};\n if (${_===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n initializationValue\n );\n\n ${E}\n }\n }\n setOutput(${S});\n }\n `}},Iu=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=[\"x\"],e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=t.filterWidth,i=t.strideDepth,p=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,l=t.dilationHeight,m=t.dilationWidth,d=t.effectiveFilterDepth,f=t.effectiveFilterHeight,h=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;let C=e===\"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 >= ${t.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 >= ${t.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 >= ${t.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 * ${t.inDepth} + xD) * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`((xD * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`wD * ${f} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",_=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"avg\"&&(_=\"avgValue / max(count, 1.0)\");let E=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 >= ${t.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 >= ${t.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 >= ${t.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${E}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${D}\n }\n\n int xC = xCCorner + ${E};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${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 A9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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 At({inputs:{x:n},backend:e});let l=new Us(c,\"avg\",!1);return e.runWebGLProgram(l,[n],\"float32\")}var fA={kernelName:Zo,backendName:\"webgl\",kernelFunc:A9};function F9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 Iu(l,\"avg\",!1);return e.runWebGLProgram(m,[n],\"float32\")}var hA={kernelName:Zs,backendName:\"webgl\",kernelFunc:F9};var kh=class{constructor(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=p-1-t.padInfo.top,l=u-1-t.padInfo.left,m=1/(e*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 >= ${t.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 >= ${t.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(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,m=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,h=m-1-t.padInfo.top,g=d-1-t.padInfo.left,x=1/(e*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 >= ${t.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 >= ${t.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 >= ${t.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 P9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGLProgram(d,[n],a.dtype)}var gA={kernelName:Ai,backendName:\"webgl\",kernelFunc:P9};function O9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGLProgram(l,[n],a.dtype)}var xA={kernelName:Di,backendName:\"webgl\",kernelFunc:O9};function M9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var yA={kernelName:Jo,backendName:\"webgl\",kernelFunc:M9};var Th=class{constructor(t,e,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i=\"0.0\";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=t,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(t,e,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i=\"vec4(0.0)\";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=t,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 L9=({inputs:r,backend:t,attrs:e})=>{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}=e;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 t.runWebGLProgram(m,u,u[0].dtype)},bA={kernelName:vn,backendName:\"webgl\",kernelFunc:L9};var $h=class{constructor(t){this.variableNames=[\"source\"],this.outputShape=t,this.rank=t.length;let e=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=B9(this.rank),n,s=t.map((a,i)=>`sourceLoc.${bv[i]} = start[${i}] + coords.${bv[i]};`);n=`\n ${e} sourceLoc;\n ${e} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},bv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function B9(r){if(r===1)return\"sourceLoc\";if(r<=6)return bv.slice(0,r).map(t=>\"sourceLoc.\"+t).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var Eh=class{constructor(t){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let e=Re(this.rank),o=Dt(\"coords\",this.rank),n=Dt(\"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]} < ${t[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]} < ${t[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${t[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${e}(${t.map((c,l)=>`start[${l}]`).join()});`:t.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(`\n`);this.userCode=`\n void main() {\n ${e} coords = getOutputCoords();\n ${e} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function z9(r,t,e,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(e,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=e,a.dtype=r.dtype;let i=ct.computeFlatOffset(t,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:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=ct.parseSliceParams(n,s,a);if(ct.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);if(e.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=e.texData.get(n.dataId),m=pD(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=e.texData.get(n.dataId),c=ct.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Eh(p):new $h(p),m=[i];return e.runWebGLProgram(l,[n],n.dtype,m)}return e.uploadToGPU(n.dataId),z9(n,i,p,e)}var CA={kernelName:ha,backendName:\"webgl\",kernelFunc:Gs};var V9=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=Ct({inputs:{x:f},backend:e,attrs:{perm:u}}),g=te({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeIntermediateTensorInfo(b)),x},wA={kernelName:Js,backendName:\"webgl\",kernelFunc:V9};function W9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),u=ph(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var SA={kernelName:en,backendName:\"webgl\",kernelFunc:W9};var U9=`\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`,G9=`\n return float(int(a.r) & int(b.r));\n`;function H9(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(e.shouldExecuteOnCPU([o,n])||a===1){let p=e.texData.get(o.dataId).values,u=e.texData.get(n.dataId).values,[c,l]=AR(o.shape,n.shape,p,u,o.dtype),m=e.makeTensorInfo(l,o.dtype),d=e.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(U9,o.shape,n.shape,!1):i=new Pr(G9,o.shape,n.shape),e.runWebGLProgram(i,[o,n],o.dtype)}var IA={kernelName:ja,backendName:\"webgl\",kernelFunc:H9};function K9(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.readSync(o.dataId),a=e.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var vA={kernelName:ea,backendName:\"webgl\",kernelFunc:K9};var q9=\"return float(a != b);\",Cv=nt({opSnippet:q9,cpuKernelImpl:eD,dtype:\"bool\"}),kA={kernelName:Qn,backendName:\"webgl\",kernelFunc:Cv};function wi(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:e})}var NA={kernelName:qi,backendName:\"webgl\",kernelFunc:wi};var j9=\"return float(int(x));\";function TA(r,t){let e=new or(r.shape,j9),o=t.runWebGLProgram(e,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function wv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return At({inputs:{x:n},backend:e});let a=Gr(n.shape),i=wv({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),p=Or({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=wi({inputs:{input:n},backend:e}),i=wv({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.texData.get(n.dataId).values,[i,p,u]=FR(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s===\"int32\")return TA(n,e);if(s===\"bool\"){let a=e.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=Cv({inputs:{a:n,b:a},backend:e});return e.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var _A={kernelName:bo,backendName:\"webgl\",kernelFunc:wv};var $A=\"return ceil(x);\",X9=xe({opSnippet:$A,packedOpSnippet:$A,cpuKernelImpl:PR}),EA={kernelName:tn,backendName:\"webgl\",kernelFunc:X9};var Rh=class{constructor(t){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=t,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(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=t,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 Y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGLProgram(i,[n],n.dtype,p)}var RA={kernelName:Co,backendName:\"webgl\",kernelFunc:Y9};var Ah=class{constructor(t){this.variableNames=[\"real\",\"imag\"],this.outputShape=t,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 DA(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function Q9(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.texData.get(o.dataId),s=new Ah(o.shape),a=[DA(o,n.complexTensorInfos.real),DA(o,n.complexTensorInfos.imag)];return e.runWebGLProgram(s,a,a[0].dtype)}var AA={kernelName:Pi,backendName:\"webgl\",kernelFunc:Q9};var Fh=class{constructor(t){this.outputShape=[],this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((a,i)=>`T${i}`);let e=new Array(t.length-1);e[0]=t[0][1];for(let a=1;a`T${g}`);let p=new Array(t.length-1);p[0]=t[0][e];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,t,e){let o=r.indexOf(t);return r.map((s,a)=>a===o?`${s} - ${e}`:s).join()}function $p(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:e})}var FA={kernelName:Gi,backendName:\"webgl\",kernelFunc:$p};function Gc(r,t,e){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>wi({inputs:{input:b},backend:e})),f=r.map(b=>$p({inputs:{input:b},backend:e})),h=Gc(d,t,e),g=Gc(f,t,e),x=Or({inputs:{real:h,imag:g},backend:e});return d.forEach(b=>e.disposeIntermediateTensorInfo(b)),f.forEach(b=>e.disposeIntermediateTensorInfo(b)),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),x}let n=e.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(t))];return te({inputs:{x:S},backend:e,attrs:{shape:_}})}),f=d.map(S=>({vals:e.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=OR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),t),C=e.makeTensorInfo(b,o,x);return d.forEach(S=>e.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 or(r[0].shape,Ba):new Fr(r[0].shape,Ba);return e.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),t);return e.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=Z9(s,t,e),c=new Fh(p.map(d=>d.shape)),l=e.runWebGLProgram(c,p,o);p.forEach(d=>e.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:e});return e.disposeIntermediateTensorInfo(l),m}function Z9(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(t))]},backend:e})),outShape:o}}function Sv(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:e}):Gc(p,s,e)}var PA={kernelName:ta,backendName:\"webgl\",kernelFunc:Sv};var Hc=class{constructor(t,e=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let a=t.padInfo.top,i=t.padInfo.left,p=t.strideHeight,u=t.strideWidth,c=t.dilationHeight,l=t.dilationWidth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4,g=t.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 _=e?\"result += getBiasAtOutCoords();\":\"\";e&&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 >= ${t.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 >= ${t.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(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let e=t.padInfo.front,o=t.padInfo.top,n=t.padInfo.left,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${e}, ${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 >= ${t.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 >= ${t.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 >= ${t.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 Kc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.padInfo.left,i=t.strideWidth,p=t.dilationWidth,u=t.filterHeight,c=t.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,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function zh({x:r,filter:t,convInfo:e,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=e.inChannels,l=p[0]*p[1]*p[2],m=e.outChannels,d=e.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>yv)&&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,e.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(Cu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});x.push(E);let R=_p({a:k,b:E,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=e.outShape,g=At({inputs:{x:R},backend:o}),g.shape=e.outShape,x.push(R)}else{let S=e.outHeight*e.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[e.batchSize,S,e.inChannels]:[e.batchSize,e.inChannels,S]}}),_=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}}),E=_p({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:e.outShape}}),x.push(k),x.push(_),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Vh({x:r,filter:t,convInfo:e,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}=e,f=d===\"channelsLast\",h=p*u*c,g=m*l,x=[e.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:t},backend:o,attrs:{shape:[1,h,y.sizeFromShape(t.shape)/h]}});S.push(k);let _=new Lh(x,e),E=[r.shape,[e.padInfo.top,e.padInfo.left],[e.strideHeight,e.strideWidth],[e.dilationHeight,e.dilationWidth],[e.inChannels],[e.filterWidth*e.inChannels],[e.outWidth]],R=o.runWebGLProgram(_,[r],\"float32\",E),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?Ci(i,!0):null,B=new Uc(f?D.shape:k.shape,f?k.shape:D.shape,f?[e.batchSize,g,e.outChannels]:[e.batchSize,e.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:e.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function J9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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:e});else if(m.strideWidth<=2&&l===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new Kc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=e.runWebGLProgram(h,[n,s],\"float32\",g)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))d=Vh({x:n,filter:s,convInfo:m,backend:e});else{let h=new Hc(m);d=e.runWebGLProgram(h,[n,s],\"float32\")}let f=te({inputs:{x:d},backend:e,attrs:{shape:m.outShape}});return e.disposeIntermediateTensorInfo(d),f}var OA={kernelName:rn,backendName:\"webgl\",kernelFunc:J9};var Wh=class{constructor(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.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 < ${t.batchSize}; b++) {\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${e} - ${n};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${t.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(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dataFormat===\"channelsLast\",i=e-1-t.padInfo.top,p=o-1-t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${e} - 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 >= ${t.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 < ${t.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(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.padInfo.front,a=t.padInfo.top,i=t.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 < ${t.batchSize}; b++) {\n for (int yF = 0; yF < ${t.outDepth}; yF++) {\n int xF = wF + yF * ${e} - ${s};\n\n if (xF < 0 || xF >= ${t.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${t.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(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=e-1-t.padInfo.front,u=o-1-t.padInfo.top,c=n-1-t.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 < ${e}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${t.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${e} - 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 >= ${t.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 >= ${t.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 < ${t.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 eJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGLProgram(d,[n,s],\"float32\")}var MA={kernelName:Oi,backendName:\"webgl\",kernelFunc:eJ};var Kh=class{constructor(t){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=t.inShape,this.enableShapeUniforms=pt(this.outputShape.length);let e=t.filterHeight,o=t.filterWidth,n=e-1-t.padInfo.top,s=o-1-t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${e} - 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 < ${t.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 < ${t.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${t.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 < ${t.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 < ${t.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 tJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new Uh(m);return e.runWebGLProgram(d,[n,s],\"float32\")}}var LA={kernelName:on,backendName:\"webgl\",kernelFunc:tJ};function rJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var BA={kernelName:nn,backendName:\"webgl\",kernelFunc:rJ};function oJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var zA={kernelName:Xa,backendName:\"webgl\",kernelFunc:oJ};function nJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var VA={kernelName:sn,backendName:\"webgl\",kernelFunc:nJ};var sJ=Po+`\n return cos(x);\n`,aJ=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,iJ=xe({opSnippet:sJ,packedOpSnippet:aJ}),WA={kernelName:an,backendName:\"webgl\",kernelFunc:iJ};var uJ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,pJ=xe({opSnippet:uJ}),UA={kernelName:un,backendName:\"webgl\",kernelFunc:pJ};var qh=class{constructor(t,e,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=t,[c]=e,[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 cJ=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new qh(n.shape,s.shape,i,p,u);return e.runWebGLProgram(c,[n,s,a],\"float32\")},GA={kernelName:ln,backendName:\"webgl\",kernelFunc:cJ};var Ep;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Ep||(Ep={}));var om=class{constructor(t,e,o,n){this.op=t,this.outputShape=e,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===Ep.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${HA(s,\"coords\",this.op)})`,p=this.outputShape[this.outputShape.length-1],u=\"\",c=\"\";o?(u=n?`end != ${p-1}`:\"end != 0\",c=n?\"end + 1\":\"end - 1\"):(u=n?`end + pow2 < ${p}`:\"end >= pow2\",c=n?\"end + pow2\":\"end - pow2\"),this.userCode=`\n void main() {\n ${Re(s)} coords = getOutputCoords();\n int end = ${KA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${KA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${HA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function HA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function KA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function jh(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=Ct({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:e});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=e.runWebGLProgram(d,[l],l.dtype,f),e.disposeIntermediateTensorInfo(h)}if(n){let m=new om(r,p.shape,n,s),d=l;l=e.runWebGLProgram(m,[l],l.dtype),e.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=Ct({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(p),d}return l}function lJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return jh(Ep.Prod,n,e,s,a,i)}var qA={kernelName:pn,backendName:\"webgl\",kernelFunc:lJ};function mJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return jh(Ep.Sum,n,e,s,a,i)}var jA={kernelName:cn,backendName:\"webgl\",kernelFunc:mJ};function dJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=ph(p,u,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=e.bufferSync(n),u=e.bufferSync(s),c=DR(p,u,a,i);return e.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var XA={kernelName:ra,backendName:\"webgl\",kernelFunc:dJ};var Xh=class{constructor(t,e,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=t,this.blockSize=e,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 / ${e};\n int offset_h = imod(h, ${e});\n int in_w = w / ${e};\n int offset_w = imod(w, ${e});\n int offset_d = (offset_h * ${e} + 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 fJ(r){let{inputs:t,backend:e,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=new Xh(f,s,a);return e.runWebGLProgram(h,[n],n.dtype)}var YA={kernelName:mn,backendName:\"webgl\",kernelFunc:fJ};var qc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.filterHeight,i=t.filterWidth,p=t.outChannels/t.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=e?\"result += getBiasAtOutCoords();\":\"\";e&&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 jc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.outChannels/t.inChannels,i=t.padInfo.left,p=t.strideWidth,u=t.dilationWidth,c=t.filterHeight,l=t.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 jc(l):m=new qc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return e.runWebGLProgram(m,[n,s],\"float32\",d)}var QA={kernelName:dn,backendName:\"webgl\",kernelFunc:hJ};var Yh=class{constructor(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.outChannels/t.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 < ${t.batchSize}; b++) {\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${e} - ${n};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${t.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(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=e-1-t.padInfo.top,i=o-1-t.padInfo.left,p=t.outChannels/t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${e} - 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 >= ${t.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 gJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGLProgram(m,[n,s],\"float32\")}var ZA={kernelName:Mi,backendName:\"webgl\",kernelFunc:gJ};function xJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGLProgram(m,[n,s],\"float32\")}var JA={kernelName:Li,backendName:\"webgl\",kernelFunc:xJ};var Zh=class{constructor(t){this.variableNames=[\"X\"],this.outputShape=[t,t],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 yJ(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Zh(s),p=e.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(p),u}var eF={kernelName:oa,backendName:\"webgl\",kernelFunc:yJ};var Jh=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let{inHeight:e,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=t,{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 < ${e}) {\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 bJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Jh(u);c=e.runWebGLProgram(l,[n,s],\"float32\");let m=te({inputs:{x:c},backend:e,attrs:{shape:u.outShape}});return e.disposeIntermediateTensorInfo(c),m}var tF={kernelName:fn,backendName:\"webgl\",kernelFunc:bJ};function CJ(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=Tp({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var rF={kernelName:Vi,backendName:\"webgl\",kernelFunc:CJ};var wJ=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",SJ=`\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`,IJ=xe({opSnippet:wJ,packedOpSnippet:SJ}),oF={kernelName:gn,backendName:\"webgl\",kernelFunc:IJ};var vJ=\"return (b >= 0.0) ? a : a * (b + 1.0);\",kJ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,NJ=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(kJ,o.shape,n.shape):new Pr(vJ,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],o.dtype)},nF={kernelName:Ya,backendName:\"webgl\",kernelFunc:NJ};var TJ=`\n return vec4(equal(a, b));\n`,_J=\"return float(a == b);\",$J=nt({opSnippet:_J,packedOpSnippet:TJ,dtype:\"bool\",cpuKernelImpl:MR}),sF={kernelName:yn,backendName:\"webgl\",kernelFunc:$J};var EJ=`\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`,RJ=xe({opSnippet:EJ}),aF={kernelName:xn,backendName:\"webgl\",kernelFunc:RJ};var DJ=Po+`\n return exp(x);\n`,AJ=`\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`,Iv=xe({opSnippet:DJ,packedOpSnippet:AJ,cpuKernelImpl:LR,dtype:\"float32\"}),iF={kernelName:bn,backendName:\"webgl\",kernelFunc:Iv};function eg(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 uF={kernelName:na,backendName:\"webgl\",kernelFunc:eg};var pF=\"return exp(x) - 1.0;\",FJ=xe({opSnippet:pF,packedOpSnippet:pF,cpuKernelImpl:BR}),cF={kernelName:Cn,backendName:\"webgl\",kernelFunc:FJ};var nm=class{constructor(t,e,o){this.variableNames=[\"real\",\"imag\"];let n=e[1];this.outputShape=e;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:\"1.0\",i;if(t===\"real\")i=\"return real * expR - imag * expI;\";else if(t===\"imag\")i=\"return real * expI + imag * expR;\";else throw new Error(`FFT component must be either \"real\" or \"imag\", got ${t}.`);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,t,e){let o=e.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:e,attrs:{shape:[a,s]}}),p=i.shape,u=new nm(\"real\",p,t),c=new nm(\"imag\",p,t),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=e.runWebGLProgram(u,l,\"float32\"),d=e.runWebGLProgram(c,l,\"float32\"),f=Or({inputs:{real:m,imag:d},backend:e});e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:e,attrs:{shape:r.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(f),h}function PJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return tg(o,!1,e)}var lF={kernelName:Wi,backendName:\"webgl\",kernelFunc:PJ};var rg=class{constructor(t,e){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=t,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function Si(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new rg(o,n),i=[[n]];return t.runWebGLProgram(a,[],s,i)}}var mF={kernelName:sa,backendName:\"webgl\",kernelFunc:Si};var og=class{constructor(t){this.variableNames=[\"Image\"],this.outputShape=[];let e=t[2];this.outputShape=t,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${e} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${e}) {\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 dF={kernelName:wn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new og(e.shape);return o.runWebGLProgram(n,[e],e.dtype)}};var fF=\"return floor(x);\",OJ=xe({opSnippet:fF,packedOpSnippet:fF,cpuKernelImpl:zR}),hF={kernelName:Sn,backendName:\"webgl\",kernelFunc:OJ};var MJ=`\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`,LJ=`\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`,BJ=nt({opSnippet:MJ,packedOpSnippet:LJ,dtype:\"int32\"}),gF={kernelName:In,backendName:\"webgl\",kernelFunc:BJ};var ng=class{constructor(t){this.variableNames=[\"A\"];let e=vt(),[o,n]=t;this.outputShape=t,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 = ${e.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(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let e=vt(),[o,n]=t;this.outputShape=t,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 = ${e.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 ${e.output} = result;\n }\n `}};var xF={kernelName:Mu,backendName:\"webgl\",kernelFunc:zJ},Xc,vv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function zJ(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{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\");(Xc==null||h!==vv)&&(vv=h,Xc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:vv})),Xc.canvas.width=p,Xc.canvas.height=u,Xc.drawImage(n,0,0,p,u),n=Xc.canvas}let m=e.makeTensorInfo(c,\"int32\");e.texData.get(m.dataId).usage=dr.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new sg(l):new ng(l),f=e.runWebGLProgram(d,[m],\"int32\");return e.disposeData(m.dataId),f}function VJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,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=e.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:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?Ci(d,!0):null,D=new Kc(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=e.runWebGLProgram(D,O,\"float32\",P)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=Vh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?Ci(d,!1):null,D=new Hc(g,C,R,S,k),P=_();x=e.runWebGLProgram(D,P,\"float32\")}let E=te({inputs:{x},backend:e,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>e.disposeIntermediateTensorInfo(R)),E}var yF={kernelName:vo,backendName:\"webgl\",kernelFunc:VJ};function WJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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?Ci(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=e.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(P),f.push(P)}let E;x?E=new jc(g,S,b,k,_):E=new qc(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=e.runWebGLProgram(E,C,\"float32\",R);return f.forEach(P=>e.disposeIntermediateTensorInfo(P)),D}var bF={kernelName:ko,backendName:\"webgl\",kernelFunc:WJ};var ag=class{constructor(t,e,o,n){this.sliceDim=t,this.strides=e,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 UJ(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=te({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let x=e.readSync(n.dataId),b=e.bufferSync(o),C=VR(x,b,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,C.values)}let f=new ag(a,l,[u,c],o.shape),h=e.runWebGLProgram(f,[d,m],d.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:p}});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(h),g}var CF={kernelName:kn,backendName:\"webgl\",kernelFunc:UJ};var ig=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],this.outputShape=e,this.rank=e.length;let o=Re(this.rank),n=GJ(t,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 < ${t[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function GJ(r,t){let e=[\"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:e,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:e,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(e.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=e.bufferSync(d),C=e.bufferSync(m),S=WR(C,b,f);return l.forEach(k=>e.disposeIntermediateTensorInfo(k)),e.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(m.shape,f),g=e.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}var wF={kernelName:aa,backendName:\"webgl\",kernelFunc:kv};var HJ=\"return float(a > b);\",KJ=`\n return vec4(greaterThan(a, b));\n`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,cpuKernelImpl:UR,dtype:\"bool\"}),SF={kernelName:Nn,backendName:\"webgl\",kernelFunc:qJ};var jJ=\"return float(a >= b);\",XJ=`\n return vec4(greaterThanEqual(a, b));\n`,YJ=nt({opSnippet:jJ,packedOpSnippet:XJ,dtype:\"bool\",cpuKernelImpl:GR}),IF={kernelName:Tn,backendName:\"webgl\",kernelFunc:YJ};function QJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return tg(o,!0,e)}var vF={kernelName:Ui,backendName:\"webgl\",kernelFunc:QJ};var ZJ=\"return float(!isnan(x) && !isinf(x));\",JJ=xe({opSnippet:ZJ,dtype:\"bool\"}),kF={kernelName:_n,backendName:\"webgl\",kernelFunc:JJ};var eee=\"return float(isinf(x));\",tee=xe({opSnippet:eee,dtype:\"bool\"}),NF={kernelName:$n,backendName:\"webgl\",kernelFunc:tee};var ree=\"return float(isnan(x));\",oee=xe({opSnippet:ree,dtype:\"bool\"}),TF={kernelName:En,backendName:\"webgl\",kernelFunc:oee};var nee=\"return float(a < b);\",see=`\n return vec4(lessThan(a, b));\n`,aee=nt({opSnippet:nee,packedOpSnippet:see,cpuKernelImpl:HR,dtype:\"bool\"}),_F={kernelName:Dn,backendName:\"webgl\",kernelFunc:aee};var iee=\"return float(a <= b);\",uee=`\n return vec4(lessThanEqual(a, b));\n`,pee=nt({opSnippet:iee,packedOpSnippet:uee,cpuKernelImpl:KR,dtype:\"bool\"}),$F={kernelName:An,backendName:\"webgl\",kernelFunc:pee};function cee(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=qR(o,n,s);return t.makeTensorInfo([a.length],\"float32\",a)}var EF={kernelName:Fn,backendName:\"webgl\",kernelFunc:cee};var lee=Po+`\n return x < 0.0 ? 0./0. : log(x);\n`,mee=`\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`,dee=xe({opSnippet:lee,packedOpSnippet:mee,cpuKernelImpl:jR}),RF={kernelName:Pn,backendName:\"webgl\",kernelFunc:dee};var fee=Po+`\n return log(1.0 + x);\n`,hee=xe({opSnippet:fee}),DF={kernelName:On,backendName:\"webgl\",kernelFunc:hee};var gee=\"return float(a >= 1.0 && b >= 1.0);\",xee=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,yee=nt({opSnippet:gee,packedOpSnippet:xee,dtype:\"bool\"}),AF={kernelName:Mn,backendName:\"webgl\",kernelFunc:yee};var bee=\"return float(!(x >= 1.0));\",Cee=xe({opSnippet:bee}),FF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Cee};var wee=\"return float(a >= 1.0 || b >= 1.0);\",See=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Iee=nt({opSnippet:wee,packedOpSnippet:See,dtype:\"bool\"}),PF={kernelName:Bn,backendName:\"webgl\",kernelFunc:Iee};var ug=class{constructor(t,e,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=e,i=t[3]-1;this.outputShape=t;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(t,e,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=e,i=t[3]-1;this.outputShape=t;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 vee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGLProgram(u,[n],n.dtype)},OF={kernelName:zn,backendName:\"webgl\",kernelFunc:vee};var cg=class{constructor(t,e,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,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 - ${e})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${e} + 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 kee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new cg(n.shape,i,p,u,c);return e.runWebGLProgram(l,[n,s,a],n.dtype)},MF={kernelName:Qa,backendName:\"webgl\",kernelFunc:kee};function LF(r,t,e,o){let n=y.sizeFromShape(t),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:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Nv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=e.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:e});let l=new Us(c,\"max\",!1);return e.runWebGLProgram(l,[n],n.dtype)}var VF={kernelName:Un,backendName:\"webgl\",kernelFunc:$ee};function Eee(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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\",!1);return e.runWebGLProgram(m,[n],n.dtype)}var WF={kernelName:ia,backendName:\"webgl\",kernelFunc:Eee};var lg=class{constructor(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;let e=t.strideHeight,o=t.strideWidth,n=t.dilationHeight,s=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=s-1-t.padInfo.top,p=a-1-t.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) / ${e}.0;\n\n if (dyR < 0.0 || dyR >= ${t.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 >= ${t.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(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=p-1-t.padInfo.front,m=u-1-t.padInfo.top,d=c-1-t.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) / ${e}.0;\n\n if (dyD < 0.0 || dyD >= ${t.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 >= ${t.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 >= ${t.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 Ree(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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=e.runWebGLProgram(d,[a],a.dtype),h=new mg(m),g=e.runWebGLProgram(h,[n,f],a.dtype);return e.disposeIntermediateTensorInfo(f),g}var UF={kernelName:Ki,backendName:\"webgl\",kernelFunc:Ree};function Dee(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.runWebGLProgram(f,[i],i.dtype),g=new lg(m),x=e.runWebGLProgram(g,[n,h],i.dtype);return e.disposeIntermediateTensorInfo(h),x}var GF={kernelName:Hi,backendName:\"webgl\",kernelFunc:Dee};function HF(r,t,e,o){let n=new Us(e,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new Us(e,\"max\",!0,!0,t);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var KF={kernelName:ua,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;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]=HF(o,i,c,p);return[l,m]}};function qF(r,t,e,o){let n=y.sizeFromShape(t),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:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var jF={kernelName:Gn,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{keepDims:n,axis:s}=t,a=e,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]+t[l]+c[1]);let n=t.length,s=Re(n),a=e.map(c=>c[0]).join(\",\"),i=e.map((c,l)=>c[0]+t[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(t,e,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((f,h)=>f[0]+t[h]+f[1]);let n=t.length,s=Re(n),a=e.map(f=>f[0]).join(\",\"),i=e.map((f,h)=>f[0]+t[h]).join(\",\"),p=Dt(\"rc\",n),u=Dt(\"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 Mee=({inputs:r,backend:t,attrs:e})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new fg(o.shape,n,s):new dg(o.shape,n,s);return t.runWebGLProgram(a,[o],o.dtype)},QF={kernelName:qn,backendName:\"webgl\",kernelFunc:Mee};var Lee=`if (b == 0.0) return NAN;\n return mod(a, b);`,Bee=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+Xr+`\n return result;\n`,zee=nt({opSnippet:Lee,packedOpSnippet:Bee}),ZF={kernelName:jn,backendName:\"webgl\",kernelFunc:zee};var hg=class{constructor(t,e,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[t,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 < ${e-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(${e-1}));\n }\n `}};var Vee=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,Wee=`\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`,Tv=nt({opSnippet:Vee,packedOpSnippet:Wee,checkOutOfBounds:!0}),JF={kernelName:hn,backendName:\"webgl\",kernelFunc:Tv};var e3=\"return a - b;\",_v=nt({opSnippet:e3,packedOpSnippet:e3,supportsComplex:!0,cpuKernelImpl:yD}),t3={kernelName:_s,backendName:\"webgl\",kernelFunc:_v};function $v(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Nv({inputs:{x:n},backend:e,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:e,attrs:{shape:p}}),c=_v({inputs:{a:n,b:u},backend:e}),l=Iv({inputs:{x:c},backend:e}),m=Tp({inputs:{x:l},backend:e,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:e,attrs:{shape:p}}),f=Tv({inputs:{a:l,b:d},backend:e});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}var r3={kernelName:vs,backendName:\"webgl\",kernelFunc:$v};function Uee(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:$v({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=e.runWebGLProgram(l,[p],\"int32\",m);return i||e.disposeIntermediateTensorInfo(p),d}var o3={kernelName:Xn,backendName:\"webgl\",kernelFunc:Uee};var Gee=Ut+`\n return -x;\n`,Hee=`\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 Kee(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.texData.get(o.dataId),[a,i]=JR(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,Hee):n=new or(o.shape,Gee),e.runWebGLProgram(n,[o],o.dtype)}var n3={kernelName:pa,backendName:\"webgl\",kernelFunc:Kee};var qee=Wt.nonMaxSuppressionV3Impl;function jee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=qee(u,c,a,i,p);return e.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var s3={kernelName:Zn,backendName:\"webgl\",kernelFunc:jee};var Xee=Wt.nonMaxSuppressionV4Impl;function Yee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Xee(c,l,a,i,p,u);return[e.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),e.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var a3={kernelName:Za,backendName:\"webgl\",kernelFunc:Yee};var Qee=Wt.nonMaxSuppressionV5Impl;function Zee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Qee(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),e.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var i3={kernelName:Jn,backendName:\"webgl\",kernelFunc:Zee};var gg=class{constructor(t,e,o,n){this.variableNames=[\"indices\"],this.outputShape=[t,e],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 Jee=r=>{let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{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:e,attrs:{shape:[u]}}),m=e.runWebGLProgram(c,[l],s);e.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:e,attrs:{shape:d}});return e.disposeIntermediateTensorInfo(m),f},u3={kernelName:es,backendName:\"webgl\",kernelFunc:Jee};function sm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"complex64\"){let n=wi({inputs:{input:o},backend:e}),s=sm({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=sm({inputs:{x:a},backend:e}),p=Or({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return Si({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:e})}var p3={kernelName:Sa,backendName:\"webgl\",kernelFunc:sm};function c3(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=wi({inputs:{input:o},backend:e}),s=c3({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=sm({inputs:{x:a},backend:e}),p=Or({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return Si({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var l3={kernelName:ca,backendName:\"webgl\",kernelFunc:c3};function ete(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return eg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=eg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Sv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var m3={kernelName:la,backendName:\"webgl\",kernelFunc:ete};var xg=class{constructor(t,e,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=e.map((u,c)=>u[0]+t[c]+u[1]);let n=t.length,s=Re(n),a=e.map(u=>u[0]).join(\",\"),i=e.map((u,c)=>u[0]+t[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(t,e,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=e.map((h,g)=>h[0]+t[g]+h[1]);let n=t.length,s=Re(n),a=e.map(h=>h[0]).join(\",\"),i=e.map((h,g)=>h[0]+t[g]).join(\",\"),p=Dt(\"rc\",n),u=Dt(\"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:t,backend:e,attrs:o}=r,{x:n}=t,{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 Si({backend:e,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 e.runWebGLProgram(i,[n],n.dtype,p)},d3={kernelName:ts,backendName:\"webgl\",kernelFunc:Ev};var tte=`\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`,rte=`\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`,ote=nt({opSnippet:tte,packedOpSnippet:rte}),f3={kernelName:rs,backendName:\"webgl\",kernelFunc:ote};function nte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(e.shouldExecuteOnCPU([m])){let f=e.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=tD(m.shape,m.dtype,f,c);d=e.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:e,attrs:{shape:[-1,g]}}),b=ni(n.dtype),C=Yr(x,b,\"prod\",e);d=te({inputs:{x:C},backend:e,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:e,attrs:{shape:f}})}return p.forEach(f=>e.disposeIntermediateTensorInfo(f)),d}var h3={kernelName:ns,backendName:\"webgl\",kernelFunc:nte};function ste(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.readSync(x.dataId)),u=n.map(x=>x.shape),c=e.readSync(s.dataId),l=e.readSync(a.dataId),[m,d,f]=rD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],\"int32\",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var g3={kernelName:Qp,backendName:\"webgl\",kernelFunc:ste};function ate(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=oD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],\"int32\",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var x3={kernelName:Zp,backendName:\"webgl\",kernelFunc:ate};function ite(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),l=e.readSync(a.dataId),m=i.map(g=>e.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=nD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var y3={kernelName:Jp,backendName:\"webgl\",kernelFunc:ite};var Rv=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=sD(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},b3={kernelName:ma,backendName:\"webgl\",kernelFunc:Rv};var ute=\"return 1.0 / x;\",pte=xe({opSnippet:ute}),C3={kernelName:ss,backendName:\"webgl\",kernelFunc:pte};var cte=Ut+`\n return (x < 0.0) ? 0.0 : x;\n`,lte=`\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`,mte=xe({opSnippet:cte,packedOpSnippet:lte}),w3={kernelName:as,backendName:\"webgl\",kernelFunc:mte};var dte=Ut+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,fte=`\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`,hte=xe({opSnippet:dte,packedOpSnippet:fte}),S3={kernelName:ps,backendName:\"webgl\",kernelFunc:hte};var bg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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(t,e,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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 gte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGLProgram(c,[n],\"float32\")}var I3={kernelName:us,backendName:\"webgl\",kernelFunc:gte};var wg=class{constructor(t,e,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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 xte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var v3={kernelName:ei,backendName:\"webgl\",kernelFunc:xte};var Sg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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(t,e,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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 yte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGLProgram(c,[n],n.dtype)}var k3={kernelName:is,backendName:\"webgl\",kernelFunc:yte};var vg=class{constructor(t,e,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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 bte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var N3={kernelName:Ja,backendName:\"webgl\",kernelFunc:bte};var kg=class{constructor(t,e){this.variableNames=[\"x\"];let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=t,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${t[0]} - coord - 1));\n }\n `;return}let n=i=>e.indexOf(i)!==-1&&t[i]!==1?`${t[i]} - coords[${i}] - 1`:`coords[${i}]`,s=t.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(t,e){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=t;let n=Dt(\"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(${t[0]} - rc - 1),\n ${t[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${t[0]} - (rc + 1) - 1),\n ${t[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=t.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 e.indexOf(f)!==-1&&t[f]!==1?`${t[f]} - ${h[f]} - 1`:`${h[f]}`}}};function Cte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return At({inputs:{x:n},backend:e});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Ng(n.shape,i):new kg(n.shape,i);return e.runWebGLProgram(p,[n],n.dtype)}var T3={kernelName:cs,backendName:\"webgl\",kernelFunc:Cte};var Tg=class{constructor(t,e){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=t[1],n=t[2];this.outputShape=t;let s=\"\";typeof e==\"number\"?s=`float outputValue = ${e.toFixed(2)};`:s=`\n vec3 fill = vec3(${e.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 _3={kernelName:As,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 wte=`\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`,Ste=xe({opSnippet:wte}),$3={kernelName:ls,backendName:\"webgl\",kernelFunc:Ste};var Ite=\"return inversesqrt(x);\",vte=xe({opSnippet:Ite,cpuKernelImpl:aD}),E3={kernelName:ms,backendName:\"webgl\",kernelFunc:vte};var vu=class{constructor(t,e,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=e>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 < ${t}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${e}; 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(t,e,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=e>1?\"strides[j]\":\"strides\",b=e>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 < ${t}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${e}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${e}) {\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 kte(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=e.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 vu(p,i,d.shape.length,f.shape.length,c,m);let x=e.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:e,attrs:{shape:a}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(h),b}var R3={kernelName:ds,backendName:\"webgl\",kernelFunc:kte};var $g=class{constructor(t,e,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[t,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(e+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 Nte(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new $g(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return e.runWebGLProgram(i,[n,s],\"int32\",p)}var D3={kernelName:hs,backendName:\"webgl\",kernelFunc:Nte};var Eg=class{constructor(t,e,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=e;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 Tte(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=new Eg(o.shape.length,n.shape,n.shape.length);return e.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var A3={kernelName:fa,backendName:\"webgl\",kernelFunc:Tte};var _te=`\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`,$te=xe({opSnippet:_te}),F3={kernelName:gs,backendName:\"webgl\",kernelFunc:$te};var Ete=Po+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,Rte=`\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`,Dte=xe({opSnippet:Ete,packedOpSnippet:Rte,cpuKernelImpl:uD}),P3={kernelName:Cs,backendName:\"webgl\",kernelFunc:Dte};var Ate=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,Fte=xe({opSnippet:Ate}),O3={kernelName:bs,backendName:\"webgl\",kernelFunc:Fte};var Pte=Po+`\n return sin(x);\n`,Ote=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,Mte=xe({opSnippet:Pte,packedOpSnippet:Ote}),M3={kernelName:xs,backendName:\"webgl\",kernelFunc:Mte};var Lte=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Bte=xe({opSnippet:Lte}),L3={kernelName:ys,backendName:\"webgl\",kernelFunc:Bte};var zte=`\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`,Vte=xe({opSnippet:zte}),B3={kernelName:ws,backendName:\"webgl\",kernelFunc:Vte};var Wte=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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;xe.disposeIntermediateTensorInfo(x)),g},z3={kernelName:ga,backendName:\"webgl\",kernelFunc:Wte};function Ute(r){let{inputs:t,backend:e}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=t;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=e.readSync(o.dataId),p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=e.readSync(a.dataId)[0],[l,m,d,f,h]=cD(i,o.shape,o.dtype,p,n.dtype,u,c);return[e.makeTensorInfo(m,o.dtype,l),e.makeTensorInfo([m[0]],n.dtype,d),e.makeTensorInfo([f.length],\"bool\",new Uint8Array(f.map(g=>Number(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var V3={kernelName:ji,backendName:\"webgl\",kernelFunc:Ute};function Gte(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.readSync(n.dataId)),i=e.readSync(o.dataId),p=Array.from(e.readSync(s.dataId)),[u,c,l]=lD(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var W3={kernelName:ti,backendName:\"webgl\",kernelFunc:Gte};function Hte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var U3={kernelName:ya,backendName:\"webgl\",kernelFunc:Hte};function Kte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var G3={kernelName:ba,backendName:\"webgl\",kernelFunc:Kte};function qte(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),b=e.bufferSync(s),C=y.decodeString(e.readSync(a.dataId)[0]),S=iD(x,b,i,m,c,u,p,l,C,d);return e.makeTensorInfo(i,S.dtype,S.values)}let f=new vu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=e.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:i}});return e.disposeIntermediateTensorInfo(h),g}var H3={kernelName:ks,backendName:\"webgl\",kernelFunc:qte};function jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var K3={kernelName:xa,backendName:\"webgl\",kernelFunc:jte};var q3=\"return sqrt(x);\",Xte=xe({opSnippet:q3,packedOpSnippet:q3,cpuKernelImpl:mD}),j3={kernelName:Ss,backendName:\"webgl\",kernelFunc:Xte};var Yte=\"return x * x;\",Qte=xe({opSnippet:Yte}),X3={kernelName:Xi,backendName:\"webgl\",kernelFunc:Qte};var Y3=\"return (a - b) * (a - b);\",Zte=nt({opSnippet:Y3,packedOpSnippet:Y3}),Q3={kernelName:Ns,backendName:\"webgl\",kernelFunc:Zte};function Jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=e.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=dD(a,\"string\",o);return e.makeTensorInfo(n.shape,\"string\",i)}var Z3={kernelName:Ou,backendName:\"webgl\",kernelFunc:Jte};function ere({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=Ut+`\n return x > 0.0 ? 1.0 : float(${t.alpha});\n `,s=new or(o.shape,n);return e.runWebGLProgram(s,[o],o.dtype)}var J3={kernelName:So,backendName:\"webgl\",kernelFunc:ere};var Rg=class{constructor(t,e,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}(${t});\n ${s} strides = ${s}(${e});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function tre(r){let{inputs:t,backend:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({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 E=ct.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:e,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(R)}else if(e.shouldExecuteOnCPU([n])){let R=e.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=fD(d,D,S,b);k=e.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=e.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:e,attrs:{shape:f}});return e.disposeIntermediateTensorInfo(k),_}var eP={kernelName:Ts,backendName:\"webgl\",kernelFunc:tre};function rre(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=hD(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var tP={kernelName:Ca,backendName:\"webgl\",kernelFunc:rre};function ore(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.readSync(s.dataId),p=e.readSync(a.dataId)[0],[u,c,l]=gD(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],\"int32\",u),e.makeTensorInfo([m],\"string\",c),e.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var rP={kernelName:Yi,backendName:\"webgl\",kernelFunc:ore};function nre(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.readSync(s.dataId),i=xD(a,n);return e.makeTensorInfo(s.shape,\"int32\",i)}var oP={kernelName:Qi,backendName:\"webgl\",kernelFunc:nre};var sre=\"return tan(x);\",are=xe({opSnippet:sre}),nP={kernelName:$s,backendName:\"webgl\",kernelFunc:are};var ire=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,ure=xe({opSnippet:ire}),sP={kernelName:Es,backendName:\"webgl\",kernelFunc:ure};function pre(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:e,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:e,attrs:{shape:m}}),g=new vu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=e.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:e,attrs:{shape:n.shape}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(x),b}var aP={kernelName:fs,backendName:\"webgl\",kernelFunc:pre};var Dg=class{constructor(t,e){this.variableNames=[\"A\"];let o=new Array(t.length);for(let a=0;a5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${r[0]})`;let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=e.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=bD(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Dg(n.shape,s);return e.runWebGLProgram(a,[n],n.dtype)}var iP={kernelName:po,backendName:\"webgl\",kernelFunc:Dv};var Ag=class{constructor(t){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=t,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(t){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=t,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 Rp(r,t){t!==null&&r.disposeIntermediateTensorInfo(t)}function uP(r){let t=1;for(;tp){let P=e.readSync(n.dataId),[O,M]=CD(P,u,n.dtype,s,a);return[e.makeTensorInfo(O.shape,O.dtype,O.values),e.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[e.makeTensorInfo(u,n.dtype,[]),e.makeTensorInfo(u,\"int32\",[])];if(c===1)return[n,Si({attrs:{shape:u,dtype:\"int32\",value:0},backend:e})];let l=e.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?e.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:e});m&&Rp(e,d);let x=uP(s),b=uP(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=e.runWebGLProgram(B,L,\"int32\",U),Rp(e,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=e.runWebGLProgram(M,O,\"int32\",B),Rp(e,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:e,attrs:{begin:0,size:[h,s]}}),Rp(e,_);let E=kv({inputs:{x:g,indices:C},backend:e,attrs:{axis:1,batchDims:1}});Rp(e,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:e}),Rp(e,_);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:e}),Rp(e,D),[E,C]}var pP={kernelName:Rs,backendName:\"webgl\",kernelFunc:lre};var Pg=class{constructor(t,e,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 < ${t} && 0 <= coordX && coordX < ${e}) {\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(${e}));\n float mapY = mapCoord(inY, float(${t}));\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 mre(r){let{inputs:t,backend:e,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 Pg(l,m,a,i,p,g);return e.runWebGLProgram(x,[n,s],\"float32\")}var cP={kernelName:Ds,backendName:\"webgl\",kernelFunc:mre};function dre(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t;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}=wD(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var lP={kernelName:Zi,backendName:\"webgl\",kernelFunc:dre};function fre(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeIntermediateTensorInfo(h)),f}var mP={kernelName:wa,backendName:\"webgl\",kernelFunc:fre};var Og=class{constructor(t,e){this.variableNames=[\"x\",\"segmentIds\"];let o=t.windowSize,n=t.batchSize,s=t.inSize,a=t.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 hre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=ni(n.dtype),g=(S,k,_,E,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=e.compileAndRun(L,[S,_],E);if(p.push(B),B.shape[1]===R)return B;let z=Rv({backend:e,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=Dv({inputs:{x:z},backend:e,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,\"unsortedSegmentSum\",s,h,a),b=te({inputs:{x},backend:e,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=Ct({inputs:{x:C},backend:e,attrs:{perm:S}})}return p.forEach(S=>e.disposeIntermediateTensorInfo(S)),C}var dP={kernelName:Ji,backendName:\"webgl\",kernelFunc:hre};var gre=[XD,QD,ZD,JD,tA,rA,oA,nA,iA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,wA,SA,IA,vA,_A,EA,RA,BD,AA,PA,OA,MA,LA,BA,zA,VA,WA,UA,GA,qA,jA,XA,YA,QA,ZA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,cF,lF,mF,dF,hF,gF,xF,yF,bF,CF,wF,SF,IF,LD,vF,FA,kF,NF,TF,zD,_F,$F,EF,RF,DF,AF,FF,PF,OF,MF,BF,zF,VF,WF,UF,GF,KF,jF,XF,YF,QF,ZF,o3,UD,n3,s3,a3,i3,kA,u3,l3,m3,d3,f3,VD,h3,g3,x3,y3,b3,NA,JF,C3,w3,S3,HD,I3,v3,k3,N3,T3,_3,$3,E3,R3,D3,A3,F3,P3,O3,M3,L3,CA,r3,B3,z3,V3,W3,U3,G3,H3,K3,j3,X3,Q3,Z3,J3,eP,tP,rP,oP,t3,qD,nP,sP,aP,iP,pP,cP,jD,lP,mP,dP,p3];for(let r of gre)ri(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 ku;(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\"})(ku||(ku={}));var fP;function xre(r){fP=r.wasm.cwrap(Io,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function yre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t;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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=e.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:e.dataIdMap.get(i.dataId).id,g=ku[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=Ir.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=e.makeOutput([...C,x,b],n.dtype),k=e.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return fP(m,_,n.shape.length,d,E,s.shape.length,p,u,g,f,h,l||0,k),S}var hP={kernelName:Io,backendName:\"wasm\",setupFunc:xre,kernelFunc:yre};function he(r,t){let e;function o(s){e=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,t||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||e(p,we[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var gP=he(Xs);var xP=he(Wo);var yP=he(Uo);function Ue(r,t,e){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=e!=null?e: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 bre=!0,bP=Ue(uo,bre);var CP;function Cre(r){CP=r.wasm.cwrap(Go,null,[\"array\",\"number\",\"number\",\"number\"])}function wre(r){let{inputs:t,backend:e}=r,o=e.makeOutput(t[0].shape,t[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=t.map(i=>e.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=e.dataIdMap.get(o.dataId).id;return CP(s,n.length,we[o.dtype],a),o}var wP={kernelName:Go,backendName:\"wasm\",setupFunc:Cre,kernelFunc:wre};function Dp(r){let{inputs:{x:t},backend:e}=r;if(t.dtype===\"string\")return ur(e.readSync(t.dataId),t.shape,t.dtype);let o=e.makeOutput(t.shape,t.dtype),n=e.typedArrayFromHeap(t);return e.typedArrayFromHeap(o).set(n),o}var SP={kernelName:wo,backendName:\"wasm\",kernelFunc:Dp};var IP;function Sre(r){IP=r.wasm.cwrap(co,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function go(r){let{inputs:t,backend:e,attrs:o}=r,[n,s]=vre(t.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[e,o]}var vP={kernelName:co,backendName:\"wasm\",kernelFunc:go,setupFunc:Sre};function _r(r,t,e){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(t,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 GP={kernelName:da,backendName:\"wasm\",kernelFunc:Vt};var HP;function Mre(r){HP=r.wasm.cwrap(Jo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function Lre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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=Ir.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],_=Vt({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Vt({inputs:{x:s},backend:e,attrs:{shape:k}}),R=e.dataIdMap.get(_.dataId).id,D=e.dataIdMap.get(E.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=e.makeOutput([M,P,O],_.dtype),B=e.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return HP(R,z,_.shape.length,D,U,E.shape.length,a,i,B),e.disposeData(_.dataId),e.disposeData(E.dataId),L.shape=C,L}var KP={kernelName:Jo,backendName:\"wasm\",setupFunc:Mre,kernelFunc:Lre};function Oo(r){let{inputs:{x:t},attrs:{begin:e,size:o},backend:n}=r,[s,a]=ct.parseSliceParams(t,e,o),i=ct.isSliceContinous(t.shape,s,a),p=n.readSync(t.dataId),u=n.makeOutput(a,t.dtype),c=y.computeStrides(t.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=ct.computeFlatOffset(s,c);return t.dtype===\"string\"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(t.dtype===\"string\"){let f=hp(p,s,a,t.shape,t.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=t.shape.length;if(d===2)Bre(p,c[0],m,s,a);else if(d===3)zre(p,c[0],c[1],m,s,a);else if(d===4)Vre(p,c[0],c[1],c[2],m,s,a);else{let f=hp(p,s,a,t.shape,t.dtype);m.set(f)}return u}function Bre(r,t,e,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=Vt({inputs:{x:n},backend:e,attrs:{shape:p}}),f=go({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Vt({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Oo({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(h.dataId),g}var jP={kernelName:Js,backendName:\"wasm\",kernelFunc:Wre};var XP;function Ure(r){XP=r.wasm.cwrap(en,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function Gre(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=t.makeOutput(p,s.dtype);function c(l){return t.dataIdMap.get(l.dataId).id}return XP(c(n),a,i,c(s),we[s.dtype],c(u)),u}var YP={kernelName:en,backendName:\"wasm\",setupFunc:Ure,kernelFunc:Gre};var Hre=!0,QP=Ue(ja,Hre);function Kre(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.typedArrayFromHeap(o),a=e.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var ZP={kernelName:ea,backendName:\"wasm\",kernelFunc:Kre};function Mr(r){let{inputs:{x:t},attrs:{dtype:e},backend:o}=r,n=o.makeOutput(t.shape,e),s=o.typedArrayFromHeap(t);return o.typedArrayFromHeap(n).set(s),n}var JP={kernelName:bo,backendName:\"wasm\",kernelFunc:Mr};var eO=he(tn);var tO;function qre(r){tO=r.wasm.cwrap(Co,null,[\"number\",\"number\",\"number\",\"number\"])}function jre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i=e.dataIdMap.get(n.dataId).id,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(p.dataId).id;return tO(i,s,a,u),p}var rO={kernelName:Co,backendName:\"wasm\",setupFunc:qre,kernelFunc:jre};function Av(r){let{inputs:t,backend:e}=r,o=y.parseAxisParam(r.attrs.axis,t[0].shape)[0],n=t.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(t.map(d=>d.shape),o),a=t.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Dp({inputs:{x:a[0]},backend:e});let i=e.makeOutput(s,t[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 Vt({inputs:{x:C},backend:e,attrs:{shape:k}})}),f=d.map(C=>({vals:e.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=mp(f,s,t[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=e.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>e.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=>e.typedArrayFromHeap(d)),m=e.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=go({inputs:{x:n},attrs:{perm:u},backend:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumprod\",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;yO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=go({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var bO={kernelName:pn,backendName:\"wasm\",setupFunc:ioe,kernelFunc:uoe};var CO;function poe(r){CO=r.wasm.cwrap(cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=go({inputs:{x:n},attrs:{perm:u},backend:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumsum\",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;CO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=go({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var wO={kernelName:cn,backendName:\"wasm\",setupFunc:poe,kernelFunc:coe};var SO;function loe(r){SO=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function moe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{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=t.makeOutput(u,s.dtype);function l(m){return t.dataIdMap.get(m.dataId).id}return SO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var IO={kernelName:ra,backendName:\"wasm\",setupFunc:loe,kernelFunc:moe};var vO;function doe(r){vO=r.wasm.cwrap(mn,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function foe(r){let{backend:t,inputs:e,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=t.makeOutput(f,\"float32\"),x=t.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=t.dataIdMap.get(h.dataId).id;return vO(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var kO={kernelName:mn,backendName:\"wasm\",setupFunc:doe,kernelFunc:foe};var NO;function hoe(r){NO=r.wasm.cwrap(dn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function goe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=e,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,E=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 NO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,E,R,D,M),O}var TO={kernelName:dn,backendName:\"wasm\",setupFunc:hoe,kernelFunc:goe};var _O;function xoe(r){_O=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function yoe(r){let{inputs:t,backend:e}=r,{x:o}=t,n=y.sizeFromShape(o.shape),s=e.makeOutput([...o.shape,...o.shape],o.dtype);return _O(e.dataIdMap.get(o.dataId).id,we[o.dtype],n,e.dataIdMap.get(s.dataId).id),s}var $O={kernelName:oa,backendName:\"wasm\",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap(fn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=e.makeOutput(u.outShape,n.dtype);return EO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.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 RO={kernelName:fn,backendName:\"wasm\",setupFunc:boe,kernelFunc:Coe};var DO;function woe(r){DO=r.wasm.cwrap(zi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Soe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(s.shape,s.dtype);return DO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 AO={kernelName:zi,backendName:\"wasm\",setupFunc:woe,kernelFunc:Soe};var FO;function Ioe(r){FO=r.wasm.cwrap(Bi,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:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return FO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 PO={kernelName:Bi,backendName:\"wasm\",setupFunc:Ioe,kernelFunc:voe};var OO=he(gn);var MO;function koe(r){MO=r.wasm.cwrap(Ya,null,[\"number\",\"number\",\"number\"])}function Noe(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=e.makeOutput(n.shape,\"float32\"),a=i=>e.dataIdMap.get(i.dataId).id;return MO(a(n),a(o),a(s)),s}var LO={kernelName:Ya,backendName:\"wasm\",setupFunc:koe,kernelFunc:Noe};var Toe=!1,BO=Ue(yn,Toe,\"bool\");var zO=he(xn);var VO=he(bn,\"float32\");function Lg(r){let{inputs:t,attrs:e,backend:o}=r,{input:n}=t,{dim:s}=e,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),Vt({inputs:{x:n},backend:o,attrs:{shape:i}})}var WO={kernelName:na,backendName:\"wasm\",kernelFunc:Lg};var UO=he(Cn,\"float32\");function Pv(r){let{attrs:{shape:t,value:e,dtype:o},backend:n}=r,s=n.makeOutput(t,o);return n.typedArrayFromHeap(s).fill(e),s}var GO={kernelName:sa,backendName:\"wasm\",kernelFunc:Pv};var HO;function _oe(r){HO=r.wasm.cwrap(wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $oe(r){let{inputs:t,backend:e}=r,{image:o}=t,n=e.makeOutput(o.shape,o.dtype),s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return HO(s,i,p,u,c,a),n}var KO={kernelName:wn,backendName:\"wasm\",kernelFunc:$oe,setupFunc:_oe};var qO=he(Sn);var Eoe=!1,jO=Ue(In,Eoe);var XO;function Roe(r){XO=r.wasm.cwrap(vn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Doe(r){let{backend:t,inputs:e,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=e,c=t.dataIdMap.get(s.dataId).id,l=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(i.dataId).id,d=p!=null?t.dataIdMap.get(p.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,h=t.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=t.dataIdMap.get(h.dataId).id;return XO(c,l,m,d,f,n,g),h}var YO={kernelName:vn,backendName:\"wasm\",setupFunc:Roe,kernelFunc:Doe};var QO;function Aoe(r){QO=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 Foe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=ku[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,E=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 QO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var ZO={kernelName:vo,backendName:\"wasm\",setupFunc:Aoe,kernelFunc:Foe};var JO;function Poe(r){JO=r.wasm.cwrap(ko,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 Ooe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=ku[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,E=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 JO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var eM={kernelName:ko,backendName:\"wasm\",setupFunc:Poe,kernelFunc:Ooe};var tM;function Moe(r){tM=r.wasm.cwrap(kn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Loe(r){let{backend:t,inputs:e}=r,{params:o,indices:n}=e,[s,a,i,p]=af.prepareAndValidate(o,n),u=t.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=t.dataIdMap.get(o.dataId).id,h=t.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(u.dataId).id;return tM(d,we[o.dtype],h,a,l,i,g,x),u}var rM={kernelName:kn,backendName:\"wasm\",setupFunc:Moe,kernelFunc:Loe};var oM;function Boe(r){oM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function zoe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=t.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=Vt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:t}),d=y.sizeFromShape(s.shape),f=Vt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:t}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=t.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=t.dataIdMap.get(m.dataId).id,k=t.dataIdMap.get(f.dataId).id,_=t.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return oM(C,we[n.dtype],E,x,k,l.batchSize,R,_),t.disposeData(m.dataId),t.disposeData(f.dataId),g.shape=l.outputShape,g}var nM={kernelName:aa,backendName:\"wasm\",setupFunc:Boe,kernelFunc:zoe};var Voe=!1,sM=Ue(Nn,Voe,\"bool\");var Woe=!1,aM=Ue(Tn,Woe,\"bool\");var iM=he(_n,\"bool\");var uM=he($n,\"bool\");var pM=he(En,\"bool\");var cM;function Uoe(r){cM=r.wasm.cwrap(Rn,null,[\"number\",\"number\",\"number\",\"number\"])}function Goe(r){let{inputs:{x:t},attrs:{alpha:e},backend:o}=r,n=o.dataIdMap.get(t.dataId).id,s=o.makeOutput(t.shape,\"float32\");if(y.sizeFromShape(t.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;cM(n,we[t.dtype],e,a)}return s}var lM={kernelName:Rn,backendName:\"wasm\",setupFunc:Uoe,kernelFunc:Goe};var Hoe=!1,mM=Ue(Dn,Hoe,\"bool\");var Koe=!1,dM=Ue(An,Koe,\"bool\");var fM;function qoe(r){fM=r.wasm.cwrap(Fn,null,[\"number\",\"number\",\"number\",\"number\"])}function joe(r){let{attrs:t,backend:e}=r,{start:o,stop:n,num:s}=t,a=Math.floor(s),i=e.makeOutput([a],\"float32\");return fM(e.dataIdMap.get(i.dataId).id,o,n,a),i}var hM={kernelName:Fn,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};var gM=he(Pn);var xM=he(On);var Xoe=!1,yM=Ue(Mn,Xoe,\"bool\");var bM=he(Ln);var Yoe=!1,CM=Ue(Bn,Yoe,\"bool\");var Qoe=!1,wM=Ue($0,Qoe,\"bool\");var SM;function Zoe(r){SM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Joe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(n.shape,n.dtype);return SM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var IM={kernelName:zn,backendName:\"wasm\",setupFunc:Zoe,kernelFunc:Joe};var vM;function ene(r){vM=r.wasm.cwrap(Qa,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function tne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return vM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var kM={kernelName:Qa,backendName:\"wasm\",setupFunc:ene,kernelFunc:tne};var NM;function rne(r){NM=r.wasm.cwrap(Vn,null,[\"number\",\"number\",\"number\",\"number\"])}function one(r){let{backend:t,inputs:e,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=e,p=t.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t);if(d){let C=t.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=t.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;NM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var TM={kernelName:Vn,backendName:\"wasm\",setupFunc:rne,kernelFunc:one};var nne=!1,_M=Ue(Wn,nne);var $M;function sne(r){$M=r.wasm.cwrap(Un,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function ane(r){let{inputs:t,attrs:e,backend:o}=r,n=t.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}=e,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 E=o.makeOutput(c.outShape,\"float32\"),R=o.dataIdMap.get(E.dataId).id;return $M(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),E}var EM={kernelName:Un,backendName:\"wasm\",setupFunc:sne,kernelFunc:ane};var RM;function ine(r){RM=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 une(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=e.makeOutput(c.outShape,n.dtype);return RM(e.dataIdMap.get(n.dataId).id,e.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 DM={kernelName:ia,backendName:\"wasm\",setupFunc:ine,kernelFunc:une};var AM;function pne(r){AM=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 cne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return AM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 FM={kernelName:Ki,backendName:\"wasm\",setupFunc:pne,kernelFunc:cne};var PM;function lne(r){PM=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function mne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return PM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 OM={kernelName:Hi,backendName:\"wasm\",setupFunc:lne,kernelFunc:mne};var MM;function dne(r){MM=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 fne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(c.outShape,n.dtype),m=e.makeOutput(c.outShape,\"int32\");return MM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(l.dataId).id,e.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 LM={kernelName:ua,backendName:\"wasm\",setupFunc:dne,kernelFunc:fne};var BM;function hne(r){BM=r.wasm.cwrap(Gn,null,[\"number, number, number\"])}function gne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let S=t.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:t,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(b.dataId).id);let C=t.makeOutput(h,\"float32\");if(y.sizeFromShape(u.shape)!==0){let S=t.dataIdMap.get(C.dataId).id;BM(p,x,S)}if(d&&t.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!==\"float32\"&&t.disposeData(b.dataId),C}var zM={kernelName:Gn,backendName:\"wasm\",setupFunc:hne,kernelFunc:gne};var VM;function xne(r){VM=r.wasm.cwrap(Hn,null,[\"number\",\"number\",\"number\",\"number\"])}function yne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t);if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;VM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var WM={kernelName:Hn,backendName:\"wasm\",setupFunc:xne,kernelFunc:yne};var bne=!1,UM=Ue(Kn,bne);var Ov;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Ov||(Ov={}));var GM;function Cne(r){GM=r.wasm.cwrap(qn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function wne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+t.shape[h]+f[1]),a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),p=e.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.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 GM(a,u,t.shape.length,we[t.dtype],m,d,Ov[n],p),i}var HM={kernelName:qn,backendName:\"wasm\",kernelFunc:wne,setupFunc:Cne};var KM;function Sne(r){KM=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\"])}function Mv(r){let{backend:t,inputs:{logits:e},attrs:{dim:o}}=r,n=t.dataIdMap.get(e.dataId).id,s=t.makeOutput(e.shape,e.dtype),a=t.dataIdMap.get(s.dataId).id,i=e.shape[o],p=y.sizeFromShape(e.shape)/i;return y.sizeFromShape(s.shape)===0||KM(n,a,i,p),s}var qM={kernelName:vs,backendName:\"wasm\",setupFunc:Sne,kernelFunc:Mv};var jM;function Ine(r){jM=r.wasm.cwrap(Xn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function vne(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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:Mv({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=e.makeOutput([u,s],\"int32\");return jM(e.dataIdMap.get(p.dataId).id,u,c,s,a,e.dataIdMap.get(l.dataId).id),i||e.disposeData(p.dataId),l}var XM={kernelName:Xn,backendName:\"wasm\",setupFunc:Ine,kernelFunc:vne};var YM=Ue(jn,!0);var kne=!0,QM=Ue(Yn,kne);var ZM=he(pa);function Yc(r,t){let e=new Int32Array(r.wasm.HEAPU8.buffer,t,4),o=e[0],n=e[1],s=e[2],a=e[3];return r.wasm._free(t),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var JM;function Nne(r){JM=r.wasm.cwrap(Zn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Tne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=e,u=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(p.dataId).id,l=JM(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Yc(t,l);return t.wasm._free(f),t.wasm._free(h),t.makeOutput([d],\"int32\",m)}var eL={kernelName:Zn,backendName:\"wasm\",setupFunc:Nne,kernelFunc:Tne};var tL;function _ne(r){tL=r.wasm.cwrap(Za,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function $ne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=tL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Yc(t,m);t.wasm._free(h);let x=t.makeOutput([f],\"int32\",d),b=t.makeOutput([],\"int32\",g);return[x,b]}var rL={kernelName:Za,backendName:\"wasm\",setupFunc:_ne,kernelFunc:$ne};var oL;function Ene(r){oL=r.wasm.cwrap(Jn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Rne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=oL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Yc(t,m);t.wasm._free(g);let x=t.makeOutput([f],\"int32\",d),b=t.makeOutput([f],\"float32\",h);return[x,b]}var nL={kernelName:Jn,backendName:\"wasm\",setupFunc:Ene,kernelFunc:Rne};var Dne=!1,sL=Ue(Qn,Dne,\"bool\");var aL;function Ane(r){aL=r.wasm.cwrap(es,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Fne(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=e.makeOutput([...n.shape,a],s),c=e.dataIdMap.get(u.dataId).id,m=e.dataIdMap.get(n.dataId).id;return aL(m,a,i,p,c),u}var iL={kernelName:es,backendName:\"wasm\",setupFunc:Ane,kernelFunc:Fne};function Pne(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(1),o}var uL={kernelName:ca,backendName:\"wasm\",kernelFunc:Pne};function One(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Lg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Lg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Av({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var pL={kernelName:la,backendName:\"wasm\",kernelFunc:One};var cL;function Mne(r){cL=r.wasm.cwrap(ts,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Lne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+t.shape[g]+h[1]);if(y.sizeFromShape(t.shape)===0)return Pv({backend:e,attrs:{shape:s,value:n,dtype:t.dtype}});let a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.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 cL(a,c,t.shape.length,we[t.dtype],d,f,n,u),i}var Bg={kernelName:ts,backendName:\"wasm\",kernelFunc:Lne,setupFunc:Mne};var Bne=!1,lL=Ue(rs,Bne);var mL;function zne(r){mL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\"])}function Vne(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=Mr({backend:e,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=e.dataIdMap.get(u.dataId).id);let c=e.makeOutput(o.shape,\"float32\"),l=e.dataIdMap.get(c.dataId).id;return mL(i,a,l),p.dtype!==\"float32\"&&e.disposeData(u.dataId),c}var dL={kernelName:os,backendName:\"wasm\",setupFunc:zne,kernelFunc:Vne};var fL;function Wne(r){fL=r.wasm.cwrap(ns,null,[\"number\",\"number\",\"number\",\"number\"])}function Une(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;fL(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var hL={kernelName:ns,backendName:\"wasm\",setupFunc:Wne,kernelFunc:Une};var Gne=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=fp(o,n,s,a),p=t.makeOutput([i.length],a);return t.typedArrayFromHeap(p).set(i),p},gL={kernelName:ma,backendName:\"wasm\",kernelFunc:Gne};var Hne=!0,xL=Ue(hn,Hne);var yL=he(ss);var bL=he(as);var CL=he(ps);var wL;function Kne(r){wL=r.wasm.cwrap(us,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=t.dataIdMap.get(g.dataId));let x=h.id,b=t.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return b;let C=t.dataIdMap.get(b.dataId).id;return wL(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&t.disposeData(g.dataId),b}var SL={kernelName:us,backendName:\"wasm\",setupFunc:Kne,kernelFunc:qne};var IL;function jne(r){IL=r.wasm.cwrap(ei,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Xne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,\"float32\"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(u.dataId)),IL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var vL={kernelName:ei,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var kL;function Yne(r){kL=r.wasm.cwrap(is,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return h;let g=t.dataIdMap.get(n.dataId),x;g.dtype!==\"float32\"&&(x=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=t.dataIdMap.get(x.dataId));let b=g.id,C=t.dataIdMap.get(h.dataId).id;return kL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&t.disposeData(x.dataId),h}var NL={kernelName:is,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var TL;function Zne(r){TL=r.wasm.cwrap(Ja,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Jne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,\"float32\"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(u.dataId)),TL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var _L={kernelName:Ja,backendName:\"wasm\",setupFunc:Zne,kernelFunc:Jne};var $L;function ese(r){$L=r.wasm.cwrap(cs,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function tse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Dp({inputs:{x:n},backend:e});let i=e.makeOutput(n.shape,n.dtype),p=e.dataIdMap.get(n.dataId).id,u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);$L(p,c,a.length,l,n.shape.length,u);let m=Vt({inputs:{x:i},attrs:{shape:n.shape},backend:e});return e.disposeData(i.dataId),m}var EL={kernelName:cs,backendName:\"wasm\",kernelFunc:tse,setupFunc:ese};var RL;function rse(r){RL=r.wasm.cwrap(As,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function ose(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{radians:s,fillValue:a,center:i}=o,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(n.dataId).id,c=e.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 RL(u,l,m,d,f,s,h,g,S,C.length,c),p}var DL={kernelName:As,backendName:\"wasm\",kernelFunc:ose,setupFunc:rse};var AL=he(ls);var FL=he(ms);var PL;function nse(r){PL=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function sse(r){let{backend:t,inputs:e,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,i=t.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=hu.calculateShapes(s,n,a),f=t.dataIdMap.get(n.dataId).id,g=t.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=t.dataIdMap.get(i.dataId).id;return PL(f,g,we[s.dtype],p,u,c,x,m,b),i}var OL={kernelName:ds,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var ML;function ase(r){ML=r.wasm.cwrap(hs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function ise(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{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=e.makeOutput(s.shape,\"int32\");function p(u){return e.dataIdMap.get(u.dataId).id}return ML(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var LL={kernelName:hs,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var BL;function use(r){BL=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function pse(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=e.makeOutput(n.shape,n.dtype),c=e.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 BL(a,i,p,d,c),u}var zL={kernelName:fa,backendName:\"wasm\",kernelFunc:pse,setupFunc:use};var VL=he(gs);var WL;function cse(r){WL=r.wasm.cwrap(Cs,null,[\"number\",\"number\"])}function lse(r){let{backend:t,inputs:{x:e}}=r,o=t.dataIdMap.get(e.dataId).id,n=t.makeOutput(e.shape,e.dtype),s=t.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||WL(o,s),n}var UL={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:cse,kernelFunc:lse};var GL=he(bs);var HL=he(xs);var KL=he(ys);var qL=he(ws);function mse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=e.dataIdMap.get(a.dataId).id,h=e.makeOutput(l,n.dtype),g=e.dataIdMap.get(h.dataId).id,x=e.makeOutput([4],\"int32\"),b=e.dataIdMap.get(x.dataId).id;JL(m,we[n.dtype],n.shape[0],d,f,g,b,t,0);let C=e.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(e.disposeData(x.dataId),S)throw e.disposeData(h.dataId),new Error(S);return h}function xse(r){return Vg(r,!0)}var eB={kernelName:ya,backendName:\"wasm\",setupFunc:zg,kernelFunc:xse};function yse(r){return Vg(r,!1)}var tB={kernelName:ba,backendName:\"wasm\",setupFunc:zg,kernelFunc:yse};var rB;function bse(r){rB=r.wasm.cwrap(ks,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function Cse(r){let{backend:t,inputs:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,p=t.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=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=t.dataIdMap.get(p.dataId).id;return rB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var oB={kernelName:ks,backendName:\"wasm\",setupFunc:bse,kernelFunc:Cse};function wse(r){let{inputs:t,attrs:e,backend:o}=r,{x:n}=t,{numOrSizeSplits:s,axis:a}=e,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=Oo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var nB={kernelName:xa,backendName:\"wasm\",kernelFunc:wse};var sB=he(Ss);var aB=he(Xi);var Sse=!0,iB=Ue(Ns,Sse);var uB;function Ise(r){uB=r.wasm.cwrap(So,null,[\"number\",\"number\",\"number\",\"number\"])}function vse(r){let{backend:t,inputs:e,attrs:o}=r,{alpha:n}=o,{x:s}=e,a=t.dataIdMap.get(s.dataId).id,i=t.makeOutput(s.shape,s.dtype),p=t.dataIdMap.get(i.dataId).id;return uB(a,n,we[s.dtype],p),i}var pB={kernelName:So,backendName:\"wasm\",setupFunc:Ise,kernelFunc:vse};var cB;function kse(r){cB=r.wasm.cwrap(Ts,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Nse(r){let{backend:t,inputs:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Vt({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 _=ct.computeOutShape(b,C,S),E=Oo({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Vt({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else{let _=t.makeOutput(d,\"float32\"),E=t.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=t.dataIdMap.get(_.dataId).id;cB(E,R,n.shape.length,D,P,O,M,L,d.length,B),k=Vt({inputs:{x:_},backend:t,attrs:{shape:f}}),t.disposeData(_.dataId)}return k}var lB={kernelName:Ts,backendName:\"wasm\",setupFunc:kse,kernelFunc:Nse};function Tse(r){let{backend:t,inputs:e,attrs:o}=r,{data:n,dataSplits:s}=e,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=t.readSync(n.dataId),d=t.readSync(s.dataId),[f,h]=gp(m,d,a,i,p,u,c,l),g=t.makeOutput([f.length],\"string\"),x=t.dataIdMap.get(g.dataId);x.stringBytes=f;let b=t.makeOutput(s.shape,\"int32\");return t.typedArrayFromHeap(b).set(h),[g,b]}var mB={kernelName:Ca,backendName:\"wasm\",kernelFunc:Tse};function _se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n,delimiter:s}=e,{skipEmpty:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c,l]=xp(i,p[0],a),m=c.length,d=t.makeOutput([m,2],\"int32\");t.typedArrayFromHeap(d).set(u);let h=t.makeOutput([m],\"string\"),g=t.dataIdMap.get(h.dataId);g.stringBytes=c;let x=t.makeOutput([2],\"int32\");return t.typedArrayFromHeap(x).set(l),[d,h,x]}var dB={kernelName:Yi,backendName:\"wasm\",kernelFunc:_se};function $se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n}=e,{numBuckets:s}=o,a=t.readSync(n.dataId),i=yp(a,s),p=t.makeOutput(n.shape,\"int32\");return t.typedArrayFromHeap(p).set(i),p}var fB={kernelName:Qi,backendName:\"wasm\",kernelFunc:$se};var Ese=!0,hB=Ue(_s,Ese);var gB;function Rse(r){gB=r.wasm.cwrap(Is,null,[\"number\",\"number\",\"number\",\"number\"])}function Dse(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;gB(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var xB={kernelName:Is,backendName:\"wasm\",setupFunc:Rse,kernelFunc:Dse};var yB=he($s);var bB=he(Es);var CB;function Ase(r){CB=r.wasm.cwrap(fs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function Fse(r){let{backend:t,inputs:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,i=t.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=hu.calculateShapes(a,s,n.shape),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=t.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=t.dataIdMap.get(i.dataId).id;return CB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var wB={kernelName:fs,backendName:\"wasm\",setupFunc:Ase,kernelFunc:Fse};var SB;function Pse(r){SB=r.wasm.cwrap(po,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Ose(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,s=e.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}=e,a=t.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=t.makeOutput(p,o.dtype),c=t.dataIdMap.get(u.dataId).id,l=t.makeOutput(p,\"int32\"),m=t.dataIdMap.get(l.dataId).id;return vB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},kB={kernelName:Rs,backendName:\"wasm\",setupFunc:Mse,kernelFunc:Lse};var NB;function Bse(r){NB=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function zse(r){let{backend:t,inputs:e,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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=t.makeOutput(g,n.dtype),S=t.dataIdMap.get(C.dataId).id,_=t.dataIdMap.get(n.dataId).id,R=t.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 NB(_,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 TB={kernelName:Ds,backendName:\"wasm\",setupFunc:Bse,kernelFunc:zse};function Vse(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t,{outputValues:a,outputShape:i,indices:p}=bp(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 _B={kernelName:Zi,backendName:\"wasm\",kernelFunc:Vse};function Wse(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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 $B={kernelName:wa,backendName:\"wasm\",kernelFunc:Wse};function Use(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(0),o}var EB={kernelName:Sa,backendName:\"wasm\",kernelFunc:Use};var Gse=[hP,gP,xP,yP,bP,wP,NP,_P,$P,EP,RP,DP,AP,FP,PP,MP,UP,BP,VP,KP,jP,YP,QP,ZP,JP,eO,rO,oO,sO,iO,pO,lO,dO,fO,hO,xO,bO,wO,IO,kO,TO,$O,RO,AO,PO,OO,LO,BO,zO,VO,WO,UO,GO,KO,qO,jO,YO,ZO,eM,rM,nM,sM,aM,SP,iM,uM,pM,lM,mM,dM,hM,xM,gM,yM,bM,CM,wM,IM,kM,TM,_M,EM,DM,FM,OM,LM,zM,WM,UM,HM,XM,YM,QM,ZM,eL,rL,nL,sL,iL,uL,pL,Bg,lL,dL,hL,gL,xL,yL,bL,CL,GP,SL,vL,NL,_L,EL,DL,AL,FL,OL,LL,zL,VL,UL,GL,HL,KL,qP,qM,qL,jL,YL,ZL,eB,tB,oB,nB,sB,aB,iB,pB,lB,mB,dB,fB,hB,xB,yB,bB,wB,IB,kB,TB,vP,_B,$B,EB];for(let r of Gse)ri(r);var Lv=A();Lv.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}});Lv.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(Lv.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 Kv=Kp(FB()),zB=Kp(OB()),qv=Kp(MB());var LB=Kv.default||Kv,Hse=qv.default||qv,pm=class extends ao{constructor(t){super(),this.wasm=t,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(WB),Hv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new zo(this,pr())}write(t,e,o){let n={id:this.dataIdNextNumber++};return this.move(n,t,e,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}move(t,e,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let c=e;this.dataIdMap.set(t,{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(t,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),e!=null&&this.wasm.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,p),u)}async read(t){return this.readSync(t)}readSync(t,e,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(t);if(s===\"string\")return(e==null||e===0)&&(o==null||o>=i.length)?i:i.slice(e,o);e=e||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+e*p,n+o*p);return qse(u.buffer,s)}disposeData(t,e=!1){if(this.dataIdMap.has(t)){let o=this.dataIdMap.get(t);if(o.refCount--,!e&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(t)}return!0}refCount(t){return this.dataIdMap.has(t)?this.dataIdMap.get(t).refCount:0}incRef(t){let e=this.dataIdMap.get(t);e!=null&&e.refCount++}floatPrecision(){return 32}getMemoryOffset(t){return this.dataIdMap.get(t).memoryOffset}dispose(){this.wasm.tfjs.dispose(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(t,e,o,n){let s;if(o==null)s=this.write(n!=null?n:null,t,e);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:t,dtype:e,refCount:1});let i=y.sizeFromShape(t);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:t,dtype:e}}typedArrayFromHeap({shape:t,dtype:e,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(t);switch(e){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 ${e}`)}}};function Kse(r){return(t,e)=>(y.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||t.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,t).then(s=>{e(s.instance,s.module)})})}),{})}function BB(r,t,e){if(Gg!=null)return Gg;let o=\"tfjs-backend-wasm.wasm\";return r&&t?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),im!=null&&im[o]!=null?im[o]:e+o}async function VB(){let[r,t]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((e,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=zB.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?BB(r,t,am!=null?am:p):p+i},jv&&(n.instantiateWasm=Kse(BB(r,t,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;t&&r&&Gg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+LB.toString()],{type:\"text/javascript\"}),a=LB(n)):a=Hse(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,[])},e({wasm:i})}).catch(o)})}function qse(r,t){switch(t){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${t}`)}}var jse=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Gg=null,am=null,im={},um=!1,jv=!1;function Xse(r,t=!1){if(Pw(\"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,jv=t}function Yse(r,t=!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 e=jse.filter(o=>im[o]==null);if(e.length>0)throw new Error(`There were no entries found for the following binaries: ${e.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.`)}jv=t}var WB=-1,Hv=-1;function Qse(r){WB=r}function Zse(){if(Hv===-1)throw new Error(\"WASM backend not initialized.\");return Hv}var Jse=\"4.11.0\";var eae=2;su(\"wasm\",async()=>{let{wasm:r}=await VB();return new pm(r)},eae);var xo=A();xo.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);xo.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);xo.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);xo.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!0);xo.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);xo.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);xo.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);xo.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);xo.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);xo.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>-1);xo.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);xo.registerFlag(\"WEBGPU_PRINT_SHADER\",()=>\"\");xo.registerFlag(\"WEBGPU_ENGINE_COMPILE_ONLY\",()=>!1);var Hg=class{constructor(t){t&&(this.vendor=t.vendor,this.architecture=t.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(t){this.device=t,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(t,e,o=!1,n=!0){let s,a=UB(t,e);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:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t)):(s=this.device.createBuffer({size:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=t,s}releaseBuffer(t,e=!0){if(this.freeBuffers.size===0)return;let o=t.size,n=t.usage,s=UB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(t);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,e?(this.freeBuffers.get(s).push(t),this.numFreeBuffers++):(t.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((t,e)=>{t.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 UB(r,t){return`${r}_${t}`}var qg=class{constructor(t){this.device=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(t,e,o,n){let s=HB(o),a=t*e*s,i=GB(t,e,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:[t,e],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(t){if(this.freeTextures.size===0)return;let e=t.width,o=t.height,n=t.format,s=t.usage,a=GB(e,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(t),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(t);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=HB(n),c=e*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((t,e)=>{t.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 GB(r,t,e,o){return`${r}_${t}_${e}_${o}`}function HB(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function KB(r,t){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let e=r.length,o=\"xyzwuv\",n=r.map(a=>`${t}.${o[a]}`),s=new Array(e-1);s[e-2]=n[e-1];for(let a=e-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,t,e)=>e===\"int32\"?`atomicAdd(${r}, bitcast(${t}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${t});\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 Ii;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})(Ii||(Ii={}));var YB=(r,t,e,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=rae(e,s,t),i=r.createShaderModule({code:a,label:t.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(c=>t.shaderKey.toLowerCase().includes(c)))&&(console.group(t.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:t.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:t.constructor.name,layout:\"auto\"})},Ae=(r,t=\"f32\")=>{switch(r){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${r}-component ${t} is not supported.`)}};function ht(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 Mo(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 t;switch(r.length){case 0:t=`\n fn main()\n `;break;case 1:t=`\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return t}function qB(r,t){let e;return e=`\n ${tae(t)}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(workgroup_id) WorkgroupId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n localIndex = LocalIndex;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n workgroupId = WorkgroupId;\n ${r?\"main(getGlobalIndex());\":\"main();\"};\n }\n `,e}function tae(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function rae(r,t,e){let o=[],n=e.workgroupSize[0]*e.workgroupSize[1]*e.workgroupSize[2];if(e.outputComponent=e.outputComponent?e.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 ${ZB(e)?\" 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 `),e.pixelsOpType!=null){let f=e.pixelsOpType===Ii.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Nu(t.dtype,e.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Nu(r[0].dtype,e.outputComponent)}>;`,h=t.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=XB(e);return[jB,o.join(`\n`),cm(t.shape),e.getUserCode(),qB(g,e)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";e.variableNames.forEach((f,h)=>{let g=ht(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ht(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ht(t.shape.length);i+=`outShape : ${p}, `,s=t.shape.length-1,a=ht(s),i+=`\n outShapeStrides: ${a}, `,e.size&&(i+=\"size : i32, \"),e.uniforms&&(i+=e.uniforms),i+=\"};\",i=cae(i),o.push(i),e.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Nu(t.dtype,e.outputComponent)}>;\n `),e.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${e.variableComponents?Nu(r[h].dtype,e.variableComponents[h]):Nu(r[h].dtype,e.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+e.variableNames.length}) var uniforms: Uniforms;\n `);let u=iae(t.shape,e.dispatchLayout),c=[jB,o.join(`\n`)+oae,cm(t.shape),u,uae(t.shape.length)];e.atomic||c.push(pae(t.shape,t.dtype,e.outputComponent)),e.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>aae(f,t.shape,e.variableComponents?e.variableComponents[h]:e.outputComponent,e.dispatchLayout.x.length===t.shape.length)).join(`\n`);c.push(l),c.push(e.getUserCode());let m=XB(e);return c.push(qB(m,e)),c.join(`\n`)}function QB(r,t,e){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];t.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(e.shape),s.push(e.dtype);let a=t.map(c=>w.getBroadcastDims(c.shape,e.shape)),i=t.map(c=>y.arraysEqual(c.shape,e.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=ZB(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 jB=`\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`,oae=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function cm(r,t=\"\"){let e=r.length,o=t!==\"\"?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=t!==\"\"?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:\"outShapeStrides\";if(e<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ht(e),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}.${Mo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Mo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Mo(c)}`;return`${l}; ${m};`}).join(\"\"),`\n fn ${o}(index : i32) -> ${a} {\n ${p}\n return ${a}(${i.join(\",\")});\n }\n `}function nae(r,t){let e=r.name,o=r.shape.length,n=ht(o),s=\"get\"+e.charAt(0).toUpperCase()+e.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(t)} {\n return ${Ae(t)}(${e}[0]);\n }\n `;let p=`uniforms.${e.charAt(0).toLowerCase()+e.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(t)} {\n return ${Ae(t)}(${e}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${t===1?\"\":` / ${t}`}]);\n }\n `}function sae(r,t,e,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=t.length,u=ht(p);if(y.arraysEqual(r.shape,t)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(e)} {\n return ${Ae(e)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(e)} {\n return ${Ae(e)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${e===1?\"\":` / ${e}`}]);\n }\n `;let c=w.getBroadcastDims(r.shape,t),l=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(e)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(e)}{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${Mo(g+l)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=ht(i),x=r.shape.map((b,C)=>`coords.${Mo(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(e)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(e)}(${n}[getIndexFromCoords${h}(${d}, ${f})${e===1?\"\":` / ${e}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(e)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(e)}(${n}[getIndexFromCoords${h}(${d}, ${f})${e===1?\"\":` / ${e}`}]);\n }\n`}function aae(r,t,e,o){let n=nae(r,e);return r.shape.length<=t.length&&(n+=sae(r,t,e,o)),n}function iae(r,t){let{x:e,y:o=[],z:n=[]}=t,s=r.length,a=e.length+o.length+n.length;if(a!==s)return\"\";if(e.length===s)return`fn getOutputCoords() -> ${ht(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[e,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 uae(r){let t=\"\";switch(r){case 0:case 1:t+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:t+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:t+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:t+=`\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:t+=`\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:t+=`\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 t}function ZB(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Nu(r,t=1){if(r===\"float32\")return Ae(t,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(t,\"i32\");throw new Error(`type ${r} is not supported.`)}function pae(r,t,e){let o=r.length,n=Nu(t,e),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(e,\"i32\")}) {\n result[flatIndex] = ${n}(value);\n }\n `;if(o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=ht(o);s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(e)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${e===1?\"\":` / ${e}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(e,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${e===1?\"\":` / ${e}`}, value);\n }\n `}return s}function cae(r){let t=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(t,o=>\"@align(16) \"+o);let e=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(e,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function XB(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var Yv={};qe(Yv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Lo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Xv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>mae});var Ap=r=>{let t=1;for(let e=0;ee%r[o]===0)}function H(r,t,e=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Ap(r.x.map(i=>t[i]))/(e[0]*o[0])),r.y?Math.ceil(Ap(r.y.map(i=>t[i]))/(e[1]*o[1])):1,r.z?Math.ceil(Ap(r.z.map(i=>t[i]))/(e[2]*o[2])):1];return[n,s,a]}function Xv(r,t,e,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),t<=16&&e<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function lm(r,t,e=!1){if(e)return[8,8,1];let o=Ap(r.x.map(s=>t[s])),n=Ap(r.y.map(s=>t[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,t,e=!1){if(e)return[4,4,1];let o=Ap(r.x.map(s=>t[s])),n=Ap(r.y.map(s=>t[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((t,e)=>e)}}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 window!=\"undefined\"||typeof WorkerGlobalScope!=\"undefined\")&&!!navigator.gpu}function fm(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} does not support complex64 tensors in the WebGPU backend.`)})}var Lo;(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\"})(Lo||(Lo={}));var dae=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),fae=(r,t)=>{let e=r.limits.maxComputeWorkgroupsPerDimension,o=t.dispatchLayout,n=t.dispatch;if(n.every(a=>a<=e))return n;y.assert(n[0]>e&&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>e?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=e,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},Tu=class extends ao{nextDataId(){return Tu.nextDataId++}constructor(t,e){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=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(e),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 zo(this,pr()),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:t,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,e=!1){if(!this.tensorMap.has(t))return!0;let o=this.tensorMap.get(t);return e?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(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 e=this.tensorMap.get(t);if(!(!e||!e.resource)){if(e.external){e.resource=null;return}e.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(e.resource):e.resource instanceof GPUTexture&&this.textureManager.releaseTexture(e.resource),e.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let e=this.tensorMap.get(t);e.refCount++}decRef(t){if(this.tensorMap.has(t)){let e=this.tensorMap.get(t);e.refCount--}}write(t,e,o){if(o===\"complex64\"&&t!=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:e,values:t,refCount:1}),n}move(t,e,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(t,{dtype:n,shape:o,values:e,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(e){throw new Error(e.message)}Object.keys(this.pipelineCache).map((e,o)=>{this.pipelineCache[e]=t[o]})}async getBufferData(t){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 e=t.size,o=this.bufferManager.acquireBuffer(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,o,0,e),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(t,e){let o=this.tensorMap.get(t);return o.values=e,o.values}readSync(t){let e=this.tensorMap.get(t),{values:o,complexTensorInfos:n}=e;if(o!=null||e.dtype===\"string\")return o;if(e.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(t,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=e.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=E%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,e.dtype);return this.convertAndCacheOnCPU(t,f),f}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let e=this.tensorMap.get(t),{values:o}=e;if(o!=null)return o;let n;if(e.dtype===\"complex64\"){let s=await Promise.all([this.read(e.complexTensorInfos.real.dataId),this.read(e.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(e.resource);n=y.convertBackendValuesAndArrayBuffer(s,e.dtype)}return this.convertAndCacheOnCPU(t,n),n}copyBuffer(t){let e=t.size,o=t.usage,n=this.bufferManager.acquireBuffer(e,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,e),this.submitQueue(),n}createTensorFromGPUData(t,e,o){let n=t.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:e,values:null,refCount:1,external:t.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(t.buffer.sizey.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled.\"),this.hasTimestampQueryWarned=!0);let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t,e,o){return e===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,t,e),shape:t,dtype:e}}tensorToBinding(t){if(!t)return null;let o=this.tensorMap.get(t.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(t){let e=this.tensorMap.get(t);if(e.resource!=null)return;let o=jg(e.dtype)*y.sizeFromShape(e.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(e.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();e.dtype===\"int32\"||e.dtype===\"bool\"?new Int32Array(i).set(e.values):new Float32Array(i).set(e.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();e.dtype===\"int32\"||e.dtype===\"bool\"?new Int32Array(a).set(e.values):new Float32Array(a).set(e.values),n.unmap()}e.values=null}else n=this.bufferManager.acquireBuffer(o,s);e.resource=n}makeUniforms(t){let e=0,o=0,n=[],s=1;t.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),e=Math.ceil(e/u)*u,o=p.data.length,n.push(e),e+=p.data.length*4}),e=Math.ceil(e/s)*s;let a=new ArrayBuffer(e);t.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(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,e),this.uniformPendingDisposal.push(i),{offset:0,size:e,buffer:i}}runWebGPUProgram(t,e,o,n,s){if(s||(s=this.makeTensorInfo(t.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=fae(this.device,t);let a=e.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:t.variableNames[u]}});t.shaderKey=QB(t,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=YB(this.device,t,a,s,i)),t.pipeline=this.pipelineCache[t.shaderKey],i||this.recordAndSubmit(t,s,e,n),s}recordAndSubmit(t,e,o,n){if(t.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(t.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(e).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(e.shape);s.push({type:i,data:m})}if(t.size){let m=y.sizeFromShape(t.outputShape);s.push({type:i,data:[t.outputComponent?m/t.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(e),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(e.dataId);let u=this.device.createBindGroup({layout:t.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,queryIndex:0,location:\"beginning\"},{querySet:this.querySet,queryIndex:1,location:\"end\"}],this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(c||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||t.pixelsOpType===Ii.DRAW)&&(this.endComputePassEncoder(),c?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 e=new BigUint64Array(t.getMappedRange()),o=Number(e[1]-e[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),o}shouldExecuteOnCPU(t,e=dae){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&t.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\"},t=await navigator.gpu.requestAdapter(r),e={},o=[];t.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),t.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),e.requiredFeatures=o;let n=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(e),a=await t.requestAdapterInfo();return new Tu(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 hae=\"let resultTemp = a + b;\",gae=\"let resultTemp = atan2(a, b);\",xae=\"let resultTemp = areal * breal - aimag * bimag;\",yae=\"let resultTemp = areal * bimag + aimag * breal;\",bae=\"let resultTemp = a / b;\",Cae=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",wae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,Sae=`\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`,Iae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,vae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,kae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Nae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,Tae=\"return f32(a >= 1.0 && b >= 1.0);\",_ae=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,$ae=\"return f32(a >= 1.0 || b >= 1.0);\",Eae=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,Rae=\"let resultTemp = max(a, b);\",Dae=\"let resultTemp = min(a, b);\",Aae=`\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`,Fae=`\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`,Pae=\"let resultTemp = a * b;\",Oae=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,Mae=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,Lae=`\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`,Bae=`\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`,zae=\"if (a < 0.0) { return b * a; } return a;\",Vae=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Wae=\"let resultTemp = (a - b) * (a - b);\",Uae=\"let resultTemp = a - b;\";function Qc(r,t){let e;do{switch(r){case fe.ATAN2:e=gae;break;case fe.MAX:e=Rae;break;case fe.MIN:e=Dae;break;case fe.MOD:e=t?Fae:Aae;break;case fe.NOT_EQUAL:e=t?Mae:Oae;break;case fe.POW:e=t?Bae:Lae;break;default:continue}let o,n,s;return t?(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 ${e}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:e=hae;break;case fe.COMPLEX_MULTIPLY_IMAG:e=yae;break;case fe.COMPLEX_MULTIPLY_REAL:e=xae;break;case fe.DIV:e=bae;break;case fe.ELU_DER:e=Cae;break;case fe.EQUAL:e=wae;break;case fe.FLOOR_DIV:e=Sae;break;case fe.GREATER:e=Iae;break;case fe.GREATER_EQUAL:e=vae;break;case fe.LESS:e=kae;break;case fe.LESS_EQUAL:e=Nae;break;case fe.LOGICAL_AND:return t?_ae:Tae;case fe.LOGICAL_OR:return t?Eae:$ae;case fe.MUL:e=Pae;break;case fe.PRELU:return t?Vae:zae;case fe.SQUARED_DIFFERENCE:e=Wae;break;case fe.SUB:e=Uae;break;default:}return`\n ${e}\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 Gae=\"return abs(a);\",Hae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,Kae=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,qae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,jae=\"return asinh(a);\",Xae=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,Yae=`\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`,Qae=\"return ceil(a);\",Zae=\"return cos(a);\",Jae=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,eie=\"return exp(a) - 1.0;\",tie=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",rie=`\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`,oie=`\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`,nie=\"return exp(a);\",sie=\"return floor(a);\",aie=\"return f32(!isnan(a) && !isinf(a));\",iie=\"return f32(isinf(a));\",uie=\"return f32(isnan(a));\",pie=\"return a;\",cie=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,lie=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,mie=\"return f32(!(a >= 1.0));\",die=\"return -a;\",fie=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",hie=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,gie=\"return 1.0 / a;\",xie=\"return select(a, 0.0, a < 0.0);\",yie=\"return clamp(a, 0.0, 6.0);\",bie=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",Cie=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,wie=\"return round(a);\",Sie=\"return inverseSqrt(a);\",Iie=`\n if (a >= 0.0) {\n return ${w.SELU_SCALE} * a;\n } else {\n return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,vie=\"return 1.0 / (1.0 + exp(-1.0 * a));\",kie=\"return sign(a);\",Nie=\"return sin(a);\",Tie=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,_ie=`\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`,$ie=\"return sqrt(a);\",Eie=\"return a * a;\",Rie=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,Die=\"return tan(a);\",Aie=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Fie=\"return f32(i32((a)));\";function vi(r,t){switch(r){case Z.ABS:return Gae;case Z.ACOS:return Hae;case Z.ACOSH:return Kae;case Z.ASIN:return qae;case Z.ASINH:return jae;case Z.ATAN:return Xae;case Z.ATANH:return Yae;case Z.COS:return Zae;case Z.COSH:return Jae;case Z.CEIL:return Qae;case Z.ELU:return t?rie:tie;case Z.ERF:return oie;case Z.EXP:return nie;case Z.EXPM1:return eie;case Z.FLOOR:return sie;case Z.IS_FINITE:return aie;case Z.IS_INF:return iie;case Z.IS_NAN:return uie;case Z.LINEAR:return pie;case Z.LOG:return cie;case Z.LOG1P:return lie;case Z.LOGICAL_NOT:return mie;case Z.NEG:return die;case Z.LEAKYRELU:return t?hie:fie;case Z.RECIPROCAL:return gie;case Z.RELU:return t?Cie:xie;case Z.RELU6:return t?bie:yie;case Z.ROUND:return wie;case Z.RSQRT:return Sie;case Z.SELU:return Iie;case Z.SIGMOID:return vie;case Z.SIGN:return kie;case Z.SIN:return Nie;case Z.SINH:return Tie;case Z.SOFTPLUS:return _ie;case Z.SQRT:return $ie;case Z.SQUARE:return Eie;case Z.STEP:return Rie;case Z.TAN:return Die;case Z.TANH:return Aie;case Z.TO_INT:return Fie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function fr(r,t=!1,e=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=vi(Z.LINEAR);else if(r===\"relu\")n=vi(Z.RELU,e);else if(r===\"elu\")n=vi(Z.ELU,e);else if(r===\"relu6\")n=vi(Z.RELU6,e);else if(r===\"prelu\")n=Qc(fe.PRELU,e);else if(r===\"sigmoid\")n=vi(Z.SIGMOID,e);else if(r===\"leakyrelu\")n=vi(Z.LEAKYRELU,e);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(e?4:1),i=\"\";return t?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,t){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${t?\"value = activation(value, coords);\":\"\"}\n `}function Qv(r,t,e=!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=t?\"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 ${e&&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,t,e,o,n=!1,s=!1,a=!1,i=1){return`\n ${Qv(e,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,t)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var Pie=(r,t)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${t});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${t});\n `,Oie=(r,t,e,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 < ${e}; 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/t}; k++) {\n ${n}\n for (var i = 0; i < ${e}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function Fp(r,t,e=!1,o=32,n=!1,s=32,a=!1){let i=t[1]*r[1],p=t[0]*r[0],u=e?i:o,c=e?o:i,l=u/t[0],m=o/t[1],d=r[1],f=r[0];return y.assert((e&&l===4&&r[1]===4||!e&&(l===3||l===4))&&u%t[0]===0&&o%t[1]===0&&r[0]===4,()=>`If transposeA ${e} 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]${t[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${t[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 ${Pie(e,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 ${Oie(e,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 JB=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 `,Mie=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Pp(r,t,e=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*t[1],u=r[0]*t[0],c=e?p:o,l=e?o:p;y.assert(l%t[1]===0&&c%t[0]===0&&o%t[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t[1]}`);let m=l/t[1],d=c/t[0],f=o/t[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 + ${t[1]}) {\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t[0]}) {\n ${JB(e)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${t[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${t[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 * ${t[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${e?`mm_Asub[k][localRow + innerRow * ${t[1]}];`:`mm_Asub[localRow + innerRow * ${t[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 * ${t[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let gCol = globalColStart + localCol + innerCol * ${t[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 ${JB(e)}\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 ${Mie(e)}\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 Lie=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 Bie(r,t=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let e=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) / ${e} + 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 * ${e} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${Lie(t)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${e/4}; k++) {\n let rowB = t * ${e} + 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(t,e,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=e,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?t[1]:t[2];if(this.isVec4=(u%4===0&&!o||e[1]%4===0&&o)&&e[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=e[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Xv(e[1],u,e[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(e[1],e[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(t,e,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=t%n===0,i=e%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${fr(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?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Bie(this.workgroupSize,this.transposeA):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function zie(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(t,e=!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=t,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=e,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${e}_${o}`}getUserCode(){return`\n ${fr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${zie(this.workgroupSize[0])}\n `}};function Vie(r){let t=r[1],e=r[0],o=t>e?t:e;return`\n var mm_Asub : array, ${t}>;\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(t,e,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 ${fr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${Vie(this.workgroupSize)}\n `}};var Zg=class{constructor(t,e,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(t[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&e%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],e],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let t=this.outputComponent;return`\n ${Qv(!1,this.transposeB,!1,!1,!1,t)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(t)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n for (var i = 0; i < ${t}; i = i + 1) {\n ${Qr(\"&result[flatIndex + i]\",`${t>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${t===4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Jg=class{constructor(t,e=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],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.addBias=e!=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 ${fr(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(t){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : 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.shaderKey=\"fill\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function kt(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new ex(o),i=[{type:\"float32\",data:[n]}];return t.runWebGPUProgram(a,[],s,i)}}var ez={kernelName:sa,backendName:\"webgpu\",kernelFunc:kt};function pe(r){let{inputs:t,attrs:e}=r,{x:o}=t,{shape:n}=e,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 tz={kernelName:da,backendName:\"webgpu\",kernelFunc:pe};function Op({a:r,b:t,transposeA:e,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=t.shape.length,l=e?r.shape[u-2]:r.shape[u-1],m=o?t.shape[c-1]:t.shape[c-2],d=e?r.shape[u-1]:r.shape[u-2],f=o?t.shape[c-2]:t.shape[c-1],h=r.shape.slice(0,-2),g=t.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Ir.assertAndGetBroadcastShape(r.shape.slice(0,-2),t.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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=[E,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=Lo.MatMulReduceProgram:P===1&&m>=2e3?U=Lo.MatMulSplitKProgram:U=Lo.MatMulSmallOutputSizeProgram:U=Lo.MatMulPackedProgram}switch(U){case Lo.MatMulReduceProgram:L=new Yg(z,e,o,s,p,a);break;case Lo.MatMulSplitKProgram:{if(B=kt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,e,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 Lo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,e,o,s,p,a);break;case Lo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,e,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 Wie(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Op({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rz={kernelName:Io,backendName:\"webgpu\",kernelFunc:Wie};var gm=class{constructor(t,e,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${t}`,this.op=t}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${Qc(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 ki=class{constructor(t,e,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.op=t,this.useSharedMemoryWithA=e.length<=1&&o.length>1&&e[0]<128,this.useSharedMemoryWithB=o.length<=1&&e.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:e[0],this.shaderKey=`binary_${t}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=e.length>0&&e[e.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(e)||e[e.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_${t}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let t,e=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${e}, b : ${e}) -> ${e} {\n ${Qc(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);`;t=`\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 t=`\n ${o}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${e}(getAByOutputCoords(coords));\n let b = ${e}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return t}};function Ft(r){let{inputs:t}=r,{x:e}=t;return r.backend.incRef(e.dataId),{dataId:e.dataId,shape:e.shape,dtype:e.dtype}}var oz={kernelName:wo,backendName:\"webgpu\",kernelFunc:Ft};function yo(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,\"complex64\"),a=e.tensorMap.get(s.dataId),i=Ft({inputs:{x:o},backend:e}),p=Ft({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var nz={kernelName:Fi,backendName:\"webgpu\",kernelFunc:yo};var Jr=class{constructor(t,e,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=e,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${e}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${vi(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:t,dtype:e}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=e||s.dtype;if(a.shouldExecuteOnCPU([s])&&t!=null){let u=a.tensorMap.get(s.dataId),c=t(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:t,supportsComplex:e=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(e&&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 ki(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=yo({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]))&&t!=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]=t(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new ki(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:sz,castImpl:az,ceilImpl:iz,concatImpl:uz,equalImpl:pz,expImpl:cz,expm1Impl:lz,floorImpl:mz,floorDivImpl:dz,gatherNdImpl:fz,gatherV2Impl:hz,greaterEqualImpl:gz,greaterImpl:xz,lessEqualImpl:yz,lessImpl:bz,logImpl:Cz,maxImpl:wz,maximumImpl:Sz,minimumImpl:Iz,multiplyImpl:vz,negImpl:kz,notEqualImpl:Nz,prodImpl:Tz,rangeImpl:_z,rsqrtImpl:$z,scatterImpl:Ez,simpleAbsImpl:Rz,sliceImpl:Dz,stridedSliceImpl:Az,stringNGramsImpl:Fz,subImpl:Pz,tileImpl:Oz,topKImpl:Mz,transposeImpl:Lz,uniqueImpl:HPt}=Tc;var Uie=ye({opType:Z.ABS,cpuKernelImpl:Rz}),Bz={kernelName:Xs,backendName:\"webgpu\",kernelFunc:Uie};var Gie=ye({opType:Z.ACOS}),zz={kernelName:Wo,backendName:\"webgpu\",kernelFunc:Gie};var Hie=ye({opType:Z.ACOSH}),Vz={kernelName:Uo,backendName:\"webgpu\",kernelFunc:Hie};var Kie=et({opType:fe.ADD,cpuKernelImpl:sz,supportsComplex:!0}),Wz={kernelName:uo,backendName:\"webgpu\",kernelFunc:Kie};var tx=class{constructor(t){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t[0],this.variableNames=t.map((e,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 t=[];this.variableNames.forEach(n=>{t.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let e=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 ${t.join(`\n `)}\n setOutputAtIndex(flatIndex, ${e});\n }\n }\n }\n `}};function qie(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return Ft({inputs:{x:o[0]},backend:e});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new tx(s);return e.runWebGPUProgram(a,o,n)}var Uz={kernelName:Go,backendName:\"webgpu\",kernelFunc:qie};var rx=class{constructor(t,e){this.variableNames=[\"A\"],this.workgroupSize=[16,16,1];let o=new Array(t.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let t=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${t} + i32(localId.x);\n var y = i32(workgroupId.y) * ${t} + 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) * ${t} + i32(localId.x);\n y = i32(workgroupId.x) * ${t} + 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(t,e){this.variableNames=[\"A\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=new Array(t);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:t.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=e,this.shaderKey=`reduce_${e}`}getUserCode(){let t=\"\",e=\"0.0\",o=this.workgroupSize[0];this.reduceType===\"min\"||this.reduceType===\"max\"?(t=`\n if (isnan(candidate)) {\n bestValue = uniforms.NAN;\n } else if (!isnan(bestValue) && candidate ${this.reduceType===\"min\"?\"<\":\">\"} bestValue)\n { bestValue = candidate; }`,e=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?t=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"?(t=\" bestValue = bestValue * candidate; \",e=\"1.0\"):this.reduceType===\"all\"?(t=\" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); \",e=\"1.0\"):this.reduceType===\"any\"&&(t=\" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); \",e=\"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 = ${e};\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 ${t}\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 ${t}\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 jie={mean:\"float32\",all:\"bool\",any:\"bool\"};function eo(r,t,e,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(t,r.shape),p=i,u=w.getAxesPermutation(p,s),c=r;u!=null&&(c=yr({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;e&&(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=wz(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=Tz(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=jie[o]||ni(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 Xie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,\"all\",e)}var Hz={kernelName:Ho,backendName:\"webgpu\",kernelFunc:Xie};function Yie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,\"any\",e)}var Kz={kernelName:Ko,backendName:\"webgpu\",kernelFunc:Yie};var Zc=class{constructor(t,e,o){this.workgroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[e];this.op=o===\"min\"?\"<\":\">\";let[s,a]=w.computeOutAndReduceShapes(t,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=t,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let t=this.workgroupSize[0],e=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${Mo(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 / ${t};\n let reduceLength = ${e()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + ${t}) {\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), ${t}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 = ${e()};\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 Qie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=yr({inputs:{x:n},backend:e,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 Zc(p.shape,a[0],\"max\"),l=[{type:\"float32\",data:[Number.NEGATIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var qz={kernelName:Ys,backendName:\"webgpu\",kernelFunc:Qie};function Zie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=yr({inputs:{x:n},backend:e,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 Zc(p.shape,a[0],\"min\"),l=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var jz={kernelName:Qs,backendName:\"webgpu\",kernelFunc:Zie};var Jie=ye({opType:Z.ASIN}),Xz={kernelName:qo,backendName:\"webgpu\",kernelFunc:Jie};var eue=ye({opType:Z.ASINH}),Yz={kernelName:jo,backendName:\"webgpu\",kernelFunc:eue};var tue=ye({opType:Z.ATAN}),Qz={kernelName:Xo,backendName:\"webgpu\",kernelFunc:tue};var rue=et({opType:fe.ATAN2}),Zz={kernelName:Qo,backendName:\"webgpu\",kernelFunc:rue};var oue=ye({opType:Z.ATANH}),Jz={kernelName:Yo,backendName:\"webgpu\",kernelFunc:oue};var sx=class{constructor(t){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t.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 za=class{constructor(t,e,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,e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType===\"avg\"?t=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?t=`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 }`:t=\"resultValue = max(value, resultValue);\";let e=\"resultValue\";return this.poolType===\"avg\"&&(e=\"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 ${t}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${e});`}\n }\n }\n `}},_u=class{constructor(t,e,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,e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType===\"avg\"?t=\"resultValue += value; count += 1.0;\":this.computePositions?t=`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 }`:t=\"resultValue = max(value, resultValue);\";let e=\"resultValue\";return this.poolType===\"avg\"&&(e=\"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 ${t}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${e});`}\n }\n }\n `}};function Jv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,\"max\",e)}var eV={kernelName:Vn,backendName:\"webgpu\",kernelFunc:Jv};function e0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,\"mean\",e)}var tV={kernelName:Gn,backendName:\"webgpu\",kernelFunc:e0};function ax(r,t,e,o){if(t.filterWidth===1&&t.filterHeight===1&&y.arraysEqual(t.inShape,t.outShape))return Ft({inputs:{x:r},backend:o});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.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;e===\"avg\"?p=e0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(e===\"max\",()=>`Invalid pool type ${e}`),p=Jv({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:t.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?n=new sx(t):(e===\"avg\"?n=new za(t,\"avg\"):(y.assert(e===\"max\",()=>`Invalid pool type ${e}`),n=new za(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]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return ax(n,c,\"avg\",e)}var rV={kernelName:Zo,backendName:\"webgpu\",kernelFunc:nue};function sue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 _u(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var oV={kernelName:Zs,backendName:\"webgpu\",kernelFunc:sue};var ix=class{constructor(t){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=t.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(t){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=t.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 aue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGPUProgram(m,[n],a.dtype,f)}var nV={kernelName:Ai,backendName:\"webgpu\",kernelFunc:aue};function iue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGPUProgram(l,[n],a.dtype,d)}var sV={kernelName:Di,backendName:\"webgpu\",kernelFunc:iue};function uue(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return Op({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var aV={kernelName:Jo,backendName:\"webgpu\",kernelFunc:uue};var px=class{constructor(t,e){this.variableNames=[\"source\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=t,this.uniforms=`start : ${ht(t.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let t=ht(this.rank),e=pue(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.${t0[a]} = uniforms.start.${Mo(a)} + coords.${t0[a]};`),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${t};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${e}));\n }\n }\n `}},t0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function pue(r){if(r===1)return\"sourceLoc\";if(r<=6)return t0.slice(0,r).map(t=>`sourceLoc.${t}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=ct.parseSliceParams(n,s,a);if(ct.assertParamsValid(n,i,p),e.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=e.tensorMap.get(n.dataId),m=Dz(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);let u=new px(i,p),c=[{type:\"int32\",data:i}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var iV={kernelName:ha,backendName:\"webgpu\",kernelFunc:Hs};var cue=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=yr({inputs:{x:f},backend:e,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeData(b.dataId)),x},uV={kernelName:Js,backendName:\"webgpu\",kernelFunc:cue};var lue=`\n fn bincount_write(index: i32, value: f32) {\n ${Qr(\"&result[index]\",\"value\",\"float32\")}\n }\n`,mue=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,Jc=class{constructor(t,e,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=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=e,this.hasWeights&&this.variableNames.push(\"w\"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return`\n ${this.binaryOutput?mue:lue}\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 due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=kt({backend:e,attrs:{shape:c,value:0,dtype:l}}),d=new Jc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return e.runWebGPUProgram(d,h,l,f,m)}var pV={kernelName:en,backendName:\"webgpu\",kernelFunc:due};var cx=class{constructor(t){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",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=\"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 fue(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t;if(e.shouldExecuteOnCPU([o,n])){let c=e.tensorMap.get(o.dataId),l=e.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return e.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 e.runWebGPUProgram(p,[o,n],\"int32\",u)}var cV={kernelName:ea,backendName:\"webgpu\",kernelFunc:fue};var r0=et({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:Nz}),lV={kernelName:Qn,backendName:\"webgpu\",kernelFunc:r0};function Ni(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.tensorMap.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:e})}var mV={kernelName:qi,backendName:\"webgpu\",kernelFunc:Ni};function dV(r,t){let e=new Jr(r.shape,Z.TO_INT),o=t.runWebGPUProgram(e,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function o0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Ft({inputs:{x:n},backend:e});let a=Gr(n.shape),i=o0({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),p=yo({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=Ni({inputs:{input:n},backend:e}),i=o0({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.tensorMap.get(n.dataId).values,[i,p,u]=az(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s===\"int32\")return dV(n,e);if(s===\"bool\"){let a=e.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=r0({inputs:{a:n,b:a},backend:e});return e.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var fV={kernelName:bo,backendName:\"webgpu\",kernelFunc:o0};var hue=ye({opType:Z.CEIL,cpuKernelImpl:iz}),hV={kernelName:tn,backendName:\"webgpu\",kernelFunc:hue};var lx=class{constructor(t){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=t,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(t){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : 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.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 gue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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),e.runWebGPUProgram(i,[n],n.dtype,p)}var gV={kernelName:Co,backendName:\"webgpu\",kernelFunc:gue};var dx=class{constructor(t){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],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=\"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 xV(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function xue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.tensorMap.get(o.dataId),s=new dx(o.shape),a=[xV(o,n.complexTensorInfos.real),xV(o,n.complexTensorInfos.imag)];return e.runWebGPUProgram(s,a,a[0].dtype)}var yV={kernelName:Pi,backendName:\"webgpu\",kernelFunc:xue};var fx=class{constructor(t){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((e,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=t.length-1;for(let e=0;e0){t.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;sNi({inputs:{input:C},backend:e})),h=r.map(C=>Mp({inputs:{input:C},backend:e})),g=el(f,t,e),x=el(h,t,e),b=yo({inputs:{real:g,imag:x},backend:e});return f.forEach(C=>e.disposeData(C.dataId)),h.forEach(C=>e.disposeData(C.dataId)),e.disposeData(g.dataId),e.disposeData(x.dataId),b}let n=e.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(t))];return pe({inputs:{x:k},backend:e,attrs:{shape:E}})}),h=f.map(k=>({vals:e.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=uz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),t),S=e.makeTensorInfo(C,o,b);return f.forEach(k=>e.disposeData(k.dataId)),S}let s=e.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;fe.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:e,attrs:{shape:i}});return e.disposeData(m.dataId),d}function yue(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:e,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,t)),y.sizeFromShape(s.shape.slice(t))]}})),outShape:o}}function n0(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:e}):el(p,s,e)}var CV={kernelName:ta,backendName:\"webgpu\",kernelFunc:n0};function bue(r,t,e,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?t&&o?`\n ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&e?`\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),E=r?Ae(p):Ae(i);return`\n ${fr(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) -> ${E} {\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(t,e,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=t.outShape,this.isChannelsLast=t.dataFormat===\"channelsLast\",this.isVec4=((t.inChannels%4===0||t.inChannels%3===0)&&this.isChannelsLast||t.outWidth%4===0&&!this.isChannelsLast)&&t.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&&t.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=e%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 t=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Pp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),e=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${bue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,e[0],e[1],e[2])}\n ${t}\n `}};var gx=class{constructor(t,e=!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=t.outShape,this.isChannelsLast=t.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=e,this.activation=o,this.hasPreluActivationWeights=n,e&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return`\n ${fr(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(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let t=this.isChannelsLast?1:2,e=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[${t}] && 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[${e}] && xCol >= 0) {\n value = ${s};\n }\n }\n setOutputAtIndex(index, value);\n }\n }\n `}};function yx(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Cue({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=e.dataFormat===\"channelsLast\",u=!p,c=!1,l=p&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type===\"VALID\",m=[],d,f;if(l){let x=e.inHeight*e.inWidth*e.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,e.batchSize,x]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,x,e.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[e.batchSize,e.inHeight*e.inWidth,e.inChannels]:[e.batchSize,e.inChannels,e.inHeight*e.inWidth]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.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=Op({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:e.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function wue({x:r,filter:t,convInfo:e,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}=e,C=b===\"channelsLast\",S=p*u*c,k=h*f,_=C?[e.batchSize,k,S]:[e.batchSize,S,k],E=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(E,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:t},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=Op({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:e.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=e.dataFormat===\"channelsLast\",l=c&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type===\"VALID\",m=A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(l||e.filterHeight===1&&e.filterWidth===1&&e.dilationHeight===1&&e.dilationWidth===1&&e.strideHeight===1&&e.strideWidth===1&&(e.padInfo.type===\"SAME\"||e.padInfo.type===\"VALID\")))return Cue({x:r,filter:t,convInfo:e,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=e.batchSize*Math.ceil(e.outHeight*e.outWidth/32)*Math.ceil(e.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return wue({x:r,filter:t,convInfo:e,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[e.padInfo.top,e.padInfo.left],b=[{type:\"int32\",data:[e.filterHeight,e.filterWidth]},{type:\"int32\",data:[...x]},{type:\"int32\",data:[e.strideHeight,e.strideWidth]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]}];if(m)g=new gx(e,p,i,u);else{let _=c?e.outHeight*e.outWidth:e.outChannels,E=c?e.outChannels:e.outHeight*e.outWidth,R=e.filterHeight*e.filterWidth*e.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[E]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(e,_,E,R,p,i,u,D)}let C=[],S=[r,t];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 Sue(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=e,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 wV={kernelName:rn,backendName:\"webgpu\",kernelFunc:Sue};var Cx=class{constructor(t){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=t.inShape,this.isChannelsLast=t.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&t.outChannels%4===0&&t.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 t=this.isChannelsLast?1:2,e=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[${t}], coords[${e}]) - 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(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.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(t){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=t.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(t){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=t.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 Iue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(d,[n,s],n.dtype,f)}var SV={kernelName:Oi,backendName:\"webgpu\",kernelFunc:Iue};function vue(r=4){let t=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 ${t(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(t){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t.inShape,y.assert(t.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=t.inChannels%4===0&&t.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 t=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize):Pp(this.elementsPerThread,this.workgroupSize);return`\n ${vue(this.isVec4?4:1)}\n ${t}\n `}};function kue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(f,[n,s],\"float32\",d)}var IV={kernelName:on,backendName:\"webgpu\",kernelFunc:kue};var kx=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.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 Nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],d,l)}var vV={kernelName:nn,backendName:\"webgpu\",kernelFunc:Nue};function Tue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(c,[n,s],s.dtype,l)}var kV={kernelName:Xa,backendName:\"webgpu\",kernelFunc:Tue};function _ue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(c,[n,s],n.dtype,l)}var NV={kernelName:sn,backendName:\"webgpu\",kernelFunc:_ue};var $ue=ye({opType:Z.COS}),TV={kernelName:an,backendName:\"webgpu\",kernelFunc:$ue};var Eue=ye({opType:Z.COSH}),_V={kernelName:un,backendName:\"webgpu\",kernelFunc:Eue};var Nx=class{constructor(t,e,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0;let[s]=e;this.outputShape=[s,o[0],o[1],t],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[t,e]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${t} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${t} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${t}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${e} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${e} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${e}`];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 > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${e} ) {\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 Rue=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Nx(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return e.runWebGPUProgram(c,[n,s,a],\"float32\",l)},$V={kernelName:ln,backendName:\"webgpu\",kernelFunc:Rue};var Lp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Lp||(Lp={}));var xm=class{constructor(t,e,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=t,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let t=this.outputShape.length,e=this.op===Lp.Prod?\"1.0\":\"0.0\",o=this.exclusive?e:`getX(${EV(t,\"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 = ${RV(t,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${RV(t,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${EV(t,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function EV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function RV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function Tx(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=yr({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Ft({inputs:{x:p},backend:e});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=e.runWebGPUProgram(d,[l],l.dtype,h),e.disposeData(f.dataId)}if(n){let m=new xm(r,p.shape,n,s),d=l,f=[{type:\"float32\",data:[0]}];l=e.runWebGPUProgram(m,[l],l.dtype,f),e.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=yr({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeData(l.dataId),e.disposeData(p.dataId),d}return l}function Due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Tx(Lp.Prod,n,e,s,a,i)}var DV={kernelName:pn,backendName:\"webgpu\",kernelFunc:Due};function Aue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Tx(Lp.Sum,n,e,s,a,i)}var AV={kernelName:cn,backendName:\"webgpu\",kernelFunc:Aue};function Fue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{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=kt({backend:e,attrs:{shape:d,value:0,dtype:l}}),h=new Jc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return e.runWebGPUProgram(h,x,l,g,f)}var FV={kernelName:ra,backendName:\"webgpu\",kernelFunc:Fue};var _x=class{constructor(t,e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${e}`,this.dataFormat=e}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 Pue(r){let{inputs:t,backend:e,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=[{type:\"int32\",data:[s]}],g=new _x(f,a);return e.runWebGPUProgram(g,[n],n.dtype,h)}var PV={kernelName:mn,backendName:\"webgpu\",kernelFunc:Pue};var $x=class{constructor(t,e,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=t,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=e,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let t=this.filterWidth*this.filterHeight,e=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 ${fr(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 ${t, inDims : vec2, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=t.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(t.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),e&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=t,this.addBias=e,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 t=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,e=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return`\n ${fr(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(${e}, ${o}) - uniforms.pads;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${t}>;\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 < ${t}; 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 rl=class{constructor(t,e=!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=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.dataFormat===\"channelsLast\",e&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=t,this.addBias=e,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let t=this.isChannelsLast?\"getX(batch, xR, xC, d1);\":\"getX(batch, d1, xR, xC);\";return`\n ${fr(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 = ${t};\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 = ${t};\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 Oue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 $x(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 tl(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new rl(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]})),e.runWebGPUProgram(g,[n,s],n.dtype,f)}var OV={kernelName:dn,backendName:\"webgpu\",kernelFunc:Oue};var Ex=class{constructor(t){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=t.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(t){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=t.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 Mue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Ex(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 e.runWebGPUProgram(m,[n,s],\"float32\",d)}var MV={kernelName:Mi,backendName:\"webgpu\",kernelFunc:Mue};function Lue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],n.dtype,d)}var LV={kernelName:Li,backendName:\"webgpu\",kernelFunc:Lue};var Dx=class{constructor(t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,t],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 Bue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Dx(s),p=e.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var BV={kernelName:oa,backendName:\"webgpu\",kernelFunc:Bue};var Ax=class{constructor(t){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.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 zue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],n.dtype,l)}var zV={kernelName:fn,backendName:\"webgpu\",kernelFunc:zue};var Fx=class{constructor(t,e){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=t.inShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.outShape,this.workgroupSize),e!==\"float32\"&&e!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${e} type.`);this.type=e,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(t,e,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=t.filterShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.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 Vue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=kt({backend:e,attrs:{shape:s.shape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var VV={kernelName:zi,backendName:\"webgpu\",kernelFunc:Vue};function Wue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=kt({backend:e,attrs:{shape:c.inShape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var WV={kernelName:Bi,backendName:\"webgpu\",kernelFunc:Wue};var Ox=class{constructor(t,e,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=Ii.DRAW,this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=e,this.textureFormat=o,this.shaderKey=`draw_${e}_${o}`}getUserCode(){let t,e=this.type===\"float32\"?\"value\":\"value / 255.0\";return t=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${e};\n rgba[1] = ${e};\n rgba[2] = ${e};\n } else {\n rgba[d] = ${e};\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 ${t}\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 Uue(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=e.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:e.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",C=e.makeTensorInfo(m,b),S=e.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[c]}];if(e.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 e.disposeData(C.dataId),n}var UV={kernelName:Pu,backendName:\"webgpu\",kernelFunc:Uue};var s0=et({opType:fe.MUL,cpuKernelImpl:vz,supportsComplex:!0}),GV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:s0};function a0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,\"sum\",e)}var HV={kernelName:Is,backendName:\"webgpu\",kernelFunc:a0};function Gue(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=a0({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeData(h.dataId);return m}var KV={kernelName:Vi,backendName:\"webgpu\",kernelFunc:Gue};var Hue=ye({opType:Z.ELU}),qV={kernelName:gn,backendName:\"webgpu\",kernelFunc:Hue};var Kue=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=new ki(fe.ELU_DER,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],o.dtype)},jV={kernelName:Ya,backendName:\"webgpu\",kernelFunc:Kue};var que=et({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:pz}),XV={kernelName:yn,backendName:\"webgpu\",kernelFunc:que};var jue=ye({opType:Z.ERF}),YV={kernelName:xn,backendName:\"webgpu\",kernelFunc:jue};var Xue=ye({opType:Z.EXP,cpuKernelImpl:cz,dtype:\"float32\"}),QV={kernelName:bn,backendName:\"webgpu\",kernelFunc:Xue};function Mx(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 ZV={kernelName:na,backendName:\"webgpu\",kernelFunc:Mx};var Yue=ye({opType:Z.EXPM1,cpuKernelImpl:lz}),JV={kernelName:Cn,backendName:\"webgpu\",kernelFunc:Yue};var ym=class{constructor(t,e){this.variableNames=[\"real\",\"imag\"],this.outputShape=[],this.uniforms=\"exponentMultiplier : f32, denominator: 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.component=t,this.shaderKey=`fft_${t}`}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,t,e){let o=e.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:e,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=t?2*Math.PI:-2*Math.PI,f=t?u[1]:1,h=[{type:\"float32\",data:[d]},{type:\"float32\",data:[f]}],g=e.runWebGPUProgram(c,m,\"float32\",h);i.push(g);let x=e.runWebGPUProgram(l,m,\"float32\",h);i.push(x);let b=yo({inputs:{real:g,imag:x},backend:e});i.push(b);let C=pe({inputs:{x:b},backend:e,attrs:{shape:r.shape}});return i.forEach(S=>e.disposeData(S.dataId)),C}function Que(r){let{inputs:t,backend:e}=r,{input:o}=t;return Lx(o,!1,e)}var eW={kernelName:Wi,backendName:\"webgpu\",kernelFunc:Que};var Bx=class{constructor(t){this.outputShape=[],this.variableNames=[\"x\"],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=\"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 tW={kernelName:wn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new Bx(e.shape);return o.runWebGPUProgram(n,[e],e.dtype)}};var Zue=ye({opType:Z.FLOOR,cpuKernelImpl:mz}),rW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:Zue};var Jue=et({opType:fe.FLOOR_DIV,cpuKernelImpl:dz,dtype:\"int32\"}),oW={kernelName:In,backendName:\"webgpu\",kernelFunc:Jue};var zx=class{constructor(t,e,o=!1){this.pixelsOpType=Ii.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[e,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let t=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 = ${t};\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 nW={kernelName:Mu,backendName:\"webgpu\",kernelFunc:epe},ol,i0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function epe(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{numChannels:s}=o;if(n==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!=\"undefined\"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!=\"undefined\"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!=\"undefined\"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],d=!1,f=a||i;if(u||p||f){let b;if(d)b=e.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(ol==null||L!==i0)&&(i0=L,ol=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:i0})),ol.canvas.width=c,ol.canvas.height=l,ol.drawImage(n,0,0,c,l),n=ol.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,O=\"rgba8unorm\",M=e.textureManager.acquireTexture(m[1],m[0],O,P);e.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]}],E=e.makeTensorInfo([l,c],\"int32\"),R=e.tensorMap.get(E.dataId);R.resource=b;let D=e.runWebGPUProgram(k,[E],\"int32\",_);return e.disposeData(E.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 sW={kernelName:vn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=t,u=e,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 tpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var aW={kernelName:vo,backendName:\"webgpu\",kernelFunc:tpe};function rpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 tl(h,x,m,b),C.push({type:\"int32\",data:[S.virtualWidth]})):(S=new rl(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,\"),e.runWebGPUProgram(S,g,\"float32\",C)}var iW={kernelName:ko,backendName:\"webgpu\",kernelFunc:rpe};var Wx=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],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=`gathernd_${t}`,this.sliceDim=t,this.uniforms=`sliceDim : i32, strides : ${ht(t)},`}getUserCode(){let t;return this.sliceDim>1?t=\"uniforms.strides[j]\":t=\"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 = ${t};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function ope(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=e.readSync(n.dataId),C=e.bufferSync(o),S=fz(b,C,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=e.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:p}});return e.disposeData(m.dataId),e.disposeData(d.dataId),e.disposeData(g.dataId),x}var uW={kernelName:kn,backendName:\"webgpu\",kernelFunc:ope};var Ux=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.slice(),this.aShape=t,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let t=npe(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(${t}));\n }\n }\n `}};function npe(r){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],e=[];for(let o=0;oe.disposeData(D.dataId)),e.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=e.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeData(b.dataId)),x}var pW={kernelName:aa,backendName:\"webgpu\",kernelFunc:u0};var spe=et({opType:fe.GREATER,cpuKernelImpl:xz,dtype:\"bool\"}),cW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:spe};var ape=et({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:gz}),lW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:ape};function ipe(r){let{inputs:t,backend:e}=r,{input:o}=t;return Lx(o,!0,e)}var mW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:ipe};var upe=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),dW={kernelName:_n,backendName:\"webgpu\",kernelFunc:upe};var ppe=ye({opType:Z.IS_INF,dtype:\"bool\"}),fW={kernelName:$n,backendName:\"webgpu\",kernelFunc:ppe};var cpe=ye({opType:Z.IS_NAN,dtype:\"bool\"}),hW={kernelName:En,backendName:\"webgpu\",kernelFunc:cpe};function lpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return e.runWebGPUProgram(i,[n],\"float32\",a)}var gW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:lpe};var mpe=et({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:bz}),xW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:mpe};var dpe=et({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:yz}),yW={kernelName:An,backendName:\"webgpu\",kernelFunc:dpe};var Gx=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : 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.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 fpe(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=(n-o)/(s-1),i=new Gx(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return t.runWebGPUProgram(i,[],\"float32\",p)}var bW={kernelName:Fn,backendName:\"webgpu\",kernelFunc:fpe};var hpe=ye({opType:Z.LOG,cpuKernelImpl:Cz}),CW={kernelName:Pn,backendName:\"webgpu\",kernelFunc:hpe};var gpe=ye({opType:Z.LOG1P}),wW={kernelName:On,backendName:\"webgpu\",kernelFunc:gpe};var xpe=et({opType:fe.LOGICAL_AND,dtype:\"bool\"}),SW={kernelName:Mn,backendName:\"webgpu\",kernelFunc:xpe};var ype=ye({opType:Z.LOGICAL_NOT}),IW={kernelName:Ln,backendName:\"webgpu\",kernelFunc:ype};var bpe=et({opType:fe.LOGICAL_OR}),vW={kernelName:Bn,backendName:\"webgpu\",kernelFunc:bpe};var kW=`\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(t){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=t,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 ${kW}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},Kx=class{constructor(t,e){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(e<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${e}`),this.outputShape=t,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 ${kW}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function Cpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGPUProgram(u,[n],n.dtype,c)}var NW={kernelName:zn,backendName:\"webgpu\",kernelFunc:Cpe};var qx=class{constructor(t){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=t,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 wpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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 e.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var TW={kernelName:Qa,backendName:\"webgpu\",kernelFunc:wpe};var Spe=et({opType:fe.MAX,cpuKernelImpl:Sz}),_W={kernelName:Wn,backendName:\"webgpu\",kernelFunc:Spe};function Ipe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return ax(n,c,\"max\",e)}var $W={kernelName:Un,backendName:\"webgpu\",kernelFunc:Ipe};function vpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 _u(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var EW={kernelName:ia,backendName:\"webgpu\",kernelFunc:vpe};var jx=class{constructor(t){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=t.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(t){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=t.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 kpe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 _u(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=e.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=e.runWebGPUProgram(g,[n,h],a.dtype,f);return e.disposeData(h.dataId),x}var RW={kernelName:Ki,backendName:\"webgpu\",kernelFunc:kpe};function Npe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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 za(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=e.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=e.runWebGPUProgram(g,[n,h],i.dtype,f);return e.disposeData(h.dataId),x}var DW={kernelName:Hi,backendName:\"webgpu\",kernelFunc:Npe};function Tpe(r){let{inputs:t,backend:e,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=t;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 za(c,\"max\",!1),d=e.runWebGPUProgram(m,[p],p.dtype,l);m=new za(c,\"max\",!0,!0,i);let f=e.runWebGPUProgram(m,[p],\"int32\",l);return[d,f]}var AW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Tpe};function _pe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,\"min\",e)}var FW={kernelName:Hn,backendName:\"webgpu\",kernelFunc:_pe};var $pe=et({opType:fe.MIN,cpuKernelImpl:Iz}),PW={kernelName:Kn,backendName:\"webgpu\",kernelFunc:$pe};var Yx=class{constructor(t,e,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((n,s)=>n[0]+t[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=t,e.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let t=this.xShape.length,e=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(\",\"),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${t>1?`[${c}]`:\"\"}`).join(\",\"),n=t===1?\"start\":\"start[i]\",s=t===1?\"end\":\"end[i]\",a=t===1?\"outC\":\"outC[i]\",i=ht(t),p=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${e});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${t}; 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 OW={kernelName:qn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=e,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 Epe=et({opType:fe.MOD}),MW={kernelName:jn,backendName:\"webgpu\",kernelFunc:Epe};var Qx=class{constructor(t,e){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],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(t){this.variableNames=[\"logits\"],this.outputShape=t,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 p0(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=pe({inputs:{x:n},backend:e,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=e.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n.shape}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var LW={kernelName:vs,backendName:\"webgpu\",kernelFunc:p0};function Rpe(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:p0({inputs:{logits:n},backend:e,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=e.runWebGPUProgram(l,[p],\"int32\",m);return i||e.disposeData(p.dataId),d}var BW={kernelName:Xn,backendName:\"webgpu\",kernelFunc:Rpe};function Dpe(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.tensorMap.get(o.dataId),[a,i]=kz(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return e.runWebGPUProgram(n,[o],o.dtype)}var zW={kernelName:pa,backendName:\"webgpu\",kernelFunc:Dpe};function Ape(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=Wt.nonMaxSuppressionV3Impl(u,c,a,i,p);return e.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var VW={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Ape};function Fpe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Wt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),e.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var WW={kernelName:Jn,backendName:\"webgpu\",kernelFunc:Fpe};var Jx=class{constructor(t,e){this.variableNames=[\"x\"],this.uniforms=\"onValue : f32, offValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],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 Ppe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{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:e,attrs:{shape:[u]}}),m=[{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}],d=e.runWebGPUProgram(c,[l],s,m);e.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:e,attrs:{shape:f}});return e.disposeData(d.dataId),h}var UW={kernelName:es,backendName:\"webgpu\",kernelFunc:Ppe};function bm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"complex64\"){let n=Ni({inputs:{input:o},backend:e}),s=bm({inputs:{x:n},backend:e}),a=Mp({inputs:{input:o},backend:e}),i=bm({inputs:{x:a},backend:e}),p=yo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return kt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:e})}var GW={kernelName:Sa,backendName:\"webgpu\",kernelFunc:bm};function HW(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=Ni({inputs:{input:o},backend:e}),s=HW({inputs:{x:n},backend:e}),a=Mp({inputs:{input:o},backend:e}),i=bm({inputs:{x:a},backend:e}),p=yo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return kt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var KW={kernelName:ca,backendName:\"webgpu\",kernelFunc:HW};function Ope(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Mx({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Mx({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=n0({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var qW={kernelName:la,backendName:\"webgpu\",kernelFunc:Ope};function c0(r,t=!1){let e=r.length,o=ht(e),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:\"\"}`).join(\",\"),a=e>1?`${o}(${n})`:`${n}`,i=e>1?`${o}(${s})`:`${s}`,p=e>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=e>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",c=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${t?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${c}));\n }\n `}var ey=class{constructor(t,e){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((o,n)=>o[0]+t[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),e.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=t,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${c0(this.xShape)}\n }\n }\n `}};var Mpe=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Ft({inputs:{x:n},backend:e});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return kt({backend:e,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 e.runWebGPUProgram(p,[n],n.dtype,i)},jW={kernelName:ts,backendName:\"webgpu\",kernelFunc:Mpe};var Lpe=et({opType:fe.POW}),XW={kernelName:rs,backendName:\"webgpu\",kernelFunc:Lpe};function Bpe(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=new ki(fe.PRELU,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],\"float32\")}var YW={kernelName:os,backendName:\"webgpu\",kernelFunc:Bpe};function zpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,\"prod\",e)}var QW={kernelName:ns,backendName:\"webgpu\",kernelFunc:zpe};var Vpe=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=_z(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},ZW={kernelName:ma,backendName:\"webgpu\",kernelFunc:Vpe};var Wpe=et({opType:fe.DIV}),JW={kernelName:hn,backendName:\"webgpu\",kernelFunc:Wpe};var Upe=ye({opType:Z.RECIPROCAL}),eU={kernelName:ss,backendName:\"webgpu\",kernelFunc:Upe};var Gpe=ye({opType:Z.RELU}),tU={kernelName:as,backendName:\"webgpu\",kernelFunc:Gpe};var Hpe=ye({opType:Z.RELU6}),rU={kernelName:ps,backendName:\"webgpu\",kernelFunc:Hpe};var ty=class{constructor(t,e,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[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 Kpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGPUProgram(f,[n],\"float32\",d)}var oU={kernelName:us,backendName:\"webgpu\",kernelFunc:Kpe};var ry=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeBilinearBackprop_${e}`}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 qpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 e.runWebGPUProgram(C,[s],s.dtype,S)}var nU={kernelName:ei,backendName:\"webgpu\",kernelFunc:qpe};var oy=class{constructor(t,e,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let t;return this.halfPixelCenters?t=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":t=\"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 = ${t};\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 jpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGPUProgram(f,[n],n.dtype,d)}var sU={kernelName:is,backendName:\"webgpu\",kernelFunc:jpe};var ny=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeNearestNeigborBackprop_${e}`}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 Xpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 e.runWebGPUProgram(C,[s],s.dtype,S)}var aU={kernelName:Ja,backendName:\"webgpu\",kernelFunc:Xpe};var sy=class{constructor(t){this.variableNames=[\"x\"],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.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 Ype(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length;if(a===0)return Ft({inputs:{x:n},backend:e});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:e,attrs:{shape:p}}),d=new sy(p),f=e.runWebGPUProgram(d,[m],m.dtype,l);e.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:e,attrs:{shape:i}});return e.disposeData(f.dataId),h}var iU={kernelName:cs,backendName:\"webgpu\",kernelFunc:Ype};var ay=class{constructor(t,e){this.outputShape=[],this.variableNames=[\"x\"],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.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=t,typeof e==\"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 uU={kernelName:As,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 Qpe=ye({opType:Z.ROUND}),pU={kernelName:ls,backendName:\"webgpu\",kernelFunc:Qpe};var Zpe=ye({opType:Z.RSQRT,cpuKernelImpl:$z}),cU={kernelName:ms,backendName:\"webgpu\",kernelFunc:Zpe};var Va=class{constructor(t,e,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(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.sliceDimGreaterThanOne=e>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=ht(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let t=\"\";this.indicesRank===1?t=\"coords[0]\":this.indicesRank===2&&(t=\"coords[0], j\");let e=`getIndices(${t})`,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(${e}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${Nu(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 Jpe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=f.dtype,g=kt({backend:e,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 Va(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=e.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:e,attrs:{shape:a}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(S.dataId),k}var lU={kernelName:ds,backendName:\"webgpu\",kernelFunc:Jpe};var iy=class{constructor(t,e){this.outputShape=[],this.variableNames=[\"sortedSequence\",\"values\"],this.uniforms=\"numInputs : i32,\",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.side=e,this.shaderKey=`search_sorted_${e}`}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 ece(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new iy([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return e.runWebGPUProgram(i,[n,s],\"int32\",p)}var mU={kernelName:hs,backendName:\"webgpu\",kernelFunc:ece};var uy=class{constructor(t,e,o){this.variableNames=[\"c\",\"a\",\"b\"],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.cRank=t,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let t,e;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)e=\"resRC\",t=\"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(${e}));\n } else {\n setOutputAtIndex(index, getB(${e}));\n }\n }\n }\n `}};function tce(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=new uy(o.shape.length,n.shape,n.shape.length);return e.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var dU={kernelName:fa,backendName:\"webgpu\",kernelFunc:tce};var rce=ye({opType:Z.SELU}),fU={kernelName:gs,backendName:\"webgpu\",kernelFunc:rce};var oce=ye({opType:Z.SIGMOID}),hU={kernelName:Cs,backendName:\"webgpu\",kernelFunc:oce};var nce=ye({opType:Z.SIGN}),gU={kernelName:bs,backendName:\"webgpu\",kernelFunc:nce};var sce=ye({opType:Z.SIN}),xU={kernelName:xs,backendName:\"webgpu\",kernelFunc:sce};var ace=ye({opType:Z.SINH}),yU={kernelName:ys,backendName:\"webgpu\",kernelFunc:ace};var ice=ye({opType:Z.SOFTPLUS}),bU={kernelName:ws,backendName:\"webgpu\",kernelFunc:ice};var py=class{constructor(t,e,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 t=ht(this.outputShape.length),e=Zv(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(${t}(${e}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${c0(this.xShape,!0)}\n }\n }\n `}};var uce=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeData(g.dataId),x},CU={kernelName:ga,backendName:\"webgpu\",kernelFunc:uce};var cy=class{constructor(t,e,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.type=o,this.dispatchLayout=X([e]),this.dispatch=H(this.dispatchLayout,[e],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(t,e){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[t],this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,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(t,e){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.type=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,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,t,e,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(t.shape),u=n.readSync(e.dataId),l=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=kt({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,t,e],i,g,h);if(o)return x;let b=kt({backend:n,attrs:{shape:[l],value:0,dtype:\"int32\"}});m=new ly(l,e.shape);let C=n.runWebGPUProgram(m,[e],\"int32\",null,b),S=kt({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 pce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return dy(o,n,s,!1,e)}var wU={kernelName:ya,backendName:\"webgpu\",kernelFunc:pce};function cce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return dy(o,n,s,!0,e)}var SU={kernelName:ba,backendName:\"webgpu\",kernelFunc:cce};var fy=class{constructor(t,e){this.variableNames=[\"A\"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${t}aShape)`;let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=e.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Oz(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return e.runWebGPUProgram(a,[n],n.dtype)}var IU={kernelName:po,backendName:\"webgpu\",kernelFunc:Cm};function mce(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),D=e.bufferSync(s),P=y.decodeString(e.readSync(a.dataId)[0]),O=Ez(R,D,i,m,c,u,p,l,P,d);return e.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:e,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:e,attrs:{shape:[u,c]}}):Ft({inputs:{x:s},backend:e}),x=g.dtype,b=e.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:e,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({inputs:{x:C},backend:e,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 Va([u,c],p,h.shape.length,g.shape.length,l,f,x,d);e.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new Va([u,c],p,h.shape.length,b.shape.length,l,f,x,d);e.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new Va([u,c],p,h.shape.length,g.shape.length,l,f,x);e.runWebGPUProgram(R,[g,h],x,_,S)}}let E=pe({inputs:{x:S},backend:e,attrs:{shape:i}});return e.disposeData(h.dataId),e.disposeData(g.dataId),e.disposeData(C.dataId),e.disposeData(b.dataId),e.disposeData(S.dataId),E}var vU={kernelName:ks,backendName:\"webgpu\",kernelFunc:mce};function dce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var kU={kernelName:xa,backendName:\"webgpu\",kernelFunc:dce};var fce=ye({opType:Z.SQRT}),NU={kernelName:Ss,backendName:\"webgpu\",kernelFunc:fce};var TU={kernelName:Xi,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t,n=new Jr(e.shape,Z.SQUARE);return o.runWebGPUProgram(n,[e],e.dtype)}};var hce=et({opType:fe.SQUARED_DIFFERENCE}),_U={kernelName:Ns,backendName:\"webgpu\",kernelFunc:hce};function gce({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[t.alpha]}];return e.runWebGPUProgram(n,[o],o.dtype,s)}var $U={kernelName:So,backendName:\"webgpu\",kernelFunc:gce};var hy=class{constructor(t){this.variableNames=[\"x\"],this.workPerThread=1,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.workPerThread,1,1]);let e=ht(this.outputShape.length);this.uniforms=`begin : ${e}, strides : ${e}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let t=this.outputShape.length,e=\"\";if(t===1)e=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;e=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(${e}));\n }\n }\n `}};function xce(r){let{inputs:t,backend:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({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 _=ct.computeOutShape(b,C,S),E=Hs({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=pe({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else if(e.shouldExecuteOnCPU([n])){let E=e.readSync(n.dataId),R=me(n.shape,n.dtype,E),D=Az(d,R,S,b);k=e.makeTensorInfo(f,n.dtype,D.values)}else{let E=new hy(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=e.runWebGPUProgram(E,[n],n.dtype,R);k=pe({inputs:{x:D},backend:e,attrs:{shape:f}}),e.disposeData(D.dataId)}return k}var EU={kernelName:Ts,backendName:\"webgpu\",kernelFunc:xce};function yce(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=Fz(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var RU={kernelName:Ca,backendName:\"webgpu\",kernelFunc:yce};var bce=et({opType:fe.SUB,cpuKernelImpl:Pz,supportsComplex:!0}),DU={kernelName:_s,backendName:\"webgpu\",kernelFunc:bce};var Cce=ye({opType:Z.TAN}),AU={kernelName:$s,backendName:\"webgpu\",kernelFunc:Cce};var wce=ye({opType:Z.TANH}),FU={kernelName:Es,backendName:\"webgpu\",kernelFunc:wce};function Sce(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:e,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:e,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:e,attrs:{reps:Array(m.length).fill(1)}}),b=new Va([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=e.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:e,attrs:{shape:n.shape}});return d.forEach(E=>e.disposeData(E.dataId)),_}var PU={kernelName:fs,backendName:\"webgpu\",kernelFunc:Sce};var gy=class{constructor(t){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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(t){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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 nl(r,t){t!==null&&r.disposeData(t.dataId)}function OU(r){let t=1;for(;tf===null?[l,l]:[l,f],g=(k,_,E)=>{let R=h(),D=new gy(E),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=e.runWebGPUProgram(D,R,\"int32\",O),nl(e,M)};for(let k=1;k=1;E/=2)g(_,E,[c,d])}for(let k=d;k>m;k/=2){let _=h(),E=new xy([c,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],P=f;f=e.runWebGPUProgram(E,_,\"int32\",D),nl(e,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:e,attrs:{begin:0,size:[c,s]}}),nl(e,x);let b=u0({inputs:{x:l,indices:f},backend:e,attrs:{axis:1,batchDims:1}});nl(e,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:e}),nl(e,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:e}),nl(e,S),[b,f]}var MU={kernelName:Rs,backendName:\"webgpu\",kernelFunc:Ice};var yy=class{constructor(t){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : 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.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 vce(r){let{inputs:t,backend:e,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 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 e.runWebGPUProgram(x,[n,s],\"float32\",S)}var LU={kernelName:Ds,backendName:\"webgpu\",kernelFunc:vce};function kce(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeData(h.dataId)),f}var BU={kernelName:wa,backendName:\"webgpu\",kernelFunc:kce};var by=class{constructor(t,e,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,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 Nce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=yr({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=kt({backend:e,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=e.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:e,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let E=w.getUndoAxesPermutation(c);_=yr({inputs:{x:_},backend:e,attrs:{perm:E}})}return p.forEach(E=>e.disposeData(E.dataId)),_}var zU={kernelName:Ji,backendName:\"webgpu\",kernelFunc:Nce};var Tce=[rz,Bz,zz,Vz,Wz,Uz,Hz,Kz,qz,jz,Xz,Yz,Qz,Zz,Jz,rV,oV,nV,sV,aV,uV,pV,cV,fV,hV,gV,nz,yV,CV,wV,SV,IV,vV,kV,NV,TV,_V,$V,DV,AV,FV,PV,MV,LV,OV,BV,zV,VV,WV,UV,KV,qV,jV,XV,YV,QV,ZV,JV,eW,ez,tW,nW,rW,oW,sW,aW,iW,uW,pW,cW,lW,oz,mW,bV,dW,fW,hW,gW,xW,yW,bW,wW,CW,SW,IW,vW,NW,TW,eV,_W,$W,DW,EW,RW,AW,tV,FW,PW,OW,MW,BW,GV,zW,VW,WW,lV,UW,KW,qW,jW,XW,YW,QW,ZW,mV,JW,eU,tU,rU,tz,oU,nU,sU,aU,iU,uU,pU,cU,lU,mU,dU,fU,hU,gU,xU,yU,iV,$U,EU,RU,LW,bU,CU,wU,SU,vU,kU,NU,TU,_U,DU,HV,AU,FU,PU,IU,MU,LU,Gz,BU,zU,GW];for(let r of Tce)ri(r);var VU=\"4.11.0\",_ce=\"4.11.0\",$ce=\"4.11.0\",Ece=\"4.11.0\",Rce=\"4.11.0\",Dce=\"4.11.0\",Ace={tfjs:VU,\"tfjs-core\":VU,\"tfjs-converter\":_ce,\"tfjs-backend-cpu\":$ce,\"tfjs-backend-webgl\":Ece,\"tfjs-backend-wasm\":Rce,\"tfjs-backend-webgpu\":Dce};export{Xs as Abs,Wo as Acos,Uo as Acosh,np as AdadeltaOptimizer,sp as AdagradOptimizer,ap as AdamOptimizer,ip as AdamaxOptimizer,uo as Add,Go as AddN,Ho as All,Ko as Any,Ys as ArgMax,Qs as ArgMin,qo as Asin,jo as Asinh,Xo as Atan,Qo as Atan2,Yo as Atanh,Zo as AvgPool,Zs as AvgPool3D,Ai as AvgPool3DGrad,Di as AvgPoolGrad,pm as BackendWasm,Jo as BatchMatMul,Js as BatchToSpaceND,en as Bincount,ja as BitwiseAnd,ea as BroadcastArgs,Bce as BroadcastTo,bo as Cast,tn as Ceil,Co as ClipByValue,Fi as Complex,Pi as ComplexAbs,ta as Concat,rn as Conv2D,Oi as Conv2DBackpropFilter,on as Conv2DBackpropInput,nn as Conv3D,Xa as Conv3DBackpropFilterV2,sn as Conv3DBackpropInputV2,an as Cos,un as Cosh,ln as CropAndResize,pn as Cumprod,cn as Cumsum,zo as DataStorage,ra as DenseBincount,mn as DepthToSpace,dn as DepthwiseConv2dNative,Mi as DepthwiseConv2dNativeBackpropFilter,Li as DepthwiseConv2dNativeBackpropInput,oa as Diag,fn as Dilation2D,zi as Dilation2DBackpropFilter,Bi as Dilation2DBackpropInput,Pu as Draw,nw as ENV,Vi as Einsum,gn as Elu,Ya as EluGrad,hl as Environment,yn as Equal,xn as Erf,bn as Exp,na as ExpandDims,Cn as Expm1,Wi as FFT,sa as Fill,wn as FlipLeftRight,Sn as Floor,In as FloorDiv,Mu as FromPixels,vn as FusedBatchNorm,vo as FusedConv2D,ko as FusedDepthwiseConv2D,kp as GPGPUContext,kn as GatherNd,aa as GatherV2,Bl as GraphModel,Nn as Greater,Tn as GreaterEqual,Ui as IFFT,wo as Identity,Gi as Imag,_n as IsFinite,$n as IsInf,En as IsNan,ao as KernelBackend,zn as LRN,Qa as LRNGrad,Rn as LeakyRelu,Dn as Less,An as LessEqual,Fn as LinSpace,Pn as Log,On as Log1p,zce as LogSoftmax,Mn as LogicalAnd,Ln as LogicalNot,Bn as LogicalOr,$0 as LogicalXor,Vce as LowerBound,xu as MathBackendCPU,wu as MathBackendWebGL,Wce as MatrixBandPart,Vn as Max,Un as MaxPool,ia as MaxPool3D,Ki as MaxPool3DGrad,Hi as MaxPoolGrad,ua as MaxPoolWithArgmax,Wn as Maximum,Gn as Mean,Hn as Min,Kn as Minimum,qn as MirrorPad,jn as Mod,up as MomentumOptimizer,Xn as Multinomial,Yn as Multiply,pa as Neg,Zn as NonMaxSuppressionV3,Za as NonMaxSuppressionV4,Jn as NonMaxSuppressionV5,Qn as NotEqual,kw as OP_SCOPE_SUFFIX,es as OneHot,ca as OnesLike,Nr as Optimizer,Pl as OptimizerConstructors,la as Pack,ts as PadV2,Uce as Pool,rs as Pow,os as Prelu,ns as Prod,pp as RMSPropOptimizer,Qp as RaggedGather,Zp as RaggedRange,Jp as RaggedTensorToTensor,ma as Range,hw as Rank,qi as Real,hn as RealDiv,ss as Reciprocal,Rt as Reduction,as as Relu,ps as Relu6,da as Reshape,us as ResizeBilinear,ei as ResizeBilinearGrad,is as ResizeNearestNeighbor,Ja as ResizeNearestNeighborGrad,cs as Reverse,As as RotateWithOffset,ls as Round,ms as Rsqrt,mi as SGDOptimizer,ds as ScatterNd,hs as SearchSorted,fa as Select,gs as Selu,Cs as Sigmoid,bs as Sign,xs as Sin,ys as Sinh,ha as Slice,vs as Softmax,ws as Softplus,ga as SpaceToBatchND,ji as SparseFillEmptyRows,ti as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,ks as SparseToDense,xa as SplitV,Ss as Sqrt,Xi as Square,Ns as SquaredDifference,Ou as StaticRegexReplace,So as Step,Ts as StridedSlice,Ca as StringNGrams,Yi as StringSplit,Qi as StringToHashBucketFast,_s as Sub,Is as Sum,$s as Tan,Es as Tanh,ut as Tensor,tt as TensorBuffer,fs as TensorScatterUpdate,po as Tile,Rs as TopK,Ds as Transform,co as Transpose,Zi as Unique,wa as Unpack,Ji as UnsortedSegmentSum,Gce as UpperBound,oi as Variable,Tu as WebGPUBackend,Sa as ZerosLike,Io as _FusedMatMul,Jt as abs,kk as acos,Nk as acosh,Ce as add,Tk as addN,_k as all,$k as any,Ek as argMax,Rk as argMin,Dk as asin,Ak as asinh,Fk as atan,Pk as atan2,Ok as atanh,fd as avgPool,Bk as avgPool3d,vde as backend,w as backend_util,zk as basicLSTMCell,au as batchNorm,Wk as batchNorm2d,Uk as batchNorm3d,Gk as batchNorm4d,hd as batchToSpaceND,gd as bincount,Hk as bitwiseAnd,E6 as booleanMaskAsync,Kk as broadcastArgs,iu as broadcastTo,Ir as broadcast_util,oT as browser,me as buffer,We as cast,qk as ceil,jk as clipByValue,Ur as clone,Er as complex,bt as concat,Xk as concat1d,Yk as concat2d,Qk as concat3d,Zk as concat4d,Jk as conv1d,uu as conv2d,e2 as conv2dTranspose,t2 as conv3d,o2 as conv3dTranspose,Zce as copyRegisteredKernels,n2 as cos,s2 as cosh,Rl as cosineWindow,a2 as cumprod,i2 as cumsum,vr as customGrad,u2 as denseBincount,Pw as deprecationWarn,p2 as depthToSpace,lc as depthwiseConv2d,A5 as deregisterOp,ou as device_util,c2 as diag,l2 as dilation2d,dde as disableDeprecationWarnings,Mt as dispose,fde as disposeVariables,je as div,d2 as divNoNan,f2 as dot,W6 as dropout,pu as einsum,Cd as elu,mde as enableDebugMode,lde as enableProdMode,Qw as enclosingPowerOfTwo,pr as engine,h2 as ensureShape,A as env,bd as equal,g2 as erf,b2 as euclideanNorm,$o as exp,Ms as expandDims,C2 as expm1,wd as eye,fc as fft,Ea as fill,Sde as findBackend,Ide as findBackendFactory,Sd as floor,dd as floorDiv,MD as forceHalfFloat,Zw as fused,Id as gather,z6 as gatherND,af as gather_util,Cde as getBackend,iw as getGradient,tc as getKernel,Ym as getKernelsForBackend,Zse as getThreadsCount,cv as gpgpu_util,AK as grad,FK as grads,qu as greater,vd as greaterEqual,Ju as ifft,lu as imag,Kj as image,G6 as inTopKAsync,fi as io,Kd as irfft,w2 as isFinite,S2 as isInf,I2 as isNaN,Rr as keep,Wt as kernel_impls,kd as leakyRelu,_l as less,mc as lessEqual,qj as linalg,v2 as linspace,$8 as loadGraphModel,E8 as loadGraphModelSync,k2 as localResponseNormalization,pi as log,Nd as log1p,N2 as logSigmoid,T2 as logSoftmax,$d as logSumExp,ju as logicalAnd,Ed as logicalNot,Rd as logicalOr,_2 as logicalXor,jj as losses,$2 as lowerBound,Ze as matMul,JN as math,Ra as max,Ad as maxPool,E2 as maxPool3d,R2 as maxPoolWithArgmax,Fd as maximum,Xu as mean,hde as memory,D2 as meshgrid,Tl as min,Yu as minimum,A2 as mirrorPad,F2 as mod,P2 as moments,A6 as movingAverage,se as mul,O2 as multiRNNCell,M2 as multinomial,cr as neg,pS as nextFrame,Ku as norm,Pd as notEqual,El as oneHot,Da as ones,L2 as onesLike,N as op,B2 as outerProduct,Aa as pad,z2 as pad1d,V2 as pad2d,W2 as pad3d,U2 as pad4d,G2 as pool,ui as pow,Md as prelu,md as print,H2 as prod,gde as profile,K2 as raggedGather,q2 as raggedRange,j2 as raggedTensorToTensor,X2 as rand,g1 as randomGamma,Ud as randomNormal,x1 as randomStandardNormal,dc as randomUniform,y1 as randomUniformInt,mu as range,bde as ready,ci as real,b1 as reciprocal,su as registerBackend,Xce as registerGradient,ri as registerKernel,D5 as registerOp,du as relu,Gd as relu6,wde as removeBackend,W as reshape,mo as reverse,C1 as reverse1d,w1 as reverse2d,S1 as reverse3d,I1 as reverse4d,hc as rfft,Hd as round,v1 as rsqrt,ke as scalar,P6 as scatterND,hu as scatter_util,$l as searchSorted,k1 as selu,N1 as separableConv2d,WN as serialization,yde as setBackend,kde as setPlatform,Qse as setThreadsCount,Xse as setWasmPath,Yse as setWasmPaths,vI as setWebGLContext,T1 as setdiff1dAsync,Tc as shared,$a as sigmoid,_1 as sign,Hj as signal,$1 as sin,E1 as sinh,Xe as slice,R1 as slice1d,D1 as slice2d,A1 as slice3d,F1 as slice4d,ct as slice_util,P1 as softmax,_d as softplus,Od as spaceToBatchND,Xj as sparse,L6 as sparseToDense,Gj as spectral,li as split,Dr as sqrt,er as square,qd as squaredDifference,gc as squeeze,kr as stack,jd as step,O1 as stridedSlice,Yj as string,Te as sub,ot as sum,ni as sumOutType,M1 as tan,Nl as tanh,ur as tensor,tr as tensor1d,fu as tensor2d,Xd as tensor3d,L1 as tensor4d,B1 as tensor5d,z1 as tensor6d,W1 as tensorScatterUpdate,ek as tensor_util,h1 as test_util,De as tidy,cu as tile,xde as time,U1 as topk,TGe as train,yc as transpose,G1 as truncatedNormal,H1 as unique,Qce as unregisterGradient,Yce as unregisterKernel,K1 as unsortedSegmentSum,fo as unstack,dt as upcastType,q1 as upperBound,y as util,PK as valueAndGrad,OK as valueAndGrads,j1 as variable,zw as variableGrads,Ace as version,D8 as version_converter,_X as version_core,cY as version_cpu,Jse as version_wasm,s9 as version_webgl,Cat as webgl,Ac as webgl_util,Yv as webgpu_util,lo as where,Qd as whereAsync,Gr as zeros,Ht 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 /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-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';\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.1.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.19.1\",\n \"@html-eslint/parser\": \"^0.19.1\",\n \"@microsoft/api-extractor\": \"^7.37.0\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.11.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.11.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.11.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.11.0\",\n \"@tensorflow/tfjs-converter\": \"^4.11.0\",\n \"@tensorflow/tfjs-core\": \"^4.11.0\",\n \"@tensorflow/tfjs-data\": \"^4.11.0\",\n \"@tensorflow/tfjs-layers\": \"^4.11.0\",\n \"@tensorflow/tfjs-node\": \"^4.11.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.11.0\",\n \"@types/node\": \"^20.6.2\",\n \"@types/offscreencanvas\": \"^2019.7.1\",\n \"@typescript-eslint/eslint-plugin\": \"^6.7.0\",\n \"@typescript-eslint/parser\": \"^6.7.0\",\n \"@vladmandic/build\": \"^0.9.2\",\n \"@vladmandic/pilogger\": \"^0.4.8\",\n \"@vladmandic/tfjs\": \"github:vladmandic/tfjs\",\n \"canvas\": \"^2.11.2\",\n \"esbuild\": \"^0.19.3\",\n \"eslint\": \"8.49.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^7.1.0\",\n \"eslint-plugin-import\": \"^2.28.1\",\n \"eslint-plugin-json\": \"^3.1.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-node\": \"^11.1.0\",\n \"eslint-plugin-promise\": \"^6.1.1\",\n \"rimraf\": \"^5.0.1\",\n \"tslib\": \"^2.6.2\",\n \"typedoc\": \"0.25.1\",\n \"typescript\": \"^5.1.6\"\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;\nconst faceBoxScaleFactor = 1.4;\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.tf05);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n\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['scale'] || faceBoxScaleFactor);\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 irisEnlarge = 2.3;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\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); // 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\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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,CAAC,GAAEA,OAAI,OAAKA,MAAG,GAAGA,KAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQA,EAAC,GAAEA,GAAE;AAAtD,IAA+D,KAAG,CAAC,GAAEA,OAAI;AAAC,WAAQ,KAAKA;AAAE,OAAG,GAAE,GAAE,EAAC,KAAIA,GAAE,CAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAAC,GAAEA,IAAE,GAAE,MAAI;AAAC,MAAGA,MAAG,OAAOA,MAAG,YAAU,OAAOA,MAAG;AAAW,aAAQ,KAAK,GAAGA,EAAC;AAAE,OAAC,GAAG,KAAK,GAAE,CAAC,KAAG,MAAI,KAAG,GAAG,GAAE,GAAE,EAAC,KAAI,MAAIA,GAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAGA,IAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAO;AAAC;AAAE,IAAI,KAAG,CAAC,GAAEA,IAAE,OAAK,IAAE,KAAG,OAAK,GAAG,GAAG,CAAC,CAAC,IAAE,CAAC,GAAE,GAAGA,MAAG,CAAC,KAAG,CAAC,EAAE,aAAW,GAAG,GAAE,WAAU,EAAC,OAAM,GAAE,YAAW,KAAE,CAAC,IAAE,GAAE,CAAC;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,GAAE,KAAI,IAAG,GAAE,KAAI,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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,QAAkB;AAAA;AAAA,EACjB;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;AAAA,EAC/E;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC1C;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA;AAAA,EAChC;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACtD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAChD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAC7C;AAEO,IAAM,QAAkB,CAAC,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,GAAG;AAE7K,IAAM,OAAiB,CAAC,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG;AAErD,IAAM,OAAO,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AAEtC,IAAM,OAAO,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AAEtC,IAAM,MAAM,KAAK,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AAO3C,SAAS,qBAAqB,aAAwB;AACpD,QAAM,UAAU,YAAY,IAAI,CAAC,eAAe,WAAW,CAAC,CAAC;AAC7D,UAAQ,KAAK,YAAY,YAAY,SAAS,CAAC,EAAE,CAAC,CAAC;AACnD,SAAO;AACT;AAEO,IAAM,YAAuB;AAAA,EAClC,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAC3N,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAC7N;AAEO,IAAM,eAA0B,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAE/N,IAAM,mBAA8B,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEnI,IAAM,gBAA2B,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEhF,IAAM,gBAA2B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAE1N,IAAM,oBAA+B,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAEvH,IAAM,iBAA4B,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEjF,IAAM,mBAA8B;AAAA,EACzC,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACpE,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACrE,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACrE,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACrE,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACjE,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAChE;AAEO,IAAM,mBAAmB;AAAA,EAC9B,MAAM,qBAAqB,SAAS;AAAA,EACpC,SAAS,qBAAqB,YAAY;AAAA,EAC1C,aAAa,qBAAqB,gBAAgB;AAAA,EAClD,UAAU,qBAAqB,aAAa;AAAA,EAC5C,UAAU,qBAAqB,aAAa;AAAA,EAC5C,cAAc,qBAAqB,iBAAiB;AAAA,EACpD,WAAW,qBAAqB,cAAc;AAAA,EAC9C,UAAU,qBAAqB,gBAAgB;AACjD;;;AC/sBA,IAAM,mBAA8B;AAAA,EAClC,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAC3N,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAC7N;AAEA,IAAM,uBAAkC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEvO,IAAM,2BAAsC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAE3I,IAAM,wBAAmC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAExF,IAAM,wBAAmC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAElO,IAAM,4BAAuC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAE/H,IAAM,yBAAoC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AAEzF,IAAM,wBAAmC;AAAA,EACvC,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EACpN,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAAA,EAAG,CAAC,IAAI,GAAG;AAAA,EAAG,CAAC,KAAK,EAAE;AAC5M;AAmJA,SAASC,sBAAqB,aAAwB;AACpD,QAAM,UAAU,YAAY,IAAI,CAAC,eAAe,WAAW,CAAC,CAAC;AAC7D,UAAQ,KAAK,YAAY,YAAY,SAAS,CAAC,EAAE,CAAC,CAAC;AACnD,SAAO;AACT;AAEO,IAAM,2CAA2C;AAAA,EACtD,MAAMA,sBAAqB,gBAAgB;AAAA,EAC3C,SAASA,sBAAqB,oBAAoB;AAAA,EAClD,aAAaA,sBAAqB,wBAAwB;AAAA,EAC1D,UAAUA,sBAAqB,qBAAqB;AAAA,EACpD,UAAUA,sBAAqB,qBAAqB;AAAA,EACpD,cAAcA,sBAAqB,yBAAyB;AAAA,EAC5D,WAAWA,sBAAqB,sBAAsB;AAAA,EACtD,UAAUA,sBAAqB,qBAAqB;AACtD;AAEA,IAAM,kBAAsC,OAAO,QAAQ,wCAAwC,EAChG,IAAI,CAAC,CAAC,OAAO,OAAO,MAAM,QAAQ,IAAI,CAACC,WAAU,CAACA,QAAO,KAAK,CAAqB,CAAC,EACpF,KAAK;AAED,IAAM,gCAAgC,IAAI,IAAI,eAAe;AAQ7D,IAAM,mCAAmC;AAAA,EAC9C;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9C;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACnC;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC7C;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACpC;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC7C;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACpC;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC7C;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AACtC;AAEO,IAAM,uCAAuC;AAAA,EAClD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACrC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA;AAAA,EACnC;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EACzB;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACvC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9B;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EACrB;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACxC;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA;AACjC;AAEO,IAAM,wCAAwC;AAAA,EACnD;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACxC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACxC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACxC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACzB;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AAAA,EACxC;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA;AACrC;;;AClOA,IAAI;AAEJ,SAAS,WAAW,GAAe,KAAmE;AAVtG,cAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAA;AAWE,MAAI,CAAC,aAAa,gBAAe,kBAAa,eAAb,mBAAyB,YAAW;AAAI;AACzE,MAAI,IAAI,aAAa,WAAW,MAAM;AACtC,MAAI,QAAQ,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC;AACtC,MAAI,EAAE;AAAO,QAAI,QAAQ,GAAG,WAAW,MAAM,EAAE,KAAK;AACpD,MAAI,EAAE;AAAQ,QAAI,QAAQ,GAAG,YAAY,EAAE,MAAM;AACjD,MAAI,EAAE;AAAa,QAAI,QAAQ,GAAG,iBAAiB,MAAM,EAAE,WAAW;AACtE,MAAI,EAAE;AAAK,QAAI,QAAQ,GAAG,SAAS,EAAE,GAAG;AACxC,MAAI,EAAE;AAAU,QAAI,QAAQ,GAAG,cAAc,MAAM,EAAE,QAAQ;AAC7D,MAAI,EAAE;AAAM,QAAI,QAAQ,GAAG,UAAU,MAAM,EAAE,IAAI;AACjD,MAAI,EAAE;AAAM,QAAI,QAAQ,GAAG,UAAU,MAAM,EAAE,IAAI;AACjD,MAAI,EAAE,WAAW,EAAE,QAAQ,SAAS,GAAG;AACrC,UAAMC,WAAU,EAAE,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,MAAM,MAAM,EAAE,KAAK,MAAM,EAAE,SAAS;AACjF,QAAIA,SAAQ,SAAS;AAAG,MAAAA,SAAQ,SAAS;AACzC,QAAI,QAAQ,GAAG,cAAcA,SAAQ,KAAK,GAAG,CAAC;AAAA,EAChD;AACA,OAAIL,OAAA,OAAE,aAAF,mBAAY,UAAZ,gBAAAA,IAAmB;AAAM,QAAI,QAAQ,GAAG,UAAU,QAAQ,EAAE,SAAS,MAAM,IAAI,CAAC;AACpF,OAAI,MAAAC,MAAA,EAAE,aAAF,gBAAAA,IAAY,UAAZ,mBAAmB;AAAK,QAAI,QAAQ,GAAG,SAAS,QAAQ,EAAE,SAAS,MAAM,GAAG,CAAC;AACjF,OAAIE,OAAAD,MAAA,EAAE,aAAF,gBAAAA,IAAY,UAAZ,gBAAAC,IAAmB;AAAO,QAAI,QAAQ,GAAG,WAAW,QAAQ,EAAE,SAAS,MAAM,KAAK,CAAC;AACvF,OAAI,MAAAC,MAAA,EAAE,aAAF,gBAAAA,IAAY,SAAZ,mBAAkB;AAAS,QAAI,QAAQ,GAAG,UAAU,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;AACxF,SAAO,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,YAAY;AACjD;AAEA,SAAS,eAAe,GAAe,KAAmE;AAjC1G,cAAAJ,KAAAC;AAmCE,QAAI,OAAE,gBAAF,mBAAe,kBAAe,OAAE,gBAAF,mBAAe,YAAY,KAAI;AAC/D,QAAI,cAAc,aAAa,WAAW,6BAA6B,aAAa;AACpF,QAAI,UAAU;AACd,UAAM,QAAQ,KAAK,IAAI,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI;AAC5F,UAAM,QAAQ,KAAK,IAAI,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI;AAC5F,QAAI,QAAQ,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE;AAC7G,QAAI,OAAO;AACX,QAAI,aAAa,cAAc;AAC7B,UAAI,YAAY,aAAa,WAAW,6BAA6B,aAAa;AAClF,UAAI,KAAK;AAAA,IACX;AAAA,EACF;AACA,QAAID,MAAA,EAAE,gBAAF,gBAAAA,IAAe,mBAAgBC,MAAA,EAAE,gBAAF,gBAAAA,IAAe,aAAa,KAAI;AACjE,QAAI,cAAc,aAAa,WAAW,6BAA6B,aAAa;AACpF,QAAI,UAAU;AACd,UAAM,QAAQ,KAAK,IAAI,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI;AAC9F,UAAM,QAAQ,KAAK,IAAI,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI;AAC9F,QAAI,QAAQ,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE;AAC/G,QAAI,OAAO;AACX,QAAI,aAAa,cAAc;AAC7B,UAAI,YAAY,aAAa,WAAW,6BAA6B,aAAa;AAClF,UAAI,KAAK;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,GAAe,KAAmE;AA7D3G;AA8DE,MAAI,aAAa,cAAY,OAAE,aAAF,mBAAY,UAAS,OAAO,WAAW,aAAa;AAC/E,QAAI,cAAc;AAClB,UAAM,OAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAM,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,SAAS,MAAM,GAAG,IAAI;AACrF,UAAM,OAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAM,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,SAAS,MAAM,KAAK,IAAI;AACvF,UAAM,QAAQ,IAAI,OAAO;AAAA,UACnB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA;AAAA,UAElC,QAAQ,EAAE,IAAI,CAAC;AAAA,UACf,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAAA,UAC1B,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAAA,KAClD;AACD,UAAM,QAAQ,IAAI,OAAO;AAAA,UACnB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI;AAAA;AAAA,UAElC,EAAE,IAAI,CAAC,KAAK;AAAA,UACZ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;AAAA,UACvB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI;AAAA,KAClD;AACD,QAAI,OAAO,KAAK;AAChB,QAAI,OAAO,KAAK;AAAA,EAClB;AACF;AAEA,SAAS,eAAe,GAAe,KAAmE;AArF1G;AAsFE,MAAI,aAAa,cAAY,OAAE,aAAF,mBAAY,KAAK,aAAY,EAAE,SAAS,KAAK,WAAW,EAAE,YAAY,eAAe,EAAE,YAAY,gBAAgB,EAAE,YAAY,YAAY,CAAC,KAAK,EAAE,YAAY,aAAa,CAAC,GAAG;AAC7M,QAAI,cAAc;AAClB,QAAI,YAAY;AAChB,UAAM,WAAW;AAAA,MACf,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAK,KAAK,IAAI,EAAE,SAAS,KAAK,OAAO,IAAI,EAAE,SAAS,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,MACzG,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAK,KAAK,IAAI,EAAE,SAAS,KAAK,OAAO,IAAI,EAAE,SAAS,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,IAC3G;AACA,UAAM,KAAK,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC;AAC5G,UAAM,YAAY;AAAA,MAChB,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAK,KAAK,IAAI,EAAE,SAAS,KAAK,OAAO,IAAI,EAAE,SAAS,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,MAC1G,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAK,KAAK,IAAI,EAAE,SAAS,KAAK,OAAO,IAAI,EAAE,SAAS,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,IAC5G;AACA,UAAM,KAAK,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC;AAAA,EAClH;AACF;AAEA,SAAS,iBAAiB,GAAe,KAAmE;AAC1G,MAAI,aAAa,gBAAgB,EAAE,KAAK,UAAU,KAAK;AACrD,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,OAAc,SAAS,GAAG,KAAK;AACjD,YAAM,SAAS,CAAC,OAAc,IAAI,IAAI,CAAC,GAAG,OAAc,IAAI,IAAI,CAAC,GAAG,OAAc,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,CAACK,WAAU,EAAE,KAAKA,MAAK,CAAC;AAC1H,YAAM,KAAK,QAAQ,YAAY;AAAA,IACjC;AACA,mBAAe,GAAG,GAAG;AAAA,EACvB;AAQF;AAEA,SAAS,eAAe,GAAe,KAAmE;AACxG,MAAI,aAAa,YAAY;AAC3B,SAAI,uBAAG,KAAK,WAAU,KAAK;AACzB,eAAS,IAAI,GAAG,IAAI,EAAE,KAAK,QAAQ,KAAK;AACtC,cAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY;AACjE,YAAI,aAAa,eAAe;AAC9B,cAAsB,iCAAiC,SAAS,CAAC;AAAG,kBAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,GAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAe,KAAK,YAAY;AACvJ,cAAsB,qCAAqC,SAAS,CAAC;AAAG,kBAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,GAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAe,KAAK,YAAY;AAC3J,cAAsB,sCAAsC,SAAS,CAAC;AAAG,kBAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,GAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAe,KAAK,YAAY;AAAA,QAC9J;AAAA,MACF;AAAA,IACF,OAAO;AACL,iBAAW,CAAC,GAAGC,GAAC,KAAK,OAAO,SAAQ,uBAAG,gBAAe,CAAC,CAAC,GAAG;AACzD,YAAI,EAACA,OAAA,gBAAAA,IAAI;AAAI;AACb,cAAMC,MAAKD,IAAE,CAAC;AACd,cAAM,KAAKC,IAAG,CAAC,GAAGA,IAAG,CAAC,GAAG,GAAG,YAAY;AACxC,YAAI,aAAa;AAAY,iBAAO,KAAK,GAAGA,IAAG,CAAC,GAAGA,IAAG,CAAC,GAAG,YAAY;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,GAAe,KAAK;AACzC,MAAI,aAAa,WAAW;AAC1B,SAAK,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,YAAY;AAAA,EAChE;AACF;AAGO,SAAS,KAAKC,WAAqB,QAAsB,aAAoC;AAClG,iBAAe,UAAUC,UAAS,WAAW;AAC7C,MAAI,CAAC,UAAU,CAACD;AAAU;AAC1B,QAAM,MAAM,iBAAiBA,SAAQ;AACrC,MAAI,CAAC;AAAK;AACV,MAAI,OAAO,aAAa;AACxB,MAAI,cAAc,aAAa;AAC/B,MAAI,YAAY,aAAa;AAC7B,aAAW,KAAK,QAAQ;AACtB,kBAAc,GAAG,GAAG;AACpB,eAAW,GAAG,GAAG;AACjB,QAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,GAAG;AAC/B,qBAAe,GAAG,GAAG;AACrB,uBAAiB,GAAG,GAAG;AACvB,sBAAgB,GAAG,GAAG;AACtB,qBAAe,GAAG,GAAG;AAAA,IACvB;AAAA,EACF;AACF;;;AChKO,SAAS,KAAKE,WAAqB,QAAsB,aAAoC;AAPpG;AAQE,QAAMC,gBAA4B,UAAUC,UAAS,WAAW;AAChE,MAAI,CAAC,UAAU,CAACF;AAAU;AAC1B,QAAM,MAAM,iBAAiBA,SAAQ;AACrC,MAAI,CAAC;AAAK;AACV,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,QAAI,cAAcC,cAAa;AAC/B,QAAI,YAAYA,cAAa;AAC7B,QAAI,YAAYA,cAAa;AAC7B,QAAI,OAAOA,cAAa;AACxB,QAAIA,cAAa,aAAa,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,EAAE,IAAI,WAAW,GAAG;AACzE,WAAK,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAGA,aAAY;AAC9F,UAAIA,cAAa,gBAAe,KAAAA,cAAa,eAAb,mBAAyB,UAAS,GAAI;AACpE,YAAI,IAAIA,cAAa,WAAW,MAAM;AACtC,YAAI,QAAQ,GAAG,QAAQ,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC9C,YAAI,QAAQ,GAAG,WAAW,MAAM,OAAO,CAAC,EAAE,KAAK;AAC/C,eAAO,KAAK,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAGA,aAAY;AAAA,MACjE;AAAA,IACF;AACA,QAAIA,cAAa,cAAc,OAAO,CAAC,EAAE,WAAW;AAClD,eAASE,MAAK,GAAGA,MAAK,OAAO,CAAC,EAAE,UAAU,QAAQA,OAAM;AACtD,YAAI,CAAC,OAAO,CAAC,EAAE,UAAUA,GAAE,EAAE,SAAU,OAAO,CAAC,EAAE,UAAUA,GAAE,EAAE,UAAU;AAAI;AAC7E,YAAI,YAAY,WAAW,OAAO,CAAC,EAAE,UAAUA,GAAE,EAAE,SAAS,CAAC,GAAGF,aAAY;AAC5E,cAAM,KAAK,OAAO,CAAC,EAAE,UAAUE,GAAE,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,EAAE,UAAUA,GAAE,EAAE,SAAS,CAAC,GAAG,GAAGF,aAAY;AAAA,MACtG;AAAA,IACF;AACA,QAAIA,cAAa,gBAAe,KAAAA,cAAa,mBAAb,mBAA6B,UAAS,KAAM,OAAO,CAAC,EAAE,WAAW;AAC/F,UAAI,OAAOA,cAAa;AACxB,iBAAWE,OAAM,OAAO,CAAC,EAAE,WAAW;AACpC,YAAI,CAACA,IAAG,SAAUA,IAAG,UAAU;AAAI;AACnC,YAAI,IAAIF,cAAa,eAAe,MAAM;AAC1C,YAAI,QAAQ,GAAG,WAAWE,IAAG,IAAI;AACjC,YAAI,QAAQ,GAAG,WAAW,MAAMA,IAAG,KAAK;AACxC,eAAO,KAAK,GAAGA,IAAG,SAAS,CAAC,GAAGA,IAAG,SAAS,CAAC,GAAGF,aAAY;AAAA,MAC7D;AAAA,IACF;AACA,QAAIA,cAAa,gBAAgB,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,EAAE,aAAa;AAC7E,iBAAW,QAAQ,OAAO,OAAO,OAAO,CAAC,EAAE,WAAW,GAAG;AACvD,mBAAWG,cAAa;AAAM,iBAAO,KAAKA,YAAWH,aAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACF;;;AC3CO,SAAS,KAAKI,WAAqB,QAAsB,aAAoC;AAPpG;AAQE,QAAMC,gBAA4B,UAAUC,UAAS,WAAW;AAChE,MAAI,CAAC,UAAU,CAACF;AAAU;AAC1B,QAAM,MAAM,iBAAiBA,SAAQ;AACrC,MAAI,CAAC;AAAK;AACV,MAAI,WAAW;AACf,MAAI,OAAOC,cAAa;AACxB,aAAW,KAAK,QAAQ;AACtB,QAAIA,cAAa,WAAW;AAC1B,UAAI,cAAcA,cAAa;AAC/B,UAAI,YAAYA,cAAa;AAC7B,WAAK,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAGA,aAAY;AAC9D,UAAIA,cAAa,gBAAe,KAAAA,cAAa,eAAb,mBAAyB,UAAS,GAAI;AACpE,YAAI,IAAIA,cAAa,WAAW,MAAM;AACtC,YAAI,QAAQ,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC;AACtC,YAAI,QAAQ,GAAG,WAAW,EAAE,KAAK;AACjC,YAAI,QAAQ,GAAG,WAAW,MAAM,EAAE,KAAK;AACvC,eAAO,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAGA,aAAY;AAAA,MACjD;AACA,UAAI,OAAO;AAAA,IACb;AACA,QAAIA,cAAa,YAAY;AAC3B,UAAI,EAAE,aAAa,EAAE,UAAU,SAAS,GAAG;AACzC,mBAAWE,OAAM,EAAE,WAAW;AAC5B,cAAI,YAAY,WAAWA,IAAG,CAAC,GAAGF,aAAY;AAC9C,gBAAM,KAAKE,IAAG,CAAC,GAAGA,IAAG,CAAC,GAAG,GAAGF,aAAY;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AACA,QAAIA,cAAa,cAAc,EAAE,iBAAgB,KAAAA,cAAa,iBAAb,mBAA2B,UAAS,GAAI;AACvF,iBAAW,CAAC,MAAME,GAAE,KAAK,OAAO,QAAQ,EAAE,WAAW,GAAG;AACtD,YAAI,IAAIF,cAAa,aAAa,MAAM;AACxC,YAAI,QAAQ,GAAG,WAAW,IAAI;AAC9B,eAAO,KAAK,GAAGE,IAAGA,IAAG,SAAS,CAAC,EAAE,CAAC,GAAGA,IAAGA,IAAG,SAAS,CAAC,EAAE,CAAC,GAAGF,aAAY;AAAA,MACzE;AAAA,IACF;AACA,QAAIA,cAAa,gBAAgB,EAAE,aAAa;AAC9C,YAAM,cAAc,CAAC,SAAkB;AACrC,YAAI,CAAC,QAAQ,KAAK,WAAW,KAAK,CAAC,KAAK,CAAC;AAAG;AAC5C,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAI,UAAU;AACd,gBAAM,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK;AACxB,cAAI,cAAc,WAAW,IAAI,GAAGA,aAAY;AAChD,cAAI,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,cAAI,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACjC,cAAI,OAAO;AAAA,QACb;AAAA,MACF;AACA,UAAI,YAAYA,cAAa;AAC7B,kBAAY,EAAE,YAAY,KAAK;AAC/B,kBAAY,EAAE,YAAY,MAAM;AAChC,kBAAY,EAAE,YAAY,IAAI;AAC9B,kBAAY,EAAE,YAAY,KAAK;AAC/B,kBAAY,EAAE,YAAY,KAAK;AAAA,IAEjC;AAAA,EACF;AACF;;;ACzDO,SAAS,OAAOG,WAAqB,QAAwB,aAAoC;AAPxG;AAQE,QAAMC,gBAA4B,UAAUC,UAAS,WAAW;AAChE,MAAI,CAAC,UAAU,CAACF;AAAU;AAC1B,QAAM,MAAM,iBAAiBA,SAAQ;AACrC,MAAI,CAAC;AAAK;AACV,MAAI,WAAW;AACf,MAAI,OAAOC,cAAa;AACxB,aAAW,KAAK,QAAQ;AACtB,QAAIA,cAAa,WAAW;AAC1B,UAAI,cAAcA,cAAa;AAC/B,UAAI,YAAYA,cAAa;AAC7B,WAAK,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAGA,aAAY;AAC9D,UAAIA,cAAa,gBAAe,KAAAA,cAAa,iBAAb,mBAA2B,UAAS,GAAI;AACtE,YAAI,IAAIA,cAAa,aAAa,MAAM;AACxC,YAAI,QAAQ,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC;AACtC,YAAI,QAAQ,GAAG,WAAW,EAAE,KAAK;AACjC,YAAI,QAAQ,GAAG,WAAW,MAAM,EAAE,KAAK;AACvC,eAAO,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAGA,aAAY;AAAA,MACjD;AACA,UAAI,OAAO;AAAA,IACb;AAAA,EACF;AACF;;;ACtBO,SAAS,QAAQE,WAAqB,QAAyB,aAAoC;AAP1G;AAQE,QAAMC,gBAA4B,UAAUC,UAAS,WAAW;AAChE,MAAI,CAAC,UAAU,CAACF;AAAU;AAC1B,MAAIC,cAAa,kBAAiB,KAAAA,cAAa,kBAAb,mBAA4B,UAAS,GAAI;AACzE,UAAM,MAAM,iBAAiBD,SAAQ;AACrC,QAAI,CAAC;AAAK;AACV,QAAI,OAAOC,cAAa;AACxB,QAAI,YAAYA,cAAa;AAC7B,QAAI,IAAI;AACR,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,CAAC,OAAO,IAAI,IAAI,OAAO,QAAQ,OAAO,CAAC,CAAC;AAC9C,UAAK,KAAK,SAAS,KAAQ,KAAK,CAAC,EAAa,SAAS,GAAI;AACzD,cAAM,MAAM,MAAM,CAAC,IAAc,IAAI,IAAI,MAAM,CAAC,MAAM;AACtD,YAAI,IAAIA,cAAa,cAAc,MAAM;AACzC,YAAI,QAAQ,GAAG,WAAW,MAAM,CAAC,CAAC;AAClC,YAAI,QAAQ,GAAG,SAAS,GAAG;AAC3B,YAAI,QAAQ,GAAG,UAAU,KAAK,CAAC,CAAC;AAChC,eAAO,KAAK,GAAG,GAAG,IAAK,IAAIA,cAAa,YAAaA,aAAY;AACjE,aAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;;;AC7BO,IAAM,gBAAgB;AAAA,EAC3B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AACX;;;AVAA,IAAI,WAAW;AAUR,SAAS,OAAOE,WAAqB,QAAwB,aAAoC;AACtG,QAAMC,gBAA4B,UAAUC,UAAS,WAAW;AAChE,MAAI,CAAC,UAAU,CAACF;AAAU;AAC1B,QAAM,MAAM,iBAAiBA,SAAQ;AACrC,MAAI,CAAC;AAAK;AACV,MAAI,WAAW;AACf,MAAI,OAAOC,cAAa;AAExB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,QAAIA,cAAa,WAAW;AAC1B,UAAI,cAAcA,cAAa;AAC/B,UAAI,YAAYA,cAAa;AAC7B,WAAK,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,GAAGA,aAAY;AAC9F,UAAIA,cAAa,YAAY;AAC3B,cAAM,QAAQ,WAAW;AACzB,YAAIA,cAAa,eAAeA,cAAa,gBAAgB,IAAI;AAC/D,cAAI,YAAYA,cAAa;AAC7B,cAAI,SAAS,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAIA,cAAa,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,QAC5G;AACA,YAAI,YAAYA,cAAa;AAC7B,YAAI,SAAS,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAIA,cAAa,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,MAC5G;AACA,UAAI,OAAO;AAAA,IACb;AAAA,EACF;AACF;AAGO,SAASE,QAAO,OAAwD,QAAmB;AAChG,MAAI,CAAC,SAAS,CAAC;AAAQ;AACvB,QAAM,MAAM,iBAAiB,MAAM;AACnC,MAAI,CAAC;AAAK;AACV,MAAI,UAAU,OAAO,GAAG,CAAC;AAC3B;AAGA,eAAsB,IAAIH,WAAqB,QAAgB,aAAoC;AACjG,MAAI,EAAC,iCAAQ,gBAAe,CAACA;AAAU,WAAO;AAC9C,QAAM,YAAY,IAAI;AACtB,QAAMC,gBAAe,UAAUC,UAAS,WAAW;AACnD,QAAM,UAAU,QAAQ,IAAI;AAAA,IAC1B,KAAKF,WAAU,OAAO,MAAMC,aAAY;AAAA,IACxC,KAAKD,WAAU,OAAO,MAAMC,aAAY;AAAA,IACxC,KAAKD,WAAU,OAAO,MAAMC,aAAY;AAAA,IACxC,OAAOD,WAAU,OAAO,QAAQC,aAAY;AAAA,IAC5C,QAAQD,WAAU,OAAO,SAASC,aAAY;AAAA;AAAA;AAAA,EAEhD,CAAC;AACD,aAAW,IAAI,UAAU,WAAW,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAChG,SAAO,YAAY,OAAO;AAC1B,SAAO;AACT;AAGO,SAASG,QAAO;AACrB,EAAAF,SAAQ,aAAa,cAAc;AACnC,EAAAA,SAAQ,aAAa,cAAc;AACnC,EAAAA,SAAQ,iBAAiB,cAAc;AACvC,EAAAA,SAAQ,aAAa,cAAc;AACnC,EAAAA,SAAQ,eAAe,cAAc;AACrC,EAAAA,SAAQ,eAAe,cAAc;AACrC,EAAAA,SAAQ,gBAAgB,cAAc;AACxC;;;AWzFA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,MAAgB;AAAA,EAC3B;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAM,YAAsC;AAAA,EACjD,WAAW,CAAC,gBAAgB,eAAe;AAAA,EAC3C,MAAM,CAAC,YAAY,SAAS;AAAA,EAC5B,OAAO,CAAC,aAAa,YAAY;AAAA,EACjC,cAAc,CAAC,WAAW,UAAU;AAAA,EACpC,cAAc,CAAC,YAAY,WAAW;AAAA,EACtC,UAAU,CAAC,aAAa,YAAY,UAAU;AAAA,EAC9C,WAAW,CAAC,gBAAgB,SAAS;AAAA,EACrC,cAAc,CAAC,gBAAgB,WAAW;AAAA,EAC1C,cAAc,CAAC,aAAa,WAAW;AAAA,EACvC,UAAU,CAAC,aAAa,UAAU;AAAA,EAClC,eAAe,CAAC,YAAY,WAAW;AAAA,EACvC,eAAe,CAAC,YAAY,WAAW;AAAA,EACvC,eAAe,CAAC,YAAY,WAAW;AAAA,EACvC,gBAAgB,CAAC,iBAAiB,gBAAgB;AAAA,EAClD,eAAe,CAAC,YAAY,WAAW;AAAA,EACvC,eAAe,CAAC,aAAa,YAAY;AAAA,EACzC,WAAW,CAAC,cAAc,aAAa,WAAW;AAAA,EAClD,YAAY,CAAC,iBAAiB,UAAU;AAAA,EACxC,eAAe,CAAC,iBAAiB,YAAY;AAAA,EAC7C,eAAe,CAAC,cAAc,YAAY;AAAA,EAC1C,WAAW,CAAC,cAAc,WAAW;AAAA,EACrC,gBAAgB,CAAC,aAAa,YAAY;AAAA,EAC1C,gBAAgB,CAAC,aAAa,YAAY;AAAA,EAC1C,gBAAgB,CAAC,aAAa,YAAY;AAAA,EAC1C,iBAAiB,CAAC,kBAAkB,iBAAiB;AACvD;;;AC5DA,IAAI;AACJ,IAAI,YAAY;AAChB,IAAI;AACJ,IAAM,YAAY;AAClB,IAAM,UAAU,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAE3B,SAAS,gBAAgB;AAC9B,QAAMG,WAAsC,CAAC;AAC7C,MAAI,UAAU;AACd,SAAO,UAAU,WAAW;AAC1B,QAAI,cAAc;AAClB,QAAI,sBAAsB;AAC1B,WAAO,sBAAsB,QAAQ,UAAU,QAAQ,mBAAmB,MAAM,QAAQ,OAAO,GAAG;AAChG,qBAAe;AACf;AAAA,IACF;AACA,UAAM,SAAS,QAAQ,OAAO;AAC9B,UAAM,mBAAmB,KAAK,KAAK,YAAY,MAAM;AACrD,UAAM,kBAAkB,KAAK,KAAK,YAAY,MAAM;AACpD,aAASC,KAAI,GAAGA,KAAI,kBAAkB,EAAEA,IAAG;AACzC,eAAS,IAAI,GAAG,IAAI,iBAAiB,EAAE,GAAG;AACxC,iBAAS,WAAW,GAAG,WAAW,aAAa,EAAE,UAAU;AACzD,UAAAD,SAAQ,KAAK,EAAE,IAAI,IAAI,OAAO,iBAAiB,IAAIC,KAAI,OAAO,iBAAiB,CAAC;AAAA,QAClF;AAAA,MACF;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AACA,iBAAe,EAAE,GAAM,GAASD,SAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAM,GAASA,SAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACpG;AAEA,eAAsB,aAAaE,SAAqC;AACtE,MAAI,IAAI;AAAS,YAAQ;AACzB,MAAI,CAAC,SAASA,QAAO,KAAK,UAAU,KAAKA,QAAO,KAAK,UAAU,EAAE,aAAa,IAAI;AAChF,YAAQ,MAAM,UAAUA,QAAO,KAAK,UAAU,EAAE,SAAS;AACzD,UAAM,UAAS,+BAAQ,eAAc,OAAO,OAAO,MAAM,eAAe,QAAQ,CAAC,IAAI;AAErF,gBAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,EACpF,WAAWA,QAAO,SAAS;AAAO,QAAI,iBAAiB,MAAM,UAAU,CAAC;AACxE,gBAAc;AACd,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,GAAK,CAAG;AACrB,SAAS,YAAY,aAAa,QAAQ;AAC/C,SAAU,GAAK,MAAM;AACnB,UAAM,QAAW,GAAM,aAAa,IAAI,CAAC;AACzC,QAAI,UAAa,GAAQ,MAAM,CAAC,CAAC;AACjC,QAAI,UAAa,GAAQ,MAAM,CAAC,CAAC;AACjC,QAAI,QAAW,GAAQ,MAAM,CAAC,CAAC;AAC/B,QAAI,SAAY,GAAQ,MAAM,CAAC,CAAC;AAChC,cAAa,GAAO,GAAI,SAAS,SAAS,GAAG,OAAO,CAAC;AACrD,cAAa,GAAO,GAAI,SAAS,SAAS,GAAG,OAAO,CAAC;AACrD,YAAW,GAAO,GAAI,OAAO,SAAS,GAAG,WAAW,CAAC,CAAC;AACtD,aAAY,GAAO,GAAI,QAAQ,SAAS,GAAG,WAAW,CAAC,CAAC;AACxD,UAAM,OAAU,GAAI,SAAY,GAAI,OAAO,CAAC,CAAC;AAC7C,UAAM,OAAU,GAAI,SAAY,GAAI,QAAQ,CAAC,CAAC;AAC9C,UAAM,OAAU,GAAI,MAAM,KAAK;AAC/B,UAAM,OAAU,GAAI,MAAM,MAAM;AAChC,UAAM,QAAW,GAAM,CAAC,MAAM,MAAM,MAAM,IAAI,GAAG,CAAC;AAClD,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAe,cAAc,aAAqB,cAAsBA,SAAgBC,aAAsD;AA1E9I;AA2EE,QAAM,gBAA+B,CAAC;AACtC,QAAMC,KAA4B,CAAC;AACnC,EAAAA,GAAE,QAAQ,YAAY,aAAa,YAAY;AAC/C,EAAAA,GAAE,SAAY,GAAQ,YAAY;AAClC,EAAAA,GAAE,MAAM,MAAS,GAAM,uBAAuBA,GAAE,OAAmBA,GAAE,QAAoB,KAAG,KAAAF,QAAO,KAAK,UAAU,MAAtB,mBAAyB,kBAAiB,OAAK,KAAAA,QAAO,KAAK,UAAU,MAAtB,mBAAyB,iBAAgB,GAAG;AACvL,QAAM,MAAM,MAAME,GAAE,IAAI,KAAK;AAC7B,QAAM,SAAS,MAAMA,GAAE,OAAO,KAAK;AACnC,QAAM,QAAQ,MAAMA,GAAE,MAAM,MAAM;AAClC,aAAW,KAAK,MAAM,KAAK,GAAG,GAAG;AAC/B,UAAM,QAAQ,OAAO,CAAC;AACtB,UAAM,SAAc,MAAM,CAAC;AAC3B,UAAM,MAAW,CAAC,KAAK,MAAM,OAAO,CAAC,IAAID,YAAW,CAAC,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,IAAIA,YAAW,CAAC,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,IAAIA,YAAW,CAAC,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,IAAIA,YAAW,CAAC,CAAC,CAAC;AAC5K,UAAM,cAA2B,EAAE,OAAO,QAAQ,IAAI;AACtD,kBAAc,KAAK,WAAW;AAAA,EAChC;AACA,SAAO,KAAKC,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;AAEA,eAAsB,YAAY,OAAeF,SAAgBC,aAA8B;AAC7F,QAAMC,KAA4B,CAAC;AACnC,EAAAA,GAAE,MAAM,+BAAO,QAAQ,OAAO,CAAC,UAAU;AACzC,EAAAA,GAAE,YAAe,GAAMA,GAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACnD,EAAAA,GAAE,WAAc,GAAMA,GAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACnD,EAAAA,GAAE,SAAY,GAAQA,GAAE,SAAS;AACjC,EAAAA,GAAE,QAAW,GAAQA,GAAE,QAAQ;AAC/B,QAAM,QAAQ,MAAM,cAAcA,GAAE,OAAOA,GAAE,QAAQF,SAAQC,WAAU;AACvE,SAAO,KAAKC,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;;;ACtGO,SAAS,KAAK,WAAoBC,cAA+B,CAAC,GAAG,CAAC,GAAG;AAC9E,QAAM,SAAS,CAAC,UAAU,IAAI,CAACC,QAAOA,IAAG,CAAC,CAAC,GAAG,UAAU,IAAI,CAACA,QAAOA,IAAG,CAAC,CAAC,CAAC;AAC1E,QAAM,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC3D,QAAM,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC3D,QAAM,MAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAClE,QAAM,SAAc,CAAC,IAAI,CAAC,IAAID,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,CAAC;AACnH,SAAO,EAAE,KAAK,OAAO;AACvB;AAEO,SAAS,OAAO,WAAoBA,cAA+B,CAAC,GAAG,CAAC,GAAG;AAChF,QAAM,SAAS,CAAC,UAAU,IAAI,CAACC,QAAOA,IAAG,CAAC,CAAC,GAAG,UAAU,IAAI,CAACA,QAAOA,IAAG,CAAC,CAAC,CAAC;AAC1E,QAAM,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC3D,QAAM,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC3D,QAAM,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5D,QAAM,OAAO,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACtG,QAAM,MAAW,CAAC,KAAK,MAAM,OAAO,CAAC,IAAI,IAAI,GAAG,KAAK,MAAM,OAAO,CAAC,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC;AACxH,QAAM,SAAc,CAAC,IAAI,CAAC,IAAID,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,CAAC,CAAC;AACnH,SAAO,EAAE,KAAK,OAAO;AACvB;AAEO,SAAS,MAAM,KAAU,WAAmB;AACjD,QAAM,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,SAAS;AACpD,QAAM,SAAc;AAAA,IAClB,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,IAC9B,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,IAC9B,KAAK,CAAC;AAAA,IACN,KAAK,CAAC;AAAA,EACR;AACA,SAAO;AACT;;;ACdA,IAAIE;AACJ,IAAIC,aAAY;AAChB,IAAI,UAAU,OAAO;AACrB,IAAM,cAA2D;AAAA,EAC/D,WAAW,CAAC,SAAS,2BAA2B,sBAAsB,YAAY,iBAAiB;AAAA,EACnG,UAAU,CAAC;AACb;AAEA,IAAM,QAAsB,CAAC;AAC7B,IAAI,UAA8B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjE,IAAI,WAAW;AAEf,IAAM,UAAU,CAAC,MAAO,IAAK,KAAK,IAAI,KAAK,IAAI,CAAC;AAEzC,IAAM,aAAa,CAACC,YAAwC,aAAaA,OAAM;AAEtF,eAAsB,SAASA,SAAqC;AAClE,MAAI,IAAI;AAAS,IAAAF,SAAQ;AACzB,MAAI,CAACA,QAAO;AACV,IAAAA,SAAQ,MAAM,UAAUE,QAAO,KAAK,SAAS;AAC7C,UAAM,UAASF,UAAA,gBAAAA,OAAQ,eAAc,OAAO,OAAOA,OAAM,eAAe,QAAQ,CAAC,IAAI;AAErF,IAAAC,aAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,EACpF,WAAWC,QAAO;AAAO,QAAI,iBAAiBF,OAAM,UAAU,CAAC;AAC/D,SAAOA;AACT;AAEA,SAAS,aAAa,OAAiBG,OAAc,SAAuB;AA5C5E;AA6CE,QAAMC,KAA4B,CAAC;AACnC,MAAI,GAAC,oCAAO,UAAP,mBAAe,OAAM,GAAC,oCAAO,UAAP,mBAAe;AAAI,WAAO;AACrD,MAAI;AACJ,MAAI,SAAS;AACX,IAAAA,GAAE,UAAa,GAAM,cAAc,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC;AAAA,EAC5F;AACA,MAAI,MAAM,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG;AACrC,UAAM,SAA2B;AAAA,MAC/B,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI;AAAA,MACtF,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI;AAAA,IACxF;AACA,UAAM,QAA0B;AAAA,MAC9B,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI;AAAA,MACtF,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,KAAK,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI;AAAA,IACxF;AACA,cAAU;AAAA,MACR,CAAC,GAAG,CAAC;AAAA;AAAA,MACL;AAAA;AAAA,MACA;AAAA;AAAA,MACA,CAAC,GAAG,CAAC;AAAA;AAAA,IACP;AACA,IAAAA,GAAE,MAAS,GAAIA,GAAE,WAAW,OAAO,OAAO;AAC1C,IAAAA,GAAE,SAAY,GAAM,eAAeA,GAAE,KAAiB,CAACD,OAAMA,KAAI,CAAC;AAClE,YAAW,GAAIC,GAAE,QAAQ,UAAU,KAAK;AAAA,EAC1C,WAAW,MAAM,MAAM,CAAC,MAAMD,OAAM;AAClC,IAAAC,GAAE,SAAY,GAAM,eAAeA,GAAE,WAAuB,OAAO,CAACD,OAAMA,KAAI,CAAC;AAC/E,YAAW,GAAIC,GAAE,QAAQ,UAAU,KAAK;AAAA,EAC1C,OAAO;AACL,YAAW,GAAIA,GAAE,WAAW,OAAO,UAAU,KAAK;AAAA,EACpD;AACA,SAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;AAEA,SAAS,iBAAiB,WAA2BC,aAA8B,SAA+B;AAChH,aAAWC,QAAO,WAAW;AAC3B,IAAAA,KAAI,WAAW;AAAA,MACb,KAAK,MAAMA,KAAI,SAAS,CAAC,KAAKD,YAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAKA,YAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5G,KAAK,MAAMC,KAAI,SAAS,CAAC,KAAKD,YAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAKA,YAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5GC,KAAI,SAAS,CAAC;AAAA,IAChB;AACA,IAAAA,KAAI,cAAc,CAACA,KAAI,SAAS,CAAC,IAAID,YAAW,CAAC,GAAGC,KAAI,SAAS,CAAC,IAAID,YAAW,CAAC,GAAG,IAAKC,KAAI,SAAS,CAAC,KAAgBD,YAAW,CAAC,IAAIA,YAAW,CAAC,EAAE;AAAA,EACxJ;AACA,MAAI,SAAS;AACX,UAAM,QAAQ,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACpC,UAAM,SAAS,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACrC,eAAWC,QAAO,WAAW;AAC3B,MAAAA,KAAI,cAAc;AAAA,QAChBA,KAAI,YAAY,CAAC,IAAI,SAAS,QAAQ,CAAC;AAAA;AAAA,QACvCA,KAAI,YAAY,CAAC,IAAI,QAAQ,QAAQ,CAAC;AAAA;AAAA,QACtCA,KAAI,YAAY,CAAC;AAAA,MACnB;AACA,MAAAA,KAAI,WAAW;AAAA,QACb,KAAK,MAAMA,KAAI,YAAY,CAAC,IAAID,YAAW,CAAC,CAAC;AAAA,QAC7C,KAAK,MAAMC,KAAI,YAAY,CAAC,IAAID,YAAW,CAAC,CAAC;AAAA,QAC7CC,KAAI,YAAY,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,WAA2B;AAE/C,QAAM,WAAW,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU;AAC5D,QAAM,YAAY,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAC9D,QAAM,YAAY,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAC9D,WAAS,SAAS,CAAC,MAAM,UAAU,SAAS,CAAC,KAAK,MAAM,UAAU,SAAS,CAAC,KAAK,MAAM;AACvF,QAAM,YAAY,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAC9D,QAAM,aAAa,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AAChE,QAAM,aAAa,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AAChE,YAAU,SAAS,CAAC,MAAM,WAAW,SAAS,CAAC,KAAK,MAAM,WAAW,SAAS,CAAC,KAAK,MAAM;AAC5F;AAEA,eAAe,gBAAgB,OAAeJ,SAAgBG,aAA0D;AAQtH,MAAI,EAACL,UAAA,gBAAAA,OAAQ;AAAa,WAAO;AACjC,QAAMI,KAA4B,CAAC;AACnC;AAAA,IAACA,GAAE;AAAA,IAAqBA,GAAE;AAAA,IAA+BA,GAAE;AAAA,IAAyBA,GAAE;AAAA,IAAwBA,GAAE;AAAA;AAAA,EAAiB,IAAIJ,UAAA,gBAAAA,OAAO,QAAQ,OAAO,YAAY;AACvK,QAAM,aAAa,MAAMI,GAAE,SAAS,KAAK,GAAG,CAAC;AAC7C,QAAM,SAAS,MAAMA,GAAE,GAAG,KAAK;AAC/B,QAAM,YAAY,MAAMA,GAAE,MAAM,KAAK;AACrC,SAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,QAAM,oBAAoC,CAAC;AAC3C,QAAM,QAAQ;AACd,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,OAAO,KAAK;AAC9C,UAAM,QAAQ,QAAQ,OAAO,QAAQ,IAAI,CAAC,CAAC;AAC3C,UAAM,WAAW,QAAQ,OAAO,QAAQ,IAAI,CAAC,CAAC;AAC9C,UAAM,WAAW,KAAK,MAAM,MAAM,QAAQ,WAAW,SAAS,IAAI;AAClE,UAAM,cAAqB,CAAC,OAAO,QAAQ,IAAI,CAAC,IAAIH,YAAW,OAAO,QAAQ,IAAI,CAAC,IAAIA,YAAW,OAAO,QAAQ,IAAI,CAAC,IAAI,CAAC;AAC3H,UAAM,WAAkB,CAAC,KAAK,MAAMI,YAAW,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,KAAK,MAAMA,YAAW,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAW;AACzI,UAAME,YAAkB,CAAC,UAAU,QAAQ,IAAI,CAAC,GAAG,UAAU,QAAQ,IAAI,CAAC,GAAG,UAAU,QAAQ,IAAI,CAAC,IAAI,CAAC;AACzG,sBAAkB,KAAK,EAAE,MAAa,IAAI,CAAC,GAAmB,aAAa,UAAU,UAAAA,WAAU,OAAO,SAAS,CAAC;AAAA,EAClH;AACA,MAAI,aAAaL,QAAO,KAAK,iBAAiB;AAAI,WAAO;AACzD,eAAa,iBAAiB;AAC9B,QAAM,YAA4B,iBAAiB,mBAAmBG,WAAU;AAChF,QAAM,OAAO,UAAU,IAAI,CAAC,MAAM,EAAE,QAAQ;AAC5C,QAAM,QAAY,KAAK,MAAM,CAACA,YAAW,CAAC,GAAGA,YAAW,CAAC,CAAC,CAAC;AAC3D,QAAMG,eAAiD,CAAC;AACxD,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAe,SAAS,GAAG;AAC9D,UAAMC,MAAgB,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,KAAK;AAC3C,YAAM,MAAM,UAAU,KAAK,CAACH,SAAQA,KAAI,SAAS,QAAQ,CAAC,CAAC;AAC3D,YAAM,MAAM,UAAU,KAAK,CAACA,SAAQA,KAAI,SAAS,QAAQ,IAAI,CAAC,CAAC;AAC/D,UAAI,OAAO;AAAK,QAAAG,IAAG,KAAK,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC;AAAA,IACtD;AACA,IAAAD,aAAY,IAAI,IAAIC;AAAA,EACtB;AACA,QAAMC,QAAO,EAAE,IAAI,GAAG,OAAO,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,MAAM,QAAQ,WAAW,aAAAF,aAAY;AAC7H,SAAOE;AACT;AAEA,eAAsB,QAAQ,OAAiBR,SAAuC;AApKtF,cAAAS;AAqKE,QAAMN,cAA+B,CAAC,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;AAC9E,QAAM,YAAYH,QAAO,KAAK,YAAY,KAAM,IAAI,IAAI;AACxD,QAAM,YAAY,WAAWA,QAAO,KAAK,cAAc;AACvD,MAAIA,QAAO,eAAe,YAAY,aAAa,UAAU,MAAM;AACjE;AAAA,EACF,OAAO;AACL,QAAI,QAAuB,CAAC;AAC5B,SAAI,WAAAA,QAAO,SAAP,mBAAc,gBAAd,mBAA4B,YAAY;AAC1C,YAAM,gBAAgB,aAAa,OAAO,GAAG;AAC7C,cAAQ,MAAM,YAAY,eAAeA,SAAQG,WAAU;AAC3D,MAAG,GAAQ,aAAa;AAAA,IAC1B,OAAO;AACL,cAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAU,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;AAAA,IACvE;AACA,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,cAAc,aAAa,OAAO,MAAKM,MAAA,MAAM,CAAC,MAAP,gBAAAA,IAAU,MAAM;AAC7D,YAAM,SAAS;AACf,YAAM,aAAa,MAAM,gBAAgB,aAAaT,SAAQG,WAAU;AACxE,MAAG,GAAQ,WAAW;AACtB,UAAI,CAAC;AAAY;AACjB,iBAAW,KAAK;AAEhB,YAAM,KAAK,UAAU;AAAA,IACvB;AAeA,eAAW,IAAI;AACf,cAAU;AAAA,EACZ;AACA,SAAO;AACT;;;AC5MO,IAAMO,UAAS;AAAA,EACpB,EAAE,OAAO,GAAG,OAAO,SAAS;AAAA,EAC5B,EAAE,OAAO,GAAG,OAAO,UAAU;AAAA,EAC7B,EAAE,OAAO,GAAG,OAAO,MAAM;AAAA,EACzB,EAAE,OAAO,GAAG,OAAO,aAAa;AAAA,EAChC,EAAE,OAAO,GAAG,OAAO,WAAW;AAAA,EAC9B,EAAE,OAAO,GAAG,OAAO,MAAM;AAAA,EACzB,EAAE,OAAO,GAAG,OAAO,QAAQ;AAAA,EAC3B,EAAE,OAAO,GAAG,OAAO,QAAQ;AAAA,EAC3B,EAAE,OAAO,GAAG,OAAO,OAAO;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,gBAAgB;AAAA,EACpC,EAAE,OAAO,IAAI,OAAO,eAAe;AAAA,EACnC,EAAE,OAAO,IAAI,OAAO,YAAY;AAAA,EAChC,EAAE,OAAO,IAAI,OAAO,gBAAgB;AAAA,EACpC,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,UAAU;AAAA,EAC9B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,UAAU;AAAA,EAC9B,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,UAAU;AAAA,EAC9B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,YAAY;AAAA,EAChC,EAAE,OAAO,IAAI,OAAO,cAAc;AAAA,EAClC,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,eAAe;AAAA,EACnC,EAAE,OAAO,IAAI,OAAO,iBAAiB;AAAA,EACrC,EAAE,OAAO,IAAI,OAAO,aAAa;AAAA,EACjC,EAAE,OAAO,IAAI,OAAO,YAAY;AAAA,EAChC,EAAE,OAAO,IAAI,OAAO,gBAAgB;AAAA,EACpC,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,aAAa;AAAA,EACjC,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,UAAU;AAAA,EAC9B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,eAAe;AAAA,EACnC,EAAE,OAAO,IAAI,OAAO,MAAM;AAAA,EAC1B,EAAE,OAAO,IAAI,OAAO,eAAe;AAAA,EACnC,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,KAAK;AAAA,EACzB,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,SAAS;AAAA,EAC7B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,aAAa;AAAA,EACjC,EAAE,OAAO,IAAI,OAAO,YAAY;AAAA,EAChC,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,UAAU;AAAA,EAC9B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,eAAe;AAAA,EACnC,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,QAAQ;AAAA,EAC5B,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC3B,EAAE,OAAO,IAAI,OAAO,WAAW;AAAA,EAC/B,EAAE,OAAO,IAAI,OAAO,aAAa;AAAA,EACjC,EAAE,OAAO,IAAI,OAAO,aAAa;AAAA,EACjC,EAAE,OAAO,IAAI,OAAO,aAAa;AACnC;;;ACrEA,IAAIC;AACJ,IAAIC,aAAY;AAChB,IAAIC,QAAuB,CAAC;AAC5B,IAAIC,YAAW;AACf,IAAIC,WAAU,OAAO;AAErB,eAAsB,KAAKC,SAAqC;AAC9D,MAAI,IAAI;AAAS,IAAAL,SAAQ;AACzB,MAAI,CAACA,QAAO;AAEV,IAAAA,SAAQ,MAAM,UAAUK,QAAO,OAAO,SAAS;AAC/C,UAAM,UAASL,UAAA,gBAAAA,OAAQ,eAAc,OAAO,OAAOA,OAAM,eAAe,QAAQ,CAAC,IAAI;AAErF,IAAAC,aAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,EACpF,WAAWI,QAAO;AAAO,QAAI,iBAAiBL,OAAM,UAAU,CAAC;AAC/D,SAAOA;AACT;AAEA,eAAeM,SAAQ,KAAoB,aAA+BD,SAAgB;AACxF,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,QAAME,KAA4B,CAAC;AACnC,QAAM,UAA0B,CAAC;AACjC,QAAM,aAAa,MAAM,IAAI,MAAM;AACnC,EAAAA,GAAE,UAAa,GAAQ,GAAG;AAC1B,QAAM,MAAS,GAAMA,GAAE,SAAS,GAAG,CAAC;AACpC,EAAAA,GAAE,QAAW,GAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AACtD,EAAAA,GAAE,QAAW,GAAQA,GAAE,KAAK;AAC5B,EAAAA,GAAE,SAAY,GAAQ,IAAI,CAAC,CAAC;AAC5B,EAAAA,GAAE,UAAa,GAAQ,IAAI,CAAC,CAAC;AAC7B,EAAG,GAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;AACxB,EAAAA,GAAE,MAAM,MAAS,GAAM,uBAAuBA,GAAE,OAAmBA,GAAE,QAAoBF,QAAO,OAAO,eAAe,GAAGA,QAAO,OAAO,cAAeA,QAAO,OAAO,iBAAiB,CAAE;AACvL,QAAM,MAAM,MAAME,GAAE,IAAI,KAAK;AAC7B,MAAI,IAAI;AACR,aAAWC,OAAM,MAAM,KAAK,GAAG,GAAG;AAChC,UAAM,QAAQ,KAAK,MAAM,MAAM,WAAW,CAAC,EAAEA,GAAE,EAAE,CAAC,CAAC,IAAI;AACvD,UAAM,WAAW,WAAW,CAAC,EAAEA,GAAE,EAAE,CAAC;AACpC,QAAI,OAAO,MAAM,QAAQ;AAAG;AAC5B,UAAM,QAAQC,QAAO,QAAQ,EAAE;AAC/B,UAAM,CAAC,GAAGC,EAAC,IAAI;AAAA,MACb,WAAW,CAAC,EAAEF,GAAE,EAAE,CAAC,IAAIP;AAAA,MACvB,WAAW,CAAC,EAAEO,GAAE,EAAE,CAAC,IAAIP;AAAA,IACzB;AACA,UAAM,SAAc;AAAA,MAClB;AAAA,MACAS;AAAA,MACA,WAAW,CAAC,EAAEF,GAAE,EAAE,CAAC,IAAIP,aAAY;AAAA,MACnC,WAAW,CAAC,EAAEO,GAAE,EAAE,CAAC,IAAIP,aAAYS;AAAA,IACrC;AACA,UAAM,MAAW;AAAA,MACf,KAAK,MAAM,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AAAA,MACrC,KAAK,MAAM,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AAAA,MACrC,KAAK,MAAM,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AAAA,MACrC,KAAK,MAAM,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AAAA,IACvC;AACA,YAAQ,KAAK,EAAE,IAAI,KAAK,OAAO,OAAO,UAAU,OAAO,KAAK,OAAO,CAAC;AAAA,EACtE;AACA,SAAO,KAAKH,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;AAEA,eAAsBI,SAAQ,OAAiBN,SAAyC;AACtF,MAAI,EAACL,UAAA,gBAAAA,OAAQ;AAAa,WAAO,CAAC;AAClC,QAAM,YAAYK,QAAO,OAAO,YAAY,KAAM,IAAI,IAAIF;AAC1D,QAAM,YAAYC,YAAWC,QAAO,OAAO,cAAc;AACzD,MAAIA,QAAO,eAAe,YAAY,aAAcH,MAAK,SAAS,GAAI;AACpE,IAAAE;AACA,WAAOF;AAAA,EACT;AACA,EAAAE,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,UAAMQ,cAAa,CAAC,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;AAC5D,UAAM,SAAY,GAAM,eAAe,OAAO,CAACX,YAAWA,UAAS,CAAC;AACpE,UAAM,UAAUI,QAAO,OAAO,UAAUL,UAAA,gBAAAA,OAAO,QAAQ,QAAQ,CAAC,oBAAoB,KAAe;AACnG,IAAAG,YAAW,IAAI;AACf,IAAG,GAAQ,MAAM;AAEjB,UAAM,MAAM,MAAMG,SAAQ,SAASM,aAAYP,OAAM;AACrD,IAAAH,QAAO;AAEP,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AChGA;AAAA;AAAA,mBAAAW;AAAA,EAAA,WAAAC;AAAA;AAAO,IAAMA,OAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMD,aAAsC;AAAA,EACjD,SAAS,CAAC,WAAW,YAAY,WAAW;AAAA,EAC5C,UAAU,CAAC,YAAY,aAAa,YAAY;AAAA,EAChD,OAAO,CAAC,gBAAgB,iBAAiB,YAAY,WAAW,cAAc;AAAA,EAC9E,SAAS,CAAC,gBAAgB,aAAa,WAAW;AAAA,EAClD,UAAU,CAAC,iBAAiB,cAAc,YAAY;AAAA,EACtD,MAAM,CAAC;AACT;;;ACVA,IAAIE;AACJ,IAAIC,YAAW;AACf,IAAMC,SAAoB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,GAAG,aAAa,CAAC,EAAuC;AAM1J,IAAIC,WAAU,OAAO;AAErB,eAAsBC,MAAKC,SAAqC;AAC9D,MAAI,IAAI;AAAS,IAAAL,SAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,SAAQ,MAAM,UAAUK,QAAO,KAAK,SAAS;AAAA,WAChDA,QAAO;AAAO,QAAI,iBAAiBL,OAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAGA,eAAe,MAAM,QAAQ,UAA6C;AACxE,QAAM,CAAC,OAAO,MAAM,IAAI,OAAO;AAC/B,QAAM,WAAc,EAAQ,QAAQ,CAAC,SAAS,KAAK,CAAC;AACpD,QAAM,MAAS,GAAI,UAAU,CAAC;AAC9B,QAAM,YAAoB,MAAM,IAAI,KAAK,GAAG,CAAC;AAC7C,MAAI,WAAW,UAAU;AACvB,UAAM,cAAiB,GAAO,UAAU,CAAC;AACzC,UAAM,MAAS,GAAI,aAAa,KAAK;AACrC,UAAM,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC;AAC9B,UAAM,MAAS,GAAI,aAAa,KAAK;AACrC,UAAMM,MAAa,MAAM,IAAI,KAAK,GAAG,CAAC;AACtC,IAAG,GAAQ,CAAC,UAAU,KAAK,aAAa,KAAK,GAAG,CAAC;AACjD,WAAO,CAAC,GAAGA,IAAG,QAAQ;AAAA,EACxB;AACA,EAAG,GAAQ,CAAC,UAAU,GAAG,CAAC;AAC1B,SAAO,CAAC,GAAG,GAAG,QAAQ;AACxB;AAEA,eAAsBC,SAAQ,OAAiBF,SAAuC;AACpF,MAAI,EAACL,UAAA,gBAAAA,OAAQ,gBAAe,EAACA,UAAA,gBAAAA,OAAO,OAAO,GAAG;AAAO,WAAO,CAAC;AAC7D,QAAM,YAAYK,QAAO,KAAK,YAAY,KAAM,IAAI,IAAIJ;AACxD,QAAM,YAAYE,YAAWE,QAAO,KAAK,cAAc;AACvD,MAAIA,QAAO,eAAe,YAAY,aAAa,OAAO,KAAKH,OAAM,SAAS,EAAE,SAAS,GAAG;AAC1F,IAAAC;AACA,WAAO,CAACD,MAAK;AAAA,EACf;AACA,EAAAC,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,UAAM,SAAY,GAAK,MAAM;AA9DjC;AA+DM,YAAM,SAAY,GAAM,eAAe,OAAO,GAAC,KAAAH,UAAA,gBAAAA,OAAO,OAAO,GAAG,UAAjB,mBAAyB,OAAM,KAAG,KAAAA,UAAA,gBAAAA,OAAO,OAAO,GAAG,UAAjB,mBAAyB,OAAM,CAAC,GAAG,KAAK;AACzH,YAAMQ,WAAa,GAAI,QAAQ,UAAU,GAAG;AAC5C,YAAM,OAAU,GAAIA,UAAS,UAAU,GAAG;AAC1C,aAAO;AAAA,IACT,CAAC;AACD,QAAI;AACJ,QAAIH,QAAO,KAAK;AAAS,aAAOL,UAAA,gBAAAA,OAAO,QAAQ;AAC/C,IAAAC,YAAW,IAAI;AACf,IAAG,GAAQ,MAAM;AAEjB,QAAI,MAAM;AACR,MAAAC,OAAM,UAAU,SAAS;AACzB,YAAM,UAAa,GAAQ,IAAI;AAC/B,MAAG,GAAQ,IAAI;AAEf,YAAM,QAAW,GAAQ,SAAS,CAAC;AACnC,MAAG,GAAQ,OAAO;AAGlB,eAASO,MAAK,GAAGA,MAAK,MAAM,QAAQA,OAAM;AAExC,cAAM,CAACC,IAAGJ,KAAG,SAAS,IAAI,MAAM,MAAM,MAAMG,GAAE,GAAGJ,QAAO,KAAK,aAAa;AAC1E,YAAI,aAAaA,QAAO,KAAK,iBAAiB,IAAI;AAChD,UAAAH,OAAM,UAAU,KAAK;AAAA,YACnB,OAAO,KAAK,MAAM,MAAM,SAAS,IAAI;AAAA,YACrC,MAAaS,KAAIF,GAAE;AAAA,YACnB,aAAa;AAAA;AAAA;AAAA,cAEXC,KAAIV,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC;AAAA,cAAGM,MAAIN,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC;AAAA,YAC3D;AAAA,YACA,UAAU;AAAA;AAAA;AAAA,cAER,KAAK,MAAM,MAAM,MAAM,CAAC,IAAIU,KAAIV,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,cAAG,KAAK,MAAM,MAAM,MAAM,CAAC,IAAIM,MAAIN,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,YACrH;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AACA,YAAM,QAAQ,CAAC,MAAS,GAAQ,CAAC,CAAC;AAAA,IACpC;AACA,IAAAE,OAAM,QAAQA,OAAM,UAAU,OAAO,CAAC,MAAM,SAAU,KAAK,QAAQ,OAAO,KAAK,QAAQ,MAAO,CAAC;AAC/F,UAAM,IAAIA,OAAM,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAClD,UAAMI,KAAIJ,OAAM,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAClD,IAAAA,OAAM,MAAM;AAAA,MACV,KAAK,IAAI,GAAG,CAAC;AAAA,MACb,KAAK,IAAI,GAAGI,EAAC;AAAA,MACb,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AAAA,MAC9B,KAAK,IAAI,GAAGA,EAAC,IAAI,KAAK,IAAI,GAAGA,EAAC;AAAA,IAChC;AACA,UAAM,OAAOJ,OAAM,UAAU,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACxD,UAAM,OAAOA,OAAM,UAAU,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACxD,IAAAA,OAAM,SAAS;AAAA,MACb,KAAK,IAAI,GAAG,IAAI;AAAA,MAChB,KAAK,IAAI,GAAG,IAAI;AAAA,MAChB,KAAK,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI;AAAA,MACpC,KAAK,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI;AAAA,IACtC;AACA,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAeU,UAAS,GAAG;AAC9D,YAAMC,MAAgB,CAAC;AACvB,eAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,KAAK;AAC3C,cAAM,MAAMX,OAAM,UAAU,KAAK,CAACS,SAAQA,KAAI,SAAS,QAAQ,CAAC,CAAC;AACjE,cAAM,MAAMT,OAAM,UAAU,KAAK,CAACS,SAAQA,KAAI,SAAS,QAAQ,IAAI,CAAC,CAAC;AACrE,YAAI,OAAO,OAAO,IAAI,SAASN,QAAO,KAAK,iBAAiB,MAAM,IAAI,SAASA,QAAO,KAAK,iBAAiB;AAAI,UAAAQ,IAAG,KAAK,CAAC,IAAI,UAAU,IAAI,QAAQ,CAAC;AAAA,MACtJ;AACA,MAAAX,OAAM,YAAY,IAAI,IAAIW;AAAA,IAC5B;AACA,YAAQ,CAACX,MAAK,CAAC;AAAA,EACjB,CAAC;AACH;;;ACnHO,IAAM,aAAa,CAAC,QAA0B,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;AAE3I,IAAM,eAAe,CAAC,QAAkC,CAAC,IAAI,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC;AAExL,IAAM,WAAW,CAAC,KAAK,UAAgB,MAAM;AAAA,EAClD,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,EACzC,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,EACzC,KAAK,MAAM,KAAK,IAAK,MAAM,MAAM,CAAC,KAAK,GAAI,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,EAC5F,KAAK,MAAM,KAAK,IAAK,MAAM,MAAM,CAAC,KAAK,GAAI,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAC9F,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AAER,IAAM,YAAY,CAAC,KAAK,UAAgB,MAAM;AAAA,EACnD,IAAI,WAAW,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK;AAAA,EACvC,IAAI,WAAW,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK;AAAA,GACtC,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK;AAAA,GAC1D,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK;AAC7D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AAER,IAAM,sBAAsB,CAAC,KAAK,QAAQ,WAAW;AAC1D,QAAM,aAAoB,CAAC,IAAI,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC;AACvF,QAAM,WAAkB,CAAC,IAAI,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC;AAEjF,QAAM,YAAY,IAAI,UAAU,IAAI,CAACY,QAAO,EAAEA,IAAG,CAAC,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,IAAIA,IAAG,CAAC,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;AAQ9G,SAAO,EAAE,YAAY,UAAU,WAAW,YAAY,IAAI,WAAW;AACvE;AAEO,IAAM,eAAe,CAAC,KAAK,OAAO,aAAa;AACpD,QAAM,IAAI,MAAM,MAAM,CAAC;AACvB,QAAMC,MAAI,MAAM,MAAM,CAAC;AACvB,QAAM,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAIA,KAAG,IAAI,SAAS,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,IAAIA,GAAC;AACtG,QAAM,OAAU,GAAM,cAAc,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ;AAClE,QAAM,OAAU,GAAI,MAAM,UAAU,KAAK;AACzC,EAAG,GAAQ,IAAI;AACf,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,KAAK,WAAW;AACzC,QAAM,SAAS,aAAa,GAAG;AAC/B,QAAMC,QAAO,WAAW,GAAG;AAC3B,QAAM,WAA6B,CAAC,SAASA,MAAK,CAAC,IAAI,GAAG,SAASA,MAAK,CAAC,IAAI,CAAC;AAC9E,SAAO;AAAA,IACL,YAAY,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;AAAA,IAC7D,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;AAAA,IAC3D,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,MAAAA;AAAA,EACF;AACF;AAEO,IAAM,cAAc,CAAC,QAAQ;AAClC,QAAM,UAAU,aAAa,GAAG;AAChC,QAAMA,QAAO,WAAW,GAAG;AAC3B,QAAM,WAAW,KAAK,IAAI,GAAGA,KAAI,IAAI;AACrC,SAAO;AAAA,IACL,YAAY,CAAC,KAAK,MAAM,QAAQ,CAAC,IAAI,QAAQ,GAAG,KAAK,MAAM,QAAQ,CAAC,IAAI,QAAQ,CAAC;AAAA,IACjF,UAAU,CAAC,KAAK,MAAM,QAAQ,CAAC,IAAI,QAAQ,GAAG,KAAK,MAAM,QAAQ,CAAC,IAAI,QAAQ,CAAC;AAAA,IAC/E,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,MAAM,CAAC,KAAK,MAAMA,MAAK,CAAC,CAAC,GAAG,KAAK,MAAMA,MAAK,CAAC,CAAC,CAAC;AAAA,EACjD;AACF;AAEO,IAAM,gCAAgC,CAAC,cAAc;AAC1D,QAAM,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,QAAMC,KAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,SAAO;AAAA,IACL,YAAY,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,GAAGA,EAAC,CAAC;AAAA,IAC3C,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,GAAGA,EAAC,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAEO,IAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAE5D,IAAM,mBAAmB,CAAC,UAAkB,QAAQ,IAAI,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO,IAAI,KAAK,GAAG;AAE9G,IAAM,kBAAkB,CAAC,QAAQ,WAAW,iBAAiB,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;AAItI,IAAM,yBAAyB,CAAC,GAAGC,OAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAGA,EAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAEzE,IAAM,MAAM,CAACC,KAAcC,QAAiB;AACjD,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAID,IAAG,QAAQ;AAAK,eAAWA,IAAG,CAAC,IAAIC,IAAG,CAAC;AAC3D,SAAO;AACT;AAEO,IAAM,qBAAqB,CAAC,KAAK,gBAAgB;AACtD,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,WAAO,KAAK,IAAI,CAAC,EAAE,WAAW,CAAC;AACpE,SAAO;AACT;AAEO,IAAM,4BAA4B,CAAC,MAAM,SAAS;AACvD,QAAM,UAAsB,CAAC;AAC7B,QAAMC,QAAO,KAAK;AAClB,WAAS,MAAM,GAAG,MAAMA,OAAM,OAAO;AACnC,YAAQ,KAAK,CAAC,CAAC;AACf,aAAS,MAAM,GAAG,MAAMA,OAAM;AAAO,cAAQ,GAAG,EAAE,KAAK,IAAI,KAAK,GAAG,GAAG,mBAAmB,MAAM,GAAG,CAAC,CAAC;AAAA,EACtG;AACA,SAAO;AACT;AAEO,IAAM,sBAAsB,CAAC,UAAU,WAAW;AACvD,QAAM,OAAO,KAAK,IAAI,QAAQ;AAC9B,QAAM,OAAO,KAAK,IAAI,QAAQ;AAC9B,QAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpE,QAAM,oBAAoB,uBAAuB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACrE,QAAM,2BAA2B,0BAA0B,mBAAmB,cAAc;AAC5F,QAAM,4BAA4B,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/E,SAAO,0BAA0B,0BAA0B,yBAAyB;AACtF;AAEO,IAAM,wBAAwB,CAAC,WAAW;AAC/C,QAAM,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAM,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACxD,QAAM,sBAAsB,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,oBAAoB,GAAG,CAAC,IAAI,kBAAkB,CAAC,GAAG,oBAAoB,CAAC;AAC/H,SAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,oBAAoB,CAAC,CAAC,GAAG,kBAAkB,CAAC,EAAE,OAAO,oBAAoB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7H;AAEO,IAAM,cAAc,CAAC,uBAAuB,mBAAmB,CAAC,IAAI,uBAAuB,eAAe,CAAC,CAAC,GAAG,IAAI,uBAAuB,eAAe,CAAC,CAAC,CAAC;AAI5J,SAAS,gBAAgBC,aAAmB;AACjD,QAAM,OAAOA,gBAAc,MACvB,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,IAC7B,EAAE,SAAS,CAACA,cAAY,IAAIA,cAAY,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAChE,QAAMC,WAA8B,CAAC;AACrC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,UAAM,SAAS,KAAK,QAAQ,CAAC;AAC7B,UAAM,WAAW,KAAK,OAAOD,cAAY,SAAS,KAAK,MAAM;AAC7D,UAAM,WAAW,KAAK,OAAOA,cAAY,SAAS,KAAK,MAAM;AAC7D,UAAM,aAAa,KAAK,QAAQ,CAAC;AACjC,aAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS;AAC7C,YAAM,UAAU,UAAU,QAAQ;AAClC,eAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS;AAC7C,cAAM,UAAU,UAAU,QAAQ;AAClC,iBAAS,IAAI,GAAG,IAAI,YAAY;AAAK,UAAAC,SAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AACA,SAAOA;AACT;AAEO,SAAS,mBAAmB,WAAW,KAAK,OAAO,gBAAgBD,aAAW;AACnF,QAAM,UAAU,WAAW,GAAG;AAC9B,QAAM,eAAe,UAAU,IAAI,CAAC,UAAW;AAAA;AAAA,IAC5C,QAAQ,CAAC,IAAIA,eAAc,MAAM,CAAC,IAAKA,cAAY;AAAA,IACnD,QAAQ,CAAC,IAAIA,eAAc,MAAM,CAAC,IAAKA,cAAY;AAAA,IACnD,MAAM,CAAC,KAAK;AAAA,EACf,CAAE;AACF,QAAM,aAAa,SAAU,UAAU,KAAO,KAAK,IAAI,KAAK,IAAI;AAChE,QAAM,uBAAuB,aAAa,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI;AAC/E,QAAM,gBAAgB,aAAa,aAAa,IAAI,CAAC,UAAW,CAAC,GAAG,YAAY,OAAO,oBAAoB,GAAG,MAAM,CAAC,CAAC,CAAE,IAAI;AAC5H,QAAM,wBAAwB,aAAa,sBAAsB,cAAc,IAAI;AACnF,QAAM,YAAY,aAAa,GAAG;AAClC,QAAM,UAAU,CAAC,IAAI,WAAW,sBAAsB,CAAC,CAAC,GAAG,IAAI,WAAW,sBAAsB,CAAC,CAAC,CAAC;AACnG,SAAO,cAAc,IAAI,CAAC,UAAW;AAAA,IACnC,KAAK,MAAM,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;AAAA,IAChC,KAAK,MAAM,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;AAAA,IAChC,KAAK,MAAM,MAAM,CAAC,KAAK,CAAC;AAAA,EAC1B,CAAE;AACJ;AAEO,SAAS,oBAAoB,QAAQ,KAAK,OAAOA,aAAW;AACjE,QAAM,eAAgB,IAAI,UAAU,UAAiB,cAAc,QACxD,cAAc,eACd,mBAAmB;AAC9B,MAAI,QAAQ;AACZ,MAAI,iBAAiB;AACrB,MAAIE;AAEJ,MAAI,UAAU,IAAI,QAAQ,SAAS,kBAAkB,GAAG;AACtD,YAAQ,gBAAgB,IAAI,UAAU,aAAa,CAAC,CAAC,GAAG,IAAI,UAAU,aAAa,CAAC,CAAC,CAAC;AACtF,UAAM,aAAa,SAAU,UAAU,KAAO,KAAK,IAAI,KAAK,IAAI;AAChE,QAAI,YAAY;AACd,YAAM,SAAgB,aAAa,GAAG;AACtC,YAAM,YAAmB,CAAC,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC;AAChF,YAAM,UAAa,GAAM,iBAAiB,OAAO,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACvF,uBAAiB,oBAAoB,CAAC,OAAO,MAAM;AACnD,MAAAA,QAAO,aAAa,KAAK,SAAS,CAACF,aAAWA,WAAS,CAAC;AACxD,MAAG,GAAQ,OAAO;AAAA,IACpB,OAAO;AACL,MAAAE,QAAO,aAAa,KAAK,OAAO,CAACF,aAAWA,WAAS,CAAC;AAAA,IACxD;AAAA,EACF,OAAO;AACL,IAAAE,QAAO,aAAa,KAAK,OAAO,CAACF,aAAWA,WAAS,CAAC;AAAA,EACxD;AACA,SAAO,CAAC,OAAO,gBAAgBE,KAAI;AACrC;AAEO,IAAM,iBAAiB,CAAC,SAAS;AACtC,QAAM,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,QAAMC,KAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAO9B,SAAO,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,GAAGA,EAAC,KAAK,KAAK,IAAI,GAAGA,EAAC,IAAI,KAAK,IAAI,GAAGA,EAAC,KAAK,CAAC;AACxH;AAEO,IAAM,mBAAmB,CAAC,MAAM,gBAAgB;AACrD,QAAM,SAAS,eAAe,IAAI;AAClC,QAAM,UAAU,WAAW,WAAW;AACtC,QAAM,gBAAgB;AAAA,IACpB,YAAY,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;AAAA,IACnE,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;AAAA,EACnE;AACA,SAAO;AACT;;;AC5NA,IAAM,iBAAiB;AACvB,IAAM,qBAAqB;AAC3B,IAAIC;AACJ,IAAI,UAAyB;AAC7B,IAAIC,aAAY;AAChB,IAAI,aAA4B;AAIzB,IAAM,OAAO,MAAMA;AAE1B,eAAsBC,MAAKC,SAAqC;AA1BhE;AA2BE,MAAI,IAAI;AAAS,IAAAH,SAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,SAAQ,MAAM,WAAU,KAAAG,QAAO,KAAK,aAAZ,mBAAsB,SAAS;AAAA,WAC1DA,QAAO;AAAO,QAAI,iBAAiBH,OAAM,UAAU,CAAC;AAC7D,EAAAC,aAAaD,OAAM,UAAU,KAAKA,OAAM,OAAO,CAAC,EAAE,QAASA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI;AACtF,eAAgB,GAAOC,YAAW,OAAO;AACzC,YAAa,GAAc,gBAAgBA,UAAS,CAAC;AACrD,SAAOD;AACT;AAEA,SAASI,aAAY,YAAoB;AACvC,MAAI,CAAC,WAAW,CAAC;AAAY,WAAU,GAAM,CAAC,GAAG,CAAC,CAAC;AACnD,QAAMC,KAA4B,CAAC;AACnC,EAAAA,GAAE,YAAe,GAAM,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,EAAAA,GAAE,UAAa,GAAIA,GAAE,WAAW,OAAO;AACvC,EAAAA,GAAE,WAAc,GAAM,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,EAAAA,GAAE,qBAAwB,GAAIA,GAAE,UAAU,UAAU;AACpD,EAAAA,GAAE,oBAAuB,GAAIA,GAAE,SAAS,UAAU;AAClD,EAAAA,GAAE,cAAiB,GAAIA,GAAE,oBAAoB,UAAU,GAAG;AAC1D,EAAAA,GAAE,SAAY,GAAIA,GAAE,mBAAmBA,GAAE,WAAW;AACpD,EAAAA,GAAE,OAAU,GAAIA,GAAE,mBAAmBA,GAAE,WAAW;AAClD,EAAAA,GAAE,kBAAqB,GAAIA,GAAE,QAAQ,UAAU;AAC/C,EAAAA,GAAE,gBAAmB,GAAIA,GAAE,MAAM,UAAU;AAC3C,QAAM,QAAW,GAAS,CAACA,GAAE,iBAA6BA,GAAE,aAAyB,GAAG,CAAC;AACzF,SAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;AAEA,eAAsB,SAAS,YAAsBF,SAAsC;AAtD3F,cAAAG,KAAAC,KAAA,IAAAC;AAwDE,MAAK,CAAC,cAAgB,WAAW,oBAAoB,KAAO,WAAW,MAAM,WAAW,KAAO,WAAW,MAAM,CAAC,IAAI,KAAO,WAAW,MAAM,CAAC,IAAI;AAAI,WAAO,CAAC;AAC9J,QAAMH,KAA4B,CAAC;AACnC,EAAAA,GAAE,UAAa,GAAM,eAAe,YAAY,CAACJ,YAAWA,UAAS,CAAC;AACtE,EAAAI,GAAE,MAAS,GAAIA,GAAE,SAAS,UAAU,KAAK;AACzC,EAAAA,GAAE,aAAgB,GAAIA,GAAE,KAAK,UAAU,IAAI;AAC3C,QAAM,MAAML,UAAA,gBAAAA,OAAO,QAAQK,GAAE;AAC7B,MAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG;AACxC,UAAM,SAAS,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI;AACjD,IAAAA,GAAE,YAAe,GAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACjD,IAAAA,GAAE,YAAe,GAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC;AACjD,IAAAA,GAAE,SAAY,GAAO,CAACA,GAAE,WAAWA,GAAE,SAAS,GAAG,CAAC;AAClD,IAAAA,GAAE,QAAW,GAAQA,GAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,EACpC,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,IAAAA,GAAE,QAAW,GAAQ,IAAI,CAAC,CAAC;AAAA,EAC7B,OAAO;AACL,IAAAA,GAAE,QAAW,GAAQ,GAAG;AAAA,EAC1B;AACA,EAAG,GAAQ,GAAG;AACd,EAAAA,GAAE,QAAQD,aAAYC,GAAE,KAAK;AAC7B,EAAAA,GAAE,SAAY,GAAMA,GAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C,EAAAA,GAAE,UAAa,GAAQA,GAAE,MAAM;AAC/B,EAAAA,GAAE,SAAY,GAAQA,GAAE,OAAO;AAC/B,EAAAA,GAAE,MAAM,MAAS,GAAM,uBAAuBA,GAAE,OAAmBA,GAAE,UAAqB,KAAAF,QAAO,KAAK,aAAZ,mBAAsB,gBAAe,KAAK,KAAAA,QAAO,KAAK,aAAZ,mBAAsB,iBAAgB,KAAKG,MAAAH,QAAO,KAAK,aAAZ,gBAAAG,IAAsB,kBAAiB,CAAE;AACxN,QAAM,MAAM,MAAMD,GAAE,IAAI,MAAM;AAC9B,QAAM,QAAqB,CAAC;AAC5B,QAAM,SAAS,MAAMA,GAAE,OAAO,KAAK;AACnC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,aAAa,OAAO,IAAI,CAAC,CAAC;AAEhC,QAAI,gBAAcE,MAAAJ,QAAO,KAAK,aAAZ,gBAAAI,IAAsB,kBAAiB,IAAI;AAC3D,YAAM,IAA4B,CAAC;AACnC,QAAE,OAAU,GAAMF,GAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC/C,QAAE,QAAW,GAAMA,GAAE,OAAO,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjE,QAAE,UAAa,GAAQ,EAAE,KAAK;AAC9B,QAAE,YAAe,EAAQ,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC;AACxD,YAAM,SAAS,MAAM,EAAE,KAAK,KAAK;AACjC,YAAM,SAAS;AAAA,QACb,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,QACjC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,QAC/B,WAAY,MAAM,EAAE,UAAU,MAAM;AAAA,QACpC;AAAA,MACF;AACA,QAAE,SAAY,GAAM,SAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAM,SAAS,MAAM,EAAE,OAAO,KAAK;AACnC,YAAM,YAAiB,oBAAoB,QAAQ,EAAE,WAAW,MAAM,CAAC,KAAK,KAAKJ,aAAY,WAAW,MAAM,CAAC,KAAK,KAAKA,UAAS,GAAG,MAAM;AAC3I,YAAM,cAAmB,WAAW,WAAWE,QAAO,KAAK,OAAO,KAAK,kBAAkB;AACzF,YAAM,aAAkB,YAAY,WAAW;AAC/C,UAAI,WAAW,KAAK,CAAC,OAAK,KAAAA,QAAO,KAAK,aAAZ,mBAAuB,eAAc,MAAM,WAAW,KAAK,CAAC,OAAKK,MAAAL,QAAO,KAAK,aAAZ,gBAAAK,IAAuB,eAAc;AAAI,cAAM,KAAK,UAAU;AACzJ,aAAO,KAAK,CAAC,EAAE,QAAQ,CAAC,WAAc,GAAQ,EAAE,MAAM,CAAC,CAAC;AAAA,IAC1D;AAAA,EACF;AACA,SAAO,KAAKH,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,SAAO;AACT;;;ACnGA,IAAII;AACJ,IAAIC,aAAY;AAEhB,IAAM,cAAc;AAEpB,IAAM,cAAqB,gBAAgB;AAC3C,IAAM,eAAsB,gBAAgB;AAE5C,IAAM,eAAe;AAAA,EACnB,YAAY,CAAC,YAAY,CAAC,GAAG,YAAY,YAAY,SAAS,CAAC,CAAC;AAAA,EAChE,aAAa,CAAC,aAAa,CAAC,GAAG,aAAa,aAAa,SAAS,CAAC,CAAC;AACtE;AAEA,IAAM,gBAAgB;AAAA,EACpB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,EACP,gBAAgB;AAClB;AAEA,eAAsBC,MAAKC,SAAqC;AA9BhE;AA+BE,MAAI,IAAI;AAAS,IAAAH,SAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,SAAQ,MAAM,WAAU,KAAAG,QAAO,KAAK,SAAZ,mBAAkB,SAAS;AAAA,WACtDA,QAAO;AAAO,QAAI,iBAAiBH,OAAM,UAAU,CAAC;AAC7D,EAAAC,cAAaD,UAAA,gBAAAA,OAAQ,kBAAe,KAAAA,OAAM,WAAN,mBAAe,GAAG,SAASA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI;AAC1F,MAAIC,eAAc;AAAI,IAAAA,aAAY;AAClC,SAAOD;AACT;AAGO,SAAS,kBAAkB,WAAW,WAAW,QAAQ,MAAM;AACpE,WAAS,IAAI,GAAG,IAAW,YAAY,QAAQ,KAAK;AAClD,UAAM,EAAE,KAAK,QAAQ,IAAW,YAAY,CAAC;AAC7C,UAAM,kBAAyB,gBAAgB,GAAG,SAAS,KAAK;AAChE,QAAI,CAAC,QAAQ,KAAK,SAAS,GAAG,GAAG;AAC/B,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,cAAMI,SAAQ,QAAQ,CAAC;AACvB,kBAAU,gBAAgB,CAAC,CAAC,IAAI;AAAA,UAC9B,UAAUA,MAAK,EAAE,CAAC;AAAA,UAClB,UAAUA,MAAK,EAAE,CAAC;AAAA,WACjB,UAAUA,MAAK,EAAE,CAAC,IAAI,UAAU,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,mCAAmC,CAAC,cAAc;AAC7D,QAAM,WAAW,UAAU,aAAa,WAAW,CAAC,CAAC,EAAE,CAAC;AACxD,QAAM,YAAY,UAAU,aAAa,YAAY,CAAC,CAAC,EAAE,CAAC;AAC1D,SAAO,WAAW;AACpB;AAGO,IAAM,YAAY,CAAC,WAAWC,OAAM,qBAAqB,qBAAqB,UAAU,OAAO,UAAU;AAC9G,QAAM,MAAW,YAAiB,WAAgB,8BAA8B,CAAC,UAAU,mBAAmB,GAAG,UAAU,mBAAmB,CAAC,CAAC,GAAG,WAAW,CAAC;AAC/J,QAAM,UAAe,WAAW,GAAG;AACnC,MAAI,OAAU,GAAM,cAAcA,OAAM,CAAC;AAAA,IACvC,IAAI,WAAW,CAAC,IAAI;AAAA,IACpB,IAAI,WAAW,CAAC,IAAI;AAAA,IAAU,IAAI,SAAS,CAAC,IAAI;AAAA,IAChD,IAAI,SAAS,CAAC,IAAI;AAAA,EACpB,CAAC,GAAG,CAAC,CAAC,GAAG,CAACJ,YAAWA,UAAS,CAAC;AAC/B,MAAI,QAAQ,IAAI,QAAQ,SAAS,eAAe,GAAG;AACjD,UAAM,UAAa,GAAM,cAAc,IAAI;AAC3C,IAAG,GAAQ,IAAI;AACf,WAAO;AAAA,EACT;AACA,SAAO,EAAE,KAAK,SAAS,KAAK;AAC9B;AAGO,IAAM,eAAe,CAAC,SAAS,QAAQ,YAAY,OAAO,UAAU;AACzE,QAAM,eAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,IAAI,cAAc,gBAAgB,KAAK;AACrD,UAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,UAAMK,KAAI,QAAQ,IAAI,IAAI,CAAC;AAC3B,UAAM,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC3B,iBAAa,KAAK;AAAA,OACf,OAAQ,IAAK,IAAIL,aAAe,IAAIA,cAAc,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC;AAAA,MACrFK,KAAIL,aAAa,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC;AAAA,MAAG;AAAA,IAC1D,CAAC;AAAA,EACH;AACA,SAAO,EAAE,WAAW,cAAc,MAAM,aAAa,MAAM,cAAc,KAAK,EAAE;AAClF;AAGO,IAAM,wBAAwB,CAAC,WAAW,YAAY,cAAc;AACzE,QAAM,eAAe,UAAiB,gBAAgB,GAAG,oBAAoB,EAAE,cAAc,WAAW,CAAC,EAAE,CAAC;AAC5G,QAAM,eAAe,UAAiB,gBAAgB,GAAG,oBAAoB,EAAE,cAAc,WAAW,CAAC,EAAE,CAAC;AAC5G,QAAM,YAAY,eAAe,gBAAgB;AAEjD,SAAO,WAAW,IAAI,CAAC,OAAO,MAAM;AAClC,QAAI,IAAI;AACR,QAAI,MAAM,GAAG;AACX,UAAI;AAAA,IACN,WAAW,MAAM,GAAG;AAClB,UAAI;AAAA,IACN;AACA,WAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAAA,EAC/B,CAAC;AACH;AAEA,eAAsB,YAAY,WAAWI,OAAM,UAAU;AAC3D,MAAI,EAACL,UAAA,gBAAAA,OAAQ;AAAa,WAAO;AACjC,QAAM,EAAE,KAAK,YAAY,SAAS,gBAAgB,MAAM,YAAY,IAAI,UAAU,WAAWK,OAAM,aAAa,WAAW,CAAC,GAAG,aAAa,WAAW,CAAC,GAAG,UAAU,IAAI;AACzK,QAAM,EAAE,KAAK,aAAa,SAAS,iBAAiB,MAAM,aAAa,IAAI,UAAU,WAAWA,OAAM,aAAa,YAAY,CAAC,GAAG,aAAa,YAAY,CAAC,GAAG,UAAU,IAAI;AAC9K,QAAM,WAAc,GAAO,CAAC,aAAa,YAAY,CAAC;AACtD,EAAG,GAAQ,WAAW;AACtB,EAAG,GAAQ,YAAY;AACvB,QAAM,iBAAiBL,OAAM,QAAQ,QAAQ;AAC7C,EAAG,GAAQ,QAAQ;AACnB,QAAM,qBAAqB,MAAM,eAAe,KAAK;AACrD,EAAG,GAAQ,cAAc;AACzB,QAAM,cAAc,mBAAmB,MAAM,GAAG,cAAc,iBAAiB,CAAC;AAChF,QAAM,EAAE,WAAW,kBAAkB,MAAM,kBAAkB,IAAI,aAAa,aAAa,YAAY,gBAAgB,IAAI;AAC3H,QAAM,eAAe,mBAAmB,MAAM,cAAc,iBAAiB,CAAC;AAC9E,QAAM,EAAE,WAAW,mBAAmB,MAAM,mBAAmB,IAAI,aAAa,cAAc,aAAa,iBAAiB,KAAK;AACjI,QAAM,gCAAgC,iCAAiC,SAAS;AAChF,MAAI,KAAK,IAAI,6BAA6B,IAAI,IAAI;AAChD,sBAAkB,WAAW,kBAAkB,QAAQ,IAAI;AAC3D,sBAAkB,WAAW,mBAAmB,SAAS,IAAI;AAAA,EAE/D,WAAW,gCAAgC,GAAG;AAC5C,sBAAkB,WAAW,kBAAkB,QAAQ,CAAC,aAAa,WAAW,CAAC;AAAA,EACnF,OAAO;AACL,sBAAkB,WAAW,mBAAmB,SAAS,CAAC,aAAa,WAAW,CAAC;AAAA,EACrF;AACA,QAAM,yBAAyB,sBAAsB,WAAW,mBAAmB,MAAM;AACzF,QAAM,0BAA0B,sBAAsB,WAAW,oBAAoB,OAAO;AAC5F,QAAM,YAAY,UAAU,OAAO,sBAAsB,EAAE,OAAO,uBAAuB;AACzF,SAAO;AACT;;;AC1IA,eAAsB,QAAQ,WAAW,SAAmB;AAH5D,cAAAO,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAA,IAAAC;AAIE,QAAMC,KAAkC;AAAA;AAAA;AAAA;AAAA,IAGtC,MAAM,QAAM,mBAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,MAApC,mBAAwC,OAAxC,mBAA4C;AAAA;AAAA,IACxD,OAAO,QAAML,OAAAD,MAAA,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAnC,gBAAAA,IAAuC,OAAvC,gBAAAC,IAA2C;AAAA;AAAA,IACxD,MAAM,QAAMC,OAAA,aAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,MAApC,mBAAwC,OAAxC,gBAAAA,IAA4C;AAAA;AAAA,IACxD,OAAO,QAAME,OAAAD,MAAA,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAnC,gBAAAA,IAAuC,OAAvC,gBAAAC,IAA2C;AAAA;AAAA,IACxD,MAAM,QAAMC,OAAA,aAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,MAApC,mBAAwC,OAAxC,gBAAAA,IAA4C;AAAA;AAAA,EAC1D;AACA,aAAW,OAAO,OAAO,OAAOC,EAAC,GAAG;AAClC,QAAI,CAAC;AAAK,aAAO;AAAA,EACnB;AAGA,QAAM,aAAuB,qCAAqC,OAAO,CAAC,MAAM,SAAS,QAAQ,UAAU,IAAI,EAAE,CAAC,GAAG,CAAC,IAAc,qCAAqC;AACzK,WAAS,IAAI,GAAG,IAAIA,GAAE,MAAM,SAAS,GAAG;AAAK,cAAU,KAAK,CAACA,GAAE,MAAM,IAAI,IAAI,CAAC,GAAGA,GAAE,MAAM,IAAI,IAAI,CAAC,GAAG,UAAU,CAAC;AAChH,QAAM,aAAuB,sCAAsC,OAAO,CAAC,MAAM,SAAS,QAAQ,UAAU,IAAI,EAAE,CAAC,GAAG,CAAC,IAAc,sCAAsC;AAC3K,WAAS,IAAI,GAAG,IAAIA,GAAE,MAAM,SAAS,GAAG;AAAK,cAAU,KAAK,CAACA,GAAE,MAAM,IAAI,IAAI,CAAC,GAAGA,GAAE,MAAM,IAAI,IAAI,CAAC,GAAG,UAAU,CAAC;AAGhH,WAAS,IAAI,GAAG,IAAIA,GAAE,KAAK,SAAS,GAAG;AAAK,cAAoB,qCAAqC,CAAC,CAAC,IAAI,CAACA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAGA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAG,UAAoB,qCAAqC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjN,WAAS,IAAI,GAAG,IAAIA,GAAE,KAAK,SAAS,GAAG;AAAK,cAAoB,sCAAsC,CAAC,CAAC,IAAI,CAACA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAGA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAG,UAAoB,sCAAsC,CAAC,CAAC,EAAE,CAAC,CAAC;AAGnN,WAAS,IAAI,GAAG,IAAIA,GAAE,KAAK,SAAS,GAAG;AAAK,cAAoB,iCAAiC,CAAC,CAAC,IAAI,CAACA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAGA,GAAE,KAAK,IAAI,IAAI,CAAC,GAAG,UAAoB,iCAAiC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzM,SAAO;AACT;;;ACPA,IAAMC,SAAQ;AAAA,EACZ,OAAO,CAAC;AAAA,EACR,SAAS,OAAO;AAAA,EAChB,WAAW;AACb;AAEA,IAAIC,SAA2B;AAC/B,IAAIC,aAAY;AAEhB,eAAsBC,SAAQ,OAAiBC,SAAuC;AAjCtF,cAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAA,IAAAC;AAmCE,QAAM,cAAY,KAAAN,QAAO,KAAK,aAAZ,mBAAsB,aAAY,KAAM,IAAI,IAAIJ,OAAM;AACxE,QAAM,YAAYA,OAAM,aAAW,KAAAI,QAAO,KAAK,aAAZ,mBAAsB,eAAc;AACvE,MAAI,CAACA,QAAO,eAAe,CAAC,YAAY,CAAC,aAAaJ,OAAM,MAAM,WAAW,GAAG;AAC9E,IAAAA,OAAM,QAAQ,MAAgB,SAAS,OAAOI,OAAM;AACpD,IAAAJ,OAAM,YAAY,IAAI;AACtB,IAAAA,OAAM,UAAU;AAAA,EAClB,OAAO;AACL,IAAAA,OAAM;AAAA,EACR;AACA,QAAM,QAAsB,CAAC;AAC7B,QAAM,WAAwB,CAAC;AAC/B,MAAIW,MAAK;AACT,QAAMC,QAAOV;AACb,WAAS,IAAI,GAAG,IAAIF,OAAM,MAAM,QAAQ,KAAK;AAC3C,UAAM,MAAMA,OAAM,MAAM,CAAC;AACzB,QAAI,QAAQ;AACZ,QAAI;AACJ,UAAMa,QAAmB;AAAA;AAAA,MACvB,IAAIF;AAAA,MACJ,MAAM,CAAC;AAAA,MACP,SAAS,CAAC;AAAA,MACV,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MAChB,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MACnB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,MAAM,CAAC,GAAG,CAAC;AAAA;AAAA;AAAA,MAGX,aAAa,CAAC;AAAA,IAChB;AAGA,KAAC,OAAO,gBAAgBE,MAAK,MAAM,IAAS,qBAAoBR,MAAAD,QAAO,KAAK,aAAZ,gBAAAC,IAAsB,UAAU,KAAK,SAAOC,MAAAF,QAAO,KAAK,SAAZ,gBAAAE,IAAkB,WAAUJ,aAAsB,KAAK,CAAC;AACpK,QAAIE,QAAO,OAAO,cAAc;AAC9B,YAAM,YAAYS,MAAK,SAAS,MAAM,sBAAsBA,MAAK,MAAM,IAAI;AAC3E,MAAG,GAAQA,MAAK,MAAM;AACtB,UAAI;AAAW,QAAAA,MAAK,SAAS;AAAA,IAC/B;AACA,IAAAA,MAAK,WAAW,KAAK,MAAM,MAAM,IAAI,UAAU,IAAI;AACnD,QAAI,GAAC,KAAAT,QAAO,KAAK,SAAZ,mBAAkB,YAAW,EAACH,UAAA,gBAAAA,OAAQ,cAAa;AACtD,MAAAY,MAAK,MAAW,SAAS,KAAK,KAAK;AACnC,MAAAA,MAAK,SAAc,UAAU,KAAK,KAAK;AACvC,MAAAA,MAAK,QAAQA,MAAK;AAClB,MAAAA,MAAK,OAAO,IAAI;AAChB,MAAAA,MAAK,OAAO,IAAI;AAChB,MAAAA,MAAK,UAAUA,MAAK,KAAK,IAAI,CAACC,QAAO,CAACA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,IAAIA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,KAAKA,IAAG,CAAC,KAAK,KAAKF,KAAI,CAAC;AACxH,iBAAW,OAAO,OAAO,KAAY,kBAAkB;AAAG,QAAAC,MAAK,YAAY,GAAG,IAAI,CAACA,MAAK,KAAY,mBAAmB,GAAG,CAAW,CAAC;AAAA,IACxI,WAAW,CAACZ,QAAO;AACjB,UAAIG,QAAO;AAAO,YAAI,wDAAwD;AAAA,IAChF,OAAO;AACL,YAAIG,MAAAH,QAAO,KAAK,cAAZ,gBAAAG,IAAuB,YAAW,CAAC,IAAI,QAAQ,SAAS,OAAO,GAAG;AACpE,QAAAH,QAAO,KAAK,UAAU,UAAU;AAChC,QAAG,GAAQS,MAAK,MAAM;AACtB,eAAO;AAAA,MACT;AACA,YAAM,UAAUZ,OAAM,QAAQY,MAAK,MAAgB;AACnD,YAAM,cAAc,QAAQ,KAAK,CAACE,OAAMA,GAAE,MAAMA,GAAE,MAAM,SAAS,CAAC,MAAM,CAAC;AACzE,YAAM,iBAAiB,MAAM,YAAY,KAAK;AAC9C,MAAAF,MAAK,YAAY,KAAK,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;AACvD,UAAIA,MAAK,eAAaL,MAAAJ,QAAO,KAAK,aAAZ,gBAAAI,IAAsB,kBAAiB,IAAI;AAC/D,YAAI,aAAaK,MAAK;AACtB,YAAIT,QAAO,KAAK,KAAK,aAAa,GAAG;AACnC,UAAAS,MAAK,MAAW,SAAS,KAAK,KAAK;AACnC,UAAAA,MAAK,SAAc,UAAU,KAAK,KAAK;AACvC,UAAAA,MAAK,OAAO,IAAI;AAChB,UAAAA,MAAK,QAAQA,MAAK;AAClB,UAAAA,MAAK,OAAO,IAAI;AAChB,UAAAA,MAAK,UAAUA,MAAK,KAAK,IAAI,CAACC,QAAO,CAACA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,IAAIA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,KAAKA,IAAG,CAAC,KAAK,KAAKF,KAAI,CAAC;AACxH,qBAAW,OAAO,OAAO,KAAY,kBAAkB,GAAG;AACxD,YAAAC,MAAK,YAAY,GAAG,IAAI,CAACA,MAAK,KAAY,mBAAmB,GAAG,CAAW,CAAC;AAAA,UAC9E;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,QAAQ,QAAQ,KAAK,CAACE,OAAMA,GAAE,MAAMA,GAAE,MAAM,SAAS,CAAC,MAAM,IAAI;AACtE,cAAM,iBAAoB,EAAQ,OAAO,CAAC,IAAI,CAAC,CAAC;AAChD,YAAI,YAAY,MAAM,eAAe,MAAM;AAC3C,QAAG,GAAQ,cAAc;AACzB,aAAIN,MAAAL,QAAO,KAAK,cAAZ,gBAAAK,IAAuB,SAAS;AAClC,sBAAY,MAAgB,QAAQ,WAAW,OAAO;AAAA,QACxD,YAAW,KAAAL,QAAO,KAAK,SAAZ,mBAAkB,SAAS;AACpC,sBAAY,MAAW,YAAY,WAAWS,MAAK,QAAQX,UAAS;AAAA,QACtE;AACA,QAAAW,MAAK,OAAY,mBAAmB,WAAW,KAAK,OAAO,gBAAgBX,UAAS;AACpF,QAAAW,MAAK,UAAUA,MAAK,KAAK,IAAI,CAACC,QAAO,CAACA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,IAAIA,IAAG,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,KAAKA,IAAG,CAAC,KAAK,KAAKF,KAAI,CAAC;AACxH,mBAAW,OAAO,OAAO,KAAY,eAAe;AAAG,UAAAC,MAAK,YAAY,GAAG,IAAW,gBAAgB,GAAG,EAAE,IAAI,CAACG,WAAUH,MAAK,KAAKG,MAAK,CAAC;AAC1I,QAAAH,MAAK,QAAQA,MAAK;AAClB,cAAM,gBAAgB;AAAA,UACpB,GAAQ,iBAAiBA,MAAK,MAAM,GAAG;AAAA,UACvC,YAAY,IAAI;AAAA,UAChB,WAAW,IAAI;AAAA,UACf,MAAM,IAAI;AAAA,QACZ;AACA,QAAAA,MAAK,MAAW,SAAS,eAAe,KAAK;AAC7C,QAAAA,MAAK,SAAc,UAAU,eAAe,KAAK;AACjD,QAAAA,MAAK,OAAO,cAAc;AAQ1B,iBAAS,KAAK,aAAa;AAAA,MAC7B;AACA,MAAG,GAAQ,OAAO;AAAA,IACpB;AACA,QAAIA,MAAK,WAASH,MAAAN,QAAO,KAAK,aAAZ,gBAAAM,IAAsB,kBAAiB;AAAI,YAAM,KAAKG,KAAI;AAAA;AACvE,MAAG,GAAQA,MAAK,MAAM;AAAA,EAC7B;AACA,EAAAb,OAAM,QAAQ;AACd,SAAO;AACT;AAEA,eAAsBiB,MAAKb,SAAqC;AArJhE,cAAAC,KAAAC,KAAA,IAAAC;AAsJE,MAAI,IAAI;AAAS,IAAAN,SAAQ;AACzB,QAAI,KAAAG,QAAO,KAAK,cAAZ,mBAAuB,aAAWH,UAAA,gBAAAA,OAAQ,eAAc;AAC1D,QAAI,OAAO,OAAK,KAAAA,UAAA,gBAAAA,OAAQ,iBAAR,mBAAsB,YAAW,CAAC,CAAC,EAAE,SAAS;AAAG,MAAAA,SAAQ;AAAA,EAC3E;AACA,MAAI,CAACA,QAAO;AACV,SAAII,MAAAD,QAAO,KAAK,cAAZ,gBAAAC,IAAuB;AAAS,MAAAJ,SAAQ,MAAM,UAAUG,QAAO,KAAK,UAAU,SAAS;AAAA;AACtF,MAAAH,SAAQ,MAAM,WAAUK,MAAAF,QAAO,KAAK,SAAZ,gBAAAE,IAAkB,SAAS;AAAA,EAC1D,WAAWF,QAAO,OAAO;AACvB,QAAI,iBAAiBH,OAAM,UAAU,CAAC;AAAA,EACxC;AACA,EAAAC,aAAaD,OAAM,UAAU,OAAK,KAAAA,UAAA,gBAAAA,OAAO,WAAP,mBAAgB,GAAG,UAASM,MAAAN,UAAA,gBAAAA,OAAO,WAAP,gBAAAM,IAAgB,GAAG,MAAM,KAAK;AAC5F,SAAON;AACT;AAEO,IAAM,gBAAuB;AAC7B,IAAM,QAAe;;;ACtJ5B,IAAI,cAAwB,CAAC;AAC7B,IAAIiB;AACJ,IAAMC,QAAgD,CAAC;AACvD,IAAI,YAAY;AAChB,IAAIC,YAAW;AACf,IAAIC,WAAU,OAAO;AACrB,IAAI,MAAM;AAEV,eAAsBC,MAAKC,SAAqC;AAvBhE,cAAAC;AAwBE,MAAI,IAAI;AAAS,IAAAN,SAAQ;AACzB,MAAI,CAACA,QAAO;AACV,IAAAA,SAAQ,MAAM,WAAU,KAAAK,QAAO,KAAK,YAAZ,mBAAqB,SAAS;AACtD,YAAMC,OAAA,KAAAN,UAAA,gBAAAA,OAAO,WAAP,mBAAgB,GAAG,UAAnB,gBAAAM,IAA2B,QAAO;AACxC,QAAI,CAAC;AAAK,oBAAc,CAAC,SAAS,WAAW,QAAQ,SAAS,OAAO,YAAY,SAAS;AAAA;AACrF,oBAAc,CAAC,SAAS,WAAW,QAAQ,SAAS,WAAW,OAAO,UAAU;AAAA,EACvF,WAAWD,QAAO,OAAO;AACvB,QAAI,iBAAiBL,OAAM,UAAU,CAAC;AAAA,EACxC;AACA,SAAOA;AACT;AAEA,eAAsBO,SAAQ,OAAiBF,SAAgB,KAAaG,QAA+D;AApC3I;AAqCE,MAAI,CAACR;AAAO,WAAO,CAAC;AACpB,QAAM,YAAYG,cAAW,KAAAE,QAAO,KAAK,YAAZ,mBAAqB,eAAc;AAChE,QAAM,cAAY,KAAAA,QAAO,KAAK,YAAZ,mBAAqB,aAAY,KAAM,IAAI,IAAIH;AACjE,MAAIG,QAAO,eAAe,YAAY,aAAc,cAAcG,UAAUP,MAAK,GAAG,KAAMA,MAAK,GAAG,EAAE,SAAS,GAAI;AAC/G,IAAAE;AACA,WAAOF,MAAK,GAAG;AAAA,EACjB;AACA,EAAAE,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AA7CxC,QAAAM,KAAAC,KAAAJ;AA8CI,UAAM,MAA6C,CAAC;AACpD,SAAIG,MAAAJ,QAAO,KAAK,YAAZ,gBAAAI,IAAqB,SAAS;AAChC,YAAME,KAA4B,CAAC;AACnC,YAAMC,eAAYZ,UAAA,gBAAAA,OAAO,OAAO,GAAG,SAAQA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI;AACtE,YAAIU,MAAAL,QAAO,KAAK,YAAZ,gBAAAK,IAAsB,WAAU,GAAG;AACrC,cAAM,QAAOJ,MAAAD,QAAO,KAAK,YAAZ,gBAAAC,IAAsB;AACnC,cAAM,MAAM,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC;AAC7C,QAAAK,GAAE,SAAY,GAAM,cAAc,OAAO,KAAK,CAAC,CAAC,GAAG,CAACC,aAAWA,WAAS,CAAC;AAAA,MAC3E,OAAO;AACL,QAAAD,GAAE,SAAY,GAAM,eAAe,OAAO,CAACC,aAAWA,WAAS,GAAG,KAAK;AAAA,MACzE;AACA,UAAI,KAAK;AACP,QAAAD,GAAE,MAAS,GAAIA,GAAE,QAAQ,GAAG;AAC5B,QAAAA,GAAE,YAAe,GAAIA,GAAE,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC;AACtD,QAAAA,GAAE,UAAUX,UAAA,gBAAAA,OAAO,QAAQW,GAAE;AAAA,MAC/B,OAAO;AAOL,QAAAA,GAAE,WAAc,GAAIA,GAAE,QAAQ,UAAU,GAAG;AAC3C,QAAAA,GAAE,YAAe,GAAIA,GAAE,UAAU,GAAG,IAAI;AACxC,QAAAA,GAAE,eAAkB,GAAIA,GAAE,WAAW,UAAU,IAAI;AACnD,QAAAA,GAAE,eAAkB,GAAIA,GAAE,cAAc,UAAU,GAAG;AACrD,QAAAA,GAAE,UAAUX,UAAA,gBAAAA,OAAO,QAAQW,GAAE;AAAA,MAC/B;AACA,MAAAT,YAAW,IAAI;AACf,YAAM,OAAO,MAAMS,GAAE,QAAQ,KAAK;AAClC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAI,KAAK,CAAC,KAAKN,QAAO,KAAK,QAAQ,iBAAiB;AAAI,cAAI,KAAK,EAAE,OAAO,KAAK,IAAI,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS,YAAY,CAAC,EAAa,CAAC;AAAA,MACjK;AACA,UAAI,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACpC,aAAO,KAAKM,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AAAA,IAC1D;AACA,IAAAV,MAAK,GAAG,IAAI;AACZ,gBAAYO;AACZ,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AClEA,IAAIK;AACJ,IAAMC,QAAkB,CAAC;AAEzB,IAAIC,YAAW;AACf,IAAIC,aAAY;AAChB,IAAIC,WAAU,OAAO;AAErB,eAAsBC,MAAKC,SAAqC;AA3BhE;AA4BE,MAAI,IAAI;AAAS,IAAAN,SAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,SAAQ,MAAM,WAAU,KAAAM,QAAO,KAAK,gBAAZ,mBAAyB,SAAS;AAAA,WAC7DA,QAAO;AAAO,QAAI,iBAAiBN,OAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEO,SAAS,QAAQ,OAAOM,SAAwB;AAlCvD;AAmCE,QAAM,SAAU,MAAM,SAAS,MAAM,UAAU;AAC/C,MAAI,EAACN,UAAA,gBAAAA,OAAO,OAAO,GAAG;AAAO,WAAO;AACpC,MAAI;AACJ,QAAI,KAAAM,QAAO,KAAK,gBAAZ,mBAA0B,WAAU,GAAG;AACzC,UAAM,WAAU,KAAAA,QAAO,KAAK,gBAAZ,mBAA0B;AAC1C,UAAM,MAAM,CAAC,CAAC,SAAS,SAAS,IAAI,SAAS,IAAI,OAAO,CAAC;AACzD,WAAU,GAAM,cAAc,QAAQ,KAAK,CAAC,CAAC,GAAG,CAACN,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,EACtG,OAAO;AACL,WAAU,GAAM,eAAe,QAAQ,CAACA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,OAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;AAAA,EACpG;AACA,QAAM,OAAkB,GAAI,MAAM,UAAU,KAAK;AACjD,EAAG,GAAQ,IAAI;AACf,SAAO;AAkBT;AAEA,eAAsBO,SAAQ,OAAiBD,SAAgB,KAAaE,QAAiC;AAnE7G,cAAAC,KAAAC;AAoEE,QAAM,MAAe;AAAA,IACnB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY,CAAC;AAAA,EACf;AACA,MAAI,EAACV,UAAA,gBAAAA,OAAQ;AAAa,WAAO;AACjC,QAAM,YAAYI,cAAW,KAAAE,QAAO,KAAK,gBAAZ,mBAAyB,eAAc;AACpE,QAAM,cAAY,KAAAA,QAAO,KAAK,gBAAZ,mBAAyB,aAAY,KAAM,IAAI,IAAIJ;AACrE,MAAII,QAAO,eAAe,aAAa,YAAaH,eAAcK,YAAWC,MAAAR,SAAA,gBAAAA,MAAO,SAAP,gBAAAQ,IAAa,OAAM,OAAOC,MAAAT,SAAA,gBAAAA,MAAO,SAAP,gBAAAS,IAAa,eAAc,GAAI;AACpI,IAAAN;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,EAAAG,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AAlFxC,QAAAO;AAmFI,SAAIA,MAAAL,QAAO,KAAK,gBAAZ,gBAAAK,IAAyB,SAAS;AACpC,YAAM,WAAW,QAAQ,OAAOL,OAAM;AACtC,YAAM,OAAON,UAAA,gBAAAA,OAAO,QAAQ;AAC5B,MAAAE,YAAW,IAAI;AACf,MAAG,GAAQ,QAAQ;AACnB,YAAM,UAAU,KAAK,KAAK,CAACU,OAAMA,GAAE,MAAM,CAAC,MAAM,CAAC;AACjD,YAAMC,UAAS,MAAM,QAAQ,KAAK;AAClC,YAAM,aAAa,KAAK,MAAM,MAAM,KAAK,IAAKA,QAAO,CAAC,IAAI,GAAI,CAAC,IAAI;AACnE,UAAI,cAAcP,QAAO,KAAK,YAAY,iBAAiB,IAAI;AAC7D,YAAI,SAASO,QAAO,CAAC,KAAK,MAAM,WAAW;AAC3C,YAAI,cAAc,KAAK,IAAI,MAAM,UAAU;AAAA,MAC7C;AACA,YAAM,SAAY,GAAO,KAAK,KAAK,CAACD,OAAMA,GAAE,MAAM,CAAC,MAAM,GAAG,GAAe,CAAC;AAC5E,YAAM,UAAkB,MAAM,OAAO,KAAK,GAAG,CAAC;AAC9C,MAAG,GAAQ,MAAM;AACjB,YAAM,OAAO,KAAK,KAAK,CAACA,OAAMA,GAAE,MAAM,CAAC,MAAM,GAAG;AAChD,YAAME,OAAM,MAAM,KAAK,KAAK;AAC5B,UAAI,MAAM,KAAK,MAAMA,KAAI,SAAS,CAAC,IAAIA,KAAI,SAAS,CAAC,IAAI,KAAK,SAAS,MAAMA,KAAI,SAAS,CAAC,IAAI,KAAK,SAAS,MAAMA,KAAI,SAAS,CAAC,CAAC,IAAI;AAEtI,UAAI,OAAO,MAAMD,QAAO,CAAC,CAAC,KAAK,OAAO,MAAMC,KAAI,CAAC,CAAC;AAAG,YAAI,kBAAkB,EAAE,OAAAd,QAAO,QAAQ,KAAK,CAAC;AAElG,YAAM,OAAO,KAAK,KAAK,CAACY,OAAMA,GAAE,MAAM,CAAC,MAAM,IAAI;AAGjD,YAAM,aAAa,OAAO,MAAM,KAAK,KAAK,IAAI,CAAC;AAC/C,UAAI,aAAa,MAAM,KAAK,UAAU;AACtC,WAAK,QAAQ,CAACA,OAAS,GAAQA,EAAC,CAAC;AAAA,IACnC;AACA,IAAAX,MAAK,GAAG,IAAI;AACZ,IAAAE,aAAYK;AACZ,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AC9GA,IAAM,aAAa;AACnB,IAAM,QAAQ;AAGd,SAAS,WAAW,GAAWO,IAAW,SAA8C;AACtF,MAAI,SAAS;AACb,MAAI,IAAI,QAAQ,SAAS;AACzB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,KAAK;AAC3C,QAAM,QAAQ,CAAC,EAAE,IAAIA,OAAQ,QAAQ,CAAC,EAAE,IAAIA,MAAQ,KAAK,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,MAAMA,KAAI,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;AAAI,eAAS,CAAC;AAAA,EACxK;AACA,SAAO;AACT;AAEA,eAAsB,KAAKC,OAA+C;AACxE,MAAI,CAACA,MAAK;AAAQ,WAAOA,MAAK;AAC9B,MAAI,CAACA,MAAK,QAAQA,MAAK,KAAK,SAAS;AAAK,WAAOA,MAAK;AACtD,QAAM,QAAQA,MAAK,OAAO,MAAM,CAAC,KAAK;AACtC,QAAM,SAASA,MAAK,OAAO,MAAM,CAAC,KAAK;AACvC,QAAM,SAAS,MAAMA,MAAK,OAAO,OAAO;AACxC,MAAI,aAAyC,CAAC;AAC9C,aAAWC,OAAM,gBAAgB;AAAY,eAAW,KAAK,EAAE,IAAID,MAAK,KAAKC,GAAE,EAAE,CAAC,IAAID,MAAK,IAAI,CAAC,KAAKA,MAAK,IAAI,CAAC,GAAG,IAAIA,MAAK,KAAKC,GAAE,EAAE,CAAC,IAAID,MAAK,IAAI,CAAC,KAAKA,MAAK,IAAI,CAAC,EAAE,CAAC;AACrK,MAAI,cAAc,aAAa;AAAG,iBAAa,WAAW,IAAI,CAACC,SAAQ,EAAE,GAAGA,IAAG,IAAI,MAAMA,IAAG,IAAI,aAAaA,IAAG,IAAI,YAAY,GAAGA,IAAG,IAAI,MAAMA,IAAG,IAAI,aAAaA,IAAG,IAAI,WAAW,EAAE;AACxL,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,aAASF,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,YAAM,SAAS,WAAW,IAAI,OAAOA,KAAI,OAAO,UAAU;AAC1D,UAAI,CAAC,QAAQ;AACX,eAAO,IAAI,QAAQ,OAAO,IAAI,GAAGA,IAAG,GAAG,CAAC,GAAG,GAAGA,IAAG,GAAG,CAAC;AACrD,eAAO,IAAI,QAAQ,OAAO,IAAI,GAAGA,IAAG,GAAG,CAAC,GAAG,GAAGA,IAAG,GAAG,CAAC;AACrD,eAAO,IAAI,QAAQ,OAAO,IAAI,GAAGA,IAAG,GAAG,CAAC,GAAG,GAAGA,IAAG,GAAG,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,OAAO,SAAS;AAE/B,SAAO;AACT;;;AC7BA,IAAIG;AACJ,IAAM,SAAmB,CAAC;AAC1B,IAAIC,WAAU,OAAO;AACrB,IAAIC,aAAY;AAChB,IAAIC,YAAW;AAEf,eAAsBC,MAAKC,SAAqC;AAjBhE;AAkBE,MAAI,IAAI;AAAS,IAAAL,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,WAAU,KAAAK,QAAO,KAAK,cAAZ,mBAAuB,SAAS;AAAA,WAC3DA,QAAO;AAAO,QAAI,iBAAiBL,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBM,SAAQ,OAAiBD,SAAgB,KAAaE,QAAgC;AAxB5G;AAyBE,MAAI,EAACP,WAAA,gBAAAA,QAAQ;AAAa,WAAO;AACjC,QAAM,cAAY,KAAAK,QAAO,KAAK,cAAZ,mBAAuB,aAAY,KAAM,IAAI,IAAIF;AACnE,QAAM,YAAYF,cAAW,KAAAI,QAAO,KAAK,cAAZ,mBAAuB,eAAc;AAClE,MAAIA,QAAO,eAAe,YAAY,aAAcH,eAAcK,UAAU,OAAO,GAAG,GAAG;AACvF,IAAAN;AACA,WAAO,OAAO,GAAG;AAAA,EACnB;AACA,EAAAA,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,UAAM,SAAY,GAAM,eAAe,OAAO,EAACD,WAAA,gBAAAA,QAAO,OAAO,GAAG,SAAQA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,IAAGA,WAAA,gBAAAA,QAAO,OAAO,GAAG,SAAQA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;AACnK,UAAM,MAAMA,WAAA,gBAAAA,QAAO,QAAQ;AAC3B,UAAM,OAAO,MAAM,IAAI,KAAK,GAAG,CAAC;AAChC,WAAO,GAAG,IAAI,KAAK,MAAM,MAAM,GAAG,IAAI;AACtC,IAAAE,aAAYK;AACZ,IAAAJ,YAAW,IAAI;AACf,IAAG,GAAQ,CAAC,QAAQ,GAAG,CAAC;AACxB,YAAQ,OAAO,GAAG,CAAC;AAAA,EACrB,CAAC;AACH;;;AChCA,IAAIK;AACJ,IAAMC,UAAmB,CAAC;AAC1B,IAAIC,WAAU,OAAO;AACrB,IAAIC,aAAY;AAChB,IAAIC,YAAW;AAEf,eAAsBC,MAAKC,SAAqC;AAjBhE;AAkBE,MAAI,IAAI;AAAS,IAAAN,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,WAAU,KAAAM,QAAO,KAAK,aAAZ,mBAAsB,SAAS;AAAA,WAC1DA,QAAO;AAAO,QAAI,iBAAiBN,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBO,SAAQ,OAAiBD,SAAgB,KAAaE,QAAgC;AAxB5G;AAyBE,MAAI,EAACR,WAAA,gBAAAA,QAAQ;AAAa,WAAO;AACjC,QAAM,cAAY,KAAAM,QAAO,KAAK,aAAZ,mBAAsB,aAAY,KAAM,IAAI,IAAIF;AAClE,QAAM,YAAYF,cAAW,KAAAI,QAAO,KAAK,aAAZ,mBAAsB,eAAc;AACjE,MAAIA,QAAO,eAAe,YAAY,aAAcH,eAAcK,UAAUP,QAAO,GAAG,GAAG;AACvF,IAAAC;AACA,WAAOD,QAAO,GAAG;AAAA,EACnB;AACA,EAAAC,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AACpC,UAAM,SAAY,GAAM,eAAe,OAAO,EAACF,WAAA,gBAAAA,QAAO,OAAO,GAAG,SAAQA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,IAAGA,WAAA,gBAAAA,QAAO,OAAO,GAAG,SAAQA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;AACnK,UAAM,MAAMA,WAAA,gBAAAA,QAAO,QAAQ;AAC3B,UAAM,OAAO,MAAM,IAAI,KAAK,GAAG,CAAC;AAChC,IAAAC,QAAO,GAAG,IAAI,KAAK,MAAM,MAAM,GAAG,IAAI;AACtC,IAAAE,aAAYK;AACZ,IAAAJ,YAAW,IAAI;AACf,IAAG,GAAQ,CAAC,QAAQ,GAAG,CAAC;AACxB,YAAQH,QAAO,GAAG,CAAC;AAAA,EACrB,CAAC;AACH;;;AC5BA,IAAIQ;AACJ,IAAMC,QAAmB,CAAC;AAC1B,IAAM,YAAY,CAAC,SAAS,SAAS,SAAS,UAAU,OAAO;AAC/D,IAAM,aAAa,CAAC,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE;AACpD,IAAIC,aAAY;AAChB,IAAIC,YAAW;AACf,IAAIC,WAAU,OAAO;AAErB,eAAsBC,OAAKC,SAAgB;AAvB3C;AAwBE,MAAI,IAAI;AAAS,IAAAN,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,WAAU,KAAAM,QAAO,KAAK,SAAZ,mBAAkB,SAAS;AAAA,WACtDA,QAAO;AAAO,QAAI,iBAAiBN,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBO,SAAQ,OAAiBD,SAAgB,KAAaE,QAAkC;AA9B9G;AA+BE,MAAI,CAACR;AAAO,WAAO,EAAE,KAAK,GAAG,QAAQ,WAAW,aAAa,GAAG,MAAM,CAAC,EAAE;AACzE,QAAM,YAAYI,cAAW,KAAAE,QAAO,KAAK,SAAZ,mBAAkB,eAAc;AAC7D,QAAM,cAAY,KAAAA,QAAO,KAAK,SAAZ,mBAAkB,aAAY,KAAM,IAAI,IAAIH;AAC9D,MAAIG,QAAO,eAAe,YAAY,aAAcJ,eAAcM,UAAUP,MAAK,GAAG,GAAG;AACrF,IAAAG;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,EAAAG,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AAvCxC,QAAAK,KAAAC,KAAAC,KAAAC;AAwCI,QAAI,EAACZ,WAAA,gBAAAA,QAAO,OAAO,GAAG;AAAO;AAC7B,UAAMa,KAA4B,CAAC;AAEnC,QAAI,MAAM,CAAC,CAAC,GAAK,KAAM,KAAM,GAAI,CAAC;AAClC,UAAIJ,MAAAH,QAAO,KAAK,SAAZ,gBAAAG,IAAmB,WAAU,GAAG;AAClC,YAAM,QAAOC,MAAAJ,QAAO,KAAK,SAAZ,gBAAAI,IAAmB;AAChC,YAAM,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC;AAAA,IACzC;AACA,IAAAG,GAAE,SAAY,GAAM,cAAc,OAAO,KAAK,CAAC,CAAC,GAAG,CAACb,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACvG,UAAM,MAAgB,EAAE,KAAK,GAAG,QAAQ,WAAW,aAAa,GAAG,MAAM,CAAC,EAAE;AAC5E,SAAIW,MAAAL,QAAO,KAAK,SAAZ,gBAAAK,IAAkB;AAAS,OAACE,GAAE,KAAKA,GAAE,QAAQA,GAAE,IAAI,IAAIb,QAAM,QAAQa,GAAE,QAAQ,CAAC,cAAc,iBAAiB,aAAa,CAAC;AACjI,UAAMC,UAAS,MAAMD,GAAE,OAAO,KAAK;AACnC,QAAI,SAASC,QAAO,CAAC,IAAIA,QAAO,CAAC,IAAI,SAAS;AAC9C,QAAI,cAAc,KAAK,MAAM,OAAOA,QAAO,CAAC,IAAIA,QAAO,CAAC,IAAIA,QAAO,CAAC,IAAIA,QAAO,CAAC,EAAE,IAAI;AACtF,UAAM,OAAO,MAAMD,GAAE,KAAK,KAAK;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAI,KAAK,CAAC,OAAKD,MAAAN,QAAO,KAAK,SAAZ,gBAAAM,IAAkB,kBAAiB;AAAM,YAAI,KAAK,KAAK,EAAE,OAAO,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,UAAU,CAAC,EAAU,CAAC;AAAA,IAC9I;AACA,QAAI,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEzC,UAAM,kBAAkB,MAAM,KAAK,MAAMC,GAAE,IAAI,KAAK,CAAC;AACrD,UAAM,YAAY,gBAAgB,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9F,QAAIE,OAAM,UAAU,CAAC,EAAE,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ;AAAK,MAAAA,QAAO,UAAU,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC,IAAIA;AACvF,QAAI,MAAM,KAAK,MAAM,KAAKA,IAAG,IAAI;AACjC,WAAO,KAAKF,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,IAAAZ,MAAK,GAAG,IAAI;AACZ,IAAAC,aAAYM;AACZ,IAAAL,YAAW,IAAI;AACf,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;ACzDA,IAAIa;AACJ,IAAMC,QAA0B,CAAC;AACjC,IAAIC,aAAY;AAChB,IAAIC,YAAW;AACf,IAAIC,WAAU,OAAO;AAErB,eAAsBC,OAAKC,SAAgB;AACzC,MAAI,IAAI;AAAS,IAAAN,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,UAAUM,QAAO,KAAK,QAAQ,EAAE,YAAY;AAAA,WAC7DA,QAAO;AAAO,QAAI,iBAAiBN,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBO,UAAQ,OAAiBD,SAAgB,KAAaE,QAAyC;AA3BrH,cAAAC,KAAAC;AA4BE,MAAI,CAACV;AAAO,WAAO,EAAE,KAAK,EAAE;AAC5B,QAAM,YAAYI,cAAW,KAAAE,QAAO,KAAK,QAAQ,MAApB,mBAAuB,eAAc;AAClE,QAAM,cAAY,KAAAA,QAAO,KAAK,QAAQ,MAApB,mBAAuB,aAAY,KAAM,IAAI,IAAIH;AACnE,MAAIG,QAAO,eAAe,aAAa,YAAaJ,eAAcM,YAAUC,MAAAR,MAAK,GAAG,MAAR,gBAAAQ,IAAW,UAAQC,MAAAT,MAAK,GAAG,MAAR,gBAAAS,IAAW,OAAM,GAAI;AAClH,IAAAN;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,EAAAG,WAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AApCxC,QAAAO,KAAAC,KAAAH;AAqCI,QAAI,EAACT,WAAA,gBAAAA,QAAO,WAAU,CAACA,QAAM,OAAO,CAAC,KAAK,CAACA,QAAM,OAAO,CAAC,EAAE;AAAO;AAClE,UAAMa,KAA4B,CAAC;AACnC,UAAIF,MAAAL,QAAO,KAAK,QAAQ,MAApB,gBAAAK,IAAwB,WAAU,GAAG;AACvC,YAAM,QAAOC,MAAAN,QAAO,KAAK,QAAQ,MAApB,gBAAAM,IAAwB;AACrC,YAAM,MAAM,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC;AAC7C,MAAAC,GAAE,SAAY,GAAM,cAAc,OAAO,KAAK,CAAC,CAAC,GAAG,CAACb,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,IACzG,OAAO;AACL,MAAAa,GAAE,SAAY,GAAM,eAAe,OAAO,CAACb,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;AAAA,IACvG;AACA,IAAAa,GAAE,UAAa,GAAIA,GAAE,QAAQ,UAAU,KAAK;AAC5C,UAAM,MAAM,EAAE,KAAK,EAAE;AACrB,SAAIJ,MAAAH,QAAO,KAAK,QAAQ,MAApB,gBAAAG,IAAuB;AAAS,MAAAI,GAAE,MAAMb,QAAM,QAAQa,GAAE,OAAO;AACnE,QAAIA,GAAE,KAAK;AACT,YAAM,OAAO,MAAMA,GAAE,IAAI,KAAK;AAC9B,UAAI,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC,IAAI;AAAA,IACvC;AACA,WAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,IAAAZ,MAAK,GAAG,IAAI;AACZ,IAAAC,aAAYM;AACZ,IAAAL,YAAW,IAAI;AACf,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AC5CA,IAAIW;AACJ,IAAMC,QAAkD,CAAC;AACzD,IAAIC,aAAY;AAChB,IAAIC,aAAW;AACf,IAAIC,YAAU,OAAO;AAGrB,IAAMC,OAAM,CAAC,QAAQ,OAAQ,KAAM;AAEnC,eAAsBC,OAAKC,SAAgB;AAxB3C;AAyBE,MAAI,IAAI;AAAS,IAAAP,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,WAAU,KAAAO,QAAO,KAAK,QAAQ,MAApB,mBAAuB,eAAe;AAAA,WACjEA,QAAO;AAAO,QAAI,iBAAiBP,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBQ,UAAQ,OAAiBD,SAAgB,KAAKE,QAAyD;AA/B7H,cAAAC,KAAAC;AAgCE,MAAI,CAACX;AAAO,WAAO,EAAE,QAAQ,WAAW,aAAa,EAAE;AACvD,QAAM,YAAYI,eAAW,KAAAG,QAAO,KAAK,QAAQ,MAApB,mBAAuB,eAAc;AAClE,QAAM,cAAY,KAAAA,QAAO,KAAK,QAAQ,MAApB,mBAAuB,aAAY,KAAM,IAAI,IAAIJ;AACnE,MAAII,QAAO,eAAe,aAAa,YAAaL,eAAcO,YAAUC,MAAAT,MAAK,GAAG,MAAR,gBAAAS,IAAW,aAAWC,MAAAV,MAAK,GAAG,MAAR,gBAAAU,IAAW,eAAc,GAAI;AAC7H,IAAAP;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,EAAAG,YAAU;AACV,SAAO,IAAI,QAAQ,OAAO,YAAY;AAxCxC,QAAAQ,KAAAC,KAAAH;AAyCI,QAAI,EAACV,WAAA,gBAAAA,QAAO,OAAO,GAAG;AAAO;AAC7B,UAAMc,KAA4B,CAAC;AACnC,UAAIF,MAAAL,QAAO,KAAK,QAAQ,MAApB,gBAAAK,IAAwB,WAAU,GAAG;AACvC,YAAM,QAAOC,MAAAN,QAAO,KAAK,QAAQ,MAApB,gBAAAM,IAAwB;AACrC,YAAM,MAAM,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC;AAC7C,MAAAC,GAAE,SAAY,GAAM,cAAc,OAAO,KAAK,CAAC,CAAC,GAAG,CAACd,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,IACzG,OAAO;AACL,MAAAc,GAAE,SAAY,GAAM,eAAe,OAAO,CAACd,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;AAAA,IACvG;AACA,IAAAc,GAAE,UAAa,GAAK,MAAM;AAlD9B,UAAAF,KAAAC;AAmDM,UAAIE;AACJ,YAAIF,OAAAD,MAAAZ,WAAA,gBAAAA,QAAO,WAAP,gBAAAY,IAAgB,GAAG,UAAnB,gBAAAC,IAA2B,QAAO,GAAG;AACvC,cAAM,CAAC,KAAK,OAAO,IAAI,IAAO,GAAMC,GAAE,QAAQ,GAAG,CAAC;AAClD,cAAM,UAAa,GAAI,KAAKT,KAAI,CAAC,CAAC;AAClC,cAAM,YAAe,GAAI,OAAOA,KAAI,CAAC,CAAC;AACtC,cAAM,WAAc,GAAI,MAAMA,KAAI,CAAC,CAAC;AACpC,cAAM,YAAe,GAAK,CAAC,SAAS,WAAW,QAAQ,CAAC;AACxD,QAAAU,aAAe,GAAO,GAAI,WAAW,UAAU,IAAI,GAAG,CAAC;AAAA,MACzD,OAAO;AACL,QAAAA,aAAe,GAAO,GAAID,GAAE,QAAQ,UAAU,IAAI,GAAG,CAAC;AAAA,MACxD;AACA,aAAOC;AAAA,IACT,CAAC;AACD,UAAM,MAA+C,EAAE,QAAQ,WAAW,aAAa,EAAE;AACzF,SAAIL,MAAAH,QAAO,KAAK,QAAQ,MAApB,gBAAAG,IAAuB;AAAS,MAAAI,GAAE,SAASd,QAAM,QAAQc,GAAE,OAAO;AACtE,UAAM,OAAO,MAAMA,GAAE,OAAO,KAAK;AACjC,QAAI,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,WAAW;AAC5C,QAAI,cAAc,KAAK,CAAC,IAAI,KAAK,CAAC,IAAK,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,MAAQ,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;AACvG,WAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AACxD,IAAAb,MAAK,GAAG,IAAI;AACZ,IAAAC,aAAYO;AACZ,IAAAN,aAAW,IAAI;AACf,YAAQ,GAAG;AAAA,EACb,CAAC;AACH;;;AC5DA,IAAIa;AACJ,IAAMC,QAAmB,CAAC;AAC1B,IAAIC,aAAY;AAChB,IAAIC,aAAW;AACf,IAAIC,YAAU,OAAO;AAErB,eAAsBC,OAAKC,SAAqC;AArBhE;AAsBE,MAAI,IAAI;AAAS,IAAAN,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,WAAU,KAAAM,QAAO,KAAK,eAAe,MAA3B,mBAA8B,SAAS;AAAA,WAClEA,QAAO;AAAO,QAAI,iBAAiBN,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAoBA,eAAsBO,UAAQ,OAAiBD,SAAgB,KAAKE,QAA0B;AA9C9F;AA+CE,MAAI,EAACR,WAAA,gBAAAA,QAAQ;AAAa,WAAO,CAAC;AAClC,QAAM,YAAYI,eAAW,KAAAE,QAAO,KAAK,eAAe,MAA3B,mBAA8B,eAAc;AACzE,QAAM,cAAY,KAAAA,QAAO,KAAK,eAAe,MAA3B,mBAA8B,aAAY,KAAM,IAAI,IAAIH;AAC1E,MAAIG,QAAO,eAAe,YAAY,aAAcJ,eAAcM,UAAUP,MAAK,GAAG,GAAG;AACrF,IAAAG;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,SAAO,IAAI,QAAQ,OAAO,YAAY;AAtDxC,QAAAQ;AAuDI,QAAI,OAAiB,CAAC;AACtB,UAAIA,MAAAH,QAAO,KAAK,eAAe,MAA3B,gBAAAG,IAA8B,aAAWT,WAAA,gBAAAA,QAAO,OAAO,GAAG,QAAO;AACnE,YAAMU,KAA4B,CAAC;AACnC,MAAAA,GAAE,OAAU,GAAM,eAAe,OAAO,CAACV,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;AAInG,MAAAU,GAAE,OAAOV,QAAM,QAAQU,GAAE,IAAI;AAa7B,YAAM,SAAS,MAAMA,GAAE,KAAK,KAAK;AACjC,aAAO,MAAM,KAAK,MAAM;AACxB,aAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AAAA,IAC1D;AACA,IAAAT,MAAK,GAAG,IAAI;AACZ,IAAAC,aAAYM;AACZ,IAAAL,aAAW,IAAI;AACf,YAAQ,IAAI;AAAA,EACd,CAAC;AACH;;;ACrEA,IAAIQ;AACJ,IAAMC,QAAmB,CAAC;AAC1B,IAAIC,aAAY;AAChB,IAAIC,aAAW;AACf,IAAIC,YAAU,OAAO;AAErB,eAAsBC,OAAKC,SAAqC;AAC9D,MAAI,IAAI;AAAS,IAAAN,UAAQ;AACzB,MAAI,CAACA;AAAO,IAAAA,UAAQ,MAAM,UAAUM,QAAO,KAAK,aAAa,EAAE,SAAS;AAAA,WAC/DA,QAAO;AAAO,QAAI,iBAAiBN,QAAM,UAAU,CAAC;AAC7D,SAAOA;AACT;AAEA,eAAsBO,UAAQ,OAAiBD,SAAgB,KAAKE,QAA0B;AA5B9F;AA6BE,MAAI,EAACR,WAAA,gBAAAA,QAAQ;AAAa,WAAO,CAAC;AAClC,QAAM,YAAYI,eAAW,KAAAE,QAAO,KAAK,aAAa,MAAzB,mBAA4B,eAAc;AACvE,QAAM,cAAY,KAAAA,QAAO,KAAK,aAAa,MAAzB,mBAA4B,aAAY,KAAM,IAAI,IAAIH;AACxE,MAAIG,QAAO,eAAe,YAAY,aAAcJ,eAAcM,UAAUP,MAAK,GAAG,GAAG;AACrF,IAAAG;AACA,WAAOH,MAAK,GAAG;AAAA,EACjB;AACA,SAAO,IAAI,QAAQ,OAAO,YAAY;AApCxC,QAAAQ;AAqCI,QAAI,OAAiB,CAAC;AACtB,UAAIA,MAAAH,QAAO,KAAK,aAAa,MAAzB,gBAAAG,IAA4B,aAAWT,WAAA,gBAAAA,QAAO,OAAO,GAAG,QAAO;AACjE,YAAMU,KAA4B,CAAC;AACnC,MAAAA,GAAE,OAAU,GAAM,eAAe,OAAO,CAACV,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,GAAGA,QAAM,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK;AAInG,MAAAU,GAAE,OAAOV,QAAM,QAAQU,GAAE,IAAI;AAC7B,YAAM,SAAS,MAAMA,GAAE,KAAK,KAAK;AACjC,aAAO,MAAM,KAAK,MAAM;AACxB,aAAO,KAAKA,EAAC,EAAE,QAAQ,CAAC,WAAc,GAAQA,GAAE,MAAM,CAAC,CAAC;AAAA,IAC1D;AACA,IAAAT,MAAK,GAAG,IAAI;AACZ,IAAAC,aAAYM;AACZ,IAAAL,aAAW,IAAI;AACf,YAAQ,IAAI;AAAA,EACd,CAAC;AACH;;;AClDA,IAAM,gBAAgB,CAACQ,UAA4D;AACjF,QAAM,UAAU,CAAC,KAAY,QAAe,KAAK,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AACvF,MAAI,CAACA,MAAK,YAAY,gBAAgB,CAACA,MAAK,YAAY;AAAa,WAAO,EAAE,SAAS,GAAG,UAAU,EAAE;AAEtG,QAAM,aAAa,CAAC,GAAG,IAAI;AAC3B,QAAM,WAAW;AAEjB,QAAM,QAAQA,MAAK,KAAK,EAAE,EAAE,CAAC,KAAK,MAAMA,MAAK,KAAK,GAAG,EAAE,CAAC,KAAK;AAC7D,QAAM,aAAa,OAAOA,MAAK,KAAK,GAAG,IAAIA,MAAK,KAAK,GAAG;AACxD,QAAM,YAAY,OACd,EAAEA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,EAAE,EAAE,CAAC,KAAK,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IACvF,EAAEA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,KAAK,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AAC7F,QAAM,UAAU,OACZ,CAACA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,EAAE,EAAE,CAAC,GAAGA,MAAK,KAAK,EAAE,EAAE,CAAC,IAAIA,MAAK,KAAK,EAAE,EAAE,CAAC,CAAC,IAC1E,CAACA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,GAAGA,MAAK,KAAK,GAAG,EAAE,CAAC,IAAIA,MAAK,KAAK,GAAG,EAAE,CAAC,CAAC;AACjF,QAAM,UAAiB;AAAA;AAAA,KACpB,UAAU,CAAC,IAAI,WAAW,CAAC,KAAK,QAAQ,CAAC,IAAI,WAAW,CAAC;AAAA,IAC1D,YAAY,WAAW,CAAC,IAAI,UAAU,CAAC,KAAK,QAAQ,CAAC,IAAI,WAAW,CAAC;AAAA,EACvE;AACA,MAAI,WAAW,KAAK,KAAM,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAM,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAE;AAC9E,aAAW,KAAK,IAAI,UAAUA,MAAK,OAAO,CAAC,IAAI,GAAGA,MAAK,OAAO,CAAC,IAAI,CAAC;AACpE,QAAM,WAAW,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,IAAK,KAAK,KAAK,KAAM,KAAK;AAClE,SAAO,EAAE,SAAS,SAAS;AAC7B;AAEO,IAAM,qBAAqB,CAACA,OAAkB,cAIhD;AAEH,QAAMC,aAAY,CAACC,QAAsB;AACvC,UAAM,SAAS,KAAK,KAAKA,IAAE,CAAC,IAAIA,IAAE,CAAC,IAAIA,IAAE,CAAC,IAAIA,IAAE,CAAC,IAAIA,IAAE,CAAC,IAAIA,IAAE,CAAC,CAAC;AAChE,IAAAA,IAAE,CAAC,KAAK;AACR,IAAAA,IAAE,CAAC,KAAK;AACR,IAAAA,IAAE,CAAC,KAAK;AACR,WAAOA;AAAA,EACT;AACA,QAAM,aAAa,CAAC,GAAW,MAAsB;AACnD,UAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACpB,UAAMC,KAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACpB,UAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACpB,WAAO,CAAC,GAAGA,IAAG,CAAC;AAAA,EACjB;AACA,QAAM,eAAe,CAAC,GAAW,MAAsB;AACrD,UAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAClC,UAAMA,KAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAClC,UAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAClC,WAAO,CAAC,GAAGA,IAAG,CAAC;AAAA,EACjB;AAEA,QAAM,6BAA6B,CAAC,MAA8D;AAChG,UAAM,CAAC,KAAK,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI;AACxD,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,MAAM,GAAG;AACX,UAAI,MAAM,IAAI;AACZ,iBAAS,KAAK,KAAK,GAAG;AACtB,iBAAS,KAAK,MAAM,CAAC,KAAK,GAAG;AAC7B,iBAAS,KAAK,MAAM,CAAC,KAAK,GAAG;AAAA,MAC/B,OAAO;AACL,iBAAS,CAAC,KAAK,KAAK;AACpB,iBAAS,CAAC,KAAK,MAAM,KAAK,GAAG;AAC7B,iBAAS;AAAA,MACX;AAAA,IACF,OAAO;AACL,eAAS,KAAK,KAAK;AACnB,eAAS,KAAK,MAAM,KAAK,GAAG;AAC5B,eAAS;AAAA,IACX;AACA,QAAI,OAAO,MAAM,MAAM;AAAG,eAAS;AACnC,QAAI,OAAO,MAAM,MAAM;AAAG,eAAS;AACnC,QAAI,OAAO,MAAM,MAAM;AAAG,eAAS;AACnC,WAAO,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,OAAO;AAAA,EACnE;AAcA,QAAM,OAAOH,MAAK;AAClB,MAAI,CAAC,QAAQ,KAAK,SAAS;AAAK,WAAO,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,GAAG,UAAU,EAAE,EAAE;AAEtJ,QAAMI,QAAO,KAAK,IAAIJ,MAAK,OAAO,CAAC,IAAI,UAAU,CAAC,GAAGA,MAAK,OAAO,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI;AAEtF,QAAM,MAAe,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,CAACK,QAAO,CAACA,IAAG,CAAC,IAAI,UAAU,CAAC,IAAID,OAAMC,IAAG,CAAC,IAAI,UAAU,CAAC,IAAID,OAAMC,IAAG,CAAC,CAAC,CAAU;AAEvJ,QAAM,QAAQJ,WAAU,WAAW,IAAI,CAAC,GAAa,IAAI,CAAC,CAAW,CAAC;AACtE,MAAI,QAAQA,WAAU,WAAW,IAAI,CAAC,GAAa,IAAI,CAAC,CAAW,CAAC;AACpE,QAAM,QAAQA,WAAU,aAAa,OAAO,KAAK,CAAC;AAElD,UAAQ,aAAa,OAAO,KAAK;AAIjC,QAAM,SAAmF;AAAA,IACvF,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,IAC3B,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,IAC3B,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,IAAG,MAAM,CAAC;AAAA,EAC7B;AACA,QAAM,QAAQ,2BAA2B,MAAM;AAI/C,QAAM,OAAO,KAAK,WAAW,MAAM,cAAcD,KAAI,IAAI,EAAE,SAAS,GAAG,UAAU,EAAE;AAEnF,SAAO,EAAE,OAAO,QAAQ,KAAK;AAC/B;;;ACtHO,SAAS,wBAAwBM,OAAkB,OAAuB;AAG/E,QAAM,IAAIA,SAAA,gBAAAA,MAAM;AAChB,MAAI,EAAC,uBAAG,gBAAe,EAAC,uBAAG;AAAc,WAAO;AAEhD,QAAM,WAAW,KAAK,IAAI,KAAK,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;AAExI,QAAM,iBAAiB,KAAK,MAAM,OAAO,QAAQ,IAAI;AACrD,SAAO;AACT;;;ACeO,IAAM,aAAa,OAAO,UAAyC,UAA2C;AA3BrH,cAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC,KAAA,IAAAC,KAAA,IAAAC,KAAA,IAAAC,KAAAC,KAAA,IAAAC,KAAAC,KAAAC;AA6BE,MAAI,YAAoB,IAAI;AAC5B,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,UAAwB,CAAC;AAC/B,WAAS,QAAQ;AACjB,QAAM,QAAsB,MAAeC,SAAQ,OAAO,SAAS,MAAM;AACzE,WAAS,YAAY,OAAO,IAAI,WAAW,SAAS,YAAY,QAAQ,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AACzI,MAAI,CAAC,MAAM,SAAS,MAAM,MAAM,WAAW;AAAG,WAAO,CAAC;AACtD,MAAI,CAAC;AAAO,WAAO,CAAC;AAEpB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,aAAS,QAAQ,UAAU;AAI3B,QAAI,CAAC,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,EAAE,OAAO,oBAAoB;AAC1D,UAAI,4BAA4B,MAAM,CAAC,EAAE,MAAM;AAC/C;AAAA,IACF;AAGA,SAAI,cAAS,OAAO,KAAK,aAArB,mBAA+B,MAAM;AACvC,YAAM,SAAS,MAAW,KAAK,MAAM,CAAC,CAAC;AACvC,MAAG,GAAQ,MAAM,CAAC,EAAE,MAAM;AAC1B,UAAI;AAAQ,cAAM,CAAC,EAAE,SAAS;AAAA,IAChC;AAGA,UAAM,WAAW,MAAM,CAAC,EAAE,QAAS,MAAM,CAAC,EAAE,KAAK,SAAS,MAAO,mBAAmB,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI;AAGlI,aAAS,QAAQ,gBAAgB;AACjC,QAAI,SAAS,OAAO,OAAO;AACzB,qBAAa,cAAS,OAAO,KAAK,YAArB,mBAA8B,WAAkBA,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI,CAAC;AAAA,IAC1J,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,qBAAaf,MAAA,SAAS,OAAO,KAAK,YAArB,gBAAAA,IAA8B,WAAU,MAAce,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI,CAAC;AAC9J,eAAS,YAAY,UAAU,IAAI,WAAW,SAAS,YAAY,WAAW,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACjJ;AACA,aAAS,QAAQ,cAAc;AAG/B,aAAS,QAAQ,kBAAkB;AACnC,QAAI,SAAS,OAAO,OAAO;AACzB,uBAAed,MAAA,SAAS,OAAO,KAAK,cAArB,gBAAAA,IAAgC,WAAoBc,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IAC/J,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,uBAAe,cAAS,OAAO,KAAK,cAArB,mBAAgC,WAAU,MAAgBA,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AACnK,eAAS,YAAY,YAAY,IAAI,WAAW,SAAS,YAAY,aAAa,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACrJ;AACA,aAAS,QAAQ,gBAAgB;AAGjC,aAAS,QAAQ,iBAAiB;AAClC,QAAI,SAAS,OAAO,OAAO;AACzB,sBAAcb,MAAA,SAAS,OAAO,KAAK,aAArB,gBAAAA,IAA+B,WAAmBa,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IAC5J,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,sBAAcZ,MAAA,SAAS,OAAO,KAAK,aAArB,gBAAAA,IAA+B,WAAU,MAAeY,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAChK,eAAS,YAAY,WAAW,IAAI,WAAW,SAAS,YAAY,aAAa,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACpJ;AACA,aAAS,QAAQ,eAAe;AAGhC,aAAS,QAAQ,aAAa;AAC9B,QAAI,SAAS,OAAO,OAAO;AACzB,kBAAUX,MAAA,SAAS,OAAO,KAAK,SAArB,gBAAAA,IAA2B,WAAeW,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IAChJ,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,kBAAU,cAAS,OAAO,KAAK,SAArB,mBAA2B,WAAU,MAAWA,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AACpJ,eAAS,YAAY,OAAO,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IAC1D;AACA,aAAS,QAAQ,WAAW;AAG5B,aAAS,QAAQ,eAAe;AAChC,QAAI,SAAS,OAAO,OAAO;AACzB,iBAASV,MAAA,SAAS,OAAO,KAAK,QAAQ,MAA7B,gBAAAA,IAAgC,WAAoBU,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AACvJ,oBAAYT,MAAA,SAAS,OAAO,KAAK,QAAQ,MAA7B,gBAAAA,IAAgC,WAAuBS,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IAC/J,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,iBAASR,MAAA,SAAS,OAAO,KAAK,QAAQ,MAA7B,gBAAAA,IAAgC,WAAU,MAAgBQ,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAC7J,oBAAY,cAAS,OAAO,KAAK,QAAQ,MAA7B,mBAAgC,WAAU,MAAmBA,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AACnK,eAAS,YAAY,SAAS,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IAC5D;AACA,aAAS,QAAQ,aAAa;AAG9B,aAAS,QAAQ,sBAAsB;AACvC,QAAI,SAAS,OAAO,OAAO;AACzB,2BAAmBP,MAAA,SAAS,OAAO,KAAK,eAAe,MAApC,gBAAAA,IAAuC,WAAwBO,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IAC9K,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,2BAAmB,cAAS,OAAO,KAAK,eAAe,MAApC,mBAAuC,WAAU,MAAoBA,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAClL,eAAS,YAAY,gBAAgB,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACnE;AACA,aAAS,QAAQ,oBAAoB;AAGrC,aAAS,QAAQ,oBAAoB;AACrC,QAAI,SAAS,OAAO,OAAO;AACzB,yBAAiBN,MAAA,SAAS,OAAO,KAAK,aAAa,MAAlC,gBAAAA,IAAqC,WAAsBM,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAAA,IACxK,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,yBAAiB,cAAS,OAAO,KAAK,aAAa,MAAlC,mBAAqC,WAAU,MAAkBA,UAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM,IAAI;AAC5K,eAAS,YAAY,gBAAgB,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACnE;AACA,aAAS,QAAQ,kBAAkB;AAGnC,aAAS,QAAQ,oBAAoB;AACrC,QAAI,SAAS,OAAO,OAAO;AACzB,gBAAkBA,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM;AAAA,IAC1G,OAAO;AACL,eAAS,QAAQ;AACjB,kBAAY,IAAI;AAChB,gBAAU,MAAcA,SAAQ,MAAM,CAAC,EAAE,UAAyB,GAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,MAAM,MAAM;AAC9G,eAAS,YAAY,cAAc,IAAI,WAAW,SAAS,YAAY,eAAe,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,IACzJ;AACA,aAAS,QAAQ,kBAAkB;AAGnC,QAAI,SAAS,OAAO,OAAO;AACzB,OAAC,QAAQ,WAAW,YAAY,kBAAkB,gBAAgB,SAAS,SAAS,cAAc,WAAW,IAAI,MAAM,QAAQ,IAAI,CAAC,QAAQ,WAAW,YAAY,kBAAkB,gBAAgB,SAAS,SAAS,cAAc,WAAW,CAAC;AAAA,IACnP;AACA,aAAS,QAAQ,cAAc;AAE/B,UAAIL,MAAA,SAAS,OAAO,KAAK,QAAQ,MAA7B,gBAAAA,IAAgC,YAAW,UAAU,WAAW;AAClE,gBAAU;AAAA,QACR,GAAI;AAAA,QACJ,KAAM,OAA0B;AAAA,QAChC,QAAS,UAAsD;AAAA,QAC/D,aAAc,UAAsD;AAAA,MACtE;AAAA,IACF;AACA,UAAIC,MAAA,SAAS,OAAO,KAAK,SAArB,gBAAAA,IAA2B,YAAW,SAAS;AACjD,gBAAU;AAAA,QACR,GAAI;AAAA,QACJ,KAAM,QAA0B;AAAA,QAChC,QAAS,QAA0B;AAAA,QACnC,aAAc,QAA0B;AAAA,QACxC,MAAO,QAA0B;AAAA,MACnC;AAAA,IACF;AACA,UAAI,cAAS,OAAO,KAAK,eAAe,MAApC,mBAAuC,YAAW,kBAAkB;AACtE,MAAC,QAAoB,aAAa;AAAA,IACpC;AAEA,UAAIC,MAAA,SAAS,OAAO,KAAK,aAAa,MAAlC,gBAAAA,IAAqC,YAAW,gBAAgB;AAClE,MAAC,QAAoB,aAAa;AAAA,IACpC;AAEA,UAAM,aAAWC,MAAA,SAAS,OAAO,KAAK,SAArB,gBAAAA,IAA2B,WAAU,wBAAwB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,IAAI;AAG1G,UAAM,WAASC,MAAA,SAAS,OAAO,KAAK,aAArB,gBAAAA,IAA+B,UAAY,GAAQ,MAAM,CAAC,EAAE,MAAkB,IAAI;AAEjG,IAAG,GAAQ,MAAM,CAAC,EAAE,MAAM;AAE1B,QAAI,MAAM,CAAC,EAAE;AAAQ,aAAO,MAAM,CAAC,EAAE;AAErC,UAAM,MAAkB;AAAA,MACtB,GAAG,MAAM,CAAC;AAAA,MACV,IAAI;AAAA,IACN;AACA,QAAK,QAAoB;AAAK,UAAI,MAAO,QAAoB;AAC7D,QAAK,QAAoB;AAAQ,UAAI,SAAU,QAAoB;AACnE,QAAK,QAAoB;AAAa,UAAI,cAAe,QAAoB;AAC7E,QAAK,QAAoB;AAAY,UAAI,YAAa,QAAoB;AAC1E,QAAK,QAAoB;AAAM,UAAI,OAAQ,QAAoB;AAC/D,QAAI;AAAY,UAAI,UAAU;AAC9B,QAAI;AAAc,UAAI,OAAO;AAC7B,QAAI;AAAa,UAAI,OAAO;AAC5B,QAAI,WAAW;AAAG,UAAI,WAAW;AACjC,QAAI;AAAU,UAAI,WAAW;AAC7B,QAAI;AAAQ,UAAI,SAAS;AACzB,YAAQ,KAAK,GAAG;AAChB,aAAS,QAAQ,UAAU;AAAA,EAC7B;AACA,WAAS,QAAQ,eAAe;AAChC,MAAI,SAAS,OAAO,OAAO;AACzB,QAAI,SAAS,YAAY;AAAM,aAAO,SAAS,YAAY;AAC3D,QAAI,SAAS,YAAY;AAAK,aAAO,SAAS,YAAY;AAC1D,QAAI,SAAS,YAAY;AAAQ,aAAO,SAAS,YAAY;AAC7D,QAAI,SAAS,YAAY;AAAS,aAAO,SAAS,YAAY;AAAA,EAChE;AACA,SAAO;AACT;;;AClOO,IAAM,SAAS;AAAA,EACpB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACnB,aAAa,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1E,eAAe;AAAA,IACb,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,IAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,IAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IACvC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IACzC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,EAC3C;AAAA,EACA,SAAS,CAAC,UAAU,OAAO,YAAY,KAAK;AAAA,EAC5C,WAAW,CAAC,UAAU,OAAO,cAAc,KAAK;AAClD;AAEO,IAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO;AAAA,EAC/C,SAAS,CAAC,UAAU,WAAW,YAAY,KAAK;AAClD;AAEO,IAAM,kBAAkB;AAAA,EAC7B,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,aAAa,EAAE,GAAG,cAAc,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,mBAAmB;AAAA,EACvL,SAAS,CAAC,UAAU,gBAAgB,YAAY,KAAK;AACvD;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAOzB,YAAY,MAAM;AANlB;AACA;AACA;AACA;AACA;AAIE,SAAK,OAAO;AACZ,SAAK,QAAQ,CAAC;AACd,SAAK,aAAa,CAAC;AACnB,SAAK,UAAU,CAAC,GAAK,GAAK,GAAK,GAAK,CAAG;AACvC,SAAK,kBAAkB,CAAC,GAAK,GAAK,GAAK,GAAK,CAAG;AAAA,EACjD;AAAA,EAEA,KAAK,QAAQ,MAAM,YAAY;AAC7B,QAAI,OAAO,KAAK,MAAM,MAAM,MAAM;AAAa,WAAK,MAAM,MAAM,IAAI,CAAC;AACrE,SAAK,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,UAAU,CAAC;AAAA,EAC5C;AAAA,EAEA,UAAU,QAAQ,UAAU,YAAY;AACtC,QAAI,CAAC,KAAK,WAAW,MAAM;AAAG,WAAK,WAAW,MAAM,IAAI,CAAC;AACzD,SAAK,WAAW,MAAM,EAAE,KAAK,CAAC,UAAU,UAAU,CAAC;AAAA,EACrD;AAAA,EAEA,OAAO,QAAQ,QAAQ;AACrB,SAAK,QAAQ,MAAM,IAAI;AAEvB,UAAM,QAAQ,KAAK,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACpD,SAAK,kBAAkB,KAAK,QAAQ,IAAI,CAACE,QAAOA,MAAK,IAAI,KAAK;AAAA,EAChE;AAAA,EAEA,aAAa,eAAe,oBAAoB;AAC9C,QAAI,aAAa;AAGjB,eAAW,aAAa,eAAe;AACrC,YAAM,eAAe,cAAc,SAAS;AAC5C,YAAM,gBAAgB,KAAK,MAAM,SAAS;AAC1C,UAAI,OAAO,kBAAkB,aAAa;AAGxC,sBAAc,KAAK,gBAAgB,SAAS;AAC5C;AAAA,MACF;AAEA,iBAAW,CAAC,cAAc,KAAK,KAAK,eAAe;AACjD,YAAI,iBAAiB,cAAc;AACjC,wBAAc,QAAQ,KAAK,gBAAgB,SAAS;AACpD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,eAAW,aAAa,oBAAoB;AAC1C,YAAM,oBAAoB,mBAAmB,SAAS;AACtD,YAAM,qBAAqB,KAAK,WAAW,SAAS;AACpD,UAAI,OAAO,uBAAuB,aAAa;AAG7C,sBAAc,KAAK,gBAAgB,SAAS;AAC5C;AAAA,MACF;AAEA,iBAAW,CAAC,mBAAmB,KAAK,KAAK,oBAAoB;AAC3D,YAAI,sBAAsB,mBAAmB;AAC3C,wBAAc,QAAQ,KAAK,gBAAgB,SAAS;AACpD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,aAAa;AAAA,EACtB;AACF;;;ACvHO,IAAM,EAAE,OAAO,OAAO,QAAQ,MAAM,MAAM,IAAI;AAC9C,IAAM,EAAE,MAAM,MAAM,KAAK,IAAI;AAC7B,IAAM,EAAE,YAAY,cAAc,gBAAgB,iBAAiB,iBAAiB,gBAAgB,mBAAmB,iBAAiB,IAAI;AAGnJ,IAAM,WAAW,IAAI,cAAc,WAAW;AAC9C,SAAS,KAAK,OAAO,MAAM,CAAG;AAC9B,SAAS,UAAU,OAAO,YAAY,CAAG;AACzC,SAAS,UAAU,OAAO,gBAAgB,IAAI;AAC9C,SAAS,UAAU,OAAO,iBAAiB,IAAI;AAC/C,WAAW,UAAU,CAAC,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,GAAG;AAC7E,WAAS,KAAK,QAAQ,MAAM,CAAG;AAC/B,WAAS,UAAU,QAAQ,gBAAgB,CAAG;AAC9C,WAAS,UAAU,QAAQ,iBAAiB,CAAG;AACjD;AAGA,IAAM,UAAU,IAAI,cAAc,SAAS;AAC3C,QAAQ,KAAK,OAAO,MAAM,GAAG;AAC7B,QAAQ,KAAK,OAAO,MAAM,GAAG;AAC7B,QAAQ,UAAU,OAAO,YAAY,CAAG;AACxC,QAAQ,UAAU,OAAO,gBAAgB,CAAG;AAC5C,QAAQ,KAAK,OAAO,MAAM,CAAG;AAC7B,QAAQ,UAAU,OAAO,YAAY,IAAI;AACzC,QAAQ,UAAU,OAAO,gBAAgB,CAAG;AAC5C,QAAQ,KAAK,QAAQ,MAAM,CAAG;AAC9B,QAAQ,UAAU,QAAQ,YAAY,CAAG;AACzC,QAAQ,UAAU,QAAQ,gBAAgB,IAAI;AAC9C,QAAQ,KAAK,MAAM,MAAM,CAAG;AAC5B,QAAQ,UAAU,MAAM,YAAY,GAAG;AACvC,QAAQ,UAAU,MAAM,gBAAgB,CAAG;AAC3C,QAAQ,UAAU,MAAM,gBAAgB,GAAG;AAC3C,QAAQ,KAAK,OAAO,MAAM,CAAG;AAC7B,QAAQ,UAAU,OAAO,YAAY,GAAG;AACxC,QAAQ,UAAU,OAAO,gBAAgB,CAAG;AAC5C,QAAQ,UAAU,OAAO,gBAAgB,GAAG;AAC5C,QAAQ,OAAO,OAAO,CAAC;AACvB,QAAQ,OAAO,QAAQ,CAAC;AAGxB,IAAM,QAAQ,IAAI,cAAc,OAAO;AACvC,MAAM,KAAK,OAAO,MAAM,CAAG;AAC3B,MAAM,KAAK,OAAO,MAAM,GAAG;AAC3B,MAAM,KAAK,QAAQ,MAAM,GAAG;AAC5B,MAAM,KAAK,MAAM,MAAM,GAAG;AAC1B,MAAM,KAAK,OAAO,MAAM,GAAG;AAC3B,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,OAAO,QAAQ,CAAC;AAGtB,IAAM,eAAe,IAAI,cAAc,eAAe;AACtD,aAAa,KAAK,OAAO,MAAM,CAAG;AAClC,aAAa,KAAK,OAAO,MAAM,GAAG;AAClC,aAAa,KAAK,QAAQ,MAAM,GAAG;AACnC,aAAa,KAAK,MAAM,MAAM,GAAG;AACjC,aAAa,KAAK,OAAO,MAAM,GAAG;AAClC,aAAa,OAAO,OAAO,CAAC;AAC5B,aAAa,OAAO,QAAQ,CAAC;AAG7B,IAAM,WAAW,IAAI,cAAc,WAAW;AAC9C,SAAS,KAAK,OAAO,MAAM,IAAI;AAC/B,SAAS,KAAK,OAAO,MAAM,IAAI;AAC/B,SAAS,KAAK,QAAQ,MAAM,IAAI;AAChC,SAAS,KAAK,MAAM,MAAM,IAAI;AAC9B,SAAS,KAAK,OAAO,MAAM,IAAI;AAE/B,IAAO,wBAAQ,CAAC,UAAU,SAAS,OAAO,cAAc,QAAQ;;;AC/DhE,IAAM,gBAAgB;AACtB,IAAMC,WAAU;AAAA;AAAA,EAEd,uBAAuB;AAAA,EACvB,qBAAqB;AAAA;AAAA,EAErB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,wBAAwB;AAC1B;AAEA,SAAS,eAAe,SAAS,SAAS,SAAS,SAAS;AAC1D,QAAM,SAAS,UAAU,YAAY,UAAU;AAC/C,MAAI,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK;AAC1C,MAAI,SAAS;AAAG,YAAQ,CAAC;AAAA,WAChB,QAAQ;AAAG,YAAQ,MAAM;AAClC,SAAO;AACT;AAIA,SAAS,UAAU,QAAQ,QAAQ;AACjC,MAAI,CAAC,UAAU,CAAC;AAAQ,WAAO,CAAC,GAAG,CAAC;AACpC,QAAM,UAAU,eAAe,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACzE,MAAI,OAAO,WAAW;AAAG,WAAO;AAChC,QAAM,UAAU,eAAe,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACzE,SAAO,CAAC,SAAS,OAAO;AAC1B;AAEA,SAAS,mBAAmB,OAAO,cAAc,GAAK;AACpD,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,eAAe;AACnB,MAAI,SAAS,MAAQ,SAAS;AAAO,iBAAa,IAAI;AAAA,WAC7C,SAAS,MAAQ,SAAS;AAAO,iBAAa,IAAI;AAAA;AACtD,mBAAe,IAAI;AACxB,SAAO,CAAC,YAAY,YAAY,YAAY;AAC9C;AAEA,SAAS,mBAAmB,YAAY,UAAU,UAAU;AAC1D,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,iBAAiB,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,iBAAiB,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,iBAAiB,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,QAAM,iBAAiB,KAAK,KAAK,mBAAmB,mBAAmB,mBAAmB,mBAAmB,mBAAmB,gBAAgB;AAChJ,QAAM,iBAAiB,KAAK,KAAK,mBAAmB,mBAAmB,mBAAmB,mBAAmB,mBAAmB,gBAAgB;AAChJ,QAAM,eAAe,KAAK,KAAK,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,cAAc;AAClI,MAAI,UAAU,eAAe,eAAe,iBAAiB,iBAAiB,iBAAiB,mBAAmB,IAAI,eAAe;AACrI,MAAI,SAAS;AAAK,aAAS;AAAA,WAClB,SAAS;AAAM,aAAS;AACjC,MAAI,eAAe,KAAK,KAAK,MAAM;AACnC,iBAAgB,UAAU,eAAgB;AAC1C,MAAI;AACJ,MAAI,eAAeA,SAAQ;AAAqB,iBAAa,WAAW;AAAA,WAC/D,eAAeA,SAAQ;AAAuB,iBAAa,WAAW;AAAA;AAC1E,iBAAa,WAAW;AAC7B,SAAO;AACT;AAEA,SAAS,4BAA4B,kBAAkB,kBAAkB,gBAAgB,YAAY;AACnG,MAAI;AACJ,MAAI,eAAe,KAAK,IAAI,gBAAgB,GAAG;AAC7C,QAAI,mBAAmB;AAAG,2BAAqB,gBAAgB;AAAA;AAC1D,2BAAqB,gBAAgB;AAAA,EAC5C,WAAW,eAAe,KAAK,IAAI,gBAAgB,GAAG;AACpD,QAAI,mBAAmB;AAAG,2BAAqB,gBAAgB;AAAA;AAC1D,2BAAqB,gBAAgB;AAAA,EAC5C,OAAO;AACL,QAAI,iBAAiB;AAAG,2BAAqB,gBAAgB;AAAA;AACxD,2BAAqB,gBAAgB;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,kBAAkB,kBAAkB,gBAAgB,YAAY;AACjG,MAAI;AACJ,MAAI,eAAe,KAAK,IAAI,gBAAgB,GAAG;AAC7C,QAAI,mBAAmB;AAAG,2BAAqB,gBAAgB;AAAA;AAC1D,2BAAqB,gBAAgB;AAAA,EAC5C,WAAW,eAAe,KAAK,IAAI,gBAAgB,GAAG;AACpD,QAAI,mBAAmB;AAAG,2BAAqB,gBAAgB;AAAA;AAC1D,2BAAqB,gBAAgB;AAAA,EAC5C,OAAO;AACL,QAAI,iBAAiB;AAAG,2BAAqB,gBAAgB;AAAA;AACxD,2BAAqB,gBAAgB;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,kBAAkB,kBAAkB,gBAAgB,YAAY,kBAAkB,kBAAkB,gBAAgB,YAAY;AACjK,MAAI;AACJ,QAAM,0BAA0B,0BAA0B,kBAAkB,kBAAkB,gBAAgB,UAAU;AACxH,QAAM,4BAA4B,4BAA4B,kBAAkB,kBAAkB,gBAAgB,UAAU;AAC5H,MAAI,4BAA4B,gBAAgB,YAAY;AAC1D,QAAI,8BAA8B,gBAAgB;AAAgB,2BAAqB,gBAAgB;AAAA;AAClG,2BAAqB,gBAAgB;AAAA,EAC5C,OAAO;AACL,QAAI,8BAA8B,gBAAgB;AAAgB,2BAAqB,gBAAgB;AAAA;AAClG,2BAAqB,gBAAgB;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,YAAY,UAAU,UAAU,cAAc;AAC9E,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,iBAAiB,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,mBAAmB,WAAW,CAAC,IAAI,SAAS,CAAC;AACnD,QAAM,iBAAiB,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,gBAAgB,GAAG,KAAK,IAAI,gBAAgB,GAAG,KAAK,IAAI,cAAc,CAAC;AAC5G,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,gBAAgB,GAAG,KAAK,IAAI,gBAAgB,GAAG,KAAK,IAAI,cAAc,CAAC;AAC5G,MAAI,eAAe;AACnB,MAAI,eAAe;AACnB,MAAI,iBAAiB;AACrB,QAAM,2BAA2B,cAAc,aAAa;AAC5D,MAAI,2BAA2B;AAAK,oBAAgBA,SAAQ;AAAA,WACnD,2BAA2B;AAAM,oBAAgBA,SAAQ;AAAA;AAC7D,sBAAkBA,SAAQ;AAC/B,QAAM,iBAAiB,KAAK,KAAK,mBAAmB,mBAAmB,mBAAmB,gBAAgB;AAC1G,QAAM,iBAAiB,KAAK,KAAK,mBAAmB,mBAAmB,mBAAmB,gBAAgB;AAC1G,QAAM,eAAe,KAAK,KAAK,iBAAiB,iBAAiB,iBAAiB,cAAc;AAChG,QAAM,WAAW,KAAK,IAAI,gBAAgB,gBAAgB,YAAY;AACtE,MAAI,qBAAqB,WAAW,CAAC;AACrC,MAAI,qBAAqB,WAAW,CAAC;AACrC,MAAI,mBAAmB,SAAS,CAAC;AACjC,MAAI,mBAAmB,SAAS,CAAC;AACjC,MAAI,aAAa,gBAAgB;AAC/B,uBAAmB,SAAS,CAAC;AAC7B,uBAAmB,SAAS,CAAC;AAAA,EAC/B,WAAW,aAAa,cAAc;AACpC,yBAAqB,SAAS,CAAC;AAC/B,yBAAqB,SAAS,CAAC;AAAA,EACjC;AACA,QAAM,iBAAiB,CAAC,oBAAoB,kBAAkB;AAC9D,QAAM,eAAe,CAAC,kBAAkB,gBAAgB;AACxD,QAAM,aAAa,UAAU,gBAAgB,YAAY;AACzD,QAAM,QAAQ,mBAAmB,YAAYA,SAAQ,sBAAsB;AAC3E,kBAAgB,MAAM,CAAC;AACvB,kBAAgB,MAAM,CAAC;AACvB,oBAAkB,MAAM,CAAC;AACzB,aAAW,eAAe,cAAc;AACtC,UAAM,cAAc,mBAAmB,aAAaA,SAAQ,uBAAuB;AACnF,oBAAgB,YAAY,CAAC;AAC7B,oBAAgB,YAAY,CAAC;AAC7B,sBAAkB,YAAY,CAAC;AAAA,EACjC;AAGA,MAAI;AACJ,MAAI,iBAAiB,KAAK,IAAI,cAAc,cAAc,cAAc,GAAG;AACzE,yBAAqB,0BAA0B,kBAAkB,kBAAkB,gBAAgB,UAAU;AAAA,EAC/G,WAAW,mBAAmB,KAAK,IAAI,cAAc,cAAc,GAAG;AACpE,yBAAqB,4BAA4B,kBAAkB,kBAAkB,gBAAgB,UAAU;AAAA,EACjH,OAAO;AACL,yBAAqB,0BAA0B,kBAAkB,kBAAkB,gBAAgB,YAAY,kBAAkB,kBAAkB,gBAAgB,UAAU;AAAA,EAC/K;AACA,SAAO;AACT;AAEA,SAAS,SAAS,WAAW;AAE3B,QAAM,WAAuB,CAAC;AAC9B,QAAM,WAAuB,CAAC;AAC9B,QAAM,cAAwB,CAAC;AAC/B,QAAM,mBAA6B,CAAC;AACpC,MAAI,CAAC;AAAW,WAAO,EAAE,OAAO,aAAa,YAAY,iBAAiB;AAG1E,aAAW,UAAU,OAAO,KAAK;AAC/B,UAAM,SAAS,OAAO,UAAU,MAAM;AACtC,UAAM,YAAsB,CAAC;AAC7B,UAAM,YAAsB,CAAC;AAC7B,eAAWC,UAAS,QAAQ;AAC1B,YAAM,SAAS,UAAUA,OAAM,CAAC,CAAC;AACjC,YAAMC,UAAS,UAAUD,OAAM,CAAC,CAAC;AAEjC,YAAM,SAAS,UAAU,QAAQC,OAAM;AACvC,YAAM,UAAU,OAAO,CAAC;AACxB,YAAM,UAAU,OAAO,CAAC;AACxB,gBAAU,KAAK,OAAO;AACtB,gBAAU,KAAK,OAAO;AAAA,IACxB;AACA,aAAS,KAAK,SAAS;AACvB,aAAS,KAAK,SAAS;AAAA,EACzB;AAGA,aAAW,UAAU,OAAO,KAAK;AAE/B,UAAM,eAAgB,WAAW,OAAO,QAAS,IAAI;AACrD,UAAM,iBAAiB,OAAO,UAAU,MAAM;AAC9C,UAAM,aAAa,UAAU,eAAe,YAAY,EAAE,CAAC,CAAC;AAC5D,UAAM,WAAW,UAAU,eAAe,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9D,UAAM,WAAW,UAAU,eAAe,CAAC,EAAE,CAAC,CAAC;AAE/C,UAAM,eAAe,mBAAmB,YAAY,UAAU,QAAQ;AACtE,UAAM,iBAAiB,yBAAyB,YAAY,UAAU,UAAU,SAAS,MAAM,EAAE,MAAM,YAAY,CAAC;AACpH,gBAAY,MAAM,IAAI;AACtB,qBAAiB,MAAM,IAAI;AAAA,EAC7B;AACA,SAAO,EAAE,OAAO,aAAa,YAAY,iBAAiB;AAC5D;AAEO,SAAS,QAAQ,WAAW;AACjC,MAAI,CAAC,aAAa,UAAU,WAAW;AAAG,WAAO;AACjD,QAAM,eAAe,SAAS,SAAS;AACvC,QAAM,YAAY,CAAC;AACnB,aAAW,aAAa,OAAO,KAAK;AAClC,cAAU,OAAO,QAAQ,SAAS,CAAC,IAAI;AAAA,MACrC,MAAM,WAAW,QAAQ,aAAa,MAAM,SAAS,CAAC;AAAA,MACtD,WAAW,gBAAgB,QAAQ,aAAa,WAAW,SAAS,CAAC;AAAA,IACvE;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,MAAM,WAAW;AAC/B,QAAM,QAAgD,CAAC;AACvD,MAAI,CAAC,aAAa,UAAU,WAAW;AAAG,WAAO;AACjD,QAAM,eAAe,SAAS,SAAS;AACvC,aAAWC,YAAW,uBAAU;AAC9B,UAAM,aAAaA,SAAQ,aAAa,aAAa,OAAO,aAAa,UAAU;AACnF,QAAI,cAAc;AAAe,YAAM,KAAK,EAAE,MAAMA,SAAQ,MAAM,WAAW,CAAC;AAAA,EAChF;AACA,SAAO;AACT;;;ACjNO,IAAMC,QAAO,CAAC,QAAuC;AAC1D,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,QAAM,WAAqD,CAAC;AAC5D,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAEnC,UAAM,YAAY,IAAI,CAAC,EAAE,UAAU,KAAK,CAAC,MAAO,EAAE,SAAS,WAAY;AACvE,UAAM,aAAa,IAAI,CAAC,EAAE,UAAU,KAAK,CAAC,MAAO,EAAE,SAAS,YAAa;AACzE,UAAM,OAAO,IAAI,CAAC,EAAE,UAAU,KAAK,CAAC,MAAO,EAAE,SAAS,MAAO;AAC7D,QAAI,QAAQ,aAAa,cAAe,UAAU,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,KAAO,WAAW,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AAAI,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,YAAY,CAAC;AAAA,aACxK,QAAQ,aAAc,UAAU,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AAAI,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,kBAAkB,CAAC;AAAA,aACtH,QAAQ,cAAe,WAAW,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AAAI,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,mBAAmB,CAAC;AAGlI,UAAM,eAAe,IAAI,CAAC,EAAE,UAAU,KAAK,CAAC,MAAO,EAAE,SAAS,cAAe;AAC7E,UAAM,gBAAgB,IAAI,CAAC,EAAE,UAAU,KAAK,CAAC,MAAO,EAAE,SAAS,eAAgB;AAC/E,QAAI,gBAAgB,iBAAiB,KAAK,IAAI,aAAa,YAAY,CAAC,IAAI,cAAc,YAAY,CAAC,CAAC,IAAI,KAAK;AAC/G,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,WAAY,aAAa,SAAS,CAAC,IAAI,cAAc,SAAS,CAAC,IAAK,SAAS,UAAU,CAAC;AAAA,IAC5H;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAMC,QAAO,CAAC,QAAuC;AAC1D,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,QAAM,WAAqD,CAAC;AAC5D,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK,SAAS,KAAK;AAC3C,YAAM,SAAS,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,KAAK;AAClE,YAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;AACrD,UAAI,KAAK,IAAI,QAAQ,KAAK,KAAK;AAAM,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,gBAAgB,CAAC;AAAA;AACnF,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,UAAU,QAAQ,IAAI,SAAS,UAAU,CAAC;AACjF,YAAM,WAAW,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;AACzH,UAAI,WAAW;AAAK,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,iBAAiB,CAAC;AACxE,YAAM,YAAY,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;AAC1H,UAAI,YAAY;AAAK,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,kBAAkB,CAAC;AAC1E,YAAM,YAAY,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5I,UAAI,YAAY;AAAI,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,SAAS,KAAK,MAAM,SAAS,UAAU,CAAC;AAC9F,YAAM,YAAY,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,KAAK;AACzC,UAAI,KAAK,IAAI,SAAS,IAAI;AAAI,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,QAAQ,YAAY,IAAI,OAAO,SAAS,CAAC;AAAA,IAC3G;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAMC,QAAO,CAAC,QAAuC;AA7E5D,cAAAC,KAAAC;AA8EE,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,QAAM,WAAqD,CAAC;AAC5D,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,GAAC,eAAI,CAAC,EAAE,gBAAP,mBAAoB,gBAApB,mBAAkC,OAAM,GAACA,OAAAD,MAAA,IAAI,CAAC,EAAE,gBAAP,gBAAAA,IAAoB,iBAApB,gBAAAC,IAAmC;AAAI;AACrF,UAAM,YAAY,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC;AAC5F,UAAM,YAAY,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC;AAC5F,UAAM,WAAW,KAAK,IAAI,YAAY,SAAS;AAE/C,UAAM,aAAa,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC;AAC/F,UAAM,aAAa,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC;AAC/F,UAAM,YAAY,KAAK,IAAI,aAAa,UAAU;AAElD,QAAI,SAAS;AACb,UAAM,aAAa,KAAK,IAAI,WAAW,SAAS,IAAI,KAAK,IAAI,UAAU,SAAS;AAChF,QAAI,aAAa,MAAM;AACrB,eAAS;AACT,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,gBAAgB,CAAC;AAAA,IACrD;AAEA,UAAM,kBAAkB,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAC3G,UAAM,mBAAmB,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAC5G,QAAI,kBAAkB,QAAQ,mBAAmB;AAAM,eAAS;AAChE,QAAI,kBAAkB,kBAAkB;AACtC,UAAI,mBAAmB;AAAM,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,gBAAgB,CAAC;AAAA,IAClF,OAAO;AACL,UAAI,kBAAkB;AAAM,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,eAAe,CAAC;AAAA,IAChF;AAEA,UAAM,mBAAmB,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAC7G,UAAM,kBAAkB,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;AAC3G,QAAI,kBAAkB,QAAQ,mBAAmB,QAAQ,kBAAkB,SAAS,mBAAmB;AAAO,eAAS;AACvH,QAAI,kBAAkB,QAAQ,mBAAmB;AAAM,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,eAAe,CAAC;AACzG,QAAI,kBAAkB,SAAS,mBAAmB;AAAO,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,aAAa,CAAC;AAGzG,QAAI;AAAQ,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,iBAAiB,CAAC;AAAA,EAClE;AACA,SAAO;AACT;AAEO,IAAMC,QAAO,CAAC,QAAuC;AAC1D,MAAI,CAAC;AAAK,WAAO,CAAC;AAClB,QAAM,WAAqD,CAAC;AAC5D,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,UAA+C,CAAC;AACtD,QAAI,IAAI,CAAC,EAAE,aAAa;AACtB,iBAAW,CAAC,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,CAAC,EAAE,WAAW,GAAG;AAC9D,YAAI,WAAW,cAAc,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AAAG,kBAAQ,KAAK,EAAE,MAAM,OAAO,YAAY,GAAG,UAAU,IAAI,CAAC,EAAE,CAAC;AAAA,MAC1H;AAAA,IACF;AACA,QAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,YAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,OAAQ,KAAK,SAAS,CAAC,KAAK,MAAM,EAAE,SAAS,CAAC,KAAK,KAAK,OAAO,CAAE;AACvG,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,eAA8B,CAAC;AAC5E,YAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,MAAO,KAAK,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,OAAO,CAAE;AACzF,eAAS,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,UAAyB,CAAC;AAAA,IACzE;AACA,QAAI,IAAI,CAAC,EAAE,WAAW;AACpB,YAAM,QAAmB,MAAM,IAAI,CAAC,EAAE,SAAS;AAC/C,iBAAW,QAAQ;AAAO,iBAAS,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,KAAoB,CAAC;AAAA,IACxF;AAAA,EACF;AACA,SAAO;AACT;;;ACzIO,SAASC,YAAW,KAAK;AAC9B,SAAO;AAAA,IACL,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;AAAA,IAC5C,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;AAAA,EAC9C;AACF;AAEO,SAASC,cAAa,KAAK;AAChC,SAAO;AAAA,IACL,IAAI,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK;AAAA,IAC5D,IAAI,WAAW,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK;AAAA,EAC9D;AACF;AAEO,SAAS,yBAAyB,KAAK,OAAO,UAAU;AAC7D,QAAM,IAAI,MAAM,MAAM,CAAC;AACvB,QAAMC,MAAI,MAAM,MAAM,CAAC;AACvB,QAAM,QAAQ,CAAC;AAAA,IACb,IAAI,WAAW,CAAC,IAAI;AAAA,IACpB,IAAI,WAAW,CAAC,IAAIA;AAAA,IACpB,IAAI,SAAS,CAAC,IAAI;AAAA,IAClB,IAAI,SAAS,CAAC,IAAIA;AAAA,EACpB,CAAC;AACD,SAAU,GAAM,cAAc,OAAO,OAAO,CAAC,CAAC,GAAG,QAAQ;AAC3D;AAEO,SAASC,qBAAoB,KAAK,QAAQ;AAC/C,QAAM,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC;AAChF,QAAM,WAAW,CAAC,IAAI,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC;AAC1E,QAAM,gBAAgB,IAAI,cAAc,IAAI,CAAC,UAAU;AACrD,UAAM,cAAc,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC;AAC/D,WAAO;AAAA,EACT,CAAC;AACD,SAAO,EAAE,YAAY,UAAU,eAAe,YAAY,IAAI,WAAW;AAC3E;AAEO,SAASC,YAAW,KAAK,SAAS,KAAK;AAC5C,QAAM,SAASH,cAAa,GAAG;AAC/B,QAAMI,QAAOL,YAAW,GAAG;AAC3B,QAAM,cAAc,CAAC,SAASK,MAAK,CAAC,IAAI,GAAG,SAASA,MAAK,CAAC,IAAI,CAAC;AAC/D,QAAM,aAAa,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AAC1E,QAAM,WAAW,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;AACxE,SAAO,EAAE,YAAY,UAAU,eAAe,IAAI,cAAc;AAClE;AAEO,SAASC,aAAY,KAAK;AAC/B,QAAM,UAAUL,cAAa,GAAG;AAChC,QAAMI,QAAOL,YAAW,GAAG;AAC3B,QAAM,UAAU,KAAK,IAAI,GAAGK,KAAI;AAChC,QAAM,WAAW,UAAU;AAC3B,QAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,IAAI,QAAQ;AAChE,QAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,IAAI,QAAQ;AAC9D,SAAO,EAAE,YAAY,UAAU,eAAe,IAAI,cAAc;AAClE;AAaO,SAASE,kBAAiB,OAAO;AACtC,SAAO,QAAQ,IAAI,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO,IAAI,KAAK,GAAG;AAC3E;AAEO,SAASC,iBAAgB,QAAQ,QAAQ;AAC9C,QAAM,UAAU,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;AACxF,SAAOD,kBAAiB,OAAO;AACjC;AAEO,IAAME,0BAAyB,CAAC,GAAGC,OAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAGA,EAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAEzE,SAASC,KAAIC,KAAIC,KAAI;AAC1B,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAID,IAAG,QAAQ,KAAK;AAClC,eAAWA,IAAG,CAAC,IAAIC,IAAG,CAAC;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAASC,oBAAmB,KAAK,aAAa;AACnD,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,WAAO,KAAK,IAAI,CAAC,EAAE,WAAW,CAAC;AAAA,EACjC;AACA,SAAO;AACT;AAEO,SAASC,2BAA0B,MAAM,MAAM;AACpD,QAAM,UAAsB,CAAC;AAC7B,QAAMC,QAAO,KAAK;AAClB,WAAS,MAAM,GAAG,MAAMA,OAAM,OAAO;AACnC,YAAQ,KAAK,CAAC,CAAC;AACf,aAAS,MAAM,GAAG,MAAMA,OAAM,OAAO;AACnC,cAAQ,GAAG,EAAE,KAAKL,KAAI,KAAK,GAAG,GAAGG,oBAAmB,MAAM,GAAG,CAAC,CAAC;AAAA,IACjE;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAASG,qBAAoB,UAAU,QAAQ;AACpD,QAAM,OAAO,KAAK,IAAI,QAAQ;AAC9B,QAAM,OAAO,KAAK,IAAI,QAAQ;AAC9B,QAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpE,QAAM,oBAAoBR,wBAAuB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACrE,QAAM,2BAA2BM,2BAA0B,mBAAmB,cAAc;AAC5F,QAAM,4BAA4BN,wBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/E,SAAOM,2BAA0B,0BAA0B,yBAAyB;AACtF;AAEO,SAASG,uBAAsB,QAAQ;AAC5C,QAAM,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAM,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACxD,QAAM,sBAAsB;AAAA,IAC1B,CAACP,KAAI,kBAAkB,CAAC,GAAG,oBAAoB;AAAA,IAC/C,CAACA,KAAI,kBAAkB,CAAC,GAAG,oBAAoB;AAAA,EACjD;AACA,SAAO;AAAA,IACL,kBAAkB,CAAC,EAAE,OAAO,oBAAoB,CAAC,CAAC;AAAA,IAClD,kBAAkB,CAAC,EAAE,OAAO,oBAAoB,CAAC,CAAC;AAAA,IAClD,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AACF;AAEO,SAASQ,aAAY,uBAAuB,gBAAgB;AACjE,SAAO;AAAA,IACLR,KAAI,uBAAuB,eAAe,CAAC,CAAC;AAAA,IAC5CA,KAAI,uBAAuB,eAAe,CAAC,CAAC;AAAA,EAC9C;AACF;;;ACpIO,IAAMS,WAAU;AAAA,EACrB,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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", - "names": ["t", "dt", "ts", "config", "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", "canvas", "init", "options", "rgb", "localOptions", "y", "cx", "cy", "pt", "xc", "yc", "options", "connectionsToIndices", "index", "_c", "_d", "_f", "_g", "_h", "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", "_c", "_d", "_f", "model", "inputSize", "load", "config", "index", "face", "y", "_c", "_d", "_f", "_g", "_h", "_j", "t", "cache", "model", "inputSize", "predict", "config", "_c", "_d", "_f", "_g", "_h", "_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", "size", "pt", "face", "_c", "_d", "_f", "_g", "_h", "_j", "_k", "_l", "_n", "_p", "_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", "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", "_j", "_k", "_l", "_n", "_p", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "t0", "_a", "_b", "_e", "_i", "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", "x1", "y2", "x2", "dy", "dx", "model", "point", "height", "width", "minConfidence", "y", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "rgb", "predict", "model", "load", "config", "predict", "t", "model", "op", "_c", "_d", "_f", "_g", "_h", "_j", "_k", "_l", "_n", "_p", "_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", "_j", "_k", "_l", "_n", "_p", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] + "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar SG=Object.create;var YC=Object.defineProperty;var IG=Object.getOwnPropertyDescriptor;var vG=Object.getOwnPropertyNames;var kG=Object.getPrototypeOf,NG=Object.prototype.hasOwnProperty;var Kt=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),qe=(r,t)=>{for(var e in t)YC(r,e,{get:t[e],enumerable:!0})},TG=(r,t,e,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of vG(t))!NG.call(r,n)&&n!==e&&YC(r,n,{get:()=>t[n],enumerable:!(o=IG(t,n))||o.enumerable});return r};var Lp=(r,t,e)=>(e=r!=null?SG(kG(r)):{},TG(t||!r||!r.__esModule?YC(e,\"default\",{value:r,enumerable:!0}):e,r));var W0=Kt((tle,V0)=>{V0.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,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,\"__isLong__\",{value:!0});function Vr(r){return(r&&r.__isLong__)===!0}kt.isLong=Vr;var D0={},A0={};function Du(r,t){var e,o,n;return t?(r>>>=0,(n=0<=r&&r<256)&&(o=A0[r],o)?o:(e=Nt(r,(r|0)<0?-1:0,!0),n&&(A0[r]=e),e)):(r|=0,(n=-128<=r&&r<128)&&(o=D0[r],o)?o:(e=Nt(r,r<0?-1:0,!1),n&&(D0[r]=e),e))}kt.fromInt=Du;function No(r,t){if(isNaN(r))return t?Ru:To;if(t){if(r<0)return Ru;if(r>=M0)return z0}else{if(r<=-P0)return zr;if(r+1>=P0)return B0}return r<0?No(-r,t).neg():Nt(r%Xp|0,r/Xp|0,t)}kt.fromNumber=No;function Nt(r,t,e){return new kt(r,t,e)}kt.fromBits=Nt;var Ym=Math.pow;function pw(r,t,e){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return To;if(typeof t==\"number\"?(e=t,t=!1):t=!!t,e=e||10,e<2||360)throw Error(\"interior hyphen\");if(o===0)return pw(r.substring(1),t,e).neg();for(var n=No(Ym(e,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Xp+(this.low>>>0):this.high*Xp+(this.low>>>0)};de.toString=function(t){if(t=t||10,t<2||36>>0,c=u.toString(t);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(zr)?64:this.neg().getNumBitsAbs();for(var t=this.high!=0?this.high:this.low,e=31;e>0&&!(t&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(t){return Vr(t)||(t=As(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};de.eq=de.equals;de.notEquals=function(t){return!this.eq(t)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(t){return this.comp(t)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(t){return this.comp(t)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(t){return this.comp(t)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(t){return this.comp(t)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(t){if(Vr(t)||(t=As(t)),this.eq(t))return 0;var e=this.isNegative(),o=t.isNegative();return e&&!o?-1:!e&&o?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(zr)?zr:this.not().add(jp)};de.neg=de.negate;de.add=function(t){Vr(t)||(t=As(t));var e=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=t.high>>>16,i=t.high&65535,p=t.low>>>16,u=t.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+=e+a,c&=65535,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(t){return Vr(t)||(t=As(t)),this.add(t.neg())};de.sub=de.subtract;de.multiply=function(t){if(this.isZero())return To;if(Vr(t)||(t=As(t)),ko){var e=ko.mul(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}if(t.isZero())return To;if(this.eq(zr))return t.isOdd()?zr:To;if(t.eq(zr))return this.isOdd()?zr:To;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(O0)&&t.lt(O0))return No(this.toNumber()*t.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=t.high>>>16,p=t.high&65535,u=t.low>>>16,c=t.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(t){if(Vr(t)||(t=As(t)),t.isZero())throw Error(\"division by zero\");if(ko){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ru:To;var o,n,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Ru;if(t.gt(this.shru(1)))return L0;s=Ru}else{if(this.eq(zr)){if(t.eq(jp)||t.eq(uw))return zr;if(t.eq(zr))return jp;var a=this.shr(1);return o=a.div(t).shl(1),o.eq(To)?t.isNegative()?jp:uw:(n=this.sub(t.mul(o)),s=o.add(n.div(t)),s)}else if(t.eq(zr))return this.unsigned?Ru:To;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();s=To}for(n=this;n.gte(t);){o=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Ym(2,i-48),u=No(o),c=u.mul(t);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(t);u.isZero()&&(u=jp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(t){if(Vr(t)||(t=As(t)),ko){var e=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(t){return Vr(t)||(t=As(t)),Nt(this.low&t.low,this.high&t.high,this.unsigned)};de.or=function(t){return Vr(t)||(t=As(t)),Nt(this.low|t.low,this.high|t.high,this.unsigned)};de.xor=function(t){return Vr(t)||(t=As(t)),Nt(this.low^t.low,this.high^t.high,this.unsigned)};de.shiftLeft=function(t){return Vr(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Nt(this.low<>>32-t,this.unsigned):Nt(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Nt(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(t){if(Vr(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var o=this.low;return Nt(o>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Nt(e,0,this.unsigned):Nt(e>>>t-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(t){return t?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};de.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};kt.fromBytes=function(t,e,o){return o?kt.fromBytesLE(t,e):kt.fromBytesBE(t,e)};kt.fromBytesLE=function(t,e){return new kt(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};kt.fromBytesBE=function(t,e){return new kt(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var vk=Kt(()=>{});var kk=Kt(()=>{});var Z2=Kt((Q2,Vw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(Q2,typeof Vw==\"object\"&&Vw,typeof define==\"function\"&&define)});var e1=Kt((J2,Ww)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(J2,typeof Ww==\"object\"&&Ww,typeof define==\"function\"&&define)});var r1=Kt((t1,Uw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(t1,typeof Uw==\"object\"&&Uw,typeof define==\"function\"&&define)});var n1=Kt((o1,Gw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(o1,typeof Gw==\"object\"&&Gw,typeof define==\"function\"&&define)});var a1=Kt((s1,Hw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(s1,typeof Hw==\"object\"&&Hw,typeof define==\"function\"&&define)});var u1=Kt((i1,Kw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(i1,typeof Kw==\"object\"&&Kw,typeof define==\"function\"&&define)});var p1=Kt(()=>{});var l1=Kt((c1,Od)=>{(function(r,t,e){var o=256,n=6,s=52,a=\"random\",i=e.pow(o,n),p=e.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[C,b(t)]: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),t),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(e[a]=P,O):P})(D,E,\"global\"in S?S.global:this==e,S.state)}function d(C){var S,k=C.length,_=this,E=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);E{var vq=Z2(),kq=e1(),Nq=r1(),Tq=n1(),_q=a1(),$q=u1(),Gu=l1();Gu.alea=vq;Gu.xor128=kq;Gu.xorwow=Nq;Gu.xorshift7=Tq;Gu.xor4096=_q;Gu.tychei=$q;m1.exports=Gu});var zv=Kt(()=>{});var Vv=Kt(()=>{});var DB=Kt(()=>{});var AB=Kt(()=>{});var FB=Kt(()=>{});var PB=Kt((Vg,Uv)=>{var Wv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};function e(){return oe.buffer!=Ge&&Tt(oe.buffer),lt}function o(){return oe.buffer!=Ge&&Tt(oe.buffer),it}function n(){return oe.buffer!=Ge&&Tt(oe.buffer),ht}function s(){return oe.buffer!=Ge&&Tt(oe.buffer),Mr}function a(){return oe.buffer!=Ge&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=Ge&&Tt(oe.buffer),eo}function p(){return oe.buffer!=Ge&&Tt(oe.buffer),rr}var u=typeof t!=\"undefined\"?t:{},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 E,R,D,P;function O(F){if(F instanceof Iu)return;j(\"exiting due to exception: \"+F)}if(C){var M=zv(),L=Vv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",E=(V,ue)=>(V=Dp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:\"utf8\")),D=V=>{var ue=E(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,Ee)=>{V=Dp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?Ee(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 Iu))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=DB()}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||(E=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 Ee=new XMLHttpRequest;Ee.open(\"GET\",F,!0),Ee.responseType=\"arraybuffer\",Ee.onload=()=>{if(Ee.status==200||Ee.status==0&&Ee.response){V(Ee.response);return}ue()},Ee.onerror=ue,Ee.send(null)}),P=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=AB().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\"&&Su(\"no native wasm support detected\");var oe,ie,le=!1,be;function _e(F,V){F||Su(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(F,V,ue){V>>>=0;for(var Ee=V+ue,Be=V;F[Be]&&!(Be>=Ee);)++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|no&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):\"\"}function st(F,V,ue,Ee){if(ue>>>=0,!(Ee>0))return 0;for(var Be=ue,Le=ue+Ee-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 Ge,lt,it,ht,gt,Mr,Mt,eo,rr;S&&(Ge=u.buffer);function Tt(F){Ge=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Mr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=eo=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ge=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&&(Ge=oe.buffer),or=Ge.byteLength,Tt(Ge);var nr,to=[],ro=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)tl(u.preRun.shift());nl(to)}function Xt(){Va=!0,!S&&nl(ro)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)m0(u.postRun.shift());nl(fr)}}function tl(F){to.unshift(F)}function rl(F){ro.unshift(F)}function m0(F){fr.unshift(F)}var vi=0,Rp=null,Ua=null;function by(F){vi++,u.monitorRunDependencies&&u.monitorRunDependencies(vi)}function bm(F){if(vi--,u.monitorRunDependencies&&u.monitorRunDependencies(vi),vi==0&&(Rp!==null&&(clearInterval(Rp),Rp=null),Ua)){var V=Ua;Ua=null,V()}}function Su(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 Cy=\"data:application/octet-stream;base64,\";function Cm(F){return F.startsWith(Cy)}function Dp(F){return F.startsWith(\"file://\")}var hr;hr=\"tfjs-backend-wasm-threaded-simd.wasm\",Cm(hr)||(hr=_(hr));function wm(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){Su(V)}}function wy(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!Dp(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 wm(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return wm(hr)})}function Sy(){var F={env:Fm,wasi_snapshot_preview1:Fm};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Ry(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,rl(u.asm.__wasm_call_ctors),ie=Ne,!S){var no=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--no||bm(\"wasm-instantiate\")})})}}S||by(\"wasm-instantiate\");function ue(ge){V(ge.instance,ge.module)}function Ee(ge){return wy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j(\"failed to asynchronously prepare wasm: \"+Ne),Su(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Cm(hr)&&!Dp(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\"),Ee(ue)})}):Ee(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 d0,f0,Sm={};function Iu(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function Iy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),qC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function vy(F){var V=Me.pthreads[F];V.postMessage({cmd:\"cancel\"})}function ol(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function ky(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 Im={varargs:void 0,get:function(){Im.varargs+=4;var F=s()[Im.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function vm(F){if(S)return ki(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new Iu(F))}function Ny(F,V){if(be=F,!V&&S)throw Nm(F),\"unwind\";vm(F)}var km=Ny;function Ty(F){if(F instanceof Iu||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(),qC(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!=zm()){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\"?sl(ge.queue):Ne===\"spawnThread\"?ky(ge):Ne===\"cleanupThread\"?ol(ge.thread):Ne===\"killThread\"?Iy(ge.thread):Ne===\"cancelThread\"?vy(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=[],Ee=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of Ee)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 nl(F){for(;F.length>0;)F.shift()(u)}function _y(){var F=zm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],Ee=V-ue;C0(V,Ee),Vm(V)}u.establishStackSpace=_y;function Nm(F){if(S)return ki(2,0,F);try{km(F)}catch(V){Ty(V)}}var Ap=[];function $y(F){var V=Ap[F];return V||(F>=Ap.length&&(Ap.length=F+1),Ap[F]=V=nr.get(F)),V}function Ey(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):b0(ue)}u.invokeEntryPoint=Ey;function Ry(F){Me.tlsInitFunctions.push(F)}function Dy(F){g0(F,!b,1,!x),Me.threadInitTLS()}function Ay(F){S?postMessage({cmd:\"cleanupThread\",thread:F}):ol(F)}function Tm(F,V,ue,Ee){return S?ki(3,1,F,V,ue,Ee):_m(F,V,ue,Ee)}function _m(F,V,ue,Ee){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 Tm(F,V,ue,Ee);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:Ee,transferList:Be};return S?(ge.cmd=\"spawnThread\",postMessage(ge,Be),0):ky(ge)}function Fy(){return 65536}var Py=!0;function Oy(){return Py}function sl(F){Atomics.store(s(),F>>2,1),zm()&&y0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=sl;function My(F,V,ue,Ee){if(F==V)setTimeout(()=>sl(Ee));else if(S)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:Ee});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:Ee})}return 1}function Ly(F,V,ue){return-1}function By(){Su(\"\")}function vu(F){vu.shown||(vu.shown={}),vu.shown[F]||(vu.shown[F]=1,C&&(F=\"warning: \"+F),j(F))}function zy(){C||b||vu(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function Vy(){return Date.now()}function $m(){return 4294901760}function Wy(){return $m()}var al;C?al=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:al=()=>performance.timeOrigin+performance.now();function Uy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Gy(){return C?FB().cpus().length:navigator.hardwareConcurrency}function Hy(F){var V=jC(),ue=F();return Vm(V),ue}function ki(F,V){var ue=arguments.length-2,Ee=arguments;return Hy(()=>{for(var Be=ue,Le=Wm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return x0(F,Be,Le,V)})}var il=[];function Ky(F,V,ue){il.length=V;for(var Ee=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?Sm[-F-1]:tb[F];return ge.apply(null,il)}function qy(F){try{return oe.grow(F-Ge.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function jy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=$m();if(F>ue)return!1;let Ee=(Ft,no)=>Ft+(no-Ft%no)%no;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,Ee(Math.max(F,Le),65536)),Ne=qy(ge);if(Ne)return!0}return!1}function Xy(){throw\"unwind\"}function Em(F){return S?ki(4,1,F):52}function Rm(F,V,ue,Ee,Be){return S?ki(5,1,F,V,ue,Ee,Be):70}var Yy=[null,[],[]];function Qy(F,V){var ue=Yy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Dm(F,V,ue,Ee){if(S)return ki(6,1,F,V,ue,Ee);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()[Ee>>>2]=Be,0}function Am(F){var V=u[\"_\"+F];return V}function Zy(F,V){e().set(F,V>>>0)}function Jy(F,V,ue,Ee,Be){var Le={string:Lr=>{var Mp=0;if(Lr!=null&&Lr!==0){var I0=(Lr.length<<2)+1;Mp=Wm(I0),ct(Lr,Mp,I0)}return Mp},array:Lr=>{var Mp=Wm(Lr.length);return Zy(Lr,Mp),Mp}};function ge(Lr){return V===\"string\"?Pe(Lr):V===\"boolean\"?!!Lr:Lr}var Ne=Am(F),Ft=[],no=0;if(Ee)for(var Ha=0;Hage===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!Ee?Am(F):function(){return Jy(F,V,ue,arguments,Ee)}}Me.init();var tb=[null,vm,Nm,Tm,Em,Rm,Dm],Fm={__emscripten_init_main_thread_js:Dy,__emscripten_thread_cleanup:Ay,__pthread_create_js:_m,_emscripten_default_pthread_stack_size:Fy,_emscripten_get_now_is_monotonic:Oy,_emscripten_notify_task_queue:My,_emscripten_set_offscreencanvas_size:Ly,abort:By,emscripten_check_blocking_allowed:zy,emscripten_date_now:Vy,emscripten_get_heap_max:Wy,emscripten_get_now:al,emscripten_memcpy_big:Uy,emscripten_num_logical_cores:Gy,emscripten_receive_on_main_thread_js:Ky,emscripten_resize_heap:jy,emscripten_unwind_to_js_event_loop:Xy,exit:km,fd_close:Em,fd_seek:Rm,fd_write:Dm,memory:oe||u.wasmMemory},h0=Sy(),rb=u.___wasm_call_ctors=function(){return(rb=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},ob=u._init=function(){return(ob=u._init=u.asm.init).apply(null,arguments)},nb=u._init_with_threads_count=function(){return(nb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},sb=u._get_threads_count=function(){return(sb=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ab=u._register_tensor=function(){return(ab=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ib=u._dispose_data=function(){return(ib=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},ub=u._dispose=function(){return(ub=u._dispose=u.asm.dispose).apply(null,arguments)},pb=u._Abs=function(){return(pb=u._Abs=u.asm.Abs).apply(null,arguments)},cb=u._Acos=function(){return(cb=u._Acos=u.asm.Acos).apply(null,arguments)},lb=u._Acosh=function(){return(lb=u._Acosh=u.asm.Acosh).apply(null,arguments)},mb=u._Add=function(){return(mb=u._Add=u.asm.Add).apply(null,arguments)},db=u._AddN=function(){return(db=u._AddN=u.asm.AddN).apply(null,arguments)},fb=u._All=function(){return(fb=u._All=u.asm.All).apply(null,arguments)},hb=u._Any=function(){return(hb=u._Any=u.asm.Any).apply(null,arguments)},gb=u._ArgMax=function(){return(gb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},xb=u._ArgMin=function(){return(xb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},yb=u._Asin=function(){return(yb=u._Asin=u.asm.Asin).apply(null,arguments)},bb=u._Asinh=function(){return(bb=u._Asinh=u.asm.Asinh).apply(null,arguments)},Cb=u._Atan=function(){return(Cb=u._Atan=u.asm.Atan).apply(null,arguments)},wb=u._Atan2=function(){return(wb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Sb=u._Atanh=function(){return(Sb=u._Atanh=u.asm.Atanh).apply(null,arguments)},Ib=u._AvgPool=function(){return(Ib=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},vb=u._AvgPool3D=function(){return(vb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},kb=u._AvgPool3DGrad=function(){return(kb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Nb=u._AvgPoolGrad=function(){return(Nb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},Tb=u._BatchMatMul=function(){return(Tb=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},_b=u._Bincount=function(){return(_b=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Eb=u._Ceil=function(){return(Eb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Rb=u._ClipByValue=function(){return(Rb=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Db=u._Conv2D=function(){return(Db=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Ab=u._Conv2DBackpropInput=function(){return(Ab=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Fb=u._Conv3D=function(){return(Fb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Pb=u._Conv3DBackpropFilterV2=function(){return(Pb=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ob=u._Conv3DBackpropInputV2=function(){return(Ob=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Mb=u._Cos=function(){return(Mb=u._Cos=u.asm.Cos).apply(null,arguments)},Lb=u._Cosh=function(){return(Lb=u._Cosh=u.asm.Cosh).apply(null,arguments)},Bb=u._CropAndResize=function(){return(Bb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},zb=u._Cumprod=function(){return(zb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Vb=u._Cumsum=function(){return(Vb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Wb=u._DenseBincount=function(){return(Wb=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Ub=u._DepthToSpace=function(){return(Ub=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Gb=u._DepthwiseConv2dNative=function(){return(Gb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Hb=u._Diag=function(){return(Hb=u._Diag=u.asm.Diag).apply(null,arguments)},Kb=u._Dilation2D=function(){return(Kb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},qb=u._Dilation2DBackpropFilter=function(){return(qb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},jb=u._Dilation2DBackpropInput=function(){return(jb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Xb=u._Elu=function(){return(Xb=u._Elu=u.asm.Elu).apply(null,arguments)},Yb=u._EluGrad=function(){return(Yb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Qb=u._Equal=function(){return(Qb=u._Equal=u.asm.Equal).apply(null,arguments)},Zb=u._Erf=function(){return(Zb=u._Erf=u.asm.Erf).apply(null,arguments)},Jb=u._Exp=function(){return(Jb=u._Exp=u.asm.Exp).apply(null,arguments)},eC=u._Expm1=function(){return(eC=u._Expm1=u.asm.Expm1).apply(null,arguments)},tC=u._FlipLeftRight=function(){return(tC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},rC=u._Floor=function(){return(rC=u._Floor=u.asm.Floor).apply(null,arguments)},oC=u._FloorDiv=function(){return(oC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},nC=u._FusedBatchNorm=function(){return(nC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},sC=u._FusedConv2D=function(){return(sC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},aC=u._FusedDepthwiseConv2D=function(){return(aC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},iC=u._Gather=function(){return(iC=u._Gather=u.asm.Gather).apply(null,arguments)},uC=u._GatherNd=function(){return(uC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},pC=u._Greater=function(){return(pC=u._Greater=u.asm.Greater).apply(null,arguments)},cC=u._GreaterEqual=function(){return(cC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},lC=u._IsFinite=function(){return(lC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},mC=u._IsInf=function(){return(mC=u._IsInf=u.asm.IsInf).apply(null,arguments)},dC=u._IsNan=function(){return(dC=u._IsNan=u.asm.IsNan).apply(null,arguments)},fC=u._LRN=function(){return(fC=u._LRN=u.asm.LRN).apply(null,arguments)},hC=u._LRNGrad=function(){return(hC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},gC=u._LeakyRelu=function(){return(gC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},xC=u._Less=function(){return(xC=u._Less=u.asm.Less).apply(null,arguments)},yC=u._LessEqual=function(){return(yC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},bC=u._LinSpace=function(){return(bC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},CC=u._Log=function(){return(CC=u._Log=u.asm.Log).apply(null,arguments)},wC=u._Log1p=function(){return(wC=u._Log1p=u.asm.Log1p).apply(null,arguments)},SC=u._LogicalAnd=function(){return(SC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},IC=u._LogicalNot=function(){return(IC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},vC=u._LogicalOr=function(){return(vC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},kC=u._LogicalXor=function(){return(kC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},NC=u._Max=function(){return(NC=u._Max=u.asm.Max).apply(null,arguments)},TC=u._MaxPool=function(){return(TC=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},_C=u._MaxPool3D=function(){return(_C=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},EC=u._MaxPoolGrad=function(){return(EC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},RC=u._MaxPoolWithArgmax=function(){return(RC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},DC=u._Maximum=function(){return(DC=u._Maximum=u.asm.Maximum).apply(null,arguments)},AC=u._Mean=function(){return(AC=u._Mean=u.asm.Mean).apply(null,arguments)},FC=u._Min=function(){return(FC=u._Min=u.asm.Min).apply(null,arguments)},PC=u._Minimum=function(){return(PC=u._Minimum=u.asm.Minimum).apply(null,arguments)},OC=u._MirrorPad=function(){return(OC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},MC=u._Mod=function(){return(MC=u._Mod=u.asm.Mod).apply(null,arguments)},LC=u._Multinomial=function(){return(LC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},BC=u._Multiply=function(){return(BC=u._Multiply=u.asm.Multiply).apply(null,arguments)},zC=u._Neg=function(){return(zC=u._Neg=u.asm.Neg).apply(null,arguments)},VC=u._NonMaxSuppressionV3=function(){return(VC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},WC=u._NonMaxSuppressionV4=function(){return(WC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Pm=u._NonMaxSuppressionV5=function(){return(Pm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Om=u._NotEqual=function(){return(Om=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},ul=u._OneHot=function(){return(ul=u._OneHot=u.asm.OneHot).apply(null,arguments)},UC=u._PadV2=function(){return(UC=u._PadV2=u.asm.PadV2).apply(null,arguments)},GC=u._Pow=function(){return(GC=u._Pow=u.asm.Pow).apply(null,arguments)},Fp=u._Prelu=function(){return(Fp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Mm=u._Prod=function(){return(Mm=u._Prod=u.asm.Prod).apply(null,arguments)},Pp=u._RealDiv=function(){return(Pp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Op=u._Reciprocal=function(){return(Op=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},HC=u._Relu=function(){return(HC=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)},$e=u._ResizeBilinearGrad=function(){return($e=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)},$t=u._Reverse=function(){return($t=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)},oo=u._ScatterNd=function(){return(oo=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},Lm=u._SelectV2=function(){return(Lm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},pl=u._Selu=function(){return(pl=u._Selu=u.asm.Selu).apply(null,arguments)},KC=u._Sigmoid=function(){return(KC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ni=u._Sin=function(){return(Ni=u._Sin=u.asm.Sin).apply(null,arguments)},Bm=u._Sinh=function(){return(Bm=u._Sinh=u.asm.Sinh).apply(null,arguments)},UU=u._Softmax=function(){return(UU=u._Softmax=u.asm.Softmax).apply(null,arguments)},GU=u._Softplus=function(){return(GU=u._Softplus=u.asm.Softplus).apply(null,arguments)},HU=u._SparseFillEmptyRows=function(){return(HU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},KU=u._SparseReshape=function(){return(KU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},qU=u._SparseSegmentReduction=function(){return(qU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},jU=u._SparseToDense=function(){return(jU=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},XU=u._Sqrt=function(){return(XU=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},YU=u._Square=function(){return(YU=u._Square=u.asm.Square).apply(null,arguments)},QU=u._SquaredDifference=function(){return(QU=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},ZU=u._Step=function(){return(ZU=u._Step=u.asm.Step).apply(null,arguments)},JU=u._StridedSlice=function(){return(JU=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},eG=u._Sub=function(){return(eG=u._Sub=u.asm.Sub).apply(null,arguments)},tG=u._Sum=function(){return(tG=u._Sum=u.asm.Sum).apply(null,arguments)},rG=u._Tan=function(){return(rG=u._Tan=u.asm.Tan).apply(null,arguments)},oG=u._Tanh=function(){return(oG=u._Tanh=u.asm.Tanh).apply(null,arguments)},nG=u._TensorScatterUpdate=function(){return(nG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},sG=u._Tile=function(){return(sG=u._Tile=u.asm.Tile).apply(null,arguments)},aG=u._TopK=function(){return(aG=u._TopK=u.asm.TopK).apply(null,arguments)},iG=u._Transform=function(){return(iG=u._Transform=u.asm.Transform).apply(null,arguments)},uG=u._Transpose=function(){return(uG=u._Transpose=u.asm.Transpose).apply(null,arguments)},pG=u.__FusedMatMul=function(){return(pG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},cG=u._malloc=function(){return(cG=u._malloc=u.asm.malloc).apply(null,arguments)},lG=u._free=function(){return(lG=u._free=u.asm.free).apply(null,arguments)},mG=u.__emscripten_tls_init=function(){return(mG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},zm=u._pthread_self=function(){return(zm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},dG=u.___errno_location=function(){return(dG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},g0=u.__emscripten_thread_init=function(){return(g0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},fG=u.__emscripten_thread_crashed=function(){return(fG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},hG=u._emscripten_main_thread_process_queued_calls=function(){return(hG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},gG=u._emscripten_main_browser_thread_id=function(){return(gG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},x0=u._emscripten_run_in_main_runtime_thread_js=function(){return(x0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},xG=u._emscripten_dispatch_to_thread_=function(){return(xG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},y0=u.__emscripten_proxy_execute_task_queue=function(){return(y0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},qC=u.__emscripten_thread_free_data=function(){return(qC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},b0=u.__emscripten_thread_exit=function(){return(b0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},C0=u._emscripten_stack_set_limits=function(){return(C0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},jC=u.stackSave=function(){return(jC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Vm=u.stackRestore=function(){return(Vm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Wm=u.stackAlloc=function(){return(Wm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},yG=u.dynCall_iijjiiii=function(){return(yG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},bG=u.dynCall_jiji=function(){return(bG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=eb,u.ExitStatus=Iu,u.PThread=Me;var Um;Ua=function F(){Um||w0(),Um||(Ua=F)};function w0(F){if(F=F||f,vi>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),vi>0)return;function V(){Um||(Um=!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()();w0();var Gm;m&&(Gm={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 Hm;if(typeof WasmBackendModule!=\"undefined\")Hm=WasmBackendModule;else if(typeof t!=\"undefined\")Hm=t;else throw new Error(\"Could not find wasm module in post.js\");if(Gm){var CG=Hm._dispose;Hm._dispose=function(){CG(),Gm.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Gm.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return t.ready}})();typeof Vg==\"object\"&&typeof Uv==\"object\"?Uv.exports=Wv:typeof define==\"function\"&&define.amd?define([],function(){return Wv}):typeof Vg==\"object\"&&(Vg.WasmBackendModuleThreadedSimd=Wv)});var MB=Kt((GFt,OB)=>{OB.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 LB=Kt((Wg,Hv)=>{var Gv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!=\"undefined\"?t:{},o,n;e.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({},e),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 e.locateFile?e.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Rp)return;E(\"exiting due to exception: \"+K)}if(m){var S=zv(),k=Vv();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,$e)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?$e(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 Rp))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},e.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,$e)=>{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}$e()},at.onerror=$e,at.send(null)},b=K=>document.title=K);var _=e.print||console.log.bind(console),E=e.printErr||console.warn.bind(console);Object.assign(e,a),a=null,e.arguments&&(i=e.arguments),e.thisProgram&&(p=e.thisProgram),e.quit&&(u=e.quit);var R=4,D;e.wasmBinary&&(D=e.wasmBinary);var P=e.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,$e){ae>>>=0;for(var at=ae+$e,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var $t=\"\";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){$t+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){$t+=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)$t+=String.fromCharCode(Qe);else{var oo=Qe-65536;$t+=String.fromCharCode(55296|oo>>10,56320|oo&1023)}}return $t}function j(K,ae){return K>>>=0,K?U(ne,K,ae):\"\"}function q(K,ae,$e,at){if($e>>>=0,!(at>0))return 0;for(var _t=$e,$t=$e+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if($e>=$t)break;ae[$e++>>>0]=Ke}else if(Ke<=2047){if($e+1>=$t)break;ae[$e++>>>0]=192|Ke>>6,ae[$e++>>>0]=128|Ke&63}else if(Ke<=65535){if($e+2>=$t)break;ae[$e++>>>0]=224|Ke>>12,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}else{if($e+3>=$t)break;ae[$e++>>>0]=240|Ke>>18,ae[$e++>>>0]=128|Ke>>12&63,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}}return ae[$e>>>0]=0,$e-_t}function Y(K,ae,$e){return q(K,ne,ae,$e)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,e.HEAP8=re=new Int8Array(K),e.HEAP16=ee=new Int16Array(K),e.HEAP32=ie=new Int32Array(K),e.HEAPU8=ne=new Uint8Array(K),e.HEAPU16=oe=new Uint16Array(K),e.HEAPU32=le=new Uint32Array(K),e.HEAPF32=be=new Float32Array(K),e.HEAPF64=_e=new Float64Array(K)}var Fe=e.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],Ge=[],lt=!1;function it(){return P}function ht(){if(e.preRun)for(typeof e.preRun==\"function\"&&(e.preRun=[e.preRun]);e.preRun.length;)Mt(e.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Mr(){if(e.postRun)for(typeof e.postRun==\"function\"&&(e.postRun=[e.postRun]);e.postRun.length;)rr(e.postRun.shift());Ua(Ge)}function Mt(K){st.unshift(K)}function eo(K){ct.unshift(K)}function rr(K){Ge.unshift(K)}var Tt=0,or=null,nr=null;function to(K){Tt++,e.monitorRunDependencies&&e.monitorRunDependencies(Tt)}function ro(K){if(Tt--,e.monitorRunDependencies&&e.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){e.onAbort&&e.onAbort(K),K=\"Aborted(\"+K+\")\",E(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 tl(){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($e){K(new Uint8Array($e))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function rl(){var K={env:ol,wasi_snapshot_preview1:ol};function ae(Qe,Ke){var Ut=Qe.exports;e.asm=Ut,O=e.asm.memory,ve(O.buffer),Pe=e.asm.__indirect_function_table,eo(e.asm.__wasm_call_ctors),ro(\"wasm-instantiate\")}to(\"wasm-instantiate\");function $e(Qe){ae(Qe.instance)}function at(Qe){return tl().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){E(\"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($e,function(Ut){return E(\"wasm streaming compile failed: \"+Ut),E(\"falling back to ArrayBuffer instantiation\"),at($e)})}):at($e)}if(e.instantiateWasm)try{var $t=e.instantiateWasm(K,ae);return $t}catch(Qe){E(\"Module.instantiateWasm callback failed with error: \"+Qe),n(Qe)}return _t().catch(n),{}}var m0,vi;function Rp(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(e)}function by(){fr(\"\")}function bm(){return 4294901760}function Su(){return bm()}function Cy(K,ae,$e){ne.copyWithin(K>>>0,ae>>>0,ae+$e>>>0)}function Cm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Dp(K){var ae=ne.length;K=K>>>0;var $e=bm();if(K>$e)return!1;let at=(Ut,oo)=>Ut+(oo-Ut%oo)%oo;for(var _t=1;_t<=4;_t*=2){var $t=ae*(1+.2/_t);$t=Math.min($t,K+100663296);var Qe=Math.min($e,at(Math.max(K,$t),65536)),Ke=Cm(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 wm(K){return 52}function wy(K,ae,$e,at,_t){return 70}var Sy=[null,[],[]];function d0(K,ae){var $e=Sy[K];ae===0||ae===10?((K===1?_:E)(U($e,0)),$e.length=0):$e.push(ae)}function f0(K,ae,$e,at){for(var _t=0,$t=0;$t<$e;$t++){var Qe=le[ae>>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function Sm(K){var ae=e[\"_\"+K];return ae}function Iu(K,ae){re.set(K,ae>>>0)}function Iy(K,ae,$e,at,_t){var $t={string:yr=>{var Ni=0;if(yr!=null&&yr!==0){var Bm=(yr.length<<2)+1;Ni=ul(Bm),Y(yr,Ni,Bm)}return Ni},array:yr=>{var Ni=ul(yr.length);return Iu(yr,Ni),Ni}};function Qe(yr){return ae===\"string\"?j(yr):ae===\"boolean\"?!!yr:yr}var Ke=Sm(K),Ut=[],oo=0;if(at)for(var Ga=0;GaQe===\"number\"||Qe===\"boolean\"),$t=ae!==\"string\";return $t&&_t&&!at?Sm(K):function(){return Iy(K,ae,$e,arguments,at)}}var ol={abort:by,emscripten_get_heap_max:Su,emscripten_memcpy_big:Cy,emscripten_resize_heap:Dp,fd_close:wm,fd_seek:wy,fd_write:f0},ky=rl(),Im=e.___wasm_call_ctors=function(){return(Im=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},vm=e._init=function(){return(vm=e._init=e.asm.init).apply(null,arguments)},Ny=e._init_with_threads_count=function(){return(Ny=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},km=e._get_threads_count=function(){return(km=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},Ty=e._register_tensor=function(){return(Ty=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},Me=e._dispose_data=function(){return(Me=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},nl=e._dispose=function(){return(nl=e._dispose=e.asm.dispose).apply(null,arguments)},_y=e._Abs=function(){return(_y=e._Abs=e.asm.Abs).apply(null,arguments)},Nm=e._Acos=function(){return(Nm=e._Acos=e.asm.Acos).apply(null,arguments)},Ap=e._Acosh=function(){return(Ap=e._Acosh=e.asm.Acosh).apply(null,arguments)},$y=e._Add=function(){return($y=e._Add=e.asm.Add).apply(null,arguments)},Ey=e._AddN=function(){return(Ey=e._AddN=e.asm.AddN).apply(null,arguments)},Ry=e._All=function(){return(Ry=e._All=e.asm.All).apply(null,arguments)},Dy=e._Any=function(){return(Dy=e._Any=e.asm.Any).apply(null,arguments)},Ay=e._ArgMax=function(){return(Ay=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},Tm=e._ArgMin=function(){return(Tm=e._ArgMin=e.asm.ArgMin).apply(null,arguments)},_m=e._Asin=function(){return(_m=e._Asin=e.asm.Asin).apply(null,arguments)},Fy=e._Asinh=function(){return(Fy=e._Asinh=e.asm.Asinh).apply(null,arguments)},Py=e._Atan=function(){return(Py=e._Atan=e.asm.Atan).apply(null,arguments)},Oy=e._Atan2=function(){return(Oy=e._Atan2=e.asm.Atan2).apply(null,arguments)},sl=e._Atanh=function(){return(sl=e._Atanh=e.asm.Atanh).apply(null,arguments)},My=e._AvgPool=function(){return(My=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},Ly=e._AvgPool3D=function(){return(Ly=e._AvgPool3D=e.asm.AvgPool3D).apply(null,arguments)},By=e._AvgPool3DGrad=function(){return(By=e._AvgPool3DGrad=e.asm.AvgPool3DGrad).apply(null,arguments)},vu=e._AvgPoolGrad=function(){return(vu=e._AvgPoolGrad=e.asm.AvgPoolGrad).apply(null,arguments)},zy=e._BatchMatMul=function(){return(zy=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},Vy=e._Bincount=function(){return(Vy=e._Bincount=e.asm.Bincount).apply(null,arguments)},$m=e._BitwiseAnd=function(){return($m=e._BitwiseAnd=e.asm.BitwiseAnd).apply(null,arguments)},Wy=e._Ceil=function(){return(Wy=e._Ceil=e.asm.Ceil).apply(null,arguments)},al=e._ClipByValue=function(){return(al=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},Uy=e._Conv2D=function(){return(Uy=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},Gy=e._Conv2DBackpropInput=function(){return(Gy=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},Hy=e._Conv3D=function(){return(Hy=e._Conv3D=e.asm.Conv3D).apply(null,arguments)},ki=e._Conv3DBackpropFilterV2=function(){return(ki=e._Conv3DBackpropFilterV2=e.asm.Conv3DBackpropFilterV2).apply(null,arguments)},il=e._Conv3DBackpropInputV2=function(){return(il=e._Conv3DBackpropInputV2=e.asm.Conv3DBackpropInputV2).apply(null,arguments)},Ky=e._Cos=function(){return(Ky=e._Cos=e.asm.Cos).apply(null,arguments)},qy=e._Cosh=function(){return(qy=e._Cosh=e.asm.Cosh).apply(null,arguments)},jy=e._CropAndResize=function(){return(jy=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},Xy=e._Cumprod=function(){return(Xy=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},Em=e._Cumsum=function(){return(Em=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},Rm=e._DenseBincount=function(){return(Rm=e._DenseBincount=e.asm.DenseBincount).apply(null,arguments)},Yy=e._DepthToSpace=function(){return(Yy=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},Qy=e._DepthwiseConv2dNative=function(){return(Qy=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},Dm=e._Diag=function(){return(Dm=e._Diag=e.asm.Diag).apply(null,arguments)},Am=e._Dilation2D=function(){return(Am=e._Dilation2D=e.asm.Dilation2D).apply(null,arguments)},Zy=e._Dilation2DBackpropFilter=function(){return(Zy=e._Dilation2DBackpropFilter=e.asm.Dilation2DBackpropFilter).apply(null,arguments)},Jy=e._Dilation2DBackpropInput=function(){return(Jy=e._Dilation2DBackpropInput=e.asm.Dilation2DBackpropInput).apply(null,arguments)},eb=e._Elu=function(){return(eb=e._Elu=e.asm.Elu).apply(null,arguments)},tb=e._EluGrad=function(){return(tb=e._EluGrad=e.asm.EluGrad).apply(null,arguments)},Fm=e._Equal=function(){return(Fm=e._Equal=e.asm.Equal).apply(null,arguments)},h0=e._Erf=function(){return(h0=e._Erf=e.asm.Erf).apply(null,arguments)},rb=e._Exp=function(){return(rb=e._Exp=e.asm.Exp).apply(null,arguments)},ob=e._Expm1=function(){return(ob=e._Expm1=e.asm.Expm1).apply(null,arguments)},nb=e._FlipLeftRight=function(){return(nb=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},sb=e._Floor=function(){return(sb=e._Floor=e.asm.Floor).apply(null,arguments)},ab=e._FloorDiv=function(){return(ab=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},ib=e._FusedBatchNorm=function(){return(ib=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},ub=e._FusedConv2D=function(){return(ub=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},pb=e._FusedDepthwiseConv2D=function(){return(pb=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},cb=e._Gather=function(){return(cb=e._Gather=e.asm.Gather).apply(null,arguments)},lb=e._GatherNd=function(){return(lb=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},mb=e._Greater=function(){return(mb=e._Greater=e.asm.Greater).apply(null,arguments)},db=e._GreaterEqual=function(){return(db=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},fb=e._IsFinite=function(){return(fb=e._IsFinite=e.asm.IsFinite).apply(null,arguments)},hb=e._IsInf=function(){return(hb=e._IsInf=e.asm.IsInf).apply(null,arguments)},gb=e._IsNan=function(){return(gb=e._IsNan=e.asm.IsNan).apply(null,arguments)},xb=e._LRN=function(){return(xb=e._LRN=e.asm.LRN).apply(null,arguments)},yb=e._LRNGrad=function(){return(yb=e._LRNGrad=e.asm.LRNGrad).apply(null,arguments)},bb=e._LeakyRelu=function(){return(bb=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},Cb=e._Less=function(){return(Cb=e._Less=e.asm.Less).apply(null,arguments)},wb=e._LessEqual=function(){return(wb=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},Sb=e._LinSpace=function(){return(Sb=e._LinSpace=e.asm.LinSpace).apply(null,arguments)},Ib=e._Log=function(){return(Ib=e._Log=e.asm.Log).apply(null,arguments)},vb=e._Log1p=function(){return(vb=e._Log1p=e.asm.Log1p).apply(null,arguments)},kb=e._LogicalAnd=function(){return(kb=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},Nb=e._LogicalNot=function(){return(Nb=e._LogicalNot=e.asm.LogicalNot).apply(null,arguments)},Tb=e._LogicalOr=function(){return(Tb=e._LogicalOr=e.asm.LogicalOr).apply(null,arguments)},_b=e._LogicalXor=function(){return(_b=e._LogicalXor=e.asm.LogicalXor).apply(null,arguments)},$b=e._Max=function(){return($b=e._Max=e.asm.Max).apply(null,arguments)},Eb=e._MaxPool=function(){return(Eb=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},Rb=e._MaxPool3D=function(){return(Rb=e._MaxPool3D=e.asm.MaxPool3D).apply(null,arguments)},Db=e._MaxPool3DGrad=function(){return(Db=e._MaxPool3DGrad=e.asm.MaxPool3DGrad).apply(null,arguments)},Ab=e._MaxPoolGrad=function(){return(Ab=e._MaxPoolGrad=e.asm.MaxPoolGrad).apply(null,arguments)},Fb=e._MaxPoolWithArgmax=function(){return(Fb=e._MaxPoolWithArgmax=e.asm.MaxPoolWithArgmax).apply(null,arguments)},Pb=e._Maximum=function(){return(Pb=e._Maximum=e.asm.Maximum).apply(null,arguments)},Ob=e._Mean=function(){return(Ob=e._Mean=e.asm.Mean).apply(null,arguments)},Mb=e._Min=function(){return(Mb=e._Min=e.asm.Min).apply(null,arguments)},Lb=e._Minimum=function(){return(Lb=e._Minimum=e.asm.Minimum).apply(null,arguments)},Bb=e._MirrorPad=function(){return(Bb=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},zb=e._Mod=function(){return(zb=e._Mod=e.asm.Mod).apply(null,arguments)},Vb=e._Multinomial=function(){return(Vb=e._Multinomial=e.asm.Multinomial).apply(null,arguments)},Wb=e._Multiply=function(){return(Wb=e._Multiply=e.asm.Multiply).apply(null,arguments)},Ub=e._Neg=function(){return(Ub=e._Neg=e.asm.Neg).apply(null,arguments)},Gb=e._NonMaxSuppressionV3=function(){return(Gb=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},Hb=e._NonMaxSuppressionV4=function(){return(Hb=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},Kb=e._NonMaxSuppressionV5=function(){return(Kb=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},qb=e._NotEqual=function(){return(qb=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},jb=e._OneHot=function(){return(jb=e._OneHot=e.asm.OneHot).apply(null,arguments)},Xb=e._PadV2=function(){return(Xb=e._PadV2=e.asm.PadV2).apply(null,arguments)},Yb=e._Pow=function(){return(Yb=e._Pow=e.asm.Pow).apply(null,arguments)},Qb=e._Prelu=function(){return(Qb=e._Prelu=e.asm.Prelu).apply(null,arguments)},Zb=e._Prod=function(){return(Zb=e._Prod=e.asm.Prod).apply(null,arguments)},Jb=e._RealDiv=function(){return(Jb=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},eC=e._Reciprocal=function(){return(eC=e._Reciprocal=e.asm.Reciprocal).apply(null,arguments)},tC=e._Relu=function(){return(tC=e._Relu=e.asm.Relu).apply(null,arguments)},rC=e._Relu6=function(){return(rC=e._Relu6=e.asm.Relu6).apply(null,arguments)},oC=e._ResizeBilinear=function(){return(oC=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},nC=e._ResizeBilinearGrad=function(){return(nC=e._ResizeBilinearGrad=e.asm.ResizeBilinearGrad).apply(null,arguments)},sC=e._ResizeNearestNeighbor=function(){return(sC=e._ResizeNearestNeighbor=e.asm.ResizeNearestNeighbor).apply(null,arguments)},aC=e._ResizeNearestNeighborGrad=function(){return(aC=e._ResizeNearestNeighborGrad=e.asm.ResizeNearestNeighborGrad).apply(null,arguments)},iC=e._Reverse=function(){return(iC=e._Reverse=e.asm.Reverse).apply(null,arguments)},uC=e._RotateWithOffset=function(){return(uC=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},pC=e._Round=function(){return(pC=e._Round=e.asm.Round).apply(null,arguments)},cC=e._Rsqrt=function(){return(cC=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},lC=e._ScatterNd=function(){return(lC=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},mC=e._SearchSorted=function(){return(mC=e._SearchSorted=e.asm.SearchSorted).apply(null,arguments)},dC=e._SelectV2=function(){return(dC=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},fC=e._Selu=function(){return(fC=e._Selu=e.asm.Selu).apply(null,arguments)},hC=e._Sigmoid=function(){return(hC=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},gC=e._Sign=function(){return(gC=e._Sign=e.asm.Sign).apply(null,arguments)},xC=e._Sin=function(){return(xC=e._Sin=e.asm.Sin).apply(null,arguments)},yC=e._Sinh=function(){return(yC=e._Sinh=e.asm.Sinh).apply(null,arguments)},bC=e._Softmax=function(){return(bC=e._Softmax=e.asm.Softmax).apply(null,arguments)},CC=e._Softplus=function(){return(CC=e._Softplus=e.asm.Softplus).apply(null,arguments)},wC=e._SparseFillEmptyRows=function(){return(wC=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},SC=e._SparseReshape=function(){return(SC=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},IC=e._SparseSegmentReduction=function(){return(IC=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},vC=e._SparseToDense=function(){return(vC=e._SparseToDense=e.asm.SparseToDense).apply(null,arguments)},kC=e._Sqrt=function(){return(kC=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},NC=e._Square=function(){return(NC=e._Square=e.asm.Square).apply(null,arguments)},TC=e._SquaredDifference=function(){return(TC=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},_C=e._Step=function(){return(_C=e._Step=e.asm.Step).apply(null,arguments)},$C=e._StridedSlice=function(){return($C=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},EC=e._Sub=function(){return(EC=e._Sub=e.asm.Sub).apply(null,arguments)},RC=e._Sum=function(){return(RC=e._Sum=e.asm.Sum).apply(null,arguments)},DC=e._Tan=function(){return(DC=e._Tan=e.asm.Tan).apply(null,arguments)},AC=e._Tanh=function(){return(AC=e._Tanh=e.asm.Tanh).apply(null,arguments)},FC=e._TensorScatterUpdate=function(){return(FC=e._TensorScatterUpdate=e.asm.TensorScatterUpdate).apply(null,arguments)},PC=e._Tile=function(){return(PC=e._Tile=e.asm.Tile).apply(null,arguments)},OC=e._TopK=function(){return(OC=e._TopK=e.asm.TopK).apply(null,arguments)},MC=e._Transform=function(){return(MC=e._Transform=e.asm.Transform).apply(null,arguments)},LC=e._Transpose=function(){return(LC=e._Transpose=e.asm.Transpose).apply(null,arguments)},BC=e.__FusedMatMul=function(){return(BC=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},zC=e._malloc=function(){return(zC=e._malloc=e.asm.malloc).apply(null,arguments)},VC=e._free=function(){return(VC=e._free=e.asm.free).apply(null,arguments)},WC=e.___errno_location=function(){return(WC=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},Pm=e.stackSave=function(){return(Pm=e.stackSave=e.asm.stackSave).apply(null,arguments)},Om=e.stackRestore=function(){return(Om=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},ul=e.stackAlloc=function(){return(ul=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},UC=e.dynCall_iijjiiii=function(){return(UC=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},GC=e.dynCall_jiji=function(){return(GC=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=vy;var Fp;nr=function K(){Fp||Mm(),Fp||(nr=K)};function Mm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Fp||(Fp=!0,e.calledRun=!0,!M&&(gt(),o(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),Mr()))}e.setStatus?(e.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){e.setStatus(\"\")},1),ae()},1)):ae()}if(e.preInit)for(typeof e.preInit==\"function\"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();Mm();var Pp;s&&(Pp={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 Op;if(typeof t!=\"undefined\")Op=t;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Op=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Pp){var HC=Op._dispose;Op._dispose=function(){HC(),Pp.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Pp.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return t.ready}})();typeof Wg==\"object\"&&typeof Hv==\"object\"?Hv.exports=Gv:typeof define==\"function\"&&define.amd?define([],function(){return Gv}):typeof Wg==\"object\"&&(Wg.WasmBackendModule=Gv)});var Bo=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},so=class{refCount(t){return Br(\"refCount\")}incRef(t){return Br(\"incRef\")}timerAvailable(){return!0}time(t){return Br(\"time\")}read(t){return Br(\"read\")}readSync(t){return Br(\"readSync\")}readToGPU(t,e){return Br(\"readToGPU\")}numDataIds(){return Br(\"numDataIds\")}disposeData(t,e){return Br(\"disposeData\")}write(t,e,o){return Br(\"write\")}move(t,e,o,n,s){return Br(\"move\")}createTensorFromGPUData(t,e,o){return Br(\"createTensorFromGPUData\")}memory(){return Br(\"memory\")}floatPrecision(){return Br(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Br(\"dispose\")}};function Br(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 v0(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,Km(r,t,e)}function _G(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,o=0;for(;e>0;)o=Math.random()*e|0,e--,Km(r,e,o),Km(t,e,o)}function Bp(r,t,e){return Math.max(r,Math.min(t,e))}function $G(r){return r%2===0?r:r+1}function Km(r,t,e){let o=r[t];r[t]=r[e],r[e]=o}function EG(r){let t=0;for(let e=0;ee+` Shapes ${r} and ${t} must match`)}function ao(r){$(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function He(r){if(r.length===0)return 1;let t=r[0];for(let e=1;e0,e,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=t(a);if(e!=null&&a>=e){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function LG(r,t){let e=1,o=-1;for(let s=0;s=0)e*=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(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let n=r.slice();return n[o]=t/e,n}function Ti(r,t){let e=t.length;return r=r==null?t.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-e&&o`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),$(r.every(o=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?e+o:o)}function ZC(r,t){let e=[],o=[],n=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||n?null:Ti(t,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(e.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(e.push(r[i]),o.push(i))}return{newShape:e,keptDims:o}}function JC(r,t){return qm(r,t)}function qm(r,t){let e=null;if(r==null||r===\"float32\")e=new Float32Array(t);else if(r===\"int32\")e=new Int32Array(t);else if(r===\"bool\")e=new Uint8Array(t);else if(r===\"string\")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function ew(r,t){for(let e=0;et+=e.length),t}function zo(r){return typeof r==\"string\"||r instanceof String}function k0(r){return typeof r==\"boolean\"}function N0(r){return typeof r==\"number\"}function _i(r){return Array.isArray(r)?_i(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":N0(r)?\"float32\":zo(r)?\"string\":k0(r)?\"bool\":\"float32\"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Vp(r,t){for(let e=t;e=0;--o)e[o]=e[o+1]*r[o+1];return e}function T0(r,t,e,o=!1){let n=new Array;if(t.length===1){let s=t[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(e?2:1);if(o===0)return[];if(o!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?\" for a complex tensor\":\"\"}.`);return T0(0,r,t,e)}function zG(r,t){if(Array.isArray(r))return r;if(t===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(t===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(t===\"bool\"||t===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${t}`)}function cl(r,t){let e=Wp(r,t);for(let o=0;oo*n,1);if(t==null||t===\"float32\")return ku(r,new Float32Array(e));if(t===\"int32\")return ku(r,new Int32Array(e));if(t===\"bool\")return ku(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function Ct(r){r.forEach(t=>{$(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function WG(r,t,e){if(t===0)return 0;if(t===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=qG(n,s)})}};function HG(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...o)=>(KG(t,o[0],o[1]),o.join(\"=\"))),t}function KG(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||\"\")}function qG(r,t){let e=t.toLowerCase();return e===\"true\"||e===\"false\"?e===\"true\":`${+e}`===e?+e:t}function A(){return ow}var ow=null;function $0(r){ow=r}var nw;function sw(){if(nw==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\");nw=r}return nw}function jG(){let r=sw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function ml(r,t){let e=jG();if(e.has(r))return e.get(r);{let o=t();return e.set(r,o),e.get(r)}}var Xs=\"Abs\",Vo=\"Acos\",Wo=\"Acosh\",io=\"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\",Ei=\"AvgPool3DGrad\",Zo=\"BatchMatMul\",Js=\"BatchToSpaceND\",Jo=\"Bincount\",qa=\"BitwiseAnd\",Bce=\"BroadcastTo\",ea=\"BroadcastArgs\",yo=\"Cast\",en=\"Ceil\",bo=\"ClipByValue\",Ri=\"Complex\",Di=\"ComplexAbs\",ta=\"Concat\",tn=\"Conv2D\",Ai=\"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\",Fi=\"DepthwiseConv2dNativeBackpropFilter\",Pi=\"DepthwiseConv2dNativeBackpropInput\",oa=\"Diag\",dn=\"Dilation2D\",Oi=\"Dilation2DBackpropInput\",Mi=\"Dilation2DBackpropFilter\",_u=\"Draw\",fn=\"RealDiv\",Li=\"Einsum\",hn=\"Elu\",Xa=\"EluGrad\",gn=\"Erf\",xn=\"Equal\",yn=\"Exp\",na=\"ExpandDims\",bn=\"Expm1\",Bi=\"FFT\",sa=\"Fill\",Cn=\"FlipLeftRight\",wn=\"Floor\",Sn=\"FloorDiv\",In=\"FusedBatchNorm\",aa=\"GatherV2\",vn=\"GatherNd\",kn=\"Greater\",Nn=\"GreaterEqual\",Co=\"Identity\",zi=\"IFFT\",Vi=\"Imag\",Tn=\"IsFinite\",_n=\"IsInf\",$n=\"IsNan\",En=\"LeakyRelu\",Rn=\"Less\",Dn=\"LessEqual\",An=\"LinSpace\",Fn=\"Log\",Pn=\"Log1p\",On=\"LogicalAnd\",Mn=\"LogicalNot\",Ln=\"LogicalOr\",E0=\"LogicalXor\",zce=\"LogSoftmax\",Vce=\"LowerBound\",Bn=\"LRN\",Ya=\"LRNGrad\",Wce=\"MatrixBandPart\",zn=\"Max\",Vn=\"Maximum\",Wn=\"MaxPool\",Wi=\"MaxPoolGrad\",ia=\"MaxPool3D\",Ui=\"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\",Uce=\"Pool\",ts=\"Pow\",rs=\"Prelu\",os=\"Prod\",Up=\"RaggedGather\",Gp=\"RaggedRange\",Hp=\"RaggedTensorToTensor\",ma=\"Range\",Gi=\"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\",Hi=\"SparseFillEmptyRows\",ei=\"SparseReshape\",ya=\"SparseSegmentMean\",ba=\"SparseSegmentSum\",vs=\"SparseToDense\",ks=\"SquaredDifference\",Ki=\"Square\",$u=\"StaticRegexReplace\",Ns=\"StridedSlice\",Ca=\"StringNGrams\",qi=\"StringSplit\",ji=\"StringToHashBucketFast\",Ts=\"Sub\",_s=\"Tan\",$s=\"Tanh\",uo=\"Tile\",Es=\"TopK\",Rs=\"Transform\",po=\"Transpose\",Xi=\"Unique\",wa=\"Unpack\",Yi=\"UnsortedSegmentSum\",Gce=\"UpperBound\",Sa=\"ZerosLike\",wo=\"Step\",Eu=\"FromPixels\",Ds=\"RotateWithOffset\",So=\"_FusedMatMul\",Io=\"FusedConv2D\",vo=\"FusedDepthwiseConv2D\";function Ia(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function XG(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var Kp=ml(\"kernelRegistry\",()=>new Map),dl=ml(\"gradRegistry\",()=>new Map);function qp(r,t){let e=iw(r,t);return Kp.get(e)}function aw(r){return dl.get(r)}function jm(r){let t=Kp.entries(),e=[];for(;;){let{done:o,value:n}=t.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&e.push(a)}return e}function ti(r){let{kernelName:t,backendName:e}=r,o=iw(t,e);Kp.has(o)&&Ia(`The kernel '${t}' for backend '${e}' is already registered`),Kp.set(o,r)}function Xce(r){let{kernelName:t}=r;dl.has(t)&&A().getBool(\"DEBUG\")&&Ia(`Overriding the gradient for '${t}'`),dl.set(t,r)}function Yce(r,t){let e=iw(r,t);if(!Kp.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);Kp.delete(e)}function Qce(r){if(!dl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);dl.delete(r)}function Zce(r,t){jm(r).forEach(o=>{let n=Object.assign({},o,{backendName:t});ti(n)})}function iw(r,t){return`${t}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>QC,assert:()=>$,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>ao,assertShapesMatch:()=>xt,bytesFromStringArray:()=>rw,bytesPerElement:()=>zp,checkConversionForErrors:()=>ew,clamp:()=>Bp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>zG,createScalarValue:()=>r4,createShuffledIndices:()=>OG,decodeString:()=>Qp,distSquared:()=>DG,encodeString:()=>Zi,fetch:()=>n4,fingerPrint64:()=>t4,flatten:()=>Fs,getArrayFromDType:()=>qm,getTypedArrayFromDType:()=>JC,hasEncodingLoss:()=>BG,hexToLong:()=>fl,indexToLoc:()=>UG,inferDtype:()=>_i,inferFromImplicitShape:()=>LG,isBoolean:()=>k0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>N0,isPromise:()=>Tu,isScalarShape:()=>AG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>tw,locToIndex:()=>WG,makeOnesTypedArray:()=>cl,makeZerosNestedTypedArray:()=>VG,makeZerosTypedArray:()=>Wp,nearestDivisor:()=>Vp,nearestLargerEven:()=>$G,now:()=>Pu,parseAxisParam:()=>Ti,randUniform:()=>RG,repeatedTry:()=>MG,rightPad:()=>Nu,shuffle:()=>v0,shuffleCombo:()=>_G,sizeFromShape:()=>He,sizeToSquarishShape:()=>PG,squeezeShape:()=>ZC,sum:()=>EG,swap:()=>Km,tanh:()=>FG,toNestedArray:()=>ku,toTypedArray:()=>Yp});function Xm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var lw=Lp(W0());var Fu=lw.default||lw;function fl(r){return Fu.fromString(r,!0,16)}var G0=fl(\"c3a5c85c97cb3127\"),Au=fl(\"b492b66fbe98f273\"),Cr=fl(\"9ae16a3b2f90404f\");function cw(r){return r.xor(r.shru(47))}function H0(r,t,e){let o=r.slice(t,t+e);return Fu.fromBytes(Array.from(o),!0,!0)}function wt(r,t){return H0(r,t,8)}function U0(r,t){return H0(r,t,4)}function Yt(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function Qi(r,t,e=fl(\"9ddfea08eb382d69\")){let o=r.xor(t).mul(e);o=o.xor(o.shru(47));let n=t.xor(o).mul(e);return n=n.xor(n.shru(47)),n=n.mul(e),n}function QG(r,t,e,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(t),n=n.add(e),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Qm(r,t,e,o){return QG(wt(r,t),wt(r,t+8),wt(r,t+16),wt(r,t+24),e,o)}function ZG(r,t=r.length){if(t>=8){let e=Cr.add(t*2),o=wt(r,0).add(Cr),n=wt(r,t-8),s=Yt(n,37).mul(e).add(o),a=Yt(o,25).add(n).mul(e);return Qi(s,a,e)}if(t>=4){let e=Cr.add(t*2),o=U0(r,0);return Qi(o.shl(3).add(t),U0(r,t-4),e)}if(t>0){let e=r[0],o=r[t>>1],n=r[t-1],s=e+(o<<8),a=t+(n<<2);return cw(Cr.mul(s).xor(G0.mul(a))).mul(Cr)}return Cr}function JG(r,t=r.length){let e=Cr.add(t*2),o=wt(r,0).mul(Au),n=wt(r,8),s=wt(r,t-8).mul(e),a=wt(r,t-16).mul(Cr);return Qi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),e)}function e4(r,t=r.length){let e=Cr.add(t*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,t-8).mul(e),a=wt(r,t-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Qi(i,o.add(Yt(n.add(Cr),18)).add(s),e),u=wt(r,16).mul(e),c=wt(r,24),l=i.add(wt(r,t-32)).mul(e),m=p.add(wt(r,t-24)).mul(e);return Qi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),e)}function t4(r,t=r.length){let e=Fu.fromNumber(81,!0);if(t<=32)return t<=16?ZG(r,t):JG(r,t);if(t<=64)return e4(r,t);let o=e,n=e.mul(Au).add(113),s=cw(n.mul(Cr).add(113)).mul(Cr),a=[Fu.UZERO,Fu.UZERO],i=[Fu.UZERO,Fu.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Au),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Au),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Au),a=Qm(r,p,a[1].mul(Au),o.add(i[0])),i=Qm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Au.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(t-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=Qm(r,p,a[1].mul(l),o.add(i[0])),i=Qm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Qi(Qi(a[0],i[0],l).add(cw(n).mul(G0)).add(s),Qi(a[1],i[1],l).add(o),l)}function r4(r,t){return t===\"string\"?Zi(r):Yp([r],t)}function o4(r,t){return r instanceof Float32Array&&t===\"float32\"||r instanceof Int32Array&&t===\"int32\"||r instanceof Uint8Array&&t===\"bool\"}function Yp(r,t){if(t===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Fs(r)),A().getBool(\"DEBUG\")&&ew(r,t),o4(r,t))return r;if(t==null||t===\"float32\"||t===\"complex64\")return new Float32Array(r);if(t===\"int32\")return new Int32Array(r);if(t===\"bool\"){let e=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Pu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Pu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{s4(l,c.dtype,t)})}return{kernelName:t,outputs:n,inputs:e,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(t){let{kernelName:e,outputs:o,timeMs:n,inputs:s,extraInfo:a}=t;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(e,i,p[0],p[1],s,p[2])})})}};function s4(r,t,e){if(t!==\"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 K0(r,t,e){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[e.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=t[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=e(()=>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 j0=20,hl=3,dw=7;function X0(r,t,e,o){let n=js(t),s=a4(r,t,e,n),a=t.length,i=Jm(r,t,e,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${e}`),p.push(` rank: ${a}`),p.push(` shape: [${t}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function a4(r,t,e,o){let n=He(t),s=o[o.length-1],a=new Array(s).fill(0),i=t.length,p=e===\"complex64\"?xl(r):r;if(i>1)for(let u=0;uj0){let g=hl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-hl)*a,i*a));return e===\"complex64\"&&(x=xl(x),b=xl(b)),[\"[\"+x.map((C,S)=>gl(C,n[S],e)).join(\", \")+\", ..., \"+b.map((C,S)=>gl(C,n[i-hl+S],e)).join(\", \")+\"]\"]}return[\"[\"+(e===\"complex64\"?xl(r):Array.from(r)).map((g,x)=>gl(g,n[x],e)).join(\", \")+\"]\"]}let u=t.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>j0){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(e===\"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||qm(e,this.size),this.strides=js(t)}set(t,...e){e.length===0&&(e=[0]),$(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let o=this.locToIndex(e);this.values[o]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let n of t){if(n<0||n>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let o=t[t.length-1];for(let n=0;nQp(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return t}dataToGPU(t){return this.throwIfDisposed(),Ps().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Ps().readSync(this.dataId);if(this.dtype===\"string\")try{return t.map(e=>Qp(e))}catch(e){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}return t}async bytes(){this.throwIfDisposed();let t=await Ps().read(this.dataId);return this.dtype===\"string\"?t:new Uint8Array(t.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(t=!1){return Zp.print(this,t)}clone(){return this.throwIfDisposed(),Zp.clone(this)}toString(t=!1){let e=this.dataSync();return X0(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),Zp.cast(this,t)}variable(t=!0,e,o){return this.throwIfDisposed(),Ps().makeVariable(this,t,e,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function fw(){return ml(\"Tensor\",()=>mt)}fw();var ri=class extends mt{constructor(t,e,o,n){super(t.shape,t.dtype,t.dataId,n),this.trainable=e,this.name=o}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!br(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=t.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 tk={};qe(tk,{assertTypesMatch:()=>Cw,getTensorsInContainer:()=>yl,isTensorInList:()=>p4,makeTypesMatch:()=>Oe});var hw;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(hw||(hw={}));var gw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(gw||(gw={}));var xw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(xw||(xw={}));var yw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(yw||(yw={}));var bw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(bw||(bw={}));var u4={float32:yw,int32:gw,bool:xw,complex64:bw};function dt(r,t){if(r===\"string\"||t===\"string\"){if(r===\"string\"&&t===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${t}`)}return u4[r][t]}function oi(r){return dt(r,\"int32\")}function ed(r){return r!=null&&typeof r==\"object\"&&\"texture\"in r&&r.texture instanceof WebGLTexture}function td(r){return typeof GPUBuffer!=\"undefined\"&&r!=null&&typeof r==\"object\"&&\"buffer\"in r&&r.buffer instanceof GPUBuffer}function Oe(r,t){if(r.dtype===t.dtype)return[r,t];let e=dt(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function Cw(r,t){$(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function p4(r,t){return t.some(e=>e.id===r.id)}function yl(r){let t=[];return ek(r,t,new Set),t}function ek(r,t,e){if(r==null)return;if(r instanceof mt){t.push(r);return}if(!c4(r))return;let o=r;for(let n in o){let s=o[n];e.has(s)||(e.add(s),ek(s,t,e))}}function c4(r){return Array.isArray(r)||typeof r==\"object\"}function ww(r){return r.kernelName!=null}var rd=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(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},bl=class r{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new rd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let e=0;e{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){jm(t).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let o=e.factory();if(o&&!(o instanceof so)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;ethis.startScope(o),()=>this.endScope(n),()=>(n=e(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(t,e,o){t();try{let n=o();return e(),n}catch(n){throw e(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(t){let e=T.runKernel(Co,{x:t}),o={x:t},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,[e],n,s,{}),e}runKernel(t,e,o){if(this.backendName==null&&this.backend,!(qp(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(t,e,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-e-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let e,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=ww(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(ww(t)){let{kernelName:f,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let x=qp(f,this.backendName);$(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}=t,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}=t,m=ww(t)?null:t.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool(\"DEBUG\")&&!this.state.profiling?e=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(d),e=d.outputs)}),n&&this.addTapeNode(u,c,e,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:e.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(t,e,o){let n=aw(t);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(e),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(e).map(u=>e[u])):i=s.map(u=>e[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(t,e,o,n){if(t==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=t;o===\"string\"&&zo(t[0])&&(s=t.map(p=>Zi(p)));let a=n.write(s,e,o),i=new mt(e,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=rw(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(t,e,o,n){o=o||\"float32\";let s={dataId:t,shape:e,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(t,e){let{dataId:o,shape:n,dtype:s}=t,a=new mt(n,s,o,this.nextTensorId());return this.trackTensor(a,e),a}makeVariable(t,e=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==t.dtype&&(t=t.cast(n));let s=new ri(t,e,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(t,e){this.state.numTensors++,t.dtype===\"string\"&&this.state.numStringTensors++;let o=0;t.dtype!==\"complex64\"&&t.dtype!==\"string\"&&(o=t.size*zp(t.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:o})),t instanceof ri||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype===\"string\"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!==\"complex64\"&&t.dtype!==\"string\"){let o=t.size*zp(t.dtype);this.state.numBytes-=o}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}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 e=this.state.numBytes,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,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(t,e,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:o,saved:s},p=aw(t);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Wp(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(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let e={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=yl(t),o=new Set(e.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(t,e,o,n=!1){if($(e.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\",t));$(s instanceof mt,()=>\"The result y returned by f() must be a tensor.\");let a=K0(this.state.activeTape,e,s);if(!n&&a.length===0&&e.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?l4(s.shape):o,q0(i,a,u=>this.tidy(u),m4);let p=e.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(t){return $(qs(t),()=>\"The f passed in customGrad(f) must be a function.\"),(...e)=>{$(e.every(i=>i instanceof mt),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};e.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=t(...e,p),$(o.value instanceof mt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),$(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];$(c.length===e.length,()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).\"),$(c.every(m=>m instanceof 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(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=Pu(),o=await this.backend.time(t);return o.wallMs=Pu()-e,o}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 rd;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}};bl.nextTensorId=0;bl.nextVariableId=0;function l4(r){let t=cl(He(r),\"float32\");return T.makeTensor(t,r,\"float32\")}function Sw(){let r=sw();if(r._tfengine==null){let t=new ll(r);r._tfengine=new bl(t)}return $0(r._tfengine.ENV),Q0(()=>r._tfengine),r._tfengine}var T=Sw();function m4(r,t){let e={a:r,b:t};return T.runKernel(io,e)}var Ji={};qe(Ji,{isBrowser:()=>vw,isMobile:()=>h4,mockIsMobile:()=>f4});function d4(){return typeof navigator!=\"undefined\"&&navigator!=null}var Iw;function f4(r){Iw=r}function h4(r){if(Iw!==void 0)return Iw;if(r||d4()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let t=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!t){let e=r;return e.userAgentData&&e.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 vw(){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\",()=>vw());_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,t){let e=r;if(Pt(r))return t===\"string\"?[]:[r.length];if(ed(r)){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}else if(td(r))return[r.buffer.size/(t==null?4:zp(t))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(e)||Pt(e)&&t!==\"string\";)o.push(e.length),e=e[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&ok(r,o,[]),o}function ok(r,t,e){if(e=e||[],!Array.isArray(r)&&!Pt(r)){$(t.length===0,()=>`Element arr[${e.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}$(t.length>0,()=>`Element arr[${e.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===t[0],()=>`Element arr[${e.join(\"][\")}] should have ${t[0]} elements, but has ${r.length} elements`);let o=t.slice(1);for(let n=0;n=0&&(n=o),rk(o,n,t,e),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 '${t}' passed to '${e}' 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\"?Yp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(r,t,e,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${t}[${a}]`,e,o))}var kw=\"__op\";function N(r){let t=Object.keys(r);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 e=t[0],o=r[e];e.endsWith(\"_\")&&(e=e.substring(0,e.length-1)),e=e+kw;let n=(...s)=>{T.startScope(e);try{let a=o(...s);return Tu(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:e,configurable:!0}),n}function g4(r,t){let e=v(r,\"real\",\"complex\"),o=v(t,\"imag\",\"complex\");xt(e.shape,o.shape,`real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:e,imag:o};return T.runKernel(Ri,n)}var $r=N({complex_:g4});function wr(r,t,e,o){if(o==null)o=_i(r);else if(o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(td(r)||ed(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,t||e,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(t!=null){Ct(t);let n=He(t),s=He(e);$(n===s,()=>`Based on the provided shape, [${t}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!Pt(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=o!==\"string\"?Yp(r,o):Fs(r,[],!0),T.makeTensor(r,t,o)}function ar(r,t,e){let o=sr(r,e);return wr(r,t,o,e)}var Cl={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(t){return new r(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(o=>Pt(o)?o.buffer:o),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let e=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function e(n){return t=n.end?1:0}if(e(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=x4(this.shards,e);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function x4(r,t){let e=0,o=r.length;for(;e<=o;){let n=Math.floor((o-e)/2)+e,s=t(r[n]);if(s===0)return n;s<0?o=n:e=n+1}return-1}var od=4;async function sk(r,t){let e=[],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)+od*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(t+=s.byteLength,e.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(t),n=0;return e.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Nw=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function nk(r){return Nw?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function ak(r){if(Nw)return Buffer.from(r).toString(\"base64\");let t=new Uint8Array(r),e=\"\";for(let o=0,n=t.length;o{let o=e<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function C4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function w4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function S4(){let r=b4(),t=C4(),e=w4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+t[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(t){r.getInstance().saveRouters.push(t)}static registerLoadRouter(t){r.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return r.getHandlers(t,\"save\")}static getLoadHandlers(t,e){return r.getHandlers(t,\"load\",e)}static getHandlers(t,e,o){let n=[];return(e===\"load\"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(t,o);i!==null&&n.push(i)}),n}},pk=r=>qt.registerSaveRouter(r),ck=r=>qt.registerLoadRouter(r),lk=r=>qt.getSaveHandlers(r),mk=(r,t)=>qt.getLoadHandlers(r,t);var $w=\"tensorflowjs\",Ew=1,Ou=\"models_store\",eu=\"model_info_store\";function dk(){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,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return t}function Rw(r){let t=r.result;t.createObjectStore(Ou,{keyPath:\"modelPath\"}),t.createObjectStore(eu,{keyPath:\"modelPath\"})}var ka=class{constructor(t){if(this.indexedDB=dk(),t==null||!t)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((o,n)=>{let s=this.indexedDB.open($w,Ew);s.onupgradeneeded=()=>Rw(s),s.onsuccess=()=>{let a=s.result;if(e==null){let i=a.transaction(Ou,\"readonly\"),u=i.objectStore(Ou).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{e.weightData=ir.join(e.weightData);let i=va(e),p=a.transaction(eu,\"readwrite\"),u=p.objectStore(eu),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Ou,\"readwrite\");let m=l.objectStore(Ou),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(eu);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 fk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?I4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(fk);qt.registerLoadRouter(fk);function I4(r){return new ka(r)}function v4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var id=class{constructor(){this.indexedDB=dk()}async listModels(){return new Promise((t,e)=>{let o=this.indexedDB.open($w,Ew);o.onupgradeneeded=()=>Rw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(eu,\"readonly\"),i=s.objectStore(eu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;t(p)},i.onerror=p=>(n.close(),e(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>e(o.error)})}async removeModel(t){return t=v4(t),new Promise((e,o)=>{let n=this.indexedDB.open($w,Ew);n.onupgradeneeded=()=>Rw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(eu,\"readwrite\"),i=a.objectStore(eu),p=i.get(t),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=i.delete(t),l=()=>{u=s.transaction(Ou,\"readwrite\");let d=u.objectStore(Ou).delete(t);d.onsuccess=()=>e(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 si=\"/\",ec=\"tensorflowjs_models\",hk=\"info\",k4=\"model_topology\",N4=\"weight_specs\",T4=\"weight_data\",_4=\"model_metadata\";function gk(r){return{info:[ec,r,hk].join(si),topology:[ec,r,k4].join(si),weightSpecs:[ec,r,N4].join(si),weightData:[ec,r,T4].join(si),modelMetadata:[ec,r,_4].join(si)}}function xk(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function $4(r){let t=r.split(si);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(si)}function E4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(t){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,t==null||!t)throw new Error(\"For local storage, modelPath must not be null, undefined or empty.\");this.modelPath=t,this.keys=gk(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");{let e=JSON.stringify(t.modelTopology),o=JSON.stringify(t.weightSpecs),n=va(t),s=ir.join(t.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,ak(s));let a={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,initializerSignature:t.initializerSignature!=null?t.initializerSignature:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw xk(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 t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!==\"JSON\")throw new Error(\"BrowserLocalStorage does not support loading non-JSON model topology yet.\");let e={},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.`);e.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.`);e.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);e.format=i.format,e.generatedBy=i.generatedBy,e.convertedBy=i.convertedBy,i.signature!=null&&(e.signature=i.signature),i.userDefinedMetadata!=null&&(e.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(e.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(e.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(e.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 e.weightData=ik(a),e}};Na.URL_SCHEME=\"localstorage://\";var yk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?R4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(yk);qt.registerLoadRouter(yk);function R4(r){return new Na(r)}var ud=class{constructor(){$(A().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),$(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let t={},e=ec+si,o=si+hk;for(let n=0;n\"scheme must not be undefined or null.\"),t.endsWith(tc)&&(t=t.slice(0,t.indexOf(tc))),$(t.length>0,()=>\"scheme must not be an empty string.\");let o=r.getInstance();$(o.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),o.managers[t]=e}static getManager(t){let e=r.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(r.getInstance().managers)}};function pd(r){if(r.indexOf(tc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(\",\")}`);return{scheme:r.split(tc)[0],path:r.split(tc)[1]}}async function bk(r,t,e=!1){$(r!==t,()=>`Old path and new path are the same: '${r}'`);let o=qt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=qt.getSaveHandlers(t);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${t}.`);let a=s[0],i=pd(r).scheme,p=pd(r).path,u=i===pd(r).scheme,c=await n.load();e&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return e&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function Ck(){let r=Os.getSchemes(),t={};for(let e of r){let o=await Os.getManager(e).listModels();for(let n in o){let s=e+tc+n;t[s]=o[n]}}return t}async function wk(r){let t=pd(r);return Os.getManager(t.scheme).removeModel(t.path)}async function Sk(r,t){return bk(r,t,!1)}async function Ik(r,t){return bk(r,t,!0)}var Dw=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}setTimeoutCustom(t,e){if(typeof window==\"undefined\"||!A().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(t,e);return}this.functionRefs.push(t),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},e),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(t){return Xm(t)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new Dw);try{Os.registerManager(Na.URL_SCHEME,new ud)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new id)}catch(r){}}var D4={importFetch:()=>vk()},Aw;var Fw=class{constructor(){this.util=kk(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return A().global.fetch!=null?A().global.fetch(t,e):(Aw==null&&(Aw=D4.importFetch()),Aw(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!==\"utf-8\"&&e!==\"utf8\")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?\"\":new this.util.TextDecoder(e).decode(t)}isTypedArray(t){return this.util.types.isFloat32Array(t)||this.util.types.isInt32Array(t)||this.util.types.isUint8Array(t)||this.util.types.isUint8ClampedArray(t)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Fw);function me(r,t=\"float32\",e){return t=t||\"float32\",Ct(r),new tt(r,t,e)}function A4(r,t){let e=v(r,\"x\",\"cast\");if(!tw(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t===\"string\"&&e.dtype!==\"string\"||t!==\"string\"&&e.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:e},n={dtype:t};return T.runKernel(yo,o,n)}var We=N({cast_:A4});function F4(r){let e={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(Co,e)}var Wr=N({clone_:F4});function cd(r,t=!1){console.log(r.toString(t))}Sw();var P4={buffer:me,cast:We,clone:Wr,print:cd};Z0(P4);function lde(){A().set(\"PROD\",!0)}function mde(){A().set(\"DEBUG\",!0)}function dde(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Pw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}J0(Pw);function fde(){T.disposeVariables()}function ur(){return T}function hde(){return T.memory()}function gde(r){return T.profile(r)}function De(r,t){return T.tidy(r,t)}function Ot(r){yl(r).forEach(e=>e.dispose())}function Er(r){return T.keep(r)}function xde(r){return T.time(r)}function yde(r){return T.setBackend(r)}function bde(){return T.ready()}function Cde(){return T.backendName}function wde(r){T.removeBackend(r)}function Sde(r){return T.findBackend(r)}function Ide(r){return T.findBackendFactory(r)}function tu(r,t,e=1){return T.registerBackend(r,t,e)}function vde(){return T.backend}function kde(r,t){A().setPlatform(r,t)}function O4(r,t){let e=v(r,\"a\",\"add\"),o=v(t,\"b\",\"add\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(io,n)}var Ce=N({add_:O4});function M4(r,t){let e=v(r,\"a\",\"floorDiv\"),o=v(t,\"b\",\"floorDiv\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Sn,n)}var ld=N({floorDiv_:M4});function L4(r,t){let e=v(r,\"a\",\"div\"),o=v(t,\"b\",\"div\");if([e,o]=Oe(e,o),e.dtype===\"int32\"&&o.dtype===\"int32\")return ld(e,o);let n={a:e,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:L4});function B4(r,t){let e=v(r,\"a\",\"mul\"),o=v(t,\"b\",\"mul\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Xn,n)}var se=N({mul_:B4});function z4(r){let t=v(r,\"x\",\"abs\");if(t.dtype===\"complex64\"){let e={x:t};return T.runKernel(Di,e)}else{let e={x:t};return T.runKernel(Xs,e)}}var Qt=N({abs_:z4});function V4(r){let e={x:v(r,\"x\",\"acos\")};return T.runKernel(Vo,e)}var Nk=N({acos_:V4});function W4(r){let e={x:v(r,\"x\",\"acosh\")};return T.runKernel(Wo,e)}var Tk=N({acosh_:W4});function U4(r){$(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let t=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),e=t[0];t.forEach(n=>{if(n.dtype!==e.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),t.forEach(n=>{if(!br(n.shape,e.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=t;return T.runKernel(Uo,o)}var _k=N({addN_:U4});function G4(r,t=null,e=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:t,keepDims:e};return T.runKernel(Go,n,s)}var $k=N({all_:G4});function H4(r,t=null,e=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:t,keepDims:e};return T.runKernel(Ho,n,s)}var Ek=N({any_:H4});function K4(r,t=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:t};return T.runKernel(Ys,o,n)}var Rk=N({argMax_:K4});function q4(r,t=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:t};return T.runKernel(Qs,o,n)}var Dk=N({argMin_:q4});function j4(r){let e={x:v(r,\"x\",\"asin\")};return T.runKernel(Ko,e)}var Ak=N({asin_:j4});function X4(r){let e={x:v(r,\"x\",\"asinh\")};return T.runKernel(qo,e)}var Fk=N({asinh_:X4});function Y4(r){let e={x:v(r,\"x\",\"atan\")};return T.runKernel(jo,e)}var Pk=N({atan_:Y4});function Q4(r,t){let e=v(r,\"a\",\"atan2\"),o=v(t,\"b\",\"atan2\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Yo,n)}var Ok=N({atan2_:Q4});function Z4(r){let e={x:v(r,\"x\",\"atanh\")};return T.runKernel(Xo,e)}var Mk=N({atanh_:Z4});function J4(r,t,e,o,n=\"NHWC\",s){let a=r[3],i=[...t,a],p=Bk(n);return Lu(r,i,e,s,o,null,null,p)}function Mw(r,t,e,o,n,s,a=\"channelsLast\"){let[i,p]=wl(t),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 Lu(r,u,e,o,n,s,!1,a)}function eH(r,t,e,o,n,s,a=\"NDHWC\"){let[i,p,u]=Ow(t),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 Lk(r,c,e,o,n,!1,l,s)}function Lu(r,t,e,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]=t,[h,g]=wl(e),[x,b]=wl(o),C=rc(m,x),S=rc(d,b),{padInfo:k,outHeight:_,outWidth:E}=oH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i===\"channelsFirst\"?D=[p,R,_,E]:i===\"channelsLast\"&&(D=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:t}}function Lk(r,t,e,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]=t,[x,b,C]=Ow(e),[S,k,_]=Ow(o),E=rc(d,S),R=rc(f,k),D=rc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=nH(n,u,c,l,x,b,C,E,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:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:t}}function tH(r,t,e,o,n){o==null&&(o=Lw(r,t,e));let s=r[0],a=r[1],i=Sl((s-t+2*o)/e+1,n),p=Sl((a-t+2*o)/e+1,n);return[i,p]}function rH(r,t,e,o,n,s){n==null&&(n=Lw(r,t[0],o[0]));let a=[0,0,0,e];for(let i=0;i<3;i++)r[i]+2*n>=t[i]&&(a[i]=Sl((r[i]-t[i]+2*n)/o[i]+1,s));return a}function Lw(r,t,e,o=1){let n=rc(t,o);return Math.floor((r[0]*(e-1)-e+n)/2)}function wl(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Ow(r){return typeof r==\"number\"?[r,r,r]:r}function rc(r,t){return t<=1?r:r+(r-1)*(t-1)}function oH(r,t,e,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=tH([t,e],s,o,r,i);c=d[0],l=d[1]}else if(r===\"same\"){c=Math.ceil(t/o),l=Math.ceil(e/n);let m=Math.max(0,(c-1)*o+s-t),d=Math.max(0,(l-1)*n+a-e),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((t-s+1)/o),l=Math.ceil((e-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=Sl((t-s+m+d)/o+1,i),l=Sl((e-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function nH(r,t,e,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=rH([t,e,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(t/n),d=Math.ceil(e/s),f=Math.ceil(o/a);let h=(m-1)*n+i-t,g=(d-1)*s+p-e,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),E=x-_;l={top:S,bottom:k,left:_,right:E,front:b,back:C,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function Sl(r,t){if(!t)return Math.trunc(r);switch(t){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${t}`)}}function Mu(r){let[t,e,o]=wl(r);return t===1&&e===1&&o===1}function gr(r,t){return Mu(r)||Mu(t)}function Ta(r){return wl(r).every(t=>t>0)}function Bk(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Lt(r,t,e){if(e!=null){if(typeof t==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);if(typeof t==\"number\")$(Ka(t),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);else if(typeof t==\"object\")t.forEach(o=>{o.forEach(n=>{$(Ka(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${t}`)}}function sH(r,t){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:t};return T.runKernel(da,o,n)}var W=N({reshape_:sH});function aH(r,t,e,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;$(gr(e,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${e} 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]])),$(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:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=We(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var md=N({avgPool_:aH});function iH(r,t,e,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]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof e==\"number\"&&e>0||Array.isArray(e)&&e[0]>0&&e[1]>0&&e[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${e}'`),Lt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=We(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var zk=N({avgPool3d_:iH});function uH(r,t=0){$(r.length>=1,()=>\"Pass at least one tensor to concat\");let e=ni(r,\"tensors\",\"concat\",\"string_or_numeric\");if(e[0].dtype===\"complex64\"&&e.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),e.length===1)return Wr(e[0]);let o=e,n={axis:t};return T.runKernel(ta,o,n)}var yt=N({concat_:uH});function pH(r,t,e=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(t,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:e,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:pH});function cH(r){let e={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(bs,e)}var $a=N({sigmoid_:cH});function lH(r,t,e){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:t,size:e};return T.runKernel(ha,n,s)}var Xe=N({slice_:lH});function mH(r){let e={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel($s,e)}var Il=N({tanh_:mH});function dH(r,t,e,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(t,\"lstmKernel\",\"basicLSTMCell\"),p=v(e,\"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($a(b),Il(C)),se(c,$a(Ce(a,S)))),E=se(Il(_),$a(k));return[_,E]}var Vk=N({basicLSTMCell_:dH});function fH(r,t,e){let o=v(r,\"x\",\"batchToSpaceND\"),n=t.reduce((i,p)=>i*p);$(o.rank>=1+t.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${t.length}`),$(e.length===t.length,()=>`crops.length is ${e.length} but should be equal to blockShape.length ${t.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:t,crops:e};return T.runKernel(Js,s,a)}var dd=N({batchToSpaceND_:fH});function Wk(r){let t;return r.rank===0||r.rank===1?t=W(r,[1,1,1,r.size]):r.rank===2?t=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?t=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):t=r,t}function hH(r,t,e,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),$(c==null||i.rank===c.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),$(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:Wk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var ru=N({batchNorm_:hH});function gH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Uk=N({batchNorm2d_:gH});function xH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Gk=N({batchNorm3d_:xH});function yH(r,t,e,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(t,\"mean\",\"batchNorm\"),p=v(e,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Hk=N({batchNorm4d_:yH});function bH(r,t,e){let o=v(r,\"x\",\"bincount\"),n=v(t,\"weights\",\"bincount\");$(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(e>=0,()=>`size must be non-negative, but got ${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:e};return T.runKernel(Jo,s,a)}var fd=N({bincount_:bH});function CH(r,t){let e=v(r,\"x\",\"bitwiseAnd\"),o=v(t,\"y\",\"bitwiseAnd\");if(!br(e.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${e.shape}, y: ${o.shape}`);if(e.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${e.dtype} and type of y: ${o.dtype}`);let n={a:e,b:o};return T.runKernel(qa,n)}var Kk=N({bitwiseAnd_:CH});function wH(r,t){let e=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(t,\"s1\",\"broadcastArgs\",\"int32\");if(e.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:e,s1:o};return T.runKernel(ea,n)}var qk=N({broadcastArgs_:wH});function SH(r,t){let e=v(r,\"broadcastTo\",\"x\"),o=e.shape;if(Ct(t),t.lengthe.rank){let u=e.shape.slice();for(;u.length=0;u--)if(n[u]===t[u])s[u]=1;else if(e.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${t}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Wr(e);let i={x:e},p={reps:s};return T.runKernel(uo,i,p)}var ou=N({broadcastTo_:SH});function IH(r){let e={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(en,e)}var jk=N({ceil_:IH});function Ea(r,t,e){Ct(r),e=e||_i(t);let o={shape:r,value:t,dtype:e};return T.runKernel(sa,{},o)}function vH(r,t,e){let o=v(r,\"x\",\"clipByValue\");if($(t<=e,()=>`Error in clip: min (${t}) must be less than or equal to max (${e}).`),t===e)return Ea(o.shape,t,o.dtype);let n={x:o},s={clipValueMin:t,clipValueMax:e};return T.runKernel(bo,n,s)}var Xk=N({clipByValue_:vH});function kH(r){return yt(r,0)}var Yk=N({concat1d_:kH});function NH(r,t){return yt(r,t)}var Qk=N({concat2d_:NH});function TH(r,t){return yt(r,t)}var Zk=N({concat3d_:TH});function _H(r,t){return yt(r,t)}var Jk=N({concat4d_:_H});function $H(r,t,e,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(t,\"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]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Lt(\"conv2d\",o,a);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(gr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(Ta(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:e,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 nu=N({conv2d_:$H});function EH(r,t,e,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(t,\"filter\",\"conv1d\"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Lt(\"conv1d\",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(gr(e,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`),$(Ta(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv1D: Stride should be larger than 0.\"),$(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=nu(m,l,[1,e],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 e2=N({conv1d_:EH});function RH(r,t,e,o,n,s=\"NHWC\",a){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let i=r,p=t,u=!1;t.rank===3&&(u=!0,p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(e.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`);let c=s===\"NHWC\"?i[3]:i[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];$(c===e.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`),$(l===e.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`),Lt(\"conv2dDerInput\",n,a);let m={dy:p,filter:e},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 hd=N({conv2DBackpropInput_:RH});function DH(r,t,e,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(t,\"filter\",\"conv2dTranspose\");return hd(e,a,i,o,n,\"NHWC\",s)}var t2=N({conv2dTranspose_:DH});function AH(r,t,e,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(t,\"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]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(gr(e,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Ta(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),$(Ta(e),()=>\"Error in conv3D: Strides should be larger than 0.\");let c={x:p,filter:i},l={strides:e,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 r2=N({conv3d_:AH});function FH(r,t,e,o,n){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let s=r,a=t,i=!1;t.rank===4&&(i=!0,a=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(e.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`),$(p===e.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${e.shape[3]}.`),$(u===e.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${e.shape[4]}.`);let c={dy:a,filter:e},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 o2=N({conv3DBackpropInput_:FH});function PH(r,t,e,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(t,\"filter\",\"conv3dTranspose\");return o2(e,s,a,o,n)}var n2=N({conv3dTranspose_:PH});function OH(r){let e={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(sn,e)}var s2=N({cos_:OH});function MH(r){let e={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(an,e)}var a2=N({cosh_:MH});function LH(r,t=0,e=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(un,s,a)}var i2=N({cumprod_:LH});function BH(r,t=0,e=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(pn,s,a)}var u2=N({cumsum_:BH});function zH(r,t,e,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(t,\"weights\",\"denseBincount\");$(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(e>=0,()=>`size must be non-negative, but got ${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:e,binaryOutput:o};return T.runKernel(ra,a,i)}var p2=N({denseBincount_:zH});function VH(r,t,e=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=e===\"NHWC\"?o.shape[1]:o.shape[2],s=e===\"NHWC\"?o.shape[2]:o.shape[3],a=e===\"NHWC\"?o.shape[3]:o.shape[1];$(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),$(n*t>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${t} for depthToSpace with input shape\n ${o.shape}`),$(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${t} for depthToSpace with input shape\n ${o.shape}`),$(a%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:t,dataFormat:e};return T.runKernel(ln,i,p)}var c2=N({depthToSpace_:VH});function WH(r,t,e,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(t,\"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]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Lt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:e,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 oc=N({depthwiseConv2d_:WH});function UH(r){let e={x:v(r,\"x\",\"diag\")};return T.runKernel(oa,e)}var l2=N({diag_:UH});function GH(r,t,e,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(t,\"filter\",\"dilation2d\");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(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:e,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 m2=N({dilation2d_:GH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>d2,getReductionAxes:()=>gd});function d2(r,t){let e=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function gd(r,t){let e=[];for(let o=0;o1)&&e.unshift(s)}return e}function rt(r,t){let e=Math.max(r.length,t.length),o=new Array(e);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${o.rank}.`);let n=e.rank===1?e.size:e.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),e.rank===1&&o.rank===1){let a=W(e,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(e.rank===1&&o.rank===2){let a=W(e,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(e.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(e,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(e,a)}}var h2=N({dot_:XH});function YH(r,...t){let e=t.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(Li,e,o)}var su=N({einsum_:YH});function QH(r){let e={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(hn,e)}var yd=N({elu_:QH});function ZH(r,t){let e=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!QC(e.shape,t))throw new Error(`EnsureShape: Shape of tensor ${e.shape} is not compatible with expected shape ${t}`);return r}var g2=N({ensureShape_:ZH});function JH(r){let t=v(r,\"x\",\"erf\");$(t.dtype===\"int32\"||t.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),t.dtype===\"int32\"&&(t=We(t,\"float32\"));let e={x:t};return T.runKernel(gn,e)}var x2=N({erf_:JH});function Bw(r,t){for(let e=0;er[s]);return[e,n]}function ai(r,t){let e=t.map(o=>1);return y2(r,e,t)}function tK(r,t,e){$(Bw(t,e),()=>`${r} supports only inner-most axes for now. Got axes ${t} and rank-${e} input.`)}function rK(r,t){if(Bw(r,t))return null;let e=[];for(let o=0;oe.push(o)),e}function oK(r){return r.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]).map(t=>t[0])}function nK(r,t){let e=[];for(let o=t-r;o\"Axis must be <= rank of the tensor\");let o={input:e},n={dim:t};return T.runKernel(na,o,n)}var Ms=N({expandDims_:hK});function gK(r){let e={x:v(r,\"x\",\"expm1\")};return T.runKernel(bn,e)}var w2=N({expm1_:gK});function xK(r,t){let e=v(r,\"x\",\"tile\",\"string_or_numeric\");$(e.rank===t.length,()=>`Error in transpose: rank of input ${e.rank} must match length of reps ${t}.`);let o={x:e},n={reps:t};return T.runKernel(uo,o,n)}var au=N({tile_:xK});function yK(r,t,e,o=\"float32\"){t==null&&(t=r);let n=me([r,t],o),s=r<=t?r:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),$(Ka(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);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:t,bias:e,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 N2=N({localResponseNormalization_:EK});function RK(r){let e={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(Fn,e)}var ui=N({log_:RK});function DK(r){let e={x:v(r,\"x\",\"log1p\")};return T.runKernel(Pn,e)}var vd=N({log1p_:DK});function AK(r){return $(qs(r),()=>\"The f passed in grad(f) must be a function\"),(t,e)=>{let o=v(t,\"x\",\"tf.grad\",\"string_or_numeric\"),n=e!=null?v(e,\"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)\"),kd(a),a[0]})}}function FK(r){return $(qs(r),()=>\"The f passed in grads(f) must be a function\"),(t,e)=>{$(Array.isArray(t),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=ni(t,\"args\",\"tf.grads\",\"string_or_numeric\"),n=e!=null?v(e,\"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,...])\"),kd(a),a})}}function PK(r){return $(qs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(t,e)=>{$(t instanceof mt,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),$(e==null||e instanceof mt,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(t),[t],e);return kd(o),{grad:o[0],value:n}}}function OK(r){return $(qs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(t,e)=>{$(Array.isArray(t)&&t.every(n=>n instanceof mt),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),$(e==null||e instanceof mt,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...t),t,e);return e!=null&&xt(o.value.shape,e.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),kd(o.grads),o}}function zw(r,t){$(qs(r),()=>\"The f passed in variableGrads(f) must be a function\"),$(t==null||Array.isArray(t)&&t.every(u=>u instanceof ri),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let e=t!=null;if(!e){t=[];for(let u in T.registeredVariables)t.push(T.registeredVariables[u])}let o=e?t.filter(u=>!u.trainable):null,n=t.length;t=t.filter(u=>u.trainable),$(t.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,t,null,s);$(i.some(u=>u!=null),()=>\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return t.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 kd(r){if(r.filter(e=>e==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 MK(r){let e={x:v(r,\"x\",\"neg\")};return T.runKernel(pa,e)}var pr=N({neg_:MK});function LK(r){let e={x:v(r,\"x\",\"softplus\")};return T.runKernel(Cs,e)}var Nd=N({softplus_:LK});function BK(r){let t=v(r,\"x\",\"logSigmoid\");return Ir(o=>({value:pr(Nd(pr(o))),gradFunc:a=>se(a,$a(pr(o)))}))(t)}var T2=N({logSigmoid_:BK});function zK(r,t){let e=v(r,\"a\",\"sub\"),o=v(t,\"b\",\"sub\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:zK});function VK(r,t=-1){let e=v(r,\"logits\",\"logSoftmax\");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t}`);return Ir((n,s)=>{let i=Ra(n,t,!0),p=Te(n,i),u=Te(We(p,\"float32\"),ui(ot(_o(p),t,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,t,f),h))}}})(e)}var _2=N({logSoftmax_:VK});function WK(r,t=null,e=!1){let o=v(r,\"x\",\"logSumExp\"),n=Ti(t,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=ui(p),c=Ce(W(s,u.shape),u);if(e){let l=ai(c.shape,n);return W(c,l)}return c}var Td=N({logSumExp_:WK});function UK(r,t){let e=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(t,\"b\",\"logicalAnd\",\"bool\");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(On,n)}var Vu=N({logicalAnd_:UK});function GK(r){let e={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(Mn,e)}var _d=N({logicalNot_:GK});function HK(r,t){let e=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(t,\"b\",\"logicalOr\",\"bool\");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:HK});function KK(r,t){let e=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(t,\"b\",\"logicalXor\",\"bool\");return rt(e.shape,o.shape),Vu($d(r,t),_d(Vu(r,t)))}var $2=N({logicalXor_:KK});var Ed=2147483648;function qK(r,t,e=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(t,\"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(He(p.shape)>=Ed)throw new Error(`values tensor size must less than ${Ed}`);if(i.shape[1]>=Ed)throw new Error(`trailing dim_size must less than ${Ed} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:e};return T.runKernel(fs,u,c)}var Nl=N({searchSorted_:qK});function E2(r,t){return Nl(r,t,\"left\")}function jK(r,t,e,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]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(gr(e,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`),Lt(\"maxPool\",o,n);let u={x:i},c={filterSize:t,strides:e,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 Rd=N({maxPool_:jK});function XK(r,t=[1,1,1],e,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]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Lt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:t,strides:e,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 R2=N({maxPool3d_:XK});function YK(r,t,e,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:t,strides:e,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var D2=N({maxPoolWithArgmax_:YK});function QK(r,t){let e=v(r,\"a\",\"maximum\"),o=v(t,\"b\",\"maximum\");[e,o]=Oe(e,o),e.dtype===\"bool\"&&(e=We(e,\"int32\"),o=We(o,\"int32\")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Vn,n)}var Dd=N({maximum_:QK});function ZK(r,t=null,e=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:t,keepDims:e};return T.runKernel(Un,n,s)}var Wu=N({mean_:ZK});function Ur(r,t=\"float32\"){if(Ct(r),t===\"complex64\"){let o=Ur(r,\"float32\"),n=Ur(r,\"float32\");return $r(o,n)}let e=Wp(He(r),t);return T.makeTensor(e,r,t)}function Da(r,t=\"float32\"){if(Ct(r),t===\"complex64\"){let o=Da(r,\"float32\"),n=Ur(r,\"float32\");return $r(o,n)}let e=cl(He(r),t);return T.makeTensor(e,r,t)}function A2(r,t,{indexing:e=\"xy\"}={}){if(e!==\"xy\"&&e!==\"ij\")throw new TypeError(`${e} 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(t===void 0)return[o];let n=v(t,\"y\",\"meshgrid\",t instanceof mt?t.dtype:\"float32\"),s=He(o.shape),a=He(n.shape);return e===\"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 JK(r,t){let e=v(r,\"a\",\"minimum\"),o=v(t,\"b\",\"minimum\");[e,o]=Oe(e,o),e.dtype===\"bool\"&&(e=We(e,\"int32\"),o=We(o,\"int32\")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Hn,n)}var Uu=N({minimum_:JK});function eq(r,t,e){$(e===\"reflect\"||e===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");$(t.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${t.length}.`);let n=e===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),$(t[i][0]>=0&&t[i][0]<=o.shape[i]-n&&t[i][1]>=0&&t[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:t,mode:e},a={x:o};return T.runKernel(Kn,a,s)}var F2=N({mirrorPad_:eq});function tq(r,t){let e=v(r,\"a\",\"mod\"),o=v(t,\"b\",\"mod\");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(qn,n)}var P2=N({mod_:tq});function rq(r,t=null,e=!1){r=v(r,\"x\",\"moments\");let o=Ti(t,r.shape),n=Wu(r,o,e),s=n.shape;e||(s=ai(n.shape,o));let a=Zt(Te(We(r,\"float32\"),W(n,s))),i=Wu(a,o,e);return{mean:n,variance:i}}var O2=N({moments_:rq});function oq(r,t,e,o){let n=v(t,\"data\",\"multiRNNCell\"),s=ni(e,\"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}`);e=e||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:t,seed:e,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var L2=N({multinomial_:nq});function sq(r,t){let e=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(t,\"b\",\"notEqual\",\"string_or_numeric\");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Yn,n)}var Ad=N({notEqual_:sq});function aq(r,t,e=1,o=0,n=\"int32\"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:t,onValue:e,offValue:o};return T.runKernel(Jn,a,i)}var Tl=N({oneHot_:aq});function iq(r){let e={x:v(r,\"x\",\"onesLike\")};return T.runKernel(ca,e)}var B2=N({onesLike_:iq});function uq(r,t){let e=v(r,\"v1\",\"outerProduct\"),o=v(t,\"v2\",\"outerProduct\");$(e.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${o.rank}.`);let n=W(e,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var z2=N({outerProduct_:uq});function pq(r,t,e=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:t,constantValue:e},s={x:o};return T.runKernel(es,s,n)}var Aa=N({pad_:pq});function cq(r,t,e=0){return $(t.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Aa(r,[t],e)}var V2=N({pad1d_:cq});function lq(r,t,e=0){return $(t.length===2&&t[0].length===2&&t[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Aa(r,t,e)}var W2=N({pad2d_:lq});function mq(r,t,e=0){return $(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.\"),Aa(r,t,e)}var U2=N({pad3d_:mq});function dq(r,t,e=0){return $(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.\"),Aa(r,t,e)}var G2=N({pad4d_:dq});function fq(r,t,e){let o=v(r,\"x\",\"spaceToBatchND\");$(o.rank>=1+t.length,()=>`input rank ${o.rank} should be > than [blockShape] ${t.length}`),$(e.length===t.length,()=>`paddings.shape[0] ${e.length} must be equal to [blockShape] ${t.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=t.length?a&&(i+e[p-1][0]+e[p-1][1])%t[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t.toString()}`);let n={x:o},s={blockShape:t,paddings:e};return T.runKernel(ga,n,s)}var Fd=N({spaceToBatchND_:fq});function hq(r,t,e,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]])),$(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Mw(p.shape,t,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=xq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=gq([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Fd(p,l,f),C=(e===\"avg\"?()=>md(x,t,s,g,a):()=>Rd(x,t,s,g,a))(),S=d?C:dd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function gq(r,t,e){let o=e.map(c=>c[0]),n=e.map(c=>c[1]),s=r.concat(o,n),a=t.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=t.map((c,l)=>[o[l],i[l]]),u=t.map((c,l)=>[0,a[l]]);return[p,u]}function xq(r,t){let o=r.map((a,i)=>a+(a-1)*(t[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 H2=N({pool_:hq});function yq(r,t){let e=v(r,\"x\",\"prelu\"),o=v(t,\"alpha\",\"prelu\"),n={x:e,alpha:o};return T.runKernel(rs,n)}var Pd=N({prelu_:yq});function bq(r,t=null,e=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=We(o,\"int32\"));let n={x:o},s={axis:t,keepDims:e};return T.runKernel(os,n,s)}var K2=N({prod_:bq});function Cq(r,t,e,o){let n=r.map((c,l)=>v(c,`tensors${l}`,\"raggedGather\",\"int32\")),s=v(t,\"paramsDenseValues\",\"raggedGather\"),a=v(e,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Up,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var q2=N({raggedGather_:Cq});function wq(r,t,e){let o=v(r,\"starts\",\"raggedRange\"),n=v(t,\"limits\",\"raggedRange\",o.dtype),s=v(e,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Gp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var j2=N({raggedRange_:wq});function Sq(r,t,e,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(t,\"values\",\"raggedTensorToTensor\"),i=v(e,\"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(Hp,u,c)}var X2=N({raggedTensorToTensor_:Sq});function Iq(r,t,e){Ct(r);let o=He(r),n=null;if(e==null||e===\"float32\")n=new Float32Array(o);else if(e===\"int32\")n=new Int32Array(o);else if(e===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${e}`);for(let s=0;sd1,createVideoElement:()=>Oq,encodeStrings:()=>h1,expectArrayBuffersEqual:()=>Pq,expectArraysClose:()=>Rq,expectArraysEqual:()=>Aq,expectNumbersClose:()=>f1,expectPromiseToFail:()=>Dq,expectValuesInRange:()=>Fq,play:()=>Mq,testEpsilon:()=>Md});var Eq=.001,d1=.1;function Rq(r,t,e){return e==null&&(e=Md()),jw(r,t,(o,n)=>Xw(o,n,e))}function Md(){return T.backend.floatPrecision()===32?Eq:d1}function jw(r,t,e){let o=!0;if((Pt(r)||Pt(t))&&(o=!1),Pt(r)&&Pt(t)&&(o=!0),o){let a=r.constructor.name,i=t.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(t)){let a=sr(r),i=sr(t);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(t)?t:Fs(t);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;at.fail(),()=>t()),typeof expect!=\"undefined\"&&expect().nothing()}function Aq(r,t){let e=typeof t==\"string\"||typeof t==\"number\"||typeof t==\"boolean\"?[t]:t;return zo(r)||zo(r[0])||zo(t)||zo(t[0])?jw(r,e,(o,n)=>o==n):jw(r,t,(o,n)=>Xw(o,n,0))}function f1(r,t,e){if(e==null&&(e=Md()),!Xw(r,t,e))throw new Error(`Numbers differ: actual === ${r}, expected === ${t}`);typeof expect!=\"undefined\"&&expect().nothing()}function Xw(r,t,e){return!isFinite(r)&&!isFinite(t)?!0:!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}function Fq(r,t,e){for(let o=0;oe)throw new Error(`Value out of range:${r[o]} low: ${t}, high: ${e}`)}function Pq(r,t){let e=new Float32Array(r),o=new Float32Array(t);if(e.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${e.length}`);for(let n=0;n{t.addEventListener(\"loadeddata\",o=>e(t)),t.load()})}async function Mq(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(t=>{r.requestVideoFrameCallback(t)})}var Hu=class{constructor(t,e,o,n,s){this.mean=t,this.stdDev=e,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=zd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let t,e,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);t=this.mean+this.stdDev*n*i,e=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(t))&&(o=!0)}return(!this.truncated||this.isValidTruncated(e))&&(this.nextVal=this.convertValue(e)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype===\"float32\"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}},Ld=class{constructor(t,e,o,n){this.alpha=t,this.beta=1/e,this.dtype=o;let s=n||Math.random();this.randu=zd.alea(s.toString()),this.randn=new Hu(0,1,o,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let t,e,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,t=n*n,e=1-.331*t*t,o=.5*t+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=t,this.range=e-t,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 ${t} - ${e} <= 1 and dtype is not float`);this.random=zd.alea(n)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Lq(r,t,e=1,o=\"float32\",n){if(Ct(r),e==null&&(e=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Ld(t,e,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),lo(t,0)}var w1=N({reverse1d_:jq});function Xq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`),lo(e,t)}var S1=N({reverse2d_:Xq});function Yq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`),lo(e,t)}var I1=N({reverse3d_:Yq});function Qq(r,t){let e=v(r,\"x\",\"reverse\");return $(e.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`),lo(e,t)}var v1=N({reverse4d_:Qq});function Zq(r){let e={x:v(r,\"x\",\"round\")};return T.runKernel(cs,e)}var Ud=N({round_:Zq});function Jq(r){let e={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(ls,e)}var k1=N({rsqrt_:Jq});function e6(r){let e={x:v(r,\"x\",\"selu\")};return T.runKernel(hs,e)}var N1=N({selu_:e6});function t6(r,t,e,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(t,\"depthwiseFilter\",\"separableConv2d\"),u=v(e,\"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\");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(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=oc(c,p,o,n,a,s),g=nu(f,u,1,\"valid\",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var T1=N({separableConv2d_:t6});async function r6(r,t){let e=v(r,\"x\",\"setdiff1d\"),o=v(t,\"y\",\"setdiff1d\");$(e.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${e.dtype}) and y (${o.dtype}).`),$(e.rank===1,()=>`x should be 1D tensor, but got x (${e.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await e.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,[t],[e])}var D1=N({slice1d_:a6});function i6(r,t,e){let o=v(r,\"x\",\"slice2d\");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var A1=N({slice2d_:i6});function u6(r,t,e){let o=v(r,\"x\",\"slice3d\");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var F1=N({slice3d_:u6});function p6(r,t,e){let o=v(r,\"x\",\"slice4d\");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var P1=N({slice4d_:p6});function c6(r,t=-1){let e=v(r,\"logits\",\"softmax\",\"float32\");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t}`);let o={logits:e},n={dim:t};return T.runKernel(Is,o,n)}var O1=N({softmax_:c6});function l6(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Bi,t)}var ac=N({fft_:l6});function m6(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(zi,t)}var Ku=N({ifft_:m6});function d6(r){let t=r.shape[r.shape.length-1],e=r.size/t,o;if(t<=2){let n=W(r,[e,t]);o=Ku(n)}else{let n=[e,2*(t-1)],s=W(pi(r),[e,t]),a=W(iu(r),[e,t]),i=lo(Xe(s,[0,1],[e,t-2]),1),p=se(lo(Xe(a,[0,1],[e,t-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W($r(u,c),[n[0],n[1]]);o=Ku(l)}if(o=pi(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 Gd=N({irfft_:d6});function f6(r,t,e=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:t,axis:e};return T.runKernel(xa,n,s)}var ci=N({split_:f6});function h6(r,t){$(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let e=r.shape[r.shape.length-1],o=r.size/e,n;if(t!=null&&t0),h=r.shape.map(g=>g);h[r.shape.length-1]=t,n=Xe(r,f,h),e=t}else if(t!=null&&t>e){let f=r.shape.map(h=>h);f[r.shape.length-1]=t-e,n=yt([r,Ur(f)],r.shape.length-1),e=t}else n=r;let s=Gt(n),a=W($r(n,s),[o,e]),i=ac(a),p=Math.floor(e/2)+1,u=pi(i),c=iu(i),l=ci(u,[p,e-p],u.shape.length-1),m=ci(c,[p,e-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W($r(l[0],m[0]),d)}var ic=N({rfft_:h6});function g6(r,t){let e=v(r,\"a\",\"squaredDifference\"),o=v(t,\"b\",\"squaredDifference\");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o},s={};return T.runKernel(ks,n,s)}var Hd=N({squaredDifference_:g6});function x6(r,t){let e=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(e,ZC(e.shape,t).newShape)}var uc=N({squeeze_:x6});function y6(r,t=0){let e=ni(r,\"tensors\",\"stack\",\"string_or_numeric\");$(e.length>=1,()=>\"Pass at least one tensor to tf.stack\"),e.length>0&&$(t<=e[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=e,n={axis:t};return T.runKernel(la,o,n)}var vr=N({stack_:y6});function b6(r,t=0){let o={x:v(r,\"x\",\"step\")},n={alpha:t};return T.runKernel(wo,o,n)}var Kd=N({step_:b6});function C6(r,t,e,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},l={begin:t,end:e,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ns,c,l)}var M1=N({stridedSlice_:C6});function w6(r){let e={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel(_s,e)}var L1=N({tan_:w6});function Jt(r,t){ao(r);let e=sr(r,t);if(e.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return wr(r,null,e,t)}function cu(r,t,e){if(ao(r),t!=null&&t.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=sr(r,e);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return wr(r,t,o,e)}function qd(r,t,e){if(ao(r),t!=null&&t.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=sr(r,e);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return wr(r,t,o,e)}function B1(r,t,e){if(ao(r),t!=null&&t.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=sr(r,e);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return wr(r,t,o,e)}function z1(r,t,e){if(ao(r),t!=null&&t.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=sr(r,e);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return wr(r,t,o,e)}function V1(r,t,e){if(ao(r),t!=null&&t.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=sr(r,e);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&t==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return t=t||o,wr(r,t,o,e)}var lu={};qe(lu,{calculateShapes:()=>W1,validateInput:()=>pc,validateUpdateShape:()=>Yw});function Yw(r,t,e){let o=t.rank>1?t.shape[t.rank-1]:1,n=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(e.rank1?t.shape[o-1]:1,s=e.length,a=1;for(let l=n;l= 0 but got ${t}`);if(t>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${t}`);let s={x:o},a={k:t,sorted:e},[i,p]=T.runKernel(Es,s,a);return{values:i,indices:p}}var G1=N({topk_:I6});function v6(r,t=0,e=1,o,n){if(Ct(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new Hu(t,e,o,!0,n),a=me(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:e},n={axis:t},[s,a]=T.runKernel(Xi,o,n);return{values:s,indices:a}}var K1=N({unique_:k6});function N6(r,t,e){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(t,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");$(Ka(e),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:e};return T.runKernel(Yi,s,a)}var q1=N({unsortedSegmentSum_:N6});function T6(r,t=0){let e=v(r,\"x\",\"unstack\",\"string_or_numeric\");$(t>=-e.shape.length&&t`Axis = ${t} is not in [-${e.shape.length}, ${e.shape.length})`);let o={value:e},n={axis:t};return T.runKernel(wa,o,n)}var mo=N({unstack_:T6});function j1(r,t){return Nl(r,t,\"right\")}function X1(r,t=!0,e,o){return T.makeVariable(r,t,e,o)}function jd(r,t){let e=[];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()),$(o.rank===t.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${t}.`),t.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${t}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:t};return o.dtype===\"complex64\"?De(()=>{let a=pi(o),i=iu(o);return a=T.runKernel(po,{x:a},s),i=T.runKernel(po,{x:i},s),e&&(i=pr(i)),$r(a,i)}):T.runKernel(po,n,s)}var cc=N({transpose_:R6});function D6(r,t,e,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(t,\"x\",\"movingAverage\"),i=v(e,\"decay\",\"movingAverage\");Cw(s,a),$(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){$(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=je(c,Te(p,ii(i,l)))}return Ce(s,c)}var A6=N({movingAverage_:D6});function F6(r,t,e){Ct(e);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(t,\"updates\",\"scatterND\");pc(n,o,e);let s={indices:o,updates:n},a={shape:e};return T.runKernel(ms,s,a)}var P6=N({scatterND_:F6});function Y1(r,t,e,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(e.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${n}]`);if(t.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function M6(r,t,e,o=0){Ct(e);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(t,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);Y1(n,s,e,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:e};return T.runKernel(vs,i,p)}var L6=N({sparseToDense_:M6});function B6(r,t){let e=v(t,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:e};return T.runKernel(vn,n)}var z6=N({gatherND_:B6});function Q1(r,t){if(t==null)return r.shape.slice();if(br(r.shape,t))return t;if(r.shape.length===t.length){let e=[];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.`),$(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return r instanceof mt?n.clone():n;let s=Q1(n,e),a=1-t,i=je(Cd(Ce(sc(s,0,1,\"float32\",o),a)),a);return se(n,i)}var W6=N({dropout_:V6});function Qw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function _l(r,t,e){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),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>0&&e<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=JC(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hJ1,depthwiseConv2d:()=>rN,matMul:()=>oN});function H6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(e.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];$(u===e[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`),$(c===e[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`),Lt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:e};return T.runKernel(Ai,l,m)}var Z1=N({conv2DBackpropFilter_:H6});function qu(r,t,e){if(e==null||e===\"linear\")return r;if(e===\"relu\")return se(r,Kd(t));throw new Error(`Cannot compute gradient for fused activation ${e}.`)}function ju(r,t){let e=t,o=gd(r.shape,t.shape);return o.length>0&&(e=ot(e,o)),W(e,r.shape)}function Xu(r,t,e,o){if(t===\"linear\")return r;if(t===\"relu\")return pu(r);if(t===\"elu\")return yd(r);if(t===\"relu6\")return Wd(r);if(t===\"prelu\")return Pd(r,e);if(t===\"leakyrelu\")return Id(r,o);if(t===\"sigmoid\")return $a(r);throw new Error(`Unknown fused activation ${t}.`)}var Yu=(r,t)=>!(r>0)||t===\"linear\";function K6({x:r,filter:t,strides:e,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||\"linear\",Yu(T.state.gradientDepth,p)===!1){$(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=nu(r,t,e,o,n,s,a);return i!=null&&(_=Ce(_,i)),Xu(_,p,u,c)}let l=v(r,\"x\",\"conv2d\",\"float32\"),m=v(t,\"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]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(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];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(gr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let g=Lu(d.shape,m.shape,e,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,l),n===\"NHWC\"?rt(g.outShape,x.shape):($(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}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,\"prelu weights\",\"fused conv2d\")}let C=(_,E)=>{$(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=E,M=qu(_,P,p);$(Mu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=hd(D.shape,M,R,e,o),B=Z1(D,M,R.shape,e,o),z=[L,B];if(O!=null){let U=ju(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((E,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,E,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir((E,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var J1=N({fusedConv2d_:K6});function q6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:e};return T.runKernel(Fi,u,c)}var eN=N({depthwiseConv2dNativeBackpropFilter_:q6});function j6(r,t,e,o,n,s=[1,1],a){let i=t,p=!1;t.rank===3&&(p=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:e},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Pi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var tN=N({depthwiseConv2dNativeBackpropInput_:j6});function X6({x:r,filter:t,strides:e,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(Yu(T.state.gradientDepth,p)===!1){let k=oc(r,t,e,o,n,s,a);return i!=null&&(k=Ce(k,i)),Xu(k,p,u,c)}let l=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(t,\"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]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(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]),$(gr(e,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),Lt(\"fused depthwiseConv2d\",o,a);let h=Lu(d.shape,m.shape,e,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,_)=>{$(Mu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,P]=_,O=qu(k,D,p),M=tN(R.shape,O,E,e,o,s,a),L=eN(R,O,E.shape,e,o,s,a);if(P!=null){let B=ju(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,E,R)=>{let D=T.runKernel(vo,C,S);return R([E,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,E,R,D)=>{let P=T.runKernel(vo,C,S);return D([E,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var rN=N({fusedDepthwiseConv2d_:X6});function Y6({a:r,b:t,transposeA:e=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Yu(T.state.gradientDepth,s)===!1){let O=Ze(r,t,e,o);return n!=null&&(O=Ce(O,n)),Xu(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(t,\"b\",\"fused matMul\");[p,u]=Oe(p,u);let c=e?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=e?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=He(f),x=He(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${e} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=e?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 E;a!=null&&(E=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=qu(W(O,z.shape),z,s),q,Y;if(!e&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!e&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):e&&!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=ju(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:E},P={transposeA:e,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 oN=N({fusedMatMul_:Y6});function Q6(r){return _l(r,.54,.46)}var nN=N({hammingWindow_:Q6});function Z6(r){return _l(r,.5,.5)}var Yd=N({hannWindow_:Z6});function J6(r,t,e,o=!1,n=0){let s=0,a=[];for(;s+t<=r.size;)a.push(Xe(r,s,t)),s+=e;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(cn,c,l)}var aN=N({cropAndResize_:tj});function rj(r){let t=v(r,\"image\",\"flipLeftRight\",\"float32\");$(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let e={image:t};return T.runKernel(Cn,e,{})}var iN=N({flipLeftRight_:rj});function oj(r){let t=v(r,\"image\",\"grayscaleToRGB\"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(t.rank);return n.fill(1,0,e),n[e]=3,au(t,n)}var uN=N({grayscaleToRGB_:oj});function nj(r){let t=v(r,\"image\",\"RGBToGrayscale\"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=t.dtype,s=We(t,\"float32\"),a=Jt([.2989,.587,.114]),i;switch(t.rank){case 2:i=su(\"ij,j->i\",s,a);break;case 3:i=su(\"ijk,k->ij\",s,a);break;case 4:i=su(\"ijkl,l->ijk\",s,a);break;case 5:i=su(\"ijklm,m->ijkl\",s,a);break;case 6:i=su(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ms(i,-1),We(i,n)}var pN=N({rgbToGrayscale_:nj});function sj(r,t,e=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:t,fillValue:e,center:o};return T.runKernel(Ds,s,a)}var cN=N({rotateWithOffset_:sj});function $o(r,t,e,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return e=Math.min(e,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(t.rank===1,()=>\"scores must be a 1D tensor\"),$(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function aj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(t,\"scores\",\"nonMaxSuppression\",\"float32\"),i=$o(s,a,e,o,n);e=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:e,iouThreshold:o,scoreThreshold:n};return T.runKernel(Qn,{boxes:s,scores:a},p)}var lN=N({nonMaxSuppression_:aj});function mN(r,t,e){let o=ij(r,t,e),n=o<0?-(o+1):o;r.splice(n,0,t)}function ij(r,t,e){return pj(r,t,e||uj)}function uj(r,t){return r>t?1:r>>1);let i=e(t,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Zd(r,t,e,o,n){return Jw(r,t,e,o,n,0)}function Jd(r,t,e,o,n,s){return Jw(r,t,e,o,n,0,!1,s,!0)}function ef(r,t,e,o,n,s){return Jw(r,t,e,o,n,s,!0)}function Jw(r,t,e,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(dN);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 _=cj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*lj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&mN(u,g,dN))}let d=l.length,f=e-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 cj(r,t,e){let o=r.subarray(t*4,t*4+4),n=r.subarray(e*4,e*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 lj(r,t,e){let o=Math.exp(t*e*e);return e<=r?o:0}function dN(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}async function mj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(t,\"scores\",\"nonMaxSuppressionAsync\"),i=$o(s,a,e,o,n);e=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}=Zd(u,c,e,o,n);return s!==r&&s.dispose(),a!==t&&a.dispose(),Jt(l,\"int32\")}var fN=mj;function dj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(t,\"scores\",\"nonMaxSuppression\"),p=$o(a,i,e,o,n,s);e=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var hN=N({nonMaxSuppressionWithScore_:dj});async function fj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(t,\"scores\",\"nonMaxSuppressionAsync\"),p=$o(a,i,e,o,n,s);e=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}=ef(c,l,e,o,n,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Jt(m,\"int32\"),selectedScores:Jt(d)}}var gN=fj;function hj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(t,\"scores\",\"nonMaxSuppression\"),p=$o(a,i,e,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 xN=N({nonMaxSuppressionPadded_:hj});async function gj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(t,\"scores\",\"nonMaxSuppressionAsync\"),p=$o(a,i,e,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}=Jd(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Jt(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var yN=gj;function xj(r,t,e=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var bN=N({resizeBilinear_:xj});function yj(r,t,e=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),$(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var CN=N({resizeNearestNeighbor_:yj});function bj(r,t=\"binary\",e=!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($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(t===\"otsu\"||t===\"binary\",()=>`Method must be binary or otsu, but was ${t}`),n.shape[2]===3){[c,l,m]=ci(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(t===\"otsu\"){let g=fd(We(Ud(d),\"int32\"),ar([]),256);u=Cj(g,p)}let f=e?nc(d,u):zu(d,u);return We(se(f,255),\"int32\")}function Cj(r,t){let e=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}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:e,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Rs,p,u)}var SN=N({transform_:wj});function Sj(r,t,e){let o=v(r,\"a\",\"bandPart\");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof t==\"number\"?($(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),$(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),i=v(t<0?s:t,\"numLower\",\"bandPart\")):($(t.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=co(kl(t,0),s,Uu(t,s))),typeof e==\"number\"?($(e%1===0,()=>`bandPart(): numUpper must be an integer, got ${e}.`),$(e<=a,()=>`bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`),p=v(e<0?a:e,\"numUpper\",\"bandPart\")):($(e.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=co(kl(e,0),a,Uu(e,a)));let u=W(uu(0,s,1,\"int32\"),[-1,1]),c=uu(0,a,1,\"int32\"),l=Te(u,c),m=Vu(nc(l,i),Sd(l,pr(p))),d=Ur([s,a],o.dtype);return W(vr(mo(W(o,[-1,s,a])).map(f=>co(m,f,d))),n)}var IN=N({bandPart_:Sj});function Ij(r){let t;if(Array.isArray(r)){t=!1,$(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else t=!0,r=ci(r,r.shape[0],0).map(n=>uc(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let e=[],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 kN(r,t);{let e=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=mo(W(r,[e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=kN(p,t);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 kN(r,t=!1){return T.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let e=r.shape[0],o=r.shape[1],n=bd(e),s=Wr(r),a=cu([[1]],[1,1]),i=Wr(a),p=e>=o?o:e;for(let u=0;u{let d=Xe(s,[u,u],[e-u,1]),f=Bu(d),h=Xe(s,[u,u],[1,1]),g=co(zu(h,0),cu([[-1]]),cu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Wr(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],[e-u,o]),k=se(C,i),_=cc(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 E=cc(k),R=Xe(n,[0,u],[e,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),E));else{let D=Te(R,Ze(Ze(R,i),E));n=yt([Xe(n,[0,0],[e,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!t&&e>o&&(n=Xe(n,[0,0],[e,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var NN=N({qr_:vj});var Et;(function(r){r[r.NONE=0]=\"NONE\",r[r.MEAN=1]=\"MEAN\",r[r.SUM=2]=\"SUM\",r[r.SUM_BY_NONZERO_WEIGHTS=3]=\"SUM_BY_NONZERO_WEIGHTS\"})(Et||(Et={}));function kj(r,t,e=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;t!=null&&(n=v(t,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(e===Et.NONE)return s;if(e===Et.SUM)return ot(s);if(e===Et.MEAN){if(n==null)return Wu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(e===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=We(ot(Ad(a,ke(0))),\"float32\");return je(ot(s),i)}}throw Error(`Unknown reduction: ${e}`)}var cr=N({computeWeightedLoss_:kj});function Nj(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(t,\"predictions\",\"absoluteDifference\"),a=null;e!=null&&(a=v(e,\"weights\",\"absoluteDifference\")),xt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Qt(Te(n,s));return cr(i,a,o)}var TN=N({absoluteDifference_:Nj});function Tj(r,t,e,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(t,\"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),e,!0));return cr(u,i,n)}var _N=N({cosineDistance_:Tj});function _j(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(t,\"predictions\",\"hingeLoss\"),a=null;e!=null&&(a=v(e,\"weights\",\"hingeLoss\")),xt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=pu(Te(i,se(n,s)));return cr(p,a,o)}var $N=N({hingeLoss_:_j});function $j(r,t,e,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(t,\"predictions\",\"huberLoss\"),i=null;e!=null&&(i=v(e,\"weights\",\"huberLoss\")),xt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=Qt(Te(a,s)),c=Uu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var EN=N({huberLoss_:$j});function Ej(r,t,e,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(t,\"predictions\",\"logLoss\"),i=null;e!=null&&(i=v(e,\"weights\",\"logLoss\")),xt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),c=pr(se(s,ui(Ce(a,u)))),l=se(Te(p,s),ui(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var RN=N({logLoss_:Ej});function Rj(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(t,\"predictions\",\"meanSquaredError\"),a=null;e!=null&&(a=v(e,\"weights\",\"meanSquaredError\")),xt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Hd(n,s);return cr(i,a,o)}var DN=N({meanSquaredError_:Rj});function Dj(r,t){let e=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(t,\"logits\",\"sigmoidCrossEntropyWithLogits\");xt(e.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=pu(o),s=se(o,e),a=vd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Aj(r,t,e,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(t,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(e!=null&&(i=v(e,\"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=Dj(s,a);return cr(p,i,n)}var AN=N({sigmoidCrossEntropy_:Aj});function Fj(r,t,e=-1){if(e===-1&&(e=t.rank-1),e!==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 ${e}`);return Ir((n,s,a)=>{let p=Td(s,[e],!0),u=Te(We(s,\"float32\"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[e]),gradFunc:(d,f)=>{let[h,g]=f,x=ai(d.shape,[e]);return[se(W(d,x),Te(We(h,\"float32\"),_o(g))),se(W(d,x),Te(_o(g),We(h,\"float32\")))]}}})(r,t)}function Pj(r,t,e,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(t,\"logits\",\"softmaxCrossEntropy\"),i=null;if(e!=null&&(i=v(e,\"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=Fj(s,a);return cr(p,i,n)}var FN=N({softmaxCrossEntropy_:Pj});function Oj(r,t,e,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(t,\"values\",\"sparseFillEmptyRows\"),a=v(e,\"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(Hi,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var PN=N({sparseFillEmptyRows_:Oj});function Mj(r,t,e){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(t,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(e,\"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 ON=N({sparseReshape_:Mj});function Lj(r,t,e){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(t,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(e,\"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 MN=N({sparseSegmentMean_:Lj});function Bj(r,t,e){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(t,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(e,\"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 LN=N({sparseSegmentSum_:Bj});function zj(r,t,e,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(t,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let c={separator:e,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 BN=N({stringNGrams_:zj});function Vj(r,t,e=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(t,\"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:e},a={input:o,delimiter:n},i=T.runKernel(qi,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var zN=N({stringSplit_:Vj});function Wj(r,t){let e=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:t};if(t<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:e};return T.runKernel(ji,n,o)}var VN=N({stringToHashBucketFast_:Wj});function Uj(r,t,e,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:t,rewrite:e,replaceGlobal:o};return T.runKernel($u,{x:n},s)}var WN=N({staticRegexReplace_:Uj});var Gj={fft:ac,ifft:Ku,rfft:ic,irfft:Gd},Hj={hammingWindow:nN,hannWindow:Yd,frame:Qd,stft:sN},Kj={flipLeftRight:iN,grayscaleToRGB:uN,resizeNearestNeighbor:CN,resizeBilinear:bN,rgbToGrayscale:pN,rotateWithOffset:cN,cropAndResize:aN,nonMaxSuppression:lN,nonMaxSuppressionAsync:fN,nonMaxSuppressionWithScore:hN,nonMaxSuppressionWithScoreAsync:gN,nonMaxSuppressionPadded:xN,nonMaxSuppressionPaddedAsync:yN,threshold:wN,transform:SN},qj={bandPart:IN,gramSchmidt:vN,qr:NN},jj={absoluteDifference:TN,computeWeightedLoss:cr,cosineDistance:_N,hingeLoss:$N,huberLoss:EN,logLoss:RN,meanSquaredError:DN,sigmoidCrossEntropy:AN,softmaxCrossEntropy:FN},Xj={sparseFillEmptyRows:PN,sparseReshape:ON,sparseSegmentMean:MN,sparseSegmentSum:LN},Yj={stringNGrams:BN,stringSplit:zN,stringToHashBucketFast:VN,staticRegexReplace:WN};var UN={};qe(UN,{Serializable:()=>$l,SerializationMap:()=>tf,getRegisteredName:()=>Zj,registerClass:()=>tS});var Qj=new Map,eS=new Map,$l=class{getClassName(){return this.constructor.className}static fromConfig(t,e){return new t(e)}},tf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(t){r.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function tS(r,t,e){$(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),$(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),$(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),typeof t==\"undefined\"&&(t=\"Custom\"),typeof e==\"undefined\"&&(e=r.className);let o=e,n=t+\">\"+o;return tf.register(r),Qj.set(n,r),eS.set(r,n),r}function Zj(r){return eS.has(r)?eS.get(r):r.className}var kr=class extends $l{minimize(t,e=!1,o){let{value:n,grads:s}=this.computeGradients(t,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),e?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,e){return zw(t,e)}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(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Qu=class extends kr{static get className(){return\"Adadelta\"}constructor(t,e,o=null){super(),this.learningRate=t,this.rho=e,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable)),Ot(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=t.length/2,o=!1;this.accumulatedGrads=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.rho,e.epsilon)}};var Zu=class extends kr{static get className(){return\"Adagrad\"}constructor(t,e=.1){super(),this.learningRate=t,this.initialAccumulatorValue=e,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ea(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(t)?t[n].tensor:t[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(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulatedGrads=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,e){return new t(e.learningRate,e.initialAccumulatorValue)}};var Ju=class extends kr{static get className(){return\"Adam\"}constructor(t,e,o,n=null){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(e).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);e.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(t)?t[a].tensor:t[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(t=>t.variable)),this.accumulatedSecondMoment!=null&&Ot(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t),De(()=>{this.accBeta1.assign(ii(this.beta1,this.iterations_+1)),this.accBeta2.assign(ii(this.beta2,this.iterations_+1))});let e=t.length/2,o=!1;this.accumulatedFirstMoment=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=t.slice(e,e*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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)}};var ep=class extends kr{static get className(){return\"Adamax\"}constructor(t,e,o,n=null,s=0){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(e).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));e.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(t)?t[a].tensor:t[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=Dd(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(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error(\"getWeights() is not implemented for Adamax yet.\")}async setWeights(t){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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)}};var li=class extends kr{static get className(){return\"SGD\"}constructor(t){super(),this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=Array.isArray(t)?t[n].tensor:t[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(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=Er(ke(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error(\"SGD optimizer does not have settable weights.\")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,e){return new t(e.learningRate)}};var tp=class extends li{static get className(){return\"Momentum\"}constructor(t,e,o=!1){super(t),this.learningRate=t,this.momentum=e,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulations=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)}};var rp=class extends kr{static get className(){return\"RMSProp\"}constructor(t,e=.9,o=0,n=null,s=!1){if(super(),this.learningRate=t,this.decay=e,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),t==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&Ot(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=this.centered?t.length/3:t.length/2,o=!1;this.accumulatedMeanSquares=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=t.slice(e*2,e*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(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)}};var Jj=[Qu,Zu,Ju,ep,tp,rp,li];function GN(){for(let r of Jj)tS(r)}var mi={};qe(mi,{CompositeArrayBuffer:()=>ir,browserFiles:()=>KN,browserHTTPRequest:()=>XN,concatenateArrayBuffers:()=>uk,copyModel:()=>Sk,decodeWeights:()=>nd,encodeWeights:()=>sk,fromMemory:()=>YN,fromMemorySync:()=>iS,getLoadHandlers:()=>mk,getModelArtifactsForJSON:()=>Jp,getModelArtifactsForJSONSync:()=>_w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>lk,getWeightSpecs:()=>ad,http:()=>of,isHTTPScheme:()=>rf,listModels:()=>Ck,loadWeights:()=>qN,moveModel:()=>Ik,registerLoadRouter:()=>ck,registerSaveRouter:()=>pk,removeModel:()=>wk,weightsLoaderFactory:()=>sS,withSaveHandler:()=>QN,withSaveHandlerSync:()=>ZN});var eX=\"model\",tX=\".json\",rX=\".weights.bin\";function HN(r){return new Promise(t=>setTimeout(t)).then(r)}var lc=class r{constructor(t){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");t.startsWith(r.URL_SCHEME)&&(t=t.slice(r.URL_SCHEME.length)),(t==null||t.length===0)&&(t=eX),this.modelJsonFileName=t+tX,this.weightDataFileName=t+rX}async save(t){if(typeof document==\"undefined\")throw new Error(\"Browser downloads are not supported in this environment since `document` is not present\");let e=ir.join(t.weightData),o=window.URL.createObjectURL(new Blob([e],{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 n=[{paths:[\"./\"+this.weightDataFileName],weights:t.weightSpecs}],s=sd(t,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 HN(()=>i.dispatchEvent(new MouseEvent(\"click\"))),t.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await HN(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:va(t)}}}};lc.URL_SCHEME=\"downloads://\";var rS=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:a});return}let p=Jp(s,u=>this.loadWeights(u));t(p)},o.onerror=n=>e(`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(t){let e=[],o=[];for(let a of t)e.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(t),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[e,a])}loadWeightsFile(t,e){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 '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],o=this.weightsFiles.map(s=>Tw(s.name)),n={};for(let s of t)s.paths.forEach(a=>{let i=Tw(a);if(e.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(e.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(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},oX=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(lc.URL_SCHEME)?nX(r.slice(lc.URL_SCHEME.length)):null;qt.registerSaveRouter(oX);function nX(r=\"model\"){return new lc(r)}function KN(r){return new rS(r)}function oS(r,t,e,o){a(r),e=e==null?0:e,o=o==null?1:o,i(e,o);let n=0,s=p=>(p.then(u=>{let c=e+ ++n/r.length*(o-e);return t(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function nS(r,t){t==null&&(t={});let e=t.fetchFunc==null?A().platform.fetch:t.fetchFunc,o=r.map(l=>e(l,t.requestInit,{isBinary:!0})),n=0,s=.5,i=(t.onProgress==null?await Promise.all(o):await oS(o,t.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return t.onProgress==null?await Promise.all(i):await oS(i,t.onProgress,p,u)}async function qN(r,t=\"\",e,o){return sS(a=>nS(a,{requestInit:o}))(r,t,e)}function sS(r){return async(t,e=\"\",o)=>{let n=t.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(t.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x=\"quantization\"in g?g.quantization.dtype:g.dtype,b=Cl[x]*He(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=>{t[d].paths.forEach(f=>{let h=e+(e.endsWith(\"/\")?\"\":\"/\")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=t[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=nd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var sX=\"application/octet-stream\",aX=\"application/json\",El=class{constructor(t,e){if(this.DEFAULT_METHOD=\"POST\",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?($(typeof e.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=e.fetchFunc):this.fetch=A().platform.fetch,$(t!=null&&t.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(t)&&$(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let o=[{paths:[\"./model.weights.bin\"],weights:t.weightSpecs}],n=sd(t,o);if(e.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:aX}),\"model.json\"),t.weightData!=null){let a=ir.join(t.weightData);e.body.append(\"model.weights.bin\",new Blob([a],{type:sX}),\"model.weights.bin\")}let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:va(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.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=e.modelTopology,n=e.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 Jp(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=iX(e),s=this.weightPathPrefix||o,a=ad(t),i=[],p=[];for(let c of t)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await nS(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,u]}};El.URL_SCHEME_REGEX=/^https?:\\/\\//;function iX(r){let t=r.lastIndexOf(\"/\"),e=r.lastIndexOf(\"?\"),o=r.substring(0,t),n=e>t?r.substring(e):\"\";return[o+\"/\",n]}function rf(r){return r.match(El.URL_SCHEME_REGEX)!=null}var jN=(r,t)=>{if(typeof fetch==\"undefined\"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(o=>rf(o)):e=rf(r),e)return of(r,t)}return null};qt.registerSaveRouter(jN);qt.registerLoadRouter(jN);function of(r,t){return new El(r,t)}function XN(r,t){return of(r,t)}var Rl=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},nf=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},aS=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function YN(r,t,e,o){let n=arguments;return new aS(iS(...n))}function iS(r,t,e,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Rl(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 Rl({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 Rl({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:o}))}function QN(r){return new nf(r)}function ZN(r){return new nf(r)}var eT={};qe(eT,{confusionMatrix:()=>JN});function uX(r,t,e){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(t,\"predictions\",\"confusionMatrix\");$(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=Tl(We(o,\"int32\"),e),a=Tl(We(n,\"int32\"),e),i=cc(s),p=Ze(i,a);return We(p,\"int32\")}var JN=N({confusionMatrix_:uX});var nT={};qe(nT,{draw:()=>gX,fromPixels:()=>xX,fromPixelsAsync:()=>dX,toPixels:()=>hX});var op,tT=!1;function rT(r,t=3){if(t>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 e=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)e=!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(qp(Eu,T.backendName)!=null){let f={pixels:r},h={numChannels:t};return T.runKernel(Eu,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||e)l=r.data;else if(s||n||i){if(op==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")op=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else op=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});op.canvas.width=u,op.canvas.height=c,op.drawImage(r,0,0,u,c),l=op.getImageData(0,0,u,c).data}let m;if(t===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*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(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function fX(r){let t=(r==null?void 0:r.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function hX(r,t){let e=v(r,\"img\",\"toPixels\");if(!(r instanceof mt)){let u=e;e=We(u,\"int32\"),u.dispose()}oT(e);let[o,n]=e.shape.slice(0,2),s=e.rank===2?1:e.shape[2],a=await e.data(),i=e.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(e.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(t!=null){tT||qp(_u,T.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),tT=!0),t.width=n,t.height=o;let u=t.getContext(\"2d\"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return e!==r&&e.dispose(),p}function gX(r,t,e){let o=v(r,\"img\",\"draw\");if(!(r instanceof mt)){let a=o;o=We(a,\"int32\"),a.dispose()}oT(o),fX(e==null?void 0:e.imageOptions);let n={image:o},s={canvas:t,options:e};T.runKernel(_u,n,s)}var xX=N({fromPixels_:rT});var sf={};qe(sf,{prepareAndValidate:()=>sT});function sT(r,t){let e=r.shape.length,o=t.shape.length;if(e<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);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[o-1]>e)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[o-1]} vs. ${e}`);if(He(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=t.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:()=>bX,computeFlatOffset:()=>vX,computeOutShape:()=>wX,getNormalizedAxes:()=>SX,isSliceContinous:()=>IX,maskToAxes:()=>CX,parseSliceParams:()=>kX,sliceInfo:()=>NX,startForAxis:()=>dT,startIndicesWithElidedDims:()=>cT,stopForAxis:()=>fT,stopIndicesWithElidedDims:()=>lT,stridesForAxis:()=>mT,stridesWithElidedDims:()=>iT});var uS=-2,yX=-1;function bX(r,t,e){let o=r.shape.length;$(o===t.length,()=>`Error in slice${o}D: Length of begin ${t} must match the rank of the array (${o}).`),$(o===e.length,()=>`Error in slice${o}D: Length of size ${e} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${t[n]+e[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function CX(r){let t=[],e=0;for(;r>0;)r&1&&t.push(e),r/=2,e++;return t}function wX(r,t,e){let o=[];for(let n=0;n0){let d=t[0],f=e+1;c=cT(a,d,f,o,r),l=lT(i,d,f,n,r),m=iT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=uT(t,e,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=uT(t,e,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=Bp(0,a,p-1),a}function fT(r,t,e,o,n,s){let a=t[n],i=e[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=Bp(0,a,p):a=Bp(-1,a,p-1),a}function IX(r,t,e){let o=e.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||e[n]!==r[n])return!1;return!0}function vX(r,t){let e=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return e==null?s=new Array(n).fill(-1):typeof e==\"number\"?s=[e,...new Array(n-1).fill(-1)]:e.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function NX(r,t,e,o,n,s,a,i,p){let u;if(o==null?(u=new Array(t.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:t.slice(),end:e.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]=aT(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=aT(m.end[C],1,m.strides[C],k,_,E);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===uS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==uS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function TX(r,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let e=0;t.beginValid=r.begin!=null,t.endValid=r.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 o=0;o0?s[t]:s[t+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var _X=\"4.14.0\";var Dl=class{static sgd(t){return new li(t)}static momentum(t,e,o=!1){return new tp(t,e,o)}static rmsprop(t,e=.9,o=0,n=null,s=!1){return new rp(t,e,o,n,s)}static adam(t=.001,e=.9,o=.999,n=null){return new Ju(t,e,o,n)}static adadelta(t=.001,e=.95,o=null){return new Qu(t,e,o)}static adamax(t=.002,e=.9,o=.999,n=null,s=0){return new ep(t,e,o,n,s)}static adagrad(t,e=.1){return new Zu(t,e)}};var TGe=Dl;var $X=typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r();function pS(){return new Promise(r=>$X(()=>r()))}var w={};qe(w,{ERF_A1:()=>KX,ERF_A2:()=>qX,ERF_A3:()=>jX,ERF_A4:()=>XX,ERF_A5:()=>YX,ERF_P:()=>HX,PARALLELIZE_THRESHOLD:()=>af,RowPartitionType:()=>Fa,SELU_SCALE:()=>GX,SELU_SCALEALPHA:()=>UX,applyActivation:()=>Xu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>tK,assertParamsConsistent:()=>EX,assignToTypedArray:()=>r5,axesAreInnerMostDims:()=>Bw,calculateShapes:()=>W1,checkEinsumDimSizes:()=>u5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>y2,combineRaggedTensorToTensorShapes:()=>DX,complexWithEvenIndex:()=>JX,complexWithOddIndex:()=>e5,computeConv2DInfo:()=>Lu,computeConv3DInfo:()=>Lk,computeDefaultPad:()=>Lw,computeDilation2DInfo:()=>J4,computeOptimalWindowSize:()=>OX,computeOutAndReduceShapes:()=>eK,computeOutShape:()=>RX,computePool2DInfo:()=>Mw,computePool3DInfo:()=>eH,convertConv2DDataFormat:()=>Bk,decodeEinsumEquation:()=>a5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ai,exponent:()=>n5,exponents:()=>o5,fromStringArrayToUint8:()=>$5,fromUint8ToStringArray:()=>_5,getAxesPermutation:()=>rK,getBroadcastDims:()=>d2,getComplexWithIndex:()=>t5,getEinsumComputePath:()=>p5,getEinsumPermutation:()=>i5,getFusedBiasGradient:()=>ju,getFusedDyActivation:()=>qu,getImageCenter:()=>MX,getInnerMostAxes:()=>nK,getPermuted:()=>BX,getRaggedRank:()=>FX,getReductionAxes:()=>gd,getReshaped:()=>LX,getReshapedPermuted:()=>zX,getRowPartitionTypesHelper:()=>AX,getSliceBeginCoords:()=>VX,getSliceSize:()=>WX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>d5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>f5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>h5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>y5,getSparseReshapeInputOutputMismatchErrorMessage:()=>C5,getSparseReshapeInputOutputMultipleErrorMessage:()=>b5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>g5,getSparseReshapeNegativeOutputDimErrorMessage:()=>x5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>v5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>w5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>S5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>I5,getUndoAxesPermutation:()=>oK,isIdentityPermutation:()=>c5,log:()=>XG,mergeRealAndImagArrays:()=>QX,prepareAndValidate:()=>sT,prepareSplitSize:()=>m5,segment_util:()=>lS,shouldFuse:()=>Yu,slice_util:()=>pt,splitRealAndImagArrays:()=>ZX,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Mu,upcastType:()=>dt,validateDefaultValueShape:()=>PX,validateInput:()=>pc,validateUpdateShape:()=>Yw,warn:()=>Ia});function EX(r,t){let e=r[0].length;r.forEach((n,s)=>{$(n.length===e,()=>`Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`)}),$(t>=0&&t`Error in concat${e}D: axis must be between 0 and ${e-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${e}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function RX(r,t){let e=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function AX(r){let t={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},e=[];for(let o of r)if(o in t)e.push(t[o]);else break;return e}function FX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function PX(r,t){if(r==null||t==null)return;let e=r.length,o=t.length;if(e>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${e} 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=${t} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var af=30;function OX(r){return r<=af?r:Vp(r,Math.floor(Math.sqrt(r)))}function MX(r,t,e){let o=e*(typeof r==\"number\"?r:r[0]),n=t*(typeof r==\"number\"?r:r[1]);return[o,n]}function LX(r,t,e,o=!0){let n=[];if(o)n=n.concat(t.slice(0)),n.push(r[0]/e),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=t.length;for(let a=0;a=t*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function zX(r,t,e,o=!0){let n=[];o?n.push(r[0]/e):n.push(r[0]*e);for(let s=1;s\",s5=/->/g,hT=\",\",gT=\"...\";function a5(r,t){r=r.replace(/\\s/g,\"\");let e=(r.length-r.replace(s5,\"\").length)/cS.length;if(e<1)throw new Error(\"Equations without an arrow are not supported.\");if(e>1)throw new Error(`Equation must contain exactly one arrow (\"${cS}\").`);let[o,n]=r.split(cS);$(o.indexOf(gT)===-1,()=>`The ellipsis notation (\"${gT}\") is not supported yet.`);let s=o.split(hT),a=s.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);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:e,expandDims:o}}function u5(r,t,e){let o=new Array(r);for(let n=0;n`Expected dimension ${o[t[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function p5(r,t){let e=r,o=[],n=0;r.length===0&&e.push(-1),n=r.length+1;for(let a=0;at===e)}function l5(r,t){let e=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(t).fill(r.shape[e]/t);else{let n=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>\"There should be only one negative value in split array.\");let s=t.indexOf(-1);if(s!==-1){let a=t.reduce((i,p)=>p>0?i+p:i);t[s]=r.shape[e]-a}$(r.shape[e]===t.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=t}return o}function d5(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function f5(r,t){return`indices(${r}, 0) is invalid: ${t} < 0`}function h5(r,t,e){return`indices(${r}, 0) is invalid: ${t} >= ${e}`}function g5(r,t){return`only one output dimension may be -1, not both ${r} and ${t}`}function x5(r,t){return`size ${r} must be non-negative, not ${t}`}function y5(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function b5(r,t){let e=He(r),o=He(t);return`Input to reshape is a SparseTensor with ${e}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${t}`}function C5(r,t){let e=He(r),o=He(t);return`Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${t}`}function w5(){return\"segment ids must be >= 0\"}function S5(){return\"segment ids are not increasing\"}function I5(r,t){return`Segment id ${r} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function v5(r,t,e){return`Bad: indices[${r}] == ${t} out of range [0, ${e})`}var lS={};qe(lS,{collectGatherOpShapeInfo:()=>T5,computeOutShape:()=>N5,segOpComputeOptimalWindowSize:()=>k5});function k5(r,t){let e=!1,o;for(r<=af?(o=r,e=!0):o=Vp(r,Math.floor(Math.sqrt(r)));!e;)o>t||o===r?e=!0:o=Vp(r,o+1);return o}function N5(r,t,e){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(eQp(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function $5(r){return r.map(t=>Zi(t))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Zd,nonMaxSuppressionV4Impl:()=>Jd,nonMaxSuppressionV5Impl:()=>ef,whereImpl:()=>jd});GN();var E5=A();E5.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 fo;(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\"})(fo||(fo={}));var xT;(function(r){let t;(function(e){e[e.LEGACY=0]=\"LEGACY\",e[e.V1=1]=\"V1\",e[e.V2=2]=\"V2\"})(t=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(xT||(xT={}));var dS={};function D5(r,t){let e={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:t};dS[r]=e}function uf(r){return dS[r]}function A5(r){delete dS[r]}function I(r,t,e,o,n){let s=t.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?t.inputNames.length+i:i;if(s.type===\"tensor\")return Bt(t.inputNames[u],e,o,n);if(s.type===\"tensors\"){let m=t.inputs.slice(i,p);return t.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,e,o,n))}let c=Bt(t.inputNames[u],e,o,n),l=c.dataSync();return s.type===\"number\"?l[0]:y.toNestedArray(c.shape,l)}let a=t.attrParams[r];return a&&a.value}function Bt(r,t,e,o){let[n,s]=Nr(r,e);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=e.currentContextIds.find(i=>!!t[pf(n,i)]);return a!==void 0?t[pf(n,a)][s]:void 0}function fS(r,t,e){return t[pf(r,e.currentContextId)]}function Ls(r,t){let[e,o,n]=Nr(r,t);return[pf(e,t&&t.currentContextId),o,n]}function pf(r,t){return t?`${r}-${t}`:r}function Nr(r,t){if(r===\"\")return[\"\",0,void 0];let e=t!=null&&t.parseNodeNameCache!=null;if(e){let s=t.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 e&&t.parseNodeNameCache.set(r,n),n}function Al(r,t,e){let o=I(\"pad\",r,t,e);if(o===\"explicit\"){o=I(\"explicitPaddings\",r,t,e);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:Wr(r)}var hS={};qe(hS,{json:()=>F5});var F5=[{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 gS={};qe(gS,{json:()=>P5});var P5=[{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 xS={};qe(xS,{json:()=>O5});var O5=[{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 yS={};qe(yS,{json:()=>M5});var M5=[{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 bS={};qe(bS,{json:()=>L5});var L5=[{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 CS={};qe(CS,{json:()=>B5});var B5=[{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 wS={};qe(wS,{json:()=>z5});var z5=[{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 SS={};qe(SS,{json:()=>V5});var V5=[{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 IS={};qe(IS,{json:()=>W5});var W5=[{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 vS={};qe(vS,{json:()=>U5});var U5=[{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 kS={};qe(kS,{json:()=>G5});var G5=[{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 NS={};qe(NS,{json:()=>H5});var H5=[{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 TS={};qe(TS,{json:()=>K5});var K5=[{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 _S={};qe(_S,{json:()=>q5});var q5=[{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:()=>j5});var j5=[{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 ES={};qe(ES,{json:()=>X5});var X5=[{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 RS={};qe(RS,{json:()=>Y5});var Y5=[{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 DS={};qe(DS,{json:()=>Q5});var Q5=[{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 AS={};qe(AS,{json:()=>Z5});var Z5=[{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 Fl=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[hS,gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,$S,ES,RS,DS,AS],e=[].concat(...t.map(o=>o.json));this.opMappers=e.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(t,e={}){let o=t.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={};e!=null&&(c=this.mapSignatureEntries(e.inputs),l=this.mapSignatureEntries(e.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 E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=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={};t.library!=null&&t.library.function!=null&&(d=t.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:e,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(t){return Object.keys(t||{}).reduce((e,o)=>(e[t[o].name]=o,e),{})}mapNode(t){let e=uf(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let o={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:e.outputs};return e.inputs!=null&&(o.inputParams=e.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),e.attrs!=null&&(o.attrParams=e.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=cf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=cf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=xf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=mf(t.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=mf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=gf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=lf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=bf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=hf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=yf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=df(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=df(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=ff(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=yT(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yT(t.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${t.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(t){let e=t.nodeDef,o=[],n=[],s={};e!=null&&(s=e.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(l[m.name]),l),{}));let a=[],i=[];t.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:FS(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=t.ret;t.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(t);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o),e),{}),outputs:t.signature.outputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o,t.ret),e),{})}}mapArgToTensorInfo(t,e){let o=t.name;return e!=null&&(o=e[o]),{name:o,dtype:t.type}}};function J5(r){let t=A().global;if(typeof t.atob!=\"undefined\")return t.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 bT(r,t){let e=Array.isArray(r)?String.fromCharCode.apply(null,r):J5(r);return t?e:e.toLowerCase()}function cf(r,t,e,o=!1){let n=r[t];return n!=null?bT(n.s,o):e}function lf(r,t,e){let o=r[t];return o?o.b:e}function mf(r,t,e){let o=r[t]||{},n=o.i!=null?o.i:o.f!=null?o.f:e;return typeof n==\"number\"?n:parseInt(n,10)}function FS(r){switch(typeof r==\"string\"&&(r=fo[r]),r){case fo.DT_FLOAT:case fo.DT_HALF:return\"float32\";case fo.DT_INT32:case fo.DT_INT64:case fo.DT_INT8:case fo.DT_UINT8:return\"int32\";case fo.DT_BOOL:return\"bool\";case fo.DT_DOUBLE:return\"float32\";case fo.DT_STRING:return\"string\";default:return null}}function yT(r,t,e){let o=r[t];return o&&o.func?o.func.name:e}function df(r,t,e){let o=r[t];return o&&o.type?FS(o.type):e}function ff(r,t,e){let o=r[t];return o&&o.list&&o.list.type?o.list.type.map(n=>FS(n)):e}function CT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(t=>typeof t.size==\"number\"?t.size:parseInt(t.size,10)):[]}function hf(r,t,e){let o=r[t];return o&&o.shape?CT(o.shape):e}function gf(r,t,e){let o=r[t];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):e}function xf(r,t,e,o=!1){let n=r[t];return n&&n.list&&n.list.s?n.list.s.map(s=>bT(s,o)):e}function yf(r,t,e){let o=r[t];return o&&o.list&&o.list.shape?o.list.shape.map(n=>CT(n)):e}function bf(r,t,e){let o=r[t];return o&&o.list&&o.list.b?o.list.b:e}var Cf=class{constructor(t,e,o){this.node=t,this.tensorMap=e,this.context=o,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(n=>this.getInput(n)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(t){return Bt(t,this.tensorMap,this.context)}getAttr(t,e){let o=this.node.rawAttrs[t];if(o.tensor!=null)return Bt(t,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return mf(this.node.rawAttrs,t,e);if(o.s!=null)return cf(this.node.rawAttrs,t,e);if(o.b!=null)return lf(this.node.rawAttrs,t,e);if(o.shape!=null)return hf(this.node.rawAttrs,t,e);if(o.type!=null)return df(this.node.rawAttrs,t,e);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return gf(this.node.rawAttrs,t,e);if(o.list.s!=null)return xf(this.node.rawAttrs,t,e);if(o.list.shape!=null)return yf(this.node.rawAttrs,t,e);if(o.list.b!=null)return bf(this.node.rawAttrs,t,e);if(o.list.type!=null)return ff(this.node.rawAttrs,t,e)}return e}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>kw,abs:()=>Qt,acos:()=>Nk,acosh:()=>Tk,add:()=>Ce,addN:()=>_k,all:()=>$k,any:()=>Ek,argMax:()=>Rk,argMin:()=>Dk,asin:()=>Ak,asinh:()=>Fk,atan:()=>Pk,atan2:()=>Ok,atanh:()=>Mk,avgPool:()=>md,avgPool3d:()=>zk,basicLSTMCell:()=>Vk,batchNorm:()=>ru,batchNorm2d:()=>Uk,batchNorm3d:()=>Gk,batchNorm4d:()=>Hk,batchToSpaceND:()=>dd,bincount:()=>fd,bitwiseAnd:()=>Kk,booleanMaskAsync:()=>E6,broadcastArgs:()=>qk,broadcastTo:()=>ou,buffer:()=>me,cast:()=>We,ceil:()=>jk,clipByValue:()=>Xk,clone:()=>Wr,complex:()=>$r,concat:()=>yt,concat1d:()=>Yk,concat2d:()=>Qk,concat3d:()=>Zk,concat4d:()=>Jk,conv1d:()=>e2,conv2d:()=>nu,conv2dTranspose:()=>t2,conv3d:()=>r2,conv3dTranspose:()=>n2,cos:()=>s2,cosh:()=>a2,cosineWindow:()=>_l,cumprod:()=>i2,cumsum:()=>u2,denseBincount:()=>p2,depthToSpace:()=>c2,depthwiseConv2d:()=>oc,diag:()=>l2,dilation2d:()=>m2,div:()=>je,divNoNan:()=>f2,dot:()=>h2,dropout:()=>W6,einsum:()=>su,elu:()=>yd,enclosingPowerOfTwo:()=>Qw,ensureShape:()=>g2,equal:()=>xd,erf:()=>x2,euclideanNorm:()=>C2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>w2,eye:()=>bd,fft:()=>ac,fill:()=>Ea,floor:()=>Cd,floorDiv:()=>ld,fused:()=>Zw,gather:()=>wd,gatherND:()=>z6,greater:()=>zu,greaterEqual:()=>Sd,ifft:()=>Ku,imag:()=>iu,image:()=>Kj,inTopKAsync:()=>G6,irfft:()=>Gd,isFinite:()=>S2,isInf:()=>I2,isNaN:()=>v2,leakyRelu:()=>Id,less:()=>kl,lessEqual:()=>nc,linalg:()=>qj,linspace:()=>k2,localResponseNormalization:()=>N2,log:()=>ui,log1p:()=>vd,logSigmoid:()=>T2,logSoftmax:()=>_2,logSumExp:()=>Td,logicalAnd:()=>Vu,logicalNot:()=>_d,logicalOr:()=>$d,logicalXor:()=>$2,losses:()=>jj,lowerBound:()=>E2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Rd,maxPool3d:()=>R2,maxPoolWithArgmax:()=>D2,maximum:()=>Dd,mean:()=>Wu,meshgrid:()=>A2,min:()=>vl,minimum:()=>Uu,mirrorPad:()=>F2,mod:()=>P2,moments:()=>O2,movingAverage:()=>A6,mul:()=>se,multiRNNCell:()=>M2,multinomial:()=>L2,neg:()=>pr,norm:()=>Bu,notEqual:()=>Ad,oneHot:()=>Tl,ones:()=>Da,onesLike:()=>B2,op:()=>N,outerProduct:()=>z2,pad:()=>Aa,pad1d:()=>V2,pad2d:()=>W2,pad3d:()=>U2,pad4d:()=>G2,pool:()=>H2,pow:()=>ii,prelu:()=>Pd,print:()=>cd,prod:()=>K2,raggedGather:()=>q2,raggedRange:()=>j2,raggedTensorToTensor:()=>X2,rand:()=>Y2,randomGamma:()=>x1,randomNormal:()=>Vd,randomStandardNormal:()=>y1,randomUniform:()=>sc,randomUniformInt:()=>b1,range:()=>uu,real:()=>pi,reciprocal:()=>C1,relu:()=>pu,relu6:()=>Wd,reshape:()=>W,reverse:()=>lo,reverse1d:()=>w1,reverse2d:()=>S1,reverse3d:()=>I1,reverse4d:()=>v1,rfft:()=>ic,round:()=>Ud,rsqrt:()=>k1,scalar:()=>ke,scatterND:()=>P6,searchSorted:()=>Nl,selu:()=>N1,separableConv2d:()=>T1,setdiff1dAsync:()=>_1,sigmoid:()=>$a,sign:()=>$1,signal:()=>Hj,sin:()=>E1,sinh:()=>R1,slice:()=>Xe,slice1d:()=>D1,slice2d:()=>A1,slice3d:()=>F1,slice4d:()=>P1,softmax:()=>O1,softplus:()=>Nd,spaceToBatchND:()=>Fd,sparse:()=>Xj,sparseToDense:()=>L6,spectral:()=>Gj,split:()=>ci,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Hd,squeeze:()=>uc,stack:()=>vr,step:()=>Kd,stridedSlice:()=>M1,string:()=>Yj,sub:()=>Te,sum:()=>ot,tan:()=>L1,tanh:()=>Il,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>cu,tensor3d:()=>qd,tensor4d:()=>B1,tensor5d:()=>z1,tensor6d:()=>V1,tensorScatterUpdate:()=>U1,tile:()=>au,topk:()=>G1,transpose:()=>cc,truncatedNormal:()=>H1,unique:()=>K1,unsortedSegmentSum:()=>q1,unstack:()=>mo,upperBound:()=>j1,variable:()=>X1,where:()=>co,whereAsync:()=>Xd,zeros:()=>Ur,zerosLike:()=>Gt});var wT=(r,t,e,o=Je)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"AddN\":return[o.addN(I(\"tensors\",r,t,e))];case\"FloorMod\":case\"Mod\":return[o.mod(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Mul\":return[o.mul(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"RealDiv\":case\"Div\":return[o.div(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"DivNoNan\":return[o.divNoNan(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"FloorDiv\":return[o.floorDiv(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Sub\":return[o.sub(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Minimum\":return[o.minimum(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Maximum\":return[o.maximum(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Pow\":return[o.pow(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"SquaredDifference\":return[o.squaredDifference(I(\"a\",r,t,e),I(\"b\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ST=(r,t,e,o=Je)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(I(\"x\",r,t,e))];case\"Acos\":return[o.acos(I(\"x\",r,t,e))];case\"Acosh\":return[o.acosh(I(\"x\",r,t,e))];case\"Asin\":return[o.asin(I(\"x\",r,t,e))];case\"Asinh\":return[o.asinh(I(\"x\",r,t,e))];case\"Atan\":return[o.atan(I(\"x\",r,t,e))];case\"Atan2\":return[o.atan2(I(\"x\",r,t,e),I(\"y\",r,t,e))];case\"Atanh\":return[o.atanh(I(\"x\",r,t,e))];case\"Ceil\":return[o.ceil(I(\"x\",r,t,e))];case\"Complex\":return[o.complex(I(\"real\",r,t,e),I(\"imag\",r,t,e))];case\"Cos\":return[o.cos(I(\"x\",r,t,e))];case\"Cosh\":return[o.cosh(I(\"x\",r,t,e))];case\"Elu\":return[o.elu(I(\"x\",r,t,e))];case\"Erf\":return[o.erf(I(\"x\",r,t,e))];case\"Exp\":return[o.exp(I(\"x\",r,t,e))];case\"Expm1\":return[o.expm1(I(\"x\",r,t,e))];case\"Floor\":return[o.floor(I(\"x\",r,t,e))];case\"Log\":return[o.log(I(\"x\",r,t,e))];case\"Log1p\":return[o.log1p(I(\"x\",r,t,e))];case\"Imag\":return[o.imag(I(\"x\",r,t,e))];case\"Neg\":return[o.neg(I(\"x\",r,t,e))];case\"Reciprocal\":return[o.reciprocal(I(\"x\",r,t,e))];case\"Real\":return[o.real(I(\"x\",r,t,e))];case\"Relu\":return[o.relu(I(\"x\",r,t,e))];case\"Round\":return[o.round(I(\"x\",r,t,e))];case\"Selu\":return[o.selu(I(\"x\",r,t,e))];case\"Sigmoid\":return[o.sigmoid(I(\"x\",r,t,e))];case\"Sin\":return[o.sin(I(\"x\",r,t,e))];case\"Sign\":return[o.sign(I(\"x\",r,t,e))];case\"Sinh\":return[o.sinh(I(\"x\",r,t,e))];case\"Softplus\":return[o.softplus(I(\"x\",r,t,e))];case\"Sqrt\":return[o.sqrt(I(\"x\",r,t,e))];case\"Square\":return[o.square(I(\"x\",r,t,e))];case\"Tanh\":return[o.tanh(I(\"x\",r,t,e))];case\"Tan\":return[o.tan(I(\"x\",r,t,e))];case\"ClipByValue\":return[o.clipByValue(I(\"x\",r,t,e),I(\"clipValueMin\",r,t,e),I(\"clipValueMax\",r,t,e))];case\"Relu6\":return[o.relu6(I(\"x\",r,t,e))];case\"Rsqrt\":return[o.rsqrt(Bt(r.inputNames[0],t,e))];case\"LeakyRelu\":return[o.leakyRelu(I(\"x\",r,t,e),I(\"alpha\",r,t,e))];case\"Prelu\":return[o.prelu(I(\"x\",r,t,e),I(\"alpha\",r,t,e))];case\"IsNan\":return[o.isNaN(Bt(r.inputNames[0],t,e))];case\"IsInf\":return[o.isInf(Bt(r.inputNames[0],t,e))];case\"IsFinite\":return[o.isFinite(Bt(r.inputNames[0],t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Gr(r,t,e=\"\"){if(!(typeof r==\"number\"||typeof t==\"number\")){y.assert(r.length===t.length,()=>e+` Shapes ${r} and ${t} must match`);for(let o=0;oe+` Shapes ${r} and ${t} must match`)}}}function IT(r){return!(typeof r==\"number\"||r.some(t=>t<0))}function mc(r,t,e){let o=wf(r,e),n=!IT(o);if(n&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&t.forEach(s=>{o=wf(s.shape,o)}),!IT(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function wf(r,t){if(typeof r==\"number\")return t;if(typeof t==\"number\")return r;if(r.length!==t.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${t}`);let e=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${t}`);e[o]=n>=0?n:s}return e}var Sf=class{constructor(t,e,o,n,s,a,i){this.name=t,this.dtype=e,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Er(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.tensor.id))&&e.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let e=this.tensors[t];if(e.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor}readMany(t){return t.map(e=>this.read(e))}write(t,e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t},\n because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),Gr(this.elementShape,e.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);o.tensor=e,Er(e),o.written=!0,this.tensors[t]=o}writeMany(t,e){if(t.length!==e.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${e.length}.`);t.forEach((o,n)=>this.write(o,e[n]))}gather(t,e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${e}`);if(t)t=t.slice(0,this.size());else{t=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(t,mo(e,0))}split(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);let o=0,n=t.map(p=>(o+=p,o));if(o!==e.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: ${e.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:e.size/o,a=[];De(()=>{e=W(e,[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}`);Gr(e,s.shape,\"TensorList shape mismatch: \"),Er(s)}),this.idTensor=ke(0),this.maxNumElements=n,Er(this.idTensor)}copy(){return new r([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.id))&&e.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,e,o=-1){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, 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.`);Gr(t,this.elementShape,\"TensorList shape mismatch: \");let n=mc(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(s,0)})}popBack(t,e){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error(\"Trying to pop from an empty list.\");let o=mc(this.elementShape,this.tensors,t),n=this.tensors.pop();return n.kept=!1,Gr(n.shape,t,\"TensorList shape mismatch: \"),W(n,o)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Gr(t.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");Er(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 e=new r([],this.elementShape,this.elementDtype,this.maxNumElements);e.tensors.length=t;for(let o=0;othis.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.`);Gr(this.tensors[t].shape,e,\"TensorList shape mismatch: \");let n=mc(this.elementShape,this.tensors,e);return W(this.tensors[t],n)}setItem(t,e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.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.`);Gr(this.elementShape,e.shape,\"TensorList shape mismatch: \"),Er(e),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=e}gather(t,e,o){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);Gr(this.elementShape,o,\"TensorList shape mismatch: \"),t=t.slice(0,this.size());let n=mc(this.elementShape,this.tensors,o);return t.length===0?ar([],[0].concat(n)):De(()=>{let s=t.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(t,e){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Gr(this.elementShape,e,\"TensorList shape mismatch: \");let o=mc(this.elementShape,this.tensors,e);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function vT(r,t,e){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!==e)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`);let n=r.shape.slice(1);Gr(n,t,\"TensorList shape mismatch: \");let s=mo(r);return new dc(s,t,o)}function kT(r,t,e,o){return new dc([],r,t,o)}function NT(r,t,e,o){if(t.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${r.shape[0]}`);let n=Math.max(...t);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new dc([],e,r.dtype,o),a=mo(r,0);return t.forEach((i,p)=>{s.setItem(i,a[p])}),s}function TT(r,t,e){let o=0,n=t.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=wf(s,e),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,t,e),n=I(\"elseBranch\",r,t,e),s=I(\"cond\",r,t,e),a=I(\"args\",r,t,e);return(await s.data())[0]?e.functionMap[o].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap):e.functionMap[n].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=I(\"body\",r,t,e),n=I(\"cond\",r,t,e),s=I(\"args\",r,t,e),a=await e.functionMap[n].executeFunctionAsync(s,e.tensorArrayMap,e.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 e.functionMap[o].executeFunctionAsync(u,e.tensorArrayMap,e.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 e.functionMap[n].executeFunctionAsync(u,e.tensorArrayMap,e.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,t,e);return[Bs(o)]}case\"Switch\":{let o=I(\"pred\",r,t,e),n=I(\"data\",r,t,e);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,t,e)!==void 0);if(o){let n=Bt(o,t,e);return[Bs(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,t,e),n=I(\"tensor\",r,t,e);return e.enterFrame(o),[Bs(n)]}case\"Exit\":{let o=I(\"tensor\",r,t,e);return e.exitFrame(),[Bs(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,t,e);return e.nextIteration(),[Bs(o)]}case\"TensorArrayV3\":{let o=I(\"size\",r,t,e),n=I(\"dtype\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"dynamicSize\",r,t,e),i=I(\"clearAfterRead\",r,t,e),p=I(\"identicalElementShapes\",r,t,e),u=I(\"name\",r,t,e),c=new Sf(u,n,o,s,p,a,i);return e.addTensorArray(c),[c.idTensor,ke(1)]}case\"TensorArrayWriteV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"index\",r,t,e);return[e.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"dtype\",r,t,e);return[e.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id),s=I(\"dtype\",r,t,e);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=I(\"tensorArrayId\",r,t,e),n=I(\"tensor\",r,t,e),s=I(\"lengths\",r,t,e),a=e.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id);return[ke(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=I(\"tensorArrayId\",r,t,e),n=e.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=I(\"tensorListId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"tensor\",r,t,e),a=e.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=I(\"tensorListId\",r,t,e),n=I(\"index\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=I(\"indices\",r,t,e),n=I(\"tensor\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"numElements\",r,t,e),i=NT(n,o,s,a);return e.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=I(\"elementShape\",r,t,e),n=I(\"elementDType\",r,t,e),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=I(s,r,t,e),i=r.op===\"TensorListReserve\"?-1:a,p=kT(o,n,a,i);return e.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=I(\"tensorListId\",r,t,e),n=I(\"indices\",r,t,e),s=I(\"elementShape\",r,t,e),a=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e),a=I(\"numElements\",r,t,e);return[e.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=I(\"tensor\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e),a=vT(o,n,s);return e.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=I(\"tensorListId\",r,t,e),n=e.getTensorList(o.id),s=I(\"dtype\",r,t,e),a=I(\"elementShape\",r,t,e);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"tensor\",r,t,e),s=e.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=I(\"tensorListId\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"elementDType\",r,t,e);return[e.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=I(\"tensor\",r,t,e),n=I(\"elementShape\",r,t,e),s=I(\"lengths\",r,t,e),a=TT(o,s,n);return e.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,t,e),n=e.getTensorList(o.id);return[ke(n.size(),\"int32\")]}case\"TensorListResize\":{let o=I(\"tensorListId\",r,t,e),n=I(\"size\",r,t,e),a=e.getTensorList(o.id).resize(n);return e.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function $T(r,t,e){let[o,n]=I(\"fusedOps\",r,t,e),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=I(\"numArgs\",r,t,e);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,t,e),l=Al(r,t,e),m=I(\"dataFormat\",r,t,e).toUpperCase(),d=I(\"dilations\",r,t,e),[f,h]=I(\"args\",r,t,e);a&&(h=f,f=void 0);let g=I(\"leakyreluAlpha\",r,t,e);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var ET=(r,t,e,o=Je)=>{switch(r.op){case\"Conv1D\":{let n=I(\"stride\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilation\",r,t,e);return[o.conv1d(I(\"x\",r,t,e),I(\"filter\",r,t,e),n,s,a,i)]}case\"Conv2D\":{let n=I(\"strides\",r,t,e),s=Al(r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilations\",r,t,e);return[o.conv2d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[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}=$T(r,t,e);return[o.fused.conv2d({x:I(\"x\",r,t,e),filter:I(\"filter\",r,t,e),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}=$T(r,t,e);return[o.fused.depthwiseConv2d({x:I(\"x\",r,t,e),filter:I(\"filter\",r,t,e),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,t,e),s=I(\"strides\",r,t,e),a=Al(r,t,e);return[o.conv2dTranspose(I(\"x\",r,t,e),I(\"filter\",r,t,e),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=I(\"strides\",r,t,e),s=Al(r,t,e),a=I(\"dilations\",r,t,e),i=I(\"dataFormat\",r,t,e).toUpperCase();return[o.depthwiseConv2d(I(\"input\",r,t,e),I(\"filter\",r,t,e),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dataFormat\",r,t,e).toUpperCase(),i=I(\"dilations\",r,t,e);return[o.conv3d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.avgPool(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.maxPool(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e),i=I(\"includeBatchInIndex\",r,t,e),{result:p,indexes:u}=o.maxPoolWithArgmax(I(\"x\",r,t,e),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.avgPool3d(I(\"x\",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"kernelSize\",r,t,e);return[o.maxPool3d(I(\"x\",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=I(\"strides\",r,t,e),s=I(\"pad\",r,t,e),a=I(\"dilations\",r,t,e),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I(\"x\",r,t,e),I(\"filter\",r,t,e),[i,p],s,[u,c],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var RT=(r,t,e,o=Je)=>{switch(r.op){case\"Fill\":{let n=I(\"shape\",r,t,e),s=I(\"dtype\",r,t,e),a=I(\"value\",r,t,e);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=I(\"start\",r,t,e),s=I(\"stop\",r,t,e),a=I(\"num\",r,t,e);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=I(\"logits\",r,t,e),s=I(\"numSamples\",r,t,e),a=I(\"seed\",r,t,e);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=I(\"indices\",r,t,e),s=I(\"depth\",r,t,e),a=I(\"onValue\",r,t,e),i=I(\"offValue\",r,t,e),p=I(\"dtype\",r,t,e);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(I(\"shape\",r,t,e),I(\"dtype\",r,t,e))];case\"OnesLike\":return[o.onesLike(I(\"x\",r,t,e))];case\"RandomStandardNormal\":return[o.randomStandardNormal(I(\"shape\",r,t,e),I(\"dtype\",r,t,e),I(\"seed\",r,t,e))];case\"RandomUniform\":return[o.randomUniform(I(\"shape\",r,t,e),I(\"minval\",r,t,e),I(\"maxval\",r,t,e),I(\"dtype\",r,t,e))];case\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,t,e),I(\"minval\",r,t,e),I(\"maxval\",r,t,e),I(\"seed\",r,t,e))];case\"Range\":{let n=I(\"start\",r,t,e),s=I(\"stop\",r,t,e),a=I(\"step\",r,t,e);return[o.range(n,s,a,I(\"dtype\",r,t,e))]}case\"TruncatedNormal\":{let n=I(\"shape\",r,t,e),s=I(\"mean\",r,t,e),a=I(\"stdDev\",r,t,e),i=I(\"seed\",r,t,e);return[o.truncatedNormal(n,s,a,I(\"dtype\",r,t,e),i)]}case\"Zeros\":return[o.zeros(I(\"shape\",r,t,e),I(\"dtype\",r,t,e))];case\"ZerosLike\":return[o.zerosLike(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PS(r,t,e){let o=I(\"boxes\",r,t,e),n=I(\"scores\",r,t,e),s=I(\"maxOutputSize\",r,t,e),a=I(\"iouThreshold\",r,t,e),i=I(\"scoreThreshold\",r,t,e),p=I(\"softNmsSigma\",r,t,e);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var DT=async(r,t,e,o,n=Je)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=PS(r,t,e),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}=PS(r,t,e),c=I(\"padToMaxOutputSize\",r,t,e),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}=PS(r,t,e);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(I(\"condition\",r,t,e),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(I(\"x\",r,t,e),I(\"y\",r,t,e));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var AT=(r,t,e,o=Je)=>{switch(r.op){case\"LowerBound\":{let n=I(\"sortedSequence\",r,t,e),s=I(\"values\",r,t,e);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=I(\"x\",r,t,e),s=I(\"k\",r,t,e),a=I(\"sorted\",r,t,e),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=I(\"sortedSequence\",r,t,e),s=I(\"values\",r,t,e);return[o.upperBound(n,s)]}case\"Unique\":{let n=I(\"x\",r,t,e),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=I(\"x\",r,t,e),s=I(\"axis\",r,t,e),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var FT=(r,t,e,o=Je)=>{switch(r.op){case\"Const\":return t[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,t,e);return[Bt(r.name,t,e)||n];case\"Placeholder\":return[Bt(r.name,t,e)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,t,e);return[Bs(c)]}case\"IdentityN\":return I(\"x\",r,t,e).map(c=>Bs(c));case\"Snapshot\":let s=I(\"x\",r,t,e);return[Bs(s)];case\"Shape\":return[o.tensor1d(I(\"x\",r,t,e).shape,\"int32\")];case\"ShapeN\":return I(\"x\",r,t,e).map(c=>o.tensor1d(c.shape));case\"Size\":return[o.scalar(I(\"x\",r,t,e).size,\"int32\")];case\"Rank\":return[o.scalar(I(\"x\",r,t,e).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=I(\"x\",r,t,e),i=I(\"data\",r,t,e),p=I(\"message\",r,t,e),u=I(\"summarize\",r,t,e);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let c=0;ct.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),\"int32\")}async import(t,e){this.checkKeyAndValueTensor(t,e);let o=await t.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=mo(e),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,t,e),a=I(\"valueDType\",r,t,e),i=new If(s,a);return o.addHashTable(r.name,i),[i.handle]}}case\"InitializeTable\":case\"InitializeTableV2\":case\"LookupTableImport\":case\"LookupTableImportV2\":{let n=I(\"tableHandle\",r,t,e,o),s=I(\"keys\",r,t,e),a=I(\"values\",r,t,e);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=I(\"tableHandle\",r,t,e,o),s=I(\"keys\",r,t,e),a=I(\"defaultValue\",r,t,e);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=I(\"tableHandle\",r,t,e,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var OT=(r,t,e,o=Je)=>{switch(r.op){case\"ResizeBilinear\":{let n=I(\"images\",r,t,e),s=I(\"size\",r,t,e),a=I(\"alignCorners\",r,t,e),i=I(\"halfPixelCenters\",r,t,e);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=I(\"images\",r,t,e),s=I(\"size\",r,t,e),a=I(\"alignCorners\",r,t,e),i=I(\"halfPixelCenters\",r,t,e);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=I(\"image\",r,t,e),s=I(\"boxes\",r,t,e),a=I(\"boxInd\",r,t,e),i=I(\"cropSize\",r,t,e),p=I(\"method\",r,t,e),u=I(\"extrapolationValue\",r,t,e);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=I(\"images\",r,t,e),s=I(\"transforms\",r,t,e),a=I(\"outputShape\",r,t,e),i=I(\"fillValue\",r,t,e),p=I(\"interpolation\",r,t,e),u=I(\"fillMode\",r,t,e);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,t,e,o=Je)=>{switch(r.op){case\"Equal\":return[o.equal(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"NotEqual\":return[o.notEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Greater\":return[o.greater(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"GreaterEqual\":return[o.greaterEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Less\":return[o.less(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LessEqual\":return[o.lessEqual(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LogicalAnd\":return[o.logicalAnd(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"LogicalNot\":return[o.logicalNot(I(\"a\",r,t,e))];case\"LogicalOr\":return[o.logicalOr(I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"Select\":case\"SelectV2\":return[o.where(I(\"condition\",r,t,e),I(\"a\",r,t,e),I(\"b\",r,t,e))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,t,e),I(\"b\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LT=(r,t,e,o=Je)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(I(\"a\",r,t,e),I(\"b\",r,t,e),I(\"transposeA\",r,t,e),I(\"transposeB\",r,t,e))];case\"Einsum\":return[o.einsum(I(\"equation\",r,t,e),...I(\"tensors\",r,t,e))];case\"Transpose\":return[o.transpose(I(\"x\",r,t,e),I(\"perm\",r,t,e))];case\"_FusedMatMul\":let[n,s]=I(\"fusedOps\",r,t,e),a=n===\"biasadd\",i=s===\"prelu\",p=I(\"numArgs\",r,t,e),u=I(\"leakyreluAlpha\",r,t,e);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,t,e);return[o.fused.matMul({a:I(\"a\",r,t,e),b:I(\"b\",r,t,e),transposeA:I(\"transposeA\",r,t,e),transposeB:I(\"transposeB\",r,t,e),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,t,e),I(\"numLower\",r,t,e),I(\"numUpper\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,t,e,o=Je)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(I(\"x\",r,t,e),I(\"axis\",r,t,e),I(\"keepDims\",r,t,e))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(I(\"x\",r,t,e),I(\"mean\",r,t,e),I(\"variance\",r,t,e),I(\"offset\",r,t,e),I(\"scale\",r,t,e),I(\"epsilon\",r,t,e))];case\"FusedBatchNormV3\":return[o.batchNorm(I(\"x\",r,t,e),I(\"mean\",r,t,e),I(\"variance\",r,t,e),I(\"offset\",r,t,e),I(\"scale\",r,t,e),I(\"epsilon\",r,t,e))];case\"LRN\":return[o.localResponseNormalization(I(\"x\",r,t,e),I(\"radius\",r,t,e),I(\"bias\",r,t,e),I(\"alpha\",r,t,e),I(\"beta\",r,t,e))];case\"Softmax\":return[o.softmax(I(\"x\",r,t,e))];case\"LogSoftmax\":return[o.logSoftmax(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,t,e,o=Je)=>{switch(r.op){case\"RaggedGather\":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I(\"paramsNestedSplits\",r,t,e),I(\"paramsDenseValues\",r,t,e),I(\"indices\",r,t,e),I(\"outputRaggedRank\",r,t,e));return n.concat(s)}case\"RaggedRange\":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I(\"starts\",r,t,e),I(\"limits\",r,t,e),I(\"splits\",r,t,e));return[n,s]}case\"RaggedTensorToTensor\":return[o.raggedTensorToTensor(I(\"shape\",r,t,e),I(\"values\",r,t,e),I(\"defaultValue\",r,t,e),I(\"rowPartitionTensors\",r,t,e),I(\"rowPartitionTypes\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VT=(r,t,e,o=Je)=>{switch(r.op){case\"Max\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.max(I(\"x\",r,t,e),i,p)]}case\"Mean\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.mean(I(\"x\",r,t,e),i,p)]}case\"Min\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.min(I(\"x\",r,t,e),i,p)]}case\"Sum\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.sum(I(\"x\",r,t,e),i,p)]}case\"All\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.all(I(\"x\",r,t,e),i,p)]}case\"Any\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.any(I(\"x\",r,t,e),i,p)]}case\"ArgMax\":{let i=I(\"axis\",r,t,e);return[o.argMax(I(\"x\",r,t,e),i)]}case\"ArgMin\":{let i=I(\"axis\",r,t,e);return[o.argMin(I(\"x\",r,t,e),i)]}case\"Prod\":{let i=I(\"axis\",r,t,e),p=I(\"keepDims\",r,t,e);return[o.prod(I(\"x\",r,t,e),i,p)]}case\"Cumprod\":{let i=I(\"axis\",r,t,e),p=I(\"exclusive\",r,t,e),u=I(\"reverse\",r,t,e);return[o.cumprod(I(\"x\",r,t,e),i,p,u)]}case\"Cumsum\":{let i=I(\"axis\",r,t,e),p=I(\"exclusive\",r,t,e),u=I(\"reverse\",r,t,e);return[o.cumsum(I(\"x\",r,t,e),i,p,u)]}case\"Bincount\":let n=I(\"x\",r,t,e),s=I(\"weights\",r,t,e),a=I(\"size\",r,t,e);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=I(\"x\",r,t,e),p=I(\"weights\",r,t,e),u=I(\"size\",r,t,e),c=I(\"binaryOutput\",r,t,e);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,t,e,o=Je)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=I(\"n\",r,t,e),s=I(\"axis\",r,t,e),a=I(\"tensors\",r,t,e);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=I(\"x\",r,t,e),s=I(\"indices\",r,t,e);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=I(\"axis\",r,t,e),s=I(\"batchDims\",r,t,e),a=I(\"x\",r,t,e),i=I(\"indices\",r,t,e);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=I(\"dims\",r,t,e),s=[];for(let i=0;i{let n=I(\"axis\",r,t,e),s=I(\"tensors\",r,t,e),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,t,e),s=I(\"tensor\",r,t,e);return o.unstack(s,n)}case\"Tile\":{let n=I(\"reps\",r,t,e);return[o.tile(I(\"x\",r,t,e),n)]}case\"Split\":case\"SplitV\":{let n=I(\"axis\",r,t,e),s=I(\"numOrSizeSplits\",r,t,e),a=I(\"x\",r,t,e);return o.split(a,s,n)}case\"ScatterNd\":{let n=I(\"indices\",r,t,e),s=I(\"values\",r,t,e),a=I(\"shape\",r,t,e);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=I(\"x\",r,t,e),s=I(\"indices\",r,t,e);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=I(\"sparseIndices\",r,t,e),s=I(\"outputShape\",r,t,e),a=I(\"sparseValues\",r,t,e),i=I(\"defaultValue\",r,t,e);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,t,e),s=I(\"values\",r,t,e),a=I(\"tensor\",r,t,e);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,t,e,o=Je)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I(\"indices\",r,t,e),I(\"values\",r,t,e),I(\"denseShape\",r,t,e),I(\"defaultValue\",r,t,e));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I(\"inputIndices\",r,t,e),I(\"inputShape\",r,t,e),I(\"newShape\",r,t,e));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(I(\"data\",r,t,e),I(\"indices\",r,t,e),I(\"segmentIds\",r,t,e))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(I(\"data\",r,t,e),I(\"indices\",r,t,e),I(\"segmentIds\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,t,e,o=Je)=>{switch(r.op){case\"FFT\":return[o.fft(I(\"x\",r,t,e))];case\"IFFT\":return[o.ifft(I(\"x\",r,t,e))];case\"RFFT\":return[o.rfft(I(\"x\",r,t,e))];case\"IRFFT\":return[o.irfft(I(\"x\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,t,e,o=Je)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,t,e),I(\"pattern\",r,t,e),I(\"rewrite\",r,t,e),I(\"replaceGlobal\",r,t,e))];case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I(\"data\",r,t,e),I(\"dataSplits\",r,t,e),I(\"separator\",r,t,e),I(\"nGramWidths\",r,t,e),I(\"leftPad\",r,t,e),I(\"rightPad\",r,t,e),I(\"padWidth\",r,t,e),I(\"preserveShortSequences\",r,t,e));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I(\"input\",r,t,e),I(\"delimiter\",r,t,e),I(\"skipEmpty\",r,t,e));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(I(\"input\",r,t,e),I(\"numBuckets\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,t,e,o=Je)=>{switch(r.op){case\"Cast\":return[o.cast(I(\"x\",r,t,e),I(\"dtype\",r,t,e))];case\"ExpandDims\":{let n=I(\"axis\",r,t,e);return[o.expandDims(I(\"x\",r,t,e),n)]}case\"Squeeze\":{let n=I(\"axis\",r,t,e);return[o.squeeze(I(\"x\",r,t,e),n)]}case\"Reshape\":return[o.reshape(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"EnsureShape\":return[o.ensureShape(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"MirrorPad\":return[o.mirrorPad(I(\"x\",r,t,e),I(\"padding\",r,t,e),I(\"mode\",r,t,e))];case\"PadV2\":case\"Pad\":return[o.pad(I(\"x\",r,t,e),I(\"padding\",r,t,e),I(\"constantValue\",r,t,e))];case\"SpaceToBatchND\":{let n=I(\"blockShape\",r,t,e),s=I(\"paddings\",r,t,e);return[o.spaceToBatchND(I(\"x\",r,t,e),n,s)]}case\"BatchToSpaceND\":{let n=I(\"blockShape\",r,t,e),s=I(\"crops\",r,t,e);return[o.batchToSpaceND(I(\"x\",r,t,e),n,s)]}case\"DepthToSpace\":{let n=I(\"blockSize\",r,t,e),s=I(\"dataFormat\",r,t,e).toUpperCase();return[o.depthToSpace(I(\"x\",r,t,e),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(I(\"x\",r,t,e),I(\"shape\",r,t,e))];case\"BroadcastArgs\":return[o.broadcastArgs(I(\"s0\",r,t,e),I(\"s1\",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,t,e,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>wT(a,i,p));case\"basic_math\":return n(()=>ST(a,i,p));case\"control\":return _T(a,i,p);case\"convolution\":return n(()=>ET(a,i,p));case\"creation\":return n(()=>RT(a,i,p));case\"dynamic\":return DT(a,i,p);case\"evaluation\":return n(()=>AT(a,i,p));case\"image\":return n(()=>OT(a,i,p));case\"graph\":return n(()=>FT(a,i,p));case\"logical\":return n(()=>MT(a,i,p));case\"matrices\":return n(()=>LT(a,i,p));case\"normalization\":return n(()=>BT(a,i,p));case\"ragged\":return n(()=>zT(a,i,p));case\"reduction\":return n(()=>VT(a,i,p));case\"slice_join\":return n(()=>WT(a,i,p));case\"sparse\":return n(()=>UT(a,i,p));case\"spectral\":return n(()=>GT(a,i,p));case\"string\":return n(()=>HT(a,i,p));case\"transformation\":return n(()=>KT(a,i,p));case\"hash_table\":return PT(a,i,p,o);case\"custom\":let u=uf(a.op);if(u&&u.customExecutor)return u.customExecutor(new Cf(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,t,e);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Pl=class{constructor(t={},e={},o={},n={},s){this.weightMap=t,this.tensorArrayMap=e,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(t,e){return{id:t,frameName:e,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let e=0;ee.id===0&&e.iterationId===0?\"\":`${e.frameName}-${e.iterationId}`).join(\"/\"):\"\"}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),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 t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error(\"Cannot increase frame iteration, the context is empty\")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(let e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)}};function MS(r,t,e,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=[...t];for(;l.length>0;){let m=l.pop();if((mu(m)||k8(m)||N8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),e[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:t,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function qT(r,t){let{usedNodes:e,inputs:o}=t,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>e.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=C8(f,p);return w8(h,p),h}function C8(r,t){let e=new Map(r.map(a=>[a.name,a])),o=t.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=e.get(a);for(let p of i.children)!e.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var fc=class extends Error{constructor(t){super(`NodesExecutionOrderError: ${t}`)}};function w8(r,t){let e=new Map(r.map((i,p)=>[i.name,p])),o=new Set(t.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(!e.has(p.name))throw new fc(`Child ${p.name} of node ${i.name} is unreachable.`);if(e.get(i.name)>e.get(p.name))throw new fc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!e.has(p.name))throw new fc(`Input ${p.name} of node ${i.name} is unreachable.`);if(e.get(p.name)>e.get(i.name))throw new fc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function jT(r){let t=new Map(r.map((i,p)=>[i.name,p])),e=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>mu(i)?e:p),n=i=>{let p=o[t.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;it[o].map(n=>n.id));this._weightIds=[].concat(...e),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 e=t.signatureKey||t.name;return t.defaultOutput?`${e}:${t.defaultOutput}`:e})}get functions(){return Object.keys(this._functions).reduce((t,e)=>(t[e]=this._functions[e].signature,t),{})}constructor(t,e){this.graph=t,this.parent=e,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(o=>{this._functionExecutorMap[o]=new r(t.functions[o],this)})}getCompilationKey(t,e){let o=t.map(s=>s.name).sort(),n=e.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(t,e){let o=MS(t,e,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=e.map(l=>l.name),c=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=qT(this.graph,o),p=jT(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(t){if(t==null)return null;let e=t.clone();return Er(e),e}cloneTensorList(t){return t?t.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([e,o])=>[e,this.cloneTensorList(o)]))}execute(t,e){this.disposeIntermediateTensors(),t=this.mapInputs(t);let o=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);let n=o.map(m=>this.graph.nodes[Nr(m)[0]]),s=e.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(t,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 Pl(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=t[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=OS(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),e.map(x=>Bt(x,d,m))})}getFrozenTensorIds(t){let e=[].concat.apply([],Object.keys(t).map(o=>t[o]).map(o=>o.map(n=>n.id)));return new Set(e)}checkTensorForDisposal(t,e,o,n,s,a,i){if(!(mu(e)||a.has(t))){for(let p of o[t])p!=null&&(i[p.id]=(i[p.id]||0)+e.children.length);for(let p of e.inputs){if(mu(p))continue;let u=fS(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(t,e,o,n,s,a){function i(p){return mu(p)||s.has(p.name)}if(!(mu(t)||a==null))for(let p of a){if(i(p))continue;let u=fS(p.name,e,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(t,e){return this._executeAsync(t,e)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let e of t)e&&!e.isDisposed&&e.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,e,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Pl(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(t,a,e,o),p=e.map(m=>Bt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(t).map(m=>t[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(t,e,o){let n=t.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,e,o)}async executeWithControlFlow(t,e,o,n){let s=Object.keys(t),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}=MS(t,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:e.currentContext})),h=Object.assign({},this.weightMap);Object.keys(t).forEach(S=>{let[k,_]=Nr(S),E=[];E[_]=t[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,e,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=>!mu(S)&&!Bt(S.name,h,e)).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(t,e,o,n,s,a,i,p,u){let c=[];for(;e.length>0;){let l=e.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=OS(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,e,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,e,o,n,s,u))}else this.processChildNodes(l.node,e,o,n,s,u)}return c}processChildNodes(t,e,o,n,s,a){t.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,e.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(e=>e.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(e=>{let o=t[e],[n]=Nr(e),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(t){var e,o;let n={};for(let s in t){let a=(o=(e=this._signature)===null||e===void 0?void 0:e.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=t[s]:n[s]=t[s]}return n}checkInputs(t){let e=Object.keys(t).filter(o=>{let[n]=Nr(o);return this.graph.nodes[n]==null});if(e.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${e}] that are not part of graph`)}mapOutputs(t){return t.map(e=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[e];return s!=null?s.name:e},{})}checkOutputs(t){t.forEach(e=>{let[o]=Nr(e);if(!this.graph.nodes[o])throw new Error(`The output '${e}' is not found in the graph`)})}};var vf=class{constructor(t={},e={}){this.hashTableNameToHandle=t,this.hashTableMap=e}addHashTable(t,e){this.hashTableNameToHandle[t]=e.handle,this.hashTableMap[e.id]=e}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var T8=\"?tfjs-format=file\",_8=\"model.json\",Ml=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(t,e={},o=mi){this.modelUrl=t,this.loadOptions=e,this.version=\"n/a\",this.io=o,e==null&&(this.loadOptions={}),this.resourceManager=new vf}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(t,this.loadOptions);else{let e=this.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(this.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error(`Found more than one (${e.length}) load handlers for URL '${[t]}'`);this.handler=e[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 t=this.handler.load();return y.isPromise(t)?t.then(e=>this.loadSync(e)):this.loadSync(t)}loadSync(t){this.artifacts=t;let e=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${e.versions.producer}.${e.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Ol(Fl.Instance.transformGraph(e,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let s=Fl.Instance.transformGraph(t.modelInitializer);this.initializer=new Ol(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=t.initializerSignature}return!0}async save(t,e){if(typeof t==\"string\"){let o=this.io.getSaveHandlers(t);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${t}'`);t=o[0]}if(t.save==null)throw new Error(\"GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.\");return t.save(this.artifacts)}addStructuredOutputNames(t){if(this.structuredOutputKeys){let e=t instanceof mt?[t]:t,o={};return e.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return t}predict(t,e){let o=this.execute(t,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(t,e){let o=await this.executeAsync(t,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(t){var e;if(!(t instanceof mt)&&!Array.isArray(t)){let s=(e=this.signature)===null||e===void 0?void 0:e.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(t[a]=this.resourceIdToCapturedInput[i.resourceId])}return t}t=Array.isArray(t)?t:[t];let o=Object.keys(this.resourceIdToCapturedInput).length;if(t.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 ${t.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]=t[n++],s},{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}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(t){if(this.resourceIdToCapturedInput={},this.initializerSignature){let e=this.initializerSignature.outputs,o=Object.keys(e);for(let n=0;n1?o:o[0]}async executeAsync(t,e){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let o=await this.executor.executeAsync(t,e);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((e,o)=>(e[o]=[t[o]],e),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function $8(r,t={},e=mi){if(r==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 r==\"string\"&&(r=R8(r));let o=new Ml(r,t,e);return await o.load(),o}function E8(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 t;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=mi.getWeightSpecs(o.weightsManifest),a=mi.getModelArtifactsForJSONSync(o,s,n);t=mi.fromMemorySync(a)}else if(\"load\"in r)t=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)t=mi.fromMemorySync(r);else throw new Error(\"Unknown model format\");let e=new Ml(t);return e.load(),e}function R8(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${_8}${T8}`}var D8=\"4.14.0\";function Q(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var A8=Vt.whereImpl,hc=class r extends so{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(t,e,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:t,dtype:o,refCount:1}),n}makeTensorInfo(t,e,o){let n;if(e===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,t,e)}else n=this.write(o,t,e);return{dataId:n,shape:t,dtype:e}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let e=this.data.get(t);e.refCount++}decRef(t){if(this.data.has(t)){let e=this.data.get(t);e.refCount--}}move(t,e,o,n,s){this.data.set(t,{values:e,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:e,complexTensorInfos:o}=this.data.get(t);if(e===\"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(t).values,e)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype===\"string\")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}makeOutput(t,e,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,o,t),this)}disposeData(t,e=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!e&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(t);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}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){Q([t],\"where\");let e=this.readSync(t.dataId);return A8(t.shape,e)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};hc.nextDataId=0;var wc={};qe(wc,{addImpl:()=>zS,bincountImpl:()=>yc,bincountReduceImpl:()=>kf,bitwiseAndImpl:()=>VS,castImpl:()=>BS,ceilImpl:()=>WS,concatImpl:()=>np,equalImpl:()=>US,expImpl:()=>HS,expm1Impl:()=>qS,floorDivImpl:()=>XS,floorImpl:()=>jS,gatherNdImpl:()=>Nf,gatherV2Impl:()=>Tf,greaterEqualImpl:()=>QS,greaterImpl:()=>YS,lessEqualImpl:()=>JS,lessImpl:()=>ZS,linSpaceImpl:()=>_f,logImpl:()=>eI,maxImpl:()=>$f,maximumImpl:()=>tI,minimumImpl:()=>rI,multiplyImpl:()=>Ll,negImpl:()=>oI,notEqualImpl:()=>nI,prodImpl:()=>sI,raggedGatherImpl:()=>Ef,raggedRangeImpl:()=>Rf,raggedTensorToTensorImpl:()=>Df,rangeImpl:()=>ap,rsqrtImpl:()=>iI,scatterImpl:()=>zs,sigmoidImpl:()=>k_,simpleAbsImpl:()=>LS,sliceImpl:()=>ip,sparseFillEmptyRowsImpl:()=>Af,sparseReshapeImpl:()=>Ff,sparseSegmentReductionImpl:()=>Cc,sqrtImpl:()=>__,squaredDifferenceImpl:()=>pI,staticRegexReplaceImpl:()=>cI,stridedSliceImpl:()=>Pf,stringNGramsImpl:()=>up,stringSplitImpl:()=>pp,stringToHashBucketFastImpl:()=>cp,subImpl:()=>mI,tileImpl:()=>Of,topKImpl:()=>Mf,transposeImpl:()=>bc,uniqueImpl:()=>lp});function LS(r){let t=new Float32Array(r.length);for(let e=0;e{let{x:t}=r.inputs,e=r.backend;Q(t,\"abs\");let o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId).values;return o=LS(n),e.makeOutput(o,t.shape,t.dtype)},XT={kernelName:Xs,backendName:\"cpu\",kernelFunc:F8};function ze(r){return(t,e,o,n,s)=>{let a=w.assertAndGetBroadcastShape(t,e),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=t.length,m=e.length,d=y.computeStrides(t),f=y.computeStrides(e),h=w.getBroadcastDims(t,a),g=w.getBroadcastDims(e,a);if(h.length+g.length===0)for(let x=0;xC[E]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Ht(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=e.makeTensorInfo(o.shape,\"complex64\"),p=e.data.get(i.dataId);return p.complexTensorInfos={real:e.makeTensorInfo(o.shape,\"float32\",s),imag:e.makeTensorInfo(n.shape,\"float32\",a)},i}var YT={kernelName:Ri,backendName:\"cpu\",kernelFunc:Ht};function gc(r,t,e=\"float32\"){if(e===\"complex64\"){let n=gc(r,t,\"float32\"),s=gc(r,t,\"float32\");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(t),e);return r.makeTensorInfo(t,e,o)}function lr(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var QT={kernelName:Co,backendName:\"cpu\",kernelFunc:lr};function Eo(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.data.get(o.dataId).complexTensorInfos.real,s=e.data.get(n.dataId).values;return e.makeTensorInfo(n.shape,n.dtype,s)}var ZT={kernelName:Gi,backendName:\"cpu\",kernelFunc:Eo};function BS(r,t,e,o){if(o===\"int32\"){let n=Int32Array.from(r);return[t,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],e),[s,a]=ze((i,p)=>i!==p?1:0)(t,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${e} to ${o}`)}function Ro(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return lr({inputs:{x:n},backend:e});let c=gc(e,n.shape,n.dtype),l=Ro({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),m=Ht({inputs:{real:l,imag:c},backend:e});return e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=Eo({inputs:{input:n},backend:e}),l=Ro({inputs:{x:c},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({inputs:{x:n},backend:e});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=e.data.get(n.dataId).values,[i,p,u]=BS(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}var JT={kernelName:yo,backendName:\"cpu\",kernelFunc:Ro};function Ye(r,t,e,o){return e==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]=t(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,_,E]=e(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo(E,\"float32\",k),D=p.makeTensorInfo(E,\"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]=t(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function xc(r){return(t,e,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(t,e),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=w.getBroadcastDims(t,i),f=w.getBroadcastDims(e,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=t.length,b=y.computeStrides(t),C=e.length,S=y.computeStrides(e);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,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 zS=ze((r,t)=>r+t),P8=xc((r,t,e,o)=>({real:r+e,imag:t+o})),Pa=Ye(io,zS,P8),e_={kernelName:io,backendName:\"cpu\",kernelFunc:Pa};function yc(r,t,e,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,e);for(let i=0;i=n||(s>0?a[p]+=t[i]:a[p]+=1)}return a}function kf(r,t,e,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,e],t.dtype);for(let i=0;i=e||(o?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var VS=ze((r,t)=>r&t),O8=Ye(qa,VS),t_={kernelName:qa,backendName:\"cpu\",kernelFunc:O8};function jt(r){return(t,e,o)=>{let n=y.getArrayFromDType(e,t.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=e||a.dtype,l=t(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var WS=jt(r=>Math.ceil(r)),M8=Dr(en,WS),r_={kernelName:en,backendName:\"cpu\",kernelFunc:M8};function np(r,t,e,o){let n=y.getArrayFromDType(e,y.sizeFromShape(t));if(o&&e!==\"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=e===\"string\"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===t?1:0),GS=Ye(xn,US,null,\"bool\"),o_={kernelName:xn,backendName:\"cpu\",kernelFunc:GS};var HS=jt(r=>Math.exp(r)),KS=Dr(yn,HS,\"float32\"),n_={kernelName:yn,backendName:\"cpu\",kernelFunc:KS};var qS=jt(r=>Math.expm1(r)),L8=Dr(bn,qS),s_={kernelName:bn,backendName:\"cpu\",kernelFunc:L8};var jS=jt(r=>Math.floor(r)),B8=Dr(wn,jS),a_={kernelName:wn,backendName:\"cpu\",kernelFunc:B8};var XS=ze((r,t)=>Math.floor(r/t)),z8=Ye(Sn,XS,null,\"int32\"),i_={kernelName:Sn,backendName:\"cpu\",kernelFunc:z8};function Nf(r,t,e,o,n,s,a,i,p){let u=me([o,s],e);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>t?1:0),V8=Ye(kn,YS,null,\"bool\"),u_={kernelName:kn,backendName:\"cpu\",kernelFunc:V8};var QS=ze((r,t)=>r>=t?1:0),W8=Ye(Nn,QS,null,\"bool\"),p_={kernelName:Nn,backendName:\"cpu\",kernelFunc:W8};var ZS=ze((r,t)=>rr<=t?1:0),G8=Ye(Dn,JS,null,\"bool\"),l_={kernelName:Dn,backendName:\"cpu\",kernelFunc:G8};function _f(r,t,e){let o=(t-r)/(e-1),n=y.makeZerosTypedArray(e,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),H8=Dr(Fn,eI),m_={kernelName:Fn,backendName:\"cpu\",kernelFunc:H8};function $f(r,t,e,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(e));for(let s=0;si)&&(i=u)}n[s]=i}return n}var tI=ze((r,t)=>Math.max(r,t)),K8=Ye(Vn,tI),d_={kernelName:Vn,backendName:\"cpu\",kernelFunc:K8};var rI=ze((r,t)=>Math.min(r,t)),q8=Ye(Hn,rI),f_={kernelName:Hn,backendName:\"cpu\",kernelFunc:q8};var Ll=ze((r,t)=>r*t),j8=xc((r,t,e,o)=>({real:r*e-t*o,imag:r*o+t*e})),sp=Ye(Xn,Ll,j8),h_={kernelName:Xn,backendName:\"cpu\",kernelFunc:sp};function oI(r,t,e){let o=y.createScalarValue(-1,e);return Ll([],t,o,r,e)}function X8(r){let{inputs:t,backend:e}=r,{x:o}=t;Q(o,\"neg\");let n=e.data.get(o.dataId).values,[s,a]=oI(n,o.shape,o.dtype);return e.makeTensorInfo(a,o.dtype,s)}var g_={kernelName:pa,backendName:\"cpu\",kernelFunc:X8};var nI=ze((r,t)=>r!==t?1:0),Y8=Ye(Yn,nI,null,\"bool\"),x_={kernelName:Yn,backendName:\"cpu\",kernelFunc:Y8};function bc(r,t,e,o,n){let s=t.length,a=y.sizeFromShape(t),i=y.computeStrides(t),p=y.computeStrides(n),u=y.getTypedArrayFromDType(e,y.sizeFromShape(n));for(let c=0;ce.disposeIntermediateTensorInfo(b)),e.makeTensorInfo(x,g,f)}var b_={kernelName:os,backendName:\"cpu\",kernelFunc:Q8};function Z8(r,t,e){r.forEach((o,n)=>{if(o<0||o>=e){let s=y.indexToLoc(n,t.length,y.computeStrides(t)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${e})`)}})}function J8(r,t){for(let e=0;en)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 eY(r,t,e,o){let n=[],s=0,a=t.length-1+e.length,i=new Array(a).fill(null).map(()=>[0]);J8(e,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 t}function C_(r,t){let e=r.slice(0,t);for(;e.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=t.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(t[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>w_)throw new Error(`Requires ((limit - start) / delta) <= ${w_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(e,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(t){let e=t.length;if(e===0)return 0;let o=0,n=t[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(t,e,o,n){let s=t.length,a=[];for(let i=0;i0&&a.length!==t[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(t,e,o,n){let s=t.length,a=[];if(s===0)return[];let i=0,p=t[0];if(p>=e.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${e.length}`);let u=e[p];a.push(u);for(let c=1;c=0&&(++i,i=e.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${e.length}`);u=e[l]}a.push(u)}if(a.length!==t.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(t,e,o,n){let s=this.getRowPartitionTensor(t),a=this.getRowPartitionTypeByDimension(t);switch(a){case Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,e,o,n);case Do.ROW_SPLITS:if(s.length-1>e.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${e.length}`);return this.calculateOutputIndexRowSplit(s,e,o,n);default:throw new Error(`Unsupported partition type: ${Do[a]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let e=this.rowPartitionTypes[0];switch(e){case Do.FIRST_DIM_SIZE:return t[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[e]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let e=this.getFirstDimensionSize(),o=this.calculateOutputSize(e),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=I_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(e,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(t,e,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(t+1);let p=y.sizeFromShape(i),u=e.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=ou(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);S_(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function S_(r,t,e){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}e.push(o)}return e}function Df(r,t,e,o,n,s,a,i,p,u){return new aI(r,t,e,o,n,s,a,i,p,u).compute()}function ap(r,t,e,o){let n=r===t,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((t-r)/e)),p=y.makeZerosTypedArray(i,o);t1/Math.sqrt(r)),nY=Dr(ls,iI),v_={kernelName:ls,backendName:\"cpu\",kernelFunc:nY};function zs(r,t,e,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=t.values;if(o===0)return me(e,t.dtype);let d=p instanceof tt?p:me(c,t.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 ${e}`);for(let x=0;x1/(1+Math.exp(-r))),uI=Ie(bs,r=>1/(1+Math.exp(-r))),N_={kernelName:bs,backendName:\"cpu\",kernelFunc:uI};function ip(r,t,e,o,n){let s=pt.isSliceContinous(o,t,e),a=y.sizeFromShape(e),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(t,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(e,n);for(let l=0;lf+t[h]);c.set(u.get(...d),...m)}return n===\"string\"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=e.data.get(n.dataId).values,c=ip(u,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,c)}var T_={kernelName:ha,backendName:\"cpu\",kernelFunc:Ao};function Af(r,t,e,o,n,s,a){let i=t[0],p=s[0],u=new Array(p),c=new Array(i),l=t[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(e,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(e,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=t.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(e,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)),sY=Ie(ws,r=>Math.sqrt(r)),$_={kernelName:ws,backendName:\"cpu\",kernelFunc:sY};var pI=ze((r,t)=>{let e=r-t;return e*e}),aY=Ye(ks,pI),E_={kernelName:ks,backendName:\"cpu\",kernelFunc:aY};var cI=jt((r,t)=>{let{pattern:e,replaceGlobal:o,rewrite:n}=t;return r.replace(new RegExp(e,o?\"g\":\"\"),n)}),iY=Dr($u,cI),R_={kernelName:$u,backendName:\"cpu\",kernelFunc:iY};function Pf(r,t,e,o){let n=me(r,t.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(t[m+l-1]);for(let b=0;b0){let p=e[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&e[u]<=o,!c)throw new Error(`Invalid split value ${e[u]}, must be in [${p}, ${o}]`);p=e[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=e[p]-e[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=e[p+1]-e[p],d=this.getNumNGrams(m,l);this.createNGrams(t,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=e[p+1]-e[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(t,u,i,c,d,m)}}return[i,a]}};function up(r,t,e,o,n,s,a,i){return new lI(e,o,n,s,a,i).compute(r,t)}function uY(r,t,e,o){if(!r.length)return;if(t.length===0){for(let s=0;sr-t),pY=xc((r,t,e,o)=>({real:r-e,imag:t-o})),Bl=Ye(Ts,mI,pY),D_={kernelName:Ts,backendName:\"cpu\",kernelFunc:Bl};function Of(r,t){let e=new Array(r.rank);for(let n=0;n{let e=t.value-r.value;return e===0?r.index-t.index:e};function A_(r,t,e=0,o=r.length-1){for(;o>e;){if(o-e>600){let i=o-e+1,p=t-e+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(e,Math.floor(t-p*c/i+l)),d=Math.min(o,Math.floor(t+(i-p)*c/i+l));A_(r,t,m,d)}let n=r[t],s=e,a=o;for(y.swap(r,e,t),zl(r[o],n)>0&&y.swap(r,e,o);s0;)a=a-1}zl(r[e],n)===0?y.swap(r,e,a):(a=a+1,y.swap(r,a,o)),a<=t&&(e=a+1),t<=a&&(o=a-1)}}function Mf(r,t,e,o,n){let s=t[t.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(e,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew hc,1);var dI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),F_={kernelName:hn,backendName:\"cpu\",kernelFunc:dI};function fI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o;Q([n],\"leakyRelu\");let a=y.sizeFromShape(n.shape),i=e.data.get(n.dataId).values,p=y.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?t*r:r);function hI(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t;Q([o,n],\"prelu\");let s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,[i,p]=lY(o.shape,n.shape,s,a,\"float32\");return e.makeTensorInfo(p,\"float32\",i)}var O_={kernelName:rs,backendName:\"cpu\",kernelFunc:hI};var gI=Ie(ss,r=>Math.max(0,r)),M_={kernelName:ss,backendName:\"cpu\",kernelFunc:gI};var xI=Ie(us,r=>Math.min(Math.max(0,r),6)),L_={kernelName:us,backendName:\"cpu\",kernelFunc:xI};function mp(r,t,e,o,n){if(e===\"linear\")return lr({inputs:{x:t},backend:r});if(e===\"relu\")return gI({inputs:{x:t},backend:r});if(e===\"elu\")return dI({inputs:{x:t},backend:r});if(e===\"relu6\")return xI({inputs:{x:t},backend:r});if(e===\"prelu\")return hI({inputs:{x:t,alpha:o},backend:r});if(e===\"leakyrelu\")return fI({inputs:{x:t},backend:r,attrs:{alpha:n}});if(e===\"sigmoid\")return uI({inputs:{x:t},backend:r});throw new Error(`Activation ${e} has not been implemented for the CPU backend.`)}function Ve(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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.`),e.incRef(n.dataId);let u=e.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 B_={kernelName:da,backendName:\"cpu\",kernelFunc:Ve};function yI(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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],_=Ve({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Ve({inputs:{x:s},backend:e,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=e.data.get(_.dataId).values,L=e.data.get(E.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides(E.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=e.blockSize;for(let le=0;leMath.acos(r)),W_={kernelName:Vo,backendName:\"cpu\",kernelFunc:dY};var fY=Ie(Wo,r=>Math.acosh(r)),U_={kernelName:Wo,backendName:\"cpu\",kernelFunc:fY};function hY(r){let{inputs:t,backend:e}=r,o=t;Q(t,\"addN\");let n=o.map(i=>e.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=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,\"int32\",d)}var q_={kernelName:Ys,backendName:\"cpu\",kernelFunc:yY};function bY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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=e.data.get(p.dataId).values;for(let g=0;ge.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,\"int32\",d)}var j_={kernelName:Qs,backendName:\"cpu\",kernelFunc:bY};var CY=Ie(Ko,r=>Math.asin(r)),X_={kernelName:Ko,backendName:\"cpu\",kernelFunc:CY};var wY=Ie(qo,r=>Math.asinh(r)),Y_={kernelName:qo,backendName:\"cpu\",kernelFunc:wY};var SY=Ie(jo,r=>Math.atan(r)),Q_={kernelName:jo,backendName:\"cpu\",kernelFunc:SY};var IY=ze((r,t)=>Math.atan2(r,t)),vY=Ye(Yo,IY),Z_={kernelName:Yo,backendName:\"cpu\",kernelFunc:vY};var kY=Ie(Xo,r=>Math.atanh(r)),J_={kernelName:Xo,backendName:\"cpu\",kernelFunc:kY};function Sc(r,t,e,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,e),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+E;g[J]=s===\"avg\"?q/Y:j}}}return h}function Lf(r,t,e,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(t,e,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 Bf(r,t,e,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,e),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],E=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 e$(r,t){let e=me(t.outShape,\"int32\"),o=t.strideDepth,n=t.strideHeight,s=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,p=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,l=t.effectiveFilterWidth,m=t.padInfo.front,d=t.padInfo.top,f=t.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}e.set(B,h,x,k,D,g)}}}return e}function NY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Sc(m,n.shape,n.dtype,d,c,\"avg\");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var t$={kernelName:Qo,backendName:\"cpu\",kernelFunc:NY};function TY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=Bf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return e.makeTensorInfo(m.shape,\"float32\",m.values)}var r$={kernelName:Zs,backendName:\"cpu\",kernelFunc:TY};function _Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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,E=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=e.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 e.makeTensorInfo(P.shape,P.dtype,P.values)}var o$={kernelName:Ei,backendName:\"cpu\",kernelFunc:_Y};function $Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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),E=e.data.get(n.dataId).values,R=me(n.shape,\"float32\",E);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 e.makeTensorInfo(k.shape,k.dtype,k.values)}var n$={kernelName:$i,backendName:\"cpu\",kernelFunc:$Y};function EY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=t;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=e.data.get(n.dataId).values,l=e.data.get(i.dataId).values,m=e.data.get(p.dataId).values,d=s?e.data.get(s.dataId).values:new Float32Array([1]),f=a?e.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,E=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),E>=b&&(E=0);return e.makeTensorInfo(n.shape,n.dtype,h)}var s$={kernelName:In,backendName:\"cpu\",kernelFunc:EY};function RY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({inputs:{x:n},backend:e,attrs:{shape:p}}),f=St({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var a$={kernelName:Js,backendName:\"cpu\",kernelFunc:RY};function DY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,u=yc(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var i$={kernelName:Jo,backendName:\"cpu\",kernelFunc:DY};function AY(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var u$={kernelName:ea,backendName:\"cpu\",kernelFunc:AY};var FY=Ie(bo,(r,t)=>{let e=t;return r>e.clipValueMax?e.clipValueMax:r{let{x:t}=r.inputs,e=r.backend,o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return lr({inputs:{x:p[0]},backend:e});if(p[0].dtype===\"complex64\"){let h=p.map(S=>Eo({inputs:{input:S},backend:e})),g=p.map(S=>Oa({inputs:{input:S},backend:e})),x=du({inputs:h,backend:e,attrs:{axis:s}}),b=du({inputs:g,backend:e,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:e});return h.forEach(S=>e.disposeIntermediateTensorInfo(S)),g.forEach(S=>e.disposeIntermediateTensorInfo(S)),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Ve({inputs:{x:h},backend:e,attrs:{shape:x}})}),c=u.map(h=>({vals:e.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=np(c,i,t[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=e.makeTensorInfo(d,t[0].dtype,m);return u.forEach(h=>e.disposeIntermediateTensorInfo(h)),f}var m$={kernelName:ta,backendName:\"cpu\",kernelFunc:du};function bI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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),E=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=e.data.get(n.dataId).values,U=e.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],Ge=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,Ge=st;for(let lt=0;ltMath.cos(r)),b$={kernelName:sn,backendName:\"cpu\",kernelFunc:VY};var WY=Ie(an,r=>Math.cosh(r)),C$={kernelName:an,backendName:\"cpu\",kernelFunc:WY};function UY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{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=e.data.get(s.dataId).values,C=e.data.get(a.dataId).values,S=e.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let E=0;E=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=e.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),E=e.data.get(n.dataId).values,R=e.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}=e,p=t,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:E,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 R$={kernelName:Mi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,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(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 D$={kernelName:Oi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Oi}, 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 QY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{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=e.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 ${E}.`)}else if(n.dtype===\"int32\"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[_]=E*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 A$={kernelName:_u,backendName:\"cpu\",kernelFunc:QY};function di(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=Ro({inputs:{x:n},backend:e,attrs:{dtype:\"int32\"}}):i=lr({inputs:{x:n},backend:e});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:e,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=gc(e,d,h),x=y.sizeFromShape(f),b=e.data.get(g.dataId).values,C=e.data.get(m.dataId).values;for(let S=0;S=0&&(m=di({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var P$={kernelName:Li,backendName:\"cpu\",kernelFunc:ZY};function JY(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t;Q([o,n],\"eluGrad\");let s=new Float32Array(y.sizeFromShape(n.shape)),a=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return e.makeTensorInfo(n.shape,\"float32\",s)}var O$={kernelName:Xa,backendName:\"cpu\",kernelFunc:JY};var eQ=w.ERF_P,tQ=w.ERF_A1,rQ=w.ERF_A2,oQ=w.ERF_A3,nQ=w.ERF_A4,sQ=w.ERF_A5,aQ=Ie(gn,r=>{let t=Math.sign(r),e=Math.abs(r),o=1/(1+eQ*e);return t*(1-((((sQ*o+nQ)*o+oQ)*o+rQ)*o+tQ)*o*Math.exp(-e*e))}),M$={kernelName:gn,backendName:\"cpu\",kernelFunc:aQ};function Ic(r){let{inputs:t,backend:e,attrs:o}=r,{input:n}=t,{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),Ve({inputs:{x:n},backend:e,attrs:{shape:i}})}var L$={kernelName:na,backendName:\"cpu\",kernelFunc:Ic};var iQ=ze((r,t)=>r/t),Vl=Ye(fn,iQ),Wl={kernelName:fn,backendName:\"cpu\",kernelFunc:Vl};function zf(r,t,e){let o=r.shape,n=o[0],s=o[1],a=e.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=e,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=Ve({inputs:{x:n},backend:e,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Ve({inputs:{x:s},backend:e,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=e.bufferSync(h),b=e.bufferSync(f),C=Tf(b,x,g);return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.makeTensorInfo(d.outputShape,C.dtype,C.values)}var H$={kernelName:aa,backendName:\"cpu\",kernelFunc:gQ};function xQ(r){let{inputs:t,backend:e}=r,{input:o}=t,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Ve({inputs:{x:o},backend:e,attrs:{shape:[a,s]}}),p=zf(i,!0,e),u=Ve({inputs:{x:p},backend:e,attrs:{shape:o.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(p),u}var K$={kernelName:zi,backendName:\"cpu\",kernelFunc:xQ};var yQ=Ie(Tn,r=>Number.isFinite(r)?1:0,\"bool\"),q$={kernelName:Tn,backendName:\"cpu\",kernelFunc:yQ};var bQ=Ie(_n,r=>Math.abs(r)===1/0?1:0,\"bool\"),j$={kernelName:_n,backendName:\"cpu\",kernelFunc:bQ};var CQ=Ie($n,r=>Number.isNaN(r)?1:0,\"bool\"),X$={kernelName:$n,backendName:\"cpu\",kernelFunc:CQ};function wQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=_f(o,n,s);return t.makeTensorInfo([a.length],\"float32\",a)}var Y$={kernelName:An,backendName:\"cpu\",kernelFunc:wQ};var SQ=Ie(Pn,r=>Math.log1p(r)),Q$={kernelName:Pn,backendName:\"cpu\",kernelFunc:SQ};var IQ=ze((r,t)=>r&&t),vQ=Ye(On,IQ,null,\"bool\"),Z$={kernelName:On,backendName:\"cpu\",kernelFunc:vQ};var kQ=Ie(Mn,r=>r?0:1,\"bool\"),J$={kernelName:Mn,backendName:\"cpu\",kernelFunc:kQ};var NQ=ze((r,t)=>r||t),TQ=Ye(Ln,NQ,null,\"bool\"),eE={kernelName:Ln,backendName:\"cpu\",kernelFunc:TQ};function _Q(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,\"LRN\");let u=n.shape[3],c=u-1,l=e.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:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Sc(m,n.shape,n.dtype,d,c,\"max\");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var nE={kernelName:Wn,backendName:\"cpu\",kernelFunc:EQ};function RQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=Bf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return e.makeTensorInfo(m.shape,\"float32\",m.values)}var sE={kernelName:ia,backendName:\"cpu\",kernelFunc:RQ};function DQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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=e.bufferSync(s),m=e$(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,E=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,\"float32\"),P=e.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 e.makeTensorInfo(D.shape,D.dtype,D.values)}var aE={kernelName:Ui,backendName:\"cpu\",kernelFunc:DQ};function AQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Lf(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,E=me(i.shape,\"float32\"),R=e.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}}E.set(U,P,M,L,O)}return e.makeTensorInfo(E.shape,E.dtype,E.values)}var iE={kernelName:Wi,backendName:\"cpu\",kernelFunc:AQ};function uE(r,t,e,o,n){let s=y.computeStrides(t),a=Sc(r,t,e,s,n,\"max\"),i=Lf(r,t,e,n,!0,o);return[a.values,i.values]}var pE={kernelName:ua,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=uE(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 FQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=e.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}});l.push(d);let f=Vl({inputs:{a:d,b:m},backend:e});l.push(f);let h=di({inputs:{x:f},backend:e,attrs:{axis:s,keepDims:a}});return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),h}var cE={kernelName:Un,backendName:\"cpu\",kernelFunc:FQ};function PQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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=e.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=e.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((_,E)=>_-p[E]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:e.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var mE={kernelName:Kn,backendName:\"cpu\",kernelFunc:OQ};var MQ=ze((r,t)=>{let e=r%t;return r<0&&t<0||r>=0&&t>=0?e:(e+t)%t}),LQ=Ye(qn,MQ),dE={kernelName:qn,backendName:\"cpu\",kernelFunc:LQ};var hE=Lp(qw());function II(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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=SI({inputs:{x:n},backend:e,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=Ve({inputs:{x:u},backend:e,attrs:{shape:c}}),m=Bl({inputs:{a:n,b:l},backend:e}),d=KS({inputs:{x:m},backend:e}),f=di({inputs:{x:d},backend:e,attrs:{axis:p,keepDims:!1}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Vl({inputs:{a:d,b:h},backend:e});return e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var fE={kernelName:Is,backendName:\"cpu\",kernelFunc:II};function BQ(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:II({inputs:{logits:n},backend:e,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=e.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=t.map(c=>{let l=Ic({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=du({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var vE={kernelName:la,backendName:\"cpu\",kernelFunc:vI};function qQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.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[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:e.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Vf={kernelName:es,backendName:\"cpu\",kernelFunc:qQ};var jQ=ze((r,t)=>Math.pow(r,t)),XQ=Ye(ts,jQ),kE={kernelName:ts,backendName:\"cpu\",kernelFunc:XQ};function YQ(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.data.get(x.dataId).values),u=n.map(x=>x.shape),c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,[m,d,f]=Ef(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],\"int32\",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var NE={kernelName:Up,backendName:\"cpu\",kernelFunc:YQ};function QQ(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Rf(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],\"int32\",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var TE={kernelName:Gp,backendName:\"cpu\",kernelFunc:QQ};function ZQ(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.data.get(n.dataId).values,c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,m=i.map(g=>e.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Df(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var _E={kernelName:Hp,backendName:\"cpu\",kernelFunc:ZQ};function JQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,dtype:s,step:a}=e,i=ap(o,n,a,s);return t.makeTensorInfo([i.length],s,i)}var $E={kernelName:ma,backendName:\"cpu\",kernelFunc:JQ};var e7=Ie(ns,r=>1/r),EE={kernelName:ns,backendName:\"cpu\",kernelFunc:e7};function t7(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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=e.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=e.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,E=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 e.makeTensorInfo(n.shape,n.dtype,h)}var FE={kernelName:Za,backendName:\"cpu\",kernelFunc:n7};function s7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e});let p=new tt(n.shape,n.dtype),u=e.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return e.makeTensorInfo(p.shape,p.dtype,p.values)}var PE={kernelName:ps,backendName:\"cpu\",kernelFunc:s7};var OE={kernelName:Ds,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 t=Math.floor(r);return r-t<.5?Math.floor(r):r-t>.5?Math.ceil(r):t%2===0?t:t+1}),ME={kernelName:cs,backendName:\"cpu\",kernelFunc:a7};function i7(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=e.bufferSync(n),f=e.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return e.makeTensorInfo(a,h.dtype,h.values)}var LE={kernelName:ms,backendName:\"cpu\",kernelFunc:i7};function u7(r,t){let e=0,o=r.length,n=0;for(;e1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?d7*r:m7*(Math.exp(r)-1)),WE={kernelName:hs,backendName:\"cpu\",kernelFunc:f7};var h7=Ie(ys,r=>r<0?-1:r>0?1:0),UE={kernelName:ys,backendName:\"cpu\",kernelFunc:h7};var g7=Ie(gs,r=>Math.sin(r)),GE={kernelName:gs,backendName:\"cpu\",kernelFunc:g7};var x7=Ie(xs,r=>Math.sinh(r)),HE={kernelName:xs,backendName:\"cpu\",kernelFunc:x7};var y7=11920928955078125e-23,KE=Math.log(y7)+2,b7=Ie(Cs,r=>{let t=r>-KE,e=rNumber(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var XE={kernelName:Hi,backendName:\"cpu\",kernelFunc:w7};function S7(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.data.get(n.dataId).values),i=e.data.get(o.dataId).values,p=Array.from(e.data.get(s.dataId).values),[u,c,l]=Ff(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var YE={kernelName:ei,backendName:\"cpu\",kernelFunc:S7};function I7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Cc(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var QE={kernelName:ya,backendName:\"cpu\",kernelFunc:I7};function v7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Cc(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var ZE={kernelName:ba,backendName:\"cpu\",kernelFunc:v7};function k7(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1,f=e.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=e.bufferSync(s),x=!!e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"float32\":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"int32\":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"string\":{let g=e.bufferSync(s),x=y.decodeString(e.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 e.makeTensorInfo(i,h.dtype,h.values)}var JE={kernelName:vs,backendName:\"cpu\",kernelFunc:k7};function N7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:u,size:m}});return u[i]+=l,d})}var eR={kernelName:xa,backendName:\"cpu\",kernelFunc:N7};var tR={kernelName:Ki,backendName:\"cpu\",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t;Q(e,\"square\");let n=o.data.get(e.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let e=t;return isNaN(r)?NaN:r>0?1:e.alpha}),rR={kernelName:wo,backendName:\"cpu\",kernelFunc:T7};function _7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({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),E=Ao({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Ve({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(E)}else{let _=e.bufferSync(n),E=Pf(d,_,S,b);k=e.makeTensorInfo(f,E.dtype,E.values)}return k}var oR={kernelName:Ns,backendName:\"cpu\",kernelFunc:_7};function $7(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.data.get(c.dataId).values,d=e.data.get(l.dataId).values,[f,h]=up(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var nR={kernelName:Ca,backendName:\"cpu\",kernelFunc:$7};function E7(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values[0],[u,c,l]=pp(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],\"int32\",u),e.makeTensorInfo([m],\"string\",c),e.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var sR={kernelName:qi,backendName:\"cpu\",kernelFunc:E7};function R7(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.data.get(s.dataId).values,i=cp(a,n);return e.makeTensorInfo(s.shape,\"int32\",i)}var aR={kernelName:ji,backendName:\"cpu\",kernelFunc:R7};var D7=Ie(_s,r=>Math.tan(r)),iR={kernelName:_s,backendName:\"cpu\",kernelFunc:D7};var A7=Ie($s,r=>Math.tanh(r)),uR={kernelName:$s,backendName:\"cpu\",kernelFunc:A7};function F7(r){let{inputs:t,backend:e}=r,{tensor:o,indices:n,updates:s}=t,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=e.bufferSync(n),d=e.bufferSync(s),f=e.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return e.makeTensorInfo(o.shape,h.dtype,h.values)}var pR={kernelName:ds,backendName:\"cpu\",kernelFunc:F7};function P7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reps:s}=o;Q(n,\"tile\");let a=Of(e.bufferSync(n),s);return e.makeTensorInfo(a.shape,a.dtype,a.values)}var cR={kernelName:uo,backendName:\"cpu\",kernelFunc:P7};function O7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{k:s,sorted:a}=o;Q(n,\"topk\");let i=e.data.get(n.dataId).values,[p,u]=Mf(i,n.shape,n.dtype,s,a);return[e.makeTensorInfo(p.shape,p.dtype,p.values),e.makeTensorInfo(u.shape,u.dtype,u.values)]}var lR={kernelName:Es,backendName:\"cpu\",kernelFunc:O7};function M7(r){let{inputs:t,attrs:e,backend:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=e,[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],E=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;Lt-1)if(t<=1)e=0;else{let o=2*t;e-=o*Math.trunc(e/o),e>=t&&(e=o-e-1)}return y.clamp(0,e,t-1)}function B7(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let o=t-1;e+=t*(Math.trunc(-e/o)+1)}else if(e>t-1)if(t<=1)e=0;else{let o=t-1;e-=t*Math.trunc(e/o)}return y.clamp(0,e,t-1)}function z7(r,t){return r}function V7(r,t){return y.clamp(0,r,t-1)}function Hl(r,t,e,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&ie.disposeIntermediateTensorInfo(f)),d}var gR={kernelName:Yi,backendName:\"cpu\",kernelFunc:K7};var q7=[V_,XT,W_,U_,e_,G_,H_,K_,q_,j_,X_,Y_,Q_,Z_,J_,t$,r$,o$,n$,z_,s$,a$,i$,t_,u$,JT,r_,p$,YT,c$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,k$,N$,T$,_$,$$,E$,R$,D$,A$,P$,F_,O$,o_,M$,n_,L$,s_,B$,z$,V$,a_,i_,W$,U$,G$,H$,u_,p_,QT,K$,l$,q$,j$,X$,P_,c_,l_,Y$,m_,Q$,Z$,J$,eE,tE,rE,oE,d_,nE,sE,aE,iE,pE,cE,lE,f_,mE,dE,gE,h_,g_,xE,yE,bE,x_,CE,IE,vE,Vf,kE,O_,b_,NE,TE,_E,$E,ZT,Wl,EE,M_,L_,B_,RE,DE,AE,FE,PE,OE,ME,v_,LE,zE,VE,WE,N_,UE,GE,HE,T_,fE,qE,jE,XE,YE,QE,ZE,JE,eR,$_,tR,E_,R_,rR,oR,nR,sR,aR,D_,F$,iR,uR,pR,cR,lR,dR,y_,fR,hR,gR,wE];for(let r of q7)ti(r);var Tc={};qe(Tc,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>rZ,bindColorTextureToFramebuffer:()=>Xl,bindTextureToProgramUniformSampler:()=>zI,bindTextureUnit:()=>CR,bindVertexBufferToProgramAttribute:()=>qf,callAndCheck:()=>ce,canBeRepresented:()=>_I,createFragmentShader:()=>EI,createFramebuffer:()=>MI,createProgram:()=>RI,createStaticIndexBuffer:()=>FI,createStaticVertexBuffer:()=>AI,createTexture:()=>PI,createVertexShader:()=>$I,getBatchDim:()=>hi,getExtensionOrThrow:()=>vc,getFramebufferErrorMessage:()=>wR,getMaxTexturesInShader:()=>UI,getNumChannels:()=>eZ,getProgramUniformLocation:()=>BI,getProgramUniformLocationOrThrow:()=>LI,getRowsCols:()=>gi,getShapeAs3D:()=>Nc,getTextureShapeFromLogicalShape:()=>VI,getWebGLDisjointQueryTimerVersion:()=>GI,getWebGLErrorMessage:()=>bR,getWebGLMaxTextureSize:()=>WI,hasExtension:()=>Kr,isCapableOfRenderingToFloatTexture:()=>HI,isDownloadFloatTextureEnabled:()=>KI,isReshapeFree:()=>hu,isWebGLFenceEnabled:()=>qI,isWebGLVersionEnabled:()=>Xf,linkProgram:()=>DI,logShaderSourceAndInfoLog:()=>Kf,resetMaxTextureSize:()=>oZ,resetMaxTexturesInShader:()=>nZ,unbindColorTextureFromFramebuffer:()=>jf,unbindTextureUnit:()=>tZ,validateFramebuffer:()=>kc,validateProgram:()=>jl,validateTextureSize:()=>OI});var dp={},Wf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function kI(r,t){dp[r]=t}function Hr(r,t){if(!(r in dp)||t!=null){let o=X7(r,t);if(o!==null)dp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let e=dp[r];return e==null||e.isContextLost()?(delete dp[r],Hr(r)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),dp[r])}function j7(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 X7(r,t){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let e=t==null?j7(r):t;return e.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete dp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Wf.failIfMajorPerformanceCaveat=!1),r===1?e.getContext(\"webgl\",Wf)||e.getContext(\"experimental-webgl\",Wf):e.getContext(\"webgl2\",Wf)}var fu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(fu||(fu={}));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 fp(r,t){return[t,r]}function xR(r,t){return r*t}function Kl(r){let t=y.sizeFromShape(r),e=Math.ceil(t/4);return y.sizeToSquarishShape(e)}function Ma(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function yR(r,t){let[e,o]=Ma(r,t);return e*o*4}function ql(r,t){let e=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber(\"WEBGL_VERSION\")===2?(o=e.R32F,n=e.R16F,s=e.RGBA16F,a=e.RGBA32F,i=e.RED,u=4,c=1,l=e.HALF_FLOAT,m=e.FLOAT,p=e.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=e.RGBA,i=r.RGBA,u=4,c=4,l=t!=null?t.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,t){let e=t();return A().getBool(\"DEBUG\")&&Y7(r),e}function Y7(r){let t=r.getError();if(t!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+bR(r,t))}var Q7=596e-10,Z7=65504;function _I(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||Q7r.getExtension(t),'Extension \"'+t+'\" not supported on this browser.')}function $I(r,t){let e=fi(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(e)),new Error(\"Failed to compile vertex shader.\");return e}function EI(r,t){let e=fi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),A().get(\"ENGINE_COMPILE_ONLY\"))return e;if(r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw Kf(t,r.getShaderInfoLog(e)),new Error(\"Failed to compile fragment shader.\");return e}var J7=/ERROR: [0-9]+:([0-9]+):/g;function Kf(r,t){let e=J7.exec(t);if(e==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(r);return}let o=+e[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 DI(r,t){if(ce(r,()=>r.linkProgram(t)),!A().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(t,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error(\"Failed to link vertex and fragment shaders.\")}function jl(r,t){if(ce(r,()=>r.validateProgram(t)),r.getProgramParameter(t,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error(\"Shader program validation failed.\")}function AI(r,t){let e=fi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function FI(r,t){let e=fi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function eZ(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function PI(r){return fi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function OI(r,t){let e=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||t<=0){let o=`[${r}x${t}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>e||t>e){let o=`[${r}x${t}]`,n=`[${e}x${e}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function MI(r){return fi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function qf(r,t,e,o,n,s,a){let i=r.getAttribLocation(t,e);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 CR(r,t,e){SR(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,t))}function tZ(r,t){SR(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function LI(r,t,e){return fi(r,()=>r.getUniformLocation(t,e),'uniform \"'+e+'\" not present in program.')}function BI(r,t,e){return r.getUniformLocation(t,e)}function zI(r,t,e,o){ce(r,()=>CR(r,t,o)),ce(r,()=>r.uniform1i(e,o))}function rZ(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 Xl(r,t,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0))}function jf(r,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function kc(r){let t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+wR(r,t))}function wR(r,t){switch(t){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 ${t}`}}function fi(r,t,e){let o=ce(r,()=>t());if(o==null)throw new Error(e);return o}function SR(r,t){let e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=t+r.TEXTURE0;if(oe){let n=`[gl.TEXTURE0, gl.TEXTURE${e}]`;throw new Error(`textureUnit must be in ${n}.`)}}function hi(r,t=2){return y.sizeFromShape(r.slice(0,r.length-t))}function gi(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 Nc(r){let t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[hi(r),...gi(r)]),t}function VI(r,t=!1){let e=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=e/2),t&&(e=e*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<=e?s=[1,n]:r.length===2&&r[0]<=e&&r[1]<=e?s=r:r.length===3&&r[0]*r[1]<=e&&r[2]<=e?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=e&&r[1]*r[2]<=e?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=e&&r[3]<=e?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=e&&r[1]*r[2]*r[3]<=e&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||a)if(t){let i=hi(r),p=2,u=2;r.length&&([p,u]=gi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Uf(r){return r%2===0}function hu(r,t){if(r=r.slice(-2),t=t.slice(-2),y.arraysEqual(r,t)||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){let e=r[r.length-1],o=t[t.length-1];if(e===o||Uf(e)&&Uf(o)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&Uf(r[0])&&Uf(t[0])}var Gf,Hf;function WI(r){if(Gf==null){let t=Hr(r);Gf=t.getParameter(t.MAX_TEXTURE_SIZE)}return Gf}function oZ(){Gf=null}function nZ(){Hf=null}function UI(r){if(Hf==null){let t=Hr(r);Hf=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Hf)}function GI(r){if(r===0)return 0;let t,e=Hr(r);return Kr(e,\"EXT_disjoint_timer_query_webgl2\")&&r===2?t=2:Kr(e,\"EXT_disjoint_timer_query\")?t=1:t=0,t}function Kr(r,t){return r.getExtension(t)!=null}function Xf(r){try{if(Hr(r)!=null)return!0}catch(t){return console.log(\"Error when getting WebGL context: \",t),!1}return!1}function HI(r){if(r===0)return!1;let t=Hr(r);if(r===1){if(!Kr(t,\"OES_texture_float\"))return!1}else if(!Kr(t,\"EXT_color_buffer_float\"))return!1;return TI(t)}function KI(r){if(r===0)return!1;let t=Hr(r);if(r===1){if(!Kr(t,\"OES_texture_float\")||!Kr(t,\"WEBGL_color_buffer_float\"))return!1}else{if(Kr(t,\"EXT_color_buffer_float\"))return TI(t);let o=\"EXT_color_buffer_half_float\";if(Kr(t,o)){let n=t.getExtension(o);return sZ(t,n)}return!1}return TI(t)}function TI(r){let t=ql(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,o,n,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(s),a}function sZ(r,t){let e=ql(r,t),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatHalfFloat,n,s,0,e.textureFormatFloat,e.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 qI(r){return r!==2?!1:Hr(r).fenceSync!=null}function Vs(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} 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\",()=>Xf(2)?2:Xf(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\",()=>WI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>UI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:GI(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!Ji.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>HI(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\",()=>KI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>qI(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\",()=>Ji.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,t,e,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",t=\"in\",e=\"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=\"\",t=\"attribute\",e=\"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:t,varyingVs:e,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,t,e=\"index\"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function hp(r,t,e=\"index\"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function aZ(r,t){let e=r.length,o=r.map(s=>`${t}[${s}]`),n=new Array(e-1);n[e-2]=o[e-1];for(let s=e-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function IR(r,t,e=\"index\"){let o=r.map((s,a)=>a),n=aZ(o,t);return n.map((s,a)=>{let i=`int ${r[a]} = ${e} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${e} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function _c(r){let t=y.computeStrides(r).map(e=>e.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;\n }\n`}function $c(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Yf=`\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:vR}=w;function kR(r,t,e){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};`)),e.enableShapeUniforms){let{uniformShape:h}=Qf(e.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;`)}}),e.enableShapeUniforms){switch(t.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;\")}e.customUniforms&&e.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(d=>iZ(d,t,e.packedInputs,e.enableShapeUniforms)).join(`\n`),a=t.texShape,i=It(),p=cZ(i),u,c,l=dZ(i);return t.isPacked?(u=uZ(t.logicalShape,a,e.enableShapeUniforms),c=mZ(i)):(u=pZ(t.logicalShape,a,e.enableShapeUniforms),c=lZ(i)),e.packedInputs&&(l+=xZ),[l,p,c,n,u,s,e.userCode].join(`\n`)}function Rc(r,t=!1){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return $Z(r,t);case 1:return RZ(r,t);case 2:return AZ(r,t);case 3:return PZ(r,t);case 4:return MZ(r,t);case 5:return LZ(r);case 6:return BZ(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function NR(r,t){switch(r.shapeInfo.logicalShape.length){case 0:return _Z(r);case 1:return EZ(r,t);case 2:return DZ(r,t);case 3:return FZ(r,t);default:return OZ(r,t)}}function iZ(r,t,e=!1,o){let n=\"\";e?n+=NR(r,o):n+=Rc(r,o);let s=r.shapeInfo.logicalShape,a=t.logicalShape;return s.length<=a.length&&(e?n+=zZ(r,t):n+=VZ(r,t)),n}function uZ(r,t,e){switch(r.length){case 0:return TR();case 1:return yZ(r,t,e);case 2:return NZ(r,t,e);case 3:return CZ(r,t,e);default:return SZ(r,t,e)}}function pZ(r,t,e){switch(r.length){case 0:return TR();case 1:return bZ(r,t,e);case 2:return TZ(r,t,e);case 3:return wZ(r,t,e);case 4:return IZ(r,t,e);case 5:return vZ(r,t);case 6:return kZ(r,t);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function cZ(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function lZ(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function mZ(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function dZ(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 ${fZ}\n ${hZ}\n ${gZ}\n `}var fZ=`\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`,hZ=`\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`,gZ=`\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`,xZ=`\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 TR(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function yZ(r,t,e){let o=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return o[0]===1?e?`\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?e?`\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 `:e?`\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 bZ(r,t,e){return t[0]===1?e?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${t[1]}.0);\n }\n `:t[1]===1?e?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${t[0]}.0);\n }\n `:e?`\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(${t[0]}, ${t[1]}));\n return resTexRC.x * ${t[1]} + resTexRC.y;\n }\n `}function CZ(r,t,e){if(e)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(t[0]/2),Math.ceil(t[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 wZ(r,t,e){if(e)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 ${hp([\"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(${t[0]}, ${t[1]}));\n int index = resTexRC.x * ${t[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function SZ(r,t,e){if(e)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(t[0]/2),Math.ceil(t[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(t.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 VZ(r,t){let e=r.name,o=e.charAt(0).toUpperCase()+e.slice(1),n=\"get\"+o+\"AtOutCoords\",s=t.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=t.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${e}, resultUV);\n }\n `;let u=Re(p),c=vR(r.shapeInfo.logicalShape,t.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 Qf(r,t,e){let{newShape:o,keptDims:n}=y.squeezeShape(t),s=t.length,a=r&&s===3&&t[0]===1,i=a?t.slice(1):o,p=!r&&s>1&&!y.arraysEqual(t,e)&&o.lengthr[e]).join(\", \")}function $R(r,t,e,o){let n=e.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:t.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=kR(n,a,t),p=EI(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:t,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:t,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},jI(r,t,u)))}function jI(r,t,e){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(e,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(e,\"INFINITY\",!1));let c=!1;for(let l of t.variableNames){let m={name:l,uniform:r.getUniformLocation(e,l,c),offset:r.getUniformLocation(e,`offset${l}`,c)};t.enableShapeUniforms&&(m.shape=r.getUniformLocation(e,`${l}Shape`,c),m.texShape=r.getUniformLocation(e,`${l}TexShape`,c)),o.push(m)}if(t.enableShapeUniforms&&(s=r.getUniformLocation(e,\"outShape\",c),i=r.getUniformLocation(e,\"outShapeStrides\",c),a=r.getUniformLocation(e,\"outTexShape\",c)),t.customUniforms)for(let l of t.customUniforms)n.push(r.getUniformLocation(e,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function _R(r,t){if(r.length!==t.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t.length} inputs`);r.forEach((e,o)=>{let n=e.logicalShape,s=t[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(e.isUniform&&s.isUniform)return;let i=e.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 ER(r,t,e,o,n){t.program.enableShapeUniforms||(_R(t.inShapeInfos,e),_R([t.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(t.webGLProgram),r.bindVertexArray(t.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&t.infLoc!==null&&r.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&r.gl.uniform1f(t.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}=Qf(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,e.shape),C=!r.packedInputs&&h===e.shape.length&&y.arraysEqual(p,e.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 Zf=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=fu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let e=It();this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?hp([\"r\",\"c\",\"d\"],t):Ws([\"r\",\"c\",\"d\"],t)}\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 ${e.output} = result;\n }\n `}};var Jf=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=fu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let e=It();this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?hp([\"r\",\"c\",\"d\"],t):Ws([\"r\",\"c\",\"d\"],t)}\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 ${e.output} = result;\n }\n `}};var eh=class{constructor(t){this.variableNames=[\"A\"],this.outTexUsage=mr.DOWNLOAD;let e=It();this.outputShape=t,this.userCode=`\n ${Yf}\n\n void main() {\n float x = getAAtOutCoords();\n ${e.output} = encode_float(x);\n }\n `}};var th=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let e=It();this.outputShape=t,this.userCode=`\n ${Yf}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${e.output} = encode_float(x);\n }\n `}};var GZ={R:0,G:1,B:2,A:3},Yl=class{constructor(t,e=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=It();this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length);let s=\"result\";e&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;iov,createBufferFromOutputTexture:()=>av,createFloat16MatrixTexture:()=>JI,createFloat16PackedMatrixTexture:()=>rv,createFloat32MatrixTexture:()=>ZI,createIndexBuffer:()=>QI,createPackedMatrixTexture:()=>tv,createUnsignedBytesMatrixTexture:()=>ev,createVertexBuffer:()=>YI,createVertexShader:()=>XI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>uv,downloadFloat32MatrixFromBuffer:()=>iv,downloadMatrixFromPackedOutputTexture:()=>cv,downloadPackedMatrixFromBuffer:()=>pv,getInternalFormatForFloat16MatrixTexture:()=>nh,getInternalFormatForFloat16PackedMatrixTexture:()=>ih,getInternalFormatForFloat32MatrixTexture:()=>oh,getInternalFormatForPackedMatrixTexture:()=>ah,getInternalFormatForUnsignedBytesMatrixTexture:()=>sh,uploadDenseMatrixToTexture:()=>nv,uploadPixelDataToTexture:()=>sv});function XI(r){let t=It(),e=`${t.version}\n precision highp float;\n ${t.attribute} vec3 clipSpacePos;\n ${t.attribute} vec2 uv;\n ${t.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return $I(r,e)}function YI(r){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 AI(r,t)}function QI(r){let t=new Uint16Array([0,1,2,2,1,3]);return FI(r,t)}function Ql(r,t,e,o,n,s){OI(t,e);let a=PI(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,t,e,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,t,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[e,t]}}function oh(r){return r.internalFormatFloat}function ZI(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,oh(o),o.textureFormatFloat,r.FLOAT)}function nh(r){return r.internalFormatHalfFloat}function JI(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,nh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function sh(r){return r.downloadTextureFormat}function ev(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,sh(o),r.RGBA,r.UNSIGNED_BYTE)}function ah(r){return r.internalFormatPackedFloat}function tv(r,t,e,o){let[n,s]=Ma(t,e);return Ql(r,n,s,ah(o),r.RGBA,r.FLOAT)}function ih(r){return r.internalFormatPackedHalfFloat}function rv(r,t,e,o){let[n,s]=Ma(t,e);return Ql(r,n,s,ih(o),r.RGBA,o.textureTypeHalfFloat)}function ov(r,t,e){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),qf(r,t,\"clipSpacePos\",e,3,20,0)&&qf(r,t,\"uv\",e,2,20,12)}function nv(r,t,e,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(e*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(e*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,e,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,e,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function sv(r,t,e){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t)),e.data instanceof Uint8Array?A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width,e.height,0,r.RGBA,r.UNSIGNED_BYTE,e.data)):A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,e)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function av(r,t,e,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*t*e;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function iv(r,t,e){let o=r,n=new Float32Array(e);return o.bindBuffer(o.PIXEL_PACK_BUFFER,t),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function uv(r,t,e,o){let[n,s]=fp(t,e),a=4,i=new Uint8Array(xR(t*e,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function pv(r,t,e,o,n,s,a,i){let p=r,u=new Float32Array(yR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,t),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function cv(r,t,e){let o=new Float32Array(t*e*4);return ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,o)),o}var xp=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let e=A().getNumber(\"WEBGL_VERSION\");if(t!=null?(this.gl=t,kI(e,t)):this.gl=Hr(e),t=this.gl,A().getNumber(\"WEBGL_VERSION\")===2){let s=t;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(t!=null){let s=t.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(t,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(t,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(t,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(t,()=>t.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=vc(this.gl,s),Kr(this.gl,a))this.textureHalfFloatExtension=vc(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),Kr(this.gl,n))this.colorBufferHalfFloatExtension=vc(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\",Kr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Kr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=YI(this.gl),this.indexBuffer=QI(this.gl),this.framebuffer=MI(this.gl),this.textureConfig=ql(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 t=this.gl;ce(t,()=>t.finish()),ce(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),ce(t,()=>t.deleteFramebuffer(this.framebuffer)),ce(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),ce(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,e){return this.throwIfDisposed(),ZI(this.gl,t,e,this.textureConfig)}createFloat16MatrixTexture(t,e){return this.throwIfDisposed(),JI(this.gl,t,e,this.textureConfig)}createUnsignedBytesMatrixTexture(t,e){return this.throwIfDisposed(),ev(this.gl,t,e,this.textureConfig)}uploadPixelDataToTexture(t,e){this.throwIfDisposed(),sv(this.gl,t,e)}uploadDenseMatrixToTexture(t,e,o,n){this.throwIfDisposed(),nv(this.gl,t,e,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(t,e){return this.throwIfDisposed(),rv(this.gl,t,e,this.textureConfig)}createPackedMatrixTexture(t,e){return this.throwIfDisposed(),tv(this.gl,t,e,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(jf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,e,o){return this.downloadMatrixDriver(t,()=>uv(this.gl,e,o,this.textureConfig))}downloadPackedMatrixFromBuffer(t,e,o,n,s,a){return pv(this.gl,t,e,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,e){return iv(this.gl,t,e)}createBufferFromTexture(t,e,o){this.bindTextureToFrameBuffer(t);let n=av(this.gl,e,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e,o;if(A().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=t,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},e=s}else A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(e=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:e,isFencePassed:o}}downloadMatrixFromPackedTexture(t,e,o){return this.downloadMatrixDriver(t,()=>cv(this.gl,e,o))}createProgram(t){this.throwIfDisposed();let e=this.gl;this.vertexShader==null&&(this.vertexShader=XI(e));let o=RI(e);ce(e,()=>e.attachShader(o,this.vertexShader)),ce(e,()=>e.attachShader(o,t)),DI(e,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&jl(e,n),n}buildVao(t){this.setProgram(t),this.bindVertexArray(t.vao);let e=this.gl;ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),ov(e,t,this.vertexBuffer)}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&(ce(this.gl,()=>this.gl.deleteProgram(t)),this.deleteVertexArray(t.vao))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&jl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,e,o=!0){return this.throwIfDisposed(),o?LI(this.gl,t,e):BI(this.gl,t,e)}getAttributeLocation(t,e){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(t,e))}getUniformLocationNoThrow(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)}setInputMatrixTexture(t,e,o){this.throwIfDisposed(),this.throwIfNoProgram(),zI(this.gl,t,e,o)}setOutputMatrixTexture(t,e,o){this.setOutputMatrixTextureDriver(t,o,e)}setOutputPackedMatrixTexture(t,e,o){this.throwIfDisposed();let[n,s]=Ma(e,o);this.setOutputMatrixTextureDriver(t,n,s)}setOutputMatrixWriteRegion(t,e,o,n){this.setOutputMatrixWriteRegionDriver(o,t,n,e)}setOutputPackedMatrixWriteRegion(t,e,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&jl(this.gl,this.program),kc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;if(this.debug){let e=this.getVertexArray();console.assert(e===this.program.vao,\"VAO changed between setProgram and executeProgram!\"),this.debugValidate()}ce(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=vc(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 t=this.getQueryTimerExtensionWebGL1(),e=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,e),e}endQuery(){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let e=this.gl,o=this.getQueryTimerExtensionWebGL2();e.endQuery(o.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(t,e){if(e===0)return null;if(e===2){let o=this.gl;return o.getQueryParameter(t,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(t,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,e){if(e===0)return!0;if(e===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(t,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(t,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(t){return new Promise(e=>{this.addItemToPoll(()=>t.isFencePassed(),()=>e())})}pollItems(){let t=HZ(this.itemsToPoll.map(e=>e.isDoneFn));for(let e=0;e<=t;++e){let{resolveFn:o}=this.itemsToPoll[e];o()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,e){if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),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(t){this.throwIfDisposed(),Xl(this.gl,t,this.framebuffer),this.debug&&kc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Xl(this.gl,this.outputTexture,this.framebuffer),this.debug&&kc(this.gl)):jf(this.gl,this.framebuffer)}downloadMatrixDriver(t,e){this.bindTextureToFrameBuffer(t);let o=e();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(t,e,o){this.throwIfDisposed();let n=this.gl;Xl(n,t,this.framebuffer),this.debug&&kc(n),this.outputTexture=t,ce(n,()=>n.viewport(0,0,e,o)),ce(n,()=>n.scissor(0,0,e,o))}setOutputMatrixWriteRegionDriver(t,e,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(t,e,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 HZ(r){let t=0;for(;t`${r}.${e}`)}function Rt(r,t){return t===1?[r]:mv(r,t)}function ID(r,t){if(r===1)return\"rc\";let e=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let e=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(t){let e=this.getSourceCoordsArr(t);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${e[0]}),\n cEdge ? 0. : getA(${e[1]}),\n rEdge ? 0. : getA(${e[2]}),\n rEdge || cEdge ? 0. : getA(${e[3]})`}};var Pc=class{constructor(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=t,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 ${KZ(e,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?$c():_c(t)}\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]\":t[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":t[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function KZ(r,t){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${t?IR([\"r\",\"c\",\"d\"],\"inputShape\"):Ws([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var mh=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(t,e,o){let n=kD(e,o),s=ND(t,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=vD(t,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(t[0],t[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):n===er.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(t,e,o,n){if(this.freeTextures==null)return;let s=kD(o,n),a=ND(e,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=vD(e,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(t.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(t),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(t);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 t=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let e=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*e)}%)`)}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 t in this.freeTextures)this.freeTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});for(let t in this.usedTextures)this.usedTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function qZ(r,t){let e=r;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===r.RGBA)return 16;if(t===e.RGBA16F)return 8;if(t===e.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function vD(r,t,e,o,n){let s=jZ(t,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=fp(r[0],r[1]);a=p*u}let i=qZ(e,s);return a*i}function jZ(r,t){switch(r){case er.PACKED_2X2_FLOAT32:return ah(t);case er.PACKED_2X2_FLOAT16:return ih(t);case er.UNPACKED_FLOAT32:return oh(t);case er.UNPACKED_FLOAT16:return nh(t);case er.PACKED_4X1_UNSIGNED_BYTE:return sh(t);default:throw new Error(`Unknown physical texture type ${r}`)}}function XZ(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 kD(r,t){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return XZ(t);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function ND(r,t,e){return`${r[0]}_${r[1]}_${t}_${e}`}var tr=class{constructor(t,e){this.variableNames=[\"A\"],this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${e}\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;\",TD=\"return x;\",dv=\"return abs(x);\";var _D=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",$D=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,ED=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,La=\"return x;\",RD=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var AD=\"return x;\",FD=`\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`,PD=`\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`,OD=`\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`,MD=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Ar=class{constructor(t,e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${e}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var dh=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length);let e=t.length,o=Rt(\"rc\",e),n=Re(e),s=ID(e,o),a=o.slice(-2),i=e<=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 QZ=Vt.whereImpl,ZZ=1e-7,JZ=1e-4,fh={};function e9(r){return r in fh||(fh[r]={}),fh[r]}var t9=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),r9=600;function o9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*r9/1024/1024}var Oc=class r extends so{nextDataId(){return r.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,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let e;if(t!=null){if(t instanceof xp)e=t;else{let o=Hr(A().getNumber(\"WEBGL_VERSION\"),t);e=new xp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Hr(A().getNumber(\"WEBGL_VERSION\"));e=new xp(o),this.binaryCache=e9(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=e,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new mh(this.gpgpu),this.numMBBeforeWarning=o9(),this.texData=new Bo(this,ur())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,e,o,n,s,a){let i=this.makeTensorInfo(e,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:t,texShape:[n,s]},p.texShape=[n,s];let u=Nc(e),c=new Yl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=e,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(t,e,o){if((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().getBool(\"DEBUG\"))&&this.checkNumericalProblems(t),o===\"complex64\"&&t!=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:e,dtype:o,values:t,usage:mr.UPLOAD,refCount:1}),n}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let e=this.texData.get(t);e.refCount++}decRef(t){if(this.texData.has(t)){let e=this.texData.get(t);e.refCount--}}move(t,e,o,n,s){if(A().getBool(\"DEBUG\")&&this.checkNumericalProblems(e),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(t,{shape:o,dtype:n,values:e,usage:mr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let e=this.texData.get(t),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=e;if(a!=null){let m;p?m=new Ar(i,La):m=new tr(i,La);let d=this.runWebGLProgram(m,[{dataId:t,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(t,l)}async read(t){if(this.pendingRead.has(t)){let f=this.pendingRead.get(t);return new Promise(h=>f.push(h))}let e=this.texData.get(t),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=e;if(s!=null){let f;p?f=new Ar(n,La):f=new tr(n,La);let h=this.runWebGLProgram(f,[{dataId:t,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...Kl(n))}this.pendingRead.set(t,[]),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(t);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(t,l),d=this.pendingRead.get(t);return this.pendingRead.delete(t),d.forEach(f=>f(m)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&ur().removeDataId(t,this),this.pendingDeletes--),m}readToGPU(t,e={}){let o=this.texData.get(t),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i===\"complex64\")throw new Error(\"Does not support reading texture for complex64 dtype.\");if(a!=null){let d;p?d=new Ar(s,La):d=new tr(s,La);let f=this.runWebGLProgram(d,[{dataId:t,shape:s,dtype:i}],i),h=this.readToGPU(f,e);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(t,e.customTexShape),l=ur().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype===\"string\")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}checkNumericalProblems(t){if(t!=null)for(let e=0;e0}time(t){let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),t):(t.endMs=y.now(),t)}async getQueryTime(t){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0)return this.gpgpu.waitForQueryAndGetTime(t);let e=t;return e.endMs-e.startMs}disposeData(t,e=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(e?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!e&&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:o}=this.texData.get(t);return o!=null&&(this.disposeData(o.real.dataId,e),this.disposeData(o.imag.dataId,e)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:e,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(t),p=i&&i.origDataId||t,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),e!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(e,n,s,a)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,e=t9){return A().getBool(\"WEBGL_CPU_FORWARD\")&&t.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,t,e)}else n=this.write(o,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}}makeOutput(t,e,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t,e,o),this)}unpackTensor(t){let e=new dh(t.shape);return this.runWebGLProgram(e,[t],t.dtype)}packTensor(t){let e=new lh(t.shape),o=!0;return this.runWebGLProgram(e,[t],t.dtype,null,o)}packedReshape(t,e){let o=[hi(t.shape),...gi(t.shape)],n={dtype:t.dtype,shape:o,dataId:t.dataId},s=[hi(e),...gi(e)],a=new Pc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],t.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}decode(t,e){let o=this.texData.get(t),{isPacked:n,shape:s,dtype:a}=o;if(e!=null){let m=y.sizeFromShape(s),d=e[0]*e[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=Nc(s),p;n?p=new Jf(i):p=new Zf(i);let u=!0,c=[e!=null?e:Kl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:t}],a,c,u,e);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(t,e,o,n,s=!1,a){let i=this.makeTensorInfo(t.outputShape,o),p=this.texData.get(i.dataId);if(t.packedOutput&&(p.isPacked=!0),t.outPackingScheme===fu.DENSE){let x=a!=null?a:Kl(t.outputShape);p.texShape=x.map(b=>b*2)}if(t.outTexUsage!=null&&(p.usage=t.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=e.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(!t.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};t.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!t.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!hu(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=RR(t,c,l),d=this.getAndSaveBinary(m,()=>$R(this.gpgpu,t,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||ER(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:t.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(t,e,o,n,s=!1){return o=o||e[0].dtype,this.runWebGLProgram(t,e,o,n,s)}getAndSaveBinary(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!=\"undefined\"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let t=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let e=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",t),e>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?ZZ:JZ}uploadToGPU(t){let e=this.texData.get(t),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=e;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=e.texShape;if(l==null&&(l=VI(o,p),e.texShape=l),s!=null){let m=Nc(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 rh(m,g):d=new Yl(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]],k=!0,_=this.runWebGLProgram(d,[b],n,S,k),E=this.texData.get(_.dataId);e.texShape=E.texShape,e.isPacked=E.isPacked,e.usage=E.usage,A().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(_.dataId):(e.texture=E.texture,e.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);e.texture=m}}convertAndCacheOnCPU(t,e){let o=this.texData.get(t),{dtype:n}=o;return e!=null&&(o.values=n9(e,n)),o.values}acquireTexture(t,e,o,n){if(this.numBytesInGPU+=this.computeBytes(t,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(t,e,n)}computeBytes(t,e){return t[0]*t[1]*y.bytesPerElement(e)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,e]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(e));return Promise.all(t)}else{for(let[,e]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(e),n(!0)}catch(s){throw s}});t.push(o)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await pS(),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?(Kf(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:e,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=jI(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=e,t.customUniformLocations=o,t.infLoc=n,t.nanLoc=s,t.outShapeLocation=a,t.outShapeStridesLocation=i,t.outTexShapeLocation=p}}createTensorFromGPUData(t,e,o){t.channels=t.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=t,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,e,o,s,a,i);return ur().makeTensorFromDataId(u,e,o,p)}};Oc.nextDataId=0;function n9(r,t){if(t===\"float32\"||t===\"complex64\")return r;if(t===\"int32\"||t===\"bool\"){let e=t===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Oc,2);var Cat={forceHalfFloat:LD};var Mc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Fr=class{constructor(t,e,o){this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${t}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}};var jr=`\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 qr=class{constructor(t,e,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(e,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 ${t}\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:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var BD={kernelName:Co,backendName:\"webgl\",kernelFunc:Dt};function Pr(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,\"complex64\"),a=e.texData.get(s.dataId),i=Dt({inputs:{x:o},backend:e}),p=Dt({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var zD={kernelName:Ri,backendName:\"webgl\",kernelFunc:Pr};var fv=\"return (a < 0.) ? b * a : a;\",hv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function a9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=e.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new qr(hv,n.shape,a.shape):new Fr(fv,n.shape,a.shape),p=e.runWebGLProgram(i,[n,a],\"float32\");return e.disposeIntermediateTensorInfo(a),p}var VD={kernelName:En,backendName:\"webgl\",kernelFunc:a9};var gv=\"return (a < 0.) ? b * a : a;\",xv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function i9(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new qr(xv,o.shape,n.shape):new Fr(gv,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],\"float32\")}var WD={kernelName:rs,backendName:\"webgl\",kernelFunc:i9};var Fo=\"if (isnan(x)) return x;\";function xe({opSnippet:r,packedOpSnippet:t,cpuKernelImpl:e,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&e!=null){let l=i.texData.get(a.dataId),m=e(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&t!=null,c;return u?c=new Ar(a.shape,t):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:t,checkOutOfBounds:e=!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},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Fr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],dt(S.dtype,k.dtype))}),b=Pr({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\")&&t!=null,d;return m?d=new qr(t,p.shape,u.shape,e):d=new Fr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function xi(r,t=!1){if(r===\"linear\")return t?AD:TD;if(r===\"relu\")return t?PD:$D;if(r===\"elu\")return t?FD:_D;if(r===\"relu6\")return t?OD:ED;if(r===\"prelu\")return t?xv:gv;if(r===\"leakyrelu\")return t?hv:fv;if(r===\"sigmoid\")return t?MD:RD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Lc=class{constructor(t,e,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?t[1]:t[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\";t[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&&!hu(n.shape,p)&&!(c.texture!==null&&hu(c.shape,p))?HD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var KD={kernelName:da,backendName:\"webgl\",kernelFunc:te};var em=class{constructor(t,e){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(e!=null){let l=1/e;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 hh=class{constructor(t,e){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=\"0.0\",p=\"\";e===\"prod\"?i=\"1.0\":e===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):e===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"sum\"?u=\"sumValue\":e===\"prod\"?u=\"prodValue\":e===\"all\"?u=\"allValue\":e===\"any\"&&(u=\"anyValue\");let c=Math.floor(o/4)*4,l=o%4,m=`\n if (${e===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${e===\"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 (${e===\"min\"} || ${e===\"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\";e===\"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\"):e===\"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 p9(r){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let e=t.length?t[t.length-1].outSize:r[1],o=w.computeOptimalWindowSize(e);t.push({inSize:e,windowSize:o,outSize:Math.ceil(e/o)})}return t}function Xr(r,t,e,o){let n=p9(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(t);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=mv(\"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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=e?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?xi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>bv&&U===!1){let Y=E,J=R;e&&(Y=bt({inputs:{x:E},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=Jl({inputs:{a:ee,b:ie},backend:n});j=bp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,t.dtype),J=new Lc(k,_,[P,d,f],e,o,M,z,L,B),re=[E,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 l9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Cp({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var YD={kernelName:So,backendName:\"webgl\",kernelFunc:l9};var QD=\"return abs(x);\";function m9(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=e.texData.get(o.dataId),a=ph(s.values);return e.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Ar(o.shape,QD):n=new tr(o.shape,QD),e.runWebGLProgram(n,[o],o.dtype)}var ZD={kernelName:Xs,backendName:\"webgl\",kernelFunc:m9};var d9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,f9=xe({opSnippet:d9}),JD={kernelName:Vo,backendName:\"webgl\",kernelFunc:f9};var h9=Wt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),eA={kernelName:Wo,backendName:\"webgl\",kernelFunc:g9};var tA=\"return a + b;\",x9=nt({opSnippet:tA,packedOpSnippet:tA,supportsComplex:!0,cpuKernelImpl:DR}),rA={kernelName:io,backendName:\"webgl\",kernelFunc:x9};var yh=class{constructor(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.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 bh=class{constructor(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.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 Ch(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return Dt({inputs:{x:o[0]},backend:e});if(o.length>A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=Ch({inputs:o.slice(0,p),backend:e}),c=Ch({inputs:o.slice(p),backend:e});return Ch({inputs:[u,c],backend:e})}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 bh(o[0].shape,s):new yh(o[0].shape,s);return e.runWebGLProgram(i,o,n)}var oA={kernelName:Uo,backendName:\"webgl\",kernelFunc:Ch};function y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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:e,attrs:{shape:[-1,f]}}),g=Xr(h,h.dtype,\"all\",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Go,backendName:\"webgl\",kernelFunc:y9};function b9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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:e,attrs:{shape:[-1,f]}}),g=Xr(h,h.dtype,\"any\",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var sA={kernelName:Ho,backendName:\"webgl\",kernelFunc:b9};var wh=class{constructor(t,e,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=t;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=e===\"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 Sh=class{constructor(t,e,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,y.assert(t.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=t[t.length-1],a=Math.ceil(s/e);this.outputShape=t.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.)`,E=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 ${E}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${c[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${c[p-2]} < ${i[p-2]-1};\n ${l}\n ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f},\n sourceLocB${f}, sourceLocA${f}) * ${e};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${e}; 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 aA(r,t,e,o=null){let n=t.shape[0],s=t.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 wh(i,e,o==null),u=[t];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,\"int32\");if(c.shape[1]===1)return c;let l=aA(r,t,e,c);return r.disposeIntermediateTensorInfo(c),l}function iA(r,t,e,o=null){let n=o!=null?o.shape:t.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Sh(n,a,e,o==null),p=o==null?[t]:[t,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===t.shape.length){let c=iA(r,t,e,u);return r.disposeIntermediateTensorInfo(u),c}return u}function Ih(r,t,e,o){let n=[e];if(w.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,t.shape.length),!A().getBool(\"WEBGL_PACK_REDUCE\")||t.shape.length<=2){let s=[],a=r.texData.get(t.dataId),i=a!==null&&a.isPacked,p=t;i&&(p=r.unpackTensor(t),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=aA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return iA(r,t,o)}function C9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=Ih(e,p,a[0],\"max\");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Ys,backendName:\"webgl\",kernelFunc:C9};function w9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=Ih(e,p,a[0],\"min\");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var pA={kernelName:Qs,backendName:\"webgl\",kernelFunc:w9};var S9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,I9=xe({opSnippet:S9}),cA={kernelName:Ko,backendName:\"webgl\",kernelFunc:I9};var v9=Wt+\"return log(x + sqrt(x * x + 1.0));\",k9=xe({opSnippet:v9}),lA={kernelName:qo,backendName:\"webgl\",kernelFunc:k9};var N9=Wt+`\n return atan(x);\n`,T9=xe({opSnippet:N9}),mA={kernelName:jo,backendName:\"webgl\",kernelFunc:T9};var _9=Mc+`\n return atan(a, b);\n`,$9=`\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 `+jr+`\n return result;\n`,E9=nt({opSnippet:_9,packedOpSnippet:$9}),dA={kernelName:Yo,backendName:\"webgl\",kernelFunc:E9};var R9=Wt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),fA={kernelName:Xo,backendName:\"webgl\",kernelFunc:D9};var Us=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=[\"x\"],e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=t.filterWidth,i=t.strideHeight,p=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterHeight,m=t.effectiveFilterWidth,d=t.padInfo.top,f=t.padInfo.left;this.outputShape=t.outShape;let h=e===\"avg\",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.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 >= ${t.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 >= ${t.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=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");let k=Math.floor(a/4)*4,_=a%4,E=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${C}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${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 >= ${t.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 >= ${t.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${c};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n getValue(batch, xR, xC + 3 * ${c}, d)\n );\n\n ${E}\n }\n\n int xC = xCCorner + ${k};\n if (${_===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${_===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n initializationValue\n );\n\n ${E}\n }\n }\n setOutput(${S});\n }\n `}},xu=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=[\"x\"],e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=t.filterWidth,i=t.strideDepth,p=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,l=t.dilationHeight,m=t.dilationWidth,d=t.effectiveFilterDepth,f=t.effectiveFilterHeight,h=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;let C=e===\"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 >= ${t.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 >= ${t.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 >= ${t.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 * ${t.inDepth} + xD) * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`((xD * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`wD * ${f} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",_=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e===\"avg\"&&(_=\"avgValue / max(count, 1.0)\");let E=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 >= ${t.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 >= ${t.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 >= ${t.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${E}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${D}\n }\n\n int xC = xCCorner + ${E};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${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 A9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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:e});let l=new Us(c,\"avg\",!1);return e.runWebGLProgram(l,[n],\"float32\")}var hA={kernelName:Qo,backendName:\"webgl\",kernelFunc:A9};function F9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 xu(l,\"avg\",!1);return e.runWebGLProgram(m,[n],\"float32\")}var gA={kernelName:Zs,backendName:\"webgl\",kernelFunc:F9};var vh=class{constructor(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=p-1-t.padInfo.top,l=u-1-t.padInfo.left,m=1/(e*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 >= ${t.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 >= ${t.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 `}},kh=class{constructor(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,m=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,h=m-1-t.padInfo.top,g=d-1-t.padInfo.left,x=1/(e*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 >= ${t.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 >= ${t.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 >= ${t.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 P9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 kh(m);return e.runWebGLProgram(d,[n],a.dtype)}var xA={kernelName:Ei,backendName:\"webgl\",kernelFunc:P9};function O9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 vh(c);return e.runWebGLProgram(l,[n],a.dtype)}var yA={kernelName:$i,backendName:\"webgl\",kernelFunc:O9};function M9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return Cp({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var bA={kernelName:Zo,backendName:\"webgl\",kernelFunc:M9};var Nh=class{constructor(t,e,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i=\"0.0\";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=t,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 Th=class{constructor(t,e,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i=\"vec4(0.0)\";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=t,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 L9=({inputs:r,backend:t,attrs:e})=>{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}=e;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 Th(o.shape,n.shape,s.shape,c,l,p):new Nh(o.shape,n.shape,s.shape,c,l,p);return t.runWebGLProgram(m,u,u[0].dtype)},CA={kernelName:In,backendName:\"webgl\",kernelFunc:L9};var _h=class{constructor(t){this.variableNames=[\"source\"],this.outputShape=t,this.rank=t.length;let e=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=B9(this.rank),n,s=t.map((a,i)=>`sourceLoc.${Cv[i]} = start[${i}] + coords.${Cv[i]};`);n=`\n ${e} sourceLoc;\n ${e} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},Cv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function B9(r){if(r===1)return\"sourceLoc\";if(r<=6)return Cv.slice(0,r).map(t=>\"sourceLoc.\"+t).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=class{constructor(t){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let e=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]} < ${t[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]} < ${t[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${t[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${e}(${t.map((c,l)=>`start[${l}]`).join()});`:t.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(`\n`);this.userCode=`\n void main() {\n ${e} coords = getOutputCoords();\n ${e} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function z9(r,t,e,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(e,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=e,a.dtype=r.dtype;let i=pt.computeFlatOffset(t,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:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);if(e.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=e.texData.get(n.dataId),m=cD(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=e.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 _h(p),m=[i];return e.runWebGLProgram(l,[n],n.dtype,m)}return e.uploadToGPU(n.dataId),z9(n,i,p,e)}var wA={kernelName:ha,backendName:\"webgl\",kernelFunc:Gs};var V9=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:e,attrs:{perm:u}}),g=te({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeIntermediateTensorInfo(b)),x},SA={kernelName:Js,backendName:\"webgl\",kernelFunc:V9};function W9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),u=uh(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var IA={kernelName:Jo,backendName:\"webgl\",kernelFunc:W9};var U9=`\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`,G9=`\n return float(int(a.r) & int(b.r));\n`;function H9(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(e.shouldExecuteOnCPU([o,n])||a===1){let p=e.texData.get(o.dataId).values,u=e.texData.get(n.dataId).values,[c,l]=FR(o.shape,n.shape,p,u,o.dtype),m=e.makeTensorInfo(l,o.dtype),d=e.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new qr(U9,o.shape,n.shape,!1):i=new Fr(G9,o.shape,n.shape),e.runWebGLProgram(i,[o,n],o.dtype)}var vA={kernelName:qa,backendName:\"webgl\",kernelFunc:H9};function K9(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.readSync(o.dataId),a=e.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var kA={kernelName:ea,backendName:\"webgl\",kernelFunc:K9};var q9=\"return float(a != b);\",wv=nt({opSnippet:q9,cpuKernelImpl:tD,dtype:\"bool\"}),NA={kernelName:Yn,backendName:\"webgl\",kernelFunc:wv};function yi(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:e})}var TA={kernelName:Gi,backendName:\"webgl\",kernelFunc:yi};var j9=\"return float(int(x));\";function _A(r,t){let e=new tr(r.shape,j9),o=t.runWebGLProgram(e,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Sv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Dt({inputs:{x:n},backend:e});let a=Ur(n.shape),i=Sv({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),p=Pr({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=yi({inputs:{input:n},backend:e}),i=Sv({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.texData.get(n.dataId).values,[i,p,u]=PR(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s===\"int32\")return _A(n,e);if(s===\"bool\"){let a=e.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=wv({inputs:{a:n,b:a},backend:e});return e.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var $A={kernelName:yo,backendName:\"webgl\",kernelFunc:Sv};var EA=\"return ceil(x);\",X9=xe({opSnippet:EA,packedOpSnippet:EA,cpuKernelImpl:OR}),RA={kernelName:en,backendName:\"webgl\",kernelFunc:X9};var Eh=class{constructor(t){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=t,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 Rh=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=t,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 Y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool(\"WEBGL_PACK_CLIP\")?i=new Rh(n.shape):i=new Eh(n.shape);let p=[[s],[a]];return e.runWebGLProgram(i,[n],n.dtype,p)}var DA={kernelName:bo,backendName:\"webgl\",kernelFunc:Y9};var Dh=class{constructor(t){this.variableNames=[\"real\",\"imag\"],this.outputShape=t,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 AA(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function Q9(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.texData.get(o.dataId),s=new Dh(o.shape),a=[AA(o,n.complexTensorInfos.real),AA(o,n.complexTensorInfos.imag)];return e.runWebGLProgram(s,a,a[0].dtype)}var FA={kernelName:Di,backendName:\"webgl\",kernelFunc:Q9};var Ah=class{constructor(t){this.outputShape=[],this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((a,i)=>`T${i}`);let e=new Array(t.length-1);e[0]=t[0][1];for(let a=1;a`T${g}`);let p=new Array(t.length-1);p[0]=t[0][e];for(let h=1;h= ${p[h-1]}) {\n return getChannel(\n getT${h}(${Fh(i,u,g)}),\n vec2(${Fh(c,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${Fh(i,u,f)}),\n vec2(${Fh(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 Fh(r,t,e){let o=r.indexOf(t);return r.map((s,a)=>a===o?`${s} - ${e}`:s).join()}function wp(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:e})}var PA={kernelName:Vi,backendName:\"webgl\",kernelFunc:wp};function Bc(r,t,e){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>yi({inputs:{input:b},backend:e})),f=r.map(b=>wp({inputs:{input:b},backend:e})),h=Bc(d,t,e),g=Bc(f,t,e),x=Pr({inputs:{real:h,imag:g},backend:e});return d.forEach(b=>e.disposeIntermediateTensorInfo(b)),f.forEach(b=>e.disposeIntermediateTensorInfo(b)),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),x}let n=e.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(t))];return te({inputs:{x:S},backend:e,attrs:{shape:_}})}),f=d.map(S=>({vals:e.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=MR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),t),C=e.makeTensorInfo(b,o,x);return d.forEach(S=>e.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 Ar(r[0].shape,La);return e.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),t);return e.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=Z9(s,t,e),c=new Ah(p.map(d=>d.shape)),l=e.runWebGLProgram(c,p,o);p.forEach(d=>e.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:e});return e.disposeIntermediateTensorInfo(l),m}function Z9(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(t))]},backend:e})),outShape:o}}function Iv(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Dt({inputs:{x:p[0]},backend:e}):Bc(p,s,e)}var OA={kernelName:ta,backendName:\"webgl\",kernelFunc:Iv};var zc=class{constructor(t,e=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let a=t.padInfo.top,i=t.padInfo.left,p=t.strideHeight,u=t.strideWidth,c=t.dilationHeight,l=t.dilationWidth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4,g=t.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 _=e?\"result += getBiasAtOutCoords();\":\"\";e&&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 >= ${t.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 >= ${t.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 `}},Oh=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let e=t.padInfo.front,o=t.padInfo.top,n=t.padInfo.left,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${e}, ${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 >= ${t.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 >= ${t.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 >= ${t.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 Vc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.padInfo.left,i=t.strideWidth,p=t.dilationWidth,u=t.filterHeight,c=t.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 Lh(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Bh({x:r,filter:t,convInfo:e,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=e.inChannels,l=p[0]*p[1]*p[2],m=e.outChannels,d=e.dataFormat===\"channelsLast\",f=!1,h=!1,g,x=[];if(s!=null){let S=Lh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Lh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>bv)&&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,e.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(hu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});x.push(E);let R=Cp({a:k,b:E,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=e.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=e.outShape,x.push(R)}else{let S=e.outHeight*e.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[e.batchSize,S,e.inChannels]:[e.batchSize,e.inChannels,S]}}),_=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}}),E=Cp({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:e.outShape}}),x.push(k),x.push(_),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function zh({x:r,filter:t,convInfo:e,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}=e,f=d===\"channelsLast\",h=p*u*c,g=m*l,x=[e.batchSize,h,g],b=!0,C=!1,S=[];if(s!=null){let q=Lh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Lh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:t},backend:o,attrs:{shape:[1,h,y.sizeFromShape(t.shape)/h]}});S.push(k);let _=new Mh(x,e),E=[r.shape,[e.padInfo.top,e.padInfo.left],[e.strideHeight,e.strideWidth],[e.dilationHeight,e.dilationWidth],[e.inChannels],[e.filterWidth*e.inChannels],[e.outWidth]],R=o.runWebGLProgram(_,[r],\"float32\",E),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?xi(i,!0):null,B=new Lc(f?D.shape:k.shape,f?k.shape:D.shape,f?[e.batchSize,g,e.outChannels]:[e.batchSize,e.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:e.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function J9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=Bh({x:n,filter:s,convInfo:m,backend:e});else if(m.strideWidth<=2&&l===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new Vc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=e.runWebGLProgram(h,[n,s],\"float32\",g)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))d=zh({x:n,filter:s,convInfo:m,backend:e});else{let h=new zc(m);d=e.runWebGLProgram(h,[n,s],\"float32\")}let f=te({inputs:{x:d},backend:e,attrs:{shape:m.outShape}});return e.disposeIntermediateTensorInfo(d),f}var MA={kernelName:tn,backendName:\"webgl\",kernelFunc:J9};var Vh=class{constructor(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.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 < ${t.batchSize}; b++) {\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${e} - ${n};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${t.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 `}},Wh=class{constructor(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dataFormat===\"channelsLast\",i=e-1-t.padInfo.top,p=o-1-t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${e} - 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 >= ${t.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 < ${t.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 `}},Uh=class{constructor(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.padInfo.front,a=t.padInfo.top,i=t.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 < ${t.batchSize}; b++) {\n for (int yF = 0; yF < ${t.outDepth}; yF++) {\n int xF = wF + yF * ${e} - ${s};\n\n if (xF < 0 || xF >= ${t.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${t.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 `}},Gh=class{constructor(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=e-1-t.padInfo.front,u=o-1-t.padInfo.top,c=n-1-t.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 < ${e}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${t.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${e} - 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 >= ${t.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 >= ${t.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 < ${t.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 eJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 Vh(m);return e.runWebGLProgram(d,[n,s],\"float32\")}var LA={kernelName:Ai,backendName:\"webgl\",kernelFunc:eJ};var Hh=class{constructor(t){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=t.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let e=t.filterHeight,o=t.filterWidth,n=e-1-t.padInfo.top,s=o-1-t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${e} - 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 < ${t.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 < ${t.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${t.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 < ${t.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 < ${t.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 tJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 Hh(m);return e.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new Wh(m);return e.runWebGLProgram(d,[n,s],\"float32\")}}var BA={kernelName:rn,backendName:\"webgl\",kernelFunc:tJ};function rJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Oh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var zA={kernelName:on,backendName:\"webgl\",kernelFunc:rJ};function oJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Uh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var VA={kernelName:ja,backendName:\"webgl\",kernelFunc:oJ};function nJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Gh(u);return e.runWebGLProgram(c,[n,s],\"float32\")}var WA={kernelName:nn,backendName:\"webgl\",kernelFunc:nJ};var sJ=Fo+`\n return cos(x);\n`,aJ=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${jr}\n return result;\n`,iJ=xe({opSnippet:sJ,packedOpSnippet:aJ}),UA={kernelName:sn,backendName:\"webgl\",kernelFunc:iJ};var uJ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,pJ=xe({opSnippet:uJ}),GA={kernelName:an,backendName:\"webgl\",kernelFunc:pJ};var Kh=class{constructor(t,e,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=t,[c]=e,[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 cJ=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Kh(n.shape,s.shape,i,p,u);return e.runWebGLProgram(c,[n,s,a],\"float32\")},HA={kernelName:cn,backendName:\"webgl\",kernelFunc:cJ};var Sp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Sp||(Sp={}));var tm=class{constructor(t,e,o,n){this.op=t,this.outputShape=e,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===Sp.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${KA(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 = ${qA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${qA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${KA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function KA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function qA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function qh(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=bt({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Dt({inputs:{x:p},backend:e});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new tm(r,p.shape,!1,s),f=[[m]],h=l;l=e.runWebGLProgram(d,[l],l.dtype,f),e.disposeIntermediateTensorInfo(h)}if(n){let m=new tm(r,p.shape,n,s),d=l;l=e.runWebGLProgram(m,[l],l.dtype),e.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(p),d}return l}function lJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return qh(Sp.Prod,n,e,s,a,i)}var jA={kernelName:un,backendName:\"webgl\",kernelFunc:lJ};function mJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return qh(Sp.Sum,n,e,s,a,i)}var XA={kernelName:pn,backendName:\"webgl\",kernelFunc:mJ};function dJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=uh(p,u,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=e.bufferSync(n),u=e.bufferSync(s),c=AR(p,u,a,i);return e.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 YA={kernelName:ra,backendName:\"webgl\",kernelFunc:dJ};var jh=class{constructor(t,e,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=t,this.blockSize=e,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 / ${e};\n int offset_h = imod(h, ${e});\n int in_w = w / ${e};\n int offset_w = imod(w, ${e});\n int offset_d = (offset_h * ${e} + 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 fJ(r){let{inputs:t,backend:e,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=new jh(f,s,a);return e.runWebGLProgram(h,[n],n.dtype)}var QA={kernelName:ln,backendName:\"webgl\",kernelFunc:fJ};var Wc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.filterHeight,i=t.filterWidth,p=t.outChannels/t.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=e?\"result += getBiasAtOutCoords();\":\"\";e&&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 Uc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.outChannels/t.inChannels,i=t.padInfo.left,p=t.strideWidth,u=t.dilationWidth,c=t.filterHeight,l=t.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 Uc(l):m=new Wc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return e.runWebGLProgram(m,[n,s],\"float32\",d)}var ZA={kernelName:mn,backendName:\"webgl\",kernelFunc:hJ};var Xh=class{constructor(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.outChannels/t.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 < ${t.batchSize}; b++) {\n for (int yR = 0; yR < ${t.outHeight}; yR++) {\n int xR = wR + yR * ${e} - ${n};\n\n if (xR < 0 || xR >= ${t.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${t.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${t.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 `}},Yh=class{constructor(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=e-1-t.padInfo.top,i=o-1-t.padInfo.left,p=t.outChannels/t.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 < ${e}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${e} - 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 >= ${t.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 gJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Xh(l);return e.runWebGLProgram(m,[n,s],\"float32\")}var JA={kernelName:Fi,backendName:\"webgl\",kernelFunc:gJ};function xJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Yh(l);return e.runWebGLProgram(m,[n,s],\"float32\")}var eF={kernelName:Pi,backendName:\"webgl\",kernelFunc:xJ};var Qh=class{constructor(t){this.variableNames=[\"X\"],this.outputShape=[t,t],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 yJ(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Qh(s),p=e.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(p),u}var tF={kernelName:oa,backendName:\"webgl\",kernelFunc:yJ};var Zh=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;let{inHeight:e,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=t,{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 < ${e}) {\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 bJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Zh(u);c=e.runWebGLProgram(l,[n,s],\"float32\");let m=te({inputs:{x:c},backend:e,attrs:{shape:u.outShape}});return e.disposeIntermediateTensorInfo(c),m}var rF={kernelName:dn,backendName:\"webgl\",kernelFunc:bJ};function CJ(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=bp({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var oF={kernelName:Li,backendName:\"webgl\",kernelFunc:CJ};var wJ=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",SJ=`\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`,IJ=xe({opSnippet:wJ,packedOpSnippet:SJ}),nF={kernelName:hn,backendName:\"webgl\",kernelFunc:IJ};var vJ=\"return (b >= 0.0) ? a : a * (b + 1.0);\",kJ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,NJ=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new qr(kJ,o.shape,n.shape):new Fr(vJ,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],o.dtype)},sF={kernelName:Xa,backendName:\"webgl\",kernelFunc:NJ};var TJ=`\n return vec4(equal(a, b));\n`,_J=\"return float(a == b);\",$J=nt({opSnippet:_J,packedOpSnippet:TJ,dtype:\"bool\",cpuKernelImpl:LR}),aF={kernelName:xn,backendName:\"webgl\",kernelFunc:$J};var EJ=`\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`,RJ=xe({opSnippet:EJ}),iF={kernelName:gn,backendName:\"webgl\",kernelFunc:RJ};var DJ=Fo+`\n return exp(x);\n`,AJ=`\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`,vv=xe({opSnippet:DJ,packedOpSnippet:AJ,cpuKernelImpl:BR,dtype:\"float32\"}),uF={kernelName:yn,backendName:\"webgl\",kernelFunc:vv};function Jh(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 pF={kernelName:na,backendName:\"webgl\",kernelFunc:Jh};var cF=\"return exp(x) - 1.0;\",FJ=xe({opSnippet:cF,packedOpSnippet:cF,cpuKernelImpl:zR}),lF={kernelName:bn,backendName:\"webgl\",kernelFunc:FJ};var rm=class{constructor(t,e,o){this.variableNames=[\"real\",\"imag\"];let n=e[1];this.outputShape=e;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:\"1.0\",i;if(t===\"real\")i=\"return real * expR - imag * expI;\";else if(t===\"imag\")i=\"return real * expI + imag * expR;\";else throw new Error(`FFT component must be either \"real\" or \"imag\", got ${t}.`);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 eg(r,t,e){let o=e.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:e,attrs:{shape:[a,s]}}),p=i.shape,u=new rm(\"real\",p,t),c=new rm(\"imag\",p,t),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=e.runWebGLProgram(u,l,\"float32\"),d=e.runWebGLProgram(c,l,\"float32\"),f=Pr({inputs:{real:m,imag:d},backend:e});e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:e,attrs:{shape:r.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(f),h}function PJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return eg(o,!1,e)}var mF={kernelName:Bi,backendName:\"webgl\",kernelFunc:PJ};var tg=class{constructor(t,e){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=t,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function bi(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new tg(o,n),i=[[n]];return t.runWebGLProgram(a,[],s,i)}}var dF={kernelName:sa,backendName:\"webgl\",kernelFunc:bi};var rg=class{constructor(t){this.variableNames=[\"Image\"],this.outputShape=[];let e=t[2];this.outputShape=t,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${e} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${e}) {\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 fF={kernelName:Cn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new rg(e.shape);return o.runWebGLProgram(n,[e],e.dtype)}};var hF=\"return floor(x);\",OJ=xe({opSnippet:hF,packedOpSnippet:hF,cpuKernelImpl:VR}),gF={kernelName:wn,backendName:\"webgl\",kernelFunc:OJ};var MJ=`\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`,LJ=`\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`,BJ=nt({opSnippet:MJ,packedOpSnippet:LJ,dtype:\"int32\"}),xF={kernelName:Sn,backendName:\"webgl\",kernelFunc:BJ};var og=class{constructor(t){this.variableNames=[\"A\"];let e=It(),[o,n]=t;this.outputShape=t,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 = ${e.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 ng=class{constructor(t){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let e=It(),[o,n]=t;this.outputShape=t,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 = ${e.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 ${e.output} = result;\n }\n `}};var yF={kernelName:Eu,backendName:\"webgl\",kernelFunc:zJ},Gc,kv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function zJ(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{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\");(Gc==null||h!==kv)&&(kv=h,Gc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:kv})),Gc.canvas.width=p,Gc.canvas.height=u,Gc.drawImage(n,0,0,p,u),n=Gc.canvas}let m=e.makeTensorInfo(c,\"int32\");e.texData.get(m.dataId).usage=mr.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new ng(l):new og(l),f=e.runWebGLProgram(d,[m],\"int32\");return e.disposeData(m.dataId),f}function VJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,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=e.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=Bh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?xi(d,!0):null,D=new Vc(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=e.runWebGLProgram(D,O,\"float32\",P)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=zh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?xi(d,!1):null,D=new zc(g,C,R,S,k),P=_();x=e.runWebGLProgram(D,P,\"float32\")}let E=te({inputs:{x},backend:e,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>e.disposeIntermediateTensorInfo(R)),E}var bF={kernelName:Io,backendName:\"webgl\",kernelFunc:VJ};function WJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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?xi(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=e.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(P),f.push(P)}let E;x?E=new Uc(g,S,b,k,_):E=new Wc(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=e.runWebGLProgram(E,C,\"float32\",R);return f.forEach(P=>e.disposeIntermediateTensorInfo(P)),D}var CF={kernelName:vo,backendName:\"webgl\",kernelFunc:WJ};var sg=class{constructor(t,e,o,n){this.sliceDim=t,this.strides=e,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 UJ(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=te({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let x=e.readSync(n.dataId),b=e.bufferSync(o),C=WR(x,b,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,C.values)}let f=new sg(a,l,[u,c],o.shape),h=e.runWebGLProgram(f,[d,m],d.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:p}});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(h),g}var wF={kernelName:vn,backendName:\"webgl\",kernelFunc:UJ};var ag=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],this.outputShape=e,this.rank=e.length;let o=Re(this.rank),n=GJ(t,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 < ${t[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function GJ(r,t){let e=[\"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:e,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:e,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(e.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=e.bufferSync(d),C=e.bufferSync(m),S=UR(C,b,f);return l.forEach(k=>e.disposeIntermediateTensorInfo(k)),e.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ag(m.shape,f),g=e.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}var SF={kernelName:aa,backendName:\"webgl\",kernelFunc:Nv};var HJ=\"return float(a > b);\",KJ=`\n return vec4(greaterThan(a, b));\n`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,cpuKernelImpl:GR,dtype:\"bool\"}),IF={kernelName:kn,backendName:\"webgl\",kernelFunc:qJ};var jJ=\"return float(a >= b);\",XJ=`\n return vec4(greaterThanEqual(a, b));\n`,YJ=nt({opSnippet:jJ,packedOpSnippet:XJ,dtype:\"bool\",cpuKernelImpl:HR}),vF={kernelName:Nn,backendName:\"webgl\",kernelFunc:YJ};function QJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return eg(o,!0,e)}var kF={kernelName:zi,backendName:\"webgl\",kernelFunc:QJ};var ZJ=\"return float(!isnan(x) && !isinf(x));\",JJ=xe({opSnippet:ZJ,dtype:\"bool\"}),NF={kernelName:Tn,backendName:\"webgl\",kernelFunc:JJ};var eee=\"return float(isinf(x));\",tee=xe({opSnippet:eee,dtype:\"bool\"}),TF={kernelName:_n,backendName:\"webgl\",kernelFunc:tee};var ree=\"return float(isnan(x));\",oee=xe({opSnippet:ree,dtype:\"bool\"}),_F={kernelName:$n,backendName:\"webgl\",kernelFunc:oee};var nee=\"return float(a < b);\",see=`\n return vec4(lessThan(a, b));\n`,aee=nt({opSnippet:nee,packedOpSnippet:see,cpuKernelImpl:KR,dtype:\"bool\"}),$F={kernelName:Rn,backendName:\"webgl\",kernelFunc:aee};var iee=\"return float(a <= b);\",uee=`\n return vec4(lessThanEqual(a, b));\n`,pee=nt({opSnippet:iee,packedOpSnippet:uee,cpuKernelImpl:qR,dtype:\"bool\"}),EF={kernelName:Dn,backendName:\"webgl\",kernelFunc:pee};function cee(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=jR(o,n,s);return t.makeTensorInfo([a.length],\"float32\",a)}var RF={kernelName:An,backendName:\"webgl\",kernelFunc:cee};var lee=Fo+`\n return x < 0.0 ? 0./0. : log(x);\n`,mee=`\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`,dee=xe({opSnippet:lee,packedOpSnippet:mee,cpuKernelImpl:XR}),DF={kernelName:Fn,backendName:\"webgl\",kernelFunc:dee};var fee=Fo+`\n return log(1.0 + x);\n`,hee=xe({opSnippet:fee}),AF={kernelName:Pn,backendName:\"webgl\",kernelFunc:hee};var gee=\"return float(a >= 1.0 && b >= 1.0);\",xee=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,yee=nt({opSnippet:gee,packedOpSnippet:xee,dtype:\"bool\"}),FF={kernelName:On,backendName:\"webgl\",kernelFunc:yee};var bee=\"return float(!(x >= 1.0));\",Cee=xe({opSnippet:bee}),PF={kernelName:Mn,backendName:\"webgl\",kernelFunc:Cee};var wee=\"return float(a >= 1.0 || b >= 1.0);\",See=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Iee=nt({opSnippet:wee,packedOpSnippet:See,dtype:\"bool\"}),OF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Iee};var ig=class{constructor(t,e,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=e,i=t[3]-1;this.outputShape=t;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 ug=class{constructor(t,e,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=e,i=t[3]-1;this.outputShape=t;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 vee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new ug(n.shape,s,a,i,p):new ig(n.shape,s,a,i,p);return e.runWebGLProgram(u,[n],n.dtype)},MF={kernelName:Bn,backendName:\"webgl\",kernelFunc:vee};var pg=class{constructor(t,e,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,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 - ${e})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${e} + 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 kee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new pg(n.shape,i,p,u,c);return e.runWebGLProgram(l,[n,s,a],n.dtype)},LF={kernelName:Ya,backendName:\"webgl\",kernelFunc:kee};function BF(r,t,e,o){let n=y.sizeFromShape(t),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Xr(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Tv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=e.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=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:e});let l=new Us(c,\"max\",!1);return e.runWebGLProgram(l,[n],n.dtype)}var WF={kernelName:Wn,backendName:\"webgl\",kernelFunc:$ee};function Eee(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 xu(l,\"max\",!1);return e.runWebGLProgram(m,[n],n.dtype)}var UF={kernelName:ia,backendName:\"webgl\",kernelFunc:Eee};var cg=class{constructor(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;let e=t.strideHeight,o=t.strideWidth,n=t.dilationHeight,s=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=s-1-t.padInfo.top,p=a-1-t.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) / ${e}.0;\n\n if (dyR < 0.0 || dyR >= ${t.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 >= ${t.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 `}},lg=class{constructor(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=p-1-t.padInfo.front,m=u-1-t.padInfo.top,d=c-1-t.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) / ${e}.0;\n\n if (dyD < 0.0 || dyD >= ${t.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 >= ${t.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 >= ${t.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 Ree(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 xu(m,\"max\",!0),f=e.runWebGLProgram(d,[a],a.dtype),h=new lg(m),g=e.runWebGLProgram(h,[n,f],a.dtype);return e.disposeIntermediateTensorInfo(f),g}var GF={kernelName:Ui,backendName:\"webgl\",kernelFunc:Ree};function Dee(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.runWebGLProgram(f,[i],i.dtype),g=new cg(m),x=e.runWebGLProgram(g,[n,h],i.dtype);return e.disposeIntermediateTensorInfo(h),x}var HF={kernelName:Wi,backendName:\"webgl\",kernelFunc:Dee};function KF(r,t,e,o){let n=new Us(e,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new Us(e,\"max\",!0,!0,t);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var qF={kernelName:ua,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;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]=KF(o,i,c,p);return[l,m]}};function jF(r,t,e,o){let n=y.sizeFromShape(t),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Xr(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var XF={kernelName:Un,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{keepDims:n,axis:s}=t,a=e,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]+t[l]+c[1]);let n=t.length,s=Re(n),a=e.map(c=>c[0]).join(\",\"),i=e.map((c,l)=>c[0]+t[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 dg=class{constructor(t,e,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((f,h)=>f[0]+t[h]+f[1]);let n=t.length,s=Re(n),a=e.map(f=>f[0]).join(\",\"),i=e.map((f,h)=>f[0]+t[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 Mee=({inputs:r,backend:t,attrs:e})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new dg(o.shape,n,s):new mg(o.shape,n,s);return t.runWebGLProgram(a,[o],o.dtype)},ZF={kernelName:Kn,backendName:\"webgl\",kernelFunc:Mee};var Lee=`if (b == 0.0) return NAN;\n return mod(a, b);`,Bee=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+jr+`\n return result;\n`,zee=nt({opSnippet:Lee,packedOpSnippet:Bee}),JF={kernelName:qn,backendName:\"webgl\",kernelFunc:zee};var fg=class{constructor(t,e,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[t,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 < ${e-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(${e-1}));\n }\n `}};var Vee=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,Wee=`\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`,_v=nt({opSnippet:Vee,packedOpSnippet:Wee,checkOutOfBounds:!0}),e3={kernelName:fn,backendName:\"webgl\",kernelFunc:_v};var t3=\"return a - b;\",$v=nt({opSnippet:t3,packedOpSnippet:t3,supportsComplex:!0,cpuKernelImpl:bD}),r3={kernelName:Ts,backendName:\"webgl\",kernelFunc:$v};function Ev(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Tv({inputs:{x:n},backend:e,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:e,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:e}),l=vv({inputs:{x:c},backend:e}),m=bp({inputs:{x:l},backend:e,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:e,attrs:{shape:p}}),f=_v({inputs:{a:l,b:d},backend:e});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}var o3={kernelName:Is,backendName:\"webgl\",kernelFunc:Ev};function Uee(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Ev({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new fg(u,c,s),m=[[a]],d=e.runWebGLProgram(l,[p],\"int32\",m);return i||e.disposeIntermediateTensorInfo(p),d}var n3={kernelName:jn,backendName:\"webgl\",kernelFunc:Uee};var Gee=Wt+`\n return -x;\n`,Hee=`\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 Kee(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.texData.get(o.dataId),[a,i]=eD(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Ar(o.shape,Hee):n=new tr(o.shape,Gee),e.runWebGLProgram(n,[o],o.dtype)}var s3={kernelName:pa,backendName:\"webgl\",kernelFunc:Kee};var qee=Vt.nonMaxSuppressionV3Impl;function jee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=qee(u,c,a,i,p);return e.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var a3={kernelName:Qn,backendName:\"webgl\",kernelFunc:jee};var Xee=Vt.nonMaxSuppressionV4Impl;function Yee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Xee(c,l,a,i,p,u);return[e.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),e.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var i3={kernelName:Qa,backendName:\"webgl\",kernelFunc:Yee};var Qee=Vt.nonMaxSuppressionV5Impl;function Zee(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Qee(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),e.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var u3={kernelName:Zn,backendName:\"webgl\",kernelFunc:Zee};var hg=class{constructor(t,e,o,n){this.variableNames=[\"indices\"],this.outputShape=[t,e],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 Jee=r=>{let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new hg(u,a,i,p),l=te({inputs:{x:n},backend:e,attrs:{shape:[u]}}),m=e.runWebGLProgram(c,[l],s);e.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:e,attrs:{shape:d}});return e.disposeIntermediateTensorInfo(m),f},p3={kernelName:Jn,backendName:\"webgl\",kernelFunc:Jee};function om(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"complex64\"){let n=yi({inputs:{input:o},backend:e}),s=om({inputs:{x:n},backend:e}),a=wp({inputs:{input:o},backend:e}),i=om({inputs:{x:a},backend:e}),p=Pr({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return bi({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:e})}var c3={kernelName:Sa,backendName:\"webgl\",kernelFunc:om};function l3(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=yi({inputs:{input:o},backend:e}),s=l3({inputs:{x:n},backend:e}),a=wp({inputs:{input:o},backend:e}),i=om({inputs:{x:a},backend:e}),p=Pr({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return bi({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var m3={kernelName:ca,backendName:\"webgl\",kernelFunc:l3};function ete(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Jh({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Jh({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Iv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var d3={kernelName:la,backendName:\"webgl\",kernelFunc:ete};var gg=class{constructor(t,e,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=e.map((u,c)=>u[0]+t[c]+u[1]);let n=t.length,s=Re(n),a=e.map(u=>u[0]).join(\",\"),i=e.map((u,c)=>u[0]+t[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 xg=class{constructor(t,e,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=e.map((h,g)=>h[0]+t[g]+h[1]);let n=t.length,s=Re(n),a=e.map(h=>h[0]).join(\",\"),i=e.map((h,g)=>h[0]+t[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:t,backend:e,attrs:o}=r,{x:n}=t,{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 bi({backend:e,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new xg(n.shape,s,a):new gg(n.shape,s,a),p=[[a]];return e.runWebGLProgram(i,[n],n.dtype,p)},f3={kernelName:es,backendName:\"webgl\",kernelFunc:Rv};var tte=`\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`,rte=`\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 `+jr+`\n return result;\n`,ote=nt({opSnippet:tte,packedOpSnippet:rte}),h3={kernelName:ts,backendName:\"webgl\",kernelFunc:ote};function nte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(e.shouldExecuteOnCPU([m])){let f=e.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=rD(m.shape,m.dtype,f,c);d=e.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:e,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Xr(x,b,\"prod\",e);d=te({inputs:{x:C},backend:e,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:e,attrs:{shape:f}})}return p.forEach(f=>e.disposeIntermediateTensorInfo(f)),d}var g3={kernelName:os,backendName:\"webgl\",kernelFunc:nte};function ste(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.readSync(x.dataId)),u=n.map(x=>x.shape),c=e.readSync(s.dataId),l=e.readSync(a.dataId),[m,d,f]=oD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],\"int32\",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var x3={kernelName:Up,backendName:\"webgl\",kernelFunc:ste};function ate(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=nD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],\"int32\",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var y3={kernelName:Gp,backendName:\"webgl\",kernelFunc:ate};function ite(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),l=e.readSync(a.dataId),m=i.map(g=>e.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=sD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var b3={kernelName:Hp,backendName:\"webgl\",kernelFunc:ite};var Dv=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=aD(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},C3={kernelName:ma,backendName:\"webgl\",kernelFunc:Dv};var ute=\"return 1.0 / x;\",pte=xe({opSnippet:ute}),w3={kernelName:ns,backendName:\"webgl\",kernelFunc:pte};var cte=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,lte=`\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`,mte=xe({opSnippet:cte,packedOpSnippet:lte}),S3={kernelName:ss,backendName:\"webgl\",kernelFunc:mte};var dte=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,fte=`\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`,hte=xe({opSnippet:dte,packedOpSnippet:fte}),I3={kernelName:us,backendName:\"webgl\",kernelFunc:hte};var yg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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 bg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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 gte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new bg(n.shape,p,u,s,a):new yg(n.shape,p,u,s,a);return e.runWebGLProgram(c,[n],\"float32\")}var v3={kernelName:is,backendName:\"webgl\",kernelFunc:gte};var Cg=class{constructor(t,e,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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 xte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new Cg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var k3={kernelName:Ja,backendName:\"webgl\",kernelFunc:xte};var wg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":d=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}};var Sg=class{constructor(t,e,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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 yte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Sg(n.shape,p,u,s,a):new wg(n.shape,p,u,s,a);return e.runWebGLProgram(c,[n],n.dtype)}var N3={kernelName:as,backendName:\"webgl\",kernelFunc:yte};var Ig=class{constructor(t,e,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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 bte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new Ig(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var T3={kernelName:Za,backendName:\"webgl\",kernelFunc:bte};var vg=class{constructor(t,e){this.variableNames=[\"x\"];let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=t,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${t[0]} - coord - 1));\n }\n `;return}let n=i=>e.indexOf(i)!==-1&&t[i]!==1?`${t[i]} - coords[${i}] - 1`:`coords[${i}]`,s=t.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 kg=class{constructor(t,e){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=t;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(${t[0]} - rc - 1),\n ${t[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${t[0]} - (rc + 1) - 1),\n ${t[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=t.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 e.indexOf(f)!==-1&&t[f]!==1?`${t[f]} - ${h[f]} - 1`:`${h[f]}`}}};function Cte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Dt({inputs:{x:n},backend:e});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new kg(n.shape,i):new vg(n.shape,i);return e.runWebGLProgram(p,[n],n.dtype)}var _3={kernelName:ps,backendName:\"webgl\",kernelFunc:Cte};var Ng=class{constructor(t,e){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=t[1],n=t[2];this.outputShape=t;let s=\"\";typeof e==\"number\"?s=`float outputValue = ${e.toFixed(2)};`:s=`\n vec3 fill = vec3(${e.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 $3={kernelName:Ds,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,p=new Ng(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 wte=`\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`,Ste=xe({opSnippet:wte}),E3={kernelName:cs,backendName:\"webgl\",kernelFunc:Ste};var Ite=\"return inversesqrt(x);\",vte=xe({opSnippet:Ite,cpuKernelImpl:iD}),R3={kernelName:ls,backendName:\"webgl\",kernelFunc:vte};var yu=class{constructor(t,e,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=e>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 < ${t}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${e}; 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 Tg=class{constructor(t,e,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=e>1?\"strides[j]\":\"strides\",b=e>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 < ${t}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${e}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${e}) {\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 kte(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=e.makeTensorInfo([],\"float32\",new Float32Array([0])),g;A().getBool(\"WEBGL_PACK\")?g=new Tg(p,i,d.shape.length,f.shape.length,c,m):g=new yu(p,i,d.shape.length,f.shape.length,c,m);let x=e.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:e,attrs:{shape:a}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(h),b}var D3={kernelName:ms,backendName:\"webgl\",kernelFunc:kte};var _g=class{constructor(t,e,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[t,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(e+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 Nte(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new _g(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return e.runWebGLProgram(i,[n,s],\"int32\",p)}var A3={kernelName:fs,backendName:\"webgl\",kernelFunc:Nte};var $g=class{constructor(t,e,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=e;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 Tte(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=new $g(o.shape.length,n.shape,n.shape.length);return e.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var F3={kernelName:fa,backendName:\"webgl\",kernelFunc:Tte};var _te=`\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`,$te=xe({opSnippet:_te}),P3={kernelName:hs,backendName:\"webgl\",kernelFunc:$te};var Ete=Fo+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,Rte=`\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`,Dte=xe({opSnippet:Ete,packedOpSnippet:Rte,cpuKernelImpl:pD}),O3={kernelName:bs,backendName:\"webgl\",kernelFunc:Dte};var Ate=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,Fte=xe({opSnippet:Ate}),M3={kernelName:ys,backendName:\"webgl\",kernelFunc:Fte};var Pte=Fo+`\n return sin(x);\n`,Ote=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${jr}\n return result;\n`,Mte=xe({opSnippet:Pte,packedOpSnippet:Ote}),L3={kernelName:gs,backendName:\"webgl\",kernelFunc:Mte};var Lte=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Bte=xe({opSnippet:Lte}),B3={kernelName:xs,backendName:\"webgl\",kernelFunc:Bte};var zte=`\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`,Vte=xe({opSnippet:zte}),z3={kernelName:Cs,backendName:\"webgl\",kernelFunc:Vte};var Wte=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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;xe.disposeIntermediateTensorInfo(x)),g},V3={kernelName:ga,backendName:\"webgl\",kernelFunc:Wte};function Ute(r){let{inputs:t,backend:e}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=t;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=e.readSync(o.dataId),p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=e.readSync(a.dataId)[0],[l,m,d,f,h]=lD(i,o.shape,o.dtype,p,n.dtype,u,c);return[e.makeTensorInfo(m,o.dtype,l),e.makeTensorInfo([m[0]],n.dtype,d),e.makeTensorInfo([f.length],\"bool\",new Uint8Array(f.map(g=>Number(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var W3={kernelName:Hi,backendName:\"webgl\",kernelFunc:Ute};function Gte(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.readSync(n.dataId)),i=e.readSync(o.dataId),p=Array.from(e.readSync(s.dataId)),[u,c,l]=mD(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var U3={kernelName:ei,backendName:\"webgl\",kernelFunc:Gte};function Hte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=ch(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var G3={kernelName:ya,backendName:\"webgl\",kernelFunc:Hte};function Kte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=ch(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var H3={kernelName:ba,backendName:\"webgl\",kernelFunc:Kte};function qte(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),b=e.bufferSync(s),C=y.decodeString(e.readSync(a.dataId)[0]),S=uD(x,b,i,m,c,u,p,l,C,d);return e.makeTensorInfo(i,S.dtype,S.values)}let f=new yu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=e.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:i}});return e.disposeIntermediateTensorInfo(h),g}var K3={kernelName:vs,backendName:\"webgl\",kernelFunc:qte};function jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var q3={kernelName:xa,backendName:\"webgl\",kernelFunc:jte};var j3=\"return sqrt(x);\",Xte=xe({opSnippet:j3,packedOpSnippet:j3,cpuKernelImpl:dD}),X3={kernelName:ws,backendName:\"webgl\",kernelFunc:Xte};var Yte=\"return x * x;\",Qte=xe({opSnippet:Yte}),Y3={kernelName:Ki,backendName:\"webgl\",kernelFunc:Qte};var Q3=\"return (a - b) * (a - b);\",Zte=nt({opSnippet:Q3,packedOpSnippet:Q3}),Z3={kernelName:ks,backendName:\"webgl\",kernelFunc:Zte};function Jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=e.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=fD(a,\"string\",o);return e.makeTensorInfo(n.shape,\"string\",i)}var J3={kernelName:$u,backendName:\"webgl\",kernelFunc:Jte};function ere({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=Wt+`\n return x > 0.0 ? 1.0 : float(${t.alpha});\n `,s=new tr(o.shape,n);return e.runWebGLProgram(s,[o],o.dtype)}var eP={kernelName:wo,backendName:\"webgl\",kernelFunc:ere};var Eg=class{constructor(t,e,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}(${t});\n ${s} strides = ${s}(${e});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function tre(r){let{inputs:t,backend:e,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=te({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 E=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:e,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(R)}else if(e.shouldExecuteOnCPU([n])){let R=e.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=hD(d,D,S,b);k=e.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Eg(b,S,d);k=e.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:e,attrs:{shape:f}});return e.disposeIntermediateTensorInfo(k),_}var tP={kernelName:Ns,backendName:\"webgl\",kernelFunc:tre};function rre(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=gD(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var rP={kernelName:Ca,backendName:\"webgl\",kernelFunc:rre};function ore(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.readSync(s.dataId),p=e.readSync(a.dataId)[0],[u,c,l]=xD(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],\"int32\",u),e.makeTensorInfo([m],\"string\",c),e.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var oP={kernelName:qi,backendName:\"webgl\",kernelFunc:ore};function nre(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.readSync(s.dataId),i=yD(a,n);return e.makeTensorInfo(s.shape,\"int32\",i)}var nP={kernelName:ji,backendName:\"webgl\",kernelFunc:nre};var sre=\"return tan(x);\",are=xe({opSnippet:sre}),sP={kernelName:_s,backendName:\"webgl\",kernelFunc:are};var ire=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,ure=xe({opSnippet:ire}),aP={kernelName:$s,backendName:\"webgl\",kernelFunc:ure};function pre(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:e,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:e,attrs:{shape:m}}),g=new yu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=e.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:e,attrs:{shape:n.shape}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(x),b}var iP={kernelName:ds,backendName:\"webgl\",kernelFunc:pre};var Rg=class{constructor(t,e){this.variableNames=[\"A\"];let o=new Array(t.length);for(let a=0;a5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${r[0]})`;let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=e.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=CD(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Rg(n.shape,s);return e.runWebGLProgram(a,[n],n.dtype)}var uP={kernelName:uo,backendName:\"webgl\",kernelFunc:Av};var Dg=class{constructor(t){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=t,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 `}},Ag=class{constructor(t){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=t,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 Ip(r,t){t!==null&&r.disposeIntermediateTensorInfo(t)}function pP(r){let t=1;for(;tp){let P=e.readSync(n.dataId),[O,M]=wD(P,u,n.dtype,s,a);return[e.makeTensorInfo(O.shape,O.dtype,O.values),e.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[e.makeTensorInfo(u,n.dtype,[]),e.makeTensorInfo(u,\"int32\",[])];if(c===1)return[n,bi({attrs:{shape:u,dtype:\"int32\",value:0},backend:e})];let l=e.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?e.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:e});m&&Ip(e,d);let x=pP(s),b=pP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Dg(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=e.runWebGLProgram(B,L,\"int32\",U),Ip(e,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 Ag([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=e.runWebGLProgram(M,O,\"int32\",B),Ip(e,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:e,attrs:{begin:0,size:[h,s]}}),Ip(e,_);let E=Nv({inputs:{x:g,indices:C},backend:e,attrs:{axis:1,batchDims:1}});Ip(e,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:e}),Ip(e,_);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:e}),Ip(e,D),[E,C]}var cP={kernelName:Es,backendName:\"webgl\",kernelFunc:lre};var Fg=class{constructor(t,e,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 < ${t} && 0 <= coordX && coordX < ${e}) {\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(${e}));\n float mapY = mapCoord(inY, float(${t}));\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 mre(r){let{inputs:t,backend:e,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 Fg(l,m,a,i,p,g);return e.runWebGLProgram(x,[n,s],\"float32\")}var lP={kernelName:Rs,backendName:\"webgl\",kernelFunc:mre};function dre(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t;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}=SD(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var mP={kernelName:Xi,backendName:\"webgl\",kernelFunc:dre};function fre(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeIntermediateTensorInfo(h)),f}var dP={kernelName:wa,backendName:\"webgl\",kernelFunc:fre};var Pg=class{constructor(t,e){this.variableNames=[\"x\",\"segmentIds\"];let o=t.windowSize,n=t.batchSize,s=t.inSize,a=t.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 hre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{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:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=oi(n.dtype),g=(S,k,_,E,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 Pg(M,k),B=e.compileAndRun(L,[S,_],E);if(p.push(B),B.shape[1]===R)return B;let z=Dv({backend:e,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=Av({inputs:{x:z},backend:e,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,\"unsortedSegmentSum\",s,h,a),b=te({inputs:{x},backend:e,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:e,attrs:{perm:S}})}return p.forEach(S=>e.disposeIntermediateTensorInfo(S)),C}var fP={kernelName:Yi,backendName:\"webgl\",kernelFunc:hre};var gre=[YD,ZD,JD,eA,rA,oA,nA,sA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,CA,SA,IA,vA,kA,$A,RA,DA,zD,FA,OA,MA,LA,BA,zA,VA,WA,UA,GA,HA,jA,XA,YA,QA,ZA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,lF,mF,dF,fF,gF,xF,yF,bF,CF,wF,SF,IF,vF,BD,kF,PA,NF,TF,_F,VD,$F,EF,RF,DF,AF,FF,PF,OF,MF,LF,zF,VF,WF,UF,GF,HF,qF,XF,YF,QF,ZF,JF,n3,GD,s3,a3,i3,u3,NA,p3,m3,d3,f3,h3,WD,g3,x3,y3,b3,C3,TA,e3,w3,S3,I3,KD,v3,k3,N3,T3,_3,$3,E3,R3,D3,A3,F3,P3,O3,M3,L3,B3,wA,o3,z3,V3,W3,U3,G3,H3,K3,q3,X3,Y3,Z3,J3,eP,tP,rP,oP,nP,r3,jD,sP,aP,iP,uP,cP,lP,XD,mP,dP,fP,c3];for(let r of gre)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 bu;(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\"})(bu||(bu={}));var hP;function xre(r){hP=r.wasm.cwrap(So,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function yre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t;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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=e.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:e.dataIdMap.get(i.dataId).id,g=bu[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=e.makeOutput([...C,x,b],n.dtype),k=e.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return hP(m,_,n.shape.length,d,E,s.shape.length,p,u,g,f,h,l||0,k),S}var gP={kernelName:So,backendName:\"wasm\",setupFunc:xre,kernelFunc:yre};function he(r,t){let e;function o(s){e=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,t||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||e(p,we[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var xP=he(Xs);var yP=he(Vo);var bP=he(Wo);function Ue(r,t,e){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=e!=null?e: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 bre=!0,CP=Ue(io,bre);var wP;function Cre(r){wP=r.wasm.cwrap(Uo,null,[\"array\",\"number\",\"number\",\"number\"])}function wre(r){let{inputs:t,backend:e}=r,o=e.makeOutput(t[0].shape,t[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=t.map(i=>e.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=e.dataIdMap.get(o.dataId).id;return wP(s,n.length,we[o.dtype],a),o}var SP={kernelName:Uo,backendName:\"wasm\",setupFunc:Cre,kernelFunc:wre};function vp(r){let{inputs:{x:t},backend:e}=r;if(t.dtype===\"string\")return ar(e.readSync(t.dataId),t.shape,t.dtype);let o=e.makeOutput(t.shape,t.dtype),n=e.typedArrayFromHeap(t);return e.typedArrayFromHeap(o).set(n),o}var IP={kernelName:Co,backendName:\"wasm\",kernelFunc:vp};var vP;function Sre(r){vP=r.wasm.cwrap(po,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function ho(r){let{inputs:t,backend:e,attrs:o}=r,[n,s]=vre(t.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[e,o]}var kP={kernelName:po,backendName:\"wasm\",kernelFunc:ho,setupFunc:Sre};function Tr(r,t,e){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(t,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 HP={kernelName:da,backendName:\"wasm\",kernelFunc:zt};var KP;function Mre(r){KP=r.wasm.cwrap(Zo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function Lre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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:e,attrs:{shape:S}}),E=zt({inputs:{x:s},backend:e,attrs:{shape:k}}),R=e.dataIdMap.get(_.dataId).id,D=e.dataIdMap.get(E.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=e.makeOutput([M,P,O],_.dtype),B=e.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return KP(R,z,_.shape.length,D,U,E.shape.length,a,i,B),e.disposeData(_.dataId),e.disposeData(E.dataId),L.shape=C,L}var qP={kernelName:Zo,backendName:\"wasm\",setupFunc:Mre,kernelFunc:Lre};function Po(r){let{inputs:{x:t},attrs:{begin:e,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(t,e,o),i=pt.isSliceContinous(t.shape,s,a),p=n.readSync(t.dataId),u=n.makeOutput(a,t.dtype),c=y.computeStrides(t.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=pt.computeFlatOffset(s,c);return t.dtype===\"string\"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(t.dtype===\"string\"){let f=ip(p,s,a,t.shape,t.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=t.shape.length;if(d===2)Bre(p,c[0],m,s,a);else if(d===3)zre(p,c[0],c[1],m,s,a);else if(d===4)Vre(p,c[0],c[1],c[2],m,s,a);else{let f=ip(p,s,a,t.shape,t.dtype);m.set(f)}return u}function Bre(r,t,e,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:e,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:e,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(h.dataId),g}var XP={kernelName:Js,backendName:\"wasm\",kernelFunc:Wre};var YP;function Ure(r){YP=r.wasm.cwrap(Jo,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function Gre(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=t.makeOutput(p,s.dtype);function c(l){return t.dataIdMap.get(l.dataId).id}return YP(c(n),a,i,c(s),we[s.dtype],c(u)),u}var QP={kernelName:Jo,backendName:\"wasm\",setupFunc:Ure,kernelFunc:Gre};var Hre=!0,ZP=Ue(qa,Hre);function Kre(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.typedArrayFromHeap(o),a=e.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var JP={kernelName:ea,backendName:\"wasm\",kernelFunc:Kre};function Or(r){let{inputs:{x:t},attrs:{dtype:e},backend:o}=r,n=o.makeOutput(t.shape,e),s=o.typedArrayFromHeap(t);return o.typedArrayFromHeap(n).set(s),n}var eO={kernelName:yo,backendName:\"wasm\",kernelFunc:Or};var tO=he(en);var rO;function qre(r){rO=r.wasm.cwrap(bo,null,[\"number\",\"number\",\"number\",\"number\"])}function jre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i=e.dataIdMap.get(n.dataId).id,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(p.dataId).id;return rO(i,s,a,u),p}var oO={kernelName:bo,backendName:\"wasm\",setupFunc:qre,kernelFunc:jre};function Fv(r){let{inputs:t,backend:e}=r,o=y.parseAxisParam(r.attrs.axis,t[0].shape)[0],n=t.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(t.map(d=>d.shape),o),a=t.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return vp({inputs:{x:a[0]},backend:e});let i=e.makeOutput(s,t[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:e,attrs:{shape:k}})}),f=d.map(C=>({vals:e.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=np(f,s,t[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=e.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>e.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=>e.typedArrayFromHeap(d)),m=e.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:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumprod\",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;bO(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:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var CO={kernelName:un,backendName:\"wasm\",setupFunc:ioe,kernelFunc:uoe};var wO;function poe(r){wO=r.wasm.cwrap(pn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumsum\",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;wO(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:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var SO={kernelName:pn,backendName:\"wasm\",setupFunc:poe,kernelFunc:coe};var IO;function loe(r){IO=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function moe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{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=t.makeOutput(u,s.dtype);function l(m){return t.dataIdMap.get(m.dataId).id}return IO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var vO={kernelName:ra,backendName:\"wasm\",setupFunc:loe,kernelFunc:moe};var kO;function doe(r){kO=r.wasm.cwrap(ln,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function foe(r){let{backend:t,inputs:e,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=t.makeOutput(f,\"float32\"),x=t.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=t.dataIdMap.get(h.dataId).id;return kO(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var NO={kernelName:ln,backendName:\"wasm\",setupFunc:doe,kernelFunc:foe};var TO;function hoe(r){TO=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 goe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=e,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,E=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 TO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,E,R,D,M),O}var _O={kernelName:mn,backendName:\"wasm\",setupFunc:hoe,kernelFunc:goe};var $O;function xoe(r){$O=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function yoe(r){let{inputs:t,backend:e}=r,{x:o}=t,n=y.sizeFromShape(o.shape),s=e.makeOutput([...o.shape,...o.shape],o.dtype);return $O(e.dataIdMap.get(o.dataId).id,we[o.dtype],n,e.dataIdMap.get(s.dataId).id),s}var EO={kernelName:oa,backendName:\"wasm\",setupFunc:xoe,kernelFunc:yoe};var RO;function boe(r){RO=r.wasm.cwrap(dn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=e.makeOutput(u.outShape,n.dtype);return RO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.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 DO={kernelName:dn,backendName:\"wasm\",setupFunc:boe,kernelFunc:Coe};var AO;function woe(r){AO=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 Soe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(s.shape,s.dtype);return AO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 FO={kernelName:Mi,backendName:\"wasm\",setupFunc:woe,kernelFunc:Soe};var PO;function Ioe(r){PO=r.wasm.cwrap(Oi,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:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return PO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 OO={kernelName:Oi,backendName:\"wasm\",setupFunc:Ioe,kernelFunc:voe};var MO=he(hn);var LO;function koe(r){LO=r.wasm.cwrap(Xa,null,[\"number\",\"number\",\"number\"])}function Noe(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=e.makeOutput(n.shape,\"float32\"),a=i=>e.dataIdMap.get(i.dataId).id;return LO(a(n),a(o),a(s)),s}var BO={kernelName:Xa,backendName:\"wasm\",setupFunc:koe,kernelFunc:Noe};var Toe=!1,zO=Ue(xn,Toe,\"bool\");var VO=he(gn);var WO=he(yn,\"float32\");function Mg(r){let{inputs:t,attrs:e,backend:o}=r,{input:n}=t,{dim:s}=e,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 UO={kernelName:na,backendName:\"wasm\",kernelFunc:Mg};var GO=he(bn,\"float32\");function Ov(r){let{attrs:{shape:t,value:e},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(e);let s=o.makeOutput(t,n);return o.typedArrayFromHeap(s).fill(e),s}var HO={kernelName:sa,backendName:\"wasm\",kernelFunc:Ov};var KO;function _oe(r){KO=r.wasm.cwrap(Cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $oe(r){let{inputs:t,backend:e}=r,{image:o}=t,n=e.makeOutput(o.shape,o.dtype),s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return KO(s,i,p,u,c,a),n}var qO={kernelName:Cn,backendName:\"wasm\",kernelFunc:$oe,setupFunc:_oe};var jO=he(wn);var Eoe=!1,XO=Ue(Sn,Eoe);var YO;function Roe(r){YO=r.wasm.cwrap(In,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Doe(r){let{backend:t,inputs:e,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=e,c=t.dataIdMap.get(s.dataId).id,l=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(i.dataId).id,d=p!=null?t.dataIdMap.get(p.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,h=t.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=t.dataIdMap.get(h.dataId).id;return YO(c,l,m,d,f,n,g),h}var QO={kernelName:In,backendName:\"wasm\",setupFunc:Roe,kernelFunc:Doe};var ZO;function Aoe(r){ZO=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 Foe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=bu[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,E=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 ZO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var JO={kernelName:Io,backendName:\"wasm\",setupFunc:Aoe,kernelFunc:Foe};var eM;function Poe(r){eM=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 Ooe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=bu[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,E=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 eM(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var tM={kernelName:vo,backendName:\"wasm\",setupFunc:Poe,kernelFunc:Ooe};var rM;function Moe(r){rM=r.wasm.cwrap(vn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Loe(r){let{backend:t,inputs:e}=r,{params:o,indices:n}=e,[s,a,i,p]=sf.prepareAndValidate(o,n),u=t.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=t.dataIdMap.get(o.dataId).id,h=t.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(u.dataId).id;return rM(d,we[o.dtype],h,a,l,i,g,x),u}var oM={kernelName:vn,backendName:\"wasm\",setupFunc:Moe,kernelFunc:Loe};var nM;function Boe(r){nM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function zoe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=t.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:t}),d=y.sizeFromShape(s.shape),f=zt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:t}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=t.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=t.dataIdMap.get(m.dataId).id,k=t.dataIdMap.get(f.dataId).id,_=t.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return nM(C,we[n.dtype],E,x,k,l.batchSize,R,_),t.disposeData(m.dataId),t.disposeData(f.dataId),g.shape=l.outputShape,g}var sM={kernelName:aa,backendName:\"wasm\",setupFunc:Boe,kernelFunc:zoe};var Voe=!1,aM=Ue(kn,Voe,\"bool\");var Woe=!1,iM=Ue(Nn,Woe,\"bool\");var uM=he(Tn,\"bool\");var pM=he(_n,\"bool\");var cM=he($n,\"bool\");var lM;function Uoe(r){lM=r.wasm.cwrap(En,null,[\"number\",\"number\",\"number\",\"number\"])}function Goe(r){let{inputs:{x:t},attrs:{alpha:e},backend:o}=r,n=o.dataIdMap.get(t.dataId).id,s=o.makeOutput(t.shape,\"float32\");if(y.sizeFromShape(t.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;lM(n,we[t.dtype],e,a)}return s}var mM={kernelName:En,backendName:\"wasm\",setupFunc:Uoe,kernelFunc:Goe};var Hoe=!1,dM=Ue(Rn,Hoe,\"bool\");var Koe=!1,fM=Ue(Dn,Koe,\"bool\");var hM;function qoe(r){hM=r.wasm.cwrap(An,null,[\"number\",\"number\",\"number\",\"number\"])}function joe(r){let{attrs:t,backend:e}=r,{start:o,stop:n,num:s}=t,a=Math.floor(s),i=e.makeOutput([a],\"float32\");return hM(e.dataIdMap.get(i.dataId).id,o,n,a),i}var gM={kernelName:An,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};var xM=he(Fn);var yM=he(Pn);var Xoe=!1,bM=Ue(On,Xoe,\"bool\");var CM=he(Mn);var Yoe=!1,wM=Ue(Ln,Yoe,\"bool\");var Qoe=!1,SM=Ue(E0,Qoe,\"bool\");var IM;function Zoe(r){IM=r.wasm.cwrap(Bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Joe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(n.shape,n.dtype);return IM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var vM={kernelName:Bn,backendName:\"wasm\",setupFunc:Zoe,kernelFunc:Joe};var kM;function ene(r){kM=r.wasm.cwrap(Ya,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function tne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return kM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var NM={kernelName:Ya,backendName:\"wasm\",setupFunc:ene,kernelFunc:tne};var TM;function rne(r){TM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\"])}function one(r){let{backend:t,inputs:e,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=e,p=t.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t);if(d){let C=t.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=t.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;TM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var _M={kernelName:zn,backendName:\"wasm\",setupFunc:rne,kernelFunc:one};var nne=!1,$M=Ue(Vn,nne);var EM;function sne(r){EM=r.wasm.cwrap(Wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function ane(r){let{inputs:t,attrs:e,backend:o}=r,n=t.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}=e,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 E=o.makeOutput(c.outShape,\"float32\"),R=o.dataIdMap.get(E.dataId).id;return EM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),E}var RM={kernelName:Wn,backendName:\"wasm\",setupFunc:sne,kernelFunc:ane};var DM;function ine(r){DM=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 une(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=e.makeOutput(c.outShape,n.dtype);return DM(e.dataIdMap.get(n.dataId).id,e.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 AM={kernelName:ia,backendName:\"wasm\",setupFunc:ine,kernelFunc:une};var FM;function pne(r){FM=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 cne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return FM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 PM={kernelName:Ui,backendName:\"wasm\",setupFunc:pne,kernelFunc:cne};var OM;function lne(r){OM=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function mne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return OM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 MM={kernelName:Wi,backendName:\"wasm\",setupFunc:lne,kernelFunc:mne};var LM;function dne(r){LM=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 fne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(c.outShape,n.dtype),m=e.makeOutput(c.outShape,\"int32\");return LM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(l.dataId).id,e.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 BM={kernelName:ua,backendName:\"wasm\",setupFunc:dne,kernelFunc:fne};var zM;function hne(r){zM=r.wasm.cwrap(Un,null,[\"number, number, number\"])}function gne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let S=t.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=Or({backend:t,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(b.dataId).id);let C=t.makeOutput(h,\"float32\");if(y.sizeFromShape(u.shape)!==0){let S=t.dataIdMap.get(C.dataId).id;zM(p,x,S)}if(d&&t.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!==\"float32\"&&t.disposeData(b.dataId),C}var VM={kernelName:Un,backendName:\"wasm\",setupFunc:hne,kernelFunc:gne};var WM;function xne(r){WM=r.wasm.cwrap(Gn,null,[\"number\",\"number\",\"number\",\"number\"])}function yne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t);if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;WM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var UM={kernelName:Gn,backendName:\"wasm\",setupFunc:xne,kernelFunc:yne};var bne=!1,GM=Ue(Hn,bne);var Mv;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Mv||(Mv={}));var HM;function Cne(r){HM=r.wasm.cwrap(Kn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function wne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+t.shape[h]+f[1]),a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),p=e.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.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 HM(a,u,t.shape.length,we[t.dtype],m,d,Mv[n],p),i}var KM={kernelName:Kn,backendName:\"wasm\",kernelFunc:wne,setupFunc:Cne};var qM;function Sne(r){qM=r.wasm.cwrap(Is,null,[\"number\",\"number\",\"number\",\"number\"])}function Lv(r){let{backend:t,inputs:{logits:e},attrs:{dim:o}}=r,n=t.dataIdMap.get(e.dataId).id,s=t.makeOutput(e.shape,e.dtype),a=t.dataIdMap.get(s.dataId).id,i=e.shape[o],p=y.sizeFromShape(e.shape)/i;return y.sizeFromShape(s.shape)===0||qM(n,a,i,p),s}var jM={kernelName:Is,backendName:\"wasm\",setupFunc:Sne,kernelFunc:Lv};var XM;function Ine(r){XM=r.wasm.cwrap(jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function vne(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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:Lv({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=e.makeOutput([u,s],\"int32\");return XM(e.dataIdMap.get(p.dataId).id,u,c,s,a,e.dataIdMap.get(l.dataId).id),i||e.disposeData(p.dataId),l}var YM={kernelName:jn,backendName:\"wasm\",setupFunc:Ine,kernelFunc:vne};var QM=Ue(qn,!0);var kne=!0,ZM=Ue(Xn,kne);var JM=he(pa);function Hc(r,t){let e=new Int32Array(r.wasm.HEAPU8.buffer,t,4),o=e[0],n=e[1],s=e[2],a=e[3];return r.wasm._free(t),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var eL;function Nne(r){eL=r.wasm.cwrap(Qn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Tne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=e,u=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(p.dataId).id,l=eL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Hc(t,l);return t.wasm._free(f),t.wasm._free(h),t.makeOutput([d],\"int32\",m)}var tL={kernelName:Qn,backendName:\"wasm\",setupFunc:Nne,kernelFunc:Tne};var rL;function _ne(r){rL=r.wasm.cwrap(Qa,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function $ne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=rL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Hc(t,m);t.wasm._free(h);let x=t.makeOutput([f],\"int32\",d),b=t.makeOutput([],\"int32\",g);return[x,b]}var oL={kernelName:Qa,backendName:\"wasm\",setupFunc:_ne,kernelFunc:$ne};var nL;function Ene(r){nL=r.wasm.cwrap(Zn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Rne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=nL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Hc(t,m);t.wasm._free(g);let x=t.makeOutput([f],\"int32\",d),b=t.makeOutput([f],\"float32\",h);return[x,b]}var sL={kernelName:Zn,backendName:\"wasm\",setupFunc:Ene,kernelFunc:Rne};var Dne=!1,aL=Ue(Yn,Dne,\"bool\");var iL;function Ane(r){iL=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Fne(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=e.makeOutput([...n.shape,a],s),c=e.dataIdMap.get(u.dataId).id,m=e.dataIdMap.get(n.dataId).id;return iL(m,a,i,p,c),u}var uL={kernelName:Jn,backendName:\"wasm\",setupFunc:Ane,kernelFunc:Fne};function Pne(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(1),o}var pL={kernelName:ca,backendName:\"wasm\",kernelFunc:Pne};function One(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Mg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Mg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Fv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var cL={kernelName:la,backendName:\"wasm\",kernelFunc:One};var lL;function Mne(r){lL=r.wasm.cwrap(es,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Lne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+t.shape[g]+h[1]);if(y.sizeFromShape(t.shape)===0)return Ov({backend:e,attrs:{shape:s,value:n,dtype:t.dtype}});let a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.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 lL(a,c,t.shape.length,we[t.dtype],d,f,n,u),i}var Lg={kernelName:es,backendName:\"wasm\",kernelFunc:Lne,setupFunc:Mne};var Bne=!1,mL=Ue(ts,Bne);var dL;function zne(r){dL=r.wasm.cwrap(rs,null,[\"number\",\"number\",\"number\"])}function Vne(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=Or({backend:e,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=e.dataIdMap.get(u.dataId).id);let c=e.makeOutput(o.shape,\"float32\"),l=e.dataIdMap.get(c.dataId).id;return dL(i,a,l),p.dtype!==\"float32\"&&e.disposeData(u.dataId),c}var fL={kernelName:rs,backendName:\"wasm\",setupFunc:zne,kernelFunc:Vne};var hL;function Wne(r){hL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\",\"number\"])}function Une(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;hL(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var gL={kernelName:os,backendName:\"wasm\",setupFunc:Wne,kernelFunc:Une};var Gne=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=ap(o,n,s,a),p=t.makeOutput([i.length],a);return t.typedArrayFromHeap(p).set(i),p},xL={kernelName:ma,backendName:\"wasm\",kernelFunc:Gne};var Hne=!0,yL=Ue(fn,Hne);var bL=he(ns);var CL=he(ss);var wL=he(us);var SL;function Kne(r){SL=r.wasm.cwrap(is,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=Or({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=t.dataIdMap.get(g.dataId));let x=h.id,b=t.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return b;let C=t.dataIdMap.get(b.dataId).id;return SL(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&t.disposeData(g.dataId),b}var IL={kernelName:is,backendName:\"wasm\",setupFunc:Kne,kernelFunc:qne};var vL;function jne(r){vL=r.wasm.cwrap(Ja,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Xne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,\"float32\"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Or({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(u.dataId)),vL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var kL={kernelName:Ja,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var NL;function Yne(r){NL=r.wasm.cwrap(as,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return h;let g=t.dataIdMap.get(n.dataId),x;g.dtype!==\"float32\"&&(x=Or({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=t.dataIdMap.get(x.dataId));let b=g.id,C=t.dataIdMap.get(h.dataId).id;return NL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&t.disposeData(x.dataId),h}var TL={kernelName:as,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var _L;function Zne(r){_L=r.wasm.cwrap(Za,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Jne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,\"float32\"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Or({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(u.dataId)),_L(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var $L={kernelName:Za,backendName:\"wasm\",setupFunc:Zne,kernelFunc:Jne};var EL;function ese(r){EL=r.wasm.cwrap(ps,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function tse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return vp({inputs:{x:n},backend:e});let i=e.makeOutput(n.shape,n.dtype),p=e.dataIdMap.get(n.dataId).id,u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);EL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:e});return e.disposeData(i.dataId),m}var RL={kernelName:ps,backendName:\"wasm\",kernelFunc:tse,setupFunc:ese};var DL;function rse(r){DL=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function ose(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{radians:s,fillValue:a,center:i}=o,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(n.dataId).id,c=e.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 DL(u,l,m,d,f,s,h,g,S,C.length,c),p}var AL={kernelName:Ds,backendName:\"wasm\",kernelFunc:ose,setupFunc:rse};var FL=he(cs);var PL=he(ls);var OL;function nse(r){OL=r.wasm.cwrap(ms,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function sse(r){let{backend:t,inputs:e,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,i=t.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=lu.calculateShapes(s,n,a),f=t.dataIdMap.get(n.dataId).id,g=t.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=t.dataIdMap.get(i.dataId).id;return OL(f,g,we[s.dtype],p,u,c,x,m,b),i}var ML={kernelName:ms,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var LL;function ase(r){LL=r.wasm.cwrap(fs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function ise(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{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=e.makeOutput(s.shape,\"int32\");function p(u){return e.dataIdMap.get(u.dataId).id}return LL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var BL={kernelName:fs,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var zL;function use(r){zL=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function pse(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=e.makeOutput(n.shape,n.dtype),c=e.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 zL(a,i,p,d,c),u}var VL={kernelName:fa,backendName:\"wasm\",kernelFunc:pse,setupFunc:use};var WL=he(hs);var UL;function cse(r){UL=r.wasm.cwrap(bs,null,[\"number\",\"number\"])}function lse(r){let{backend:t,inputs:{x:e}}=r,o=t.dataIdMap.get(e.dataId).id,n=t.makeOutput(e.shape,e.dtype),s=t.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||UL(o,s),n}var GL={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:cse,kernelFunc:lse};var HL=he(ys);var KL=he(gs);var qL=he(xs);var jL=he(Cs);function mse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=e.dataIdMap.get(a.dataId).id,h=e.makeOutput(l,n.dtype),g=e.dataIdMap.get(h.dataId).id,x=e.makeOutput([4],\"int32\"),b=e.dataIdMap.get(x.dataId).id;eB(m,we[n.dtype],n.shape[0],d,f,g,b,t,0);let C=e.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(e.disposeData(x.dataId),S)throw e.disposeData(h.dataId),new Error(S);return h}function xse(r){return zg(r,!0)}var tB={kernelName:ya,backendName:\"wasm\",setupFunc:Bg,kernelFunc:xse};function yse(r){return zg(r,!1)}var rB={kernelName:ba,backendName:\"wasm\",setupFunc:Bg,kernelFunc:yse};var oB;function bse(r){oB=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function Cse(r){let{backend:t,inputs:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,p=t.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=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=t.dataIdMap.get(p.dataId).id;return oB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var nB={kernelName:vs,backendName:\"wasm\",setupFunc:bse,kernelFunc:Cse};function wse(r){let{inputs:t,attrs:e,backend:o}=r,{x:n}=t,{numOrSizeSplits:s,axis:a}=e,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 sB={kernelName:xa,backendName:\"wasm\",kernelFunc:wse};var aB=he(ws);var iB=he(Ki);var Sse=!0,uB=Ue(ks,Sse);var pB;function Ise(r){pB=r.wasm.cwrap(wo,null,[\"number\",\"number\",\"number\",\"number\"])}function vse(r){let{backend:t,inputs:e,attrs:o}=r,{alpha:n}=o,{x:s}=e,a=t.dataIdMap.get(s.dataId).id,i=t.makeOutput(s.shape,s.dtype),p=t.dataIdMap.get(i.dataId).id;return pB(a,n,we[s.dtype],p),i}var cB={kernelName:wo,backendName:\"wasm\",setupFunc:Ise,kernelFunc:vse};var lB;function kse(r){lB=r.wasm.cwrap(Ns,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Nse(r){let{backend:t,inputs:e,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=zt({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),E=Po({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=zt({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else{let _=t.makeOutput(d,\"float32\"),E=t.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=t.dataIdMap.get(_.dataId).id;lB(E,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:t,attrs:{shape:f}}),t.disposeData(_.dataId)}return k}var mB={kernelName:Ns,backendName:\"wasm\",setupFunc:kse,kernelFunc:Nse};function Tse(r){let{backend:t,inputs:e,attrs:o}=r,{data:n,dataSplits:s}=e,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=t.readSync(n.dataId),d=t.readSync(s.dataId),[f,h]=up(m,d,a,i,p,u,c,l),g=t.makeOutput([f.length],\"string\"),x=t.dataIdMap.get(g.dataId);x.stringBytes=f;let b=t.makeOutput(s.shape,\"int32\");return t.typedArrayFromHeap(b).set(h),[g,b]}var dB={kernelName:Ca,backendName:\"wasm\",kernelFunc:Tse};function _se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n,delimiter:s}=e,{skipEmpty:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c,l]=pp(i,p[0],a),m=c.length,d=t.makeOutput([m,2],\"int32\");t.typedArrayFromHeap(d).set(u);let h=t.makeOutput([m],\"string\"),g=t.dataIdMap.get(h.dataId);g.stringBytes=c;let x=t.makeOutput([2],\"int32\");return t.typedArrayFromHeap(x).set(l),[d,h,x]}var fB={kernelName:qi,backendName:\"wasm\",kernelFunc:_se};function $se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n}=e,{numBuckets:s}=o,a=t.readSync(n.dataId),i=cp(a,s),p=t.makeOutput(n.shape,\"int32\");return t.typedArrayFromHeap(p).set(i),p}var hB={kernelName:ji,backendName:\"wasm\",kernelFunc:$se};var Ese=!0,gB=Ue(Ts,Ese);var xB;function Rse(r){xB=r.wasm.cwrap(Ss,null,[\"number\",\"number\",\"number\",\"number\"])}function Dse(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;xB(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var yB={kernelName:Ss,backendName:\"wasm\",setupFunc:Rse,kernelFunc:Dse};var bB=he(_s);var CB=he($s);var wB;function Ase(r){wB=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function Fse(r){let{backend:t,inputs:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,i=t.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=lu.calculateShapes(a,s,n.shape),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=t.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=t.dataIdMap.get(i.dataId).id;return wB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var SB={kernelName:ds,backendName:\"wasm\",setupFunc:Ase,kernelFunc:Fse};var IB;function Pse(r){IB=r.wasm.cwrap(uo,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Ose(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,s=e.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}=e,a=t.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=t.makeOutput(p,o.dtype),c=t.dataIdMap.get(u.dataId).id,l=t.makeOutput(p,\"int32\"),m=t.dataIdMap.get(l.dataId).id;return kB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},NB={kernelName:Es,backendName:\"wasm\",setupFunc:Mse,kernelFunc:Lse};var TB;function Bse(r){TB=r.wasm.cwrap(Rs,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function zse(r){let{backend:t,inputs:e,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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=t.makeOutput(g,n.dtype),S=t.dataIdMap.get(C.dataId).id,_=t.dataIdMap.get(n.dataId).id,R=t.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 TB(_,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 _B={kernelName:Rs,backendName:\"wasm\",setupFunc:Bse,kernelFunc:zse};function Vse(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t,{outputValues:a,outputShape:i,indices:p}=lp(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 $B={kernelName:Xi,backendName:\"wasm\",kernelFunc:Vse};function Wse(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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 EB={kernelName:wa,backendName:\"wasm\",kernelFunc:Wse};function Use(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(0),o}var RB={kernelName:Sa,backendName:\"wasm\",kernelFunc:Use};var Gse=[gP,xP,yP,bP,CP,SP,TP,$P,EP,RP,DP,AP,FP,PP,OP,LP,GP,zP,WP,qP,XP,QP,ZP,JP,eO,tO,oO,nO,aO,uO,cO,mO,fO,hO,gO,yO,CO,SO,vO,NO,_O,EO,DO,FO,OO,MO,BO,zO,VO,WO,UO,GO,HO,qO,jO,XO,QO,JO,tM,oM,sM,aM,iM,IP,uM,pM,cM,mM,dM,fM,gM,yM,xM,bM,CM,wM,SM,vM,NM,_M,$M,RM,AM,PM,MM,BM,VM,UM,GM,KM,YM,QM,ZM,JM,tL,oL,sL,aL,uL,pL,cL,Lg,mL,fL,gL,xL,yL,bL,CL,wL,HP,IL,kL,TL,$L,RL,AL,FL,PL,ML,BL,VL,WL,GL,HL,KL,qL,jP,jM,jL,XL,QL,JL,tB,rB,nB,sB,aB,iB,uB,cB,mB,dB,fB,hB,gB,yB,bB,CB,SB,vB,NB,_B,kP,$B,EB,RB];for(let r of Gse)ti(r);var Bv=A();Bv.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}});Bv.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(Bv.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 qv=Lp(PB()),VB=Lp(MB()),jv=Lp(LB());var BB=qv.default||qv,Hse=jv.default||jv,im=class extends so{constructor(t){super(),this.wasm=t,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(UB),Kv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}write(t,e,o){let n={id:this.dataIdNextNumber++};return this.move(n,t,e,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}move(t,e,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let c=e;this.dataIdMap.set(t,{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(t,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),e!=null&&this.wasm.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,p),u)}async read(t){return this.readSync(t)}readSync(t,e,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(t);if(s===\"string\")return(e==null||e===0)&&(o==null||o>=i.length)?i:i.slice(e,o);e=e||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+e*p,n+o*p);return qse(u.buffer,s)}disposeData(t,e=!1){if(this.dataIdMap.has(t)){let o=this.dataIdMap.get(t);if(o.refCount--,!e&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(t)}return!0}refCount(t){return this.dataIdMap.has(t)?this.dataIdMap.get(t).refCount:0}incRef(t){let e=this.dataIdMap.get(t);e!=null&&e.refCount++}floatPrecision(){return 32}getMemoryOffset(t){return this.dataIdMap.get(t).memoryOffset}dispose(){this.wasm.tfjs.dispose(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(t,e,o,n){let s;if(o==null)s=this.write(n!=null?n:null,t,e);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:t,dtype:e,refCount:1});let i=y.sizeFromShape(t);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:t,dtype:e}}typedArrayFromHeap({shape:t,dtype:e,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(t);switch(e){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 ${e}`)}}};function Kse(r){return(t,e)=>(y.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||t.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,t).then(s=>{e(s.instance,s.module)})})}),{})}function zB(r,t,e){if(Ug!=null)return Ug;let o=\"tfjs-backend-wasm.wasm\";return r&&t?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),sm!=null&&sm[o]!=null?sm[o]:e+o}async function WB(){let[r,t]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((e,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=VB.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?zB(r,t,nm!=null?nm:p):p+i},Xv&&(n.instantiateWasm=Kse(zB(r,t,nm!=null?nm:\"\")));let s=!1;n.onAbort=()=>{if(s||am)return;am=!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;t&&r&&Ug==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+BB.toString()],{type:\"text/javascript\"}),a=BB(n)):a=Hse(n),a.then(i=>{s=!0,am=!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,[])},e({wasm:i})}).catch(o)})}function qse(r,t){switch(t){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${t}`)}}var jse=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Ug=null,nm=null,sm={},am=!1,Xv=!1;function Xse(r,t=!1){if(Pw(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),am)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");Ug=r,Xv=t}function Yse(r,t=!1){if(am)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\")nm=r;else{sm=r;let e=jse.filter(o=>sm[o]==null);if(e.length>0)throw new Error(`There were no entries found for the following binaries: ${e.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.`)}Xv=t}var UB=-1,Kv=-1;function Qse(r){UB=r}function Zse(){if(Kv===-1)throw new Error(\"WASM backend not initialized.\");return Kv}var Jse=\"4.14.0\";var eae=2;tu(\"wasm\",async()=>{let{wasm:r}=await WB();return new im(r)},eae);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 Gg=class{constructor(t){t&&(this.vendor=t.vendor,this.architecture=t.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 Hg=class{constructor(t){this.device=t,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(t,e,o=!1,n=!0){let s,a=GB(t,e);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:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t)):(s=this.device.createBuffer({size:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=t,s}releaseBuffer(t,e=!0){if(this.freeBuffers.size===0)return;let o=t.size,n=t.usage,s=GB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(t);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,e?(this.freeBuffers.get(s).push(t),this.numFreeBuffers++):(t.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((t,e)=>{t.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 GB(r,t){return`${r}_${t}`}var Kg=class{constructor(t){this.device=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(t,e,o,n){let s=KB(o),a=t*e*s,i=HB(t,e,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:[t,e],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(t){if(this.freeTextures.size===0)return;let e=t.width,o=t.height,n=t.format,s=t.usage,a=HB(e,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(t),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(t);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=KB(n),c=e*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((t,e)=>{t.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 HB(r,t,e,o){return`${r}_${t}_${e}_${o}`}function KB(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function qB(r,t){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let e=r.length,o=\"xyzwuv\",n=r.map(a=>`${t}.${o[a]}`),s=new Array(e-1);s[e-2]=n[e-1];for(let a=e-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Yr=(r,t,e)=>e===\"int32\"?`atomicAdd(${r}, bitcast(${t}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${t});\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 Ci;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})(Ci||(Ci={}));var QB=(r,t,e,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=rae(e,s,t),i=r.createShaderModule({code:a,label:t.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(c=>t.shaderKey.toLowerCase().includes(c)))&&(console.group(t.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:t.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:t.constructor.name,layout:\"auto\"})},Ae=(r,t=\"f32\")=>{switch(r){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${r}-component ${t} 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 t;switch(r.length){case 0:t=`\n fn main()\n `;break;case 1:t=`\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return t}function jB(r,t){let e;return e=`\n ${tae(t)}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(workgroup_id) WorkgroupId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n localIndex = LocalIndex;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n workgroupId = WorkgroupId;\n ${r?\"main(getGlobalIndex());\":\"main();\"};\n }\n `,e}function tae(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function rae(r,t,e){let o=[],n=e.workgroupSize[0]*e.workgroupSize[1]*e.workgroupSize[2];if(e.outputComponent=e.outputComponent?e.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 ${JB(e)?\" 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 `),e.pixelsOpType!=null){let f=e.pixelsOpType===Ci.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Cu(t.dtype,e.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Cu(r[0].dtype,e.outputComponent)}>;`,h=t.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=YB(e);return[XB,o.join(`\n`),um(t.shape),e.getUserCode(),jB(g,e)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";e.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(t.shape.length);i+=`outShape : ${p}, `,s=t.shape.length-1,a=ft(s),i+=`\n outShapeStrides: ${a}, `,e.size&&(i+=\"size : i32, \"),e.uniforms&&(i+=e.uniforms),i+=\"};\",i=cae(i),o.push(i),e.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Cu(t.dtype,e.outputComponent)}>;\n `),e.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${e.variableComponents?Cu(r[h].dtype,e.variableComponents[h]):Cu(r[h].dtype,e.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+e.variableNames.length}) var uniforms: Uniforms;\n `);let u=iae(t.shape,e.dispatchLayout),c=[XB,o.join(`\n`)+oae,um(t.shape),u,uae(t.shape.length)];e.atomic||c.push(pae(t.shape,t.dtype,e.outputComponent)),e.variableNames.forEach((f,h)=>{c.push(`${um(r[h].shape,f)}`)});let l=r.map((f,h)=>aae(f,t.shape,e.variableComponents?e.variableComponents[h]:e.outputComponent,e.dispatchLayout.x.length===t.shape.length)).join(`\n`);c.push(l),c.push(e.getUserCode());let m=YB(e);return c.push(jB(m,e)),c.join(`\n`)}function ZB(r,t,e){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];t.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(e.shape),s.push(e.dtype);let a=t.map(c=>w.getBroadcastDims(c.shape,e.shape)),i=t.map(c=>y.arraysEqual(c.shape,e.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=JB(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 XB=`\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`,oae=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function um(r,t=\"\"){let e=r.length,o=t!==\"\"?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=t!==\"\"?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:\"outShapeStrides\";if(e<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(e),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 nae(r,t){let e=r.name,o=r.shape.length,n=ft(o),s=\"get\"+e.charAt(0).toUpperCase()+e.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(t)} {\n return ${Ae(t)}(${e}[0]);\n }\n `;let p=`uniforms.${e.charAt(0).toLowerCase()+e.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(t)} {\n return ${Ae(t)}(${e}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${t===1?\"\":` / ${t}`}]);\n }\n `}function sae(r,t,e,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=t.length,u=ft(p);if(y.arraysEqual(r.shape,t)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(e)} {\n return ${Ae(e)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(e)} {\n return ${Ae(e)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${e===1?\"\":` / ${e}`}]);\n }\n `;let c=w.getBroadcastDims(r.shape,t),l=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(e)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(e)}{\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(e)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(e)}(${n}[getIndexFromCoords${h}(${d}, ${f})${e===1?\"\":` / ${e}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(e)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(e)}(${n}[getIndexFromCoords${h}(${d}, ${f})${e===1?\"\":` / ${e}`}]);\n }\n`}function aae(r,t,e,o){let n=nae(r,e);return r.shape.length<=t.length&&(n+=sae(r,t,e,o)),n}function iae(r,t){let{x:e,y:o=[],z:n=[]}=t,s=r.length,a=e.length+o.length+n.length;if(a!==s)return\"\";if(e.length===s)return`fn getOutputCoords() -> ${ft(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[e,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 uae(r){let t=\"\";switch(r){case 0:case 1:t+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:t+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:t+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:t+=`\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:t+=`\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:t+=`\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 t}function JB(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Cu(r,t=1){if(r===\"float32\")return Ae(t,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(t,\"i32\");throw new Error(`type ${r} is not supported.`)}function pae(r,t,e){let o=r.length,n=Cu(t,e),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(e,\"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(e)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${e===1?\"\":` / ${e}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(e,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${e===1?\"\":` / ${e}`}, value);\n }\n `}return s}function cae(r){let t=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(t,o=>\"@align(16) \"+o);let e=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(e,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function YB(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var Qv={};qe(Qv,{GPUBytesPerElement:()=>qg,MatMulProgramType:()=>Mo,assertNotComplex:()=>mm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>cm,computeWorkgroupInfoForMatMul:()=>Yv,computeWorkgroupSizeForConv2d:()=>pm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>lm,tilesFitEvenlyIntoShape:()=>mae});var kp=r=>{let t=1;for(let e=0;ee%r[o]===0)}function H(r,t,e=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(kp(r.x.map(i=>t[i]))/(e[0]*o[0])),r.y?Math.ceil(kp(r.y.map(i=>t[i]))/(e[1]*o[1])):1,r.z?Math.ceil(kp(r.z.map(i=>t[i]))/(e[2]*o[2])):1];return[n,s,a]}function Yv(r,t,e,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),t<=16&&e<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function pm(r,t,e=!1){if(e)return[8,8,1];let o=kp(r.x.map(s=>t[s])),n=kp(r.y.map(s=>t[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function cm(r,t,e=!1){if(e)return[4,4,1];let o=kp(r.x.map(s=>t[s])),n=kp(r.y.map(s=>t[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((t,e)=>e)}}function qg(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function lm(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function mm(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!==\"complex64\",()=>`${t} 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 dae=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),fae=(r,t)=>{let e=r.limits.maxComputeWorkgroupsPerDimension,o=t.dispatchLayout,n=t.dispatch;if(n.every(a=>a<=e))return n;y.assert(n[0]>e&&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>e?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=e,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},Kc=class r extends so{nextDataId(){return r.nextDataId++}constructor(t,e){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,!lm())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 Gg(e),this.supportTimestampQuery=this.device.features.has(\"timestamp-query\"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Hg(this.device),this.textureManager=new Kg(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:t,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,e=!1){if(!this.tensorMap.has(t))return!0;let o=this.tensorMap.get(t);return e?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(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 e=this.tensorMap.get(t);if(!(!e||!e.resource)){if(e.external){e.resource=null;return}e.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(e.resource):e.resource instanceof GPUTexture&&this.textureManager.releaseTexture(e.resource),e.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let e=this.tensorMap.get(t);e.refCount++}decRef(t){if(this.tensorMap.has(t)){let e=this.tensorMap.get(t);e.refCount--}}write(t,e,o){if(o===\"complex64\"&&t!=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:e,values:t,refCount:1}),n}move(t,e,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(t,{dtype:n,shape:o,values:e,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(e){throw new Error(e.message)}Object.keys(this.pipelineCache).map((e,o)=>{this.pipelineCache[e]=t[o]})}async getBufferData(t){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 e=t.size,o=this.bufferManager.acquireBuffer(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,o,0,e),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(t,e){let o=this.tensorMap.get(t);return o.values=e,o.values}readSync(t){let e=this.tensorMap.get(t),{values:o,complexTensorInfos:n}=e;if(o!=null||e.dtype===\"string\")return o;if(e.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(t,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=e.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=E%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,e.dtype);return this.convertAndCacheOnCPU(t,f),f}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let e=this.tensorMap.get(t),{values:o}=e;if(o!=null)return o;let n;if(e.dtype===\"complex64\"){let s=await Promise.all([this.read(e.complexTensorInfos.real.dataId),this.read(e.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(e.resource);n=y.convertBackendValuesAndArrayBuffer(s,e.dtype)}return this.convertAndCacheOnCPU(t,n),n}copyBuffer(t){let e=t.size,o=t.usage,n=this.bufferManager.acquireBuffer(e,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,e),this.submitQueue(),n}createTensorFromGPUData(t,e,o){let n=t.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:e,values:null,refCount:1,external:t.zeroCopy});let a=this.tensorMap.get(s),i=qg(a.dtype)*y.sizeFromShape(a.shape);if(t.buffer.sizey.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(t.shape,t.dtype,e)}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 e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t,e,o){return e===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,t,e),shape:t,dtype:e}}tensorToBinding(t){if(!t)return null;let o=this.tensorMap.get(t.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(t){let e=this.tensorMap.get(t);if(e.resource!=null)return;let o=qg(e.dtype)*y.sizeFromShape(e.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(e.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();e.dtype===\"int32\"||e.dtype===\"bool\"?new Int32Array(i).set(e.values):new Float32Array(i).set(e.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();e.dtype===\"int32\"||e.dtype===\"bool\"?new Int32Array(a).set(e.values):new Float32Array(a).set(e.values),n.unmap()}e.values=null}else n=this.bufferManager.acquireBuffer(o,s);e.resource=n}makeUniforms(t){let e=0,o=0,n=[],s=1;t.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),e=Math.ceil(e/u)*u,o=p.data.length,n.push(e),e+=p.data.length*4}),e=Math.ceil(e/s)*s;let a=new ArrayBuffer(e);t.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(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,e),this.uniformPendingDisposal.push(i),{offset:0,size:e,buffer:i}}runWebGPUProgram(t,e,o,n,s){if(s||(s=this.makeTensorInfo(t.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=fae(this.device,t);let a=e.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:t.variableNames[u]}});t.shaderKey=ZB(t,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=QB(this.device,t,a,s,i)),t.pipeline=this.pipelineCache[t.shaderKey],i||this.recordAndSubmit(t,s,e,n),s}recordAndSubmit(t,e,o,n){if(t.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(t.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(e).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(e.shape);s.push({type:i,data:m})}if(t.size){let m=y.sizeFromShape(t.outputShape);s.push({type:i,data:[t.outputComponent?m/t.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(e),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(e.dataId);let u=this.device.createBindGroup({layout:t.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(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(c||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||t.pixelsOpType===Ci.DRAW)&&(this.endComputePassEncoder(),c?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 e=new BigUint64Array(t.getMappedRange()),o=Number(e[1]-e[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),o}shouldExecuteOnCPU(t,e=dae){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&t.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\"},t=await navigator.gpu.requestAdapter(r),e={},o=[];t.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),t.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),e.requiredFeatures=o;let n=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(e),a=await t.requestAdapterInfo();return new Kc(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 hae=\"let resultTemp = a + b;\",gae=\"let resultTemp = atan2(a, b);\",xae=\"let resultTemp = areal * breal - aimag * bimag;\",yae=\"let resultTemp = areal * bimag + aimag * breal;\",bae=\"let resultTemp = a / b;\",Cae=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",wae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,Sae=`\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`,Iae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,vae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,kae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Nae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,Tae=\"return f32(a >= 1.0 && b >= 1.0);\",_ae=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,$ae=\"return f32(a >= 1.0 || b >= 1.0);\",Eae=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,Rae=\"let resultTemp = max(a, b);\",Dae=\"let resultTemp = min(a, b);\",Aae=`\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`,Fae=`\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`,Pae=\"let resultTemp = a * b;\",Oae=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,Mae=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,Lae=`\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`,Bae=`\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`,zae=\"if (a < 0.0) { return b * a; } return a;\",Vae=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Wae=\"let resultTemp = (a - b) * (a - b);\",Uae=\"let resultTemp = a - b;\";function qc(r,t){let e;do{switch(r){case fe.ATAN2:e=gae;break;case fe.MAX:e=Rae;break;case fe.MIN:e=Dae;break;case fe.MOD:e=t?Fae:Aae;break;case fe.NOT_EQUAL:e=t?Mae:Oae;break;case fe.POW:e=t?Bae:Lae;break;default:continue}let o,n,s;return t?(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 ${e}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:e=hae;break;case fe.COMPLEX_MULTIPLY_IMAG:e=yae;break;case fe.COMPLEX_MULTIPLY_REAL:e=xae;break;case fe.DIV:e=bae;break;case fe.ELU_DER:e=Cae;break;case fe.EQUAL:e=wae;break;case fe.FLOOR_DIV:e=Sae;break;case fe.GREATER:e=Iae;break;case fe.GREATER_EQUAL:e=vae;break;case fe.LESS:e=kae;break;case fe.LESS_EQUAL:e=Nae;break;case fe.LOGICAL_AND:return t?_ae:Tae;case fe.LOGICAL_OR:return t?Eae:$ae;case fe.MUL:e=Pae;break;case fe.PRELU:return t?Vae:zae;case fe.SQUARED_DIFFERENCE:e=Wae;break;case fe.SUB:e=Uae;break;default:}return`\n ${e}\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 Gae=\"return abs(a);\",Hae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,Kae=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,qae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,jae=\"return asinh(a);\",Xae=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,Yae=`\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`,Qae=\"return ceil(a);\",Zae=\"return cos(a);\",Jae=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,eie=\"return exp(a) - 1.0;\",tie=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",rie=`\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`,oie=`\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`,nie=\"return exp(a);\",sie=\"return floor(a);\",aie=\"return f32(!isnan(a) && !isinf(a));\",iie=\"return f32(isinf(a));\",uie=\"return f32(isnan(a));\",pie=\"return a;\",cie=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,lie=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,mie=\"return f32(!(a >= 1.0));\",die=\"return -a;\",fie=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",hie=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,gie=\"return 1.0 / a;\",xie=\"return select(a, 0.0, a < 0.0);\",yie=\"return clamp(a, 0.0, 6.0);\",bie=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",Cie=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,wie=\"return round(a);\",Sie=\"return inverseSqrt(a);\",Iie=`\n if (a >= 0.0) {\n return ${w.SELU_SCALE} * a;\n } else {\n return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,vie=\"return 1.0 / (1.0 + exp(-1.0 * a));\",kie=\"return sign(a);\",Nie=\"return sin(a);\",Tie=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,_ie=`\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`,$ie=\"return sqrt(a);\",Eie=\"return a * a;\",Rie=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,Die=\"return tan(a);\",Aie=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Fie=\"return f32(i32((a)));\";function wi(r,t){switch(r){case Z.ABS:return Gae;case Z.ACOS:return Hae;case Z.ACOSH:return Kae;case Z.ASIN:return qae;case Z.ASINH:return jae;case Z.ATAN:return Xae;case Z.ATANH:return Yae;case Z.COS:return Zae;case Z.COSH:return Jae;case Z.CEIL:return Qae;case Z.ELU:return t?rie:tie;case Z.ERF:return oie;case Z.EXP:return nie;case Z.EXPM1:return eie;case Z.FLOOR:return sie;case Z.IS_FINITE:return aie;case Z.IS_INF:return iie;case Z.IS_NAN:return uie;case Z.LINEAR:return pie;case Z.LOG:return cie;case Z.LOG1P:return lie;case Z.LOGICAL_NOT:return mie;case Z.NEG:return die;case Z.LEAKYRELU:return t?hie:fie;case Z.RECIPROCAL:return gie;case Z.RELU:return t?Cie:xie;case Z.RELU6:return t?bie:yie;case Z.ROUND:return wie;case Z.RSQRT:return Sie;case Z.SELU:return Iie;case Z.SIGMOID:return vie;case Z.SIGN:return kie;case Z.SIN:return Nie;case Z.SINH:return Tie;case Z.SOFTPLUS:return _ie;case Z.SQRT:return $ie;case Z.SQUARE:return Eie;case Z.STEP:return Rie;case Z.TAN:return Die;case Z.TANH:return Aie;case Z.TO_INT:return Fie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,t=!1,e=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=wi(Z.LINEAR);else if(r===\"relu\")n=wi(Z.RELU,e);else if(r===\"elu\")n=wi(Z.ELU,e);else if(r===\"relu6\")n=wi(Z.RELU6,e);else if(r===\"prelu\")n=qc(fe.PRELU,e);else if(r===\"sigmoid\")n=wi(Z.SIGMOID,e);else if(r===\"leakyrelu\")n=wi(Z.LEAKYRELU,e);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(e?4:1),i=\"\";return t?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 Qr(r,t){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${t?\"value = activation(value, coords);\":\"\"}\n `}function Zv(r,t,e=!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=t?\"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 ${e&&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 dm(r,t,e,o,n=!1,s=!1,a=!1,i=1){return`\n ${Zv(e,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 ${Qr(r,t)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var Pie=(r,t)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${t});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${t});\n `,Oie=(r,t,e,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 < ${e}; 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/t}; k++) {\n ${n}\n for (var i = 0; i < ${e}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function Np(r,t,e=!1,o=32,n=!1,s=32,a=!1){let i=t[1]*r[1],p=t[0]*r[0],u=e?i:o,c=e?o:i,l=u/t[0],m=o/t[1],d=r[1],f=r[0];return y.assert((e&&l===4&&r[1]===4||!e&&(l===3||l===4))&&u%t[0]===0&&o%t[1]===0&&r[0]===4,()=>`If transposeA ${e} 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]${t[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${t[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 ${Pie(e,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 ${Oie(e,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 ez=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 `,Mie=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Tp(r,t,e=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*t[1],u=r[0]*t[0],c=e?p:o,l=e?o:p;y.assert(l%t[1]===0&&c%t[0]===0&&o%t[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t[1]}`);let m=l/t[1],d=c/t[0],f=o/t[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 + ${t[1]}) {\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t[0]}) {\n ${ez(e)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${t[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${t[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 * ${t[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${e?`mm_Asub[k][localRow + innerRow * ${t[1]}];`:`mm_Asub[localRow + innerRow * ${t[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 * ${t[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let gCol = globalColStart + localCol + innerCol * ${t[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 ${ez(e)}\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 ${Mie(e)}\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 Lie=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 Bie(r,t=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let e=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) / ${e} + 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 * ${e} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${Lie(t)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${e/4}; k++) {\n let rowB = t * ${e} + 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 jg=class{constructor(t,e,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=e,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?t[1]:t[2];if(this.isVec4=(u%4===0&&!o||e[1]%4===0&&o)&&e[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=e[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Yv(e[1],u,e[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(e[1],e[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(t,e,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=t%n===0,i=e%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${dm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?Np(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Bie(this.workgroupSize,this.transposeA):Tp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function zie(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 Xg=class{constructor(t,e=!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=t,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=e,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${e}_${o}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${dm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${zie(this.workgroupSize[0])}\n `}};function Vie(r){let t=r[1],e=r[0],o=t>e?t:e;return`\n var mm_Asub : array, ${t}>;\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 Yg=class{constructor(t,e,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 ${dm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${Vie(this.workgroupSize)}\n `}};var Qg=class{constructor(t,e,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(t[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&e%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],e],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let t=this.outputComponent;return`\n ${Zv(!1,this.transposeB,!1,!1,!1,t)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(t)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n for (var i = 0; i < ${t}; i = i + 1) {\n ${Yr(\"&result[flatIndex + i]\",`${t>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${t===4?Np(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Tp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Zg=class{constructor(t,e=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],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.addBias=e!=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 ${Qr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var Jg=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : 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.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:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new Jg(o),i=[{type:\"float32\",data:[n]}];return t.runWebGPUProgram(a,[],s,i)}}var tz={kernelName:sa,backendName:\"webgpu\",kernelFunc:vt};function pe(r){let{inputs:t,attrs:e}=r,{x:o}=t,{shape:n}=e,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 rz={kernelName:da,backendName:\"webgpu\",kernelFunc:pe};function _p({a:r,b:t,transposeA:e,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=t.shape.length,l=e?r.shape[u-2]:r.shape[u-1],m=o?t.shape[c-1]:t.shape[c-2],d=e?r.shape[u-1]:r.shape[u-2],f=o?t.shape[c-2]:t.shape[c-1],h=r.shape.slice(0,-2),g=t.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Sr.assertAndGetBroadcastShape(r.shape.slice(0,-2),t.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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=[E,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 Xg(z,e,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Qg(z,m,e,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Zg(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 Yg(k,_,z,e,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new jg(k,z,e,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 Wie(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var oz={kernelName:So,backendName:\"webgpu\",kernelFunc:Wie};var fm=class{constructor(t,e,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${t}`,this.op=t}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${qc(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 Si=class{constructor(t,e,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.op=t,this.useSharedMemoryWithA=e.length<=1&&o.length>1&&e[0]<128,this.useSharedMemoryWithB=o.length<=1&&e.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:e[0],this.shaderKey=`binary_${t}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=e.length>0&&e[e.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(e)||e[e.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_${t}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let t,e=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${e}, b : ${e}) -> ${e} {\n ${qc(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);`;t=`\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 t=`\n ${o}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${e}(getAByOutputCoords(coords));\n let b = ${e}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return t}};function At(r){let{inputs:t}=r,{x:e}=t;return r.backend.incRef(e.dataId),{dataId:e.dataId,shape:e.shape,dtype:e.dtype}}var nz={kernelName:Co,backendName:\"webgpu\",kernelFunc:At};function xo(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,\"complex64\"),a=e.tensorMap.get(s.dataId),i=At({inputs:{x:o},backend:e}),p=At({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var sz={kernelName:Ri,backendName:\"webgpu\",kernelFunc:xo};var Zr=class{constructor(t,e,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=e,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${e}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${wi(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:t,dtype:e}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=e||s.dtype;if(a.shouldExecuteOnCPU([s])&&t!=null){let u=a.tensorMap.get(s.dataId),c=t(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Zr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({opType:r,cpuKernelImpl:t,supportsComplex:e=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(e&&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 Si(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new fm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new fm(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]))&&t!=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]=t(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Si(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:az,castImpl:iz,ceilImpl:uz,concatImpl:pz,equalImpl:cz,expImpl:lz,expm1Impl:mz,floorImpl:dz,floorDivImpl:fz,gatherNdImpl:hz,gatherV2Impl:gz,greaterEqualImpl:xz,greaterImpl:yz,lessEqualImpl:bz,lessImpl:Cz,logImpl:wz,maxImpl:Sz,maximumImpl:Iz,minimumImpl:vz,multiplyImpl:kz,negImpl:Nz,notEqualImpl:Tz,prodImpl:_z,rangeImpl:$z,rsqrtImpl:Ez,scatterImpl:Rz,simpleAbsImpl:Dz,sliceImpl:Az,stridedSliceImpl:Fz,stringNGramsImpl:Pz,subImpl:Oz,tileImpl:Mz,topKImpl:Lz,transposeImpl:Bz,uniqueImpl:KPt}=wc;var Uie=ye({opType:Z.ABS,cpuKernelImpl:Dz}),zz={kernelName:Xs,backendName:\"webgpu\",kernelFunc:Uie};var Gie=ye({opType:Z.ACOS}),Vz={kernelName:Vo,backendName:\"webgpu\",kernelFunc:Gie};var Hie=ye({opType:Z.ACOSH}),Wz={kernelName:Wo,backendName:\"webgpu\",kernelFunc:Hie};var Kie=et({opType:fe.ADD,cpuKernelImpl:az,supportsComplex:!0}),Uz={kernelName:io,backendName:\"webgpu\",kernelFunc:Kie};var ex=class{constructor(t){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t[0],this.variableNames=t.map((e,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 t=[];this.variableNames.forEach(n=>{t.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let e=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 ${t.join(`\n `)}\n setOutputAtIndex(flatIndex, ${e});\n }\n }\n }\n `}};function qie(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return At({inputs:{x:o[0]},backend:e});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new ex(s);return e.runWebGPUProgram(a,o,n)}var Gz={kernelName:Uo,backendName:\"webgpu\",kernelFunc:qie};var tx=class{constructor(t,e){this.variableNames=[\"A\"],this.workgroupSize=[16,16,1];let o=new Array(t.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let t=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${t} + i32(localId.x);\n var y = i32(workgroupId.y) * ${t} + 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) * ${t} + i32(localId.x);\n y = i32(workgroupId.x) * ${t} + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var rx=class{constructor(t,e){this.variableNames=[\"A\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=new Array(t);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:t.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=e,this.shaderKey=`reduce_${e}`}getUserCode(){let t=\"\",e=\"0.0\",o=this.workgroupSize[0];this.reduceType===\"min\"||this.reduceType===\"max\"?(t=`\n if (isnan(candidate)) {\n bestValue = uniforms.NAN;\n } else if (!isnan(bestValue) && candidate ${this.reduceType===\"min\"?\"<\":\">\"} bestValue)\n { bestValue = candidate; }`,e=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?t=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"?(t=\" bestValue = bestValue * candidate; \",e=\"1.0\"):this.reduceType===\"all\"?(t=\" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); \",e=\"1.0\"):this.reduceType===\"any\"&&(t=\" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); \",e=\"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 = ${e};\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 ${t}\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 ${t}\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 jie={mean:\"float32\",all:\"bool\",any:\"bool\"};function Jr(r,t,e,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(t,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;e&&(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=Sz(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=_z(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=jie[o]||oi(r.dtype),S=[{type:\"int32\",data:[h]}],k=new ox(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 Xie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,\"all\",e)}var Kz={kernelName:Go,backendName:\"webgpu\",kernelFunc:Xie};function Yie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,\"any\",e)}var qz={kernelName:Ho,backendName:\"webgpu\",kernelFunc:Yie};var jc=class{constructor(t,e,o){this.workgroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[e];this.op=o===\"min\"?\"<\":\">\";let[s,a]=w.computeOutAndReduceShapes(t,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=t,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let t=this.workgroupSize[0],e=()=>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 / ${t};\n let reduceLength = ${e()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + ${t}) {\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), ${t}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 = ${e()};\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 Qie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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 jc(p.shape,a[0],\"max\"),l=[{type:\"float32\",data:[Number.NEGATIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var jz={kernelName:Ys,backendName:\"webgpu\",kernelFunc:Qie};function Zie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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 jc(p.shape,a[0],\"min\"),l=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var Xz={kernelName:Qs,backendName:\"webgpu\",kernelFunc:Zie};var Jie=ye({opType:Z.ASIN}),Yz={kernelName:Ko,backendName:\"webgpu\",kernelFunc:Jie};var eue=ye({opType:Z.ASINH}),Qz={kernelName:qo,backendName:\"webgpu\",kernelFunc:eue};var tue=ye({opType:Z.ATAN}),Zz={kernelName:jo,backendName:\"webgpu\",kernelFunc:tue};var rue=et({opType:fe.ATAN2}),Jz={kernelName:Yo,backendName:\"webgpu\",kernelFunc:rue};var oue=ye({opType:Z.ATANH}),eV={kernelName:Xo,backendName:\"webgpu\",kernelFunc:oue};var nx=class{constructor(t){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t.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(t,e,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,e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType===\"avg\"?t=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?t=`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 }`:t=\"resultValue = max(value, resultValue);\";let e=\"resultValue\";return this.poolType===\"avg\"&&(e=\"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 ${t}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${e});`}\n }\n }\n `}},wu=class{constructor(t,e,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,e===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType===\"avg\"?t=\"resultValue += value; count += 1.0;\":this.computePositions?t=`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 }`:t=\"resultValue = max(value, resultValue);\";let e=\"resultValue\";return this.poolType===\"avg\"&&(e=\"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 ${t}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${e});`}\n }\n }\n `}};function e0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reductionIndices:s,keepDims:a}=o;return Jr(n,s,a,\"max\",e)}var tV={kernelName:zn,backendName:\"webgpu\",kernelFunc:e0};function t0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,\"mean\",e)}var rV={kernelName:Un,backendName:\"webgpu\",kernelFunc:t0};function sx(r,t,e,o){if(t.filterWidth===1&&t.filterHeight===1&&y.arraysEqual(t.inShape,t.outShape))return At({inputs:{x:r},backend:o});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.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;e===\"avg\"?p=t0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(e===\"max\",()=>`Invalid pool type ${e}`),p=e0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:t.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?n=new nx(t):(e===\"avg\"?n=new Ba(t,\"avg\"):(y.assert(e===\"max\",()=>`Invalid pool type ${e}`),n=new Ba(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]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return sx(n,c,\"avg\",e)}var oV={kernelName:Qo,backendName:\"webgpu\",kernelFunc:nue};function sue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 wu(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var nV={kernelName:Zs,backendName:\"webgpu\",kernelFunc:sue};var ax=class{constructor(t){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=t.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 `}},ix=class{constructor(t){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=t.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 aue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ix(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 e.runWebGPUProgram(m,[n],a.dtype,f)}var sV={kernelName:Ei,backendName:\"webgpu\",kernelFunc:aue};function iue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,a=s;mm([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ax(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 e.runWebGPUProgram(l,[n],a.dtype,d)}var aV={kernelName:$i,backendName:\"webgpu\",kernelFunc:iue};function uue(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var iV={kernelName:Zo,backendName:\"webgpu\",kernelFunc:uue};var ux=class{constructor(t,e){this.variableNames=[\"source\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=t,this.uniforms=`start : ${ft(t.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let t=ft(this.rank),e=pue(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.${r0[a]} = uniforms.start.${Oo(a)} + coords.${r0[a]};`),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${t};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${e}));\n }\n }\n `}},r0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function pue(r){if(r===1)return\"sourceLoc\";if(r<=6)return r0.slice(0,r).map(t=>`sourceLoc.${t}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),e.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=e.tensorMap.get(n.dataId),m=Az(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);let u=new ux(i,p),c=[{type:\"int32\",data:i}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var uV={kernelName:ha,backendName:\"webgpu\",kernelFunc:Hs};var cue=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:e,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeData(b.dataId)),x},pV={kernelName:Js,backendName:\"webgpu\",kernelFunc:cue};var lue=`\n fn bincount_write(index: i32, value: f32) {\n ${Yr(\"&result[index]\",\"value\",\"float32\")}\n }\n`,mue=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,Xc=class{constructor(t,e,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=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=e,this.hasWeights&&this.variableNames.push(\"w\"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return`\n ${this.binaryOutput?mue:lue}\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 due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=vt({backend:e,attrs:{shape:c,value:0,dtype:l}}),d=new Xc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return e.runWebGPUProgram(d,h,l,f,m)}var cV={kernelName:Jo,backendName:\"webgpu\",kernelFunc:due};var px=class{constructor(t){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",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=\"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 fue(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t;if(e.shouldExecuteOnCPU([o,n])){let c=e.tensorMap.get(o.dataId),l=e.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return e.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 px(i),u=[{type:\"int32\",data:[s]},{type:\"int32\",data:[a]}];return e.runWebGPUProgram(p,[o,n],\"int32\",u)}var lV={kernelName:ea,backendName:\"webgpu\",kernelFunc:fue};var o0=et({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:Tz}),mV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:o0};function Ii(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:e})}var dV={kernelName:Gi,backendName:\"webgpu\",kernelFunc:Ii};function fV(r,t){let e=new Zr(r.shape,Z.TO_INT),o=t.runWebGPUProgram(e,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function n0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return At({inputs:{x:n},backend:e});let a=Ur(n.shape),i=n0({inputs:{x:n},backend:e,attrs:{dtype:\"float32\"}}),p=xo({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=Ii({inputs:{input:n},backend:e}),i=n0({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.tensorMap.get(n.dataId).values,[i,p,u]=iz(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s===\"int32\")return fV(n,e);if(s===\"bool\"){let a=e.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=o0({inputs:{a:n,b:a},backend:e});return e.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var hV={kernelName:yo,backendName:\"webgpu\",kernelFunc:n0};var hue=ye({opType:Z.CEIL,cpuKernelImpl:uz}),gV={kernelName:en,backendName:\"webgpu\",kernelFunc:hue};var cx=class{constructor(t){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=t,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 lx=class{constructor(t){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : 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.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 gue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:\"float32\",data:[s]},{type:\"float32\",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new cx(n.shape):i=new lx(n.shape),e.runWebGPUProgram(i,[n],n.dtype,p)}var xV={kernelName:bo,backendName:\"webgpu\",kernelFunc:gue};var mx=class{constructor(t){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],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=\"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 yV(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function xue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.tensorMap.get(o.dataId),s=new mx(o.shape),a=[yV(o,n.complexTensorInfos.real),yV(o,n.complexTensorInfos.imag)];return e.runWebGPUProgram(s,a,a[0].dtype)}var bV={kernelName:Di,backendName:\"webgpu\",kernelFunc:xue};var dx=class{constructor(t){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((e,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=t.length-1;for(let e=0;e0){t.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;sIi({inputs:{input:C},backend:e})),h=r.map(C=>$p({inputs:{input:C},backend:e})),g=Yc(f,t,e),x=Yc(h,t,e),b=xo({inputs:{real:g,imag:x},backend:e});return f.forEach(C=>e.disposeData(C.dataId)),h.forEach(C=>e.disposeData(C.dataId)),e.disposeData(g.dataId),e.disposeData(x.dataId),b}let n=e.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(t))];return pe({inputs:{x:k},backend:e,attrs:{shape:E}})}),h=f.map(k=>({vals:e.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=pz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),t),S=e.makeTensorInfo(C,o,b);return f.forEach(k=>e.disposeData(k.dataId)),S}let s=e.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new dx(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;fe.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:e,attrs:{shape:i}});return e.disposeData(m.dataId),d}function yue(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:e,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,t)),y.sizeFromShape(s.shape.slice(t))]}})),outShape:o}}function s0(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:e}):Yc(p,s,e)}var wV={kernelName:ta,backendName:\"webgpu\",kernelFunc:s0};function bue(r,t,e,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?t&&o?`\n ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&e?`\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),E=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) -> ${E} {\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 ${Qr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var fx=class{constructor(t,e,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=t.outShape,this.isChannelsLast=t.dataFormat===\"channelsLast\",this.isVec4=((t.inChannels%4===0||t.inChannels%3===0)&&this.isChannelsLast||t.outWidth%4===0&&!this.isChannelsLast)&&t.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=pm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=cm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&t.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=e%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 t=this.isVec4?Np(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Tp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),e=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${bue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,e[0],e[1],e[2])}\n ${t}\n `}};var hx=class{constructor(t,e=!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=t.outShape,this.isChannelsLast=t.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=e,this.activation=o,this.hasPreluActivationWeights=n,e&&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 ${Qr(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 gx=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let t=this.isChannelsLast?1:2,e=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[${t}] && 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[${e}] && xCol >= 0) {\n value = ${s};\n }\n }\n setOutputAtIndex(index, value);\n }\n }\n `}};function xx(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Cue({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=e.dataFormat===\"channelsLast\",u=!p,c=!1,l=p&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type===\"VALID\",m=[],d,f;if(l){let x=e.inHeight*e.inWidth*e.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,e.batchSize,x]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,x,e.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[e.batchSize,e.inHeight*e.inWidth,e.inChannels]:[e.batchSize,e.inChannels,e.inHeight*e.inWidth]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=xx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=xx(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:e.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function wue({x:r,filter:t,convInfo:e,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}=e,C=b===\"channelsLast\",S=p*u*c,k=h*f,_=C?[e.batchSize,k,S]:[e.batchSize,S,k],E=new gx(_,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(E,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:t},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=xx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=xx(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:e.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function yx({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=e.dataFormat===\"channelsLast\",l=c&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type===\"VALID\",m=A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(l||e.filterHeight===1&&e.filterWidth===1&&e.dilationHeight===1&&e.dilationWidth===1&&e.strideHeight===1&&e.strideWidth===1&&(e.padInfo.type===\"SAME\"||e.padInfo.type===\"VALID\")))return Cue({x:r,filter:t,convInfo:e,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=e.batchSize*Math.ceil(e.outHeight*e.outWidth/32)*Math.ceil(e.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return wue({x:r,filter:t,convInfo:e,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[e.padInfo.top,e.padInfo.left],b=[{type:\"int32\",data:[e.filterHeight,e.filterWidth]},{type:\"int32\",data:[...x]},{type:\"int32\",data:[e.strideHeight,e.strideWidth]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]}];if(m)g=new hx(e,p,i,u);else{let _=c?e.outHeight*e.outWidth:e.outChannels,E=c?e.outChannels:e.outHeight*e.outWidth,R=e.filterHeight*e.filterWidth*e.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[E]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new fx(e,_,E,R,p,i,u,D)}let C=[],S=[r,t];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 Sue(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=e,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return yx({x:n,filter:s,convInfo:m,backend:o})}var SV={kernelName:tn,backendName:\"webgpu\",kernelFunc:Sue};var bx=class{constructor(t){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=t.inShape,this.isChannelsLast=t.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&t.outChannels%4===0&&t.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 t=this.isChannelsLast?1:2,e=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[${t}], coords[${e}]) - 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 `}},Cx=class{constructor(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.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 `}},wx=class{constructor(t){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=t.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 `}},Sx=class{constructor(t){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=t.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 Iue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 Cx(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 e.runWebGPUProgram(d,[n,s],n.dtype,f)}var IV={kernelName:Ai,backendName:\"webgpu\",kernelFunc:Iue};function vue(r=4){let t=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 ${t(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 Ix=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t.inShape,y.assert(t.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=t.inChannels%4===0&&t.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=pm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=cm(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 t=this.isVec4?Np(this.elementsPerThread,this.workgroupSize):Tp(this.elementsPerThread,this.workgroupSize);return`\n ${vue(this.isVec4?4:1)}\n ${t}\n `}};function kue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 bx(m);else{f=new Ix(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 e.runWebGPUProgram(f,[n,s],\"float32\",d)}var vV={kernelName:rn,backendName:\"webgpu\",kernelFunc:kue};var vx=class{constructor(t){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.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 Nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 vx(u),d=dt(n.dtype,s.dtype);return e.runWebGPUProgram(m,[n,s],d,l)}var kV={kernelName:on,backendName:\"webgpu\",kernelFunc:Nue};function Tue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new wx(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 e.runWebGPUProgram(c,[n,s],s.dtype,l)}var NV={kernelName:ja,backendName:\"webgpu\",kernelFunc:Tue};function _ue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Sx(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 e.runWebGPUProgram(c,[n,s],n.dtype,l)}var TV={kernelName:nn,backendName:\"webgpu\",kernelFunc:_ue};var $ue=ye({opType:Z.COS}),_V={kernelName:sn,backendName:\"webgpu\",kernelFunc:$ue};var Eue=ye({opType:Z.COSH}),$V={kernelName:an,backendName:\"webgpu\",kernelFunc:Eue};var kx=class{constructor(t,e,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0;let[s]=e;this.outputShape=[s,o[0],o[1],t],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[t,e]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${t} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${t} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${t}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${e} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${e} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${e}`];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 > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${e} ) {\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 Rue=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new kx(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return e.runWebGPUProgram(c,[n,s,a],\"float32\",l)},EV={kernelName:cn,backendName:\"webgpu\",kernelFunc:Rue};var Ep;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Ep||(Ep={}));var hm=class{constructor(t,e,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=t,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let t=this.outputShape.length,e=this.op===Ep.Prod?\"1.0\":\"0.0\",o=this.exclusive?e:`getX(${RV(t,\"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 = ${DV(t,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${DV(t,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${RV(t,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function RV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function DV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function Nx(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=xr({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:e});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new hm(r,p.shape,!1,s),f=l,h=[{type:\"float32\",data:[m]}];l=e.runWebGPUProgram(d,[l],l.dtype,h),e.disposeData(f.dataId)}if(n){let m=new hm(r,p.shape,n,s),d=l,f=[{type:\"float32\",data:[0]}];l=e.runWebGPUProgram(m,[l],l.dtype,f),e.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeData(l.dataId),e.disposeData(p.dataId),d}return l}function Due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Nx(Ep.Prod,n,e,s,a,i)}var AV={kernelName:un,backendName:\"webgpu\",kernelFunc:Due};function Aue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Nx(Ep.Sum,n,e,s,a,i)}var FV={kernelName:pn,backendName:\"webgpu\",kernelFunc:Aue};function Fue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{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:e,attrs:{shape:d,value:0,dtype:l}}),h=new Xc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return e.runWebGPUProgram(h,x,l,g,f)}var PV={kernelName:ra,backendName:\"webgpu\",kernelFunc:Fue};var Tx=class{constructor(t,e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${e}`,this.dataFormat=e}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 Pue(r){let{inputs:t,backend:e,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=[{type:\"int32\",data:[s]}],g=new Tx(f,a);return e.runWebGPUProgram(g,[n],n.dtype,h)}var OV={kernelName:ln,backendName:\"webgpu\",kernelFunc:Pue};var _x=class{constructor(t,e,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=t,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=e,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let t=this.filterWidth*this.filterHeight,e=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 ${t, inDims : vec2, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=t.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(t.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),e&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=t,this.addBias=e,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 t=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,e=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(${e}, ${o}) - uniforms.pads;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${t}>;\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 < ${t}; 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 ${Qr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var Zc=class{constructor(t,e=!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=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.dataFormat===\"channelsLast\",e&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=t,this.addBias=e,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let t=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 = ${t};\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 = ${t};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n }\n ${Qr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function Oue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 _x(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 Qc(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new Zc(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]})),e.runWebGPUProgram(g,[n,s],n.dtype,f)}var MV={kernelName:mn,backendName:\"webgpu\",kernelFunc:Oue};var $x=class{constructor(t){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=t.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 `}},Ex=class{constructor(t){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=t.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 Mue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(m,[n,s],\"float32\",d)}var LV={kernelName:Fi,backendName:\"webgpu\",kernelFunc:Mue};function Lue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Ex(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 e.runWebGPUProgram(m,[n,s],n.dtype,d)}var BV={kernelName:Pi,backendName:\"webgpu\",kernelFunc:Lue};var Rx=class{constructor(t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,t],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 Bue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Rx(s),p=e.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var zV={kernelName:oa,backendName:\"webgpu\",kernelFunc:Bue};var Dx=class{constructor(t){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.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 zue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 Dx(u);return e.runWebGPUProgram(m,[n,s],n.dtype,l)}var VV={kernelName:dn,backendName:\"webgpu\",kernelFunc:zue};var Ax=class{constructor(t,e){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=t.inShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.outShape,this.workgroupSize),e!==\"float32\"&&e!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${e} type.`);this.type=e,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 ${Yr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}},Fx=class{constructor(t,e,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=t.filterShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.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 ${Yr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}};function Vue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=s.dtype,m=new Fx(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:e,attrs:{shape:s.shape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var WV={kernelName:Mi,backendName:\"webgpu\",kernelFunc:Vue};function Wue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=n.dtype,m=new Ax(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:e,attrs:{shape:c.inShape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var UV={kernelName:Oi,backendName:\"webgpu\",kernelFunc:Wue};var Px=class{constructor(t,e,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=Ci.DRAW,this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=e,this.textureFormat=o,this.shaderKey=`draw_${e}_${o}`}getUserCode(){let t,e=this.type===\"float32\"?\"value\":\"value / 255.0\";return t=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${e};\n rgba[1] = ${e};\n rgba[2] = ${e};\n } else {\n rgba[d] = ${e};\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 ${t}\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 Uue(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=e.device.features.has(\"bgra8unorm-storage\")?\"bgra8unorm\":\"rgba8unorm\",m=[i,p],d=new Px(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:e.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",C=e.makeTensorInfo(m,b),S=e.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[c]}];if(e.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 e.disposeData(C.dataId),n}var GV={kernelName:_u,backendName:\"webgpu\",kernelFunc:Uue};var a0=et({opType:fe.MUL,cpuKernelImpl:kz,supportsComplex:!0}),HV={kernelName:Xn,backendName:\"webgpu\",kernelFunc:a0};function i0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,\"sum\",e)}var KV={kernelName:Ss,backendName:\"webgpu\",kernelFunc:i0};function Gue(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=i0({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeData(h.dataId);return m}var qV={kernelName:Li,backendName:\"webgpu\",kernelFunc:Gue};var Hue=ye({opType:Z.ELU}),jV={kernelName:hn,backendName:\"webgpu\",kernelFunc:Hue};var Kue=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=new Si(fe.ELU_DER,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],o.dtype)},XV={kernelName:Xa,backendName:\"webgpu\",kernelFunc:Kue};var que=et({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:cz}),YV={kernelName:xn,backendName:\"webgpu\",kernelFunc:que};var jue=ye({opType:Z.ERF}),QV={kernelName:gn,backendName:\"webgpu\",kernelFunc:jue};var Xue=ye({opType:Z.EXP,cpuKernelImpl:lz,dtype:\"float32\"}),ZV={kernelName:yn,backendName:\"webgpu\",kernelFunc:Xue};function Ox(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 JV={kernelName:na,backendName:\"webgpu\",kernelFunc:Ox};var Yue=ye({opType:Z.EXPM1,cpuKernelImpl:mz}),eW={kernelName:bn,backendName:\"webgpu\",kernelFunc:Yue};var gm=class{constructor(t,e){this.variableNames=[\"real\",\"imag\"],this.outputShape=[],this.uniforms=\"exponentMultiplier : f32, denominator: 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.component=t,this.shaderKey=`fft_${t}`}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 Mx(r,t,e){let o=e.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:e,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new gm(\"real\",u),l=new gm(\"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=t?2*Math.PI:-2*Math.PI,f=t?u[1]:1,h=[{type:\"float32\",data:[d]},{type:\"float32\",data:[f]}],g=e.runWebGPUProgram(c,m,\"float32\",h);i.push(g);let x=e.runWebGPUProgram(l,m,\"float32\",h);i.push(x);let b=xo({inputs:{real:g,imag:x},backend:e});i.push(b);let C=pe({inputs:{x:b},backend:e,attrs:{shape:r.shape}});return i.forEach(S=>e.disposeData(S.dataId)),C}function Que(r){let{inputs:t,backend:e}=r,{input:o}=t;return Mx(o,!1,e)}var tW={kernelName:Bi,backendName:\"webgpu\",kernelFunc:Que};var Lx=class{constructor(t){this.outputShape=[],this.variableNames=[\"x\"],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=\"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 rW={kernelName:Cn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new Lx(e.shape);return o.runWebGPUProgram(n,[e],e.dtype)}};var Zue=ye({opType:Z.FLOOR,cpuKernelImpl:dz}),oW={kernelName:wn,backendName:\"webgpu\",kernelFunc:Zue};var Jue=et({opType:fe.FLOOR_DIV,cpuKernelImpl:fz,dtype:\"int32\"}),nW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:Jue};var Bx=class{constructor(t,e,o=!1){this.pixelsOpType=Ci.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[e,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let t=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 = ${t};\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 sW={kernelName:Eu,backendName:\"webgpu\",kernelFunc:epe},Jc,u0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function epe(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{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=e.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Jc==null||L!==u0)&&(u0=L,Jc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:u0})),Jc.canvas.width=c,Jc.canvas.height=l,Jc.drawImage(n,0,0,c,l),n=Jc.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,O=\"rgba8unorm\",M=e.textureManager.acquireTexture(m[1],m[0],O,P);e.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let C=y.sizeFromShape(m),S=y.computeStrides(m),k=new Bx(m,s,d),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...S]}],E=e.makeTensorInfo([l,c],\"int32\"),R=e.tensorMap.get(E.dataId);R.resource=b;let D=e.runWebGPUProgram(k,[E],\"int32\",_);return e.disposeData(E.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 aW={kernelName:In,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=t,u=e,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 zx(o.shape,a.shape,i.shape,l,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function tpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 yx({x:n,filter:s,convInfo:g,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var iW={kernelName:Io,backendName:\"webgpu\",kernelFunc:tpe};function rpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 Qc(h,x,m,b),C.push({type:\"int32\",data:[S.virtualWidth]})):(S=new Zc(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,\"),e.runWebGPUProgram(S,g,\"float32\",C)}var uW={kernelName:vo,backendName:\"webgpu\",kernelFunc:rpe};var Vx=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],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=`gathernd_${t}`,this.sliceDim=t,this.uniforms=`sliceDim : i32, strides : ${ft(t)},`}getUserCode(){let t;return this.sliceDim>1?t=\"uniforms.strides[j]\":t=\"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 = ${t};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function ope(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=e.readSync(n.dataId),C=e.bufferSync(o),S=hz(b,C,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,S.values)}let f=new Vx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=e.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:p}});return e.disposeData(m.dataId),e.disposeData(d.dataId),e.disposeData(g.dataId),x}var pW={kernelName:vn,backendName:\"webgpu\",kernelFunc:ope};var Wx=class{constructor(t,e){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.slice(),this.aShape=t,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let t=npe(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(${t}));\n }\n }\n `}};function npe(r){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],e=[];for(let o=0;oe.disposeData(D.dataId)),e.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Wx(m.shape,f),g=e.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeData(b.dataId)),x}var cW={kernelName:aa,backendName:\"webgpu\",kernelFunc:p0};var spe=et({opType:fe.GREATER,cpuKernelImpl:yz,dtype:\"bool\"}),lW={kernelName:kn,backendName:\"webgpu\",kernelFunc:spe};var ape=et({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:xz}),mW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:ape};function ipe(r){let{inputs:t,backend:e}=r,{input:o}=t;return Mx(o,!0,e)}var dW={kernelName:zi,backendName:\"webgpu\",kernelFunc:ipe};var upe=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),fW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:upe};var ppe=ye({opType:Z.IS_INF,dtype:\"bool\"}),hW={kernelName:_n,backendName:\"webgpu\",kernelFunc:ppe};var cpe=ye({opType:Z.IS_NAN,dtype:\"bool\"}),gW={kernelName:$n,backendName:\"webgpu\",kernelFunc:cpe};function lpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Zr(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return e.runWebGPUProgram(i,[n],\"float32\",a)}var xW={kernelName:En,backendName:\"webgpu\",kernelFunc:lpe};var mpe=et({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:Cz}),yW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:mpe};var dpe=et({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:bz}),bW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:dpe};var Ux=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : 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.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 fpe(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=(n-o)/(s-1),i=new Ux(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return t.runWebGPUProgram(i,[],\"float32\",p)}var CW={kernelName:An,backendName:\"webgpu\",kernelFunc:fpe};var hpe=ye({opType:Z.LOG,cpuKernelImpl:wz}),wW={kernelName:Fn,backendName:\"webgpu\",kernelFunc:hpe};var gpe=ye({opType:Z.LOG1P}),SW={kernelName:Pn,backendName:\"webgpu\",kernelFunc:gpe};var xpe=et({opType:fe.LOGICAL_AND,dtype:\"bool\"}),IW={kernelName:On,backendName:\"webgpu\",kernelFunc:xpe};var ype=ye({opType:Z.LOGICAL_NOT}),vW={kernelName:Mn,backendName:\"webgpu\",kernelFunc:ype};var bpe=et({opType:fe.LOGICAL_OR}),kW={kernelName:Ln,backendName:\"webgpu\",kernelFunc:bpe};var NW=`\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`,Gx=class{constructor(t){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=t,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 ${NW}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},Hx=class{constructor(t,e){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(e<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${e}`),this.outputShape=t,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 ${NW}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function Cpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Gx(n.shape):u=new Hx(n.shape,s);let c=[{type:\"int32\",data:[s]},{type:\"float32\",data:[a]},{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var TW={kernelName:Bn,backendName:\"webgpu\",kernelFunc:Cpe};var Kx=class{constructor(t){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=t,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 wpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new Kx(n.shape),m=[{type:\"int32\",data:[i]},{type:\"float32\",data:[p]},{type:\"float32\",data:[u]},{type:\"float32\",data:[c]}];return e.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var _W={kernelName:Ya,backendName:\"webgpu\",kernelFunc:wpe};var Spe=et({opType:fe.MAX,cpuKernelImpl:Iz}),$W={kernelName:Vn,backendName:\"webgpu\",kernelFunc:Spe};function Ipe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return sx(n,c,\"max\",e)}var EW={kernelName:Wn,backendName:\"webgpu\",kernelFunc:Ipe};function vpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 wu(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var RW={kernelName:ia,backendName:\"webgpu\",kernelFunc:vpe};var qx=class{constructor(t){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=t.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 `}},jx=class{constructor(t){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=t.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 kpe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 wu(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=e.runWebGPUProgram(d,[a],\"int32\",f),g=new jx(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=e.runWebGPUProgram(g,[n,h],a.dtype,f);return e.disposeData(h.dataId),x}var DW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:kpe};function Npe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,i=s;mm([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=e.runWebGPUProgram(d,[i],\"int32\",f),g=new qx(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=e.runWebGPUProgram(g,[n,h],i.dtype,f);return e.disposeData(h.dataId),x}var AW={kernelName:Wi,backendName:\"webgpu\",kernelFunc:Npe};function Tpe(r){let{inputs:t,backend:e,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=t;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=e.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,\"max\",!0,!0,i);let f=e.runWebGPUProgram(m,[p],\"int32\",l);return[d,f]}var FW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Tpe};function _pe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,\"min\",e)}var PW={kernelName:Gn,backendName:\"webgpu\",kernelFunc:_pe};var $pe=et({opType:fe.MIN,cpuKernelImpl:vz}),OW={kernelName:Hn,backendName:\"webgpu\",kernelFunc:$pe};var Xx=class{constructor(t,e,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((n,s)=>n[0]+t[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=t,e.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let t=this.xShape.length,e=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(\",\"),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${t>1?`[${c}]`:\"\"}`).join(\",\"),n=t===1?\"start\":\"start[i]\",s=t===1?\"end\":\"end[i]\",a=t===1?\"outC\":\"outC[i]\",i=ft(t),p=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${e});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${t}; 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 MW={kernelName:Kn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=e,i=n.map(c=>({type:\"int32\",data:[c[0],c[1]]})),p=new Xx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Epe=et({opType:fe.MOD}),LW={kernelName:qn,backendName:\"webgpu\",kernelFunc:Epe};var Yx=class{constructor(t,e){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],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 Qx=class{constructor(t){this.variableNames=[\"logits\"],this.outputShape=t,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 c0(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=pe({inputs:{x:n},backend:e,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Qx(a.shape),p=e.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n.shape}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var BW={kernelName:Is,backendName:\"webgpu\",kernelFunc:c0};function Rpe(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:c0({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Yx(u,s),m=[{type:\"float32\",data:[a]},{type:\"int32\",data:[c]}],d=e.runWebGPUProgram(l,[p],\"int32\",m);return i||e.disposeData(p.dataId),d}var zW={kernelName:jn,backendName:\"webgpu\",kernelFunc:Rpe};function Dpe(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.tensorMap.get(o.dataId),[a,i]=Nz(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n=new Zr(o.shape,Z.NEG);return e.runWebGPUProgram(n,[o],o.dtype)}var VW={kernelName:pa,backendName:\"webgpu\",kernelFunc:Dpe};function Ape(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return e.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var WW={kernelName:Qn,backendName:\"webgpu\",kernelFunc:Ape};function Fpe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Vt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),e.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var UW={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Fpe};var Zx=class{constructor(t,e){this.variableNames=[\"x\"],this.uniforms=\"onValue : f32, offValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],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 Ppe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Zx(u,a),l=pe({inputs:{x:n},backend:e,attrs:{shape:[u]}}),m=[{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}],d=e.runWebGPUProgram(c,[l],s,m);e.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:e,attrs:{shape:f}});return e.disposeData(d.dataId),h}var GW={kernelName:Jn,backendName:\"webgpu\",kernelFunc:Ppe};function xm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"complex64\"){let n=Ii({inputs:{input:o},backend:e}),s=xm({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=xm({inputs:{x:a},backend:e}),p=xo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:e})}var HW={kernelName:Sa,backendName:\"webgpu\",kernelFunc:xm};function KW(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=Ii({inputs:{input:o},backend:e}),s=KW({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=xm({inputs:{x:a},backend:e}),p=xo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var qW={kernelName:ca,backendName:\"webgpu\",kernelFunc:KW};function Ope(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Ox({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Ox({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=s0({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var jW={kernelName:la,backendName:\"webgpu\",kernelFunc:Ope};function l0(r,t=!1){let e=r.length,o=ft(e),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:\"\"}`).join(\",\"),a=e>1?`${o}(${n})`:`${n}`,i=e>1?`${o}(${s})`:`${s}`,p=e>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=e>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",c=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${t?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${c}));\n }\n `}var Jx=class{constructor(t,e){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((o,n)=>o[0]+t[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),e.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=t,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${l0(this.xShape)}\n }\n }\n `}};var Mpe=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return At({inputs:{x:n},backend:e});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return vt({backend:e,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 Jx(n.shape,s);return e.runWebGPUProgram(p,[n],n.dtype,i)},XW={kernelName:es,backendName:\"webgpu\",kernelFunc:Mpe};var Lpe=et({opType:fe.POW}),YW={kernelName:ts,backendName:\"webgpu\",kernelFunc:Lpe};function Bpe(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=new Si(fe.PRELU,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],\"float32\")}var QW={kernelName:rs,backendName:\"webgpu\",kernelFunc:Bpe};function zpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,\"prod\",e)}var ZW={kernelName:os,backendName:\"webgpu\",kernelFunc:zpe};var Vpe=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=$z(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},JW={kernelName:ma,backendName:\"webgpu\",kernelFunc:Vpe};var Wpe=et({opType:fe.DIV}),eU={kernelName:fn,backendName:\"webgpu\",kernelFunc:Wpe};var Upe=ye({opType:Z.RECIPROCAL}),tU={kernelName:ns,backendName:\"webgpu\",kernelFunc:Upe};var Gpe=ye({opType:Z.RELU}),rU={kernelName:ss,backendName:\"webgpu\",kernelFunc:Gpe};var Hpe=ye({opType:Z.RELU6}),oU={kernelName:us,backendName:\"webgpu\",kernelFunc:Hpe};var ey=class{constructor(t,e,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[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 Kpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 ey(n.shape,p,u);return e.runWebGPUProgram(f,[n],\"float32\",d)}var nU={kernelName:is,backendName:\"webgpu\",kernelFunc:Kpe};var ty=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeBilinearBackprop_${e}`}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 qpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 ty(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 e.runWebGPUProgram(C,[s],s.dtype,S)}var sU={kernelName:Ja,backendName:\"webgpu\",kernelFunc:qpe};var ry=class{constructor(t,e,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let t;return this.halfPixelCenters?t=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":t=\"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 = ${t};\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 jpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 ry(n.shape,p,u,a);return e.runWebGPUProgram(f,[n],n.dtype,d)}var aU={kernelName:as,backendName:\"webgpu\",kernelFunc:jpe};var oy=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeNearestNeigborBackprop_${e}`}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 Xpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 oy(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 e.runWebGPUProgram(C,[s],s.dtype,S)}var iU={kernelName:Za,backendName:\"webgpu\",kernelFunc:Xpe};var ny=class{constructor(t){this.variableNames=[\"x\"],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.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 Ype(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length;if(a===0)return At({inputs:{x:n},backend:e});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:e,attrs:{shape:p}}),d=new ny(p),f=e.runWebGPUProgram(d,[m],m.dtype,l);e.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:e,attrs:{shape:i}});return e.disposeData(f.dataId),h}var uU={kernelName:ps,backendName:\"webgpu\",kernelFunc:Ype};var sy=class{constructor(t,e){this.outputShape=[],this.variableNames=[\"x\"],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.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=t,typeof e==\"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 pU={kernelName:Ds,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,p=new sy(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 Qpe=ye({opType:Z.ROUND}),cU={kernelName:cs,backendName:\"webgpu\",kernelFunc:Qpe};var Zpe=ye({opType:Z.RSQRT,cpuKernelImpl:Ez}),lU={kernelName:ls,backendName:\"webgpu\",kernelFunc:Zpe};var za=class{constructor(t,e,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(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.sliceDimGreaterThanOne=e>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 t=\"\";this.indicesRank===1?t=\"coords[0]\":this.indicesRank===2&&(t=\"coords[0], j\");let e=`getIndices(${t})`,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(${e}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${Cu(this.type)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${this.sumDupeIndices?Yr(\"&result[flatIndex]\",\"updateValue\",this.type):\"atomicStore(&result[flatIndex], bitcast(updateValue));\"}\n }\n }`}};function Jpe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({backend:e,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=e.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:e,attrs:{shape:a}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(S.dataId),k}var mU={kernelName:ms,backendName:\"webgpu\",kernelFunc:Jpe};var ay=class{constructor(t,e){this.outputShape=[],this.variableNames=[\"sortedSequence\",\"values\"],this.uniforms=\"numInputs : i32,\",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.side=e,this.shaderKey=`search_sorted_${e}`}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 ece(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new ay([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return e.runWebGPUProgram(i,[n,s],\"int32\",p)}var dU={kernelName:fs,backendName:\"webgpu\",kernelFunc:ece};var iy=class{constructor(t,e,o){this.variableNames=[\"c\",\"a\",\"b\"],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.cRank=t,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let t,e;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)e=\"resRC\",t=\"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(${e}));\n } else {\n setOutputAtIndex(index, getB(${e}));\n }\n }\n }\n `}};function tce(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=new iy(o.shape.length,n.shape,n.shape.length);return e.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var fU={kernelName:fa,backendName:\"webgpu\",kernelFunc:tce};var rce=ye({opType:Z.SELU}),hU={kernelName:hs,backendName:\"webgpu\",kernelFunc:rce};var oce=ye({opType:Z.SIGMOID}),gU={kernelName:bs,backendName:\"webgpu\",kernelFunc:oce};var nce=ye({opType:Z.SIGN}),xU={kernelName:ys,backendName:\"webgpu\",kernelFunc:nce};var sce=ye({opType:Z.SIN}),yU={kernelName:gs,backendName:\"webgpu\",kernelFunc:sce};var ace=ye({opType:Z.SINH}),bU={kernelName:xs,backendName:\"webgpu\",kernelFunc:ace};var ice=ye({opType:Z.SOFTPLUS}),CU={kernelName:Cs,backendName:\"webgpu\",kernelFunc:ice};var uy=class{constructor(t,e,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 t=ft(this.outputShape.length),e=Jv(this.newDim);return`\n ${um(this.paddedXShape,\"PaddedX\")}\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${t}(${e}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${l0(this.xShape,!0)}\n }\n }\n `}};var uce=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 uy(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=e.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeData(g.dataId),x},wU={kernelName:ga,backendName:\"webgpu\",kernelFunc:uce};var py=class{constructor(t,e,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.type=o,this.dispatchLayout=X([e]),this.dispatch=H(this.dispatchLayout,[e],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 ${Yr(\"&result[outIndex]\",\"value\",this.type)}\n }\n }\n `}},cy=class{constructor(t,e){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[t],this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey=\"sparseSegmentIdCountProgram\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.segmentIdsShape) {\n let segmentId = segmentIds[index];\n ${Yr(\"&result[segmentId]\",\"1\",\"int32\")}\n }\n }\n `}},ly=class{constructor(t,e){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.type=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,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 my(r,t,e,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(t.shape),u=n.readSync(e.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 py(d,f,i);let g=[{type:\"int32\",data:[a]},{type:\"int32\",data:[f]}],x=n.runWebGPUProgram(m,[r,t,e],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:\"int32\"}});m=new cy(l,e.shape);let C=n.runWebGPUProgram(m,[e],\"int32\",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new ly(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 pce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return my(o,n,s,!1,e)}var SU={kernelName:ya,backendName:\"webgpu\",kernelFunc:pce};function cce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return my(o,n,s,!0,e)}var IU={kernelName:ba,backendName:\"webgpu\",kernelFunc:cce};var dy=class{constructor(t,e){this.variableNames=[\"A\"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${t}aShape)`;let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=e.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Mz(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new dy(n.shape,s);return e.runWebGPUProgram(a,[n],n.dtype)}var vU={kernelName:uo,backendName:\"webgpu\",kernelFunc:ym};function mce(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),D=e.bufferSync(s),P=y.decodeString(e.readSync(a.dataId)[0]),O=Rz(R,D,i,m,c,u,p,l,P,d);return e.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:e,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:e,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:e}),x=g.dtype,b=e.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:e,attrs:{shape:Array(f.length).fill(1)}}),S=ym({inputs:{x:C},backend:e,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);e.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);e.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);e.runWebGPUProgram(R,[g,h],x,_,S)}}let E=pe({inputs:{x:S},backend:e,attrs:{shape:i}});return e.disposeData(h.dataId),e.disposeData(g.dataId),e.disposeData(C.dataId),e.disposeData(b.dataId),e.disposeData(S.dataId),E}var kU={kernelName:vs,backendName:\"webgpu\",kernelFunc:mce};function dce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var NU={kernelName:xa,backendName:\"webgpu\",kernelFunc:dce};var fce=ye({opType:Z.SQRT}),TU={kernelName:ws,backendName:\"webgpu\",kernelFunc:fce};var _U={kernelName:Ki,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t,n=new Zr(e.shape,Z.SQUARE);return o.runWebGPUProgram(n,[e],e.dtype)}};var hce=et({opType:fe.SQUARED_DIFFERENCE}),$U={kernelName:ks,backendName:\"webgpu\",kernelFunc:hce};function gce({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=new Zr(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[t.alpha]}];return e.runWebGPUProgram(n,[o],o.dtype,s)}var EU={kernelName:wo,backendName:\"webgpu\",kernelFunc:gce};var fy=class{constructor(t){this.variableNames=[\"x\"],this.workPerThread=1,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.workPerThread,1,1]);let e=ft(this.outputShape.length);this.uniforms=`begin : ${e}, strides : ${e}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let t=this.outputShape.length,e=\"\";if(t===1)e=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;e=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(${e}));\n }\n }\n `}};function xce(r){let{inputs:t,backend:e,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=pe({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),E=Hs({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=pe({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else if(e.shouldExecuteOnCPU([n])){let E=e.readSync(n.dataId),R=me(n.shape,n.dtype,E),D=Fz(d,R,S,b);k=e.makeTensorInfo(f,n.dtype,D.values)}else{let E=new fy(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=e.runWebGPUProgram(E,[n],n.dtype,R);k=pe({inputs:{x:D},backend:e,attrs:{shape:f}}),e.disposeData(D.dataId)}return k}var RU={kernelName:Ns,backendName:\"webgpu\",kernelFunc:xce};function yce(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=Pz(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],\"string\",f),e.makeTensorInfo(l.shape,\"int32\",h)]}var DU={kernelName:Ca,backendName:\"webgpu\",kernelFunc:yce};var bce=et({opType:fe.SUB,cpuKernelImpl:Oz,supportsComplex:!0}),AU={kernelName:Ts,backendName:\"webgpu\",kernelFunc:bce};var Cce=ye({opType:Z.TAN}),FU={kernelName:_s,backendName:\"webgpu\",kernelFunc:Cce};var wce=ye({opType:Z.TANH}),PU={kernelName:$s,backendName:\"webgpu\",kernelFunc:wce};function Sce(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:e,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:e,attrs:{shape:m}});d.push(g);let x=ym({inputs:{x:g},backend:e,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=e.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:e,attrs:{shape:n.shape}});return d.forEach(E=>e.disposeData(E.dataId)),_}var OU={kernelName:ds,backendName:\"webgpu\",kernelFunc:Sce};var hy=class{constructor(t){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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 `}},gy=class{constructor(t){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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 el(r,t){t!==null&&r.disposeData(t.dataId)}function MU(r){let t=1;for(;tf===null?[l,l]:[l,f],g=(k,_,E)=>{let R=h(),D=new hy(E),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=e.runWebGPUProgram(D,R,\"int32\",O),el(e,M)};for(let k=1;k=1;E/=2)g(_,E,[c,d])}for(let k=d;k>m;k/=2){let _=h(),E=new gy([c,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],P=f;f=e.runWebGPUProgram(E,_,\"int32\",D),el(e,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:e,attrs:{begin:0,size:[c,s]}}),el(e,x);let b=p0({inputs:{x:l,indices:f},backend:e,attrs:{axis:1,batchDims:1}});el(e,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:e}),el(e,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:e}),el(e,S),[b,f]}var LU={kernelName:Es,backendName:\"webgpu\",kernelFunc:Ice};var xy=class{constructor(t){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : 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.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 vce(r){let{inputs:t,backend:e,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 xy(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 e.runWebGPUProgram(x,[n,s],\"float32\",S)}var BU={kernelName:Rs,backendName:\"webgpu\",kernelFunc:vce};function kce(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeData(h.dataId)),f}var zU={kernelName:wa,backendName:\"webgpu\",kernelFunc:kce};var yy=class{constructor(t,e,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,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 ${Yr(\"&result[flatIndex]\",\"value\",this.type)}\n }\n }\n }\n `}};function Nce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{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:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:e,attrs:{shape:g,value:0,dtype:h}}),b=new yy(f.shape,g,h),C=[{type:\"int32\",data:[a]},{type:\"int32\",data:[y.sizeFromShape(f.shape)]}],S=e.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:e,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let E=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:e,attrs:{perm:E}})}return p.forEach(E=>e.disposeData(E.dataId)),_}var VU={kernelName:Yi,backendName:\"webgpu\",kernelFunc:Nce};var Tce=[oz,zz,Vz,Wz,Uz,Gz,Kz,qz,jz,Xz,Yz,Qz,Zz,Jz,eV,oV,nV,sV,aV,iV,pV,cV,lV,hV,gV,xV,sz,bV,wV,SV,IV,vV,kV,NV,TV,_V,$V,EV,AV,FV,PV,OV,LV,BV,MV,zV,VV,WV,UV,GV,qV,jV,XV,YV,QV,ZV,JV,eW,tW,tz,rW,sW,oW,nW,aW,iW,uW,pW,cW,lW,mW,nz,dW,CV,fW,hW,gW,xW,yW,bW,CW,SW,wW,IW,vW,kW,TW,_W,tV,$W,EW,AW,RW,DW,FW,rV,PW,OW,MW,LW,zW,HV,VW,WW,UW,mV,GW,qW,jW,XW,YW,QW,ZW,JW,dV,eU,tU,rU,oU,rz,nU,sU,aU,iU,uU,pU,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,uV,EU,RU,DU,BW,CU,wU,SU,IU,kU,NU,TU,_U,$U,AU,KV,FU,PU,OU,vU,LU,BU,Hz,zU,VU,HW];for(let r of Tce)ti(r);var WU=\"4.14.0\",_ce=\"4.14.0\",$ce=\"4.14.0\",Ece=\"4.14.0\",Rce=\"4.14.0\",Dce=\"4.14.0\",Ace={tfjs:WU,\"tfjs-core\":WU,\"tfjs-converter\":_ce,\"tfjs-backend-cpu\":$ce,\"tfjs-backend-webgl\":Ece,\"tfjs-backend-wasm\":Rce,\"tfjs-backend-webgpu\":Dce};var bQt=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Qu as AdadeltaOptimizer,Zu as AdagradOptimizer,Ju as AdamOptimizer,ep as AdamaxOptimizer,io 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,Ei as AvgPool3DGrad,$i as AvgPoolGrad,im as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,Bce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Ri as Complex,Di as ComplexAbs,ta as Concat,tn as Conv2D,Ai 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,Fi as DepthwiseConv2dNativeBackpropFilter,Pi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Mi as Dilation2DBackpropFilter,Oi as Dilation2DBackpropInput,_u as Draw,ow as ENV,Li as Einsum,hn as Elu,Xa as EluGrad,ll as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,Bi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Eu as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,xp as GPGPUContext,vn as GatherNd,aa as GatherV2,Ml as GraphModel,kn as Greater,Nn as GreaterEqual,zi as IFFT,Co as Identity,Vi as Imag,Tn as IsFinite,_n as IsInf,$n as IsNan,so as KernelBackend,Bn as LRN,Ya as LRNGrad,En as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,zce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,E0 as LogicalXor,Vce as LowerBound,hc as MathBackendCPU,Oc as MathBackendWebGL,Wce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Ui as MaxPool3DGrad,Wi as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,tp as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,kw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Dl as OptimizerConstructors,la as Pack,es as PadV2,Uce as Pool,ts as Pow,rs as Prelu,os as Prod,rp as RMSPropOptimizer,Up as RaggedGather,Gp as RaggedRange,Hp as RaggedTensorToTensor,ma as Range,hw as Rank,Gi as Real,fn as RealDiv,ns as Reciprocal,Et 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,li 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,Hi as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,Ki as Square,ks as SquaredDifference,$u as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,qi as StringSplit,ji as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,$s as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,uo as Tile,Es as TopK,Rs as Transform,po as Transpose,Xi as Unique,wa as Unpack,Yi as UnsortedSegmentSum,Gce as UpperBound,ri as Variable,Kc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Nk as acos,Tk as acosh,Ce as add,_k as addN,$k as all,Ek as any,Rk as argMax,Dk as argMin,Ak as asin,Fk as asinh,Pk as atan,Ok as atan2,Mk as atanh,md as avgPool,zk as avgPool3d,vde as backend,w as backend_util,Vk as basicLSTMCell,ru as batchNorm,Uk as batchNorm2d,Gk as batchNorm3d,Hk as batchNorm4d,dd as batchToSpaceND,fd as bincount,Kk as bitwiseAnd,E6 as booleanMaskAsync,qk as broadcastArgs,ou as broadcastTo,Sr as broadcast_util,nT as browser,me as buffer,We as cast,jk as ceil,Xk as clipByValue,Wr as clone,$r as complex,yt as concat,Yk as concat1d,Qk as concat2d,Zk as concat3d,Jk as concat4d,e2 as conv1d,nu as conv2d,t2 as conv2dTranspose,r2 as conv3d,n2 as conv3dTranspose,Zce as copyRegisteredKernels,s2 as cos,a2 as cosh,_l as cosineWindow,i2 as cumprod,u2 as cumsum,Ir as customGrad,p2 as denseBincount,Pw as deprecationWarn,c2 as depthToSpace,oc as depthwiseConv2d,A5 as deregisterOp,Ji as device_util,l2 as diag,m2 as dilation2d,dde as disableDeprecationWarnings,Ot as dispose,fde as disposeVariables,je as div,f2 as divNoNan,h2 as dot,W6 as dropout,su as einsum,yd as elu,mde as enableDebugMode,lde as enableProdMode,Qw as enclosingPowerOfTwo,ur as engine,g2 as ensureShape,A as env,xd as equal,x2 as erf,C2 as euclideanNorm,_o as exp,Ms as expandDims,w2 as expm1,bd as eye,ac as fft,Ea as fill,Sde as findBackend,Ide as findBackendFactory,Cd as floor,ld as floorDiv,LD as forceHalfFloat,Zw as fused,wd as gather,z6 as gatherND,sf as gather_util,Cde as getBackend,aw as getGradient,qp as getKernel,jm as getKernelsForBackend,Zse as getThreadsCount,lv as gpgpu_util,AK as grad,FK as grads,zu as greater,Sd as greaterEqual,Ku as ifft,iu as imag,Kj as image,G6 as inTopKAsync,mi as io,Gd as irfft,S2 as isFinite,I2 as isInf,v2 as isNaN,Er as keep,Vt as kernel_impls,Id as leakyRelu,kl as less,nc as lessEqual,qj as linalg,k2 as linspace,$8 as loadGraphModel,E8 as loadGraphModelSync,N2 as localResponseNormalization,ui as log,vd as log1p,T2 as logSigmoid,_2 as logSoftmax,Td as logSumExp,Vu as logicalAnd,_d as logicalNot,$d as logicalOr,$2 as logicalXor,jj as losses,E2 as lowerBound,Ze as matMul,eT as math,Ra as max,Rd as maxPool,R2 as maxPool3d,D2 as maxPoolWithArgmax,Dd as maximum,Wu as mean,hde as memory,A2 as meshgrid,vl as min,Uu as minimum,F2 as mirrorPad,P2 as mod,O2 as moments,A6 as movingAverage,se as mul,M2 as multiRNNCell,L2 as multinomial,pr as neg,pS as nextFrame,bQt as node,Bu as norm,Ad as notEqual,Tl as oneHot,Da as ones,B2 as onesLike,N as op,z2 as outerProduct,Aa as pad,V2 as pad1d,W2 as pad2d,U2 as pad3d,G2 as pad4d,H2 as pool,ii as pow,Pd as prelu,cd as print,K2 as prod,gde as profile,q2 as raggedGather,j2 as raggedRange,X2 as raggedTensorToTensor,Y2 as rand,x1 as randomGamma,Vd as randomNormal,y1 as randomStandardNormal,sc as randomUniform,b1 as randomUniformInt,uu as range,bde as ready,pi as real,C1 as reciprocal,tu as registerBackend,Xce as registerGradient,ti as registerKernel,D5 as registerOp,pu as relu,Wd as relu6,wde as removeBackend,W as reshape,lo as reverse,w1 as reverse1d,S1 as reverse2d,I1 as reverse3d,v1 as reverse4d,ic as rfft,Ud as round,k1 as rsqrt,ke as scalar,P6 as scatterND,lu as scatter_util,Nl as searchSorted,N1 as selu,T1 as separableConv2d,UN as serialization,yde as setBackend,kde as setPlatform,Qse as setThreadsCount,Xse as setWasmPath,Yse as setWasmPaths,kI as setWebGLContext,_1 as setdiff1dAsync,wc as shared,$a as sigmoid,$1 as sign,Hj as signal,E1 as sin,R1 as sinh,Xe as slice,D1 as slice1d,A1 as slice2d,F1 as slice3d,P1 as slice4d,pt as slice_util,O1 as softmax,Nd as softplus,Fd as spaceToBatchND,Xj as sparse,L6 as sparseToDense,Gj as spectral,ci as split,Rr as sqrt,Zt as square,Hd as squaredDifference,uc as squeeze,vr as stack,Kd as step,M1 as stridedSlice,Yj as string,Te as sub,ot as sum,oi as sumOutType,L1 as tan,Il as tanh,ar as tensor,Jt as tensor1d,cu as tensor2d,qd as tensor3d,B1 as tensor4d,z1 as tensor5d,V1 as tensor6d,U1 as tensorScatterUpdate,tk as tensor_util,g1 as test_util,De as tidy,au as tile,xde as time,G1 as topk,TGe as train,cc as transpose,H1 as truncatedNormal,K1 as unique,Qce as unregisterGradient,Yce as unregisterKernel,q1 as unsortedSegmentSum,mo as unstack,dt as upcastType,j1 as upperBound,y as util,PK as valueAndGrad,OK as valueAndGrads,X1 as variable,zw as variableGrads,Ace as version,D8 as version_converter,_X as version_core,cY as version_cpu,Jse as version_wasm,s9 as version_webgl,Cat as webgl,Tc as webgl_util,Qv as webgpu_util,co as where,Xd as whereAsync,Ur 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 /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-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.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\": {\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.21.0\",\n \"@html-eslint/parser\": \"^0.21.0\",\n \"@microsoft/api-extractor\": \"^7.38.4\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.14.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.14.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.14.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.14.0\",\n \"@tensorflow/tfjs-converter\": \"^4.14.0\",\n \"@tensorflow/tfjs-core\": \"^4.14.0\",\n \"@tensorflow/tfjs-data\": \"^4.14.0\",\n \"@tensorflow/tfjs-layers\": \"^4.14.0\",\n \"@tensorflow/tfjs-node\": \"^4.14.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.14.0\",\n \"@types/node\": \"^20.10.3\",\n \"@types/offscreencanvas\": \"^2019.7.3\",\n \"@typescript-eslint/eslint-plugin\": \"^6.13.2\",\n \"@typescript-eslint/parser\": \"^6.13.2\",\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.19.8\",\n \"eslint\": \"8.55.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^7.1.0\",\n \"eslint-plugin-import\": \"^2.29.0\",\n \"eslint-plugin-json\": \"^3.1.0\",\n \"eslint-plugin-markdown\": \"^3.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.4\",\n \"typescript\": \"~5.3.0\"\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;\nconst faceBoxScaleFactor = 1.4;\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.tf05);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n\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['scale'] || faceBoxScaleFactor);\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 irisEnlarge = 2.3;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), irisEnlarge));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\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); // 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\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAA;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;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,KAAEC,OAAI,OAAKA,MAAGD,KAAGC,KAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQA,EAAC,GAAEA,GAAE;AAAtD,IAA+D,KAAG,CAACD,KAAEC,OAAI;AAAC,WAAQ,KAAKA;AAAE,OAAGD,KAAE,GAAE,EAAC,KAAIC,GAAE,CAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAACD,KAAEC,IAAE,GAAE,MAAI;AAAC,MAAGA,MAAG,OAAOA,MAAG,YAAU,OAAOA,MAAG;AAAW,aAAQ,KAAK,GAAGA,EAAC;AAAE,OAAC,GAAG,KAAKD,KAAE,CAAC,KAAG,MAAI,KAAG,GAAGA,KAAE,GAAE,EAAC,KAAI,MAAIC,GAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAGA,IAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAOD;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,OAAK,IAAED,OAAG,OAAK,GAAG,GAAGA,GAAC,CAAC,IAAE,CAAC,GAAE,GAAGC,MAAG,CAACD,OAAG,CAACA,IAAE,aAAW,GAAG,GAAE,WAAU,EAAC,OAAMA,KAAE,YAAW,KAAE,CAAC,IAAE,GAAEA,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,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,KAAEC,IAAE,GAAE;AAAC,SAAK,MAAID,MAAE,GAAE,KAAK,OAAKC,KAAE,GAAE,KAAK,WAAS,CAAC,CAAC;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,KAAEC,IAAE;AAAC,QAAI,GAAE,GAAE;AAAE,WAAOA,MAAGD,SAAK,IAAG,IAAE,KAAGA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAG,IAAE,GAAGA,MAAGA,MAAE,KAAG,IAAE,KAAG,GAAE,IAAE,GAAE,MAAI,GAAGA,GAAC,IAAE,IAAG,OAAKA,OAAG,IAAG,IAAE,QAAMA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAG,IAAE,GAAGA,KAAEA,MAAE,IAAE,KAAG,GAAE,KAAE,GAAE,MAAI,GAAGA,GAAC,IAAE,IAAG;AAAA,EAAG;AAAC,KAAG,UAAQ;AAAG,WAAS,GAAGA,KAAEC,IAAE;AAAC,QAAG,MAAMD,GAAC;AAAE,aAAOC,KAAE,KAAG;AAAG,QAAGA,IAAE;AAAC,UAAGD,MAAE;AAAE,eAAO;AAAG,UAAGA,OAAG;AAAG,eAAO;AAAA,IAAE,OAAK;AAAC,UAAGA,OAAG,CAAC;AAAG,eAAO;AAAG,UAAGA,MAAE,KAAG;AAAG,eAAO;AAAA,IAAE;AAAC,WAAOA,MAAE,IAAE,GAAG,CAACA,KAAEC,EAAC,EAAE,IAAI,IAAE,GAAGD,MAAE,KAAG,GAAEA,MAAE,KAAG,GAAEC,EAAC;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,WAAO,IAAI,GAAGD,KAAEC,IAAE,CAAC;AAAA,EAAC;AAAC,KAAG,WAAS;AAAG,MAAI,KAAG,KAAK;AAAI,WAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,QAAGD,IAAE,WAAS;AAAE,YAAM,MAAM,cAAc;AAAE,QAAGA,QAAI,SAAOA,QAAI,cAAYA,QAAI,eAAaA,QAAI;AAAY,aAAO;AAAG,QAAG,OAAOC,MAAG,YAAU,IAAEA,IAAEA,KAAE,SAAIA,KAAE,CAAC,CAACA,IAAE,IAAE,KAAG,IAAG,IAAE,KAAG,KAAG;AAAE,YAAM,WAAW,OAAO;AAAE,QAAI;AAAE,SAAI,IAAED,IAAE,QAAQ,GAAG,KAAG;AAAE,YAAM,MAAM,iBAAiB;AAAE,QAAG,MAAI;AAAE,aAAO,GAAGA,IAAE,UAAU,CAAC,GAAEC,IAAE,CAAC,EAAE,IAAI;AAAE,aAAQ,IAAE,GAAG,GAAG,GAAE,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,GAAE,CAAC;AAAE,UAAG,IAAE,GAAE;AAAC,YAAI,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC;AAAE,YAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,MAAC;AAAM,YAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,IAAC;AAAC,WAAO,EAAE,WAASC,IAAE;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGD,KAAEC,IAAE;AAAC,WAAO,OAAOD,OAAG,WAAS,GAAGA,KAAEC,EAAC,IAAE,OAAOD,OAAG,WAAS,GAAGA,KAAEC,EAAC,IAAE,GAAGD,IAAE,KAAIA,IAAE,MAAK,OAAOC,MAAG,YAAUA,KAAED,IAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,YAAU;AAAG,MAAI,KAAG,OAAM,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,GAAE,KAAG,GAAG,EAAE,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,SAASC,IAAE;AAAC,QAAGA,KAAEA,MAAG,IAAGA,KAAE,KAAG,KAAGA;AAAE,YAAM,WAAW,OAAO;AAAE,QAAG,KAAK,OAAO;AAAE,aAAM;AAAI,QAAG,KAAK,WAAW;AAAE,UAAG,KAAK,GAAG,EAAE,GAAE;AAAC,YAAI,IAAE,GAAGA,EAAC,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAE,eAAO,EAAE,SAASA,EAAC,IAAE,EAAE,MAAM,EAAE,SAASA,EAAC;AAAA,MAAC;AAAM,eAAM,MAAI,KAAK,IAAI,EAAE,SAASA,EAAC;AAAE,aAAQ,IAAE,GAAG,GAAGA,IAAE,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,SAASA,EAAC;AAAE,UAAG,IAAE,GAAE,EAAE,OAAO;AAAE,eAAO,IAAE;AAAE,aAAK,EAAE,SAAO;AAAG,YAAE,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;AAAE,aAAO,KAAK,GAAG,EAAE,IAAE,KAAG,KAAK,IAAI,EAAE,cAAc;AAAE,aAAQA,KAAE,KAAK,QAAM,IAAE,KAAK,OAAK,KAAK,KAAI,IAAE,IAAG,IAAE,KAAG,EAAEA,KAAE,KAAG,IAAG;AAAI;AAAC,WAAO,KAAK,QAAM,IAAE,IAAE,KAAG,IAAE;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,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,KAAK,aAAWA,GAAE,YAAU,KAAK,SAAO,OAAK,KAAGA,GAAE,SAAO,OAAK,IAAE,QAAG,KAAK,SAAOA,GAAE,QAAM,KAAK,QAAMA,GAAE;AAAA,EAAG;AAAE,KAAG,KAAG,GAAG;AAAO,KAAG,YAAU,SAASA,IAAE;AAAC,WAAM,CAAC,KAAK,GAAGA,EAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,KAAG,GAAG;AAAU,KAAG,WAAS,SAASA,IAAE;AAAC,WAAO,KAAK,KAAKA,EAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAS,KAAG,kBAAgB,SAASA,IAAE;AAAC,WAAO,KAAK,KAAKA,EAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAgB,KAAG,KAAG,GAAG;AAAgB,KAAG,cAAY,SAASA,IAAE;AAAC,WAAO,KAAK,KAAKA,EAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAY,KAAG,qBAAmB,SAASA,IAAE;AAAC,WAAO,KAAK,KAAKA,EAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAmB,KAAG,KAAG,GAAG;AAAmB,KAAG,UAAQ,SAASA,IAAE;AAAC,QAAG,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,KAAK,GAAGA,EAAC;AAAE,aAAO;AAAE,QAAI,IAAE,KAAK,WAAW,GAAE,IAAEA,GAAE,WAAW;AAAE,WAAO,KAAG,CAAC,IAAE,KAAG,CAAC,KAAG,IAAE,IAAE,KAAK,WAASA,GAAE,SAAO,IAAE,KAAK,SAAO,KAAGA,GAAE,SAAO,KAAK,QAAMA,GAAE,QAAM,IAAE,KAAK,QAAM,IAAE,KAAG,IAAE,KAAK,IAAIA,EAAC,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,SAASA,IAAE;AAAC,OAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC;AAAG,QAAI,IAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAEA,GAAE,SAAO,IAAG,IAAEA,GAAE,OAAK,OAAM,IAAEA,GAAE,QAAM,IAAG,IAAEA,GAAE,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,OAAM,GAAG,KAAG,KAAG,GAAE,KAAG,KAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,WAAS,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,KAAK,IAAIA,GAAE,IAAI,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAS,KAAG,WAAS,SAASA,IAAE;AAAC,QAAG,KAAK,OAAO;AAAE,aAAO;AAAG,QAAG,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,IAAG;AAAC,UAAI,IAAE,GAAG,IAAI,KAAK,KAAI,KAAK,MAAKA,GAAE,KAAIA,GAAE,IAAI;AAAE,aAAO,GAAG,GAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAGA,GAAE,OAAO;AAAE,aAAO;AAAG,QAAG,KAAK,GAAG,EAAE;AAAE,aAAOA,GAAE,MAAM,IAAE,KAAG;AAAG,QAAGA,GAAE,GAAG,EAAE;AAAE,aAAO,KAAK,MAAM,IAAE,KAAG;AAAG,QAAG,KAAK,WAAW;AAAE,aAAOA,GAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAIA,EAAC,EAAE,IAAI;AAAE,QAAGA,GAAE,WAAW;AAAE,aAAO,KAAK,IAAIA,GAAE,IAAI,CAAC,EAAE,IAAI;AAAE,QAAG,KAAK,GAAG,EAAE,KAAGA,GAAE,GAAG,EAAE;AAAE,aAAO,GAAG,KAAK,SAAS,IAAEA,GAAE,SAAS,GAAE,KAAK,QAAQ;AAAE,QAAI,IAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAEA,GAAE,SAAO,IAAG,IAAEA,GAAE,OAAK,OAAM,IAAEA,GAAE,QAAM,IAAG,IAAEA,GAAE,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,SAASA,IAAE;AAAC,QAAG,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAGA,GAAE,OAAO;AAAE,YAAM,MAAM,kBAAkB;AAAE,QAAG,IAAG;AAAC,UAAG,CAAC,KAAK,YAAU,KAAK,SAAO,eAAaA,GAAE,QAAM,MAAIA,GAAE,SAAO;AAAG,eAAO;AAAK,UAAI,KAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAKA,GAAE,KAAIA,GAAE,IAAI;AAAE,aAAO,GAAG,GAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAG,KAAK,OAAO;AAAE,aAAO,KAAK,WAAS,KAAG;AAAG,QAAI,GAAE,GAAE;AAAE,QAAG,KAAK,UAAS;AAAC,UAAGA,GAAE,aAAWA,KAAEA,GAAE,WAAW,IAAGA,GAAE,GAAG,IAAI;AAAE,eAAO;AAAG,UAAGA,GAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAE,eAAO;AAAG,UAAE;AAAA,IAAE,OAAK;AAAC,UAAG,KAAK,GAAG,EAAE,GAAE;AAAC,YAAGA,GAAE,GAAG,EAAE,KAAGA,GAAE,GAAG,EAAE;AAAE,iBAAO;AAAG,YAAGA,GAAE,GAAG,EAAE;AAAE,iBAAO;AAAG,YAAI,IAAE,KAAK,IAAI,CAAC;AAAE,eAAO,IAAE,EAAE,IAAIA,EAAC,EAAE,IAAI,CAAC,GAAE,EAAE,GAAG,EAAE,IAAEA,GAAE,WAAW,IAAE,KAAG,MAAI,IAAE,KAAK,IAAIA,GAAE,IAAI,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,IAAIA,EAAC,CAAC,GAAE;AAAA,MAAE,WAASA,GAAE,GAAG,EAAE;AAAE,eAAO,KAAK,WAAS,KAAG;AAAG,UAAG,KAAK,WAAW;AAAE,eAAOA,GAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAIA,EAAC,EAAE,IAAI;AAAE,UAAGA,GAAE,WAAW;AAAE,eAAO,KAAK,IAAIA,GAAE,IAAI,CAAC,EAAE,IAAI;AAAE,UAAE;AAAA,IAAE;AAAC,SAAI,IAAE,MAAK,EAAE,IAAIA,EAAC,KAAG;AAAC,UAAE,KAAK,IAAI,GAAE,KAAK,MAAM,EAAE,SAAS,IAAEA,GAAE,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,IAAIA,EAAC,GAAE,EAAE,WAAW,KAAG,EAAE,GAAG,CAAC;AAAG,aAAG,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,EAAE,IAAIA,EAAC;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,SAASA,IAAE;AAAC,QAAG,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,IAAG;AAAC,UAAI,KAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAKA,GAAE,KAAIA,GAAE,IAAI;AAAE,aAAO,GAAG,GAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,WAAO,KAAK,IAAI,KAAK,IAAIA,EAAC,EAAE,IAAIA,EAAC,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,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,GAAG,KAAK,MAAIA,GAAE,KAAI,KAAK,OAAKA,GAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,KAAG,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,GAAG,KAAK,MAAIA,GAAE,KAAI,KAAK,OAAKA,GAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAE,GAAGA,EAAC,IAAG,GAAG,KAAK,MAAIA,GAAE,KAAI,KAAK,OAAKA,GAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,YAAU,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAEA,GAAE,MAAM,KAAIA,MAAG,QAAM,IAAE,OAAKA,KAAE,KAAG,GAAG,KAAK,OAAKA,IAAE,KAAK,QAAMA,KAAE,KAAK,QAAM,KAAGA,IAAE,KAAK,QAAQ,IAAE,GAAG,GAAE,KAAK,OAAKA,KAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,aAAW,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC,MAAIA,KAAEA,GAAE,MAAM,KAAIA,MAAG,QAAM,IAAE,OAAKA,KAAE,KAAG,GAAG,KAAK,QAAMA,KAAE,KAAK,QAAM,KAAGA,IAAE,KAAK,QAAMA,IAAE,KAAK,QAAQ,IAAE,GAAG,KAAK,QAAMA,KAAE,IAAG,KAAK,QAAM,IAAE,IAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAW,KAAG,qBAAmB,SAASA,IAAE;AAAC,QAAG,GAAGA,EAAC,MAAIA,KAAEA,GAAE,MAAM,IAAGA,MAAG,IAAGA,OAAI;AAAE,aAAO;AAAK,QAAI,IAAE,KAAK;AAAK,QAAGA,KAAE,IAAG;AAAC,UAAI,IAAE,KAAK;AAAI,aAAO,GAAG,MAAIA,KAAE,KAAG,KAAGA,IAAE,MAAIA,IAAE,KAAK,QAAQ;AAAA,IAAC;AAAM,aAAOA,OAAI,KAAG,GAAG,GAAE,GAAE,KAAK,QAAQ,IAAE,GAAG,MAAIA,KAAE,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,SAASA,IAAE;AAAC,WAAOA,KAAE,KAAK,UAAU,IAAE,KAAK,UAAU;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAIA,KAAE,KAAK,MAAK,IAAE,KAAK;AAAI,WAAM,CAAC,IAAE,KAAI,MAAI,IAAE,KAAI,MAAI,KAAG,KAAI,MAAI,IAAGA,KAAE,KAAIA,OAAI,IAAE,KAAIA,OAAI,KAAG,KAAIA,OAAI,EAAE;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAIA,KAAE,KAAK,MAAK,IAAE,KAAK;AAAI,WAAM,CAACA,OAAI,IAAGA,OAAI,KAAG,KAAIA,OAAI,IAAE,KAAIA,KAAE,KAAI,MAAI,IAAG,MAAI,KAAG,KAAI,MAAI,IAAE,KAAI,IAAE,GAAG;AAAA,EAAC;AAAE,KAAG,YAAU,SAASA,IAAE,GAAE,GAAE;AAAC,WAAO,IAAE,GAAG,YAAYA,IAAE,CAAC,IAAE,GAAG,YAAYA,IAAE,CAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAASA,IAAE,GAAE;AAAC,WAAO,IAAI,GAAGA,GAAE,CAAC,IAAEA,GAAE,CAAC,KAAG,IAAEA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,IAAGA,GAAE,CAAC,IAAEA,GAAE,CAAC,KAAG,IAAEA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,IAAG,CAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAASA,IAAE,GAAE;AAAC,WAAO,IAAI,GAAGA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,IAAEA,GAAE,CAAC,GAAEA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,IAAEA,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAEC,IAAE,GAAE;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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,GAAC,SAASD,KAAEC,IAAE,GAAE;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;AAAI,UAAE,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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,GAAC,SAASD,KAAEC,IAAE,GAAE;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;AAAI,UAAE,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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,GAAC,SAASD,KAAEC,IAAE,GAAE;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;AAAG,cAAE,EAAE,CAAC,IAAE;AAAA;AAAO,eAAI,IAAE,KAAG,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,cAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,KAAG,KAAG,EAAE,WAAW,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC,KAAG;AAAG,eAAK,EAAE,SAAO;AAAG,YAAE,KAAK,CAAC;AAAE,aAAI,IAAE,GAAE,IAAE,KAAG,EAAE,CAAC,MAAI,GAAE,EAAE;AAAE;AAAC,aAAI,KAAG,IAAE,IAAE,EAAE,CAAC,IAAE,KAAG,IAAE,EAAE,CAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,IAAE,KAAI,IAAE,GAAE,EAAE;AAAE,YAAE,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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,GAAC,SAASD,KAAEC,IAAE,GAAE;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;AAAE,gBAAI,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;AAAE,cAAE,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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,GAAC,SAASD,KAAEC,IAAE,GAAE;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;AAAI,UAAE,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,IAAAA,MAAGA,GAAE,UAAQA,GAAE,UAAQ,IAAE,KAAG,EAAE,MAAI,EAAE,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,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAEC,IAAE,GAAE;AAAC,QAAI,IAAE,KAAI,IAAE,GAAE,IAAE,IAAG,IAAE,UAAS,IAAE,EAAE,IAAI,GAAE,CAAC,GAAE,IAAE,EAAE,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,EAAEA,EAAC,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;AAAG,eAAG,IAAE,KAAG,GAAE,KAAG,GAAE,IAAE,EAAE,EAAE,CAAC;AAAE,eAAK,KAAG;AAAG,eAAG,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,GAAEA,EAAC,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,KAAG,EAAE,CAAC,IAAE,GAAE,KAAG;AAAA,MAAC,GAAG,GAAE,GAAE,YAAW,IAAE,EAAE,SAAO,QAAM,GAAE,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;AAAG,UAAE,CAAC,IAAE;AAAI,WAAI,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,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;AAAK,cAAE,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;AAAS,aAAI,KAAK;AAAE,cAAG;AAAC,cAAE,KAAK,EAAE,EAAE,CAAC,GAAE,IAAE,CAAC,CAAC;AAAA,UAAC,SAAO,GAAE;AAAA,UAAC;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;AAAQ,UAAE,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,EAAEC,EAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,OAAO,aAAa,MAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,OAAO,GAAEA,EAAC,GAAE,OAAO,MAAI,YAAU,GAAG,SAAQ;AAAC,SAAG,UAAQ;AAAE,UAAG;AAAC,YAAE,GAAG;AAAA,MAAC,SAAO,GAAE;AAAA,MAAC;AAAA,IAAC;AAAM,aAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,WAAU;AAAC,eAAO;AAAA,MAAC,CAAC,IAAE,EAAE,SAAO,CAAC,IAAE;AAAA,EAAC,GAAG,OAAO,QAAM,cAAY,OAAK,IAAG,CAAC,GAAE,IAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,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,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAASC,IAAE;AAAC,MAAAA,KAAEA,MAAG,CAAC;AAAE,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,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,UAAI,IAAE,OAAOA,MAAG,cAAYA,KAAE,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;AAAG;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;AAAI,kBAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG;AAAE,kBAAM,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;AAAK,SAAC,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,cAAI,IAAE,IAAI;AAAe,iBAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,KAAK,IAAI,GAAE,EAAE;AAAA,QAAY,GAAE,MAAI,IAAE,OAAG;AAAC,cAAI,IAAE,IAAI;AAAe,iBAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,eAAa,eAAc,EAAE,KAAK,IAAI,GAAE,IAAI,WAAW,EAAE,QAAQ;AAAA,QAAC,IAAG,IAAE,CAAC,GAAE,GAAE,OAAK;AAAC,cAAI,KAAG,IAAI;AAAe,aAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,gBAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,gBAAE,GAAG,QAAQ;AAAE;AAAA,YAAM;AAAC,eAAG;AAAA,UAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,QAAC,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,CAC1loB,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;AAAK,YAAE;AAAG,YAAG,KAAG,IAAE,MAAI,EAAE,UAAQ;AAAG,iBAAO,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;AAAM,kBAAI,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;AAAG,iBAAO;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;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG;AAAG;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;AAAG;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;AAAE,aAAG,EAAE,YAAW,KAAG,EAAE;AAAA,eAAe,EAAE;AAAW,aAAG,EAAE;AAAA,eAAmB,KAAG,IAAI,YAAY,OAAO,EAAC,SAAQ,KAAG,OAAM,SAAQ,OAAM,QAAO,KAAE,CAAC,GAAE,EAAE,GAAG,kBAAkB;AAAmB,cAAM,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;AAAO,eAAI,OAAO,EAAE,UAAQ,eAAa,EAAE,SAAO,CAAC,EAAE,MAAM,IAAG,EAAE,OAAO;AAAQ,eAAG,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;AAAQ,iBAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ;AAAQ,iBAAG,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;AAAG,mBAAO,IAAI,WAAW,EAAE;AAAE,cAAG;AAAE,mBAAO,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;AAAE,mBAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,kBAAG,CAAC,EAAE;AAAG,sBAAK,yCAAuC,KAAG;AAAI,qBAAO,EAAE,YAAY;AAAA,YAAC,CAAC,EAAE,MAAM,WAAU;AAAC,qBAAO,GAAG,EAAE;AAAA,YAAC,CAAC;AAAE,cAAG;AAAE,mBAAO,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,gBAAE,IAAG,SAAS,IAAG;AAAC,kBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,cAAC,GAAE,CAAC;AAAA,YAAC,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;AAAgB,cAAG;AAAC,gBAAI,KAAG,EAAE,gBAAgB,GAAE,CAAC;AAAE,mBAAO;AAAA,UAAE,SAAO,IAAG;AAAC,cAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,UAAC;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;AAAE,iBAAO;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;AAAE,iBAAO,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;AAAE,gBAAM,GAAG,CAAC,GAAE;AAAS,WAAG,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG,aAAa,MAAI,KAAG;AAAS,iBAAO;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;AAAK,aAAG,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;AAAE,aAAG,mBAAmB,CAAC;AAAE,iBAAQ,KAAK,GAAG;AAAc,YAAE,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;AAAG,YAAE,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;AAAG,YAAE,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;AAAE,iBAAO,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;AAAY,iBAAO,EAAE,qFAAqF,GAAE;AAAE,YAAI,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG,MAAI,GAAG,WAAS,KAAG;AAAI,iBAAO,GAAG,GAAE,GAAE,IAAG,EAAE;AAAE,YAAG;AAAG,iBAAO;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;AAAE,qBAAW,MAAI,GAAG,EAAE,CAAC;AAAA,iBAAU;AAAE,sBAAY,EAAC,cAAa,GAAE,KAAI,wBAAuB,OAAM,GAAE,CAAC;AAAA,aAAM;AAAC,cAAI,KAAG,GAAG,SAAS,CAAC;AAAE,cAAG,CAAC;AAAG;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;AAAK,aAAG,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;AAAE,iBAAM;AAAG,YAAI,KAAG,GAAG;AAAE,YAAG,IAAE;AAAG,iBAAM;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;AAAG,mBAAM;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;AAAE,iBAAO,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;AAAK,eAAG,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,UAAE,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;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,gBAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,kBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,UAAC;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;AAAE;AAAO,YAAG,GAAE;AAAC,YAAE,CAAC,GAAE,GAAG,GAAE,YAAY,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,GAAG,GAAE,KAAG;AAAE;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;AAAQ,aAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,SAAO;AAAG,YAAE,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;AAAY,aAAG;AAAA,eAA0B,OAAOC,MAAG;AAAY,aAAGA;AAAA;AAAO,cAAM,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,aAAOA,GAAE;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,KAAG,QAAQ,qBAAmB;AAAA;AACvi3B,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAASC,IAAE;AAAC,MAAAA,KAAEA,MAAG,CAAC;AAAE,UAAI,IAAE,OAAOA,MAAG,cAAYA,KAAE,CAAC,GAAE,GAAE;AAAE,QAAE,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,GAAE,CAAC,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,eAAO,EAAE,aAAW,EAAE,WAAW,GAAE,CAAC,IAAE,IAAE;AAAA,MAAC;AAAC,UAAI,GAAE,GAAE,GAAE;AAAE,eAAS,EAAE,GAAE;AAAC,YAAG,aAAa;AAAG;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;AAAI,kBAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG;AAAE,kBAAM,QAAQ,WAAS,GAAE;AAAG,YAAE,EAAE,GAAE,QAAQ,KAAK,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,WAAU;AAAC,iBAAM;AAAA,QAA4B;AAAA,MAAC;AAAK,SAAC,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,cAAI,KAAG,IAAI;AAAe,iBAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,KAAK,IAAI,GAAE,GAAG;AAAA,QAAY,GAAE,MAAI,IAAE,OAAG;AAAC,cAAI,KAAG,IAAI;AAAe,iBAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,eAAa,eAAc,GAAG,KAAK,IAAI,GAAE,IAAI,WAAW,GAAG,QAAQ;AAAA,QAAC,IAAG,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAI,KAAG,IAAI;AAAe,aAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,gBAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,iBAAG,GAAG,QAAQ;AAAE;AAAA,YAAM;AAAC,eAAG;AAAA,UAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,QAAC,GAAE,IAAE,OAAG,SAAS,QAAM;AAAG,UAAI,IAAE,EAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAE,EAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;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;AAAE,QAAE,eAAa,IAAE,EAAE;AAAY,UAAI,IAAE,EAAE,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;AAAK,YAAE;AAAG,YAAG,KAAG,KAAG,MAAI,EAAE,UAAQ;AAAE,iBAAO,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;AAAM,kBAAI,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;AAAG,iBAAO;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;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG;AAAG;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;AAAG;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,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,UAAS,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,EAAE;AAAO,eAAI,OAAO,EAAE,UAAQ,eAAa,EAAE,SAAO,CAAC,EAAE,MAAM,IAAG,EAAE,OAAO;AAAQ,eAAG,EAAE,OAAO,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,aAAG,MAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,EAAE;AAAQ,eAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ;AAAQ,eAAG,EAAE,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,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,KAAG;AAAG,eAAG,MAAK,GAAG;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,UAAE,WAAS,EAAE,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;AAAE,mBAAO,IAAI,WAAW,CAAC;AAAE,cAAG;AAAE,mBAAO,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;AAAE,mBAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,kBAAG,CAAC,EAAE;AAAG,sBAAK,yCAAuC,KAAG;AAAI,qBAAO,EAAE,YAAY;AAAA,YAAC,CAAC,EAAE,MAAM,WAAU;AAAC,qBAAO,GAAG,EAAE;AAAA,YAAC,CAAC;AAAE,cAAG;AAAE,mBAAO,IAAI,QAAQ,SAAS,GAAE,IAAG;AAAC,gBAAE,IAAG,SAAS,IAAG;AAAC,kBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,cAAC,GAAE,EAAE;AAAA,YAAC,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,YAAE,MAAI,IAAG,IAAE,EAAE,IAAI,QAAO,GAAG,EAAE,MAAM,GAAE,KAAG,EAAE,IAAI,2BAA0B,GAAG,EAAE,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,YAAG,EAAE;AAAgB,cAAG;AAAC,gBAAI,KAAG,EAAE,gBAAgB,GAAE,EAAE;AAAE,mBAAO;AAAA,UAAE,SAAO,IAAG;AAAC,cAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,UAAC;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;AAAG,YAAE,MAAM,EAAE,CAAC;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;AAAG,iBAAM;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;AAAG,mBAAM;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;AAAK,eAAG,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,KAAG,EAAE,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;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,gBAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,kBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,UAAC;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,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,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,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,oBAAkB,WAAU;AAAC,gBAAO,KAAG,EAAE,oBAAkB,EAAE,IAAI,kBAAkB,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,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;AAAG;AAAO,iBAAS,KAAI;AAAC,iBAAK,KAAG,MAAG,EAAE,YAAU,MAAG,CAAC,MAAI,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,GAAG;AAAA,QAAC,GAAE,CAAC,KAAG,GAAG;AAAA,MAAC;AAAC,UAAG,EAAE;AAAQ,aAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,SAAO;AAAG,YAAE,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,OAAOC,MAAG;AAAY,aAAGA;AAAA,eAAU,OAAO,iCAA+B;AAAY,aAAG;AAAA;AAAmC,cAAM,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,aAAOA,GAAE;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,YAAYA,IAAE,GAAE;AAAC,SAAK,UAAQA,IAAE,KAAK,YAAU,GAAE,KAAK,OAAK,oBAAI,WAAQ,KAAK,eAAa;AAAA,EAAC;AAAA,EAAC,IAAIA,IAAE;AAAC,WAAO,KAAK,KAAK,IAAIA,EAAC,KAAG,KAAK,UAAU,SAAS,KAAK,SAAQA,EAAC,GAAE,KAAK,KAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,IAAE,GAAE;AAAC,SAAK,gBAAe,KAAK,KAAK,IAAIA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,IAAE;AAAC,WAAO,KAAK,KAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,WAAO,KAAK,gBAAe,KAAK,KAAK,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK;AAAA,EAAY;AAAC;AAA/W,IAAiX,KAAG,MAAK;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,WAAO,GAAG,QAAQ;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,KAAKA,IAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE;AAAC,WAAO,GAAG,WAAW;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,YAAY;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,WAAO,GAAG,aAAa;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE,GAAE,GAAE;AAAC,WAAO,GAAG,OAAO;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,wBAAwBA,IAAE,GAAE,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,MAAIC,KAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,KAAE;AAAG,QAAE,KAAK,OAAO,IAAEA,KAAE,GAAEA,MAAI,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGD,IAAE,WAASC,GAAE;AAAO,UAAM,IAAI,MAAM,yEAAyED,IAAE,MAAM,2BAA2BC,GAAE,MAAM,EAAE;AAAE,MAAI,IAAED,IAAE,QAAO,IAAE;AAAE,SAAK,IAAE;AAAG,QAAE,KAAK,OAAO,IAAE,IAAE,GAAE,KAAI,GAAGA,KAAE,GAAE,CAAC,GAAE,GAAGC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAO,KAAK,IAAID,KAAE,KAAK,IAAIC,IAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI,IAAEA,MAAEA,MAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,EAAAD,IAAEC,EAAC,IAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,IAAAC,MAAGD,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,KAAK,OAAO;AAAE,SAAOA,KAAE,KAAG,IAAE,KAAGD;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAE,OAAOA,IAAE,CAAC,CAAC,IAAE,OAAOC,GAAE,CAAC,CAAC;AAAE,SAAG,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,EAAED,KAAEC,IAAE;AAAC,MAAG,CAACD;AAAE,UAAM,IAAI,MAAM,OAAOC,MAAG,WAASA,KAAEA,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,IAAG;AAAC,IAAE,GAAGD,KAAEC,EAAC,GAAE,MAAI,IAAE,WAAWD,GAAC,QAAQC,EAAC,aAAa;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,IAAEA,OAAG,MAAK,MAAI,+DAA+D;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,WAAS;AAAE,WAAO;AAAE,MAAIC,KAAED,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,IAAAC,MAAGD,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,QAAIC;AAAE,WAAM;AAAG,MAAGD,OAAG,QAAMC,MAAG,QAAMD,IAAE,WAASC,GAAE;AAAO,WAAM;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,MAAI,QAAMC,GAAE,CAAC,MAAI,QAAMD,IAAE,CAAC,MAAIC,GAAE,CAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGD,QAAIC;AAAE,WAAM;AAAG,MAAGD,OAAG,QAAMC,MAAG,QAAMD,IAAE,WAASC,GAAE;AAAO,WAAM;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,MAAIC,GAAE,CAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,KAAK,QAAM;AAAK,WAAO,KAAK,KAAKA,GAAC;AAAE,MAAGA,QAAI,IAAE;AAAE,WAAO;AAAE,MAAGA,QAAI,KAAG;AAAE,WAAM;AAAG;AAAC,QAAIC,KAAE,KAAK,IAAI,IAAED,GAAC;AAAE,YAAOC,KAAE,MAAIA,KAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,KAAK,KAAK,KAAK,KAAKD,GAAC,CAAC;AAAE,SAAM,CAACC,IAAE,KAAK,KAAKD,MAAEC,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,IAAI,YAAYD,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE;AAAE,IAAAC,GAAE,CAAC,IAAE;AAAE,SAAO,GAAGA,EAAC,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOA,MAAGD,IAAE,SAAOA,MAAEA,MAAE,IAAI,OAAOC,KAAED,IAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,OAAG,GAAE,GAAE,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,IAAEC,GAAE,CAAC;AAAE,UAAG,KAAG,QAAM,KAAG,GAAE;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,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,QAAGA,IAAE,CAAC,KAAG;AAAE,WAAGA,IAAE,CAAC;AAAA,aAAUA,IAAE,CAAC,MAAI,IAAG;AAAC,UAAG,MAAI;AAAG,cAAM,MAAM,yDAAyD,CAAC,YAAY,CAAC,EAAE;AAAE,UAAE;AAAA,IAAC,WAASA,IAAE,CAAC,IAAE;AAAE,YAAM,MAAM,gCAAgCA,IAAE,CAAC,CAAC,WAAW,CAAC,EAAE;AAAE,MAAG,MAAI,IAAG;AAAC,QAAGC,KAAE,KAAGA,OAAI;AAAE,YAAM,MAAM,QAAQA,EAAC,qCAAqCD,GAAC,EAAE;AAAE,WAAOA;AAAA,EAAC;AAAC,MAAG,MAAI;AAAE,UAAM,MAAM,qCAAqCA,GAAC,6BAA6B;AAAE,MAAGC,KAAE,MAAI;AAAE,UAAM,MAAM,wDAAwDA,EAAC,MAAM,CAAC,EAAE;AAAE,MAAI,IAAED,IAAE,MAAM;AAAE,SAAO,EAAE,CAAC,IAAEC,KAAE,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAEA,GAAE;AAAO,SAAOD,MAAEA,OAAG,OAAKC,GAAE,IAAI,CAAC,GAAE,MAAI,CAAC,IAAE,CAAC,EAAE,OAAOD,GAAC,GAAE,EAAEA,IAAE,MAAM,OAAG,KAAG,CAAC,KAAG,IAAE,CAAC,GAAE,MAAI,+CAA+C,CAAC,KAAK,CAAC,kBAAkBA,GAAC,EAAE,GAAE,EAAEA,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,GAAE,MAAI,0DAA0DA,GAAC,EAAE,GAAEA,IAAE,IAAI,OAAG,IAAE,IAAE,IAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAEA,MAAG,QAAM,MAAM,QAAQA,EAAC,KAAGA,GAAE,WAAS,GAAE,IAAEA,MAAG,QAAM,IAAE,OAAK,GAAGA,IAAED,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;AAAE,cAAM,IAAI,MAAM,sBAAsB,CAAC,mBAAmBA,IAAE,CAAC,CAAC,YAAY;AAAE,OAAC,EAAE,CAAC,KAAG,QAAM,EAAE,CAAC,IAAE,MAAIA,IAAE,CAAC,MAAI,MAAI,EAAE,KAAKA,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,CAAC,KAAG,KAAG;AAAA,IAAG;AAAC,IAAAA,IAAE,CAAC,MAAI,MAAI,EAAE,KAAKA,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,UAAS,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE;AAAK,MAAGD,OAAG,QAAMA,QAAI;AAAU,QAAE,IAAI,aAAaC,EAAC;AAAA,WAAUD,QAAI;AAAQ,QAAE,IAAI,WAAWC,EAAC;AAAA,WAAUD,QAAI;AAAO,QAAE,IAAI,WAAWC,EAAC;AAAA,WAAUD,QAAI;AAAS,QAAE,IAAI,MAAMC,EAAC;AAAA;AAAO,UAAM,IAAI,MAAM,qBAAqBD,GAAC,EAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC;AAAE,YAAM,MAAM,oBAAoBC,EAAC,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,KAAEC,IAAE;AAAC,SAAM,EAAEA,OAAI,eAAaA,OAAI,aAAWD,QAAI,eAAaC,OAAI,WAASD,QAAI,aAAWA,QAAI,eAAaC,OAAI,UAAQD,QAAI;AAAO;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI;AAAQ,WAAO;AAAE,MAAGA,QAAI;AAAY,WAAO;AAAE,MAAGA,QAAI;AAAO,WAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG;AAAK,WAAO;AAAE,MAAIC,KAAE;AAAE,SAAOD,IAAE,QAAQ,OAAGC,MAAG,EAAE,MAAM,GAAEA;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,KAAEC,IAAE;AAAC,WAAQ,IAAEA,IAAE,IAAED,KAAE,EAAE;AAAE,QAAGA,MAAE,MAAI;AAAE,aAAO;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAED,IAAE;AAAO,MAAGC,KAAE;AAAE,WAAM,CAAC;AAAE,MAAI,IAAE,IAAI,MAAMA,KAAE,CAAC;AAAE,IAAEA,KAAE,CAAC,IAAED,IAAEC,KAAE,CAAC;AAAE,WAAQ,IAAEA,KAAE,GAAE,KAAG,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,IAAI;AAAM,MAAGA,GAAE,WAAS,GAAE;AAAC,QAAI,IAAEA,GAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,EAAED,MAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEC,GAAE,CAAC,GAAE,IAAEA,GAAE,MAAM,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,GAAGD,MAAE,IAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,IAAE,OAAG;AAAC,MAAGD,IAAE,WAAS;AAAE,WAAOC,GAAE,CAAC;AAAE,MAAI,IAAED,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAG,IAAE,IAAE;AAAG,MAAG,MAAI;AAAE,WAAM,CAAC;AAAE,MAAG,MAAIC,GAAE;AAAO,UAAM,IAAI,MAAM,IAAID,GAAC,mCAAmCC,GAAE,MAAM,GAAG,IAAE,0BAAwB,EAAE,GAAG;AAAE,SAAO,GAAG,GAAED,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,MAAM,QAAQD,GAAC;AAAE,WAAOA;AAAE,MAAGC,OAAI;AAAU,WAAOD,eAAa,eAAaA,MAAE,IAAI,aAAaA,GAAC;AAAE,MAAGC,OAAI;AAAQ,WAAOD,eAAa,aAAWA,MAAE,IAAI,WAAWA,GAAC;AAAE,MAAGC,OAAI,UAAQA,OAAI;AAAS,WAAO,WAAW,KAAK,IAAI,WAAWD,GAAC,CAAC;AAAE,QAAM,IAAI,MAAM,iBAAiBC,EAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGA,MAAG,QAAMA,OAAI,aAAWA,OAAI;AAAY,WAAO,IAAI,aAAaD,GAAC;AAAE,MAAGC,OAAI;AAAQ,WAAO,IAAI,WAAWD,GAAC;AAAE,MAAGC,OAAI;AAAO,WAAO,IAAI,WAAWD,GAAC;AAAE,QAAM,IAAI,MAAM,qBAAqBC,EAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC;AAAE,MAAGC,MAAG,QAAMA,OAAI;AAAU,WAAO,GAAGD,KAAE,IAAI,aAAa,CAAC,CAAC;AAAE,MAAGC,OAAI;AAAQ,WAAO,GAAGD,KAAE,IAAI,WAAW,CAAC,CAAC;AAAE,MAAGC,OAAI;AAAO,WAAO,GAAGD,KAAE,IAAI,WAAW,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qBAAqBC,EAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,EAAAA,IAAE,QAAQ,CAAAC,OAAG;AAAC,MAAE,OAAO,UAAUA,EAAC,KAAGA,MAAG,GAAE,MAAI,0EAA0ED,GAAC,IAAI;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGA,OAAI;AAAE,WAAO;AAAE,MAAGA,OAAI;AAAE,WAAOD,IAAE,CAAC;AAAE,MAAI,IAAEA,IAAEA,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,EAAE;AAAE,SAAG,EAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGA,OAAI;AAAE,WAAM,CAAC;AAAE,MAAGA,OAAI;AAAE,WAAM,CAACD,GAAC;AAAE,MAAI,IAAE,IAAI,MAAMC,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,KAAK,MAAMD,MAAE,EAAE,CAAC,CAAC,GAAEA,OAAG,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAEA,KAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAGA,IAAE,QAAM,OAAOA,IAAE,QAAM;AAAU;AAAC,IAAI,KAAG;AAAP,IAAmB,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,SAAK,SAAOA,IAAE,KAAK,QAAM,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,iBAAe,IAAG,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,YAAU,SAAO,EAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,YAAY,KAAK,YAAY,wDAAwDA,EAAC,GAAG,IAAG,KAAK,eAAaA,IAAE,KAAK,WAAS;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE,GAAE;AAAC,QAAG,KAAK,aAAaA,EAAC,IAAE,EAAC,cAAa,GAAE,SAAQ,EAAC,GAAE,KAAK,SAASA,EAAC,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,SAASA,EAAC;AAAE,QAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,qCAAqCA,EAAC,KAAK,CAAC,GAAG,GAAE,KAAK,IAAIA,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,SAASA,IAAE;AAAC,WAAOA,MAAK,KAAK,QAAM,KAAK,MAAMA,EAAC,KAAG,KAAK,MAAMA,EAAC,IAAE,MAAM,KAAK,aAAaA,EAAC,GAAE,KAAK,MAAMA,EAAC;AAAA,EAAE;AAAA,EAAC,IAAIA,IAAE;AAAC,QAAGA,MAAK,KAAK;AAAM,aAAO,KAAK,MAAMA,EAAC;AAAE,QAAI,IAAE,KAAK,aAAaA,EAAC;AAAE,QAAG,GAAG,CAAC;AAAE,YAAM,IAAI,MAAM,QAAQA,EAAC,oEAAoE;AAAE,WAAO,KAAK,MAAMA,EAAC,IAAE,GAAE,KAAK,MAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,WAAO,KAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE;AAAC,WAAO,KAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,WAAO,KAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAIA,IAAE,GAAE;AAAC,QAAG,KAAK,aAAaA,EAAC,KAAG;AAAK,YAAM,IAAI,MAAM,mBAAmBA,EAAC,iCAAiC;AAAE,SAAK,MAAMA,EAAC,IAAE,GAAE,KAAK,aAAaA,EAAC,EAAE,WAAS,QAAM,KAAK,aAAaA,EAAC,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,QAAG,KAAK,aAAaA,EAAC,KAAG;AAAK,YAAM,IAAI,MAAM,yBAAyBA,EAAC,kCAAkC;AAAE,WAAO,KAAK,aAAaA,EAAC,EAAE,aAAa;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,SAAK,QAAM,OAAO,OAAO,CAAC,GAAEA,EAAC;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;AAAY;AAAO,QAAIA,KAAE,KAAK,eAAe,KAAK,OAAO,SAAS,MAAM;AAAE,UAAMA,MAAGA,GAAE,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,MAAIC,KAAE,CAAC;AAAE,SAAOD,IAAE,QAAQ,+BAA8B,CAAC,MAAK,OAAK,GAAGC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAG,EAAE,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,EAAAD,IAAE,mBAAmBC,EAAC,CAAC,IAAE,mBAAmB,KAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAEA,GAAE,YAAY;AAAE,SAAO,MAAI,UAAQ,MAAI,UAAQ,MAAI,SAAO,GAAG,CAAC,CAAC,OAAK,IAAE,CAAC,IAAEA;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;AAAY,MAAAA,MAAE;AAAA,aAAe,OAAO,UAAQ;AAAY,MAAAA,MAAE;AAAA,aAAe,OAAO,WAAS;AAAY,MAAAA,MAAE;AAAA,aAAgB,OAAO,QAAM;AAAY,MAAAA,MAAE;AAAA;AAAU,YAAM,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,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAG;AAAE,MAAG,EAAE,IAAID,GAAC;AAAE,WAAO,EAAE,IAAIA,GAAC;AAAE;AAAC,QAAI,IAAEC,GAAE;AAAE,WAAO,EAAE,IAAID,KAAE,CAAC,GAAE,EAAE,IAAIA,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,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,EAAC;AAAE,SAAO,GAAG,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,IAAIA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,GAAG,QAAQ,GAAE,IAAE,CAAC;AAAE,aAAO;AAAC,QAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAEA,GAAE,KAAK;AAAE,QAAG;AAAE;AAAM,QAAG,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,CAAC,IAAE,EAAE,MAAM,GAAG;AAAE,UAAID,OAAG,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,YAAWC,IAAE,aAAY,EAAC,IAAED,KAAE,IAAE,GAAGC,IAAE,CAAC;AAAE,KAAG,IAAI,CAAC,KAAG,GAAG,eAAeA,EAAC,kBAAkB,CAAC,yBAAyB,GAAE,GAAG,IAAI,GAAED,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,YAAWC,GAAC,IAAED;AAAE,KAAG,IAAIC,EAAC,KAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAG,gCAAgCA,EAAC,GAAG,GAAE,GAAG,IAAIA,IAAED,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,EAAC;AAAE,MAAG,CAAC,GAAG,IAAI,CAAC;AAAE,UAAM,IAAI,MAAM,eAAeD,GAAC,kBAAkBC,EAAC,qBAAqB;AAAE,KAAG,OAAO,CAAC;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,CAAC,GAAG,IAAIA,GAAC;AAAE,UAAM,IAAI,MAAM,iBAAiBA,GAAC,iCAAiC;AAAE,KAAG,OAAOA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE;AAAC,KAAGD,GAAC,EAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,OAAO,OAAO,CAAC,GAAE,GAAE,EAAC,aAAYC,GAAC,CAAC;AAAE,OAAG,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,GAAGA,EAAC,IAAID,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAMC,IAAEA,KAAE,CAAC;AAAE,SAAO,GAAG,UAAU,MAAM,KAAK,CAAC,GAAE,MAAG,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOA,OAAI,IAAED,MAAEA,IAAE,KAAKC,EAAC,EAAE,GAAGD,IAAE,IAAI,KAAGC,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAG,kBAAkB,GAAE;AAAC,MAAI,IAAED,IAAE,IAAIC,EAAC,EAAE,IAAI,CAAC;AAAE,MAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAAE,MAAI,IAAEA,GAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAE,SAAO,IAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,IAAIC,EAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,SAAO,GAAG,GAAGD,KAAEC,EAAC,GAAE,GAAGD,KAAEC,KAAE,CAAC,GAAE,GAAGD,KAAEC,KAAE,EAAE,GAAE,GAAGD,KAAEC,KAAE,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAED,IAAE,QAAO;AAAC,MAAGC,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,KAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAEC,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAE,WAAO,GAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAGA,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,IAAIA,KAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAO,GAAG,EAAE,IAAI,CAAC,EAAE,IAAIC,EAAC,GAAE,GAAGD,KAAEC,KAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC,MAAGA,KAAE,GAAE;AAAC,QAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAEC,MAAG,CAAC,GAAE,IAAED,IAAEC,KAAE,CAAC,GAAE,IAAE,KAAG,KAAG,IAAG,IAAEA,MAAG,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,KAAEC,KAAED,IAAE,QAAO;AAAC,MAAI,IAAE,GAAG,IAAIC,KAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAEC,KAAE,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAGD,KAAEC,KAAE,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,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAED,IAAE,QAAO;AAAC,MAAI,IAAE,GAAG,IAAIC,KAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAEC,KAAE,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAGD,KAAEC,KAAE,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,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,GAAGA,KAAE,EAAE,GAAE,IAAE,EAAE,IAAI,GAAGA,KAAEC,KAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,GAAGD,KAAEC,KAAE,EAAE,CAAC,EAAE,IAAI,CAAC;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,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAED,IAAE,QAAO;AAAC,MAAI,IAAE,GAAG,WAAW,IAAG,IAAE;AAAE,MAAGC,MAAG;AAAG,WAAOA,MAAG,KAAG,GAAGD,KAAEC,EAAC,IAAE,GAAGD,KAAEC,EAAC;AAAE,MAAGA,MAAG;AAAG,WAAO,GAAGD,KAAEC,EAAC;AAAE,MAAI,IAAE,GAAE,IAAE,EAAE,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,KAAGC,KAAE,KAAG,KAAG,IAAG,IAAE,KAAGA,KAAE,IAAE,MAAI;AAAG;AAAG,QAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGD,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,IAAIC,KAAE,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,GAAGD,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,KAAEC,IAAE;AAAC,SAAOA,OAAI,WAAS,GAAGD,GAAC,IAAE,GAAG,CAACA,GAAC,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOD,eAAa,gBAAcC,OAAI,aAAWD,eAAa,cAAYC,OAAI,WAASD,eAAa,cAAYC,OAAI;AAAM;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGA,OAAI;AAAS,UAAM,IAAI,MAAM,2CAA2C;AAAE,MAAG,MAAM,QAAQD,GAAC,MAAIA,MAAE,GAAGA,GAAC,IAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGA,KAAEC,EAAC,GAAE,GAAGD,KAAEC,EAAC;AAAE,WAAOD;AAAE,MAAGC,MAAG,QAAMA,OAAI,aAAWA,OAAI;AAAY,WAAO,IAAI,aAAaD,GAAC;AAAE,MAAGC,OAAI;AAAQ,WAAO,IAAI,WAAWD,GAAC;AAAE,MAAGC,OAAI,QAAO;AAAC,QAAI,IAAE,IAAI,WAAWD,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,WAAK,MAAMA,IAAE,CAAC,CAAC,MAAI,MAAI,EAAE,CAAC,IAAE;AAAG,WAAO;AAAA,EAAC;AAAM,UAAM,IAAI,MAAM,qBAAqBC,EAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,SAAS,IAAI;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,EAAE,EAAE,SAAS,MAAMD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,SAAQ;AAAC,SAAOA,KAAEA,MAAG,SAAQ,EAAE,EAAE,SAAS,OAAOD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,SAAQ;AAAC,SAAOA,KAAEA,MAAG,SAAQ,EAAE,EAAE,SAAS,OAAOD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,EAAE,SAAS,gBAAc,OAAK,EAAE,EAAE,SAAS,aAAaA,GAAC,IAAE,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,CAAC,GAAE,IAAE,OAAG;AAAC,MAAGA,MAAG,SAAOA,KAAE,CAAC,IAAG,OAAOD,OAAG,aAAW,OAAOA,OAAG,YAAU,OAAOA,OAAG,YAAU,GAAGA,GAAC,KAAGA,OAAG,QAAM,GAAGA,GAAC,KAAG;AAAE,IAAAC,GAAE,KAAKD,GAAC;AAAA,WAAU,MAAM,QAAQA,GAAC,KAAG,GAAGA,GAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,SAAGA,IAAE,CAAC,GAAEC,IAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE;AAAG,aAAQ,KAAK,OAAO,KAAKD,GAAC;AAAE,2BAAqB,KAAK,CAAC,MAAI,IAAE,KAAK,IAAI,GAAE,OAAO,CAAC,CAAC;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,SAAGA,IAAE,CAAC,GAAEC,IAAE,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,eAAaA,IAAE,KAAK,SAAO,GAAE,KAAG,SAAO,KAAK,SAAO,IAAI;AAAA,EAAG;AAAA,EAAC,cAAcA,IAAE,GAAE,GAAE;AAAC,QAAI,GAAE,IAAE,MAAI;AAAC,UAAE,EAAE;AAAA,IAAC,GAAE,GAAE,IAAE,GAAG;AAAE,QAAG,KAAK,aAAa,eAAe;AAAE,UAAE,KAAK,aAAa,KAAK,CAAC;AAAA,SAAM;AAAC,QAAE;AAAE,eAAQ,KAAK;AAAE,UAAE,SAAS;AAAE,UAAE,QAAQ,QAAQ,EAAC,UAAS,GAAG,IAAE,EAAC,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,8BAA8B;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,KAAK,EAAE,KAAK,OAAG;AAAC,aAAG,GAAE,EAAE,OAAMA,EAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,WAAM,EAAC,YAAWA,IAAE,SAAQ,GAAE,QAAO,GAAE,QAAO,EAAE,KAAK,OAAG,EAAE,QAAQ,GAAE,WAAU,EAAE,KAAK,OAAG,EAAE,uBAAqB,OAAK,EAAE,oBAAoB,IAAE,EAAE,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE;AAAC,QAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,QAAO,GAAE,QAAO,GAAE,WAAU,EAAC,IAAEA;AAAE,MAAE,QAAQ,OAAG;AAAC,cAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC,EAAE,KAAK,OAAG;AAAC,aAAK,OAAO,iBAAiB,GAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAGA,OAAI;AAAU,WAAM;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC;AAAE,aAAO,QAAQ,KAAK,SAAS,CAAC,sBAAsB,CAAC,GAAG,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,iBAAiBC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAG,WAAS,GAAG,GAAG,CAAC,MAAK,CAAC,IAAE,EAAE,OAAM,IAAE,GAAGA,IAAE,EAAE,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,GAAG,EAAE,MAAM,SAAS,GAAE,EAAE,GAAE,IAAE;AAAG,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,KAAG,MAAK;AAAC,YAAI,IAAE,EAAE,SAAO,EAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO;AAAI,MAAEA,GAAE,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,IAAEC,GAAE,QAAO;AAAI,YAAG,EAAE,EAAE,EAAE,GAAE;AAAC,YAAE,QAAQ,QAAQ,OAAG,EAAE,EAAE,EAAE,IAAE,IAAE,GAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,QAAK;AAAC,UAAG;AAAE;AAAA,IAAK;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,IAAE,EAAE,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;AAAI,UAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAE;AAAC,iBAAQ,KAAK;AAAE,YAAE,EAAE,CAAC,EAAE,EAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,MAAK;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,KAAEC,IAAE,GAAE,GAAE;AAAC,WAAQ,IAAEA,GAAE,SAAO,GAAE,KAAG,GAAE,KAAI;AAAC,QAAI,IAAEA,GAAE,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;AAAK,YAAM,IAAI,MAAM,4DAA4D,EAAE,UAAU,GAAG;AAAE,QAAI,IAAE,EAAE,SAAS,CAAC;AAAE,aAAQ,KAAK,EAAE,QAAO;AAAC,UAAG,EAAE,KAAK;AAAG,cAAM,IAAI,MAAM,iCAAiC,CAAC,gCAAgC,OAAO,KAAK,CAAC,CAAC,GAAG;AAAE,UAAI,IAAE,EAAE,MAAI,EAAE,CAAC,EAAE,CAAC;AAAE,UAAG,EAAE,UAAQ;AAAU,cAAM,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;AAAE,cAAM,IAAI,MAAM,4BAA4B,EAAE,UAAU,4BAA4B,CAAC,gBAAgB,EAAE,KAAK,mDAAmD,EAAE,KAAK,GAAG;AAAE,UAAGA,IAAE,EAAE,EAAE,KAAG;AAAK,QAAAA,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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,EAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,QAAO,IAAE,GAAGD,KAAEC,IAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,QAAQ;AAAE,SAAO,MAAI,EAAE,KAAK,YAAY,CAAC,EAAE,GAAE,EAAE,KAAK,WAAW,CAAC,EAAE,GAAE,EAAE,KAAK,aAAaA,EAAC,GAAG,GAAE,EAAE,KAAK,WAAW,IAAG,EAAE,KAAK,EAAE,IAAI,OAAG,SAAO,CAAC,EAAE,KAAK;AAAA,CACjs+C,CAAC,GAAE,EAAE,KAAK;AAAA,CACV;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,EAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAEA,GAAE,QAAO,IAAE,MAAI,cAAY,GAAGD,GAAC,IAAEA;AAAE,MAAG,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,CAAC,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,GAAG,EAAE,IAAE,CAAC,GAAE,GAAE,CAAC,EAAE,MAAM;AAAA,IAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;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,MAAI,MAAI,SAAO,IAAE,GAAGA,GAAC,IAAE,IAAE,WAAWA,IAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,GAAG,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,QAAI,IAAE,UAAQ;AAAM;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,MAAI,cAAY,IAAE,GAAE,IAAEA,GAAE,CAAC,GAAE,IAAEA,GAAE;AAAO,MAAG,MAAI,GAAE;AAAC,QAAG,MAAI,aAAY;AAAC,UAAI,IAAE,GAAGD,GAAC;AAAE,aAAM,CAAC,GAAG,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,WAAO,MAAI,SAAO,CAAC,GAAGA,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,aAAO,MAAI,gBAAc,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,IAAG,CAAC,MAAI,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,CAAC,EAAE,KAAK,IAAI,IAAE,YAAU,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,IAAE,KAAG,CAAC,GAAE,CAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,IAAC;AAAC,WAAM,CAAC,OAAK,MAAI,cAAY,GAAGA,GAAC,IAAE,MAAM,KAAKA,GAAC,GAAG,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,EAAC;AAAC,MAAI,IAAEC,GAAE,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,GAAE,GAAE,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,GAAGA,IAAE,MAAM,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,IAAC;AAAA,EAAC;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGA,IAAE,MAAM,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,IAAC;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;AAAI,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAE,MAAI,IAAE;AAAA;AACz2C,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,SAAG;AAAA;AACvB,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,MAAI,EAAE,EAAE,SAAO,CAAC,IAAE,OAAK,IAAE,KAAG,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG;AAAE,IAAAC,GAAE,KAAK,CAACD,IAAE,CAAC,GAAEA,IAAE,IAAE,CAAC,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,QAAG,KAAK,QAAM,GAAE,KAAK,QAAMA,GAAE,MAAM,GAAE,KAAK,OAAK,GAAGA,EAAC,GAAE,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE;AAAO,QAAE,MAAI,KAAK,MAAK,MAAI,qBAAqB,CAAC,oDAAoD,KAAK,IAAI,IAAI;AAAA,IAAC;AAAC,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,4JAA4J;AAAE,SAAK,SAAO,KAAG,GAAG,GAAE,KAAK,IAAI,GAAE,KAAK,UAAQ,GAAGA,EAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,OAAK,GAAE;AAAC,MAAE,WAAS,MAAI,IAAE,CAAC,CAAC,IAAG,EAAE,EAAE,WAAS,KAAK,MAAK,MAAI,uCAAuC,EAAE,MAAM,0BAA0B,KAAK,IAAI,GAAG;AAAE,QAAI,IAAE,KAAK,WAAW,CAAC;AAAE,SAAK,OAAO,CAAC,IAAEA;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,IAAAA,GAAE,WAAS,MAAIA,KAAE,CAAC,CAAC;AAAG,QAAI,IAAE;AAAE,aAAQ,KAAKA,IAAE;AAAC,UAAG,IAAE,KAAG,KAAG,KAAK,MAAM,CAAC,GAAE;AAAC,YAAI,IAAE,qCAAqCA,EAAC,oBAAoB,KAAK,KAAK;AAAG,cAAM,IAAI,MAAM,CAAC;AAAA,MAAC;AAAC;AAAA,IAAG;AAAC,QAAI,IAAEA,GAAEA,GAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,SAAO,GAAE,EAAE;AAAE,WAAG,KAAK,QAAQ,CAAC,IAAEA,GAAE,CAAC;AAAE,WAAO,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAO;AAAE,QAAG,KAAK,SAAO;AAAE,aAAOA,GAAE,CAAC;AAAE,QAAI,IAAEA,GAAEA,GAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,SAAO,GAAE,EAAE;AAAE,WAAG,KAAK,QAAQ,CAAC,IAAEA,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM,CAAC;AAAE,QAAG,KAAK,SAAO;AAAE,aAAM,CAACA,EAAC;AAAE,QAAI,IAAE,IAAI,MAAM,KAAK,MAAM,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,QAAE,CAAC,IAAE,KAAK,MAAMA,KAAE,KAAK,QAAQ,CAAC,CAAC,GAAEA,MAAG,EAAE,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAO,EAAE,EAAE,SAAO,CAAC,IAAEA,IAAE;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,YAAYC,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAK,OAAG,KAAK,qBAAmB,OAAG,KAAK,QAAMA,GAAE,MAAM,GAAE,KAAK,QAAM,KAAG,WAAU,KAAK,OAAK,GAAGA,EAAC,GAAE,KAAK,UAAQ,GAAGA,EAAC,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,QAAIA,KAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAM,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,QAAIA,KAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,KAAK,OAAMA,IAAE,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,QAAIA,KAAE,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ,UAAS;AAAC,UAAI,IAAE,MAAMA;AAAE,UAAG;AAAC,eAAO,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,+FAA+F;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,UAAU,KAAK,QAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,SAAK,gBAAgB;AAAE,QAAIA,KAAE,GAAG,EAAE,SAAS,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ;AAAS,UAAG;AAAC,eAAOA,GAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,+FAA+F;AAAA,MAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,SAAK,gBAAgB;AAAE,QAAIA,KAAE,MAAM,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,WAAO,KAAK,UAAQ,WAASA,KAAE,IAAI,WAAWA,GAAE,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;AAAW,YAAM,IAAI,MAAM,qBAAqB;AAAA,EAAC;AAAA,EAAC,MAAMA,KAAE,OAAG;AAAC,WAAO,GAAG,MAAM,MAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,QAAO;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,MAAM,IAAI;AAAA,EAAC;AAAA,EAAC,SAASA,KAAE,OAAG;AAAC,QAAI,IAAE,KAAK,SAAS;AAAE,WAAO,GAAG,GAAE,KAAK,OAAM,KAAK,OAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,MAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,KAAE,MAAG,GAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,aAAa,MAAKA,IAAE,GAAE,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,YAAYC,IAAE,GAAE,GAAE,GAAE;AAAC,UAAMA,GAAE,OAAMA,GAAE,OAAMA,GAAE,QAAO,CAAC,GAAE,KAAK,YAAU,GAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAGA,GAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,2BAA2BA,GAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,QAAG,CAAC,GAAGA,GAAE,OAAM,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,2BAA2BA,GAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,OAAG,EAAE,cAAc,IAAI,GAAE,KAAK,SAAOA,GAAE,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,KAAEC,IAAE;AAAC,MAAGD,QAAI,YAAUC,OAAI,UAAS;AAAC,QAAGD,QAAI,YAAUC,OAAI;AAAS,aAAM;AAAS,UAAM,IAAI,MAAM,kBAAkBD,GAAC,SAASC,EAAC,EAAE;AAAA,EAAC;AAAC,SAAO,GAAGD,GAAC,EAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,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,KAAEC,IAAE;AAAC,MAAGD,IAAE,UAAQC,GAAE;AAAM,WAAM,CAACD,KAAEC,EAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,OAAMC,GAAE,KAAK;AAAE,SAAM,CAACD,IAAE,KAAK,CAAC,GAAEC,GAAE,KAAK,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,IAAED,IAAE,UAAQC,GAAE,OAAM,MAAI,2BAA2BD,IAAE,KAAK,gBAAgBC,GAAE,KAAK,oBAAoB;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOA,GAAE,KAAK,OAAG,EAAE,OAAKD,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,CAAC;AAAE,SAAO,GAAGD,KAAEC,IAAE,oBAAI,KAAG,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAGD,OAAG;AAAK;AAAO,MAAGA,eAAa,IAAG;AAAC,IAAAC,GAAE,KAAKD,GAAC;AAAE;AAAA,EAAM;AAAC,MAAG,CAAC,GAAGA,GAAC;AAAE;AAAO,MAAI,IAAEA;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,IAAI,CAAC,MAAI,EAAE,IAAI,CAAC,GAAE,GAAG,GAAEC,IAAE,CAAC;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,CAAAC,OAAGA,GAAE,IAAI,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQA,MAAK,KAAK;AAAoB,WAAK,oBAAoBA,EAAC,EAAE,QAAQ;AAAA,EAAC;AAAC;AAApiB,IAAsiB,KAAG,MAAM,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,MAAIA,IAAE,KAAK,WAAS,CAAC,GAAE,KAAK,kBAAgB,CAAC,GAAE,KAAK,uBAAqB,GAAE,KAAK,QAAM,IAAI;AAAA,EAAE;AAAA,EAAC,MAAM,QAAO;AAAC,QAAG,KAAK,sBAAoB;AAAK,aAAO,KAAK,mBAAmB,KAAK,MAAI;AAAA,MAAC,CAAC;AAAE,QAAG,KAAK,mBAAiB;AAAK;AAAO,QAAIA,KAAE,KAAK,kBAAkB;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;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;AAAK,YAAM,IAAI,MAAM,YAAY,KAAK,WAAW,qHAAqH;AAAE,QAAG,KAAK,mBAAiB,MAAK;AAAC,UAAG,EAAC,MAAKA,IAAE,WAAU,EAAC,IAAE,KAAK,gCAAgC;AAAE,UAAG;AAAE,cAAM,IAAI,MAAM,iCAAiCA,EAAC,qHAAqH;AAAE,WAAK,WAAWA,EAAC;AAAA,IAAC;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,eAAc;AAAC,WAAO,OAAO,KAAK,KAAK,eAAe;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAG,EAAEA,MAAK,KAAK;AAAU,UAAGA,MAAK,KAAK,iBAAgB;AAAC,YAAG,EAAC,WAAU,EAAC,IAAE,KAAK,kBAAkBA,EAAC;AAAE,YAAG;AAAE,iBAAO;AAAA,MAAI;AAAM,eAAO;AAAK,WAAO,KAAK,SAASA,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE;AAAC,WAAOA,MAAK,KAAK,kBAAgB,KAAK,gBAAgBA,EAAC,EAAE,UAAQ;AAAA,EAAI;AAAA,EAAC,gBAAgBA,IAAE,GAAE,IAAE,GAAE;AAAC,WAAOA,MAAK,KAAK,mBAAiB,GAAG,GAAGA,EAAC,oEAAoE,GAAE,UAAK,KAAK,gBAAgBA,EAAC,IAAE,EAAC,SAAQ,GAAE,UAAS,EAAC,GAAE;AAAA,EAAG;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,QAAG,KAAK,gBAAgBA,EAAC,KAAG;AAAK,YAAM,IAAI,MAAM,iBAAiBA,EAAC,yBAAyB;AAAE,QAAG,KAAK,cAAYA,IAAE,KAAK,SAASA,EAAC,KAAG,MAAK;AAAC,WAAK,kBAAgB;AAAK,UAAG,EAAC,SAAQ,GAAE,WAAU,EAAC,IAAE,KAAK,kBAAkBA,EAAC;AAAE,UAAG,EAAE,IAAE,MAAM,IAAE;AAAG,eAAM;AAAA,IAAE;AAAC,WAAO,KAAK,kBAAgB,KAAK,SAASA,EAAC,GAAE,KAAK,uBAAuB,GAAE,KAAK,WAAS,IAAI,GAAG,KAAK,eAAe,GAAE;AAAA,EAAE;AAAA,EAAC,yBAAwB;AAAC,OAAG,KAAK,WAAW,EAAE,QAAQ,OAAG;AAAC,QAAE,aAAW,QAAM,EAAE,UAAU,KAAK,eAAe;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyBA,IAAE;AAAC,OAAGA,EAAC,EAAE,QAAQ,OAAG;AAAC,QAAE,eAAa,QAAM,EAAE,YAAY,KAAK,SAASA,EAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkBA,IAAE;AAAC,QAAI,IAAE,KAAK,gBAAgBA,EAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,6BAA6BA,EAAC,0BAA0B;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE,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,SAASA,EAAC,IAAE,GAAE,KAAK,qBAAmB,MAAK,KAAG,EAAE,MAAM,QAAI,IAAE,KAAK,yBAAuB,KAAK,qBAAmB,MAAK,GAAG,6BAA6BA,EAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,IAAG,MAAG;AAAE,eAAO,KAAK,qBAAmB,GAAE,EAAC,SAAQ,GAAE,WAAU,KAAE;AAAA,MAAC;AAAM,eAAO,KAAK,SAASA,EAAC,IAAE,GAAE,EAAC,SAAQ,MAAG,WAAU,MAAE;AAAA,IAAC,SAAO,GAAE;AAAC,aAAO,GAAG,6BAA6BA,EAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,GAAE,EAAC,SAAQ,OAAG,WAAU,MAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,QAAG,EAAEA,MAAK,KAAK;AAAiB,YAAM,IAAI,MAAM,GAAGA,EAAC,gCAAgC;AAAE,SAAK,gBAAcA,MAAG,KAAK,sBAAoB,QAAM,KAAK,wBAAuBA,MAAK,KAAK,aAAW,KAAK,yBAAyBA,EAAC,GAAE,KAAK,SAASA,EAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAASA,EAAC,IAAG,OAAO,KAAK,gBAAgBA,EAAC,GAAE,KAAK,gBAAcA,OAAI,KAAK,qBAAmB,MAAK,KAAK,cAAY,MAAK,KAAK,kBAAgB;AAAA,EAAK;AAAA,EAAC,oBAAmB;AAAC,QAAG,OAAO,KAAK,KAAK,eAAe,EAAE,WAAS;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,WAAO,OAAO,KAAK,KAAK,eAAe,EAAE,KAAK,CAACA,IAAE,MAAI,KAAK,gBAAgB,CAAC,EAAE,WAAS,KAAK,gBAAgBA,EAAC,EAAE,QAAQ;AAAA,EAAC;AAAA,EAAC,kCAAiC;AAAC,QAAIA,KAAE,KAAK,kBAAkB;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,WAAU,EAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAG,KAAG;AAAE,eAAM,EAAC,MAAK,GAAE,WAAU,EAAC;AAAA,IAAC;AAAC,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,WAAW,IAAI,CAAC,GAAE,IAAE,EAAE,SAAQ,IAAE,KAAK,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,MAAE,YAAY,GAAE,IAAE,GAAE,EAAE,UAAQA,IAAEA,GAAE,KAAK,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,KAAK,uBAAuB,KAAG,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAO,CAAC;AAAA,EAAG;AAAA,EAAC,KAAKA,IAAE,GAAE;AAAC,QAAI,IAAE;AAAK,QAAG,KAAG,MAAK;AAAC,UAAG,OAAOA,MAAG;AAAW,cAAM,IAAI,MAAM,qCAAqC;AAAE,UAAEA;AAAA,IAAC,OAAK;AAAC,UAAG,OAAOA,MAAG,YAAU,EAAEA,cAAa;AAAQ,cAAM,IAAI,MAAM,gFAAgF;AAAE,UAAG,OAAO,KAAG;AAAW,cAAM,IAAI,MAAM,gFAAgF;AAAE,UAAEA;AAAA,IAAC;AAAC,QAAI;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,WAAW,CAAC,GAAE,MAAI,KAAK,SAAS,CAAC,GAAE,OAAK,IAAE,EAAE,GAAE,aAAa,WAAS,QAAQ,MAAM,yCAAyC,GAAE,EAAE;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE;AAAE,aAAO,EAAE,GAAE;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,EAAE,GAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,eAAc;AAAC,WAAO,EAAE;AAAA,EAAc;AAAA,EAAC,iBAAgB;AAAC,WAAO,EAAE;AAAA,EAAgB;AAAA,EAAC,MAAMA,IAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,EAAC,GAAEA,GAAC,CAAC,GAAE,IAAE,EAAC,GAAEA,GAAC,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,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE,GAAE;AAAC,QAAG,KAAK,eAAa,QAAM,KAAK,SAAQ,EAAE,GAAGA,IAAE,KAAK,WAAW,KAAG;AAAM,YAAM,IAAI,MAAM,WAAWA,EAAC,iCAAiC,KAAK,WAAW,GAAG;AAAE,WAAO,KAAK,cAAc,EAAC,YAAWA,IAAE,QAAO,GAAE,OAAM,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,IAAI,QAAQ,SAAS;AAAA,EAAC;AAAA,EAAC,sBAAsBA,IAAE,GAAE,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,IAAE,IAAE,IAAE;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,YAAY,KAAK,WAAW,kCAAkC,CAAC,6BAA6BA,EAAC,GAAG;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,QAAI,GAAE,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,GAAGA,EAAC,IAAEA,GAAE,aAAW,KAAK,MAAM,eAAa,OAAK,KAAK,MAAM,YAAY,OAAK;AAAG,QAAG,GAAGA,EAAC,GAAE;AAAC,UAAG,EAAC,YAAW,GAAE,QAAO,GAAE,OAAM,EAAC,IAAEA;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,IAAEA,IAAE,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,IAAEA,IAAE,IAAE,GAAGA,EAAC,IAAE,OAAKA,GAAE,eAAc;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,MAAM,eAAc,MAAI,KAAK,MAAM,eAAc,MAAI;AAAC,OAAC,KAAK,IAAI,QAAQ,OAAO,KAAG,CAAC,KAAK,MAAM,YAAU,IAAE,EAAE,KAAG,IAAE,KAAK,SAAS,cAAc,GAAE,GAAE,MAAI,EAAE,CAAC,GAAE,KAAK,IAAI,QAAQ,OAAO,KAAG,KAAK,SAAS,iBAAiB,CAAC,GAAE,IAAE,EAAE;AAAA,IAAQ,CAAC,GAAE,KAAG,KAAK,YAAY,GAAE,GAAE,GAAE,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,cAAa,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,cAAa,EAAE,QAAO,WAAU,EAAE,UAAS,CAAC,GAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2BA,IAAE;AAAC,WAAOA,GAAE,IAAI,OAAG,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsBA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,EAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,gBAAc,CAAC,GAAE,IAAE,EAAE,iBAAe,CAAC,GAAE;AAAE,QAAE,iBAAe,EAAE,MAAM,QAAQ,CAAC,GAAE,MAAI,wDAAwD,GAAE,IAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,KAAG,IAAE,EAAE,IAAI,OAAG,EAAE,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,WAAWA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAGA,MAAG;AAAK,YAAM,IAAI,MAAM,+CAA+C;AAAE,QAAE,KAAG,WAAU,IAAE,KAAG,KAAK;AAAQ,QAAI,IAAEA;AAAE,UAAI,YAAU,GAAGA,GAAE,CAAC,CAAC,MAAI,IAAEA,GAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAG,QAAI,IAAE,EAAE,MAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,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,qBAAqBA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAE,KAAG;AAAU,QAAI,IAAE,EAAC,QAAOA,IAAE,OAAM,GAAE,OAAM,EAAC;AAAE,WAAO,KAAK,yBAAyB,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyBA,IAAE,GAAE;AAAC,QAAG,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,IAAEA,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,WAAO,KAAK,YAAY,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,IAAE,MAAG,GAAE,GAAE;AAAC,QAAE,KAAG,KAAK,eAAe,EAAE,SAAS,GAAE,KAAG,QAAM,MAAIA,GAAE,UAAQA,KAAEA,GAAE,KAAK,CAAC;AAAG,QAAI,IAAE,IAAI,GAAGA,IAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,QAAG,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAG;AAAK,YAAM,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,YAAYA,IAAE,GAAE;AAAC,SAAK,MAAM,cAAaA,GAAE,UAAQ,YAAU,KAAK,MAAM;AAAmB,QAAI,IAAE;AAAE,IAAAA,GAAE,UAAQ,eAAaA,GAAE,UAAQ,aAAW,IAAEA,GAAE,OAAK,GAAGA,GAAE,KAAK,IAAG,KAAK,MAAM,YAAU,GAAE,KAAK,MAAM,WAAW,IAAIA,GAAE,MAAM,MAAI,KAAK,MAAM,kBAAiB,KAAK,MAAM,WAAW,IAAIA,GAAE,QAAO,EAAC,SAAQ,KAAG,KAAK,SAAQ,OAAMA,GAAE,OAAM,OAAMA,GAAE,OAAM,OAAM,EAAC,CAAC,IAAGA,cAAa,MAAI,KAAK,MAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,SAAK,YAAYA,IAAE,CAAC,GAAE,KAAK,QAAQ,OAAOA,GAAE,MAAM;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE;AAAC,SAAK,MAAM,WAAW,IAAIA,EAAC,KAAG,KAAK,MAAM,WAAW,IAAIA,EAAC,EAAE,YAAU,MAAI,KAAK,MAAM,WAAW,OAAOA,EAAC,GAAE,KAAK,MAAM;AAAA,EAAiB;AAAA,EAAC,cAAcA,IAAE;AAAC,QAAG,CAAC,KAAK,MAAM,WAAW,IAAIA,GAAE,MAAM;AAAE;AAAO,QAAI,IAAE,KAAK,MAAM,WAAW,IAAIA,GAAE,MAAM;AAAE,QAAG,KAAK,MAAM,cAAaA,GAAE,UAAQ,aAAW,KAAK,MAAM,oBAAmB,KAAK,MAAM,YAAU,EAAE,QAAOA,GAAE,UAAQ,eAAaA,GAAE,UAAQ,UAAS;AAAC,UAAI,IAAEA,GAAE,OAAK,GAAGA,GAAE,KAAK;AAAE,WAAK,MAAM,YAAU;AAAA,IAAC;AAAC,MAAE,QAAQ,YAAYA,GAAE,MAAM,KAAG,KAAK,aAAaA,GAAE,QAAO,EAAE,OAAO;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,aAAQA,MAAK,KAAK,MAAM,qBAAoB;AAAC,UAAI,IAAE,KAAK,MAAM,oBAAoBA,EAAC;AAAE,WAAK,gBAAgB,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE;AAAC,SAAK,cAAcA,EAAC,GAAE,KAAK,MAAM,oBAAoBA,GAAE,IAAI,KAAG,QAAM,OAAO,KAAK,MAAM,oBAAoBA,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,QAAIA,KAAE,KAAK,QAAQ,OAAO;AAAE,WAAOA,GAAE,aAAW,KAAK,MAAM,YAAWA,GAAE,iBAAe,KAAK,MAAM,gBAAeA,GAAE,WAAS,KAAK,MAAM,UAAS,KAAK,MAAM,mBAAiB,MAAIA,GAAE,aAAW,MAAGA,GAAE,WAAS,SAAOA,GAAE,UAAQ,CAAC,IAAGA,GAAE,QAAQ,KAAK,uEAAuE,IAAGA;AAAA,EAAC;AAAA,EAAC,MAAM,QAAQA,IAAE;AAAC,SAAK,MAAM,YAAU;AAAG,QAAI,IAAE,KAAK,MAAM,UAAS,IAAE,KAAK,MAAM;AAAW,SAAK,MAAM,cAAc,UAAQ,CAAC,GAAE,KAAK,MAAM,cAAc,SAAO,MAAMA,GAAE,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,WAAS,GAAE,KAAK,MAAM,cAAc,aAAW,KAAK,MAAM,aAAW;AAAE,aAAQ,KAAK,KAAK,MAAM,cAAc;AAAQ,QAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,MAAM,kBAAiB,YAAWA,IAAE,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,GAAE,IAAE,GAAGA,EAAC;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,KAAKA,IAAE;AAAC,WAAOA,GAAE,OAAK,MAAGA;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,WAAWA,IAAE;AAAC,QAAI,IAAE,EAAC,OAAM,CAAC,GAAE,MAAK,iBAAgB,IAAG,KAAK,MAAM,cAAa;AAAE,IAAAA,OAAI,EAAE,OAAKA,KAAG,KAAK,MAAM,WAAW,KAAK,CAAC,GAAE,KAAK,MAAM,cAAY;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,QAAI,IAAE,GAAGA,EAAC,GAAE,IAAE,IAAI,IAAI,EAAE,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,GAAE,EAAE,QAAQ,OAAG;AAAC,OAAC,EAAE,QAAM,EAAE,YAAU,EAAE,MAAI,KAAK,MAAM,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE,GAAE,IAAE,OAAG;AAAC,QAAG,EAAE,EAAE,SAAO,GAAE,MAAI,2CAA2C,GAAE,KAAG,QAAM,EAAE,UAAQ;AAAU,YAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,GAAG;AAAE,QAAI,IAAE,KAAK,UAAU,MAAI,KAAK,UAAU,GAAE,MAAI,KAAK,QAAQ,GAAE,MAAI,KAAK,KAAK,WAAUA,EAAC,CAAC;AAAE,MAAE,aAAa,IAAG,MAAI,gDAAgD;AAAE,QAAI,IAAE,GAAG,KAAK,MAAM,YAAW,GAAE,CAAC;AAAE,QAAG,CAAC,KAAG,EAAE,WAAS,KAAG,EAAE,SAAO;AAAE,YAAM,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,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,EAAE,CAAC;AAAE,aAAO,KAAK,MAAM,kBAAgB,MAAI,KAAK,MAAM,WAAW,QAAQ,OAAG;AAAC,iBAAQ,KAAK,EAAE;AAAM,YAAE,QAAQ;AAAA,MAAC,CAAC,GAAE,KAAK,MAAM,aAAW,OAAM,EAAC,OAAM,GAAE,OAAM,EAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,WAAO,EAAE,GAAGA,EAAC,GAAE,MAAI,mDAAmD,GAAE,IAAI,MAAI;AAAC,QAAE,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,kEAAkE;AAAE,UAAI,GAAE,IAAE,CAAC;AAAE,QAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAE,CAAC,IAAE;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE,CAAC,GAAE,OAAK,IAAEA,GAAE,GAAG,GAAE,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,WAAS,EAAE,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,SAASA,IAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAIA,EAAC,EAAE,QAAQ,SAASA,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAIA,EAAC,EAAE,QAAQ,KAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAIA,EAAC,EAAE,QAAQ,UAAUA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAI,IAAE,GAAG,GAAE,IAAE,MAAM,KAAK,QAAQ,KAAKA,EAAC;AAAE,WAAO,EAAE,SAAO,GAAG,IAAE,GAAE;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE;AAAC,WAAO,KAAK,MAAM,eAAa,SAAOA,GAAE,UAAQ,KAAK,MAAM,YAAY,IAAG,KAAK,MAAM,YAAY,MAAM,KAAKA,EAAC,IAAGA;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,aAAQA,MAAK,KAAK;AAAS,WAAK,yBAAyBA,EAAC,GAAE,KAAK,SAASA,EAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAASA,EAAC;AAAE,SAAK,cAAY,MAAK,KAAK,kBAAgB,MAAK,KAAK,qBAAmB;AAAA,EAAI;AAAC;AAAE,GAAG,eAAa;AAAE,GAAG,iBAAe;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,GAAG,GAAGD,GAAC,GAAE,SAAS;AAAE,SAAO,EAAE,WAAWC,IAAED,KAAE,SAAS;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG;AAAE,MAAGA,IAAE,aAAW,MAAK;AAAC,QAAIC,KAAE,IAAI,GAAGD,GAAC;AAAE,IAAAA,IAAE,YAAU,IAAI,GAAGC,EAAC;AAAA,EAAC;AAAC,SAAO,GAAGD,IAAE,UAAU,GAAG,GAAE,GAAG,MAAIA,IAAE,SAAS,GAAEA,IAAE;AAAS;AAAC,IAAI,IAAE,GAAG;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAC,GAAED,KAAE,GAAEC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;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;AAAO,WAAO;AAAG,MAAGA,OAAG,GAAG,GAAE;AAAC,QAAGA,QAAIA,MAAE,YAAWA,IAAE,YAAU;AAAc,aAAM;AAAG,QAAIC,KAAED,IAAE,aAAWA,IAAE,WAAS,OAAO,UAAQ,cAAY,OAAO,QAAM;AAAI,QAAG,CAACC,IAAE;AAAC,UAAI,IAAED;AAAE,aAAO,EAAE,iBAAe,EAAE,cAAc;AAAA,IAAM;AAAC,WAAM,2TAA2T,KAAKC,EAAC,KAAG,0kDAA0kD,KAAKA,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAED;AAAE,MAAG,GAAGA,GAAC;AAAE,WAAOC,OAAI,WAAS,CAAC,IAAE,CAACD,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;AAAE,WAAM,CAACA,IAAE,OAAO,QAAMC,MAAG,OAAK,IAAE,GAAGA,EAAC,EAAE;AAAE,MAAG,CAAC,MAAM,QAAQD,GAAC;AAAE,WAAM,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,SAAK,MAAM,QAAQ,CAAC,KAAG,GAAG,CAAC,KAAGC,OAAI;AAAU,MAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC;AAAE,SAAO,MAAM,QAAQD,GAAC,KAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAG,IAAE,KAAG,CAAC,GAAE,CAAC,MAAM,QAAQD,GAAC,KAAG,CAAC,GAAGA,GAAC,GAAE;AAAC,MAAEC,GAAE,WAAS,GAAE,MAAI,eAAe,EAAE,KAAK,IAAI,CAAC,0DAA0DA,GAAE,CAAC,CAAC,WAAW;AAAE;AAAA,EAAM;AAAC,IAAEA,GAAE,SAAO,GAAE,MAAI,eAAe,EAAE,KAAK,IAAI,CAAC,+CAA+CD,IAAE,MAAM,WAAW,GAAE,EAAEA,IAAE,WAASC,GAAE,CAAC,GAAE,MAAI,eAAe,EAAE,KAAK,IAAI,CAAC,iBAAiBA,GAAE,CAAC,CAAC,sBAAsBD,IAAE,MAAM,WAAW;AAAE,MAAI,IAAEC,GAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,OAAGA,IAAE,CAAC,GAAE,GAAE,EAAE,OAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAGD,QAAI,qBAAoB;AAAC,QAAGA,OAAG;AAAK,YAAM,IAAI,MAAM,gCAAgC;AAAE,QAAGA,QAAI,aAAWA,QAAIC,MAAGD,QAAI,aAAWC,OAAI;AAAS,YAAM,IAAI,MAAM,aAAa,CAAC,gBAAgB,CAAC,aAAaD,GAAC,oBAAoBC,EAAC,SAAS;AAAA,EAAC;AAAC;AAAC,SAAS,EAAED,KAAEC,IAAE,GAAE,IAAE,WAAU;AAAC,MAAGD,eAAa,GAAG;AAAE,WAAO,GAAG,GAAEA,IAAE,OAAMC,IAAE,CAAC,GAAED;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAG,MAAI,YAAU,CAAC,QAAO,SAAQ,SAAS,EAAE,QAAQ,CAAC,KAAG,MAAI,IAAE,IAAG,GAAG,GAAE,GAAEC,IAAE,CAAC,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,aAAaC,EAAC,gBAAgB,CAAC,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,KAAEC,IAAE,GAAE,IAAE,WAAU;AAAC,MAAG,CAAC,MAAM,QAAQD,GAAC;AAAE,UAAM,IAAI,MAAM,YAAYC,EAAC,cAAc,CAAC,6CAA6C;AAAE,SAAOD,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,GAAGC,EAAC,IAAI,CAAC,KAAI,GAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAO,SAAS,EAAED,KAAE;AAAC,MAAIC,KAAE,OAAO,KAAKD,GAAC;AAAE,MAAGC,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,yGAAyGA,GAAE,MAAM,QAAQ;AAAE,MAAI,IAAEA,GAAE,CAAC,GAAE,IAAED,IAAE,CAAC;AAAE,IAAE,SAAS,GAAG,MAAI,IAAE,EAAE,UAAU,GAAE,EAAE,SAAO,CAAC,IAAG,IAAE,IAAE;AAAG,MAAI,IAAE,IAAI,MAAI;AAAC,MAAE,WAAW,CAAC;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,OAAM,GAAE,cAAa,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,SAAS,GAAE,IAAE,EAAEC,IAAE,QAAO,SAAS;AAAE,KAAG,EAAE,OAAM,EAAE,OAAM,yBAAyB,EAAE,KAAK,QAAQ,EAAE,KAAK,uCAAuC;AAAE,MAAI,IAAE,EAAC,MAAK,GAAE,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,KAAG;AAAK,QAAE,GAAGD,GAAC;AAAA,WAAU,MAAI;AAAY,UAAM,IAAI,MAAM,kFAAkF;AAAE,MAAG,GAAGA,GAAC,KAAG,GAAGA,GAAC,GAAE;AAAC,QAAG,MAAI,aAAW,MAAI;AAAQ,YAAM,IAAI,MAAM,2FAA2F,CAAC,GAAG;AAAE,WAAO,EAAE,QAAQ,wBAAwBA,KAAEC,MAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG,YAAU,OAAOA,OAAG,aAAW,OAAOA,OAAG;AAAS,UAAM,IAAI,MAAM,0HAA0H;AAAE,MAAGC,MAAG,MAAK;AAAC,OAAGA,EAAC;AAAE,QAAI,IAAE,GAAGA,EAAC,GAAE,IAAE,GAAG,CAAC;AAAE,MAAE,MAAI,GAAE,MAAI,iCAAiCA,EAAC,6BAA6B,CAAC,mBAAmB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE,MAAI,EAAE,SAAO,IAAE,MAAI,GAAGA,GAAE,MAAM,CAAC,CAAC,IAAE;AAAG,QAAE,EAAE,CAAC,MAAIA,GAAE,CAAC,KAAG,CAAC,GAAE,MAAI,gDAAgD,CAAC,wCAAwCA,EAAC,KAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGC,KAAEA,MAAG,GAAED,MAAE,MAAI,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAE,EAAE,WAAWA,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,SAAO,GAAGA,KAAEC,IAAE,GAAE,CAAC;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,KAAKC,IAAE;AAAC,WAAO,IAAID,GAAEC,EAAC,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAG,KAAK,SAAO,CAAC,GAAE,KAAK,qBAAmB,GAAEA,MAAG,SAAOA,cAAa,UAAQA,KAAE,CAACA,EAAC,IAAGA,KAAEA,GAAE,IAAI,OAAG,GAAG,CAAC,IAAE,EAAE,SAAO,CAAC,GAAEA,GAAE,WAAS;AAAG;AAAO,SAAK,oBAAkBA,GAAE,CAAC,EAAE;AAAW,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,YAAIA,GAAE,SAAO,KAAG,EAAE,eAAa,KAAK,sBAAoB,KAAK,oBAAkB;AAAQ,UAAI,IAAE,IAAE,EAAE;AAAW,WAAK,OAAO,KAAK,EAAC,QAAO,GAAE,OAAM,GAAE,KAAI,EAAC,CAAC,GAAE,IAAE;AAAA,IAAC;AAAC,SAAK,OAAO,WAAS,MAAI,KAAK,aAAW,IAAG,KAAK,aAAW,KAAK,OAAO,KAAK,OAAO,SAAO,CAAC,EAAE;AAAA,EAAG;AAAA,EAAC,MAAMA,KAAE,GAAE,IAAE,KAAK,YAAW;AAAC,QAAG,KAAK,OAAO,WAAS;AAAE,aAAO,IAAI,YAAY,CAAC;AAAE,QAAGA,KAAE,MAAM,OAAOA,EAAC,CAAC,IAAE,IAAEA,IAAE,IAAE,MAAM,OAAO,CAAC,CAAC,IAAE,IAAE,GAAEA,KAAE,KAAK,IAAI,GAAEA,EAAC,GAAE,IAAE,KAAK,IAAI,KAAK,YAAW,CAAC,GAAE,KAAGA;AAAE,aAAO,IAAI,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,iBAAiBA,EAAC;AAAE,QAAG,MAAI;AAAG,YAAM,IAAI,MAAM,uCAAuCA,EAAC,EAAE;AAAE,QAAI,IAAE,IAAEA,IAAE,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,IAAEA,KAAE,IAAE,EAAE,OAAM,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,EAAE,GAAG,IAAE,EAAE,OAAM,IAAE,IAAI,WAAW,EAAE,QAAO,GAAE,IAAE,CAAC;AAAE,UAAG,EAAE,IAAI,GAAE,CAAC,GAAE,KAAG,EAAE,QAAO,IAAE,EAAE;AAAI;AAAA,IAAK;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE;AAAC,QAAG,KAAK,OAAO,WAAS,KAAGA,KAAE,KAAGA,MAAG,KAAK;AAAW,aAAM;AAAG,QAAG,KAAK,qBAAmB;AAAK,aAAO,KAAK,qBAAmB,KAAK,MAAMA,KAAE,KAAK,iBAAiB,GAAE,KAAK;AAAmB,aAAS,EAAE,GAAE;AAAC,aAAOA,KAAE,EAAE,QAAM,KAAGA,MAAG,EAAE,MAAI,IAAE;AAAA,IAAC;AAAC,QAAG,EAAE,KAAK,OAAO,KAAK,kBAAkB,CAAC,MAAI;AAAE,aAAO,KAAK;AAAmB,QAAI,IAAE,GAAG,KAAK,QAAO,CAAC;AAAE,WAAO,MAAI,KAAG,MAAI,KAAK,qBAAmB,GAAE,KAAK;AAAA,EAAmB;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE;AAAO,SAAK,KAAG,KAAG;AAAC,QAAI,IAAE,KAAK,OAAO,IAAE,KAAG,CAAC,IAAE,GAAE,IAAEC,GAAED,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI;AAAE,aAAO;AAAE,QAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,EAAC;AAAC,SAAM;AAAE;AAAC,IAAI,KAAG;AAAE,eAAe,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,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;AAAY,YAAM,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;AAAM,QAAE,KAAK,EAAE,KAAK,CAAC;AAAE,IAAAC,MAAG,SAAO,EAAE,QAAMA,KAAG,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,SAAM,EAAC,MAAK,GAAG,CAAC,GAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,GAAGD,GAAC,GAAE,IAAE,CAAC,GAAE,GAAE,IAAE;AAAE,WAAQ,KAAKC,IAAE;AAAC,QAAI,IAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,EAAE,OAAM,IAAE,GAAG,CAAC,GAAE;AAAE,QAAG,kBAAiB,GAAE;AAAC,UAAI,IAAE,EAAE;AAAa,UAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,YAAG,EAAE,SAAQ,KAAG,WAAU;AAAG,gBAAM,IAAI,MAAM,UAAU,EAAE,IAAI,sBAAsB,EAAE,KAAK,qDAAqD;AAAA,MAAC,WAAS,EAAE,UAAQ,WAAU;AAAC,YAAG,MAAI;AAAU,gBAAM,IAAI,MAAM,UAAU,EAAE,IAAI,sBAAsB,EAAE,KAAK,oDAAoD,CAAC,GAAG;AAAA,MAAC;AAAM,cAAM,IAAI,MAAM,UAAU,EAAE,IAAI,mCAAmC,EAAE,KAAK,wEAAwE;AAAE,UAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,GAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,UAAQ,UAAQ,IAAI,WAAW,CAAC,IAAE,IAAI,YAAY,CAAC;AAAE,UAAG,MAAI;AAAU,YAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,cAAE,IAAI,aAAa,EAAE,MAAM;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,gBAAI,IAAE,EAAE,CAAC;AAAE,cAAE,CAAC,IAAE,IAAE,EAAE,QAAM,EAAE;AAAA,UAAG;AAAA,QAAC,WAAS,EAAE,UAAQ;AAAU,gBAAI,WAAS,IAAE,GAAG,IAAG,IAAE,EAAE,CAAC;AAAA;AAAO,gBAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,2BAA2B;AAAA,eAAU,MAAI,SAAQ;AAAC,YAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ;AAAS,gBAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,yBAAyB;AAAE,YAAE,IAAI,WAAW,EAAE,MAAM;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,cAAI,IAAE,EAAE,CAAC;AAAE,YAAE,CAAC,IAAE,KAAK,MAAM,IAAE,EAAE,QAAM,EAAE,GAAG;AAAA,QAAC;AAAA,MAAC;AAAM,cAAM,IAAI,MAAM,gCAAgC,CAAC,MAAM,CAAC,EAAE;AAAE,WAAG,IAAE;AAAA,IAAC,WAAS,MAAI,UAAS;AAAC,UAAI,IAAE,GAAG,EAAE,KAAK;AAAE,UAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAI,YAAY,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,aAAG;AAAG,YAAI,IAAE,IAAI,WAAW,EAAE,MAAM,GAAE,IAAE,CAAC,CAAC;AAAE,UAAE,KAAK,CAAC,GAAE,KAAG;AAAA,MAAC;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,MAAM,GAAE,IAAE,IAAE,CAAC;AAAE,UAAG,MAAI;AAAU,YAAE,IAAI,aAAa,CAAC;AAAA,eAAU,MAAI;AAAQ,YAAE,IAAI,WAAW,CAAC;AAAA,eAAU,MAAI;AAAO,YAAE,IAAI,WAAW,CAAC;AAAA,eAAU,MAAI,aAAY;AAAC,YAAE,IAAI,aAAa,CAAC;AAAE,YAAI,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,YAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,YAAI,IAAE,GAAG,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,GAAE,GAAE,SAAS;AAAE,UAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ;AAAA,MAAC;AAAM,cAAM,IAAI,MAAM,gCAAgC,CAAC,MAAM,CAAC,EAAE;AAAE,WAAG,IAAE;AAAA,IAAC;AAAC,UAAI,gBAAc,EAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAK,UAAM,IAAI,MAAM,wBAAwB,KAAK,UAAUA,GAAC,CAAC,EAAE;AAAE,MAAIC,KAAE,GAAE,IAAE,CAAC;AAAE,EAAAD,IAAE,QAAQ,OAAG;AAAC,QAAGC,MAAG,EAAE,YAAW,EAAE,KAAK,EAAE,eAAa,EAAE,OAAO,aAAW,IAAE,IAAI,EAAE,YAAY,CAAC,CAAC,GAAE,EAAE,aAAa,gBAAc,aAAa,cAAY,aAAa;AAAY,YAAM,IAAI,MAAM,mCAAmC,EAAE,YAAY,IAAI,EAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,WAAWA,EAAC,GAAE,IAAE;AAAE,SAAO,EAAE,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;AAAG,WAAO,OAAO,KAAKA,GAAC,EAAE,SAAS,QAAQ;AAAE,MAAIC,KAAE,IAAI,WAAWD,GAAC,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAEC,GAAE,QAAO,IAAE,GAAE;AAAI,SAAG,OAAO,aAAaA,GAAE,CAAC,CAAC;AAAE,SAAO,KAAK,CAAC;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,MAAIC,KAAE,KAAKD,GAAC,GAAE,IAAE,IAAI,WAAWC,GAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,EAAE;AAAE,MAAE,IAAI,CAACA,GAAE,WAAW,CAAC,CAAC,GAAE,CAAC;AAAE,SAAO,EAAE;AAAM;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,KAAKA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE;AAAI,OAAID,MAAEA,IAAE,KAAK,GAAEA,IAAE,SAASC,EAAC;AAAG,IAAAD,MAAEA,IAAE,MAAM,GAAEA,IAAE,SAAO,CAAC;AAAE,MAAI,IAAEA,IAAE,MAAMC,EAAC;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAC,eAAcD,IAAE,eAAc,QAAOA,IAAE,QAAO,aAAYA,IAAE,aAAY,aAAYA,IAAE,aAAY,iBAAgBC,GAAC;AAAE,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,uBAAsBA,IAAE,kBAAgB,SAAO,EAAE,iBAAeA,IAAE,iBAAgB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;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,CAACC;AAAE,YAAM,IAAI,MAAM,uDAAuD;AAAE,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,sDAAsD;AAAE,MAAE,cAAYA,IAAE,EAAE,aAAW;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,KAAEC,IAAE;AAAC,MAAI,GAAE;AAAE,SAAOD,IAAE,mBAAiB,SAAO,CAAC,GAAE,CAAC,IAAE,MAAMC,GAAED,IAAE,eAAe,IAAG,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,yBAAyB;AAAY,UAAM,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,MAAIC,KAAE,CAAC;AAAE,WAAQ,KAAKD;AAAE,IAAAC,GAAE,KAAK,GAAG,EAAE,OAAO;AAAE,SAAOA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAID,MAAE,OAAG;AAAC,QAAI,IAAE,KAAG,IAAG,IAAE;AAAE,WAAK,EAAE,IAAE;AAAU,WAAG,SAAQ,MAAI;AAAE,WAAO,KAAG,UAAS,KAAG,WAAU,IAAE;AAAA,EAAC,GAAEC,KAAE,IAAI,YAAY,IAAI;AAAE,EAAAA,GAAE,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,MAAK;AAAI,IAAAA,GAAE,CAAC,IAAED,IAAE,CAAC;AAAE,WAAQ,IAAE,MAAK,IAAE,MAAK;AAAI,IAAAC,GAAE,CAAC,IAAE,aAAW,IAAE,QAAM;AAAI,SAAOA;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,WAAQC,KAAE,GAAEA,KAAE,IAAGA;AAAI,IAAAD,IAAEC,EAAC,IAAEA,MAAG;AAAG,WAAQA,KAAE,IAAGA,KAAE,IAAGA;AAAI,IAAAD,IAAEC,EAAC,IAAE,cAAYA,KAAE,MAAI;AAAI,SAAOD;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,IAAI,YAAY,EAAE;AAAE,WAAQC,KAAE,GAAEA,KAAE,IAAGA;AAAI,IAAAD,IAAEC,EAAC,IAAE;AAAK,SAAOD,IAAE,CAAC,IAAEA,IAAE,EAAE,IAAE,GAAEA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG,GAAEC,KAAE,GAAG,GAAE,IAAE,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,IAAE,EAAE,KAAG,EAAE,KAAG,IAAE,KAAK,IAAEC,GAAE,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,mBAAmBC,IAAE;AAAC,IAAAD,GAAE,YAAY,EAAE,YAAY,KAAKC,EAAC;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmBA,IAAE;AAAC,IAAAD,GAAE,YAAY,EAAE,YAAY,KAAKC,EAAC;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgBA,IAAE;AAAC,WAAOD,GAAE,YAAYC,IAAE,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgBA,IAAE,GAAE;AAAC,WAAOD,GAAE,YAAYC,IAAE,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,YAAYA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,YAAO,MAAI,SAAOD,GAAE,YAAY,EAAE,cAAYA,GAAE,YAAY,EAAE,aAAa,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAEC,IAAE,CAAC;AAAE,YAAI,QAAM,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC;AAAxiB,IAA0iB,KAAG,CAAAD,QAAG,GAAG,mBAAmBA,GAAC;AAAvkB,IAAykB,KAAG,CAAAA,QAAG,GAAG,mBAAmBA,GAAC;AAAtmB,IAAwmB,KAAG,CAAAA,QAAG,GAAG,gBAAgBA,GAAC;AAAloB,IAAooB,KAAG,CAACA,KAAEC,OAAI,GAAG,gBAAgBD,KAAEC,EAAC;AAAE,IAAI,KAAG;AAAP,IAAsB,KAAG;AAAzB,IAA2B,KAAG;AAA9B,IAA6C,KAAG;AAAmB,SAAS,KAAI;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,YAAY;AAAE,UAAM,IAAI,MAAM,yFAAyF;AAAE,MAAID,MAAE,OAAO,UAAQ,cAAY,OAAK,QAAOC,KAAED,IAAE,aAAWA,IAAE,gBAAcA,IAAE,mBAAiBA,IAAE,eAAaA,IAAE;AAAc,MAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,2DAA2D;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE;AAAO,EAAAC,GAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC,GAAEA,GAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAG,KAAK,YAAU,GAAG,GAAEA,MAAG,QAAM,CAACA;AAAE,YAAM,IAAI,MAAM,gEAAgE;AAAE,SAAK,YAAUA;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAGA,GAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,0FAA0F;AAAE,WAAO,KAAK,eAAe,KAAK,WAAUA,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,KAAK,eAAe,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,GAAE;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,YAAG,KAAG,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;AAAK,qBAAO,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,YAAE,aAAW,GAAG,KAAK,EAAE,UAAU;AAAE,cAAI,IAAE,GAAG,CAAC,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,gBAAe,GAAE,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,CAACC,IAAE,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,UAAU,GAAE,IAAE,EAAE,YAAY,EAAE,EAAE,OAAO;AAAE,UAAE,YAAU,MAAI;AAAC,cAAI,IAAE,CAAC;AAAE,mBAAQ,KAAK,EAAE;AAAO,cAAE,EAAE,SAAS,IAAE,EAAE;AAAmB,UAAAA,GAAE,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,YAAYA,IAAE;AAAC,WAAOA,KAAE,GAAGA,EAAC,GAAE,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,QAAO,IAAE,EAAE,YAAY,IAAG,WAAW,GAAE,IAAE,EAAE,YAAY,EAAE,GAAE,IAAE,EAAE,IAAIA,EAAC,GAAE;AAAE,UAAE,YAAU,MAAI;AAAC,cAAG,EAAE,UAAQ;AAAK,mBAAO,EAAE,MAAM,GAAE,EAAE,IAAI,MAAM,gCAAgCA,EAAC,iBAAiB,CAAC;AAAE;AAAC,gBAAI,IAAE,EAAE,OAAOA,EAAC,GAAE,IAAE,MAAI;AAAC,kBAAE,EAAE,YAAY,IAAG,WAAW;AAAE,kBAAI,IAAE,EAAE,YAAY,EAAE,EAAE,OAAOA,EAAC;AAAE,gBAAE,YAAU,MAAI,EAAE,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,WAAQC,MAAK,OAAO,OAAOD,GAAC;AAAE,WAAO,aAAa,WAAWC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE,MAAM,EAAE;AAAE,MAAGC,GAAE,SAAO;AAAE,UAAM,IAAI,MAAM,uBAAuBD,GAAC,EAAE;AAAE,SAAOC,GAAE,MAAM,GAAEA,GAAE,SAAO,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAW,GAAG,UAAU,IAAEA,IAAE,MAAM,GAAG,WAAW,MAAM,IAAEA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY,KAAG,OAAO,UAAQ,eAAa,OAAO,OAAO,gBAAc;AAAY,YAAM,IAAI,MAAM,yDAAyD;AAAE,QAAG,KAAK,KAAG,OAAO,cAAaA,MAAG,QAAM,CAACA;AAAE,YAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,YAAUA,IAAE,KAAK,OAAK,GAAG,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAGA,GAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,0FAA0F;AAAE;AAAC,UAAI,IAAE,KAAK,UAAUA,GAAE,aAAa,GAAE,IAAE,KAAK,UAAUA,GAAE,WAAW,GAAE,IAAE,GAAGA,EAAC,GAAE,IAAE,GAAG,KAAKA,GAAE,UAAU;AAAE,UAAG;AAAC,aAAK,GAAG,QAAQ,KAAK,KAAK,MAAK,KAAK,UAAU,CAAC,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAAS,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAY,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,YAAW,GAAG,CAAC,CAAC;AAAE,YAAI,IAAE,EAAC,QAAOA,GAAE,QAAO,aAAYA,GAAE,aAAY,aAAYA,GAAE,aAAY,WAAUA,GAAE,aAAW,OAAKA,GAAE,YAAU,QAAO,qBAAoBA,GAAE,uBAAqB,OAAKA,GAAE,sBAAoB,QAAO,kBAAiBA,GAAE,oBAAkB,OAAKA,GAAE,mBAAiB,QAAO,sBAAqBA,GAAE,wBAAsB,OAAKA,GAAE,uBAAqB,QAAO,gBAAeA,GAAE,kBAAgB,OAAKA,GAAE,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,QAAIA,KAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC;AAAE,QAAGA,MAAG;AAAK,YAAM,IAAI,MAAM,kDAAkD,KAAK,SAAS,GAAG;AAAE,QAAGA,GAAE,sBAAoB;AAAO,YAAM,IAAI,MAAM,2EAA2E;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,4CAA4C,KAAK,SAAS,eAAe;AAAE,MAAE,gBAAc;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,WAAW,CAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,gDAAgD,KAAK,SAAS,gBAAgB;AAAE,MAAE,cAAY;AAAE,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAa;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,MAAM,CAAC;AAAE,QAAE,SAAO,EAAE,QAAO,EAAE,cAAY,EAAE,aAAY,EAAE,cAAY,EAAE,aAAY,EAAE,aAAW,SAAO,EAAE,YAAU,EAAE,YAAW,EAAE,uBAAqB,SAAO,EAAE,sBAAoB,EAAE,sBAAqB,EAAE,oBAAkB,SAAO,EAAE,mBAAiB,EAAE,mBAAkB,EAAE,wBAAsB,SAAO,EAAE,uBAAqB,EAAE,uBAAsB,EAAE,kBAAgB,SAAO,EAAE,iBAAe,EAAE;AAAA,IAAe;AAAC,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAAU;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,wDAAwD,KAAK,SAAS,gBAAgB;AAAE,WAAO,EAAE,aAAW,GAAG,CAAC,GAAE;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,QAAIC,KAAE,CAAC,GAAE,IAAE,KAAG,IAAG,IAAE,KAAG;AAAG,aAAQ,IAAE,GAAE,IAAE,KAAK,GAAG,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,IAAI,CAAC;AAAE,UAAG,EAAE,WAAW,CAAC,KAAG,EAAE,SAAS,CAAC,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,QAAAA,GAAE,CAAC,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,MAAM,YAAYA,IAAE;AAAC,IAAAA,KAAE,GAAGA,EAAC;AAAE,QAAI,IAAE,GAAGA,EAAC;AAAE,QAAG,KAAK,GAAG,QAAQ,EAAE,IAAI,KAAG;AAAK,YAAM,IAAI,MAAM,8BAA8BA,EAAC,GAAG;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,CAAC;AAAE,WAAO,GAAG,CAAC,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,gBAAgBC,IAAE,GAAE;AAAC,MAAEA,MAAG,MAAK,MAAI,uCAAuC,GAAEA,GAAE,SAAS,EAAE,MAAIA,KAAEA,GAAE,MAAM,GAAEA,GAAE,QAAQ,EAAE,CAAC,IAAG,EAAEA,GAAE,SAAO,GAAE,MAAI,qCAAqC;AAAE,QAAI,IAAED,GAAE,YAAY;AAAE,MAAE,EAAE,SAASC,EAAC,KAAG,MAAK,MAAI,2DAA2DA,EAAC,IAAI,GAAE,EAAE,SAASA,EAAC,IAAE;AAAA,EAAC;AAAA,EAAC,OAAO,WAAWA,IAAE;AAAC,QAAI,IAAED,GAAE,YAAY,EAAE,SAASC,EAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,yCAAyCA,EAAC,GAAG;AAAE,WAAO;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;AAAG,UAAM,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,KAAEC,IAAE,IAAE,OAAG;AAAC,IAAED,QAAIC,IAAE,MAAI,wCAAwCD,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,gBAAgBC,EAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,uEAAuEA,EAAC,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,yCAAyC,EAAE,MAAM,uCAAuCA,EAAC,GAAG;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAGD,GAAC,EAAE,QAAO,IAAE,GAAGA,GAAC,EAAE,MAAK,IAAE,MAAI,GAAGA,GAAC,EAAE,QAAO,IAAE,MAAM,EAAE,KAAK;AAAE,OAAG,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,CAAC;AAAE,SAAO,KAAG,CAAC,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC,GAAE,EAAE;AAAkB;AAAC,eAAe,KAAI;AAAC,MAAIA,MAAE,GAAG,WAAW,GAAEC,KAAE,CAAC;AAAE,WAAQ,KAAKD,KAAE;AAAC,QAAI,IAAE,MAAM,GAAG,WAAW,CAAC,EAAE,WAAW;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,IAAE,KAAG;AAAE,MAAAC,GAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,MAAIC,KAAE,GAAGD,GAAC;AAAE,SAAO,GAAG,WAAWC,GAAE,MAAM,EAAE,YAAYA,GAAE,IAAI;AAAC;AAAC,eAAe,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,KAAE;AAAC;AAAC,eAAe,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,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,MAAMA,IAAE,GAAE;AAAC,WAAO,MAAMA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAK;AAAC,WAAO,YAAY,IAAI;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,QAAG,MAAI,WAAS,MAAI;AAAO,YAAM,IAAI,MAAM,kDAAkD,CAAC,EAAE;AAAE,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAI,gBAAa,KAAK,YAAY,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,WAAO,IAAI,YAAY,CAAC,EAAE,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE,GAAE;AAAC,QAAG,OAAO,UAAQ,eAAa,CAAC,EAAE,EAAE,QAAQ,sBAAsB,GAAE;AAAC,iBAAWA,IAAE,CAAC;AAAE;AAAA,IAAM;AAAC,SAAK,aAAa,KAAKA,EAAC,GAAE,WAAW,MAAI;AAAC,aAAO,YAAY,EAAC,MAAK,KAAK,aAAY,OAAM,KAAK,aAAa,SAAO,EAAC,GAAE,GAAG;AAAA,IAAC,GAAE,CAAC,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,aAAaA,IAAE;AAAC,WAAO,GAAGA,EAAC;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,MAAMC,IAAE,GAAE;AAAC,WAAO,EAAE,EAAE,OAAO,SAAO,OAAK,EAAE,EAAE,OAAO,MAAMA,IAAE,CAAC,KAAG,MAAI,SAAO,KAAG,GAAG,YAAY,IAAG,GAAGA,IAAE,CAAC;AAAA,EAAE;AAAA,EAAC,MAAK;AAAC,QAAIA,KAAE,QAAQ,OAAO;AAAE,WAAOA,GAAE,CAAC,IAAE,MAAIA,GAAE,CAAC,IAAE;AAAA,EAAG;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,QAAG,MAAI,WAAS,MAAI;AAAO,YAAM,IAAI,MAAM,sDAAsD,CAAC,EAAE;AAAE,WAAO,KAAK,YAAY,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,WAAOA,GAAE,WAAS,IAAE,KAAG,IAAI,KAAK,KAAK,YAAY,CAAC,EAAE,OAAOA,EAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAO,KAAK,KAAK,MAAM,eAAeA,EAAC,KAAG,KAAK,KAAK,MAAM,aAAaA,EAAC,KAAG,KAAK,KAAK,MAAM,aAAaA,EAAC,KAAG,KAAK,KAAK,MAAM,oBAAoBA,EAAC;AAAA,EAAC;AAAC;AAAE,EAAE,EAAE,IAAI,SAAS,KAAG,CAAC,EAAE,EAAE,IAAI,YAAY,KAAG,EAAE,EAAE,YAAY,QAAO,IAAI,IAAE;AAAE,SAAS,GAAGD,KAAEC,KAAE,WAAU,GAAE;AAAC,SAAOA,KAAEA,MAAG,WAAU,GAAGD,GAAC,GAAE,IAAI,GAAGA,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,CAAC,GAAGC,EAAC;AAAE,UAAM,IAAI,MAAM,mCAAmCA,EAAC,EAAE;AAAE,MAAGA,OAAI,YAAU,EAAE,UAAQ,YAAUA,OAAI,YAAU,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAMA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,SAAQ,mBAAmB,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,OAAG;AAAC,UAAQ,IAAID,IAAE,SAASC,EAAC,CAAC;AAAC;AAAC,GAAG;AAAE,IAAI,KAAG,EAAC,QAAO,IAAG,MAAK,IAAG,OAAM,IAAG,OAAM,GAAE;AAAE,GAAG,EAAE;AAAE,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,KAAEC,IAAE;AAAC,SAAO,EAAE,KAAKD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,KAAGA,GAAC,EAAE,QAAQ,OAAG,EAAE,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,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,MAAK;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,KAAEC,IAAE,IAAE,GAAE;AAAC,SAAO,EAAE,gBAAgBD,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,MAAK;AAAC,SAAO,EAAE;AAAO;AAAC,SAAS,IAAID,KAAEC,IAAE;AAAC,IAAE,EAAE,YAAYD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAEC,IAAE,KAAI,UAAU;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,EAAE,UAAQ,WAAS,EAAE,UAAQ;AAAQ,WAAO,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,KAAI,KAAK;AAAE,MAAGC,GAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAC,GAAEA,GAAC;AAAE,WAAO,EAAE,UAAU,IAAG,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAC,GAAEA,GAAC;AAAE,WAAO,EAAE,UAAU,IAAG,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,IAAE,MAAM,QAAQA,GAAC,GAAE,MAAI,4DAA4D,GAAE,EAAEA,IAAE,UAAQ,GAAE,MAAI,uDAAuDA,IAAE,MAAM,EAAE;AAAE,MAAIC,KAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,MAAM,CAAC,GAAE,IAAEC,GAAE,CAAC;AAAE,EAAAA,GAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQ,EAAE;AAAM,YAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC,GAAEA,GAAE,QAAQ,OAAG;AAAC,QAAG,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,YAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEA;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAKC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAKC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAEC,IAAE,KAAI,OAAO;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,MAAI,IAAED,IAAE,CAAC,GAAE,IAAE,CAAC,GAAGC,IAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAE,GAAE,MAAK,MAAK,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,EAAC,GAAE;AAAE,MAAG,MAAI;AAAe,QAAE,CAAC,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI;AAAgB,QAAE,CAAC,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,GAAGA,EAAC,GAAE,GAAE;AAAE,MAAG,MAAI;AAAQ,QAAE,gBAAe,IAAE,CAAC,GAAE,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI;AAAQ,QAAE,iBAAgB,IAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,OAAG,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,EAAE;AAAE,MAAG,MAAI;AAAe,KAAC,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI;AAAgB,KAAC,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,EAAC,CAAC,IAAEC,IAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,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,aAAYC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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;AAAe,KAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI;AAAgB,KAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,GAAE,EAAC,CAAC,IAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,CAAC,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,aAAYC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAEC,IAAE,CAAC;AAAG,MAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAI,IAAEC,KAAE,IAAE,KAAG,IAAE,GAAE,CAAC,GAAE,IAAE,IAAI,IAAEA,KAAE,IAAE,KAAG,IAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAEC,GAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,IAAAD,IAAE,CAAC,IAAE,IAAE,KAAGC,GAAE,CAAC,MAAI,EAAE,CAAC,IAAE,IAAID,IAAE,CAAC,IAAEC,GAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,GAAE,CAAC;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,IAAE,CAAC;AAAE,SAAO,KAAK,OAAOD,IAAE,CAAC,KAAG,IAAE,KAAG,IAAE,KAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,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,KAAEC,IAAE;AAAC,SAAOA,MAAG,IAAED,MAAEA,OAAGA,MAAE,MAAIC,KAAE;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,CAACC,IAAE,CAAC,GAAE,GAAE,GAAED,KAAE,CAAC;AAAE,QAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC,WAASA,QAAI,QAAO;AAAC,QAAE,KAAK,KAAKC,KAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,QAAI,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAEA,EAAC,GAAE,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAE,CAAC,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;AAAQ,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,QAAO,GAAE,IAAE,KAAK,MAAMC,KAAE,IAAE,KAAG,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,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,IAAIC,KAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC;AAAA,EAAC;AAAM,UAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,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,CAACC,IAAE,GAAE,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,KAAKC,KAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,QAAI,KAAG,IAAE,KAAG,IAAE,IAAEA,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,GAAE,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;AAAM,UAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAG,CAACA;AAAE,WAAO,KAAK,MAAMD,GAAC;AAAE,UAAOC,IAAE;AAAA,IAAC,KAAI;AAAQ,aAAO,KAAK,MAAMD,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,KAAK,KAAKA,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,KAAK,MAAMA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,wBAAwBC,EAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,CAACC,IAAE,GAAE,CAAC,IAAE,GAAGD,GAAC;AAAE,SAAOC,OAAI,KAAG,MAAI,KAAG,MAAI;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,GAAC,KAAG,GAAGC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,GAAC,EAAE,MAAM,CAAAC,OAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAO,WAAM;AAAe,MAAGA,QAAI;AAAO,WAAM;AAAgB,QAAM,IAAI,MAAM,sBAAsBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAG,OAAOA,MAAG;AAAS,YAAM,MAAM,YAAYD,GAAC,uDAAuD,CAAC,gBAAgBC,EAAC,GAAG;AAAE,QAAG,OAAOA,MAAG;AAAS,QAAE,GAAGA,EAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuD,CAAC,gBAAgBC,EAAC,GAAG;AAAA,aAAU,OAAOA,MAAG;AAAS,MAAAA,GAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ,OAAG;AAAC,YAAE,GAAG,CAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuD,CAAC,gBAAgB,CAAC,GAAG;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA;AAAO,YAAM,MAAM,YAAYA,GAAC,gCAAgCC,EAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB,EAAC,GAAE,IAAE,EAAC,OAAMC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,IAAE,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,SAAS,GAAE,IAAE;AAAE,IAAE,GAAG,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,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,YAAWC,IAAE,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,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,OAAO,KAAG,YAAU,IAAE,KAAG,MAAM,QAAQ,CAAC,KAAG,EAAE,CAAC,IAAE,KAAG,EAAE,CAAC,IAAE,KAAG,EAAE,CAAC,IAAE,GAAE,MAAI,oDAAoD,CAAC,GAAG,GAAE,GAAG,aAAY,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWC,IAAE,SAAQ,GAAE,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,KAAEC,KAAE,GAAE;AAAC,IAAED,IAAE,UAAQ,GAAE,MAAI,oCAAoC;AAAE,MAAI,IAAE,GAAGA,KAAE,WAAU,UAAS,mBAAmB;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,eAAa,EAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQ;AAAY,YAAM,IAAI,MAAM;AAAA,uBAC7k1D,EAAE,KAAK,IAAI;AAAA,EAAC,CAAC,GAAE,EAAE,WAAS;AAAE,WAAO,GAAG,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,EAAC,MAAKC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAEC,IAAE,KAAI,QAAQ;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAU,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gCAAgC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAMC,IAAE,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,cAAa,eAAe,GAAE,IAAE,EAAEC,IAAE,cAAa,eAAe,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB,GAAE,IAAEC,GAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC;AAAE,IAAE,EAAE,QAAM,IAAEA,GAAE,QAAO,MAAI,iBAAiB,EAAE,IAAI,2CAA2CA,GAAE,MAAM,EAAE,GAAE,EAAE,EAAE,WAASA,GAAE,QAAO,MAAI,mBAAmB,EAAE,MAAM,8CAA8CA,GAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,CAAC,IAAE,MAAI,GAAE,MAAI,yBAAyB,EAAE,MAAM,CAAC,CAAC,sEAAsEA,GAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWA,IAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC;AAAE,SAAOD,IAAE,SAAO,KAAGA,IAAE,SAAO,IAAEC,KAAE,EAAED,KAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,IAAI,CAAC,IAAEA,IAAE,SAAO,IAAEC,KAAE,EAAED,KAAE,CAAC,GAAE,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAEA,IAAE,SAAO,IAAEC,KAAE,EAAED,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAEC,KAAED,KAAEC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE;AAAM,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAEC,IAAE,QAAO,WAAW,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAEC,IAAE,QAAO,WAAW,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAEC,IAAE,QAAO,WAAW,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAEC,IAAE,QAAO,WAAW,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAEC,IAAE,WAAU,UAAU;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,yDAAyD,EAAE,KAAK,EAAE,GAAE,EAAE,KAAG,GAAE,MAAI,sCAAsC,CAAC,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,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAEC,IAAE,KAAI,YAAY;AAAE,MAAG,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,UAAM,IAAI,MAAM,oDAAoD,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,wEAAwE,EAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,MAAK,iBAAgB,OAAO,GAAE,IAAE,EAAEC,IAAE,MAAK,iBAAgB,OAAO;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oEAAoE,EAAE,IAAI,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qEAAqE,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,IAAG,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,eAAc,GAAG,GAAE,IAAE,EAAE;AAAM,MAAG,GAAGC,EAAC,GAAEA,GAAE,SAAO,EAAE;AAAK,UAAM,IAAI,MAAM,+BAA+BA,GAAE,MAAM,iBAAiB,EAAE,IAAI,GAAG;AAAE,MAAGA,GAAE,SAAO,EAAE,MAAK;AAAC,QAAI,IAAE,EAAE,MAAM,MAAM;AAAE,WAAK,EAAE,SAAOA,GAAE;AAAQ,QAAE,QAAQ,CAAC;AAAE,QAAE,EAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,OAAM,IAAE,MAAM,KAAKA,EAAC;AAAE,WAAQ,IAAEA,GAAE,SAAO,GAAE,KAAG,GAAE;AAAI,QAAG,EAAE,CAAC,MAAIA,GAAE,CAAC;AAAE,QAAE,CAAC,IAAE;AAAA,aAAU,EAAE,MAAM,CAAC,MAAI;AAAE,YAAM,IAAI,MAAM,mBAAmB,CAAC,6BAA6BA,EAAC,IAAI;AAAE,MAAG,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,EAAE,EAAE,OAAO,OAAG,KAAG,CAAC,EAAE,WAAS;AAAE,WAAO,GAAG,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,KAAGD,GAAC,GAAE,IAAE,KAAG,GAAGC,EAAC;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,OAAMC,IAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAa;AAAE,MAAG,EAAEC,MAAG,GAAE,MAAI,uBAAuBA,EAAC,wCAAwC,CAAC,IAAI,GAAEA,OAAI;AAAE,WAAO,GAAG,EAAE,OAAMA,IAAE,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,cAAaA,IAAE,cAAa,EAAC;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,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,SAAS,GAAE,IAAE,EAAEC,IAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,uEAAuE,CAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,GAAE,IAAE,OAAM,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAEC,IAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,oEAAoE,CAAC,kBAAkB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAG,CAAC,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,GAAE,CAAC,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,KAAEC,IAAE,GAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,IAAED,IAAE,WAASC,GAAE,MAAK,MAAI,sBAAsBD,IAAE,MAAM,qBAAqBC,GAAE,IAAI,cAAc;AAAE,MAAI,IAAED,KAAE,IAAEC,IAAE,IAAE;AAAG,EAAAA,GAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAEA,IAAE,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAED,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,EAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,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,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,GAAG,kBAAiB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAO,EAAC,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,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAEC,IAAE,UAAS,iBAAiB;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,QAAO,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,IAAE,SAAQ,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAEC,IAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,uEAAuE,CAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,sCAAsC,CAAC,yCAAyC,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,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,IAAIF,MAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGC,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,IAAED,IAAE,WAASC,GAAE,MAAK,MAAI,sBAAsBD,IAAE,MAAM,qBAAqBC,GAAE,IAAI,cAAc;AAAE,MAAI,IAAED,KAAE,IAAEC,IAAE,IAAE;AAAG,EAAAA,GAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAEA,IAAE,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAED,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,EAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,EAAE,GAAE,EAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAO,EAAC,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,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAEC,IAAE,UAAS,iBAAiB;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,WAAU,GAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,WAAU,GAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAEC,IAAE,WAAU,eAAe;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,8DAA8D,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,QAAM,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,EAAE,KAAG,GAAE,MAAI,sCAAsC,CAAC,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,MAAK,GAAE,cAAa,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAe,SAAS,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;AAAE,IAAEC,KAAE,GAAE,MAAI,sDAAsDA,EAAC,EAAE,GAAE,EAAE,IAAEA,MAAG,GAAE,MAAI;AAAA,MACltb,CAAC,QAAQA,EAAC;AAAA,MACV,EAAE,KAAK,EAAE,GAAE,EAAE,IAAEA,MAAG,GAAE,MAAI;AAAA,MACxB,CAAC,QAAQA,EAAC;AAAA,UACN,EAAE,KAAK,EAAE,GAAE,EAAE,KAAGA,KAAEA,QAAK,GAAE,MAAI,8CAA8CA,KAAEA,EAAC,WAAW,CAAC,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,WAAUA,IAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAkB,SAAS,GAAE,IAAE,EAAEC,IAAE,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,SAAQ,GAAE,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAEC,IAAE,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,SAAQ,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,GAAE,IAAEA,IAAE,CAAC,KAAG;AAAE,KAACC,GAAEA,GAAE,SAAO,IAAE,CAAC,KAAG,KAAG,KAAG,MAAI,KAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC,GAAE,IAAEC,GAAE,SAAO,IAAE,GAAE,IAAEA,GAAE,CAAC;AAAE,KAAC,KAAG,QAAM,MAAI,KAAG,IAAE,MAAI,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,KAAK,IAAID,IAAE,QAAOC,GAAE,MAAM,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC;AAAE,SAAG,SAAO,IAAE;AAAG,QAAI,IAAEC,GAAEA,GAAE,SAAO,IAAE,CAAC;AAAE,QAAG,KAAG,SAAO,IAAE,IAAG,MAAI;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI,GAAE;AAAC,UAAI,IAAE,wDAAwDD,GAAC,QAAQC,EAAC;AAAI,YAAM,MAAM,CAAC;AAAA,IAAC;AAAM,QAAE,IAAE,IAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,SAAQ,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAEA,IAAE,KAAI,OAAO,GAAE,IAAE,EAAE,GAAE,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,MAAK,KAAK,GAAE,IAAE,EAAEC,IAAE,MAAK,KAAK;AAAE,KAAG,EAAE,SAAO,KAAG,EAAE,SAAO,OAAK,EAAE,SAAO,KAAG,EAAE,SAAO,IAAG,MAAI,+DAA+D,EAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAE,SAAO,IAAE,EAAE,OAAK,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,EAAE,OAAK,EAAE,MAAM,CAAC;AAAE,MAAG,EAAE,MAAI,GAAE,MAAI,gEAAgE,CAAC,QAAQ,CAAC,GAAG,GAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,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,WAAS,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,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,WAAS,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,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,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,QAAKC,IAAE;AAAC,MAAI,IAAEA,GAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,QAAQ,CAAC,GAAE,IAAE,EAAC,UAASD,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAc,mBAAmB;AAAE,MAAG,CAAC,GAAG,EAAE,OAAMC,EAAC;AAAE,UAAM,IAAI,MAAM,gCAAgC,EAAE,KAAK,0CAA0CA,EAAC,EAAE;AAAE,SAAOD;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,KAAI,KAAK;AAAE,IAAEC,GAAE,UAAQ,WAASA,GAAE,UAAQ,WAAU,MAAI,2CAA2C,GAAEA,GAAE,UAAQ,YAAUA,KAAE,GAAGA,IAAE,SAAS;AAAG,MAAI,IAAE,EAAC,GAAEA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,QAAGA,IAAEA,IAAE,SAAO,IAAE,CAAC,MAAIC,KAAE,IAAE;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,SAAOC,GAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,QAAQ,CAAC,MAAI,KAAG,EAAE,KAAKD,IAAE,GAAG,CAAC,IAAE,EAAE,KAAKC,GAAE,GAAG,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,IAAAC,GAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,KAAKD,IAAE,CAAC,CAAC;AAAE,MAAI,IAAEC,GAAE,IAAI,OAAGD,IAAE,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAEA,GAAE,IAAI,OAAG,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,IAAE,GAAGA,IAAE,CAAC,GAAE,MAAI,GAAGD,GAAC,oDAAoDC,EAAC,aAAa,CAAC,SAAS;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,GAAGD,KAAEC,EAAC;AAAE,WAAO;AAAK,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,EAAE;AAAE,IAAAD,IAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAE,SAAOA,IAAE,QAAQ,OAAG,EAAE,KAAK,CAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,IAAI,CAACC,IAAE,MAAI,CAAC,GAAEA,EAAC,CAAC,EAAE,KAAK,CAACA,IAAE,MAAIA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAAA,OAAGA,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAEA,KAAED,KAAE,IAAEC,IAAE,EAAE;AAAE,MAAE,KAAK,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,kBAAiBC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,KAAK,GAAE,IAAE,EAAEC,IAAE,OAAM,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,OAAI,GAAGD,GAAC,KAAGC,OAAI,YAAU,MAAM,QAAQD,GAAC,MAAIC,OAAI;AAAY,UAAM,IAAI,MAAM,gFAAgF;AAAE,MAAGA,OAAI,YAAU,GAAGD,GAAC,KAAG,EAAEA,eAAa;AAAY,UAAM,IAAI,MAAM,2EAA2E;AAAE,SAAO,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,UAAS,EAAC,GAAEC,GAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,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,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,aAAY,IAAE,MAAK,IAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE;AAAM,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,GAAED,IAAE,KAAK;AAAE,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,IAAE,MAAK;AAAC,MAAGD,IAAE,SAAO;AAAE,WAAO,GAAGA,GAAC;AAAE,MAAGA,IAAE,SAAO,KAAG,MAAI;AAAK,WAAO,GAAG,EAAEA,KAAE,CAAC,EAAE,CAAC,GAAEC,IAAE,CAAC;AAAE,MAAGD,IAAE,SAAO,KAAG,OAAO,KAAG,YAAU,MAAM,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE;AAAC,QAAGC,OAAI;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,QAAGC,OAAI,IAAE;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,QAAGC,OAAI,KAAG;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,QAAGC,OAAI,eAAaA,OAAI;AAAE,aAAO,GAAG,GAAG,GAAG,GAAGD,GAAC,GAAE,GAAG,GAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqCC,EAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE;AAAC,QAAGA,OAAI;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,CAAC,IAAE,CAAC;AAAE,QAAGC,OAAI,IAAE;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,QAAGC,OAAI,KAAG;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,QAAGC,OAAI,SAAOA,OAAI;AAAY,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAE,CAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqCC,EAAC,EAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,gCAAgC,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,SAAO,GAAGD,KAAE,aAAYC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,cAAa,mBAAmB;AAAE,IAAEC,MAAG,EAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,KAAIA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB;AAAE,IAAE,EAAE,SAAOC,GAAE,QAAO,MAAI,qCAAqC,EAAE,IAAI,8BAA8BA,EAAC,GAAG;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAKA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,WAAU;AAAC,EAAAA,MAAG,SAAOA,KAAED;AAAG,MAAI,IAAE,GAAG,CAACA,KAAEC,EAAC,GAAE,CAAC,GAAE,IAAED,OAAGC,KAAED,MAAEC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,IAAI,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,SAAS,GAAE,CAACD,KAAEC,EAAC,CAAC;AAAE,MAAG,KAAG;AAAK,WAAO;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qEAAqE,EAAE,MAAM,IAAI;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAEC,IAAE,WAAU,UAAS,OAAO,GAAE,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,WAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,WAAU,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAe,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,gBAAe,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,OAAM,EAAEA,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,KAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAW,EAAC,GAAE,IAAE,EAAC,OAAMC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,QAAO,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAY,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,aAAY,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,0CAA0C;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAKC,IAAE,KAAI,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,GAAE,IAAE,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,GAAGC,EAAC,GAAE,MAAI,2FAA2FA,EAAC,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,aAAYA,IAAE,MAAK,GAAE,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,4CAA4C,GAAE,CAACC,IAAE,MAAI;AAAC,QAAI,IAAE,EAAEA,IAAE,KAAI,WAAU,mBAAmB,GAAE,IAAE,KAAG,OAAK,EAAE,GAAE,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,CAACC,IAAE,MAAI;AAAC,MAAE,MAAM,QAAQA,EAAC,GAAE,MAAI,kFAAkF;AAAE,QAAI,IAAE,GAAGA,IAAE,QAAO,YAAW,mBAAmB,GAAE,IAAE,KAAG,OAAK,EAAE,GAAE,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,CAACC,IAAE,MAAI;AAAC,MAAEA,cAAa,IAAG,MAAI,qDAAqD,GAAE,EAAE,KAAG,QAAM,aAAa,IAAG,MAAI,0DAA0D;AAAE,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAEC,EAAC,GAAE,CAACA,EAAC,GAAE,CAAC;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,CAACC,IAAE,MAAI;AAAC,MAAE,MAAM,QAAQA,EAAC,KAAGA,GAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,oEAAoE,GAAE,EAAE,KAAG,QAAM,aAAa,IAAG,MAAI,8DAA8D;AAAE,QAAI,IAAE,EAAE,UAAU,MAAID,IAAE,GAAGC,EAAC,GAAEA,IAAE,CAAC;AAAE,WAAO,KAAG,QAAM,GAAG,EAAE,MAAM,OAAM,EAAE,OAAM,uGAAuG,GAAE,GAAG,EAAE,KAAK,GAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,IAAE,GAAGD,GAAC,GAAE,MAAI,qDAAqD,GAAE,EAAEC,MAAG,QAAM,MAAM,QAAQA,EAAC,KAAGA,GAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,+EAA+E;AAAE,MAAI,IAAEA,MAAG;AAAK,MAAG,CAAC,GAAE;AAAC,IAAAA,KAAE,CAAC;AAAE,aAAQ,KAAK,EAAE;AAAoB,MAAAA,GAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAEA,GAAE,OAAO,OAAG,CAAC,EAAE,SAAS,IAAE,MAAK,IAAEA,GAAE;AAAO,EAAAA,KAAEA,GAAE,OAAO,OAAG,EAAE,SAAS,GAAE,EAAEA,GAAE,SAAO,GAAE,MAAI,gGAAgG,CAAC,0BAA0B;AAAE,MAAI,IAAE,MAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAUD,KAAEC,IAAE,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,SAAOA,GAAE,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,GAAGD,KAAE;AAAC,SAAO,EAAE,WAAWA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,OAAO,OAAG,KAAG,IAAI,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,oEACryG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,EAAED,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,EAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,IAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,YAAY;AAAE,MAAGC,OAAI,OAAKA,KAAE,EAAE,OAAK,IAAGA,OAAI,EAAE,OAAK;AAAE,UAAM,MAAM,gFAAgF,EAAE,IAAI,iBAAiBA,EAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAEA,IAAE,IAAE,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,SAAS,GAAE,GAAG,GAAG,GAAG,CAAC,GAAEA,IAAE,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,GAAEA,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC,CAAC,EAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,GAAGC,IAAE,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,MAAG,GAAE;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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAEC,IAAE,KAAI,cAAa,MAAM;AAAE,KAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,cAAa,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAY,MAAM,GAAE,IAAE,EAAEC,IAAE,KAAI,aAAY,MAAM;AAAE,KAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAEC,IAAE,KAAI,cAAa,MAAM;AAAE,SAAO,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,GAAG,GAAGD,KAAEC,EAAC,GAAE,GAAG,GAAGD,KAAEC,EAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG;AAAW,SAAS,GAAGD,KAAEC,IAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,kBAAiB,cAAc,GAAE,IAAE,EAAEC,IAAE,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;AAAE,UAAM,IAAI,MAAM,sDAAsD;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,GAAG,EAAE,KAAK,KAAG;AAAG,UAAM,IAAI,MAAM,qCAAqC,EAAE,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,KAAG;AAAG,UAAM,IAAI,MAAM,oCAAoC,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,MAAM;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,WAAU,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWC,IAAE,SAAQ,GAAE,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,KAAEC,KAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,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,YAAWC,IAAE,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,mBAAmB,EAAC,GAAE,IAAE,EAAC,YAAWC,IAAE,SAAQ,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAEC,IAAE,KAAI,SAAS;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,EAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,WAAU;AAAC,MAAG,GAAGD,GAAC,GAAEC,OAAI,aAAY;AAAC,QAAI,IAAE,GAAGD,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAGA,GAAC,GAAEC,EAAC;AAAE,SAAO,EAAE,WAAW,GAAED,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,WAAU;AAAC,MAAG,GAAGD,GAAC,GAAEC,OAAI,aAAY;AAAC,QAAI,IAAE,GAAGD,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAGA,GAAC,GAAEC,EAAC;AAAE,SAAO,EAAE,WAAW,GAAED,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,EAAC,UAAS,IAAE,KAAI,IAAE,CAAC,GAAE;AAAC,MAAG,MAAI,QAAM,MAAI;AAAK,UAAM,IAAI,UAAU,GAAG,CAAC,4CAA4C;AAAE,MAAGD,QAAI;AAAO,WAAM,CAAC;AAAE,MAAI,IAAE,EAAEA,KAAE,KAAI,YAAWA,eAAa,KAAGA,IAAE,QAAM,SAAS;AAAE,MAAGC,OAAI;AAAO,WAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAEA,IAAE,KAAI,YAAWA,cAAa,KAAGA,GAAE,QAAM,SAAS,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAE,KAAK;AAAE,SAAO,MAAI,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAEC,IAAE,KAAI,SAAS;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,EAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,IAAE,MAAI,aAAW,MAAI,aAAY,MAAI,+DAA+D,CAAC,GAAG;AAAE,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,IAAEC,GAAE,WAAS,EAAE,MAAK,MAAI,wCAAwC,EAAE,IAAI,SAASA,GAAE,MAAM,GAAG;AAAE,MAAI,IAAE,MAAI,YAAU,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK;AAAI,MAAEA,GAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,EAAEA,GAAE,CAAC,EAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,EAAE,CAAC,KAAG,EAAE,MAAM,CAAC,IAAE,KAAGA,GAAE,CAAC,EAAE,CAAC,KAAG,KAAGA,GAAE,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,UAASA,IAAE,MAAK,EAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAEC,IAAE,KAAI,KAAK;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,SAAS;AAAE,MAAI,IAAE,GAAGC,IAAED,IAAE,KAAK,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAM,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAG,MAAI,IAAE,GAAG,GAAG,GAAGA,KAAE,SAAS,GAAE,EAAE,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,UAAS,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAEA,IAAE,QAAO,cAAc,GAAE,IAAE,GAAG,GAAE,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;AAAE,MAAE,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,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE;AAAK,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,+DAA+D,CAAC,GAAG;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,gDAAgD,CAAC,EAAE;AAAE,MAAE,KAAG,KAAK,OAAO;AAAE,MAAI,IAAE,EAAC,QAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAC,GAAE,IAAE,EAAC,YAAWC,IAAE,MAAK,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,YAAW,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE,IAAE,GAAE,IAAE,SAAQ;AAAC,MAAGA,KAAE;AAAE,UAAM,IAAI,MAAM,iDAAiDA,EAAC,EAAE;AAAE,MAAI,IAAE,EAAC,SAAQ,EAAED,KAAE,WAAU,UAAS,OAAO,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,OAAMC,IAAE,SAAQ,GAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,MAAK,cAAc,GAAE,IAAE,EAAEC,IAAE,MAAK,cAAc;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,+DAA+D,EAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAE,GAAE,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,KAAEC,IAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAC,UAASC,IAAE,eAAc,EAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,SAAO,EAAEA,GAAE,WAAS,GAAE,MAAI,kDAAkD,GAAE,GAAGD,KAAE,CAACC,EAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,SAAO,EAAEA,GAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,SAAO,EAAEA,GAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,SAAO,EAAEA,GAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,KAAGA,GAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB;AAAE,IAAE,EAAE,QAAM,IAAEC,GAAE,QAAO,MAAI,cAAc,EAAE,IAAI,kCAAkCA,GAAE,MAAM,EAAE,GAAE,EAAE,EAAE,WAASA,GAAE,QAAO,MAAI,qBAAqB,EAAE,MAAM,kCAAkCA,GAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,OAAO,CAAC,GAAE,GAAE,MAAI,IAAE,KAAG,KAAGA,GAAE,SAAO,MAAI,IAAE,EAAE,IAAE,CAAC,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,EAAE,CAAC,KAAGA,GAAE,IAAE,CAAC,MAAI,IAAE,GAAE,IAAE,GAAE,MAAI,4BAA4B,EAAE,MAAM,MAAM,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC,qCAAqCA,GAAE,SAAS,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWA,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,OAAMC,IAAE,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,KAAG,MAAI,QAAM,MAAI,GAAG,GAAEA,IAAE,GAAE,GAAE,CAAC,IAAE,MAAI,GAAG,GAAEA,IAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAED,IAAE,OAAO,GAAE,CAAC,GAAE,IAAEC,GAAE,IAAI,CAAC,GAAE,OAAK,IAAE,EAAE,CAAC,IAAE,KAAG,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC,GAAE,IAAEA,GAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAEA,GAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,KAAG,IAAE,MAAIC,GAAE,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,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAEC,IAAE,SAAQ,OAAO,GAAE,IAAE,EAAC,GAAE,GAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,MAAK,IAAE,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,MAAKC,IAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,gBAAe,OAAO,CAAC,GAAE,IAAE,EAAEC,IAAE,qBAAoB,cAAc,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAEC,IAAE,UAAS,eAAc,EAAE,KAAK,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAuB,OAAO,GAAE,IAAE,EAAEC,IAAE,UAAS,sBAAsB,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,GAAC,GAAE,IAAE;AAAK,MAAG,KAAG,QAAM,MAAI;AAAU,QAAE,IAAI,aAAa,CAAC;AAAA,WAAU,MAAI;AAAQ,QAAE,IAAI,WAAW,CAAC;AAAA,WAAU,MAAI;AAAO,QAAE,IAAI,WAAW,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,CAAC,IAAEC,GAAE;AAAE,SAAO,EAAE,WAAW,GAAED,KAAE,CAAC;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,GAAGA,KAAEC,IAAE,GAAE;AAAC,SAAO,KAAG,SAAO,IAAE,GAAG,IAAG,GAAGD,KAAEC,IAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,QAAQ,eAAe,MAAI,KAAG,KAAG;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE;AAAG,OAAI,GAAGD,GAAC,KAAG,GAAGC,EAAC,OAAK,IAAE,QAAI,GAAGD,GAAC,KAAG,GAAGC,EAAC,MAAI,IAAE,OAAI,GAAE;AAAC,QAAI,IAAED,IAAE,YAAY,MAAK,IAAEC,GAAE,YAAY;AAAK,QAAG,MAAI;AAAE,YAAM,IAAI,MAAM,yCAAyC,CAAC,eAAe,CAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQD,GAAC,KAAG,MAAM,QAAQC,EAAC,GAAE;AAAC,QAAI,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAGC,EAAC;AAAE,QAAG,CAAC,GAAG,GAAE,CAAC;AAAE,YAAM,IAAI,MAAM,0CAA0C,CAAC,iBAAiB,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGD,GAAC,IAAEA,MAAE,GAAGA,GAAC,GAAE,IAAE,GAAGC,EAAC,IAAEA,KAAE,GAAGA,EAAC;AAAE,MAAG,EAAE,WAAS,EAAE;AAAO,UAAM,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,CAAC,EAAE,GAAE,CAAC;AAAE,YAAM,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,KAAEC,IAAE;AAAC,EAAAD,IAAE,EAAE,KAAK,MAAIC,GAAE,KAAK,GAAE,MAAIA,GAAE,CAAC,GAAE,OAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,OAAOA,MAAG,YAAU,OAAOA,MAAG,YAAU,OAAOA,MAAG,YAAU,CAACA,EAAC,IAAEA;AAAE,SAAO,GAAGD,GAAC,KAAG,GAAGA,IAAE,CAAC,CAAC,KAAG,GAAGC,EAAC,KAAG,GAAGA,GAAE,CAAC,CAAC,IAAE,GAAGD,KAAE,GAAE,CAAC,GAAE,MAAI,KAAG,CAAC,IAAE,GAAGA,KAAEC,IAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,KAAG,SAAO,IAAE,GAAG,IAAG,CAAC,GAAGD,KAAEC,IAAE,CAAC;AAAE,UAAM,IAAI,MAAM,8BAA8BD,GAAC,kBAAkBC,EAAC,EAAE;AAAE,SAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAM,CAAC,SAASD,GAAC,KAAG,CAAC,SAASC,EAAC,IAAE,OAAG,EAAE,MAAMD,GAAC,KAAG,MAAMC,EAAC,KAAG,KAAK,IAAID,MAAEC,EAAC,IAAE;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,IAAEC,MAAGD,IAAE,CAAC,IAAE;AAAE,YAAM,IAAI,MAAM,sBAAsBA,IAAE,CAAC,CAAC,SAASC,EAAC,WAAW,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,aAAaD,GAAC,GAAE,IAAE,IAAI,aAAaC,EAAC;AAAE,MAAG,EAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,wCAAwC,EAAE,MAAM,gBAAgB,EAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,CAAC,MAAI,EAAE,CAAC;AAAE,YAAM,IAAI,MAAM,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,WAAQC,KAAE,GAAEA,KAAED,IAAE,QAAOC,MAAI;AAAC,QAAI,IAAED,IAAEC,EAAC;AAAE,UAAM,QAAQ,CAAC,IAAE,GAAG,CAAC,IAAED,IAAEC,EAAC,IAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,SAAS,cAAc,OAAO;AAAE,SAAM,iBAAgBA,OAAIA,GAAE,cAAY,OAAIA,GAAE,QAAM,MAAGA,GAAE,OAAK,MAAGA,GAAE,MAAM,WAAS,SAAQA,GAAE,MAAM,OAAK,OAAMA,GAAE,MAAM,MAAI,OAAMA,GAAE,UAAQ,QAAOA,GAAE,YAAYD,GAAC,GAAE,IAAI,QAAQ,OAAG;AAAC,IAAAC,GAAE,iBAAiB,cAAa,OAAG,EAAEA,EAAC,CAAC,GAAEA,GAAE,KAAK;AAAA,EAAC,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,QAAMA,IAAE,KAAK,GAAE,+BAA8BA,OAAG,MAAM,IAAI,QAAQ,CAAAC,OAAG;AAAC,IAAAD,IAAE,0BAA0BC,EAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAKA,IAAE,KAAK,SAAO,GAAE,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,QAAIA,IAAE,GAAE,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,MAAAA,KAAE,KAAK,OAAK,KAAK,SAAO,IAAE,GAAE,IAAE,KAAK,OAAK,KAAK,SAAO,IAAE,IAAG,CAAC,KAAK,aAAW,KAAK,iBAAiBA,EAAC,OAAK,IAAE;AAAA,IAAG;AAAC,YAAO,CAAC,KAAK,aAAW,KAAK,iBAAiB,CAAC,OAAK,KAAK,UAAQ,KAAK,aAAa,CAAC,IAAG,KAAK,aAAaA,EAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAO,KAAK,SAAO,QAAM,KAAK,UAAQ,YAAUA,KAAE,KAAK,MAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE;AAAC,WAAOA,MAAG,KAAK,SAAOA,MAAG,KAAK;AAAA,EAAK;AAAC;AAA3zB,IAA6zB,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,QAAMA,IAAE,KAAK,OAAK,IAAE,GAAE,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,GAAEA,KAAE,IAAE,KAAK,IAAEA,KAAE,IAAE,IAAE,KAAK,IAAEA,KAAE,IAAE,GAAE,KAAK,IAAE,IAAE,KAAK,KAAK,IAAE,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAIA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAE,eAAO;AAAC;AAAG,YAAE,KAAK,MAAM,UAAU,GAAE,IAAE,IAAE,KAAK,IAAE;AAAA,aAAQ,KAAG;AAAG,UAAG,KAAG,IAAE,GAAEA,KAAE,IAAE,GAAE,IAAE,IAAE,QAAKA,KAAEA,IAAE,IAAE,MAAGA,KAAE,KAAK,KAAG,IAAE,IAAE,KAAK,IAAI,CAAC,IAAG,IAAE,KAAK,MAAM,GAAE,IAAE,KAAG,KAAK,IAAI,CAAC,IAAE;AAAE;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,aAAaA,IAAE;AAAC,WAAO,KAAK,UAAQ,YAAUA,KAAE,KAAK,MAAMA,EAAC;AAAA,EAAC;AAAC;AAAr4C,IAAu4C,KAAG,MAAK;AAAA,EAAC,YAAYA,KAAE,GAAE,IAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,MAAI,KAAK,SAAO,QAAM,KAAK,UAAQ,WAAU,KAAK,MAAIA,IAAE,KAAK,QAAM,IAAEA,IAAE,KAAK,QAAM,GAAE,KAAG,SAAO,IAAE,KAAK,OAAO,IAAG,OAAO,KAAG,aAAW,IAAE,EAAE,SAAS,IAAG,CAAC,KAAK,eAAe,KAAG,KAAK,SAAO;AAAE,YAAM,IAAI,MAAM,0BAA0BA,EAAC,MAAM,CAAC,8BAA8B;AAAE,SAAK,SAAO,GAAG,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAO,KAAK,eAAe,IAAEA,KAAE,KAAK,MAAMA,EAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAO,KAAK,aAAa,KAAK,MAAI,KAAK,QAAM,KAAK,OAAO,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE,IAAE,WAAU,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,SAAO,IAAE,IAAG,KAAG,SAAO,IAAE,YAAW,MAAI,aAAW,MAAI;AAAQ,UAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAGC,IAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,GAAE,IAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI;AAAO,UAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAGC,IAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGA,MAAG,QAAMA,OAAI;AAAO,UAAM,IAAI,MAAM,yBAAyBA,EAAC,EAAE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE,IAAE,GAAE,IAAE,WAAU,GAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,IAAI,GAAGC,IAAE,GAAE,MAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE,IAAE,WAAU;AAAC,MAAG,MAAI;AAAE,UAAM,IAAI,MAAM,4BAA4B;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAKC,IAAE,MAAK,GAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,OAAM,EAAEA,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,YAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAKC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,GAAE,SAAO,GAAE,MAAI,qDAAqDA,GAAE,IAAI,GAAG,GAAE,GAAGA,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,GAAG,GAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,GAAG,GAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,GAAG,GAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAEC,IAAE,mBAAkB,iBAAiB,GAAE,IAAE,EAAE,GAAE,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;AAAO,UAAM,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAEC,IAAE,KAAI,WAAW;AAAE,IAAE,EAAE,UAAQ,EAAE,OAAM,MAAI,kDAAkD,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC,EAAE,KAAK,IAAI,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC,EAAE,KAAK,IAAI;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,IAAI,EAAE,CAAC,CAAC,KAAG;AAAI,MAAI,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,CAACC,EAAC,GAAE,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAEC,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,IAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAU,SAAS;AAAE,MAAGC,OAAI,OAAKA,KAAE,EAAE,OAAK,IAAGA,OAAI,EAAE,OAAK;AAAE,UAAM,MAAM,4EAA4E,EAAE,IAAI,gBAAgBA,EAAC,EAAE;AAAE,MAAI,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,KAAIA,GAAC;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,MAAIC,KAAE,EAAC,OAAMD,IAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,IAAEA,IAAE,UAAQ,aAAY,MAAI,8DAA8DA,IAAE,KAAK,GAAG;AAAE,MAAIC,KAAE,EAAC,OAAMD,IAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAEA,IAAE,OAAKC,IAAE;AAAE,MAAGA,MAAG,GAAE;AAAC,QAAI,IAAE,EAAED,KAAE,CAAC,GAAEC,EAAC,CAAC;AAAE,QAAE,GAAG,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAAC,GAAE,KAAGA,KAAE,EAAE,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAAC,GAAEC,EAAC,CAAC,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAAC,GAAEC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAEA,KAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAEA,KAAE,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,KAAEC,IAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC,GAAE,IAAE,EAAC,iBAAgBC,IAAE,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,IAAED,IAAE,UAAQ,WAAU,MAAI,mDAAmDA,IAAE,KAAK,EAAE;AAAE,MAAI,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAEA,IAAE,OAAK,GAAE;AAAE,MAAGC,MAAG,QAAMA,KAAE,GAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC,GAAE,IAAEA,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAEC,IAAE,IAAE,GAAGD,KAAE,GAAE,CAAC,GAAE,IAAEC;AAAA,EAAC,WAASA,MAAG,QAAMA,KAAE,GAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAEC,KAAE,GAAE,IAAE,GAAG,CAACD,KAAE,GAAG,CAAC,CAAC,GAAEA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAEC;AAAA,EAAC;AAAM,QAAED;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,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,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAmB,GAAE,IAAE,EAAEC,IAAE,KAAI,mBAAmB;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,SAAO,EAAE,GAAE,GAAG,EAAE,OAAMC,EAAC,EAAE,QAAQ;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,WAAU,SAAQ,mBAAmB;AAAE,IAAE,EAAE,UAAQ,GAAE,MAAI,sCAAsC,GAAE,EAAE,SAAO,KAAG,EAAEC,MAAG,EAAE,CAAC,EAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAE,GAAE,IAAE,EAAC,MAAKA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,OAAMC,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,OAAMC,IAAE,KAAI,GAAE,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,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,KAAEC,EAAC;AAAE,MAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,SAAO,GAAGD,KAAE,MAAK,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,MAAG,QAAMA,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,EAAE,WAAS,KAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,8EAA8E;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,MAAG,QAAMA,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,iDAAiD;AAAE,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,kEAAkE;AAAE,MAAG,EAAE,WAAS,KAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,MAAG,QAAMA,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,oEAAoE;AAAE,MAAG,EAAE,WAAS,KAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,MAAG,QAAMA,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,sEAAsE;AAAE,MAAG,EAAE,WAAS,KAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,MAAG,QAAMA,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,wEAAwE;AAAE,MAAG,EAAE,WAAS,KAAGC,MAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAOA,KAAEA,MAAG,GAAE,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,OAAK,IAAEA,GAAE,MAAMA,GAAE,OAAK,CAAC,IAAE,GAAE,IAAEA,GAAE,OAAK,IAAEA,GAAE,OAAK,IAAE,GAAE,IAAE,6FAA6F,EAAE,KAAK,oBAAoBA,GAAE,KAAK,YAAYD,GAAC,eAAe,CAAC,mBAAmB,CAAC;AAAI,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,IAAI;AAAE,MAAGA,IAAE,SAAO,KAAG,EAAE,OAAK;AAAG,UAAM,IAAI,MAAM,IAAE,0BAA0B,KAAG,EAAE,OAAK,EAAE,EAAE;AAAE,MAAG,EAAE,SAAO,IAAEA,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,IAAE,mBAAmB,IAAEA,IAAE,SAAO,CAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAG,EAAE,MAAM,CAAC,MAAIC,GAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,sBAAsB,CAAC,MAAMA,GAAE,MAAM,CAAC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAK,GAAE,EAAE;AAAE,QAAG,EAAE,MAAM,IAAE,CAAC,MAAID,IAAE,IAAE,CAAC;AAAE,YAAM,IAAI,MAAM,IAAE,kBAAkB,IAAE,CAAC,MAAM,EAAE,MAAM,IAAE,CAAC,CAAC,cAAc,IAAE,CAAC,MAAMA,IAAE,IAAE,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGA,GAAE,OAAK;AAAE,UAAM,IAAI,MAAM,+EAA+EA,GAAE,IAAI,GAAG;AAAE,MAAGD,IAAE,OAAK;AAAE,UAAM,IAAI,MAAM,+EAA+EA,IAAE,IAAI,GAAG;AAAE,MAAGC,GAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,0DAA0DA,GAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,6DAA6D,CAAC,EAAE;AAAE,MAAG,EAAE,WAAS,GAAE;AAAC,QAAGA,GAAE,SAAO;AAAE,YAAM,IAAI,MAAM,sDAAsDA,GAAE,KAAK,EAAE;AAAE,QAAGD,IAAE,SAAO;AAAE,YAAM,IAAI,MAAM,sDAAsDA,IAAE,KAAK,EAAE;AAAA,EAAC;AAAC,KAAG,GAAEC,IAAED,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,MAAM,QAAO,IAAE,IAAE,IAAEA,GAAE,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,EAAE,QAAO,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,SAAG,EAAE,CAAC;AAAE,MAAI,IAAE,IAAE,IAAE,IAAE,GAAE,IAAE,GAAGA,GAAE,KAAK,IAAE,GAAE,IAAE,CAAC,GAAG,GAAG,EAAE,MAAM,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAM,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE,EAAEC,IAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,WAAU,qBAAqB;AAAE,MAAG,GAAG,GAAE,GAAE,EAAE,KAAK,GAAE,EAAE,UAAQ,EAAE;AAAM,UAAM,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,KAAEC,KAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC;AAAE,MAAGC,KAAE;AAAE,UAAM,IAAI,MAAM,6CAA6CA,EAAC,EAAE;AAAE,MAAGA,KAAE;AAAE,UAAM,IAAI,MAAM,uDAAuD,CAAC,aAAaA,EAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,GAAEA,IAAE,QAAO,EAAC,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,KAAEC,KAAE,GAAE,IAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI;AAAO,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,IAAI,GAAGC,IAAE,GAAE,GAAE,MAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,mBAAmB;AAAE,IAAE,EAAE,OAAK,GAAE,MAAI,sCAAsC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAKC,GAAC,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,oBAAoB,GAAE,IAAE,EAAEC,IAAE,cAAa,sBAAqB,OAAO;AAAE,IAAE,GAAG,CAAC,GAAE,MAAI,kCAAkC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,YAAW,EAAC,GAAE,IAAE,EAAC,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,IAAEC,MAAG,CAAC,EAAE,MAAM,UAAQA,KAAE,EAAE,MAAM,QAAO,MAAI,UAAUA,EAAC,gBAAgB,EAAE,MAAM,MAAM,KAAK,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,MAAKA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,OAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,MAAG,GAAE,GAAE;AAAC,SAAO,EAAE,aAAaD,KAAEC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO;AAAI,IAAAA,GAAE,CAAC,KAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAGD,KAAE,OAAO,GAAE,IAAE,GAAG,CAAC,EAAE,QAAOA,IAAE,MAAM,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,EAAE,CAAC,CAAC,GAAE,IAAE,IAAEA,IAAE;AAAO,MAAE,OAAO,IAAI,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,SAAS;AAAC;AAAC,eAAe,GAAGA,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,aAAY,cAAa,MAAM,GAAE,IAAE,MAAMC,GAAE,KAAK,GAAE,IAAE,GAAGA,GAAE,OAAM,CAAC;AAAE,SAAOD,QAAIC,MAAGA,GAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,eAAe,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,UAAU,GAAE,IAAE,EAAEC,IAAE,QAAO,YAAW,MAAM,GAAE,IAAE,KAAG,OAAK,IAAE,GAAE,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;AAAI,SAAG,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,GAAEC,OAAI,KAAG,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAGC,MAAG,SAAOA,KAAE,EAAE,MAAM,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,QAAQ,IAAG,EAAE,EAAE,SAAOA,GAAE,QAAO,MAAI,qCAAqC,EAAE,IAAI,8BAA8BA,EAAC,GAAG,GAAEA,GAAE,QAAQ,OAAG;AAAC,MAAE,KAAG,KAAG,IAAE,EAAE,MAAK,MAAI,+CAA+C,EAAE,OAAK,CAAC,YAAYA,EAAC,EAAE;AAAA,EAAC,CAAC,GAAE,EAAE,QAAM;AAAE,WAAO,EAAE,MAAM;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAKA,GAAC;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,GAAE,MAAI,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,KAAEC,IAAE,GAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAEC,IAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE;AAAC,KAAG,CAAC;AAAE,MAAI,IAAE,EAAED,KAAE,WAAU,aAAY,OAAO,GAAE,IAAE,EAAEC,IAAE,WAAU,WAAW;AAAE,KAAG,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAGD,IAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,8EAA8EA,IAAE,KAAK,GAAG;AAAE,MAAGA,IAAE,OAAK;AAAE,UAAM,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,MAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,kDAAkD,EAAE,MAAM,gBAAgB,CAAC,GAAG;AAAE,MAAI,IAAEC,GAAE;AAAK,MAAG,EAAEA,GAAE,SAAO,KAAGA,GAAE,SAAO,KAAG,MAAI;AAAG,UAAM,IAAI,MAAM,oCAAoCA,GAAE,KAAK,sBAAsB,CAAC,GAAG;AAAE,MAAGA,GAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,mDAAmD;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAE;AAAC,KAAG,CAAC;AAAE,MAAI,IAAE,EAAED,KAAE,iBAAgB,iBAAgB,OAAO,GAAE,IAAE,EAAEC,IAAE,gBAAe,iBAAgB,mBAAmB,GAAE,IAAE,EAAE,GAAE,gBAAe,iBAAgB,EAAE,KAAK;AAAE,KAAG,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,IAAE,EAAC,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAEA,IAAE,WAAU,YAAW,OAAO,GAAE,IAAE,EAAC,QAAO,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGA,MAAG;AAAK,WAAOD,IAAE,MAAM,MAAM;AAAE,MAAG,GAAGA,IAAE,OAAMC,EAAC;AAAE,WAAOA;AAAE,MAAGD,IAAE,MAAM,WAASC,GAAE,QAAO;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAED,IAAE,MAAM,QAAO;AAAI,MAAAC,GAAE,CAAC,KAAG,QAAMD,IAAE,MAAM,CAAC,KAAG,OAAK,EAAE,KAAKA,IAAE,MAAM,CAAC,CAAC,IAAE,EAAE,KAAKC,GAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,MAAG,EAAE,EAAE,UAAQ,WAAU,MAAI,gFAAgF,EAAE,KAAK,kBAAkB,GAAE,EAAEC,MAAG,KAAGA,KAAE,GAAE,MAAI,qDAAqDA,EAAC,GAAG,GAAEA,OAAI;AAAE,WAAOD,eAAa,KAAG,EAAE,MAAM,IAAE;AAAE,MAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,IAAEC,IAAE,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,KAAEC,IAAE,GAAE;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,IAAEC,KAAE,IAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,SAAS;AAAC;AAAC,eAAe,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,eAAc,QAAQ,GAAE,IAAE,EAAEC,IAAE,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,IAAE,IAAE,KAAG,KAAG,GAAE,MAAI,4EAA4E,CAAC,cAAc,CAAC,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;AAAI,QAAE,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,IAAE,GAAE;AAAI,UAAG,EAAE,CAAC,EAAE,UAAQ,EAAE,CAAC,GAAE;AAAC,UAAE,CAAC,IAAE;AAAE;AAAA,MAAK;AAAA,EAAC;AAAC,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAEC,OAAI,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,GAAGD,KAAEC,IAAE,GAAE,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,IAAEC;AAAE,IAAE,SAAO,MAAI,IAAE,EAAEA,IAAE,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,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,EAAE,EAAE,WAAS,GAAE,MAAI,mEAAmE,CAAC,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,MAAI,EAAE,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuC,EAAE,CAAC,CAAC,GAAG,GAAE,EAAE,MAAI,EAAE,CAAC,GAAE,MAAI,0CAA0C,CAAC,yCAAyC,EAAE,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,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,KAAG,QAAM,MAAI;AAAS,WAAOD;AAAE,MAAG,MAAI;AAAO,WAAO,GAAGA,KAAE,GAAGC,EAAC,CAAC;AAAE,QAAM,IAAI,MAAM,gDAAgD,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAEA,IAAE,IAAE,GAAGD,IAAE,OAAMC,GAAE,KAAK;AAAE,SAAO,EAAE,SAAO,MAAI,IAAE,GAAG,GAAE,CAAC,IAAG,EAAE,GAAED,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAGA,OAAI;AAAS,WAAOD;AAAE,MAAGC,OAAI;AAAO,WAAO,GAAGD,GAAC;AAAE,MAAGC,OAAI;AAAM,WAAO,GAAGD,GAAC;AAAE,MAAGC,OAAI;AAAQ,WAAO,GAAGD,GAAC;AAAE,MAAGC,OAAI;AAAQ,WAAO,GAAGD,KAAE,CAAC;AAAE,MAAGC,OAAI;AAAY,WAAO,GAAGD,KAAE,CAAC;AAAE,MAAGC,OAAI;AAAU,WAAO,GAAGD,GAAC;AAAE,QAAM,IAAI,MAAM,4BAA4BC,EAAC,GAAG;AAAC;AAAC,IAAI,KAAG,CAACD,KAAEC,OAAI,EAAED,MAAE,MAAIC,OAAI;AAAS,SAAS,GAAG,EAAC,GAAED,KAAE,QAAOC,IAAE,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,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,EAAEC,IAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,uEAAuE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,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;AAAE,QAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,aAAY,MAAI,oDAAoD,CAAC,2DAA2D,EAAE,WAAW,IAAI;AAAA,aAAU,EAAE,WAAS;AAAE,UAAG;AAAC,WAAG,GAAE,EAAE,QAAQ;AAAA,MAAC,SAAO,GAAE;AAAC,YAAI,IAAE,oDAAoD,CAAC,4DAA4D,EAAE,QAAQ;AAAK,cAAM,MAAM,CAAC;AAAA,MAAC;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,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,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,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,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,IAAEC;AAAE,IAAE,SAAO,MAAI,IAAE,EAAEA,IAAE,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,GAAE,GAAE,IAAG,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,WAAU,GAAE,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sCAAqC,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,IAAE;AAAG,EAAAA,GAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAEA,IAAE,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,GAAEA,GAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,IAAG,GAAE,QAAO,EAAC,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,QAAOC,IAAE,SAAQ,GAAE,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,KAAEC,IAAE,GAAE,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,EAAEC,IAAE,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,GAAG,GAAE,CAAC,GAAE,MAAI,sFAAsF,CAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,yBAAwB,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,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,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,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,SAAQ,GAAE,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,GAAEC,IAAE,YAAW,IAAE,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,KAAEC,IAAE,GAAE,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,EAAEC,IAAE,KAAI,cAAc;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,IAAE,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,IAAE,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,mBAAmB,CAAC,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,IAAE,IAAE,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,CAAC,KAAG,CAAC,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAG,CAAC,KAAG,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,KAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAG,KAAG,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;AAAM,aAAM,CAAC,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,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,KAAEC,IAAE,GAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,CAAC;AAAE,SAAK,IAAEA,MAAGD,IAAE;AAAM,MAAE,KAAK,GAAGA,KAAE,GAAEC,EAAC,CAAC,GAAE,KAAG;AAAE,MAAG;AAAE,WAAK,IAAED,IAAE,QAAM;AAAC,UAAI,IAAE,IAAEC,KAAED,IAAE,MAAK,IAAE,GAAG,CAAC,GAAGA,KAAE,GAAEC,KAAE,CAAC,GAAE,GAAG,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAG;AAAA,IAAC;AAAC,SAAO,EAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,GAAEA,EAAC,CAAC,IAAE,EAAE,GAAG,CAAC,GAAE,CAAC,EAAE,QAAOA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,IAAE,IAAG;AAAC,OAAG,SAAO,IAAE,GAAGA,EAAC;AAAG,MAAI,IAAE,GAAGD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,EAAEA,EAAC,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,IAAE,YAAW,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAe,GAAE,IAAE,EAAEC,IAAE,SAAQ,iBAAgB,SAAS,GAAE,IAAE,EAAE,GAAE,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,MAAIC,KAAE,EAAED,KAAE,SAAQ,iBAAgB,SAAS;AAAE,IAAEC,GAAE,SAAO,GAAE,MAAI,6DAA6DA,GAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,GAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,SAAQ,gBAAgB,GAAE,IAAEC,GAAE,OAAK,GAAE,IAAEA,GAAE,MAAM,CAAC;AAAE,IAAEA,GAAE,QAAM,GAAE,MAAI,yEAAyEA,GAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,+FAA+F,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,MAAMA,GAAE,IAAI;AAAE,SAAO,EAAE,KAAK,GAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAE,GAAGA,IAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAED,KAAE,SAAQ,gBAAgB,GAAE,IAAEC,GAAE,OAAK,GAAE,IAAEA,GAAE,MAAM,CAAC;AAAE,IAAEA,GAAE,QAAM,GAAE,MAAI,yEAAyEA,GAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,0FAA0F,CAAC,GAAG;AAAE,MAAI,IAAEA,GAAE,OAAM,IAAE,GAAGA,IAAE,SAAS,GAAE,IAAE,GAAG,CAAC,QAAM,OAAK,KAAI,CAAC,GAAE;AAAE,UAAOA,GAAE,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,KAAEC,IAAE,IAAE,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,SAAQC,IAAE,WAAU,GAAE,QAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,MAAI,KAAG,SAAO,IAAE,OAAO,oBAAmB,KAAG,SAAO,IAAE;AAAG,MAAI,IAAED,IAAE,MAAM,CAAC;AAAE,SAAO,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAEA,IAAE,SAAO,GAAE,MAAI,+CAA+CA,IAAE,IAAI,GAAG,GAAE,EAAEA,IAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oDAAoDA,IAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAEC,GAAE,SAAO,GAAE,MAAI,4BAA4B,GAAE,EAAEA,GAAE,MAAM,CAAC,MAAI,GAAE,MAAI,sDAAsD,CAAC,aAAaA,GAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,qBAAoB,SAAS,GAAE,IAAE,EAAEC,IAAE,UAAS,qBAAoB,SAAS,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE;AAAe,MAAI,IAAE,EAAC,eAAc,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,KAAG;AAAE,EAAAD,IAAE,OAAO,GAAE,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,KAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOD,MAAEC,KAAE,IAAED,MAAEC,KAAE,KAAG;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,QAAO,IAAE,GAAE,IAAE;AAAG,SAAK,IAAE,KAAG;AAAC,QAAE,KAAG,IAAE,MAAI;AAAG,QAAI,IAAE,EAAEC,IAAED,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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,OAAG,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO;AAAI,IAAAA,GAAE,CAAC,IAAE,KAAG,EAAE,KAAK,EAAC,OAAMA,GAAE,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,SAAO,KAAG,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,EAAC,OAAM,GAAE,UAAS,GAAE,oBAAmB,EAAC,IAAE;AAAE,QAAG,IAAE;AAAE;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;AAAE;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,IAAE,IAAE;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,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,SAASC,KAAE,GAAEA,KAAE,IAAE,CAAC,GAAE,IAAED,IAAE,SAAS,IAAE,GAAE,IAAE,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;AAAE,WAAO;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,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,KAAK,IAAIA,KAAE,IAAE,CAAC;AAAE,SAAO,KAAGD,MAAE,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAOD,IAAE,QAAMC,GAAE,SAAOD,IAAE,UAAQC,GAAE,SAAOA,GAAE,WAASD,IAAE;AAAQ;AAAC,eAAe,GAAGA,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAEC,IAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,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,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAIC,MAAG,EAAE,QAAQ,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAEC,IAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAa,MAAI,IAAE,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,eAAc,GAAE,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,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAEC,IAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,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,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAIC,MAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,gBAAe,GAAG,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAEC,IAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,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,KAAEC,IAAE,GAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAEC,IAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,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,MAAIC,MAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,cAAa,GAAG,GAAE,OAAO,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAEC,IAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAEC,GAAE,WAAS,GAAE,MAAI,6DAA6DA,EAAC,GAAG,GAAE,EAAE,MAAI,SAAI,MAAI,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,IAAEA,IAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAKA,GAAC,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,KAAEC,IAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,uBAAuB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,uEAAuE,EAAE,IAAI,GAAG,GAAE,EAAEC,GAAE,WAAS,GAAE,MAAI,oEAAoEA,EAAC,GAAG,GAAE,EAAE,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,kDAAkD,GAAE,EAAE,MAAI,SAAI,MAAI,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,IAAEA,IAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAKA,GAAC,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,KAAEC,KAAE,UAAS,IAAE,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,EAAEC,OAAI,UAAQA,OAAI,UAAS,MAAI,0CAA0CA,EAAC,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;AAAM,QAAED;AAAE,MAAGC,OAAI,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,IAAE,IAAE,GAAG,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,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,GAAEC,EAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAEA,EAAC;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,GAAE,IAAE,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,WAAU,IAAE,YAAW,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,aAAY,SAAS,GAAE,IAAE,EAAEC,IAAE,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,eAAc,GAAE,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,KAAEC,IAAE,GAAE;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,SAAOC,MAAG,YAAU,EAAEA,KAAE,MAAI,GAAE,MAAI,gDAAgDA,EAAC,GAAG,GAAE,EAAEA,MAAG,GAAE,MAAI,yBAAyBA,EAAC,kDAAkD,CAAC,IAAI,GAAE,IAAE,EAAEA,KAAE,IAAE,IAAEA,IAAE,YAAW,UAAU,MAAI,EAAEA,GAAE,UAAQ,SAAQ,MAAI,gDAAgD,GAAE,IAAE,GAAG,GAAGA,IAAE,CAAC,GAAE,GAAE,GAAGA,IAAE,CAAC,CAAC,IAAG,OAAO,KAAG,YAAU,EAAE,IAAE,MAAI,GAAE,MAAI,gDAAgD,CAAC,GAAG,GAAE,EAAE,KAAG,GAAE,MAAI,yBAAyB,CAAC,qDAAqD,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;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,MAAIC;AAAE,MAAG,MAAM,QAAQD,GAAC,GAAE;AAAC,IAAAC,KAAE,OAAG,EAAED,OAAG,QAAMA,IAAE,SAAO,GAAE,MAAI,mEAAmE;AAAE,QAAI,IAAEA,IAAE,CAAC,EAAE,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,QAAEA,IAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,iEAAiEA,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG;AAAA,EAAC;AAAM,IAAAC,KAAE,MAAGD,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,MAAI,IAAE,CAAC,GAAE,IAAEA;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,MAAE,KAAK,EAAE,KAAK,MAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,cAAE,GAAG,GAAE,CAAC;AAAA,QAAC;AAAC,aAAO,GAAG,GAAE,GAAG,GAAE,WAAW,CAAC;AAAA,IAAC,CAAC,CAAC;AAAE,SAAOC,KAAE,GAAG,GAAE,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,KAAE,OAAG;AAAC,MAAG,EAAED,IAAE,QAAM,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE,GAAEA,IAAE,SAAO;AAAE,WAAO,GAAGA,KAAEC,EAAC;AAAE;AAAC,QAAI,IAAED,IAAE,MAAM,MAAM,GAAEA,IAAE,MAAM,SAAO,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAEA,KAAE,CAAC,GAAEA,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,GAAEC,EAAC;AAAE,QAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE,GAAG,GAAE,CAAC,GAAED,IAAE,KAAK,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,KAAK;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,OAAG;AAAC,SAAO,EAAE,KAAK,MAAI;AAAC,MAAED,IAAE,MAAM,WAAS,GAAE,MAAI,0CAA0CA,IAAE,MAAM,MAAM,WAAW;AAAE,QAAI,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,KAAG,IAAE,IAAE;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,CAAC,IAAE,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,CAAC,IAAE,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,YAAG,MAAI;AAAE,cAAE,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,CAAC,GAAE,EAAE,MAAM,CAAC,IAAE,CAAC,CAAC;AAAE,YAAG,MAAI;AAAE,cAAE,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,CAAC,GAAE,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,CAACC,MAAG,IAAE,MAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,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,KAAEC,IAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,EAAAC,MAAG,SAAO,IAAE,EAAEA,IAAE,WAAU,qBAAqB;AAAG,MAAI,IAAE,KAAG,OAAK,IAAE,GAAG,GAAE,CAAC;AAAE,MAAG,MAAI,GAAG;AAAK,WAAO;AAAE,MAAG,MAAI,GAAG;AAAI,WAAO,GAAG,CAAC;AAAE,MAAG,MAAI,GAAG,MAAK;AAAC,QAAG,KAAG;AAAK,aAAO,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,MAAG,MAAI,GAAG,wBAAuB;AAAC,QAAG,KAAG;AAAK,aAAO,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,sBAAsB,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,oBAAoB,GAAE,IAAE,EAAEC,IAAE,eAAc,oBAAoB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB,GAAE,IAAE,EAAEC,IAAE,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,GAAE,GAAE,IAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAEC,IAAE,eAAc,WAAW,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAEC,IAAE,eAAc,WAAW,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,IAAE,MAAK,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,SAAS,GAAE,IAAE,EAAEC,IAAE,eAAc,SAAS,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,kBAAkB,GAAE,IAAE,EAAEC,IAAE,eAAc,kBAAkB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,+BAA+B,GAAE,IAAE,EAAEC,IAAE,UAAS,+BAA+B;AAAE,KAAG,EAAE,OAAM,EAAE,OAAM,0CAA0C;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,oBAAmB,qBAAqB,GAAE,IAAE,EAAEC,IAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAG,KAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,IAAE,IAAG;AAAC,MAAG,MAAI,OAAK,IAAEA,GAAE,OAAK,IAAG,MAAIA,GAAE,OAAK;AAAE,UAAM,MAAM,mGAAmGA,GAAE,IAAI,gBAAgB,CAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAE,CAAC,CAAC,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,CAAC,CAAC,CAAC,GAAE,UAAS,CAAC,GAAE,MAAI;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,CAAC,CAAC,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,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,qBAAqB,GAAE,IAAE,EAAEC,IAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAG,KAAG,SAAO,IAAE,EAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAEC,IAAE,UAAS,qBAAqB,GAAE,IAAE,EAAE,GAAE,cAAa,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,gBAAe,uBAAsB,EAAE,KAAK;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,UACnl/C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gDAAgD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,iBAAgB,OAAO,GAAE,IAAE,EAAEC,IAAE,cAAa,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,YAAW,iBAAgB,OAAO;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,UACnqB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,mBAAmB,GAAE,IAAE,EAAEC,IAAE,WAAU,qBAAoB,OAAO,GAAE,IAAE,EAAE,GAAE,cAAa,qBAAoB,OAAO;AAAE,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,YAC7lB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,kBAAkB,GAAE,IAAE,EAAEC,IAAE,WAAU,oBAAmB,OAAO,GAAE,IAAE,EAAE,GAAE,cAAa,oBAAmB,OAAO;AAAE,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,WACvX,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,gBAAe,QAAQ;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,iCAAiC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,+BAA+B,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAEC,IAAE,cAAa,cAAc;AAAE,MAAG,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,WAAU,GAAE,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,KAAEC,IAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAc,QAAQ,GAAE,IAAE,EAAEC,IAAE,aAAY,eAAc,QAAQ;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,+CAA+C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mDAAmD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,WAAU,EAAC,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,0BAAyB,QAAQ,GAAE,IAAE,EAAC,YAAWC,GAAC;AAAE,MAAGA,MAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,yBAAwB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,sBAAqB,QAAQ,GAAE,IAAE,EAAC,SAAQC,IAAE,SAAQ,GAAE,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,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,CAAC;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,SAASC,IAAE;AAAC,IAAAD,GAAE,OAAO,EAAE,aAAaC,GAAE,SAAS,IAAE,CAACA,IAAEA,GAAE,UAAU;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;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,OAAOC,MAAG,gBAAcA,KAAE,WAAU,OAAO,KAAG,gBAAc,IAAED,IAAE;AAAW,MAAI,IAAE,GAAE,IAAEC,KAAE,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,SAASC,IAAE,IAAE,OAAG,GAAE;AAAC,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,KAAK,iBAAiBA,IAAE,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;AAAM,WAAK,eAAe,CAAC;AAAE,WAAO,GAAG,CAAC,GAAE,IAAE,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,iBAAiBA,IAAE,GAAE;AAAC,WAAO,GAAGA,IAAE,CAAC;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,WAAWA,IAAE;AAAC,UAAM,IAAI,MAAM,4DAA4D,KAAK,aAAa,CAAC,EAAE;AAAA,EAAC;AAAA,EAAC,MAAM,kBAAkBA,IAAE;AAAC,WAAO,KAAK,eAAa,MAAMA,GAAE,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC,GAAEA,GAAE,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,YAAYC,IAAE,GAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,MAAI,GAAE,KAAK,UAAQ,GAAE,KAAK,mBAAiB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAeA,IAAE;AAAC,KAAC,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,UAAG,KAAG;AAAK;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,CAAAA,OAAGA,GAAE,QAAQ,CAAC,GAAE,GAAG,KAAK,mBAAmB,IAAI,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,MAAM,aAAY;AAAC,QAAIA,KAAE,CAAC,GAAG,KAAK,kBAAiB,GAAG,KAAK,kBAAkB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAOA,GAAE,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,IAAAA,KAAE,MAAM,KAAK,kBAAkBA,EAAC;AAAE,QAAI,IAAEA,GAAE,SAAO,GAAE,IAAE;AAAG,SAAK,mBAAiBA,GAAE,MAAM,GAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmBA,GAAE,MAAM,GAAE,IAAE,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,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,KAAI,EAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAYA,IAAE,IAAE,KAAG;AAAC,UAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,0BAAwB,GAAE,KAAK,mBAAiB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,KAAC,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,UAAG,KAAG;AAAK;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,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,iBAAiB,IAAI,CAAAA,QAAI,EAAC,MAAKA,GAAE,cAAa,QAAOA,GAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,IAAAA,KAAE,MAAM,KAAK,kBAAkBA,EAAC;AAAE,QAAI,IAAE;AAAG,SAAK,mBAAiBA,GAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,yBAAwB,KAAK,wBAAuB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,uBAAuB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAM;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,QAAM,GAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,0BAAwB,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,WAAS,GAAG,CAAC,EAAE,SAAS,GAAE,KAAK,WAAS,GAAG,CAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAeA,IAAE;AAAC,QAAI,IAAE,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC;AAAE,OAAG,MAAI;AAAC,UAAI,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ;AAAE,QAAE,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,YAAG,KAAG;AAAK;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,CAAAA,OAAGA,GAAE,QAAQ,CAAC,GAAE,KAAK,2BAAyB,QAAM,GAAG,KAAK,wBAAwB,IAAI,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAIA,KAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,uBAAuB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAOA,GAAE,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,IAAAA,KAAE,MAAM,KAAK,kBAAkBA,EAAC,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,QAAI,IAAEA,GAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuBA,GAAE,MAAM,GAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,0BAAwBA,GAAE,MAAM,GAAE,IAAE,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,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,OAAM,EAAE,OAAM,EAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAQ;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,IAAE,MAAK,IAAE,GAAE;AAAC,UAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,QAAM,GAAE,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,GAAG,CAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAeA,IAAE;AAAC,QAAI,IAAE,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC;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,QAAE,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,YAAG,KAAG;AAAK;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,CAAAA,OAAGA,GAAE,QAAQ,CAAC,GAAE,KAAK,8BAA4B,QAAM,GAAG,KAAK,2BAA2B,IAAI,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;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,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,OAAM,EAAE,OAAM,EAAE,SAAQ,EAAE,KAAK;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,UAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,gBAAgBA,EAAC;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,KAAC,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,MAAM,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,UAAG,KAAG;AAAK;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,gBAAgBA,IAAE;AAAC,SAAK,eAAaA,IAAE,KAAK,KAAG,QAAM,KAAK,EAAE,QAAQ,GAAE,KAAK,IAAE,GAAG,GAAG,CAACA,EAAC,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,WAAWA,IAAE;AAAC,QAAGA,KAAE,MAAM,KAAK,kBAAkBA,EAAC,GAAEA,GAAE,WAAS;AAAE,YAAM,IAAI,MAAM,+CAA+C;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,aAAY;AAAA,EAAC;AAAA,EAAC,OAAO,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,YAAY;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAU;AAAA,EAAC,YAAYA,IAAE,GAAE,IAAE,OAAG;AAAC,UAAMA,EAAC,GAAE,KAAK,eAAaA,IAAE,KAAK,WAAS,GAAE,KAAK,cAAY,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,IAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,KAAC,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,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,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,WAASA;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,cAAc,IAAI,CAAAA,QAAI,EAAC,MAAKA,GAAE,cAAa,QAAOA,GAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,IAAAA,KAAE,MAAM,KAAK,kBAAkBA,EAAC;AAAE,QAAI,IAAE;AAAG,SAAK,gBAAcA,GAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,UAAS,KAAK,UAAS,aAAY,KAAK,YAAW;AAAA,EAAC;AAAA,EAAC,OAAO,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,UAAS,EAAE,WAAW;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAYA,IAAE,IAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,QAAG,MAAM,GAAE,KAAK,eAAaA,IAAE,KAAK,QAAM,GAAE,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,IAAGA,MAAG;AAAK,YAAM,IAAI,MAAM,oDAAoD;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,KAAC,MAAM,QAAQA,EAAC,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,EAAC,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,QAAQA,EAAC,IAAEA,GAAE,CAAC,EAAE,SAAOA,GAAE,CAAC;AAAE,UAAG,KAAG;AAAK;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,CAAAA,OAAGA,GAAE,QAAQ,CAAC,GAAE,KAAK,wBAAsB,QAAM,KAAK,YAAU,GAAG,KAAK,qBAAqB,IAAI,CAAAA,OAAGA,GAAE,QAAQ,CAAC,GAAE,KAAK,sBAAoB,QAAM,GAAG,KAAK,mBAAmB,IAAI,CAAAA,OAAGA,GAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAIA,KAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,kBAAkB;AAAE,WAAO,KAAK,YAAUA,GAAE,KAAK,GAAG,KAAK,oBAAoB,GAAE,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAOA,GAAE,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAWA,IAAE;AAAC,IAAAA,KAAE,MAAM,KAAK,kBAAkBA,EAAC;AAAE,QAAI,IAAE,KAAK,WAASA,GAAE,SAAO,IAAEA,GAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuBA,GAAE,MAAM,GAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmBA,GAAE,MAAM,GAAE,IAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,aAAW,KAAK,uBAAqBA,GAAE,MAAM,IAAE,GAAE,IAAE,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,WAAWA,IAAE,GAAE;AAAC,WAAO,IAAIA,GAAE,EAAE,cAAa,EAAE,OAAM,EAAE,UAAS,EAAE,SAAQ,EAAE,QAAQ;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAS,KAAI;AAAC,WAAQD,OAAK;AAAG,OAAGA,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,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,CAAAC,OAAG,WAAWA,EAAC,CAAC,EAAE,KAAKD,GAAC;AAAC;AAAC,IAAI,KAAG,MAAMA,GAAC;AAAA,EAAC,YAAYC,IAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY;AAAE,YAAM,IAAI,MAAM,qFAAqF;AAAE,IAAAA,GAAE,WAAWD,GAAE,UAAU,MAAIC,KAAEA,GAAE,MAAMD,GAAE,WAAW,MAAM,KAAIC,MAAG,QAAMA,GAAE,WAAS,OAAKA,KAAE,KAAI,KAAK,oBAAkBA,KAAE,IAAG,KAAK,qBAAmBA,KAAE;AAAA,EAAE;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAG,OAAO,YAAU;AAAY,YAAM,IAAI,MAAM,yFAAyF;AAAE,QAAI,IAAE,GAAG,KAAKA,GAAE,UAAU,GAAE,IAAE,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,2BAA0B,CAAC,CAAC;AAAE,QAAGA,GAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,uFAAuF;AAAE;AAAC,UAAI,IAAE,CAAC,EAAC,OAAM,CAAC,OAAK,KAAK,kBAAkB,GAAE,SAAQA,GAAE,YAAW,CAAC,GAAE,IAAE,GAAGA,IAAE,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,GAAEA,GAAE,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,GAAGA,EAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAe,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAGA,MAAG,QAAMA,GAAE,SAAO;AAAE,YAAM,IAAI,MAAM,wEAAwEA,EAAC,EAAE;AAAE,SAAK,WAASA,GAAE,CAAC,GAAE,KAAK,eAAaA,GAAE,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,IAAI,QAAQ,CAACA,IAAE,MAAI;AAAC,UAAI,IAAE,IAAI;AAAW,QAAE,SAAO,OAAG;AAAC,YAAI,IAAE,KAAK,MAAM,EAAE,OAAO,MAAM,GAAE,IAAE,EAAE;AAAc,YAAG,KAAG,MAAK;AAAC,YAAE,IAAI,MAAM,4CAA4C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,EAAE,mBAAiB,MAAK;AAAC,YAAE,IAAI,MAAM,6CAA6C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,KAAK,aAAa,WAAS,GAAE;AAAC,UAAAA,GAAE,EAAC,eAAc,EAAC,CAAC;AAAE;AAAA,QAAM;AAAC,YAAI,IAAE,GAAG,GAAE,OAAG,KAAK,YAAY,CAAC,CAAC;AAAE,QAAAA,GAAE,CAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,sEAAsE,KAAK,SAAS,IAAI,uEAAuE,GAAE,EAAE,WAAW,KAAK,QAAQ;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAKA;AAAE,QAAE,KAAK,GAAG,EAAE,OAAO,GAAE,EAAE,KAAK,GAAG,EAAE,KAAK;AAAE,QAAI,IAAE,KAAK,4BAA4BA,EAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,gBAAgB,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,WAAO,QAAQ,IAAI,CAAC,EAAE,KAAK,OAAG,CAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE,GAAE;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,6CAA6CA,EAAC,IAAI,GAAE,EAAE,kBAAkB,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,4BAA4BA,IAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,KAAK,aAAa,IAAI,OAAG,GAAG,EAAE,IAAI,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAKA;AAAE,QAAE,MAAM,QAAQ,OAAG;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,YAAG,EAAE,QAAQ,CAAC,MAAI;AAAG,gBAAM,IAAI,MAAM,uDAAuD,CAAC,GAAG;AAAE,YAAG,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,CAAC,MAAI;AAAG,gBAAM,IAAI,MAAM,8BAA8B,CAAC,oBAAoB;AAAE,UAAE,CAAC,IAAE,KAAK,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,MAAC,CAAC;AAAE,QAAG,EAAE,WAAS,KAAK,aAAa;AAAO,YAAM,IAAI,MAAM,wDAAwD,EAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,IAAED,GAAC,GAAE,IAAE,KAAG,OAAK,IAAE,GAAE,IAAE,KAAG,OAAK,IAAE,GAAE,EAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,QAAI,EAAE,KAAK,OAAG;AAAC,QAAI,IAAE,IAAG,EAAE,IAAEA,IAAE,UAAQ,IAAE;AAAG,WAAOC,GAAE,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,KAAEC,IAAE;AAAC,EAAAA,MAAG,SAAOA,KAAE,CAAC;AAAG,MAAI,IAAEA,GAAE,aAAW,OAAK,EAAE,EAAE,SAAS,QAAMA,GAAE,WAAU,IAAED,IAAE,IAAI,OAAG,EAAE,GAAEC,GAAE,aAAY,EAAC,UAAS,KAAE,CAAC,CAAC,GAAE,IAAE,GAAE,IAAE,KAAG,KAAGA,GAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAEA,GAAE,YAAW,GAAE,CAAC,GAAG,IAAI,OAAG,EAAE,YAAY,CAAC,GAAE,IAAE,KAAG,IAAE;AAAE,SAAOA,GAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAEA,GAAE,YAAW,GAAE,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAEC,KAAE,IAAG,GAAE,GAAE;AAAC,SAAO,GAAG,OAAG,GAAG,GAAE,EAAC,aAAY,EAAC,CAAC,CAAC,EAAED,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAMC,IAAE,IAAE,IAAG,MAAI;AAAC,QAAI,IAAEA,GAAE,IAAI,MAAI,KAAE,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,OAAK,EAAE,IAAI,MAAI,KAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,QAAGA,GAAE,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,wCACp4qB,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,MAAAA,GAAE,CAAC,EAAE,MAAM,QAAQ,OAAG;AAAC,YAAI,IAAE,KAAG,EAAE,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,IAAEC,GAAE,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;AAAE,YAAE,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,YAAYA,IAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,QAAO,KAAG,SAAO,IAAE,CAAC,IAAG,KAAK,mBAAiB,EAAE,kBAAiB,KAAK,aAAW,EAAE,YAAW,KAAK,qBAAmB,EAAE,oBAAmB,EAAE,aAAW,QAAM,EAAE,OAAO,EAAE,aAAW,YAAW,MAAI,6HAA6H,GAAE,KAAK,QAAM,EAAE,aAAW,KAAK,QAAM,EAAE,EAAE,SAAS,OAAM,EAAEA,MAAG,QAAMA,GAAE,SAAO,GAAE,MAAI,yDAAyD,GAAE,MAAM,QAAQA,EAAC,KAAG,EAAEA,GAAE,WAAS,GAAE,MAAI,iEAAiEA,GAAE,MAAM,IAAI,GAAE,KAAK,OAAKA,IAAE,EAAE,eAAa,QAAM,EAAE,YAAY,QAAM;AAAK,YAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,cAAY,EAAE,eAAa,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAGA,GAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,yFAAyF;AAAE,QAAI,IAAE,OAAO,OAAO,EAAC,QAAO,KAAK,eAAc,GAAE,KAAK,WAAW;AAAE,MAAE,OAAK,IAAI;AAAS,QAAI,IAAE,CAAC,EAAC,OAAM,CAAC,qBAAqB,GAAE,SAAQA,GAAE,YAAW,CAAC,GAAE,IAAE,GAAGA,IAAE,CAAC;AAAE,QAAG,EAAE,KAAK,OAAO,cAAa,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,YAAY,GAAEA,GAAE,cAAY,MAAK;AAAC,UAAI,IAAE,GAAG,KAAKA,GAAE,UAAU;AAAE,QAAE,KAAK,OAAO,qBAAoB,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,mBAAmB;AAAA,IAAC;AAAC,QAAI,IAAE,MAAM,KAAK,MAAM,KAAK,MAAK,CAAC;AAAE,QAAG,EAAE;AAAG,aAAM,EAAC,oBAAmB,GAAGA,EAAC,GAAE,WAAU,CAAC,CAAC,EAAC;AAAE,UAAM,IAAI,MAAM,gEAAgE,EAAE,MAAM,GAAG;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,QAAIA,KAAE,MAAM,KAAK,MAAM,KAAK,MAAK,KAAK,WAAW;AAAE,QAAG,CAACA,GAAE;AAAG,YAAM,IAAI,MAAM,cAAc,KAAK,IAAI,4BAA4BA,GAAE,MAAM,yEAAyE;AAAE,QAAI;AAAE,QAAG;AAAC,UAAE,MAAMA,GAAE,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,IAAE,EAAE,eAAc,IAAE,EAAE;AAAgB,QAAG,KAAG,QAAM,KAAG;AAAK,YAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,2DAA2D;AAAE,WAAO,GAAG,GAAE,OAAG,KAAK,YAAY,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,YAAYA,IAAE;AAAC,QAAI,IAAE,MAAM,QAAQ,KAAK,IAAI,IAAE,KAAK,KAAK,CAAC,IAAE,KAAK,MAAK,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,KAAK,oBAAkB,GAAE,IAAE,GAAGA,EAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAKA;AAAE,eAAQ,KAAK,EAAE;AAAM,aAAK,sBAAoB,OAAK,EAAE,KAAK,KAAK,mBAAmB,CAAC,CAAC,IAAE,EAAE,KAAK,IAAE,IAAE,CAAC;AAAE,SAAK,sBAAoB,EAAE,KAAK,GAAG,MAAM,QAAQ,IAAI,CAAC,CAAC;AAAE,QAAI,IAAE,MAAM,GAAG,GAAE,EAAC,aAAY,KAAK,aAAY,WAAU,KAAK,OAAM,YAAW,KAAK,WAAU,CAAC;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,mBAAiB;AAAe,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE,YAAY,GAAG,GAAE,IAAEA,IAAE,YAAY,GAAG,GAAE,IAAEA,IAAE,UAAU,GAAEC,EAAC,GAAE,IAAE,IAAEA,KAAED,IAAE,UAAU,CAAC,IAAE;AAAG,SAAM,CAAC,IAAE,KAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,MAAM,GAAG,gBAAgB,KAAG;AAAI;AAAC,IAAI,KAAG,CAACA,KAAEC,OAAI;AAAC,MAAG,OAAO,SAAO,gBAAcA,MAAG,QAAMA,GAAE,aAAW;AAAM,WAAO;AAAK;AAAC,QAAI,IAAE;AAAG,QAAG,MAAM,QAAQD,GAAC,IAAE,IAAEA,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,IAAE,IAAE,GAAGA,GAAC,GAAE;AAAE,aAAO,GAAGA,KAAEC,EAAC;AAAA,EAAC;AAAC,SAAO;AAAI;AAAE,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,IAAI,GAAGD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,iBAAeA;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK;AAAA,EAAc;AAAC;AAApF,IAAsF,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,cAAYA;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE;AAAC,WAAO,KAAK,YAAYA,EAAC;AAAA,EAAC;AAAC;AAApK,IAAsK,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,IAAAA,GAAE,SAAO,KAAK,OAAK,MAAI,QAAQ,QAAQA,GAAE,KAAK,CAAC,IAAGA,GAAE,SAAO,KAAK,OAAK,OAAG,QAAQ,QAAQA,GAAE,KAAK,CAAC,CAAC;AAAA,EAAE;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE;AAAU,SAAO,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,aAAYC,IAAE,YAAW,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,iBAAiB,GAAE,IAAE,EAAEC,IAAE,eAAc,iBAAiB;AAAE,IAAE,KAAG,QAAM,IAAE,KAAG,OAAO,UAAU,CAAC,GAAE,MAAI,+DAA+D,CAAC,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,EAAE,IAAE,KAAG,OAAO,UAAU,CAAC,GAAE,MAAI,4DAA4D,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,OAAO,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,OAAO,GAAE,CAAC,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,KAAEC,KAAE,GAAE;AAAC,MAAGA,KAAE;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAGD,OAAG;AAAK,UAAM,IAAI,MAAM,0DAA0D;AAAE,MAAI,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE;AAAG,MAAGA,IAAE,gBAAgB;AAAW,QAAE;AAAA,WAAW,OAAO,aAAW,eAAaA,eAAa;AAAU,QAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa;AAAiB,QAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa;AAAiB,QAAE;AAAA,WAAWA,IAAE,cAAY;AAAK,QAAE;AAAA,WAAW,OAAO,eAAa,eAAaA,eAAa;AAAY,QAAE;AAAA;AAAQ,UAAM,IAAI,MAAM,qPAAqPA,IAAE,YAAY,IAAI,EAAE;AAAE,MAAG,GAAG,IAAG,EAAE,WAAW,KAAG,MAAK;AAAC,QAAI,IAAE,EAAC,QAAOA,IAAC,GAAE,IAAE,EAAC,aAAYC,GAAC;AAAE,WAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,IAAE,CAACD,IAAE,YAAWA,IAAE,WAAW,IAAE,CAACA,IAAE,OAAMA,IAAE,MAAM,GAAE;AAAE,MAAG;AAAE,QAAEA,IAAE,WAAW,IAAI,EAAE,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE;AAAA,WAAa,KAAG;AAAE,QAAEA,IAAE;AAAA,WAAa,KAAG,KAAG,GAAE;AAAC,QAAG,MAAI;AAAK,UAAG,OAAO,YAAU;AAAY,YAAG,OAAO,mBAAiB,eAAa,OAAO,qCAAmC;AAAY,eAAG,IAAI,gBAAgB,GAAE,CAAC,EAAE,WAAW,IAAI;AAAA;AAAO,gBAAM,IAAI,MAAM,sGAAsG;AAAA;AAAO,aAAG,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,MAAGC,OAAI;AAAE,QAAE,IAAI,WAAW,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,QAAE,IAAI,WAAW,IAAEA,EAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,eAAQ,IAAE,GAAE,IAAEA,IAAE,EAAE;AAAE,UAAE,IAAEA,KAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,CAAC,GAAE,GAAEA,EAAC,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGD,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,KAAEC,KAAE,GAAE;AAAC,MAAI,IAAE;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,SAAO,IAAE,IAAE,IAAEA;AAAA,EAAC;AAAM,QAAEA;AAAE,SAAO,GAAG,GAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,SAAO,KAAGA,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,wDAAwDA,IAAE,IAAI,GAAG;AAAE,MAAIC,KAAED,IAAE,SAAO,IAAE,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAGC,KAAE,KAAGA,OAAI;AAAE,UAAM,IAAI,MAAM,0DAA0DA,EAAC,EAAE;AAAE,MAAGD,IAAE,UAAQ,aAAWA,IAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,kCAAkCA,IAAE,KAAK,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAGD,OAAG,OAAK,SAAOA,IAAE,UAAQ;AAAE,MAAGC,KAAE,KAAGA,KAAE;AAAE,UAAM,IAAI,MAAM,eAAeA,EAAC,qCAAqC;AAAC;AAAC,eAAe,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAED,KAAE,OAAM,UAAU;AAAE,MAAG,EAAEA,eAAa,KAAI;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,GAAE,OAAO,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,GAAE,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,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,GAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAG,EAAE,UAAQ,WAAU;AAAC,YAAG,IAAE,KAAG,IAAE;AAAE,gBAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAAS,EAAE,UAAQ,YAAU,IAAE,KAAG,IAAE;AAAK,cAAM,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,MAAGC,MAAG,MAAK;AAAC,UAAI,GAAG,IAAG,EAAE,WAAW,KAAG,SAAO,QAAQ,KAAK,oGAAoG,GAAE,KAAG,OAAIA,GAAE,QAAM,GAAEA,GAAE,SAAO;AAAE,QAAI,IAAEA,GAAE,WAAW,IAAI,GAAE,IAAE,IAAI,UAAU,GAAE,GAAE,CAAC;AAAE,MAAE,aAAa,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;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,GAAG,KAAG,OAAK,SAAO,EAAE,YAAY;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,QAAOC,IAAE,SAAQ,EAAC;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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAEC,GAAE,MAAM;AAAO,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,4EAA4E,CAAC,GAAG;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,8EAA8E,CAAC,GAAG;AAAE,MAAGA,GAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,yEAAyEA,GAAE,KAAK,GAAG;AAAE,MAAGA,GAAE,MAAM,IAAE,CAAC,IAAE;AAAE,UAAM,IAAI,MAAM,iEAAiEA,GAAE,MAAM,IAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;AAAE,MAAG,GAAGD,IAAE,KAAK,MAAI;AAAE,UAAM,IAAI,MAAM,mEAAmEA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAEC,GAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,SAAG,EAAE,CAAC;AAAE,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,MAAM;AAAE,IAAE,IAAI;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,SAAG,EAAE,CAAC,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,GAAGA,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM;AAAO,IAAE,MAAIC,GAAE,QAAO,MAAI,iBAAiB,CAAC,sBAAsBA,EAAC,sCAAsC,CAAC,IAAI,GAAE,EAAE,MAAI,EAAE,QAAO,MAAI,iBAAiB,CAAC,qBAAqB,CAAC,sCAAsC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,KAAGD,IAAE,MAAM,CAAC,GAAE,MAAI,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,MAAMC,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC,gCAAgC,CAAC,MAAMD,IAAE,MAAM,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,CAAC,GAAE,IAAE;AAAE,SAAKD,MAAE;AAAG,IAAAA,MAAE,KAAGC,GAAE,KAAK,CAAC,GAAED,OAAG,GAAE;AAAI,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAE,CAAC,IAAE,KAAK,MAAMC,GAAE,CAAC,IAAED,IAAE,CAAC,KAAG,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAGD,GAAC;AAAE,WAAQ,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO;AAAI,MAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,IAAE,EAAEC,EAAC,IAAE,KAAG,EAAE,OAAOA,IAAE,GAAE,CAAC,GAAE,EAAE,IAAI;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAO,KAAGD,MAAE,IAAE,KAAGC,KAAE;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE;AAAI,MAAE,KAAKC,KAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,MAAGC,GAAE,UAAQ,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,IAAE;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;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAG,GAAEA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,QAAQ,CAAC,IAAE;AAAG,QAAE,CAAC,IAAE;AAAA,SAAM;AAAC,UAAI,IAAE,GAAGA,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAAD,MAAE,KAAG,MAAI,IAAE,IAAG,EAAE,CAAC,IAAE;AAAA,IAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAG,GAAEA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,QAAQ,CAAC,IAAE;AAAG,QAAE,CAAC,IAAE,OAAO;AAAA,SAAqB;AAAC,UAAI,IAAE,GAAGA,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAAD,MAAE,KAAG,MAAI,IAAE,OAAO,mBAAkB,EAAE,CAAC,IAAE;AAAA,IAAC;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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,UAAO,IAAE,KAAGA,MAAG,KAAG,UAAQ,IAAE,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,CAAC,IAAE,GAAE;AAAC,UAAE;AAAE;AAAA,IAAK;AAAC,WAAQ,IAAE,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAGA,GAAE,CAAC,IAAE,KAAG,EAAE,CAAC,MAAID,IAAE,CAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,SAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE;AAAI,SAAGA,IAAE,CAAC,IAAEC,GAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,GAAE,IAAED,IAAE,MAAM;AAAO,SAAOC,MAAG,WAAS,IAAE,CAACA,IAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,CAAC,CAAC,IAAEA,GAAE,SAAO,IAAE,IAAEA,GAAE,OAAO,IAAI,MAAM,IAAEA,GAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAE,IAAEA,GAAE,MAAM,GAAE,EAAE,QAAQ,OAAG;AAAC,MAAE,MAAI,IAAG,MAAI,mDAAmD;AAAA,EAAC,CAAC;AAAE,MAAI;AAAE,SAAO,KAAG,OAAK,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAE,OAAO,KAAG,WAAS,IAAE,CAAC,GAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE,OAAO,IAAI,MAAM,IAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAE,IAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI;AAAE,MAAG,KAAG,QAAM,IAAE,IAAI,MAAMA,GAAE,MAAM,GAAE,EAAE,KAAK,CAAC,KAAG,IAAE,GAAE,KAAG,QAAM,IAAE,IAAE;AAAE,UAAM,IAAI,MAAM,4CAA4C;AAAE,MAAI,IAAE,OAAG,IAAE,EAAC,MAAK,EAAE,QAAO,yBAAwB,GAAE,OAAMA,GAAE,MAAM,GAAE,KAAI,EAAE,MAAM,GAAE,SAAQ,EAAE,MAAM,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK;AAAI,SAAG,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;AAAE,YAAM,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;AAAE,YAAM,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;AAAE,gBAAM,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC,iBAAiB;AAAA,MAAC;AAAM,UAAE,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;AAAM,UAAE,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;AAAM,QAAE,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,KAAEC,IAAE;AAAC,EAAAA,GAAE,YAAU,GAAEA,GAAE,UAAQ,GAAEA,GAAE,iBAAe;AAAE,MAAI,IAAE;AAAE,EAAAA,GAAE,aAAWD,IAAE,SAAO,MAAKC,GAAE,WAASD,IAAE,OAAK,MAAKC,GAAE,QAAM,IAAI,MAAMA,GAAE,IAAI,GAAEA,GAAE,MAAI,IAAI,MAAMA,GAAE,IAAI,GAAEA,GAAE,UAAQ,IAAI,MAAMA,GAAE,IAAI,GAAEA,GAAE,0BAAwB,CAAC,GAAEA,GAAE,gCAA8B,CAAC,GAAEA,GAAE,gCAA8B,IAAI,MAAMA,GAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,MAAK;AAAI,QAAG,KAAG,IAAEA,IAAE,cAAa;AAAC,UAAI,IAAE,KAAK,IAAIC,GAAE,QAAMD,IAAE,OAAK,KAAG,IAAEA,IAAE,yBAAwBC,GAAE,IAAI;AAAE,aAAK,IAAE,GAAE;AAAI,QAAAA,GAAE,MAAM,CAAC,IAAE,GAAEA,GAAE,IAAI,CAAC,IAAE,GAAEA,GAAE,QAAQ,CAAC,IAAE,GAAEA,GAAE,aAAW,KAAG,GAAEA,GAAE,WAAS,KAAG,GAAEA,GAAE,wBAAwB,KAAK,CAAC,GAAEA,GAAE,8BAA8B,KAAK,EAAE,GAAEA,GAAE,8BAA8B,CAAC,IAAE;AAAA,IAAC,WAAS,KAAG,IAAED,IAAE;AAAY,MAAAC,GAAE,wBAAwB,KAAK,EAAE,GAAEA,GAAE,8BAA8B,KAAK,EAAE;AAAA,SAAM;AAAC,UAAG,MAAIA,GAAE,MAAM;AAAO,cAAM,MAAM,sCAAsC,CAAC,oBAAoBA,GAAE,IAAI,UAAUA,GAAE,MAAM,MAAM,GAAG;AAAE,MAAAD,IAAE,SAAO,SAAOC,GAAE,MAAM,CAAC,IAAED,IAAE,MAAM,CAAC,IAAGA,IAAE,OAAK,SAAOC,GAAE,IAAI,CAAC,IAAED,IAAE,IAAI,CAAC,IAAGC,GAAE,QAAQ,CAAC,IAAED,IAAE,QAAQ,CAAC,GAAEA,IAAE,YAAU,KAAG,MAAIC,GAAE,aAAW,KAAG,IAAGD,IAAE,UAAQ,KAAG,MAAIC,GAAE,WAAS,KAAG,IAAGD,IAAE,iBAAe,KAAG,KAAGC,GAAE,wBAAwB,KAAK,EAAE,GAAEA,GAAE,8BAA8B,KAAK,EAAE,GAAEA,GAAE,kBAAgB,KAAG,MAAIA,GAAE,wBAAwB,KAAK,CAAC,GAAEA,GAAE,8BAA8B,KAAK,CAAC,IAAGA,GAAE,8BAA8B,CAAC,IAAE,GAAE;AAAA,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAG,EAAEA,EAAC;AAAE,WAAO,IAAE,IAAE,EAAEA,EAAC,IAAE,EAAEA,KAAE,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,IAAIC,IAAE;AAAC,WAAO,IAAI,GAAGA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAASA,IAAE,GAAE,IAAE,OAAG;AAAC,WAAO,IAAI,GAAGA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQA,IAAE,IAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,WAAO,IAAI,GAAGA,IAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,KAAKA,KAAE,MAAK,IAAE,KAAG,IAAE,OAAK,IAAE,MAAK;AAAC,WAAO,IAAI,GAAGA,IAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAASA,KAAE,MAAK,IAAE,MAAI,IAAE,MAAK;AAAC,WAAO,IAAI,GAAGA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,OAAOA,KAAE,MAAK,IAAE,KAAG,IAAE,OAAK,IAAE,MAAK,IAAE,GAAE;AAAC,WAAO,IAAI,GAAGA,IAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQA,IAAE,IAAE,KAAG;AAAC,WAAO,IAAI,GAAGA,IAAE,CAAC;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,MAAI,IAAG,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,MAAIE,KAAG,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,GAAGF,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAO,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,EAAE,WAAS,GAAE,MAAI,kBAAkB,CAAC,sBAAsB,CAAC,+CAA+C,CAAC,GAAG;AAAA,EAAC,CAAC,GAAE,EAAEC,MAAG,KAAGA,KAAE,GAAE,MAAI,kBAAkB,CAAC,iCAAiC,IAAE,CAAC,GAAG;AAAE,MAAI,IAAED,IAAE,CAAC;AAAE,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,MAAIC,MAAG,EAAE,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,kBAAkB,CAAC,uBAAuB,CAAC,MAAM,CAAC,2CAA2C,CAAC,qCAAqC,CAAC,GAAG;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,MAAEC,EAAC,KAAGD,IAAE,CAAC,EAAEC,EAAC;AAAE,SAAO;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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,IAAI;AAAM,MAAG,KAAG,QAAMA,MAAG;AAAK,WAAO;AAAE,MAAGA,MAAG;AAAK,WAAK,EAAE,SAAOD,MAAE,EAAE;AAAQ,QAAE,KAAK,EAAE;AAAA;AAAO,QAAEC,GAAE,MAAM;AAAE,MAAG,KAAG;AAAK,WAAO;AAAE,MAAGD,MAAE,EAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,4BAA4BC,EAAC,sCAAsCD,MAAE,EAAE,MAAM,sBAAsB,EAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG;AAAE,UAAG,KAAG,GAAE;AAAC,YAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,4BAA4BC,EAAC,qCAAqC,IAAED,GAAC,OAAO,CAAC,cAAc,IAAEA,GAAC,OAAO,CAAC,EAAE;AAAA,MAAC;AAAM,UAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,EAAC,gBAAe,GAAG,gBAAe,cAAa,GAAG,cAAa,aAAY,GAAG,aAAY,YAAW,GAAG,YAAW,YAAW,GAAG,YAAW,YAAW,GAAG,WAAU,GAAE,IAAE,CAAC;AAAE,WAAQ,KAAKD;AAAE,QAAG,KAAKC;AAAE,QAAE,KAAKA,GAAE,CAAC,CAAC;AAAA;AAAO;AAAM,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS,IAAE,IAAEA,IAAE,CAAC,MAAI,GAAG,iBAAeA,IAAE,SAAO,IAAEA,IAAE;AAAM;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,OAAG,QAAMC,MAAG;AAAK;AAAO,MAAI,IAAED,IAAE,QAAO,IAAEC,GAAE;AAAO,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sBAAsBD,GAAC,uCAAuCC,EAAC,2CAA2C,CAAC,4DAA4D,CAAC,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,CAAC,GAAE,IAAEC,GAAE,IAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,sBAAsBD,GAAC,8CAA8CC,EAAC,yCAAyC,IAAED,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,KAAG,OAAOD,OAAG,WAASA,MAAEA,IAAE,CAAC,IAAG,IAAEC,MAAG,OAAOD,OAAG,WAASA,MAAEA,IAAE,CAAC;AAAG,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG;AAAE,QAAE,EAAE,OAAOA,GAAE,MAAM,CAAC,CAAC,GAAE,EAAE,KAAKD,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAOA,IAAE,MAAM,CAAC,CAAC;AAAA,OAAM;AAAC,QAAE,EAAE,OAAOA,IAAE,CAAC,CAAC;AAAE,QAAI,IAAEC,GAAE;AAAO,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,EAAE,OAAO,CAACD,IAAE,IAAE,CAAC,IAAEC,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,CAAC;AAAE,QAAE,EAAE,OAAOD,IAAE,MAAM,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,GAAE;AAAC,MAAE,KAAKA,EAAC;AAAE,aAAQ,IAAEA,KAAE,GAAE,IAAED,KAAE,EAAE;AAAE,WAAG,IAAEC,MAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,KAAGA,KAAE,EAAE,KAAG,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAED,KAAE,EAAE;AAAE,WAAGC,KAAE,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,GAAGD,KAAEC,IAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAE,EAAE,KAAKD,IAAE,CAAC,IAAE,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,SAAGC,GAAE,SAAO,IAAE,EAAE,KAAKA,GAAE,IAAE,CAAC,IAAED,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,IAAEC,GAAE,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKD,IAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,EAAE;AAAE,MAAE,KAAKD,IAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAKA,IAAE,IAAE,CAAC,IAAEC,GAAE,CAAC,EAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG;AAAP,IAA0B,KAAG;AAAmB,IAAI,KAAG;AAAP,IAAgB,KAAG;AAAnB,IAA8B,KAAG;AAAjC,IAA6C,KAAG;AAAhD,IAA4D,KAAG;AAA/D,IAA4E,KAAG;AAAY,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGD,IAAE,WAASC,GAAE;AAAO,UAAM,IAAI,MAAM,gEAAgED,IAAE,MAAM,WAAWC,GAAE,MAAM,GAAG;AAAE,MAAI,IAAE,IAAI,aAAaD,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG;AAAE,MAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAEC,GAAE,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,IAAI,aAAaD,IAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAaA,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAG;AAAE,IAAAC,GAAE,IAAE,CAAC,IAAED,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,IAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,KAAK,KAAKD,IAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAaC,EAAC,GAAE,IAAE,IAAI,aAAaA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG;AAAE,MAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,KAAK,MAAMD,IAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAaC,EAAC,GAAE,IAAE,IAAI,aAAaA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG;AAAE,MAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAEC,KAAE,CAAC,GAAE,IAAED,IAAEC,KAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,SAASC,IAAGF,KAAEC,IAAE,GAAE,GAAE;AAAC,EAAAD,IAAE,IAAE,CAAC,IAAEC,IAAED,IAAE,IAAE,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,aAAaD,MAAE,CAAC,GAAE,IAAE,IAAI,aAAaA,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,KAAKA,MAAE,CAAC,GAAE,KAAI;AAAC,QAAI,KAAGC,KAAE,IAAE,MAAI,KAAK,MAAI,IAAED;AAAG,MAAE,CAAC,IAAE,KAAK,IAAI,CAAC,GAAE,EAAE,CAAC,IAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,KAAG,IAAE,IAAE,MAAI,KAAK,MAAID,MAAEC,KAAG,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,GAAGD,KAAEC,IAAE;AAAC,EAAAD,MAAEA,IAAE,QAAQ,OAAM,EAAE;AAAE,MAAI,KAAGA,IAAE,SAAOA,IAAE,QAAQ,IAAG,EAAE,EAAE,UAAQ,GAAG;AAAO,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,6CAA6C,EAAE,KAAK;AAAE,MAAG,CAAC,GAAE,CAAC,IAAEA,IAAE,MAAM,EAAE;AAAE,IAAE,EAAE,QAAQ,EAAE,MAAI,IAAG,MAAI,2BAA2B,EAAE,0BAA0B;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,EAAE;AAAO,MAAGC,OAAI;AAAE,UAAM,IAAI,MAAM,YAAY,CAAC,4BAA4BA,EAAC,EAAE;AAAE,MAAG,IAAE;AAAE,UAAM,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;AAAE,YAAM,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;AAAO,YAAM,IAAI,MAAM,2CAA2C,EAAE,CAAC,CAAC,+DAA+D;AAAE,MAAE,CAAC,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,QAAO,EAAE;AAAE,QAAE,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;AAAE,MAAE,KAAK,CAAC;AAAE,SAAM,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,GAAC;AAAE,IAAE,KAAK,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAEC,GAAE,QAAO,EAAE;AAAE,MAAEA,GAAE,CAAC,CAAC,IAAE;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE,EAAE;AAAE,MAAE,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAE,SAAO,IAAE,EAAE,OAAO,OAAG,MAAI,EAAE,GAAE,EAAC,oBAAmB,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,EAAE;AAAM,aAAQ,IAAE,GAAE,IAAEC,GAAE,CAAC,EAAE,QAAO,EAAE;AAAE,QAAEA,GAAE,CAAC,EAAE,CAAC,CAAC,MAAI,SAAO,EAAEA,GAAE,CAAC,EAAE,CAAC,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,EAAEA,GAAE,CAAC,EAAE,CAAC,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,sBAAsB,EAAEA,GAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,KAAK,UAAU,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,KAAE,IAAE,CAAC,GAAE,IAAE;AAAE,EAAAA,IAAE,WAAS,KAAG,EAAE,KAAK,EAAE,GAAE,IAAEA,IAAE,SAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAK,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAGC,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,QAAE,QAAQ,CAAC,MAAI,OAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,MAAK,GAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,MAAM,CAACC,IAAE,MAAIA,OAAI,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,KAACA,IAAE,CAAC,EAAE,WAAS,KAAGA,IAAE,CAAC,EAAE,QAAQC,EAAC,MAAI,MAAIA,OAAI,OAAK,EAAE,KAAK,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,OAAOA,MAAG;AAAS,MAAED,IAAE,MAAM,CAAC,IAAEC,OAAI,GAAE,MAAI,+CAA+C,GAAE,IAAE,IAAI,MAAMA,EAAC,EAAE,KAAKD,IAAE,MAAM,CAAC,IAAEC,EAAC;AAAA,OAAM;AAAC,QAAI,IAAEA,GAAE,OAAO,CAAC,GAAE,OAAK,MAAI,OAAK,KAAG,IAAG,IAAG,CAAC;AAAE,MAAE,KAAG,GAAE,MAAI,yDAAyD;AAAE,QAAI,IAAEA,GAAE,QAAQ,EAAE;AAAE,QAAG,MAAI,IAAG;AAAC,UAAI,IAAEA,GAAE,OAAO,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC;AAAE,MAAAA,GAAE,CAAC,IAAED,IAAE,MAAM,CAAC,IAAE;AAAA,IAAC;AAAC,MAAEA,IAAE,MAAM,CAAC,MAAIC,GAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,MAAI,6DAA6D,GAAE,IAAEA;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM;AAAA,uBACjg2BA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAM,WAAWD,GAAC,oBAAoBC,EAAC;AAAM;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAM,WAAWD,GAAC,oBAAoBC,EAAC,OAAO,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,iDAAiDD,GAAC,QAAQC,EAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,QAAQD,GAAC,8BAA8BC,EAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA+G;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAGC,EAAC;AAAE,SAAM,2CAA2C,CAAC;AAAA,iEAChd,CAAC,gBAAgBD,GAAC,iBAAiBC,EAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAGC,EAAC;AAAE,SAAM,qCAAqC,CAAC,8CAA8C,CAAC,gBAAgBD,GAAC,gBAAgBC,EAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA0B;AAAC,SAAS,KAAI;AAAC,SAAM;AAAgC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,cAAcD,GAAC,qBAAqBC,EAAC;AAAqD;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAM,gBAAgBD,GAAC,QAAQC,EAAC,qBAAqB,CAAC;AAAG;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,0BAAyB,MAAI,IAAG,iBAAgB,MAAI,IAAG,+BAA8B,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,OAAG;AAAE,OAAID,OAAG,MAAI,IAAEA,KAAE,IAAE,QAAI,IAAE,GAAGA,KAAE,KAAK,MAAM,KAAK,KAAKA,GAAC,CAAC,CAAC,GAAE,CAAC;AAAG,QAAEC,MAAG,MAAID,MAAE,IAAE,OAAG,IAAE,GAAGA,KAAE,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAIC,KAAE,EAAE,KAAKD,IAAE,CAAC,CAAC,IAAE,EAAE,KAAK,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,MAAM,QAAO,IAAED,IAAE,MAAM;AAAO,MAAG,MAAI,MAAI,IAAE,CAAC,KAAG,IAAE;AAAG,UAAM,IAAI,MAAM,sCAAsC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;AAAE,MAAG,IAAE,MAAI,KAAG,IAAG,IAAE;AAAE,UAAM,IAAI,MAAM,cAAc,CAAC;AAAA,MACxkC,CAAC,IAAI;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,cAAc,CAAC,yCAAyC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAGA,IAAE,MAAM,CAAC,MAAIC,GAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,WAAW,CAAC,MAAMD,IAAE,MAAM,CAAC,CAAC,qCAAqC,CAAC,MAAMC,GAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAED,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAKA,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAKA,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAKC,GAAE,MAAM,CAAC,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,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,CAAAC,OAAG,GAAGA,EAAC,CAAC;AAAA,EAAC,SAAOA,IAAE;AAAC,UAAM,IAAI,MAAM,4DAA4DA,EAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,IAAI,CAAAC,OAAG,GAAGA,EAAC,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,CAAAD,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,MAAIC;AAAE,GAAC,SAAS,GAAE;AAAC,MAAE,EAAE,SAAO,CAAC,IAAE,UAAS,EAAE,EAAE,KAAG,CAAC,IAAE,MAAK,EAAE,EAAE,KAAG,CAAC,IAAE;AAAA,EAAI,GAAGA,KAAED,IAAE,4BAA0BA,IAAE,0BAAwB,CAAC,EAAE;AAAC,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,CAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAC,UAASD,KAAE,UAAS,UAAS,QAAO,CAAC,GAAE,OAAM,CAAC,GAAE,gBAAeC,GAAC;AAAE,KAAGD,GAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,EAAEA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,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,IAAEC,GAAE,WAAW,SAAO,IAAE;AAAE,QAAG,EAAE,SAAO;AAAS,aAAO,GAAGA,GAAE,WAAW,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAG,EAAE,SAAO,WAAU;AAAC,UAAI,IAAEA,GAAE,OAAO,MAAM,GAAE,CAAC;AAAE,aAAOA,GAAE,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,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAGA,GAAE,WAAW,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS;AAAE,WAAO,EAAE,SAAO,WAAS,EAAE,CAAC,IAAE,EAAE,cAAc,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,GAAE,WAAWD,GAAC;AAAE,SAAO,KAAG,EAAE;AAAK;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,yBAAyB,CAAC;AAAE,QAAG,KAAG;AAAK,aAAO;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkB,KAAK,OAAG,CAAC,CAACC,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,SAAO,MAAI,SAAOA,GAAE,GAAG,GAAE,CAAC,CAAC,EAAE,CAAC,IAAE;AAAM;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAOA,GAAE,GAAGD,KAAE,EAAE,gBAAgB,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,GAAGD,KAAEC,EAAC;AAAE,SAAM,CAAC,GAAG,GAAEA,MAAGA,GAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOA,KAAE,GAAGD,GAAC,IAAIC,EAAC,KAAGD;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,QAAI;AAAG,WAAM,CAAC,IAAG,GAAE,MAAM;AAAE,MAAI,IAAEC,MAAG,QAAMA,GAAE,sBAAoB;AAAK,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,mBAAmB,IAAID,GAAC;AAAE,QAAG,KAAG;AAAK,aAAO;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,MAAM,GAAG,GAAE;AAAE,MAAG,EAAE,WAAS;AAAE,QAAE,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,SAAO,KAAGC,GAAE,mBAAmB,IAAID,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC;AAAE,MAAG,MAAI,YAAW;AAAC,QAAE,EAAE,oBAAmBD,KAAEC,IAAE,CAAC;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;AAAI,QAAE,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,QAAIC,KAAE,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,IAAE,CAAC,EAAE,OAAO,GAAGA,GAAE,IAAI,OAAG,EAAE,IAAI,CAAC;AAAE,SAAK,YAAU,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,QAAQ,IAAE,GAAE,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,IAAE,CAAC,GAAE;AAAC,QAAI,IAAEA,GAAE,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,SAAG,SAAO,IAAE,KAAK,oBAAoB,EAAE,MAAM,GAAE,IAAE,KAAK,oBAAoB,EAAE,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,IAAAA,GAAE,WAAS,QAAMA,GAAE,QAAQ,YAAU,SAAO,IAAEA,GAAE,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,WAAU,GAAE,WAAU,EAAC;AAAE,WAAO,EAAE,SAAO,MAAI,EAAE,YAAU,IAAG;AAAA,EAAC;AAAA,EAAC,oBAAoBA,IAAE;AAAC,WAAO,OAAO,KAAKA,MAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAE,OAAK,EAAEA,GAAE,CAAC,EAAE,IAAI,IAAE,GAAE,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE;AAAC,QAAI,IAAE,GAAGA,GAAE,EAAE,KAAG,KAAK,UAAUA,GAAE,EAAE,KAAG,CAAC;AAAE,IAAAA,GAAE,QAAM,SAAOA,GAAE,OAAK,CAAC;AAAG,QAAI,IAAE,EAAC,MAAKA,GAAE,MAAK,IAAGA,GAAE,IAAG,UAAS,EAAE,UAAS,aAAYA,GAAE,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,UAASA,GAAE,MAAK,SAAQ,EAAE,QAAO;AAAE,WAAO,EAAE,UAAQ,SAAO,EAAE,cAAY,EAAE,OAAO,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,EAAC,MAAK,EAAE,MAAK,iBAAgB,EAAE,OAAM,eAAc,EAAE,IAAG,GAAE,IAAG,CAAC,CAAC,IAAG,EAAE,SAAO,SAAO,EAAE,aAAW,EAAE,MAAM,OAAO,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,MAAK;AAAE,cAAO,EAAE,MAAK;AAAA,QAAC,KAAI;AAAS,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,gBAAc,CAAC,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAGA,GAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAGA,GAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAA,QAAS,KAAI;AAAU;AAAA,QAAM;AAAQ,gBAAM,IAAI,MAAM,2BAA2B,EAAE,IAAI,YAAYA,GAAE,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,YAAYA,IAAE;AAAC,QAAI,IAAEA,GAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,SAAG,SAAO,IAAE,EAAE,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,IAAAA,GAAE,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,IAAEA,GAAE;AAAI,IAAAA,GAAE,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,mBAAmBA,EAAC;AAAE,WAAM,EAAC,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,WAAU,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE;AAAC,WAAM,EAAC,YAAWA,GAAE,UAAU,MAAK,QAAOA,GAAE,UAAU,SAAS,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,CAAC,GAAE,IAAG,CAAC,CAAC,GAAE,SAAQA,GAAE,UAAU,UAAU,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,GAAEA,GAAE,GAAG,GAAE,IAAG,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE;AAAK,WAAO,KAAG,SAAO,IAAE,EAAE,CAAC,IAAG,EAAC,MAAK,GAAE,OAAMA,GAAE,KAAI;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAE,EAAE;AAAO,MAAG,OAAOA,GAAE,QAAM;AAAY,WAAOA,GAAE,KAAKD,GAAC;AAAE,MAAG,OAAO,UAAQ;AAAY,WAAO,IAAI,OAAOA,KAAE,QAAQ,EAAE,SAAS;AAAE,QAAM,IAAI,MAAM,kFAAkF;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,MAAM,QAAQD,GAAC,IAAE,OAAO,aAAa,MAAM,MAAKA,GAAC,IAAE,GAAGA,GAAC;AAAE,SAAOC,KAAE,IAAE,EAAE,YAAY;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,EAAE,GAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,IAAE,EAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC,KAAG,CAAC,GAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAE;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;AAAQ,aAAO;AAAA,EAAI;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,OAAK,EAAE,KAAK,OAAK;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,OAAK,GAAG,EAAE,IAAI,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,OAAK,EAAE,KAAK,KAAK,IAAI,OAAG,GAAG,CAAC,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,CAACA,IAAE;AAAY,WAAOA,IAAE,OAAK,OAAKA,IAAE,IAAI,IAAI,CAAAC,OAAG,OAAOA,GAAE,QAAM,WAASA,GAAE,OAAK,SAASA,GAAE,MAAK,EAAE,CAAC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,QAAM,GAAG,EAAE,KAAK,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;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,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,EAAE,IAAI,OAAG,GAAG,GAAE,CAAC,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,QAAM,EAAE,KAAK,MAAM,IAAI,OAAG,GAAG,CAAC,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAEC,EAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,IAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,OAAKA,IAAE,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAE,KAAK,SAAO,CAAC,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,SAAOA,GAAE,WAAW,IAAI,OAAG,KAAK,SAAS,CAAC,CAAC,GAAEA,GAAE,YAAU,SAAO,KAAK,QAAM,OAAO,KAAKA,GAAE,QAAQ,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,CAAC,IAAE,KAAK,QAAQ,CAAC,GAAE,IAAG,CAAC,CAAC;AAAA,EAAE;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,GAAGA,IAAE,KAAK,WAAU,KAAK,OAAO;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,KAAK,SAASA,EAAC;AAAE,QAAG,EAAE,UAAQ;AAAK,aAAO,GAAGA,IAAE,KAAK,WAAU,KAAK,OAAO;AAAE,QAAG,EAAE,KAAG,QAAM,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,QAAG,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,QAAG,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,QAAG,EAAE,SAAO;AAAK,aAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,QAAG,EAAE,QAAM;AAAK,aAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,QAAG,EAAE,QAAM,MAAK;AAAC,UAAG,EAAE,KAAK,KAAG,QAAM,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,UAAG,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,UAAG,EAAE,KAAK,SAAO;AAAK,eAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,UAAG,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAE,UAAG,EAAE,KAAK,QAAM;AAAK,eAAO,GAAG,KAAK,KAAK,UAASA,IAAE,CAAC;AAAA,IAAC;AAAC,WAAO;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,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAIF,KAAG,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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAU,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,WAAUD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAU,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAoB,aAAM,CAAC,EAAE,kBAAkB,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAM,KAAI;AAAa,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,GAAGD,IAAE,WAAW,CAAC,GAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,IAAE,IAAG;AAAC,MAAG,EAAE,OAAOD,OAAG,YAAU,OAAOC,MAAG,WAAU;AAAC,MAAE,OAAOD,IAAE,WAASC,GAAE,QAAO,MAAI,IAAE,WAAWD,GAAC,QAAQC,EAAC,aAAa;AAAE,aAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAEC,GAAE,CAAC;AAAE,QAAE,OAAO,IAAE,KAAG,IAAE,KAAG,MAAI,GAAE,MAAI,IAAE,WAAWD,GAAC,QAAQC,EAAC,aAAa;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM,EAAE,OAAOA,OAAG,YAAUA,IAAE,KAAK,CAAAC,OAAGA,KAAE,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,MAAG,KAAGC,GAAE,WAAS;AAAE,UAAM,IAAI,MAAM,qFAAqF,CAAC,EAAE;AAAE,MAAG,KAAGA,GAAE,QAAQ,OAAG;AAAC,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC,GAAG,CAAC;AAAE,UAAM,IAAI,MAAM,mCAAmC,CAAC,EAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,OAAOD,OAAG;AAAS,WAAOC;AAAE,MAAG,OAAOA,MAAG;AAAS,WAAOD;AAAE,MAAGA,IAAE,WAASC,GAAE;AAAO,UAAM,IAAI,MAAM,oCAAoCD,GAAC,QAAQC,EAAC,EAAE;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAEC,GAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,oCAAoCD,GAAC,QAAQC,EAAC,EAAE;AAAE,MAAE,CAAC,IAAE,KAAG,IAAE,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAKA,IAAE,KAAK,QAAM,GAAE,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,cAAcA,IAAE;AAAC,SAAK,QAAQ,QAAQ,OAAG;AAAC,OAACA,MAAG,QAAM,CAACA,GAAE,IAAI,EAAE,OAAO,EAAE,MAAI,EAAE,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,KAAKA,IAAE;AAAC,QAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAGA,KAAE,KAAGA,MAAG,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,4BAA4BA,EAAC,wBAAwB,KAAK,KAAK,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,QAAQA,EAAC;AAAE,QAAG,EAAE;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0BAA0BA,EAAC,sGAAsG;AAAE,WAAO,KAAK,mBAAiB,EAAE,UAAQ,OAAI,EAAE,OAAK,MAAG,EAAE;AAAA,EAAM;AAAA,EAAC,SAASA,IAAE;AAAC,WAAOA,GAAE,IAAI,OAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE,GAAE;AAAC,QAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAGA,KAAE,KAAG,CAAC,KAAK,eAAaA,MAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,2BAA2BA,EAAC,8CAA8C,KAAK,OAAO,EAAE;AAAE,QAAI,IAAE,KAAK,QAAQA,EAAC,KAAG,CAAC;AAAE,QAAG,EAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0CA,EAAC;AAAA,uCACtluE,EAAE,KAAK,8BAA8B,KAAK,KAAK,GAAG;AAAE,QAAG,KAAK,KAAK,MAAI,MAAI,KAAK,gBAAc,QAAM,KAAK,aAAa,WAAS,OAAK,KAAK,eAAa,EAAE,QAAO,GAAG,KAAK,cAAa,EAAE,OAAM,eAAe,KAAK,IAAI,0CAA0CA,EAAC,GAAG,GAAE,EAAE;AAAK,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0CA,EAAC,qCAAqC;AAAE,QAAG,EAAE;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0CA,EAAC,wCAAwC;AAAE,MAAE,SAAO,GAAE,GAAG,CAAC,GAAE,EAAE,UAAQ,MAAG,KAAK,QAAQA,EAAC,IAAE;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,GAAE;AAAC,QAAGA,GAAE,WAAS,EAAE;AAAO,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,8DAA8DA,GAAE,MAAM,qCAAqC,EAAE,MAAM,GAAG;AAAE,IAAAA,GAAE,QAAQ,CAAC,GAAE,MAAI,KAAK,MAAM,GAAE,EAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,QAAG,KAAG,MAAI,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+B,CAAC,EAAE;AAAE,QAAGA;AAAE,MAAAA,KAAEA,GAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAA,SAAM;AAAC,MAAAA,KAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE;AAAI,QAAAA,GAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAGA,GAAE,WAAS;AAAE,aAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,SAASA,EAAC;AAAE,WAAO,GAAG,KAAK,cAAa,EAAE,CAAC,EAAE,OAAM,8BAA8B,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAGA,MAAGA,OAAI,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+BA,EAAC,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI;AAAE,aAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE;AAAI,QAAE,KAAK,CAAC;AAAE,QAAI,IAAE,KAAK,SAAS,CAAC;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,QAAQA,IAAE,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyB,EAAE,KAAK,EAAE;AAAE,QAAGA,GAAE,WAAS,EAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,sDAAsDA,GAAE,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,IAAI,GAAGA,EAAC;AAAE,QAAG,CAAC,KAAK,eAAa,KAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,KAAK,OAAO,GAAG;AAAE,SAAK,UAAUA,IAAE,GAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyB,EAAE,KAAK,EAAE;AAAE,QAAI,IAAE,GAAE,IAAEA,GAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,QAAG,MAAI,EAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM;AAAA;AAAA,UAE3pE,CAAC,4BAA4B,EAAE,KAAK,EAAE;AAAE,QAAG,CAAC,KAAK,eAAaA,GAAE,WAAS,KAAK;AAAQ,YAAM,IAAI,MAAM,2DAA2D,KAAK,OAAO,QAAQA,GAAE,MAAM,gEAAgE;AAAE,QAAI,IAAE,MAAI,IAAE,IAAE,EAAE,OAAK,GAAE,IAAE,CAAC;AAAE,OAAG,MAAI;AAAC,UAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAEA,GAAE,CAAC,GAAE,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,GAAG,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO;AAAI,QAAE,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,YAAYC,IAAE,GAAE,GAAE,IAAE,IAAG;AAAC,SAAK,UAAQA,IAAE,KAAK,eAAa,GAAE,KAAK,eAAa,GAAEA,MAAG,QAAMA,GAAE,QAAQ,OAAG;AAAC,UAAG,MAAI,EAAE;AAAM,cAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,EAAE,KAAK,EAAE;AAAE,SAAG,GAAE,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,cAAcC,IAAE;AAAC,SAAK,QAAQ,QAAQ,OAAG;AAAC,OAACA,MAAG,QAAM,CAACA,GAAE,IAAI,EAAE,EAAE,MAAI,EAAE,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,MAAMA,IAAE,GAAE,IAAE,IAAG;AAAC,QAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,MAAI,MAAI,KAAK,QAAQ,WAAS;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,iCAAiC,KAAK,QAAQ,MAAM,YAAY;AAAE,OAAGA,IAAE,KAAK,cAAa,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,EAAC;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,QAAQA,IAAE,GAAE;AAAC,QAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI;AAAE,YAAM,IAAI,MAAM,mCAAmC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,EAAC,GAAE,IAAE,KAAK,QAAQ,IAAI;AAAE,WAAO,EAAE,OAAK,OAAG,GAAG,EAAE,OAAMA,IAAE,6BAA6B,GAAE,EAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,QAAGA,GAAE,UAAQ,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmCA,GAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,GAAGA,GAAE,OAAM,KAAK,cAAa,6BAA6B,GAAE,KAAK,mBAAiB,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,OAAGA,EAAC,GAAE,KAAK,QAAQ,KAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAGA,KAAE;AAAE,YAAM,IAAI,MAAM,0DAA0DA,EAAC,EAAE;AAAE,QAAG,KAAK,mBAAiB,MAAIA,KAAE,KAAK;AAAe,YAAM,IAAI,MAAM,+BAA+BA,EAAC,6BAA6B,KAAK,cAAc,GAAG;AAAE,QAAI,IAAE,IAAID,GAAE,CAAC,GAAE,KAAK,cAAa,KAAK,cAAa,KAAK,cAAc;AAAE,MAAE,QAAQ,SAAOC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,IAAI,KAAK,QAAQ,QAAOA,EAAC,GAAE,EAAE;AAAE,QAAE,QAAQ,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE,GAAE;AAAC,QAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAGA,KAAE,KAAGA,KAAE,KAAK,QAAQ;AAAO,YAAM,IAAI,MAAM,4BAA4BA,EAAC,mBAAmB,KAAK,QAAQ,MAAM,YAAY;AAAE,QAAG,KAAK,QAAQA,EAAC,KAAG;AAAK,YAAM,IAAI,MAAM,oBAAoBA,EAAC,WAAW;AAAE,OAAG,KAAK,QAAQA,EAAC,EAAE,OAAM,GAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAO,EAAE,KAAK,QAAQA,EAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,EAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAGA,KAAE,KAAG,KAAK,mBAAiB,MAAIA,MAAG,KAAK;AAAe,YAAM,IAAI,MAAM,yBAAyBA,EAAC,uBAAuB,KAAK,cAAc,YAAY;AAAE,OAAG,KAAK,cAAa,EAAE,OAAM,6BAA6B,GAAE,GAAG,CAAC,GAAE,KAAK,QAAQA,EAAC,KAAG,SAAO,KAAK,QAAQA,EAAC,EAAE,OAAK,QAAI,KAAK,QAAQA,EAAC,IAAE;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE,GAAE;AAAC,QAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,OAAG,KAAK,cAAa,GAAE,6BAA6B,GAAEA,KAAEA,GAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAOA,GAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,GAAG,MAAI;AAAC,UAAI,IAAEA,GAAE,IAAI,OAAG,EAAE,KAAK,QAAQ,CAAC,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,QAAGA,MAAGA,OAAI,KAAK;AAAa,YAAM,IAAI,MAAM,uBAAuB,KAAK,YAAY,+BAA+BA,EAAC,EAAE;AAAE,OAAG,KAAK,cAAa,GAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE;AAAM,MAAGA,IAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoDA,IAAE,KAAK,EAAE;AAAE,MAAGA,IAAE,UAAQ;AAAE,UAAM,IAAI,MAAM,mCAAmCA,IAAE,KAAK,uBAAuB,CAAC,EAAE;AAAE,MAAI,IAAEA,IAAE,MAAM,MAAM,CAAC;AAAE,KAAG,GAAEC,IAAE,6BAA6B;AAAE,MAAI,IAAE,GAAGD,GAAC;AAAE,SAAO,IAAI,GAAG,GAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAG,CAAC,GAAED,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAGA,GAAE,WAASD,IAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,sDAAsDC,GAAE,MAAM,QAAQD,IAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,KAAK,IAAI,GAAGC,EAAC;AAAE,MAAG,KAAG,QAAM,MAAI,MAAI,KAAG;AAAE,UAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,GAAG,CAAC,GAAE,GAAED,IAAE,OAAM,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,SAAOC,GAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAA,EAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAEA,GAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,MAAG,MAAID,IAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM;AAAA;AAAA,UAEj6J,CAAC,4BAA4BA,IAAE,KAAK,EAAE;AAAE,MAAI,IAAEA,IAAE,MAAM,MAAM,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,MAAI,IAAE,IAAEA,IAAE,OAAK,GAAE,IAAE,GAAG,MAAI;AAAC,QAAI,IAAE,CAAC;AAAE,IAAAA,MAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEC,GAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAEA,GAAE,CAAC,GAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,GAAGD,KAAE,GAAE,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,WAAOA,IAAE,QAAQ,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,GAAEA,IAAE,OAAMC,GAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,OAAMD,KAAEC,IAAE,MAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAK,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,cAAaA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,cAAO,MAAM,EAAE,KAAK,GAAG,CAAC,IAAE,EAAE,YAAY,CAAC,EAAE,qBAAqB,GAAE,EAAE,gBAAe,EAAE,aAAa,IAAE,EAAE,YAAY,CAAC,EAAE,qBAAqB,GAAE,EAAE,gBAAe,EAAE,aAAa;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,MAAM,EAAE,YAAY,CAAC,EAAE,qBAAqB,GAAE,EAAE,gBAAe,EAAE,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,MAAM,EAAE,YAAY,CAAC,EAAE,qBAAqB,GAAE,EAAE,gBAAe,EAAE,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,MAAM,EAAE,YAAY,CAAC,EAAE,qBAAqB,GAAE,EAAE,gBAAe,EAAE,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,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;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,GAAEC,IAAE,CAAC,MAAI,MAAM;AAAE,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAEA,IAAE,CAAC;AAAE,eAAM,CAAC,GAAG,CAAC,CAAC;AAAA,MAAC;AAAC;AAAA,IAAM;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAO,EAAE,WAAW,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAO,EAAE,UAAU,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAO,EAAE,cAAc,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,0BAAyBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,CAAC,GAAE,CAAC,EAAE,UAAS,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,cAAc,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAoB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE;AAAE,MAAAD,IAAE,OAAK,sBAAoB,IAAE,gBAAc,IAAE;AAAiB,UAAI,IAAE,EAAE,GAAEA,KAAEC,IAAE,CAAC,GAAE,IAAED,IAAE,OAAK,sBAAoB,KAAG,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAmB,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,SAAS,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC;AAAE,aAAO,EAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,IAAE,MAAI,WAAU,IAAE,CAAC,GAAE,IAAE,MAAI,SAAQ,IAAE,MAAI,kBAAiB,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,uGAAuG;AAAE,QAAG,CAAC,KAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,kFAAkF;AAAA,EAAC;AAAC,MAAG;AAAE,UAAM,IAAI,MAAM,sEAAsE;AAAE,MAAI,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,QAAI,IAAE,GAAE,IAAE;AAAQ,MAAI,IAAE,EAAE,kBAAiBD,KAAEC,IAAE,CAAC;AAAE,SAAM,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC;AAAC;AAAC,IAAI,KAAG,CAACD,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,UAASA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,QAAO,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,gBAAgB,EAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,QAAO,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,uBAAsBD,KAAEC,IAAE,CAAC,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,EAAE,kBAAkB,EAAE,KAAID,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,SAAQA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,YAAY,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,iBAAiB,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;AAAE,SAAM,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,IAAI,KAAG,OAAMD,KAAEC,IAAE,GAAE,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,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,kBAAiBA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAOC,GAAED,IAAE,IAAI;AAAA,IAAE,KAAI;AAAyB,UAAI,IAAE,EAAE,WAAUA,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,GAAGD,IAAE,MAAKC,IAAE,CAAC,KAAG,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,GAAGD,IAAE,MAAKC,IAAE,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAA,IAAe,KAAI,2BAA0B;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAY,aAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,EAAE,OAAM,OAAO,CAAC;AAAA,IAAE,KAAI;AAAS,aAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,EAAE,IAAI,OAAG,EAAE,SAAS,EAAE,KAAK,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC;AAAE,cAAQ,KAAK,gGAAgG,GAAE,QAAQ,IAAI,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,gBAAQ,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,YAAYC,IAAE,GAAE;AAAC,SAAK,WAASA,IAAE,KAAK,aAAW,GAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,YAAU,oBAAI,OAAI,GAAG,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,SAAK,UAAU,QAAQ,CAAAA,OAAGA,GAAE,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,OAAOA,IAAE,GAAE;AAAC,SAAK,uBAAuBA,IAAE,CAAC;AAAE,QAAI,IAAE,MAAMA,GAAE,KAAK;AAAE,WAAO,KAAK,UAAU,QAAQ,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,UAAU,MAAM,GAAE,GAAG,MAAI;AAAC,UAAI,IAAE,GAAG,CAAC,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,KAAKA,IAAE,GAAE;AAAC,SAAK,uBAAuBA,IAAE,CAAC;AAAE,QAAI,IAAE,MAAMA,GAAE,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,GAAE,CAAC;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,GAAG,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,WAAO,KAAG,OAAK,IAAE;AAAA,EAAC;AAAA,EAAC,uBAAuBA,IAAE,GAAE;AAAC,QAAGA,GAAE,UAAQ,KAAK;AAAS,YAAM,IAAI,MAAM,oBAAoB,KAAK,QAAQ,aAAaA,GAAE,KAAK,EAAE;AAAE,QAAG,EAAE,UAAQ,KAAK;AAAW,YAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,aAAa,EAAE,KAAK,EAAE;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,OAAMD,KAAEC,IAAE,GAAE,MAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAY,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,yBAAyBA,IAAE,IAAI;AAAE,UAAG,KAAG;AAAK,eAAM,CAAC,CAAC;AAAE;AAAC,YAAI,IAAE,EAAE,YAAWA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,GAAE,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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,UAASA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,cAAc,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,8BAA6B;AAAC,UAAI,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAS,KAAI;AAAW,aAAM,CAAC,EAAE,MAAM,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAc,KAAI;AAAA,IAAgB,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,GAAG,EAAE,WAAUD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,IAAE,MAAI,WAAU,IAAE,MAAI,SAAQ,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAEC,IAAE,CAAC;AAAE,UAAG,GAAE;AAAC,YAAG,KAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,oFAAoF;AAAE,YAAG,CAAC,KAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,+DAA+D;AAAA,MAAC;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,YAAW,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,YAAW,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAiB,aAAM,CAAC,EAAE,OAAO,SAAS,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAiB,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,2BAA2B,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAG,EAAC,oBAAmB,GAAE,mBAAkB,EAAC,IAAE,EAAE,aAAa,EAAE,sBAAqBA,KAAEC,IAAE,CAAC,GAAE,EAAE,qBAAoBD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,oBAAmBD,KAAEC,IAAE,CAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAG,EAAC,gBAAe,GAAE,eAAc,EAAC,IAAE,EAAE,YAAY,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,EAAE,uBAAsBD,KAAEC,IAAE,CAAC,GAAE,EAAE,qBAAoBD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAE,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAW,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,EAAE,KAAK,GAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,CAAC,KAAG,EAAE,KAAK,CAAC;AAAE,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,OAAMD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,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;AAAE,kBAAM,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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,mBAAkBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC;AAAE,aAAO,EAAE,MAAM,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,UAAU,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,UAASD,KAAEC,IAAE,CAAC;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,KAAEC,IAAE,GAAE,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,KAAEC,IAAE,CAAC,GAAE,EAAE,UAASD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,EAAE,gBAAeD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAoB,aAAM,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAqB,aAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,SAAQA,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI,gBAAe;AAAC,UAAG,EAAC,QAAO,GAAE,cAAa,EAAC,IAAE,EAAE,OAAO,aAAa,EAAE,QAAOD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,EAAE,eAAcD,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC,GAAE,EAAE,0BAAyBD,KAAEC,IAAE,CAAC,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,KAAEC,IAAE,CAAC,GAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAyB,aAAM,CAAC,EAAE,OAAO,uBAAuB,EAAE,SAAQD,KAAEC,IAAE,CAAC,GAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAEC,IAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAIA,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,QAAOD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,WAAUD,KAAEC,IAAE,CAAC,GAAE,EAAE,iBAAgBD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,YAAWD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAEC,IAAE,CAAC,GAAE,IAAE,EAAE,cAAaD,KAAEC,IAAE,CAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAEC,IAAE,CAAC,GAAE,EAAE,SAAQD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,MAAKD,KAAEC,IAAE,CAAC,GAAE,EAAE,MAAKD,KAAEC,IAAE,CAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAEC,IAAE,GAAE,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;AAAe,iBAAO,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,KAAEC,IAAE,CAAC;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,YAAYA,KAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE;AAAC,SAAK,YAAUA,IAAE,KAAK,iBAAe,GAAE,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,SAASA,IAAE,GAAE;AAAC,WAAM,EAAC,IAAGA,IAAE,WAAU,GAAE,aAAY,EAAC;AAAA,EAAC;AAAA,EAAC,IAAI,eAAeA,IAAE;AAAC,SAAK,aAAWA,OAAI,KAAK,WAASA,IAAE,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,QAAIA,KAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,SAAS,SAAO,GAAE,KAAI;AAAC,UAAI,IAAE,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,SAAO,CAAC;AAAE,MAAAA,GAAE,KAAK,KAAK,qBAAqB,CAAC,CAAC;AAAA,IAAC;AAAC,IAAAA,GAAE,KAAK,EAAE,GAAE,KAAK,qBAAmBA;AAAA,EAAC;AAAA,EAAC,qBAAqBA,IAAE;AAAC,WAAOA,KAAEA,GAAE,IAAI,OAAG,EAAE,OAAK,KAAG,EAAE,gBAAc,IAAE,KAAG,GAAG,EAAE,SAAS,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,GAAG,IAAE;AAAA,EAAE;AAAA,EAAC,WAAWA,IAAE;AAAC,SAAK,aAAW,KAAK,UAAS,KAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,QAAOA,EAAC,CAAC,GAAE,KAAK,mBAAmB,QAAQ,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,YAAW;AAAC,QAAG,KAAK,YAAU,KAAK,SAAS,SAAO;AAAE,WAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,OAAO,EAAE,GAAE,KAAK,kBAAkB,MAAM;AAAA;AAAO,YAAM,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,UAAIA,KAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS,KAAK,SAAS,SAAO,CAAC,CAAC;AAAE,MAAAA,GAAE,eAAa,GAAEA,GAAE,KAAG,KAAK,QAAO,KAAK,SAAS,OAAO,IAAG,GAAEA,EAAC,GAAE,KAAK,mBAAmB,OAAO,GAAE,GAAE,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,IAAC;AAAM,YAAM,IAAI,MAAM,uDAAuD;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,WAAO,KAAK,UAAUA,EAAC;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,SAAK,eAAeA,GAAE,EAAE,IAAEA;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,WAAO,KAAK,eAAeA,EAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,SAAK,cAAcA,GAAE,EAAE,IAAEA;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,WAAO,KAAK,cAAcA,EAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE;AAAC,aAAQ,KAAK,KAAK;AAAe,WAAK,eAAe,CAAC,EAAE,cAAcA,EAAC;AAAE,aAAQ,KAAK,KAAK;AAAc,WAAK,cAAc,CAAC,EAAE,cAAcA,EAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,GAAGC,EAAC;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,GAAE,EAAE,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,SAAQC,IAAE,WAAU,GAAE,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,EAAC,WAAU,GAAE,QAAO,EAAC,IAAEA,IAAE,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,OAAG,EAAE,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,GAAGA,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;AAAS,QAAE,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;AAAE,QAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,IAAID,IAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAEC,GAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,IAAI,IAAI,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,IAAE,EAAE,IAAI,CAAC;AAAE,aAAQ,KAAK,EAAE;AAAS,OAAC,EAAE,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,YAAYC,IAAE;AAAC,UAAM,6BAA6BA,EAAC,EAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,IAAID,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,IAAI,IAAIC,GAAE,IAAI,OAAG,EAAE,IAAI,CAAC,GAAE,IAAE,OAAG,EAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI,GAAE,IAAE,IAAI,IAAID,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,CAAC,EAAE,IAAI,EAAE,IAAI;AAAE,cAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,UAAG,EAAE,IAAI,EAAE,IAAI,IAAE,EAAE,IAAI,EAAE,IAAI;AAAE,cAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,wCAAwC,EAAE,IAAI,GAAG;AAAA,IAAC;AAAC,QAAG,CAAC,EAAE,CAAC;AAAE,eAAQ,KAAK,EAAE,QAAO;AAAC,YAAG,CAAC,EAAE,IAAI,EAAE,IAAI;AAAE,gBAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,YAAG,EAAE,IAAI,EAAE,IAAI,IAAE,EAAE,IAAI,EAAE,IAAI;AAAE,gBAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,yCAAyC,EAAE,IAAI,GAAG;AAAA,MAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,IAAI,IAAID,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,OAAO,kBAAiB,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,GAAG,CAAC,IAAE,IAAE,CAAC,GAAE,IAAE,OAAG;AAAC,QAAI,IAAE,EAAEC,GAAE,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,MAAI;AAAE;AAAS,QAAI,IAAEA,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,UAAUC,IAAE;AAAC,QAAI,IAAE,OAAO,KAAKA,EAAC,EAAE,IAAI,OAAGA,GAAE,CAAC,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,SAAK,aAAW,CAAC,EAAE,OAAO,GAAG,CAAC,GAAE,KAAK,aAAWA;AAAA,EAAC;AAAA,EAAC,IAAI,gBAAgBA,IAAE;AAAC,SAAK,mBAAiBA;AAAA,EAAC;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAAA,QAAI,EAAC,MAAKA,GAAE,MAAK,OAAMA,GAAE,WAAW,QAAMA,GAAE,WAAW,MAAM,QAAM,QAAO,OAAMA,GAAE,WAAW,QAAMA,GAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS,IAAI,CAAAA,QAAI,EAAC,MAAKA,GAAE,MAAK,OAAMA,GAAE,WAAW,QAAMA,GAAE,WAAW,MAAM,QAAM,QAAO,OAAMA,GAAE,WAAW,QAAMA,GAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAAA,OAAGA,GAAE,gBAAcA,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,IAAI,cAAa;AAAC,WAAO,KAAK,SAAS,IAAI,CAAAA,OAAG;AAAC,UAAI,IAAEA,GAAE,gBAAcA,GAAE;AAAK,aAAOA,GAAE,gBAAc,GAAG,CAAC,IAAIA,GAAE,aAAa,KAAG;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,CAACA,IAAE,OAAKA,GAAE,CAAC,IAAE,KAAK,WAAW,CAAC,EAAE,WAAUA,KAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,QAAMA,IAAE,KAAK,SAAO,GAAE,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,WAASA,GAAE,SAAQ,KAAK,UAAQA,GAAE,QAAO,KAAK,aAAWA,GAAE,WAAU,KAAK,aAAWA,GAAE,WAAU,KAAK,aAAWA,GAAE,WAAUA,GAAE,aAAW,QAAM,OAAO,KAAKA,GAAE,SAAS,EAAE,QAAQ,OAAG;AAAC,WAAK,qBAAqB,CAAC,IAAE,IAAID,IAAEC,GAAE,UAAU,CAAC,GAAE,IAAI;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkBA,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK;AAAE,WAAO,EAAE,KAAK,KAAK,SAAS,IAAE,OAAK,EAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,IAAE,GAAE,KAAK,WAAU,KAAK,UAAU,GAAE,EAAC,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC,IAAE;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,qCAAqC,EAAE,IAAI,gCAAgC,EAAE,EAAE,4GAA4G,CAAC,GAAG;AAAE,QAAG,EAAE,SAAO,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,OAAO,KAAKA,EAAC;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,mBAAmBA,IAAE;AAAC,QAAGA,MAAG;AAAK,aAAO;AAAK,QAAI,IAAEA,GAAE,MAAM;AAAE,WAAO,GAAG,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE;AAAC,WAAOA,KAAEA,GAAE,IAAI,OAAG,KAAK,mBAAmB,CAAC,CAAC,IAAE;AAAA,EAAI;AAAA,EAAC,eAAeA,IAAE;AAAC,WAAO,OAAO,YAAY,OAAO,QAAQA,EAAC,EAAE,IAAI,CAAC,CAAC,GAAE,CAAC,MAAI,CAAC,GAAE,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,SAAK,2BAA2B,GAAEA,KAAE,KAAK,UAAUA,EAAC;AAAE,QAAI,IAAE,OAAO,KAAKA,EAAC,EAAE,KAAK;AAAE,SAAK,YAAYA,EAAC,GAAE,KAAK,uBAAuBA,EAAC,GAAE,IAAE,KAAK,WAAW,CAAC,GAAE,KAAK,aAAa,CAAC;AAAE,QAAI,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,QAAI,IAAE,KAAK,kBAAkB,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,SAAG,SAAO,IAAE,KAAK,QAAQA,IAAE,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,KAAKA,EAAC,EAAE,QAAQ,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAEA,GAAE,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;AAAE;AAAS,YAAI,IAAE,GAAG,GAAE,GAAE,GAAE,KAAK,gBAAgB;AAAE,YAAG,EAAE,UAAU,CAAC;AAAE,gBAAM,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,GAAE,EAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE;AAAC,QAAI,IAAE,CAAC,EAAE,OAAO,MAAM,CAAC,GAAE,OAAO,KAAKA,EAAC,EAAE,IAAI,OAAGA,GAAE,CAAC,CAAC,EAAE,IAAI,OAAG,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC,CAAC;AAAE,WAAO,IAAI,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuBA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,GAAG,CAAC,KAAG,EAAE,IAAIA,EAAC,IAAG;AAAC,eAAQ,KAAK,EAAEA,EAAC;AAAE,aAAG,SAAO,EAAE,EAAE,EAAE,KAAG,EAAE,EAAE,EAAE,KAAG,KAAG,EAAE,SAAS;AAAQ,eAAQ,KAAK,EAAE,QAAO;AAAC,YAAG,GAAG,CAAC;AAAE;AAAS,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,CAAC;AAAE,YAAG,KAAG;AAAK,mBAAQ,KAAK,GAAE;AAAC,gBAAG,CAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE;AAAE;AAAS,gBAAI,IAAE,EAAE,EAAE,EAAE;AAAE,kBAAI,KAAG,EAAE,QAAQ,GAAE,OAAO,EAAE,EAAE,EAAE,KAAG,KAAG,QAAM,EAAE,EAAE,EAAE;AAAA,UAAG;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,4CAA4CA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,GAAG,CAAC,KAAG,EAAE,IAAI,EAAE,IAAI;AAAA,IAAC;AAAC,QAAG,EAAE,GAAGA,EAAC,KAAG,KAAG;AAAM,eAAQ,KAAK,GAAE;AAAC,YAAG,EAAE,CAAC;AAAE;AAAS,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,CAAC;AAAE,iBAAQ,KAAK;AAAE,WAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,MAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAaA,IAAE,GAAE;AAAC,WAAO,KAAK,cAAcA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,qBAAmB,OAAO,OAAO,KAAK,gBAAgB,EAAE,QAAQ,CAAAA,OAAG;AAAC,eAAQ,KAAKA;AAAE,aAAG,CAAC,EAAE,cAAY,EAAE,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,mBAAiB;AAAA,EAAK;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK;AAAA,EAAgB;AAAA,EAAC,MAAM,cAAcA,IAAE,GAAE,IAAE,OAAG,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE;AAAC,SAAK,2BAA2B,GAAE,MAAIA,KAAE,KAAK,UAAUA,EAAC,GAAE,KAAK,YAAYA,EAAC,GAAE,KAAK,uBAAuBA,EAAC,GAAE,IAAE,KAAK,WAAW,CAAC,GAAE,KAAK,aAAa,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,IAAI,GAAG,KAAK,WAAU,GAAE,GAAE,KAAK,qBAAoB,KAAK,kBAAkB;AAAE,SAAK,4BAA0B,KAAK,mBAAiB,KAAK,eAAe,KAAK,SAAS;AAAG,QAAI,IAAE,MAAM,KAAK,uBAAuBA,IAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,GAAE,IAAE,OAAO,KAAKA,EAAC,EAAE,IAAI,OAAGA,GAAE,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,qBAAqBA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,OAAO,CAAC,GAAE,GAAE,OAAK,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,IAAE,GAAE,IAAG,CAAC,CAAC;AAAE,WAAO,KAAK,cAAc,GAAE,KAAK,aAAY,MAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuBA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAKA,EAAC,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,GAAGA,IAAE,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,UAAS,EAAE,eAAc,EAAE,GAAE,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS;AAAE,WAAO,KAAKA,EAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAEA,GAAE,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,GAAE,GAAE,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,GAAE,CAAC,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,aAAaA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAK,EAAE,SAAO,KAAG;AAAC,UAAI,IAAE,EAAE,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,MAAK,GAAE,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,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE;AAAM,aAAK,kBAAkB,EAAE,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,kBAAkBA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,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,MAAG,EAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC,KAAG,EAAE,WAAW,MAAM,OAAG,CAAC,CAAC,GAAG,GAAE,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAE,MAAG,EAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC;AAAA,IAAG,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,KAAK,SAAS,EAAE,QAAQ,CAAAA,OAAG,KAAK,UAAUA,EAAC,EAAE,QAAQ,OAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuBA,IAAE;AAAC,WAAO,KAAKA,EAAC,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAEA,GAAE,CAAC,GAAE,CAAC,CAAC,IAAE,GAAG,CAAC,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,UAAUA,IAAE;AAAC,QAAI,GAAE;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,KAAKA,IAAE;AAAC,UAAI,KAAG,KAAG,IAAE,KAAK,gBAAc,QAAM,MAAI,SAAO,SAAO,EAAE,YAAU,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC;AAAE,WAAG,OAAK,EAAE,EAAE,IAAI,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAI,IAAE,OAAO,KAAKA,EAAC,EAAE,OAAO,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC;AAAE,aAAO,KAAK,MAAM,MAAM,CAAC,KAAG;AAAA,IAAI,CAAC;AAAE,QAAG,EAAE,SAAO;AAAE,YAAM,IAAI,MAAM,uDAAuD,CAAC,8BAA8B;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,WAAOA,GAAE,IAAI,OAAG;AAAC,UAAI,GAAE;AAAE,UAAI,KAAG,KAAG,IAAE,KAAK,gBAAc,QAAM,MAAI,SAAO,SAAO,EAAE,aAAW,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC;AAAE,aAAO,KAAG,OAAK,EAAE,OAAK;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,IAAAA,GAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC;AAAE,UAAG,CAAC,KAAK,MAAM,MAAM,CAAC;AAAE,cAAM,IAAI,MAAM,eAAe,CAAC,6BAA6B;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,KAAE,CAAC,GAAE,IAAE,CAAC,GAAE;AAAC,SAAK,wBAAsBA,IAAE,KAAK,eAAa;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE;AAAC,SAAK,sBAAsBA,EAAC,IAAE,EAAE,QAAO,KAAK,aAAa,EAAE,EAAE,IAAE;AAAA,EAAC;AAAA,EAAC,yBAAyBA,IAAE;AAAC,WAAO,KAAK,sBAAsBA,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE;AAAC,WAAO,KAAK,aAAaA,EAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQA,MAAK,KAAK;AAAa,WAAK,aAAaA,EAAC,EAAE,cAAc,GAAE,OAAO,KAAK,aAAaA,EAAC;AAAE,aAAQA,MAAK,KAAK;AAAsB,WAAK,sBAAsBA,EAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,sBAAsBA,EAAC;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,YAAYA,IAAE,IAAE,CAAC,GAAE,IAAE,IAAG;AAAC,SAAK,WAASA,IAAE,KAAK,cAAY,GAAE,KAAK,UAAQ,OAAM,KAAK,KAAG,GAAE,KAAG,SAAO,KAAK,cAAY,CAAC,IAAG,KAAK,kBAAgB,IAAI;AAAA,EAAE;AAAA,EAAC,gBAAe;AAAC,QAAIA,KAAE,KAAK;AAAS,QAAGA,GAAE,QAAM;AAAK,WAAK,UAAQA;AAAA,aAAU,KAAK,YAAY,eAAa;AAAK,WAAK,UAAQ,KAAK,GAAG,mBAAmBA,IAAE,KAAK,WAAW;AAAA,SAAM;AAAC,UAAI,IAAE,KAAK,GAAG,gBAAgBA,IAAE,KAAK,WAAW;AAAE,UAAG,EAAE,WAAS;AAAE,UAAE,KAAK,KAAK,GAAG,mBAAmBA,IAAE,KAAK,WAAW,CAAC;AAAA,eAAU,EAAE,SAAO;AAAE,cAAM,IAAI,MAAM,wBAAwB,EAAE,MAAM,4BAA4B,CAACA,EAAC,CAAC,GAAG;AAAE,WAAK,UAAQ,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,QAAG,KAAK,cAAc,GAAE,KAAK,QAAQ,QAAM;AAAK,YAAM,IAAI,MAAM,+GAA+G;AAAE,QAAIA,KAAE,KAAK,QAAQ,KAAK;AAAE,WAAO,EAAE,UAAUA,EAAC,IAAEA,GAAE,KAAK,OAAG,KAAK,SAAS,CAAC,CAAC,IAAE,KAAK,SAASA,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,SAAK,YAAUA;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,SAAK,YAAU,GAAE,KAAK,UAAQ,GAAG,EAAE,SAAS,QAAQ,IAAI,EAAE,SAAS,WAAW;AAAG,QAAI,IAAE,KAAK,GAAG,cAAc,KAAK,UAAU,YAAW,KAAK,UAAU,WAAW;AAAE,QAAG,KAAK,WAAS,IAAI,GAAG,GAAG,SAAS,eAAe,GAAE,KAAK,SAAS,CAAC,GAAE,KAAK,SAAS,YAAU,KAAK,6BAA6B,CAAC,GAAE,KAAK,SAAS,kBAAgB,KAAK,iBAAgBA,GAAE,oBAAkB,QAAMA,GAAE,iBAAiB,QAAM,MAAK;AAAC,UAAI,IAAE,GAAG,SAAS,eAAeA,GAAE,gBAAgB;AAAE,WAAK,cAAY,IAAI,GAAG,CAAC,GAAE,KAAK,YAAY,YAAU,KAAK,SAAS,WAAU,KAAK,YAAY,kBAAgB,KAAK,iBAAgB,KAAK,uBAAqBA,GAAE;AAAA,IAAoB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,MAAM,KAAKA,IAAE,GAAE;AAAC,QAAG,OAAOA,MAAG,UAAS;AAAC,UAAI,IAAE,KAAK,GAAG,gBAAgBA,EAAC;AAAE,UAAG,EAAE,WAAS;AAAE,cAAM,IAAI,MAAM,0CAA0CA,EAAC,GAAG;AAAE,UAAG,EAAE,SAAO;AAAE,cAAM,IAAI,MAAM,wBAAwB,EAAE,MAAM,4BAA4BA,EAAC,GAAG;AAAE,MAAAA,KAAE,EAAE,CAAC;AAAA,IAAC;AAAC,QAAGA,GAAE,QAAM;AAAK,YAAM,IAAI,MAAM,6GAA6G;AAAE,WAAOA,GAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,yBAAyBA,IAAE;AAAC,QAAG,KAAK,sBAAqB;AAAC,UAAI,IAAEA,cAAa,KAAG,CAACA,EAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,aAAO,EAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,KAAK,qBAAqB,CAAC,CAAC,IAAE,CAAC,GAAE;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQA,IAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAaA,IAAE,GAAE;AAAC,QAAI,IAAE,MAAM,KAAK,aAAaA,IAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE;AAAC,QAAI;AAAE,QAAG,EAAEA,cAAa,OAAK,CAAC,MAAM,QAAQA,EAAC,GAAE;AAAC,UAAI,KAAG,IAAE,KAAK,eAAa,QAAM,MAAI,SAAO,SAAO,EAAE;AAAO,UAAG,KAAG;AAAK,iBAAQ,KAAK,GAAE;AAAC,cAAI,IAAE,EAAE,CAAC;AAAE,YAAE,cAAY,SAAOA,GAAE,CAAC,IAAE,KAAK,0BAA0B,EAAE,UAAU;AAAA,QAAE;AAAC,aAAOA;AAAA,IAAC;AAAC,IAAAA,KAAE,MAAM,QAAQA,EAAC,IAAEA,KAAE,CAACA,EAAC;AAAE,QAAI,IAAE,OAAO,KAAK,KAAK,yBAAyB,EAAE;AAAO,QAAGA,GAAE,SAAO,MAAI,KAAK,WAAW;AAAO,YAAM,IAAI,MAAM,oDAAoD,KAAK,WAAW,SAAO,CAAC,+CAA+CA,GAAE,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,IAAEA,GAAE,GAAG,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE;AAAC,WAAOA,KAAEA,MAAG,KAAK,aAAY,MAAM,QAAQA,EAAC,IAAEA,KAAE,CAACA,EAAC;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,6BAA6BA,IAAE;AAAC,QAAG,KAAK,4BAA0B,CAAC,GAAE,KAAK,sBAAqB;AAAC,UAAI,IAAE,KAAK,qBAAqB,SAAQ,IAAE,OAAO,KAAK,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,aAAK,0BAA0B,EAAE,UAAU,IAAEA,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,KAAK,wBAAwB,CAAC,GAAEA,KAAE,KAAK,gBAAgBA,EAAC,GAAE,IAAE,KAAK,iBAAiB,CAAC;AAAE,QAAI,IAAE,KAAK,SAAS,QAAQA,IAAE,CAAC;AAAE,WAAO,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAaA,IAAE,GAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,MAAM,KAAK,6BAA6B,CAAC,GAAEA,KAAE,KAAK,gBAAgBA,EAAC,GAAE,IAAE,KAAK,iBAAiB,CAAC;AAAE,QAAI,IAAE,MAAM,KAAK,SAAS,aAAaA,IAAE,CAAC;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,6BAA6BA,IAAE;AAAC,WAAO,OAAO,KAAKA,EAAC,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,CAAC,IAAE,CAACA,GAAE,CAAC,CAAC,GAAE,IAAG,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,KAAEC,KAAE,CAAC,GAAE,IAAE,IAAG;AAAC,MAAGD,OAAG;AAAK,UAAM,IAAI,MAAM,wGAAwG;AAAE,EAAAC,MAAG,SAAOA,KAAE,CAAC,IAAGA,GAAE,aAAW,OAAOD,OAAG,aAAWA,MAAE,GAAGA,GAAC;AAAG,MAAI,IAAE,IAAI,GAAGA,KAAEC,IAAE,CAAC;AAAE,SAAO,MAAM,EAAE,KAAK,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,OAAG;AAAK,UAAM,IAAI,MAAM,sHAAsH;AAAE,MAAIC;AAAE,MAAGD,eAAa,OAAM;AAAC,QAAG,CAAC,GAAE,CAAC,IAAEA;AAAE,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,kDAAkD;AAAE,QAAG,CAAC,KAAG,EAAE,aAAa;AAAa,YAAM,IAAI,MAAM,mEAAmE;AAAE,QAAG,EAAE,mBAAkB;AAAG,YAAM,IAAI,MAAM,uCAAuC;AAAE,QAAG,EAAE,qBAAoB;AAAG,YAAM,IAAI,MAAM,yCAAyC;AAAE,QAAI,IAAE,GAAG,eAAe,EAAE,eAAe,GAAE,IAAE,GAAG,6BAA6B,GAAE,GAAE,CAAC;AAAE,IAAAC,KAAE,GAAG,eAAe,CAAC;AAAA,EAAC,WAAS,UAASD;AAAE,IAAAC,KAAED;AAAA,WAAU,mBAAkBA,OAAG,iBAAgBA,OAAG,gBAAeA;AAAE,IAAAC,KAAE,GAAG,eAAeD,GAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB;AAAE,MAAI,IAAE,IAAI,GAAGC,EAAC;AAAE,SAAO,EAAE,KAAK,GAAE;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,KAAEC,IAAE;AAAC,QAAM,QAAQD,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,OAAG;AAAC,SAAG,QAAM,EAAE,OAAO,EAAE,UAAQ,aAAY,MAAI,GAAGC,EAAC,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,MAAMC,IAAE,GAAE,GAAE;AAAC,SAAK,aAAW,KAAK,WAAS,OAAG,EAAE,EAAE,IAAI,SAAS,KAAG,EAAE,KAAK;AAAA;AAAA;AAAA,6BAG/v/C;AAAG,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,KAAK,IAAI,GAAE,EAAC,QAAOA,IAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,GAAE,GAAE;AAAC,QAAI;AAAE,QAAG,MAAI,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,GAAEA,IAAE,CAAC;AAAA,IAAC;AAAM,UAAE,KAAK,MAAM,GAAEA,IAAE,CAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAMA,IAAE,OAAM,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,KAAK,KAAK,IAAIA,EAAC,IAAE,KAAK,KAAK,IAAIA,EAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAI,IAAE,KAAK,KAAK,IAAIA,EAAC;AAAE,MAAE;AAAA,EAAU;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAG,KAAK,KAAK,IAAIA,EAAC,GAAE;AAAC,UAAI,IAAE,KAAK,KAAK,IAAIA,EAAC;AAAE,QAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,KAAK,IAAIA,IAAE,EAAC,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,WAAO,KAAK,SAASA,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,QAAG,EAAC,OAAM,GAAE,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAIA,EAAC;AAAE,QAAG,MAAI,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,IAAIA,EAAC,EAAE,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,QAAI,IAAE,KAAK,SAASA,GAAE,MAAM;AAAE,QAAGA,GAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE,GAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAe,GAAE,GAAEA,EAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG;AAAC,QAAG,KAAK,KAAK,IAAIA,EAAC,GAAE;AAAC,UAAG,KAAK,KAAK,IAAIA,EAAC,EAAE,YAAW,CAAC,KAAG,KAAK,KAAK,IAAIA,EAAC,EAAE,WAAS;AAAE,eAAM;AAAG,UAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAIA,EAAC;AAAE,WAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,GAAE,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,IAAG,KAAK,KAAK,OAAOA,EAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,8BAA8BA,IAAE;AAAC,SAAK,YAAYA,GAAE,MAAM;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAI,IAAE,EAAE,IAAI;AAAE,WAAOA,GAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAE,EAAC;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,MAAG,SAAQ,CAAC,oHAAoH,EAAC;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE;AAAC,MAAE,CAACA,EAAC,GAAE,OAAO;AAAE,QAAI,IAAE,KAAK,SAASA,GAAE,MAAM;AAAE,WAAO,GAAGA,GAAE,OAAM,CAAC;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,MAAIC,KAAE,IAAI,aAAaD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,IAAAC,GAAE,CAAC,IAAE,KAAK,IAAID,IAAE,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,GAAEC,GAAC,IAAED,IAAE,QAAO,IAAEA,IAAE;AAAQ,IAAEC,IAAE,KAAK;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAcA,GAAE,KAAK,CAAC,GAAE,IAAE,EAAE,KAAK,IAAIA,GAAE,MAAM,EAAE;AAAO,SAAO,IAAE,GAAG,CAAC,GAAE,EAAE,WAAW,GAAEA,GAAE,OAAMA,GAAE,KAAK;AAAC;AAAjL,IAAmL,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAM,CAACC,IAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2BA,IAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAEA,GAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,eAAeA,EAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,iBAAiBA,IAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,CAAC,IAAED,IAAE,EAAE,IAAE,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,MAAM,CAAC;AAAA;AAAO,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,IAAEA,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,MAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAK,EAAE,eAAe,EAAE,OAAM,WAAU,CAAC,GAAE,MAAK,EAAE,eAAe,EAAE,OAAM,WAAU,CAAC,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,WAAU;AAAC,MAAG,MAAI,aAAY;AAAC,QAAI,IAAE,GAAGD,KAAEC,IAAE,SAAS,GAAE,IAAE,GAAGD,KAAEC,IAAE,SAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,oBAAoB,EAAE,cAAcC,EAAC,GAAE,CAAC;AAAE,SAAOD,IAAE,eAAeC,IAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,MAAI,SAAQ;AAAC,QAAI,IAAE,WAAW,KAAKD,GAAC;AAAE,WAAM,CAACC,IAAE,SAAQ,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,EAAE,aAAa,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,MAAI,MAAI,IAAE,IAAE,CAAC,EAAEA,IAAE,CAAC,GAAED,KAAE,GAAE,MAAM;AAAE,WAAM,CAAC,GAAE,QAAO,CAAC;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiC,CAAC,OAAO,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,SAAO,KAAG,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,IAAEC,GAAE,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,IAAE,EAAE,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,IAAEA,GAAE,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,CAACC,IAAE,GAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2BA,IAAE,CAAC,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,iBAAiBA,IAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAEA,GAAE,QAAO,IAAE,EAAE,eAAeA,EAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,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,UAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,MAAI;AAAA;AAAM,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,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,UAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,MAAI;AAAC,WAAM,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAEC,OAAID,MAAEC,EAAC;AAApB,IAAsB,KAAG,GAAG,CAACD,KAAEC,IAAE,GAAE,OAAK,EAAC,MAAKD,MAAE,GAAE,MAAKC,KAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,SAAG,MAAI,IAAE,IAAE,EAAE,CAAC,KAAGC,GAAE,CAAC,IAAE,EAAE,CAAC,KAAG;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAEC,GAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAED,IAAE,IAAI,GAAE,CAAC;AAAE,UAAG,IAAE;AAAE,cAAM,IAAI,MAAM,+BAA+B;AAAE,WAAG,MAAI,IAAE,EAAE,IAAI,GAAE,GAAE,CAAC,IAAEC,GAAE,OAAK,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAEA,GAAE,IAAI,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAE,GAAE,GAAE,CAAC;AAAA,IAAE;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAEC,EAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAM,CAACC,IAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAEA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,EAAE;AAAE,QAAE,CAAC,IAAED,IAAEC,GAAE,CAAC,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,EAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;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;AAAE,cAAM,IAAI,MAAM,oDAAoD;AAAE,UAAE,EAAE,uBAAuB,CAAC;AAAA,IAAC;AAAM,UAAE;AAAE,QAAI,IAAE,KAAG,EAAE,OAAM,IAAEC,GAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAcA,EAAC,CAAC;AAAE,MAAG,KAAG,MAAI,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,IAAE,MAAI,WAAS,EAAE,uBAAuB,EAAE,IAAI,IAAE,EAAE,MAAK,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAEC,GAAE,CAAC,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE;AAAE,YAAE,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,KAAEC,OAAID,QAAIC,KAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAD,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,KAAEC,OAAI,KAAK,MAAMD,MAAEC,EAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,IAAG,MAAK,OAAO;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC;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;AAAE,YAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,OAAO,IAAE,IAAE,CAAC,IAAEC,GAAE,IAAI,GAAGA,GAAE,WAAW,IAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAG,GAAED,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,IAAEC,GAAE,WAAW,CAAC,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAEA,GAAE,OAAO,CAAC;AAAE,QAAI,IAAED,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,KAAEC,OAAID,MAAEC,KAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,OAAGC,KAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAEC,KAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,OAAGC,KAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,KAAGA,KAAED,QAAI,IAAE,IAAG,IAAE,EAAE,oBAAoB,GAAE,SAAS;AAAE,IAAE,CAAC,IAAEA;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,uBAAuB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAEA,IAAE,IAAED,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,EAAE,GAAE;AAAC,UAAI,IAAED,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,KAAEC,OAAI,KAAK,IAAID,KAAEC,EAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAI,KAAK,IAAID,KAAEC,EAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAEC,EAAC;AAApB,IAAsB,KAAG,GAAG,CAACD,KAAEC,IAAE,GAAE,OAAK,EAAC,MAAKD,MAAE,IAAEC,KAAE,GAAE,MAAKD,MAAE,IAAEC,KAAE,EAAC,EAAE;AAApE,IAAsE,KAAG,GAAG,IAAG,IAAG,EAAE;AAApF,IAAsF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,IAAG,CAAC;AAAE,SAAO,GAAG,CAAC,GAAEA,IAAE,GAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,QAAIC,KAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,QAAO,IAAE,EAAE,cAAcA,EAAC,GAAE,IAAE,EAAE,eAAeA,EAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,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;AAAI,QAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0BD,KAAE,CAAC,GAAE,IAAE,GAAGC,IAAE,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;AAAE,WAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAG,MAAI,IAAE,EAAE,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,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,EAAAD,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAG,IAAE,KAAG,KAAG,GAAE;AAAC,UAAI,IAAE,EAAE,WAAW,GAAEC,GAAE,QAAO,EAAE,eAAeA,EAAC,CAAC,EAAE,KAAK,GAAG;AAAE,YAAM,IAAI,MAAM,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;AAAA,IAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,MAAIA,IAAE,SAAO,IAAEC,KAAED,IAAE,IAAE,CAAC,EAAE;AAAO,QAAG,EAAE,WAAS;AAAE,YAAM,IAAI,MAAM,gCAAgC;AAAE,QAAG,EAAE,CAAC,IAAE;AAAE,YAAM,IAAI,MAAM,oCAAoC;AAAE,QAAG,EAAE,EAAE,SAAO,CAAC,IAAE;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAG,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,cAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,GAAE,IAAEA,GAAE,SAAO,IAAE,EAAE,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,MAAI,CAAC,CAAC,CAAC;AAAE,KAAG,GAAE,CAAC;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,GAAE,SAAO,GAAE,EAAE,GAAE;AAAC,SAAGA,GAAE,CAAC;AAAE,QAAI,IAAEA,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,QAAE,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,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE,IAAEC,GAAE,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;AAAE,YAAE,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,MAAIC,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,EAAE,QAAO,IAAE,EAAE,kBAAkB,SAAQ,CAAC;AAAE,IAAAC,GAAE,KAAK,CAAC,GAAED,IAAE,CAAC,EAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,CAAC;AAAA,EAAC;AAAC,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAEC,EAAC;AAAE,SAAK,EAAE,SAAOA;AAAG,MAAE,KAAK,CAAC;AAAE,WAAQ,IAAEA,IAAE,IAAED,IAAE,QAAO;AAAI,MAAEC,KAAE,CAAC,KAAGD,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,KAAK;AAAE,aAAQ,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE,GAAE;AAAC,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE;AAAA,IAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC,GAAE,IAAED,IAAE,QAAO,IAAE,MAAI,IAAE,IAAE,IAAEC,GAAE,CAAC;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAGD,IAAE,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAGC,GAAE,CAAC,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAEA,GAAE,CAAC,EAAE,CAAC,IAAE;AAAE,MAAG,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,6BAA6B;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,WAAU,EAAC,IAAE,GAAG,GAAE,GAAED,KAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAW,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAGA,GAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAEA,GAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,CAAC;AAAE,OAAG,EAAE,KAAKA,GAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAG,EAAE,CAAC,MAAI,EAAE,IAAE,CAAC;AAAE,YAAM,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;AAAE,YAAM,IAAI,MAAM,qBAAqB;AAAE,QAAI;AAAE,QAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE;AAAE,UAAE;AAAA,aAAU,IAAE,KAAK,KAAK,KAAK,KAAK,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE;AAAG,YAAM,IAAI,MAAM,yCAAyC,EAAE,EAAE;AAAE,MAAE,IAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,GAAG,IAAE,GAAE,KAAG;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE;AAAT,IAA0B,KAAG,MAAMA,IAAC;AAAA,EAAC,YAAYC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,QAAMA,IAAE,KAAK,aAAW,GAAE,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+BA,IAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,kBAAkBA,KAAE,CAAC,IAAE,KAAK,kBAAkBA,EAAC;AAAA,EAAC;AAAA,EAAC,sBAAsBA,IAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,mBAAmBA,KAAE,CAAC,IAAE,KAAK,mBAAmBA,EAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAI,IAAE,KAAK,sBAAsBA,KAAE,CAAC;AAAE,YAAO,KAAK,+BAA+BA,KAAE,CAAC,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAOD,IAAE,sBAAsB,CAAC;AAAA,MAAE,KAAK,GAAG;AAAW,eAAOA,IAAE,oBAAoB,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,gCAAgC,GAAG,KAAK,+BAA+BC,KAAE,CAAC,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,oBAAoBA,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAO,QAAG,MAAI,KAAG,MAAI;AAAE,aAAO;AAAE,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,IAAE,CAAC,IAAEA,GAAE,CAAC;AAAE,UAAE,MAAI,IAAE;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsBA,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAO,QAAG,MAAI;AAAE,aAAO;AAAE,QAAI,IAAE,GAAE,IAAEA,GAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,YAAI,MAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,GAAE,IAAE;AAAA,IAAE;AAAC,WAAO,KAAK,IAAI,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsBA,IAAE,GAAE,IAAE,MAAG;AAAC,QAAG,EAAE,WAAS,GAAE;AAAC,UAAGA,GAAE,CAAC,MAAI;AAAG,eAAM,CAAC;AAAE,YAAM,IAAI,MAAM,gFAAgF;AAAA,IAAC;AAAC,WAAO,GAAGA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,oBAAoBA,IAAE;AAAC,QAAI,IAAE,KAAK,aAAY,IAAE,KAAK;AAAkB,MAAE,0BAA0B,GAAE,CAAC;AAAE,QAAI,IAAE,KAAK,sBAAsB,KAAK,OAAM,KAAK,UAAU,GAAE,IAAE,EAAE,kCAAkC,KAAK,YAAW,GAAE,CAAC;AAAE,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAEA;AAAG,aAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE;AAAE,QAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE,KAAK,YAAY,CAAC;AAAG,WAAO;AAAA,EAAC;AAAA,EAAC,gCAAgCA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAIA,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE,KAAG;AAAE,QAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,EAAE;AAAE,QAAE,KAAK,EAAE;AAAE,WAAO,EAAE,OAAO,EAAE,WAASA,IAAE,MAAI,yDAAyD,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6BA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,QAAO,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,IAAE,CAAC,IAAEA,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAI,OAAK,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,KAAK,CAAC,GAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,UAAE,KAAK,EAAE;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,EAAE,WAASA,GAAE,IAAE,CAAC;AAAE,YAAM,IAAI,MAAM,yBAAyB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,+BAA+BA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,QAAO,IAAE,CAAC;AAAE,QAAG,MAAI;AAAE,aAAM,CAAC;AAAE,QAAI,IAAE,GAAE,IAAEA,GAAE,CAAC;AAAE,QAAG,KAAG,EAAE;AAAO,YAAM,IAAI,MAAM,yBAAyB,CAAC,4BAA4B,EAAE,MAAM,EAAE;AAAE,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,CAAC;AAAE,UAAG,MAAI;AAAE,aAAG,MAAI,EAAE,GAAE,IAAE,IAAE,KAAG,IAAE,IAAE;AAAA,WAAQ;AAAC,YAAG,IAAE,GAAE,IAAE,GAAE,KAAG,EAAE;AAAO,gBAAM,IAAI,MAAM,sBAAsB,CAAC,2BAA2B,EAAE,MAAM,EAAE;AAAE,YAAE,EAAE,CAAC;AAAA,MAAC;AAAC,QAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,WAASA,GAAE;AAAO,YAAM,IAAI,MAAM,kBAAkB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,qBAAqBA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,sBAAsBA,EAAC,GAAE,IAAE,KAAK,+BAA+BA,EAAC;AAAE,YAAO,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAO,KAAK,+BAA+B,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,KAAK,GAAG;AAAW,YAAG,EAAE,SAAO,IAAE,EAAE;AAAO,gBAAM,IAAI,MAAM,mDAAmD,EAAE,SAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AAAE,eAAO,KAAK,6BAA6B,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,+BAA+B,GAAG,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAIA,KAAE,KAAK,mBAAmB,CAAC;AAAE,QAAG,KAAK,kBAAkB,WAAS;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,QAAI,IAAE,KAAK,kBAAkB,CAAC;AAAE,YAAO,GAAE;AAAA,MAAC,KAAK,GAAG;AAAe,eAAOA,GAAE,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,GAAG,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,mBAAmB,CAAC,EAAE,UAAQ;AAAE,YAAM,IAAI,MAAM,sEAAsE;AAAE,QAAI,IAAE,KAAK,sBAAsB,GAAE,IAAE,KAAK,oBAAoB,CAAC,GAAE,IAAE,IAAI,MAAM,KAAK,aAAW,CAAC;AAAE,MAAE,EAAE,SAAO,CAAC,IAAE;AAAE,aAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,EAAE;AAAE,QAAE,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,gCAAgC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE;AAAE,YAAE,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,UAAUA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,WAAS;AAAE;AAAO,QAAI,IAAE,KAAK,QAAO,IAAE,GAAE,IAAE,EAAE,MAAM;AAAE,QAAE,EAAE,MAAMA,KAAE,CAAC;AAAE,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,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,IAAE,EAAE,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;AAAE,YAAG,KAAK,aAAa,WAAS;AAAE,YAAE,SAAS,IAAE,GAAE,IAAE,CAAC,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,GAAE,IAAE;AAAA;AAAO,iBAAK,IAAE,KAAG;AAAC,gBAAI,IAAE,EAAE,MAAM,IAAE,CAAC;AAAE,eAAG,GAAE,GAAE,CAAC,GAAE,EAAE;AAAA,UAAC;AAAC,UAAE,KAAG,IAAE,IAAE,GAAE,IAAE,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,IAAAD,IAAE,CAAC,IAAEC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,KAAKD,KAAE;AAAC,QAAG,IAAE,GAAE;AAAC,UAAG,CAACC;AAAE,cAAM,IAAI,MAAM,aAAa,CAAC,eAAe;AAAE,UAAG,IAAE;AAAG,cAAM,IAAI,MAAM,aAAa,CAAC,gBAAgB;AAAE,UAAE;AAAA,IAAE;AAAC,MAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAED,QAAIC,IAAE,IAAED,MAAEC,MAAG,IAAE,GAAE,IAAEA,KAAED,OAAG,IAAE;AAAE,MAAG,KAAG,KAAG;AAAE,WAAO,EAAE,oBAAoB,GAAE,CAAC;AAAE,MAAI,IAAE,KAAK,IAAI,KAAK,MAAMC,KAAED,OAAG,CAAC,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,EAAAC,KAAED,OAAG,MAAI,MAAI,IAAE,KAAI,EAAE,CAAC,IAAEA;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAA,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAED,IAAE,QAAO,IAAEC,GAAE;AAAO,MAAG,MAAI;AAAE,WAAO,GAAG,GAAEA,GAAE,KAAK;AAAE,MAAI,IAAE,aAAa,KAAG,IAAE,GAAG,GAAEA,GAAE,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;AAAE,YAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,EAAE,OAAO,IAAE,IAAE,CAAC,KAAG,EAAE,IAAE,IAAE,CAAC,IAAE,EAAE,OAAO,IAAE,IAAE,CAAC,IAAEA,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,iBAAiB,GAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkBA,IAAE,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,GAAG,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAEC,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAEA,GAAE,CAAC;AAAE,MAAG,MAAI,GAAE;AAAC,QAAG,MAAI;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,kBAAkB,GAAE,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;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,QAAG,KAAG;AAAE,YAAM,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;AAAE,QAAE,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,kBAAkB,GAAE,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,IAAEA,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;AAAE,UAAE,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;AAAE,UAAG,EAAE,CAAC,MAAI,GAAE;AAAC,YAAI,IAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,IAAE,IAAE,CAAC,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,YAAE,IAAE,IAAE,CAAC,IAAE;AAAE,UAAE,CAAC,IAAE;AAAA,MAAC;AAAC,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,GAAE,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;AAAG,cAAM,IAAI,MAAM,EAAE,yDAAyD,GAAE,CAAC,CAAC;AAAE,UAAE,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,OAAK;AAAC,UAAG,IAAE;AAAE,cAAM,IAAI,MAAM,EAAE,8CAA8C,GAAE,CAAC,CAAC;AAAE,WAAG,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAG,MAAI,IAAG;AAAC,QAAG,KAAG;AAAE,YAAM,IAAI,MAAM,EAAE,qDAAqD,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC;AAAE,QAAG,IAAE,MAAI;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,UAAM,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;AAAE,QAAE,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;AAAE,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkB,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,WAAGD,IAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,CAACA,GAAE,CAAC,GAAED,IAAE,SAAOC,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,IAAE,IAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAEA,GAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAO,IAAE,KAAG,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,MAAG,KAAG;AAAE,UAAM,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;AAAE,cAAM,IAAI,MAAM,EAAE,6DAA6D,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG;AAAE,YAAM,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;AAAE,cAAM,IAAI,MAAM,EAAE,uDAAuD,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,IAAE,IAAE,CAAC,KAAGD,IAAE,IAAE,IAAE,CAAC;AAAA,IAAC;AAAC,QAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,IAAE,IAAE,CAAC,KAAG,IAAE;AAAE,QAAG,IAAE,GAAE,EAAE,GAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE;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,KAAEC,OAAI;AAAC,MAAI,IAAED,MAAEC;AAAE,SAAO,IAAE;AAAC,CAAC;AAAvC,IAAyC,KAAG,GAAG,IAAG,EAAE;AAApD,IAAsD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAI;AAAC,MAAG,EAAC,SAAQ,GAAE,eAAc,GAAE,SAAQ,EAAC,IAAEA;AAAE,SAAOD,IAAE,QAAQ,IAAI,OAAO,GAAE,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,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,GAAE,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;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAE,IAAIA,GAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,YAAU,EAAE,aAAaA,EAAC,GAAE,KAAK,cAAY,GAAE,KAAK,UAAQ,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,GAAE,KAAK,gBAAc;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,WAAO,KAAK,IAAI,KAAK,WAAS,IAAEA,KAAE,IAAE,KAAK,UAASA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,YAAY,CAAC;AAAE,WAAO,KAAK,IAAI,GAAEA,KAAE,IAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE,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,IAAE,KAAG,IAAE,IAAE,IAAE,IAAE,IAAG,IAAE;AAAE,WAAG,IAAE,KAAK,QAAQ;AAAO,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAGA,GAAE,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;AAAE,UAAE,KAAK,OAAO,GAAE,EAAE,KAAK,SAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,UAAEA,GAAE,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,SAAS;AAAE,UAAG,IAAE,GAAE;AAAC,UAAEA,GAAE,IAAE,IAAE,CAAC,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,YAAE,KAAK,SAAS,GAAE,EAAE,KAAK,QAAQ;AAAA,MAAC,OAAK;AAAC,iBAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,YAAE,KAAK,QAAQ,GAAE,EAAE,KAAK,SAAS;AAAE,UAAE,KAAK,QAAQ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQA,IAAE,GAAE;AAAC,QAAI,IAAEA,GAAE,QAAO,IAAE,EAAE;AAAO,QAAG,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,MAAI;AAAE,cAAM,IAAI,MAAM,oCAAoC,CAAC,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC,KAAG;AAAE,YAAG,IAAE,KAAG,EAAE,CAAC,KAAG,GAAE,CAAC;AAAE,gBAAM,IAAI,MAAM,uBAAuB,EAAE,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG;AAAE,YAAE,EAAE,CAAC;AAAA,MAAC;AAAC,UAAG,MAAI;AAAE,cAAM,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;AAAE,UAAE,CAAC,IAAE;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC,IAAE,EAAE,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,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAG,KAAK,YAAY,QAAQ,OAAG;AAAC,YAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,aAAa,GAAE,CAAC;AAAE,aAAK,aAAaA,IAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG;AAAA,MAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,EAAE,CAAC,GAAE;AAAC,YAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,YAAG,MAAI;AAAE;AAAS,YAAI,IAAE,IAAE,IAAE,KAAK,UAAS,IAAE;AAAE,aAAK,aAAaA,IAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAACD,IAAE;AAAO;AAAO,MAAGC,GAAE,WAAS,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,QAAE,KAAKA,IAAE,SAAS,GAAE,IAAE,CAAC,CAAC;AAAE;AAAA,EAAM;AAAC,MAAGC,GAAE,WAAS,GAAE;AAAC,QAAI,IAAEA,GAAE,CAAC,GAAE,IAAED,IAAE,QAAQ,CAAC;AAAE,WAAK,MAAI,MAAI;AAAC,UAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,OAAC,CAAC,KAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAEA,MAAEA,IAAE,SAAS,IAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,CAAC;AAAA,IAAC;AAAC,KAAC,CAAC,KAAGA,IAAE,WAAS,MAAI,EAAE,KAAKA,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE;AAAI,QAAG,MAAIA,IAAE,UAAQC,GAAE,QAAQD,IAAE,CAAC,CAAC,MAAI,IAAG;AAAC,UAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,OAAC,CAAC,KAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAE,IAAE,IAAE;AAAA,IAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;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,GAAEC,IAAE,GAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE;AAAE,QAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,MAAE,CAAC,IAAE,EAAE,cAAcA,IAAE,CAAC,CAAC,EAAE,OAAOC,EAAC,EAAE,mBAAmB;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAEC,EAAC;AAApB,IAAsB,KAAG,GAAG,CAACD,KAAEC,IAAE,GAAE,OAAK,EAAC,MAAKD,MAAE,GAAE,MAAKC,KAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,IAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAEA,IAAE,MAAM,CAAC,IAAEC,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,GAAED,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;AAAI,QAAE,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,KAAEC,OAAI;AAAC,MAAI,IAAEA,GAAE,QAAMD,IAAE;AAAM,SAAO,MAAI,IAAEA,IAAE,QAAMC,GAAE,QAAM;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,GAAE,IAAED,IAAE,SAAO,GAAE;AAAC,SAAK,IAAE,KAAG;AAAC,QAAG,IAAE,IAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,GAAE,IAAEC,KAAE,IAAE,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,IAAI,GAAE,KAAK,MAAMA,KAAE,IAAE,IAAE,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,KAAK,MAAMA,MAAG,IAAE,KAAG,IAAE,IAAE,CAAC,CAAC;AAAE,SAAGD,KAAEC,IAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAED,IAAEC,EAAC,GAAE,IAAE,GAAE,IAAE;AAAE,SAAI,EAAE,KAAKD,KAAE,GAAEC,EAAC,GAAE,GAAGD,IAAE,CAAC,GAAE,CAAC,IAAE,KAAG,EAAE,KAAKA,KAAE,GAAE,CAAC,GAAE,IAAE,KAAG;AAAC,WAAI,EAAE,KAAKA,KAAE,GAAE,CAAC,GAAE,KAAI,KAAI,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAG,YAAE,IAAE;AAAE,aAAK,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAG,YAAE,IAAE;AAAA,IAAC;AAAC,OAAGA,IAAE,CAAC,GAAE,CAAC,MAAI,IAAE,EAAE,KAAKA,KAAE,GAAE,CAAC,KAAG,IAAE,IAAE,GAAE,EAAE,KAAKA,KAAE,GAAE,CAAC,IAAG,KAAGC,OAAI,IAAE,IAAE,IAAGA,MAAG,MAAI,IAAE,IAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAEA,GAAE,SAAO,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAACD,IAAE,SAAO,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,SAAQ,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAEA,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;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE;AAAA,EAAK;AAAC,MAAI,IAAEC,GAAE,MAAM;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAAC,GAAG,GAAE,GAAE,CAAC,GAAE,GAAG,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAeA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,CAAC,KAAG,EAAE,CAAC;AAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,KAAG,EAAE,CAAC;AAAE,MAAI,IAAE,oBAAI,OAAI,IAAE,IAAI,WAAW,EAAE,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,IAAE,EAAE,CAAC,GAAE,KAAI;AAAC,QAAI;AAAE,QAAG;AAAE,UAAEA,IAAE,CAAC,EAAE,SAAS;AAAA,SAAM;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,iBAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,YAAE,KAAK,EAAE,IAAI,GAAE,GAAE,CAAC,CAAC;AAAE,UAAE,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC;AAAE,QAAG,KAAG;AAAK,QAAE,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;AAAI,eAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,UAAE,IAAI,EAAE,IAAI,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,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,CAAAA,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,uBAAuB,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAO,EAAE,eAAe,EAAE,OAAM,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAE,IAAEC,KAAED,MAAEA,GAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAEC;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,SAAS;AAAE,SAAO,EAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAG,MAAI;AAAS,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEA,GAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAG,MAAI;AAAO,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAG,MAAI;AAAM,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,IAAE,OAAM,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAG,MAAI;AAAY,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQD,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAG,MAAI;AAAU,WAAO,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,QAAM,IAAI,MAAM,cAAc,CAAC,gDAAgD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,GAAE,EAAE,OAAO,EAAE,MAAM;AAAE,MAAI,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,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,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,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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,KAAG,EAAE;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;AAAK,qBAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,kBAAI,KAAG;AAAE,uBAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,oBAAI,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,CAAC,GAAE,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAC,iBAAG,KAAG,MAAI,KAAG,IAAE,GAAG,KAAG;AAAA,YAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,eAAe,GAAE,GAAG,OAAM,GAAG,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,SAAQ,EAAC,CAAC,GAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,IAAG,MAAI,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE;AAAG,WAAQ,KAAK;AAAE,MAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,IAAEC;AAAE,IAAEA,IAAE,MAAM;AAAE,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,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;AAAI,QAAE,CAAC,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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,QAAM,EAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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,QAAM,EAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,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,KAAEC,OAAI,KAAK,MAAMD,KAAEC,EAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,EAAE;AAA7C,IAA+C,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,SAAS,GAAGA,KAAEC,IAAE,GAAE,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,UAAS,CAAC,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;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,oBAAI,SAAO,KAAG,IAAE,IAAE,KAAG,MAAI,UAAQ,KAAG,IAAG;AAAA,YAAI;AAAC,gBAAG,MAAM,CAAC;AAAE;AAAA,UAAK;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,CAAC,IAAE,MAAI,QAAM,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,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,GAAGA,IAAE,GAAED,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,IAAE,IAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,IAAE,IAAE,GAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,kBAAE,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,YAAE;AAAA,UAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,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,UAAS,CAAC,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;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,KAAG,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,KAAG,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE,GAAE,KAAG;AAAG,mBAAK,KAAG;AAAG,oBAAI;AAAE,gBAAI,KAAG,KAAK,IAAI,EAAE,SAAQ,IAAE,EAAE,GAAE,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,uBAAQ,KAAG,GAAE,KAAG,IAAG,MAAI,GAAE;AAAC,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC;AAAE,yBAAQ,KAAG,IAAG,KAAG,IAAG,MAAI,GAAE;AAAC,sBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,sBAAG,MAAI,SAAO,KAAG,KAAG,KAAG,KAAG,MAAI,UAAQ,MAAI,IAAG,OAAM,MAAM,EAAE;AAAE;AAAA,gBAAK;AAAC,oBAAG,MAAM,EAAE;AAAE;AAAA,cAAK;AAAC,kBAAG,MAAM,EAAE;AAAE;AAAA,YAAK;AAAC,gBAAI,KAAG,KAAG;AAAE,cAAE,EAAE,IAAE,MAAI,QAAM,KAAG,KAAK,IAAI,IAAG,CAAC,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGA,GAAE,UAAS,OAAO,GAAE,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,QAAQ,OAAM,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ;AAAK,WAAQ,IAAE,GAAE,IAAEA,GAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAEA,GAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAIA,GAAE,SAAQ,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAEA,GAAE,WAAU,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,IAAE,KAAK,IAAIA,GAAE,UAAS,IAAE,CAAC;AAAE,mBAAQ,IAAE,GAAE,IAAEA,GAAE,UAAS,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAK,IAAE;AAAG,mBAAG;AAAE,gBAAI,IAAE,KAAK,IAAIA,GAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,IAAE,IAAE;AAAE,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,IAAE,IAAE;AAAE,yBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,sBAAI,IAAE,IAAE,GAAE,KAAGD,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,wBAAI,MAAI,IAAE,IAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,gBAAE;AAAA,cAAC;AAAA,YAAC;AAAC,cAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;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;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAO,EAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,MAAI,IAAE,MAAI;AAAE,kBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAI,yBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,sBAAI,MAAI,IAAE,MAAI;AAAE,sBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI;AAAI,6BAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,0BAAI,MAAI,IAAE,MAAI;AAAE,0BAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAG;AAAS,0BAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,4BAAI;AAAA,oBAAE;AAAA,gBAAC;AAAA,YAAC;AAAC,cAAE,IAAI,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI;AAAG,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI;AAAE;AAAS,oBAAI,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,qBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,IAAI,IAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAEC;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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,SAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAE,IAAE,IAAE,EAAE,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;AAAE,MAAE,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,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAO,EAAE,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,KAAEC,OAAI;AAAC,MAAI,IAAEA;AAAE,SAAOD,MAAE,EAAE,eAAa,EAAE,eAAaA,MAAE,EAAE,eAAa,EAAE,eAAaA;AAAC,CAAC;AAAtG,IAAwG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAA,QAAG;AAAC,MAAG,EAAC,GAAEC,GAAC,IAAED,IAAE,QAAO,IAAEA,IAAE,SAAQ,IAAE,IAAI,aAAa,EAAE,cAAcC,GAAE,KAAK,CAAC,GAAE,IAAE,EAAE,KAAK,IAAIA,GAAE,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;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,SAAO,EAAE,WAAW,GAAEA,GAAE,OAAM,SAAS;AAAC;AAA5U,IAA8U,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAEC,GAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgBA,GAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO,EAAE,eAAe,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,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,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAS;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;AAAQ;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;AAAG,kBAAE,KAAG,KAAG,CAAC,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,EAAE;AAAA,YAAW;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,aAAY,EAAE,GAAE;AAAC,cAAI,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,kBAAI,IAAE,IAAE,IAAE,IAAE;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,oBAAE,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,cAAC;AAAA,YAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC,GAAE,KAAG;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE;AAAG,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,IAAE,IAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,EAAE,KAAG,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC;AAAC,cAAI,KAAG,IAAE,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG;AAAG,YAAE,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAQ;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;AAAS;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;AAAQ;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;AAAG,sBAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,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;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,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;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG;AAAG,uBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG;AAAG,yBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,sBAAI,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,2BAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,wBAAI,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,0BAAI,KAAG;AAAA,kBAAE;AAAA,gBAAC;AAAA,cAAC;AAAA,YAAC;AAAC,cAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAE;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;AAAI,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAI,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,cAAE,OAAO,CAAC,IAAE;AAAA,UAAC;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;AAAM,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,cAAG,IAAE,KAAG,IAAE,IAAE,GAAE;AAAC,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,kBAAI,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAE,OAAO,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAQ;AAAC,cAAI,IAAE,KAAK,MAAM,CAAC,GAAE,KAAG,KAAK,MAAM,CAAC;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,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,cAAE,OAAO,EAAE,IAAE,EAAE,EAAE;AAAA,UAAC;AAAA,QAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO;AAAE,UAAM,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,IAAE,EAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,UAAG,MAAI;AAAE,UAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,MAAI,IAAE,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO;AAAE,UAAM,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,IAAE,EAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,UAAG,MAAI;AAAE,UAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,MAAI,IAAE,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,KAAG;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE;AAAI,YAAE,GAAG,IAAE,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAS;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;AAAQ;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;AAAG,kBAAE,KAAG,EAAE,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,GAAE,MAAI;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,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;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,IAAE;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,kBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,mBAAG,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC;AAAA,YAAC;AAAA,UAAC;AAAC,UAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,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;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE;AAAG,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,uBAAQ,KAAG,GAAE,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC;AAAC,YAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK;AAAE,SAAO,EAAE,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,SAAQC,IAAE,OAAM,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAEC,IAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,KAAG,OAAO;AAAiB,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,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,uBAAG,OAAK,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,cAAI,KAAG,EAAE,WAAW,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE,EAAE,eAAe,CAAC,CAAC;AAAE,YAAE,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;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,SAAQC,IAAE,OAAM,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAEC,IAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,OAAO,kBAAiB,IAAE,GAAE,KAAG;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,uBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;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,SAAQC,IAAE,OAAM,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAEC,IAAE,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;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,OAAO,kBAAiB,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,uBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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;AAAK,UAAM,IAAI,MAAM,gBAAgB,EAAE,WAAW,uCAAuC;AAAE,MAAI,IAAE,EAAE,WAAW,IAAG,KAAG,OAAK,SAAO,EAAE,sBAAoB,CAAC,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,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,IAAE,EAAE,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;AAAE,gBAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAAS,EAAE,UAAQ,YAAU,IAAE,KAAG,IAAE;AAAK,cAAM,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI;AAAE,IAAE,UAAQ,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,QAAO,EAAC,CAAC,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,SAAQ,GAAE,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,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAE,WAAG,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,8BAA8B,CAAC,GAAE,KAAG,QAAM,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAG,EAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAEC;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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,SAAO,EAAE,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,MAAIC,KAAE,KAAK,KAAKD,GAAC,GAAE,IAAE,KAAK,IAAIA,GAAC,GAAE,IAAE,KAAG,IAAE,KAAG;AAAG,SAAOC,MAAG,QAAM,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,KAAK,IAAI,CAAC,IAAE,CAAC;AAAE,CAAC;AAAnM,IAAqM,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAID,MAAEC,EAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,KAAK,IAAIA,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAG,GAAEC,IAAE,CAAC,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,MAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAI,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,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,GAAE,IAAE,EAAE,KAAK,IAAIA,IAAE,MAAM,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE;AAAO,MAAG,GAAG,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAEC,IAAE,CAAC,GAAE,IAAE,CAACD,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC;AAAE,QAAGC,IAAE;AAAC,UAAI,IAAE,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,aAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,GAAEA,EAAC;AAAE,WAAO,EAAE,uBAAuB,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,UAAOA,MAAEA,MAAE,OAAK;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAG,MAAI;AAAE,WAAM,EAAC,MAAKD,KAAE,MAAKC,GAAC;AAAE,MAAI,IAAE,EAAE,uBAAuBD,KAAEC,EAAC,GAAE,IAAE,IAAE,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,UAAU,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,KAAI;AAAC,QAAI,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,KAAI;AAAC,UAAI,IAAE,EAAE,SAAS,IAAE,GAAEA,IAAE,CAAC,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,UAAI,KAAGC,IAAE,KAAGA,KAAG,EAAE,mBAAmB,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,OAAG,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC,GAAEC,GAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,EAAAD,IAAE,KAAKC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,IAAE,GAAE,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,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,IAAC;AAAM,UAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,IAAC;AAAM,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,UAAU;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,MAAG,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOC,GAAE,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,KAAEC,OAAID,OAAGC,EAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAGA,MAAE,IAAE,GAAE,MAAM;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAEC,OAAID,OAAGC,EAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,EAAE,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,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAI,WAAG,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,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,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;AAAI,QAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;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;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAO,EAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,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,IAAE,EAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,MAAI,IAAE,KAAG;AAAE,kBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAI,yBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,sBAAI,MAAI,IAAE,MAAI;AAAE,sBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI;AAAI,6BAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,0BAAI,MAAI,IAAE,MAAI;AAAE,0BAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAG;AAAS,0BAAI,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,0BAAG,OAAK;AAAE;AAAS,0BAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,2BAAG,KAAG;AAAA,oBAAE;AAAA,gBAAC;AAAA,YAAC;AAAC,cAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI;AAAG,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI;AAAE;AAAS,oBAAI,KAAG,IAAE,IAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,IAAE,GAAE,KAAG,OAAK,KAAG,IAAE;AAAE,oBAAG,OAAK;AAAE;AAAS,oBAAI,KAAG,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,qBAAG,KAAG;AAAA,cAAE;AAAA,UAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAC,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAeA,EAAC,GAAE,IAAE,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,KAAK,GAAE,IAAE,GAAGD,KAAEC,IAAE,GAAE,GAAE,MAAG,CAAC;AAAE,SAAM,CAAC,EAAE,QAAO,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAEC,IAAE,IAAE;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,eAAe,CAAC,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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,QAAM,EAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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;AAAI,QAAE,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,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,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAI;AAAC,MAAI,IAAED,MAAEC;AAAE,SAAOD,MAAE,KAAGC,KAAE,KAAGD,OAAG,KAAGC,MAAG,IAAE,KAAG,IAAEA,MAAGA;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE;AAAE,MAAG,MAAI,OAAK,IAAE,IAAE,IAAG,MAAI,IAAE;AAAE,UAAM,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,SAAQ,GAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,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;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,aAAa;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,GAAE,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,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;AAAE,QAAE,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;AAAI,YAAG,IAAE,EAAE,CAAC,GAAE;AAAC,YAAE,IAAE,CAAC,IAAE;AAAE;AAAA,QAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,KAAG,EAAE,8BAA8B,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE;AAAE,IAAE,GAAE,mBAAmB;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE;AAAE,IAAE,GAAE,yBAAyB;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE;AAAE,IAAE,GAAE,4BAA4B;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAEC,IAAE,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,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,CAAC,KAAG,KAAG,EAAE,CAAC,IAAE,MAAI,EAAE,IAAE,IAAE,EAAE,CAAC,CAAC,IAAE;AAAG,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,SAAQ,GAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,SAAQ,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,GAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAMA,GAAE,CAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,CAAC,EAAE,OAAM,IAAEA,GAAE,CAAC,EAAE;AAAM,EAAAA,GAAE,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,IAAEA,GAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,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,IAAI,KAAG,GAAG,CAACD,KAAEC,OAAI,KAAK,IAAID,KAAEC,EAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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,OAAG,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAEC,IAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,IAAI,OAAG,EAAE,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,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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;AAAI,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,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI;AAAE,YAAE,IAAE,KAAG,IAAE,OAAI,MAAG,IAAE,IAAE;AAAE,YAAI,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,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,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,YAAE,GAAG,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,SAAO,EAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAASE,IAAGH,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,SAAO,EAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAWE,IAAE;AAAE,SAAS,GAAGH,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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;AAAE;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;AAAG,uBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,oBAAI,KAAG,KAAG;AAAE,oBAAG,KAAG,KAAG,MAAI;AAAE;AAAS,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,EAAE,IAAE,KAAK,MAAM,EAAE,CAAC;AAAE,sBAAI,OAAK,KAAG,EAAE,KAAG,CAAC;AAAA,cAAE;AAAA,UAAC;AAAC,YAAE,IAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,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,SAAO,EAAE,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,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAEC,IAAE,IAAE,GAAE,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,MAAIC,KAAE,KAAK,MAAMD,GAAC;AAAE,SAAOA,MAAEC,KAAE,MAAG,KAAK,MAAMD,GAAC,IAAEA,MAAEC,KAAE,MAAG,KAAK,KAAKD,GAAC,IAAEC,KAAE,MAAI,IAAEA,KAAEA,KAAE;AAAC,CAAC;AAAnG,IAAqG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAK,IAAE;AAAG,QAAE,KAAK,OAAO,IAAE,KAAG,CAAC,GAAEA,IAAE,CAAC,IAAEC,KAAE,IAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAK,IAAE;AAAG,QAAE,KAAK,OAAO,IAAE,KAAG,CAAC,GAAEA,IAAE,CAAC,KAAGC,KAAE,IAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQ,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAE,IAAG,IAAE,KAAG,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,IAAE,CAAC,IAAE,MAAI,SAAO,GAAG,GAAEC,GAAE,IAAE,CAAC,CAAC,IAAE,GAAG,GAAEA,GAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAEC;AAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,MAAI,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC;AAAE,SAAO,EAAE,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,MAAIC,KAAED,MAAE,CAAC,IAAG,IAAEA,MAAE,IAAG,IAAE,KAAK,IAAIA,GAAC,GAAE;AAAE,SAAO,IAAE,IAAE,IAAEC,KAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UAChjxG,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,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,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACnjB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,MAAM,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,YAC9mB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,YACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACvhB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE;AAAE,UAAO,EAAE,OAAM;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAa,EAAE,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,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQC,GAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAEC;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,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,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAACD,KAAEC,OAAI;AAAC,MAAI,IAAEA;AAAE,SAAO,MAAMD,GAAC,IAAE,MAAIA,MAAE,IAAE,IAAE,EAAE;AAAK,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,QAAE,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,8BAA8B,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAEC,IAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAE,EAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAAC,EAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,EAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,OAAG,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,GAAG,EAAE,WAAW,CAAC,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAE,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAEC,IAAE,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,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;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,GAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE;AAAE,cAAG,MAAI;AAAE;AAAS,cAAI,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,kBAAO,GAAE;AAAA,YAAC,KAAI;AAAU,kBAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,YAAM,KAAI;AAAW,kBAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,YAAM;AAAQ,oBAAM,IAAI,MAAM,+DAA+D,CAAC,EAAE;AAAA,UAAC;AAAC,cAAI,KAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,EAAE,IAAE;AAAA,QAAC;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,KAAEC,IAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAI;AAAU,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAI;AAAO,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAI;AAAU,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAI;AAAA,IAAW;AAAQ,aAAO,GAAGD,KAAEC,EAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED;AAAE,MAAG,IAAE;AAAE,QAAGC,MAAG;AAAE,UAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAEA;AAAE,UAAE,MAAI,IAAE,IAAE,KAAK,MAAM,CAAC,IAAE,CAAC,IAAE,IAAG,IAAE,IAAE,CAACA,KAAE,IAAE,IAAE,CAAC,IAAE;AAAA,IAAC;AAAA,WAAS,IAAEA,KAAE;AAAE,QAAGA,MAAG;AAAE,UAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAEA;AAAE,WAAG,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,KAAGA,OAAI,IAAE,IAAE,IAAE;AAAA,IAAE;AAAC,SAAO,EAAE,MAAM,GAAE,GAAEA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED;AAAE,MAAG,IAAE;AAAE,QAAGC,MAAG;AAAE,UAAE;AAAA,SAAM;AAAC,UAAI,IAAEA,KAAE;AAAE,WAAGA,MAAG,KAAK,MAAM,CAAC,IAAE,CAAC,IAAE;AAAA,IAAE;AAAA,WAAS,IAAEA,KAAE;AAAE,QAAGA,MAAG;AAAE,UAAE;AAAA,SAAM;AAAC,UAAI,IAAEA,KAAE;AAAE,WAAGA,KAAE,KAAK,MAAM,IAAE,CAAC;AAAA,IAAC;AAAC,SAAO,EAAE,MAAM,GAAE,GAAEA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAO,EAAE,MAAM,GAAED,KAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,SAAO,KAAG,KAAG,IAAEA,MAAG,KAAG,KAAG,IAAE,IAAED,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,MAAM,CAAC;AAAE,SAAO,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,KAAG,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,UAAO,IAAE,KAAG,KAAG,IAAE,KAAG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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;AAAI,UAAI,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,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,eAAe,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,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;AAAG,KAAGA,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,KAAEC,IAAE;AAAC,KAAGD,GAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,EAAED,OAAK,OAAKC,MAAG,MAAK;AAAC,QAAI,IAAE,GAAGD,KAAEC,EAAC;AAAE,QAAG,MAAI;AAAK,SAAGD,GAAC,IAAE;AAAA;AAAO,aAAO,QAAQ,IAAI,2CAA0CA,GAAC,GAAE;AAAA,EAAI;AAAC,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,KAAG,QAAM,EAAE,cAAc,KAAG,OAAO,GAAGA,GAAC,GAAE,GAAGA,GAAC,MAAI,EAAE,QAAQ,EAAE,UAAU,GAAE,EAAE,QAAQ,EAAE,YAAY,GAAE,EAAE,QAAQ,EAAE,KAAK,GAAE,EAAE,QAAQ,EAAE,MAAM,GAAE,EAAE,QAAQ,EAAE,mBAAmB,GAAE,EAAE,QAAQ,EAAE,eAAe,GAAE,EAAE,OAAO,EAAE,YAAY,GAAE,EAAE,OAAO,EAAE,SAAS,GAAE,EAAE,SAAS,EAAE,IAAI,GAAE,GAAGA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,WAAW,KAAG,OAAO,mBAAiB,eAAaA,QAAI;AAAE,WAAO,IAAI,gBAAgB,KAAI,GAAG;AAAE,MAAG,OAAO,YAAU;AAAY,WAAO,SAAS,cAAc,QAAQ;AAAE,QAAM,IAAI,MAAM,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,QAAI,KAAGA,QAAI;AAAE,UAAM,IAAI,MAAM,wDAAwD;AAAE,MAAI,IAAEC,MAAG,OAAK,GAAGD,GAAC,IAAEC;AAAE,SAAO,EAAE,iBAAiB,oBAAmB,OAAG;AAAC,MAAE,eAAe,GAAE,OAAO,GAAGD,GAAC;AAAA,EAAC,GAAE,KAAE,GAAE,EAAE,EAAE,QAAQ,wBAAwB,MAAI,GAAG,+BAA6B,QAAIA,QAAI,IAAE,EAAE,WAAW,SAAQ,EAAE,KAAG,EAAE,WAAW,sBAAqB,EAAE,IAAE,EAAE,WAAW,UAAS,EAAE;AAAC;AAAC,IAAI;AAAA,CAAI,SAASA,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,KAAEC,IAAE;AAAC,SAAM,CAACA,IAAED,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAOD,MAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,EAAE,cAAcD,GAAC,GAAE,IAAE,KAAK,KAAKC,KAAE,CAAC;AAAE,SAAO,EAAE,oBAAoB,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,CAAC,KAAK,IAAI,GAAE,KAAK,KAAKA,KAAE,CAAC,CAAC,GAAE,KAAK,IAAI,GAAE,KAAK,KAAKD,MAAE,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGD,KAAEC,EAAC;AAAE,SAAO,IAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAG,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,EAAE,SAAQ,IAAE,EAAE,SAAQ,IAAE,EAAE,KAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,YAAW,IAAE,EAAE,OAAM,IAAE,EAAE,UAAQ,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAE,EAAE,MAAK,IAAEA,IAAE,MAAK,IAAE,GAAE,IAAE,GAAE,IAAEC,MAAG,OAAKA,GAAE,iBAAe,MAAK,IAAED,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,KAAEC,IAAE;AAAC,MAAI,IAAEA,GAAE;AAAE,SAAO,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGD,GAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAED,IAAE,SAAS;AAAE,MAAGC,OAAID,IAAE;AAAS,UAAM,IAAI,MAAM,kBAAgB,GAAGA,KAAEC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAe,KAAG;AAAM,SAAS,GAAGD,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,KAAEC,IAAE;AAAC,UAAOA,IAAE;AAAA,IAAC,KAAKD,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,sBAAsBC,EAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,aAAaC,EAAC,GAAE,gBAAcA,KAAE,kCAAkC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,aAAa,GAAE,sCAAsC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAa,GAAEC,EAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAc,CAAC,CAAC,GAAEA,IAAE,mBAAmB,GAAEA,IAAE,cAAc,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,iBAAiB,CAAC,CAAC,GAAE,IAAI,MAAM,kCAAkC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,eAAe,GAAE,wCAAwC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAa,GAAEC,EAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAc,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,qBAAqB;AAAE,WAAO;AAAE,MAAGA,IAAE,mBAAmB,GAAEA,IAAE,cAAc,MAAI;AAAG,UAAM,GAAGC,IAAED,IAAE,iBAAiB,CAAC,CAAC,GAAE,IAAI,MAAM,oCAAoC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG;AAA2B,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAG,KAAKA,EAAC;AAAE,MAAG,KAAG,MAAK;AAAC,YAAQ,IAAI,wCAAwCA,EAAC,EAAE,GAAE,QAAQ,IAAID,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE,CAAC,EAAE,CAAC,GAAE,IAAEA,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;AAAI,QAAE,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,IAAIC,GAAE,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,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAG,GAAGD,KAAE,MAAIA,IAAE,YAAYC,EAAC,CAAC,GAAE,CAAC,EAAE,EAAE,IAAI,qBAAqB,KAAGD,IAAE,oBAAoBC,IAAED,IAAE,WAAW,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,kBAAkBC,EAAC,CAAC,GAAE,IAAI,MAAM,6CAA6C;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAG,GAAGD,KAAE,MAAIA,IAAE,gBAAgBC,EAAC,CAAC,GAAED,IAAE,oBAAoBC,IAAED,IAAE,eAAe,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,kBAAkBC,EAAC,CAAC,GAAE,IAAI,MAAM,mCAAmC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAaC,IAAED,IAAE,WAAW,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqB,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqBC,IAAED,IAAE,WAAW,CAAC,GAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAE,EAAE,EAAE,UAAU,wBAAwB;AAAE,MAAGD,OAAG,KAAGC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAID,GAAC,IAAIC,EAAC;AAAI,UAAM,IAAI,MAAM,4BAA0B,IAAE,cAAc;AAAA,EAAC;AAAC,MAAGD,MAAE,KAAGC,KAAE,GAAE;AAAC,QAAI,IAAE,IAAID,GAAC,IAAIC,EAAC,KAAI,IAAE,IAAI,CAAC,IAAI,CAAC;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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,kBAAkBC,IAAE,CAAC;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,KAAEC,IAAE,GAAE;AAAC,KAAGD,KAAE,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAAS,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAWC,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,KAAGD,KAAEC,EAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAASC,EAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,mBAAmBC,IAAE,CAAC,GAAE,cAAY,IAAE,2BAA2B;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,SAAOD,IAAE,mBAAmBC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,KAAGD,KAAE,MAAI,GAAGA,KAAEC,IAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,UAAU,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,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,KAAEC,IAAE,GAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAWC,IAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAYC,EAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,MAAK,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAED,IAAE,uBAAuBA,IAAE,WAAW;AAAE,MAAGC,OAAID,IAAE;AAAqB,UAAM,IAAI,MAAM,gCAA8B,GAAGA,KAAEC,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,UAAOA,IAAE;AAAA,IAAC,KAAKD,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,iBAAiBC,EAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAIC,GAAE,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,mCAAiC,GAAE,IAAEC,KAAED,IAAE;AAAS,MAAG,IAAEA,IAAE,YAAU,IAAE,GAAE;AAAC,QAAI,IAAE,2BAA2B,CAAC;AAAI,UAAM,IAAI,MAAM,0BAA0B,CAAC,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,GAAE;AAAC,SAAO,EAAE,cAAcD,IAAE,MAAM,GAAEA,IAAE,SAAOC,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,WAAS;AAAE,UAAM,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,MAAIC,KAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAOD,IAAE,WAAS,KAAGA,IAAE,WAAS,KAAGA,IAAE,CAAC,MAAI,MAAIC,KAAE,CAAC,GAAGD,GAAC,GAAE,GAAG,GAAGA,GAAC,CAAC,IAAGC;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,OAAG;AAAC,MAAI,IAAE,EAAE,EAAE,UAAU,wBAAwB,GAAE,IAAE,EAAE,EAAE,UAAU,mCAAmC;AAAE,QAAI,IAAE,KAAG,EAAE,EAAE,QAAQ,0CAA0C,MAAI,IAAE,IAAE,IAAGA,OAAI,IAAE,IAAE,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,KAAG,IAAE,IAAE,CAAC,GAAE,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAG,KAAGA,IAAE,CAAC,KAAG,IAAE,IAAEA,MAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAG,KAAGA,IAAE,CAAC,KAAG,IAAE,IAAE,CAACA,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAG,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAG,IAAE,IAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAG,KAAGA,IAAE,CAAC,KAAG,IAAE,IAAE,CAACA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAG,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAG,MAAI,IAAE,CAACA,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,MAAIC,KAAE,IAAE,MAAI,KAAK,IAAI,GAAG,CAAC,IAAE;AAAE,MAAG,KAAG,QAAM;AAAE,QAAGA,IAAE;AAAC,UAAI,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAE,IAAE;AAAE,MAAAA,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,IAAC;AAAM,UAAE,EAAE,oBAAoB,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,MAAEA,IAAE,MAAM,EAAE,GAAEC,KAAEA,GAAE,MAAM,EAAE,GAAE,EAAE,YAAYD,KAAEC,EAAC,KAAG,CAACD,IAAE,UAAQ,CAACC,GAAE,UAAQD,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,KAAGC,GAAE,CAAC,MAAI,KAAGA,GAAE,CAAC,MAAI;AAAE,WAAM;AAAG,MAAGD,IAAE,WAASC,GAAE,QAAO;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,CAAC,GAAE,IAAEC,GAAEA,GAAE,SAAO,CAAC;AAAE,QAAG,MAAI,KAAG,GAAG,CAAC,KAAG,GAAG,CAAC,MAAID,IAAE,CAAC,MAAI,KAAGC,GAAE,CAAC,MAAI;AAAG,aAAM;AAAA,EAAE;AAAC,SAAOD,IAAE,CAAC,MAAIC,GAAE,CAAC,KAAG,GAAGD,IAAE,CAAC,CAAC,KAAG,GAAGC,GAAE,CAAC,CAAC;AAAC;AAAC,IAAI;AAAJ,IAAO;AAAG,SAAS,GAAGD,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAIC,KAAE,GAAGD,GAAC;AAAE,SAAGC,GAAE,aAAaA,GAAE,gBAAgB;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAIC,KAAE,GAAGD,GAAC;AAAE,SAAGC,GAAE,aAAaA,GAAE,uBAAuB;AAAA,EAAC;AAAC,SAAO,KAAK,IAAI,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAO;AAAE,MAAIC,IAAE,IAAE,GAAGD,GAAC;AAAE,SAAO,GAAG,GAAE,iCAAiC,KAAGA,QAAI,IAAEC,KAAE,IAAE,GAAG,GAAE,0BAA0B,IAAEA,KAAE,IAAEA,KAAE,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOD,IAAE,aAAaC,EAAC,KAAG;AAAI;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG;AAAC,QAAG,GAAGA,GAAC,KAAG;AAAK,aAAM;AAAA,EAAE,SAAOC,IAAE;AAAC,WAAO,QAAQ,IAAI,sCAAqCA,EAAC,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAIC,KAAE,GAAGD,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAGC,IAAE,mBAAmB;AAAE,aAAM;AAAA,EAAE,WAAS,CAAC,GAAGA,IAAE,wBAAwB;AAAE,WAAM;AAAG,SAAO,GAAGA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAIC,KAAE,GAAGD,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAGC,IAAE,mBAAmB,KAAG,CAAC,GAAGA,IAAE,0BAA0B;AAAE,aAAM;AAAA,EAAE,OAAK;AAAC,QAAG,GAAGA,IAAE,wBAAwB;AAAE,aAAO,GAAGA,EAAC;AAAE,QAAI,IAAE;AAA8B,QAAG,GAAGA,IAAE,CAAC,GAAE;AAAC,UAAI,IAAEA,GAAE,aAAa,CAAC;AAAE,aAAO,GAAGA,IAAE,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,SAAO,GAAGA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,GAAGD,GAAC,GAAE,IAAEA,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAW,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE;AAAE,EAAAA,IAAE,WAAWA,IAAE,YAAW,GAAEC,GAAE,qBAAoB,GAAE,GAAE,GAAEA,GAAE,oBAAmBA,GAAE,kBAAiB,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,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,EAAC,GAAE,IAAED,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAW,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE;AAAE,EAAAA,IAAE,WAAWA,IAAE,YAAW,GAAE,EAAE,yBAAwB,GAAE,GAAE,GAAE,EAAE,oBAAmB,EAAE,sBAAqB,IAAI;AAAE,MAAI,IAAEA,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,KAAEC,IAAE;AAAC,QAAM,QAAQD,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,OAAG;AAAC,SAAG,QAAM,EAAE,OAAO,EAAE,UAAQ,aAAY,MAAI,GAAGC,EAAC,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;AAAS,UAAM,IAAI,MAAM,2DAA2DA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI;AAAG,UAAM,IAAI,MAAM,8FAA8FA,GAAC,GAAG;AAAC,CAAC;AAAE,GAAG,aAAa,yBAAwB,MAAI,GAAG,SAAS,IAAE,IAAE,IAAG,CAAAA,QAAG;AAAC,MAAG,OAAOA,OAAG;AAAS,UAAM,IAAI,MAAM,kDAAkDA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI;AAAG,UAAM,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAGD,MAAE,mBAAkBC,KAAE,MAAK,IAAE,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,QAYx7U,IAAG,IAAE,IAAG,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASRD,MAAE,IAAGC,KAAE,aAAY,IAAE,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,WAAUC,IAAE,WAAU,GAAE,WAAU,GAAE,WAAU,GAAE,QAAO,GAAE,cAAa,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAeA,EAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOA,IAAE,IAAE,CAAC,CAAC,MAAM,CAAC,MAAMA,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,KAAEC,IAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAeA,EAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAI,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOA,IAAE,IAAE,CAAC,CAAC,MAAM,CAAC,MAAMA,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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAEA,IAAE,IAAI,OAAG,GAAGC,EAAC,IAAI,CAAC,GAAG,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC;AAAE,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,SAAQ;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,IAAE,GAAG,GAAEC,EAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOA,IAAE,IAAE,CAAC,CAAC,MAAM,CAAC,MAAMA,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,MAAIC,KAAE,EAAE,eAAeD,GAAC,EAAE,IAAI,OAAG,EAAE,SAAS,CAAC;AAAE,SAAM;AAAA;AAAA,wBAE9iCC,GAAE,CAAC,CAAC,iBAAiBA,GAAE,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,KAAEC,IAAE,GAAE;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,IAAG,EAAE,qBAAoB;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAG,EAAE,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,GAAE,EAAE,qBAAoB;AAAC,YAAOC,GAAE,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,IAAE,kBAAgB,EAAE,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,GAAEC,IAAE,EAAE,cAAa,EAAE,mBAAmB,CAAC,EAAE,KAAK;AAAA,CAChE,GAAE,IAAEA,GAAE,UAAS,IAAE,GAAG,GAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,IAAE,GAAG,CAAC;AAAE,SAAOA,GAAE,YAAU,IAAE,GAAGA,GAAE,cAAa,GAAE,EAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,MAAI,IAAE,GAAGA,GAAE,cAAa,GAAE,EAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,IAAG,EAAE,iBAAe,KAAG,KAAI,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,QAAQ,EAAE,KAAK;AAAA,CAChO;AAAC;AAAC,SAAS,GAAGD,KAAEC,KAAE,OAAG;AAAC,MAAI,IAAED,IAAE,UAAU;AAAa,UAAO,EAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGA,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAG,EAAE,MAAM,wCAAwC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,UAAOD,IAAE,UAAU,aAAa,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE;AAAQ,aAAO,GAAGD,KAAEC,EAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,OAAG,GAAE;AAAC,MAAI,IAAE;AAAG,MAAE,KAAG,GAAGD,KAAE,CAAC,IAAE,KAAG,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAU,cAAa,IAAEC,GAAE;AAAa,SAAO,EAAE,UAAQ,EAAE,WAAS,IAAE,KAAG,GAAGD,KAAEC,EAAC,IAAE,KAAG,GAAGD,KAAEC,EAAC,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,IAAE;AAAQ,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,IAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAEC,EAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAGD,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAKA,GAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAKA,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAO,EAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA,QAI/E;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpC,EAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpC,IAAE;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,KAAEC,IAAE,GAAE;AAAC,SAAOA,GAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA,QAInC;AAAA;AAAA,kCAE4BA,GAAE,CAAC,CAAC;AAAA;AAAA,QAEhCA,GAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,kCAE4BA,GAAE,CAAC,CAAC;AAAA;AAAA,QAEhC,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMJ;AAAA;AAAA;AAAA,oCAGgCA,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,4BACrBA,GAAE,CAAC,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG;AAAE,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB9B,MAAI,IAAE,CAAC,KAAK,KAAKA,GAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAKA,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAG;AAAE,WAAM;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,oCAGEC,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,iCAChBA,GAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG;AAAE,WAAM;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,KAAKA,GAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAKA,GAAE,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;AAAI,SAAGA,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,KAAEC,IAAE,GAAE;AAAC,MAAG;AAAE,WAAM;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,eAG1BC,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,iCACKA,GAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA,kDAEbC,GAAE,CAAC,CAAC;AAAA,+BACvBA,GAAE,CAAC,CAAC;AAAA;AAAA,iCAEFA,GAAE,CAAC,CAAC;AAAA;AAAA,QAE7B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,eAGrDC,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,iCACKA,GAAE,CAAC,CAAC;AAAA;AAAA,QAE7B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAKA,GAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAKA,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,MAAG,EAAE,YAAYD,KAAEC,EAAC;AAAE,WAAO,IAAE;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,SAAO,IAAE;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,GAAGA,KAAEC,IAAE,GAAE;AAAC,SAAO,EAAE,YAAYD,KAAEC,EAAC,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA,QAI7C;AAAA;AAAA,0CAEoCA,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA;AAAA,QAEjDD,IAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgCC,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,mCAChBA,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjCD,IAAE,CAAC,MAAI,IAAE,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgCC,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,mCAChBA,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjC,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASJ;AAAA;AAAA;AAAA,oCAGgCA,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA,iCAChBA,GAAE,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,MAAIC,KAAED,IAAE,MAAK,IAAE,QAAMC,GAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,GAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,SAAM;AAAA,WACjH,CAAC;AAAA,eACG,EAAE,SAAS,IAAIA,EAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC;AAAE,MAAGA,IAAE,UAAU;AAAU,WAAM,SAAS,CAAC,cAAc,CAAC;AAAK,MAAG,CAAC,GAAE,CAAC,IAAEA,IAAE,UAAU;AAAS,MAAG,MAAI,KAAG,MAAI;AAAE,WAAM;AAAA,cAClL,CAAC;AAAA,+BACgB,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,MAAGC;AAAE,WAAM;AAAA,YACjB,CAAC;AAAA,6BACgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AAAA,6BACnC,CAAC;AAAA;AAAA;AAE1B,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,UAAU;AAAS,SAAM;AAAA,YAC5B,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,6BACb,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,UAAS,IAAE,GAAG;AAAE,MAAGC;AAAE,WAAM;AAAA,WAC7G,CAAC;AAAA,gDACoC,CAAC,mCAAmC,CAAC;AAAA;AAAA;AAAA,eAGtE,EAAE,SAAS,IAAI,CAAC;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,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC;AAAE,MAAGA,IAAE,UAAU;AAAU,WAAM;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;AAAE,WAAM;AAAA,cACvD,CAAC;AAAA,+BACgB,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,MAAI,IAAEC,KAAE;AAAA,cACnB,CAAC;AAAA,6CAC8B,CAAC,oBAAoB,CAAC;AAAA,+BACpC,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,6CAC8B,CAAC,cAAc,CAAC;AAAA,+BAC9B,CAAC;AAAA;AAAA,QAE1B,MAAI,IAAEA,KAAE;AAAA,cACA,CAAC;AAAA,wCACyB,CAAC,oBAAoB,CAAC;AAAA,+BAC/B,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,wCACyB,CAAC,cAAc,CAAC;AAAA,+BACzB,CAAC;AAAA;AAAA,QAE1BA,KAAE;AAAA,YACI,CAAC;AAAA,6BACgB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AAAA,6BAC3C,CAAC;AAAA;AAAA,MAE1B;AAAA,YACQ,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,aAAa,CAAC;AAAA,6BACrB,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,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,YAAY,GAAE,CAAC;AAAE,WAAOC,KAAE;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,MAAGA;AAAE,WAAM;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,KAAK,EAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAED,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,YAAY,GAAE,CAAC,GAAE;AAAC,QAAGC;AAAE,aAAM;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,aAAa,CAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,KAAK;AAAE,WAAM;AAAA,QACvG,GAAG,GAAEC,EAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGD,IAAE,UAAU;AAAU,WAAM;AAAA,cACvB,CAAC;AAAA,qDACsC,EAAE,CAAC,CAAC;AAAA,UAC/C,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,MAAI,IAAEC,KAAE;AAAA,cACjC,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,oDACJ,CAAC;AAAA,+BACtB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAW,EAAE,CAAC,CAAC;AAAA,4CACb,CAAC;AAAA,6BAChB,CAAC;AAAA;AAAA,MAE1B,MAAI,IAAEA,KAAE;AAAA,cACE,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,+CACT,CAAC;AAAA,+BACjB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAW,EAAE,CAAC,CAAC;AAAA,uCAClB,CAAC;AAAA,6BACX,CAAC;AAAA;AAAA,MAE1BA,KAAE;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,wBAEa,EAAE,CAAC,CAAC,YAAY,CAAC;AAAA,2BACd,CAAC,KAAK,CAAC;AAAA,2BACP,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,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,MAAG,EAAE,CAAC,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,CAAC,KAAI,OAAM,KAAK;AAAE,WAAM;AAAA,UACvO,GAAG,GAAEC,EAAC,CAAC;AAAA,eACF,CAAC;AAAA,mBACG,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAI,IAAE,GAAG;AAAE,MAAGA;AAAE,WAAM;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,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAK,EAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,OAAO;AAAE,WAAM;AAAA,UACnO,GAAG,GAAEC,EAAC,CAAC;AAAA,gBACD,CAAC;AAAA,mBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGD,IAAE,UAAU;AAAU,WAAM;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;AAAK,WAAOC,KAAE;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;AAAK,WAAOA,KAAE;AAAA,cACrB,CAAC;AAAA,gDACiC,CAAC;AAAA;AAAA,uDAEM,CAAC,gBAAgB,CAAC;AAAA,+BAC1C,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,8CACiC,EAAE,CAAC,CAAC;AAAA;AAAA,qDAEG,CAAC,OAAO,CAAC;AAAA,6BACjC,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAOA,KAAE;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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,MAAGC;AAAE,WAAM;AAAA,WACtF,CAAC;AAAA,0CAC8B,CAAC;AAAA,0DACe,CAAC;AAAA;AAAA,yBAElC,CAAC;AAAA;AAAA,gDAEsB,CAAC,mCAAmC,CAAC;AAAA;AAAA;AAAA,mGAGc,EAAE,SAAS,IAAI,CAAC;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;AAAI,QAAE,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,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,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,GAAGA,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,QAAQ;AAAE,WAAM;AAAA,QAChP,GAAG,GAAEC,EAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGD,IAAE,UAAU;AAAU,WAAM;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;AAAK,WAAOC,KAAE;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;AAAK,WAAOA,KAAE;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,gCAEiB,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGzB,CAAC,OAAO,CAAC;AAAA,+BACH,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAOA,KAAE;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,MAAIC,KAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,GAAE,CAAC,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,EAAC;AAAE,MAAG,EAAE,SAAOA,GAAE,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;AAAU,WAAM;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;AAAK,WAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA,gCAGiB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA,0BAEnB,CAAC,OAAO,CAAC;AAAA,+BACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGEC,GAAE,CAAC,IAAEA,GAAE,CAAC,IAAEA,GAAE,CAAC,CAAC;AAAA,iBACdA,GAAE,CAAC,IAAEA,GAAE,CAAC,CAAC,KAAKA,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGV,CAAC,OAAO,CAAC;AAAA,+BACH,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAM;AAAA,YACZ,CAAC;AAAA;AAAA,0BAEa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,qBAClC,CAAC,eAAe,CAAC;AAAA,6BACT,CAAC,KAAK,CAAC;AAAA,6BACP,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaC,EAAC;AAAE,MAAG,EAAE,SAAOA,GAAE,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,IAAEC,GAAE,CAAC,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE;AAAE,MAAGD,IAAE,UAAU;AAAU,WAAM;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;AAAK,WAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA,0BAGV,CAAC,OAAO,CAAC;AAAA,+BACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGEC,GAAE,CAAC,IAAEA,GAAE,CAAC,IAAEA,GAAE,CAAC,IAAEA,GAAE,CAAC,CAAC;AAAA,iBACnBA,GAAE,CAAC,IAAEA,GAAE,CAAC,IAAEA,GAAE,CAAC,CAAC;AAAA,iBACdA,GAAE,CAAC,IAAEA,GAAE,CAAC,CAAC;AAAA,iBACTA,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGI,CAAC,OAAO,CAAC;AAAA,+BACH,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;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,6BACP,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE,MAAK,IAAE,EAAE,cAAcA,IAAE,UAAU,YAAY;AAAE,SAAO,IAAE,IAAE,UAAUC,EAAC,MAAI;AAAA,0BAC5E,CAAC;AAAA;AAAA,iBAEVA,EAAC;AAAA;AAAA;AAAA;AAGf;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAEA,IAAE,UAAU,aAAa,QAAO,IAAEC,GAAE,aAAa,QAAO,IAAE,GAAGD,IAAE,UAAU,cAAaC,GAAE,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,IAAED,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,cAAcC,GAAE,YAAY,MAAI;AAAE,MAAG,MAAI,KAAG,CAAC,KAAG,CAAC;AAAE,QAAE;AAAA;AAAA;AAAA,WAE5N,KAAG,CAAC;AAAE,UAAI,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,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAEC,GAAE,UAAS,IAAED,IAAE,UAAU,UAAS,IAAEA,IAAE,UAAU,aAAa,QAAO,IAAEC,GAAE,aAAa;AAAO,MAAG,CAACD,IAAE,UAAU,aAAW,MAAI,KAAGA,IAAE,UAAU,cAAY,QAAM,EAAE,YAAY,GAAE,CAAC;AAAE,WAAM;AAAA,cAC1Q,CAAC;AAAA,+BACgB,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGA,IAAE,UAAU,cAAaC,GAAE,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,IAAED,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;AAAE,WAAM;AAAM,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAG,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,EAAC,GAAE,IAAEA,GAAE,QAAO,IAAED,OAAG,MAAI,KAAGC,GAAE,CAAC,MAAI,GAAE,IAAE,IAAEA,GAAE,MAAM,CAAC,IAAE,GAAE,IAAE,CAACD,OAAG,IAAE,KAAG,CAAC,EAAE,YAAYC,IAAE,CAAC,KAAG,EAAE,SAAO,KAAG;AAAE,SAAM,EAAC,iBAAgB,GAAE,cAAa,IAAE,IAAEA,IAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,KAAK,MAAM,KAAK,UAAUD,GAAC,CAAC;AAAE,SAAO,EAAE,UAAU,eAAaC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAOA,GAAE,IAAI,OAAGD,IAAE,CAAC,CAAC,EAAE,KAAK,IAAI;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,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,MAAKA,GAAE,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,GAAEA,EAAC,GAAE,IAAE,GAAGD,IAAE,IAAG,CAAC,GAAE,IAAEA,IAAE,cAAc,CAAC;AAAE,SAAO,EAAE,EAAE,IAAI,qBAAqB,IAAE,EAAC,SAAQC,IAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,GAAE,oBAAmB,MAAK,wBAAuB,MAAK,QAAO,MAAK,QAAO,MAAK,kBAAiB,MAAK,yBAAwB,MAAK,qBAAoB,KAAI,KAAGD,IAAE,SAAS,CAAC,GAAE,OAAO,OAAO,EAAC,SAAQC,IAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,GAAGD,KAAEC,IAAE,CAAC,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,IAAE,MAAK,IAAE;AAAK,MAAED,IAAE,mBAAmB,GAAE,OAAM,KAAE,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,MAAI,IAAEA,IAAE,mBAAmB,GAAE,YAAW,KAAE;AAAG,MAAI,IAAE;AAAG,WAAQ,KAAKC,GAAE,eAAc;AAAC,QAAI,IAAE,EAAC,MAAK,GAAE,SAAQD,IAAE,mBAAmB,GAAE,GAAE,CAAC,GAAE,QAAOA,IAAE,mBAAmB,GAAE,SAAS,CAAC,IAAG,CAAC,EAAC;AAAE,IAAAC,GAAE,wBAAsB,EAAE,QAAMD,IAAE,mBAAmB,GAAE,GAAG,CAAC,SAAQ,CAAC,GAAE,EAAE,WAASA,IAAE,mBAAmB,GAAE,GAAG,CAAC,YAAW,CAAC,IAAG,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAGC,GAAE,wBAAsB,IAAED,IAAE,mBAAmB,GAAE,YAAW,CAAC,GAAE,IAAEA,IAAE,mBAAmB,GAAE,mBAAkB,CAAC,GAAE,IAAEA,IAAE,mBAAmB,GAAE,eAAc,CAAC,IAAGC,GAAE;AAAe,aAAQ,KAAKA,GAAE;AAAe,QAAE,KAAKD,IAAE,mBAAmB,GAAE,EAAE,MAAK,CAAC,CAAC;AAAE,SAAM,EAAC,oBAAmB,GAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAGD,IAAE,WAASC,GAAE;AAAO,UAAM,MAAM,4BAA4BD,IAAE,MAAM,kCAAkCC,GAAE,MAAM,SAAS;AAAE,EAAAD,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,cAAa,IAAEC,GAAE,CAAC,GAAE,IAAE,EAAE;AAAM,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC;AAAE,YAAM,MAAM,2EAA2E,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAG,EAAE,aAAW,EAAE;AAAU;AAAO,QAAI,IAAE,EAAE,UAAS,IAAE,EAAE,YAAU,OAAK,EAAE,QAAQ;AAAS,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC;AAAE,YAAM,MAAM,kFAAkF,CAAC,QAAQ,CAAC,aAAa;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,EAAAA,GAAE,QAAQ,wBAAsB,GAAGA,GAAE,cAAa,CAAC,GAAE,GAAG,CAACA,GAAE,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,WAAWC,GAAE,YAAY,GAAED,IAAE,gBAAgBC,GAAE,aAAa,GAAG,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,KAAGA,GAAE,WAAS,QAAMD,IAAE,GAAG,UAAUC,GAAE,QAAO,IAAE,CAAC,GAAEA,GAAE,WAAS,QAAMD,IAAE,GAAG,UAAUC,GAAE,QAAO,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA,GAAE,mBAAmB,CAAC;AAAE,QAAG,GAAE;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAGA,GAAE,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;AAAE,UAAAA,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,IAAEC,GAAE;AAAiB,MAAG;AAAE,YAAO,EAAE,MAAM,QAAO;AAAA,MAAC,KAAK;AAAE,QAAAD,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAC,MAAGC,GAAE,yBAAwB;AAAC,QAAI,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,YAAO,EAAE,MAAM,QAAO;AAAA,MAAC,KAAK;AAAE,QAAAD,IAAE,GAAG,WAAWC,GAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAD,IAAE,GAAG,WAAWC,GAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAD,IAAE,GAAG,WAAWC,GAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAA,EAAC;AAAC,MAAGA,GAAE,uBAAqBD,IAAE,GAAG,UAAUC,GAAE,qBAAoB,EAAE,QAAQ,SAAS,CAAC,GAAE,EAAE,QAAQ,SAAS,CAAC,CAAC,GAAEA,GAAE,QAAQ,kBAAgB;AAAE,aAAQ,IAAE,GAAE,IAAEA,GAAE,QAAQ,eAAe,QAAO,EAAE,GAAE;AAAC,UAAI,IAAEA,GAAE,QAAQ,eAAe,CAAC,GAAE,IAAEA,GAAE,uBAAuB,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAG,EAAE,SAAO;AAAQ,QAAAD,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAM,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA;AAAO,cAAM,MAAM,gBAAgB,EAAE,IAAI,wBAAwB;AAAA,IAAC;AAAC,EAAAA,IAAE,eAAe;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE;AAAG,EAAAA,GAAE,OAAO,CAAC,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,YAAE,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,OAAM,EAAE,KAAK,GAAE,IAAE,CAACA,IAAE,gBAAc,MAAI,EAAE,MAAM,UAAQ,EAAE,YAAY,GAAE,EAAE,QAAQ,QAAQ,GAAE,IAAEA,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,YAAYC,IAAE;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,QAAI,IAAE,GAAG;AAAE,SAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEntN,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,EAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhE,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;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,QAAI,IAAE,GAAG;AAAE,SAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAElR,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,EAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhE,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAG;AAAS,QAAI,IAAE,GAAG;AAAE,SAAK,cAAYA,IAAE,KAAK,WAAS;AAAA,QAC9H,EAAE;AAAA;AAAA;AAAA;AAAA,UAIA,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAG;AAAS,QAAI,IAAE,GAAG;AAAE,SAAK,cAAYA,IAAE,KAAK,WAAS;AAAA,QACxK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,UAKA,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAC;AAAvB,IAAyB,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG,IAAE,QAAO;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,GAAG;AAAE,SAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE;AAAS,UAAI,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,GAAGA,EAAC,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,YAAYA,IAAE,IAAE,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,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,IAAG,IAAE;AAAS,UAAI,IAAE;AAA8B,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,aAAG;AAAA;AAAA,gCAEtU,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAGA,GAAE,CAAC,CAAC,EAAE;AAAA,8BACzD,CAAC;AAAA,iCACE,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAGA,GAAE,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,MAIf;AAAC,SAAK,WAAS;AAAA,UACd,KAAK,sBAAoB,GAAG,IAAE,GAAGA,EAAC,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,MAAIC,KAAE,GAAG,GAAE,IAAE,GAAGA,GAAE,OAAO;AAAA;AAAA,MAE33BA,GAAE,SAAS;AAAA,MACXA,GAAE,SAAS;AAAA,MACXA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAKV,SAAO,GAAGD,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,KAAE,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,GAAGD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE,IAAI,YAAY,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAE,SAAO,GAAGD,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAGA,IAAE,CAAC;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,GAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAI,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,GAAE,GAAEC,IAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC,GAAE,EAAC,SAAQ,GAAE,UAAS,CAAC,GAAEC,EAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE;AAAmB;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;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,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAK,EAAE,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,CAAC,CAAC,GAAE,GAAGA,KAAEC,IAAE,gBAAe,GAAE,GAAE,IAAG,CAAC,KAAG,GAAGD,KAAEC,IAAE,MAAK,GAAE,GAAE,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAWC,EAAC,CAAC;AAAE,MAAI,GAAE,GAAE;AAAE,eAAa,cAAY,IAAE,IAAI,WAAW,IAAE,IAAE,CAAC,GAAE,IAAED,IAAE,eAAc,IAAEA,IAAE,SAAO,IAAE,IAAI,aAAa,IAAE,IAAE,CAAC,GAAE,IAAEA,IAAE,OAAM,IAAE,EAAE,4BAA2B,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAE,GAAE,GAAEA,IAAE,MAAK,GAAE,CAAC,CAAC,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAE,GAAE,GAAE,GAAE,GAAEA,IAAE,MAAK,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAWC,EAAC,CAAC,GAAE,EAAE,gBAAgB,aAAW,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,QAAOA,IAAE,MAAKA,IAAE,eAAc,EAAE,IAAI,CAAC,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAK,EAAE,OAAM,EAAE,QAAO,GAAEA,IAAE,MAAKA,IAAE,eAAc,EAAE,IAAI,CAAC,IAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEA,IAAE,MAAKA,IAAE,eAAc,CAAC,CAAC,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAKA,IAAE,MAAKA,IAAE,eAAc,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,aAAa;AAAE,KAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,CAAC,CAAC;AAAE,MAAI,IAAE,IAAE,IAAEC,KAAE;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,GAAEA,IAAE,WAAW,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAEC,IAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,IAAI,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAa,CAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkBC,EAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,IAAI,WAAW,GAAGA,KAAE,GAAE,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,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAa,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkBC,EAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,KAAE,IAAE,CAAC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAEC,IAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,SAAK,gBAAc,MAAK,KAAK,UAAQ,MAAK,KAAK,WAAS,OAAG,KAAK,cAAY,CAAC;AAAE,QAAI,IAAE,EAAE,EAAE,UAAU,eAAe;AAAE,QAAGA,MAAG,QAAM,KAAK,KAAGA,IAAE,GAAG,GAAEA,EAAC,KAAG,KAAK,KAAG,GAAG,CAAC,GAAEA,KAAE,KAAK,IAAG,EAAE,EAAE,UAAU,eAAe,MAAI,GAAE;AAAC,UAAI,IAAEA;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,WAASA,MAAG,MAAK;AAAC,UAAI,IAAEA,GAAE,aAAa,yBAAyB;AAAE,UAAG,KAAG;AAAK,cAAM,IAAI,MAAM,2EAA2E;AAAE,WAAK,oBAAkB,MAAI,GAAGA,IAAE,MAAI,EAAE,qBAAqB,CAAC,GAAE,KAAK,kBAAgB,OAAG,GAAGA,IAAE,MAAI,EAAE,mBAAmB,CAAC,CAAC,GAAE,KAAK,oBAAkB,OAAG,GAAGA,IAAE,MAAI,EAAE,qBAAqB,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,GAAGA,IAAE,MAAIA,GAAE,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;AAAE,aAAK,4BAA0B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B;AAAE,cAAM,IAAI,MAAM,oHAAoH;AAAE,UAAG,KAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC,GAAE,GAAG,KAAK,IAAG,CAAC;AAAE,aAAK,gCAA8B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B;AAAE,cAAM,IAAI,MAAM,6HAA6H;AAAA,IAAC,WAAS,IAAE,0BAAyB,GAAG,KAAK,IAAG,CAAC;AAAE,WAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC;AAAA,aAAU,GAAG,KAAK,IAAG,CAAC;AAAE,WAAK,gCAA8B,KAAK,GAAG,aAAa,CAAC;AAAA;AAAO,YAAM,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;AAAS;AAAO,SAAK,WAAS,QAAM,QAAQ,KAAK,sKAAsK,GAAE,KAAK,iBAAe,QAAM,QAAQ,KAAK,oMAAoM;AAAE,QAAIA,KAAE,KAAK;AAAG,OAAGA,IAAE,MAAIA,GAAE,OAAO,CAAC,GAAE,GAAGA,IAAE,MAAIA,GAAE,gBAAgBA,GAAE,aAAY,IAAI,CAAC,GAAE,GAAGA,IAAE,MAAIA,GAAE,kBAAkB,KAAK,WAAW,CAAC,GAAE,GAAGA,IAAE,MAAIA,GAAE,WAAWA,GAAE,cAAa,IAAI,CAAC,GAAE,GAAGA,IAAE,MAAIA,GAAE,WAAWA,GAAE,sBAAqB,IAAI,CAAC,GAAE,GAAGA,IAAE,MAAIA,GAAE,aAAa,KAAK,WAAW,CAAC,GAAE,KAAK,WAAS;AAAA,EAAE;AAAA,EAAC,2BAA2BA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,2BAA2BA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiCA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,yBAAyBA,IAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2BA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiCA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,0BAA0BA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,oBAAoBA,IAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,kBAAgBA,OAAI,GAAG,KAAK,IAAG,KAAK,WAAW,GAAE,KAAK,gBAAc,OAAM,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAcA,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gDAAgDA,IAAE,GAAE,GAAE;AAAC,WAAO,KAAK,qBAAqBA,IAAE,MAAI,GAAG,KAAK,IAAG,GAAE,GAAE,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,+BAA+BA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,KAAK,IAAGA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,gCAAgCA,IAAE,GAAE;AAAC,WAAO,GAAG,KAAK,IAAGA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,wBAAwBA,IAAE,GAAE,GAAE;AAAC,SAAK,yBAAyBA,EAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAG,GAAE,GAAE,KAAK,aAAa;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAIA,KAAE,KAAK,YAAY,KAAK,EAAE;AAAE,WAAO,KAAK,UAAUA,EAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAI,GAAE;AAAE,QAAG,EAAE,EAAE,QAAQ,yBAAyB,GAAE;AAAC,UAAI,IAAEA,IAAE,IAAE,EAAE,UAAU,EAAE,4BAA2B,CAAC;AAAE,MAAAA,GAAE,MAAM,GAAE,IAAE,MAAI;AAAC,YAAI,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE,eAAO,MAAI,EAAE,oBAAkB,MAAI,EAAE;AAAA,MAAmB,GAAE,IAAE;AAAA,IAAC;AAAM,QAAE,EAAE,UAAU,8CAA8C,IAAE,KAAG,IAAE,KAAK,WAAW,GAAE,KAAK,SAAS,GAAE,IAAE,MAAI,KAAK,iBAAiB,GAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,KAAG,IAAE,MAAI;AAAG,WAAM,EAAC,OAAM,GAAE,eAAc,EAAC;AAAA,EAAC;AAAA,EAAC,gCAAgCA,IAAE,GAAE,GAAE;AAAC,WAAO,KAAK,qBAAqBA,IAAE,MAAI,GAAG,KAAK,IAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,KAAK;AAAG,SAAK,gBAAc,SAAO,KAAK,eAAa,GAAG,CAAC;AAAG,QAAI,IAAE,GAAG,CAAC;AAAE,OAAG,GAAE,MAAI,EAAE,aAAa,GAAE,KAAK,YAAY,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,aAAa,GAAEA,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,QAAI,IAAE,OAAO,OAAO,GAAE,EAAC,KAAI,KAAK,kBAAkB,EAAC,CAAC;AAAE,WAAO,KAAK,SAAO,GAAG,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,SAAK,WAAWA,EAAC,GAAE,KAAK,gBAAgBA,GAAE,GAAG;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAE,MAAI,EAAE,WAAW,EAAE,sBAAqB,KAAK,WAAW,CAAC,GAAE,GAAG,GAAEA,IAAE,KAAK,YAAY;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE;AAAC,SAAK,gBAAgB,GAAEA,OAAI,KAAK,YAAU,KAAK,UAAQ,OAAMA,MAAG,SAAO,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAcA,EAAC,CAAC,GAAE,KAAK,kBAAkBA,GAAE,GAAG;AAAA,EAAE;AAAA,EAAC,WAAWA,IAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,UAAQA,IAAE,KAAK,WAAS,QAAM,KAAK,SAAO,GAAG,KAAK,IAAG,KAAK,OAAO,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,WAAWA,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE,GAAE,IAAE,MAAG;AAAC,WAAO,KAAK,gBAAgB,GAAE,IAAE,GAAG,KAAK,IAAGA,IAAE,CAAC,IAAE,GAAG,KAAK,IAAGA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,qBAAqBA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,kBAAkBA,IAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,0BAA0BA,IAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,KAAK,GAAG,mBAAmBA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsBA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,iBAAiB,GAAE,GAAG,KAAK,IAAGA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuBA,IAAE,GAAE,GAAE;AAAC,SAAK,6BAA6BA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,6BAA6BA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAK,6BAA6BA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2BA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,iCAAiC,GAAEA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAiCA,IAAE,GAAE,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,QAAIA,KAAE,KAAK;AAAG,QAAG,KAAK,OAAM;AAAC,UAAI,IAAE,KAAK,eAAe;AAAE,cAAQ,OAAO,MAAI,KAAK,QAAQ,KAAI,oDAAoD,GAAE,KAAK,cAAc;AAAA,IAAC;AAAC,OAAGA,IAAE,MAAIA,GAAE,aAAaA,GAAE,WAAU,GAAEA,GAAE,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,QAAIA,KAAE,KAAK,6BAA6B,GAAE,IAAEA,GAAE,eAAe;AAAE,WAAOA,GAAE,cAAcA,GAAE,kBAAiB,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,QAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B;AAAE,QAAE,SAAS,EAAE,gBAAgB;AAAE;AAAA,IAAM;AAAC,QAAIA,KAAE,KAAK,6BAA6B;AAAE,IAAAA,GAAE,YAAYA,GAAE,gBAAgB;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuBA,IAAE;AAAC,WAAO,MAAM,EAAE,YAAY,MAAI,KAAK,YAAU,KAAK,iBAAiBA,IAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,CAAC,GAAE,KAAK,aAAaA,IAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE;AAAC,QAAG,MAAI;AAAE,aAAO;AAAK,QAAG,MAAI,GAAE;AAAC,UAAI,IAAE,KAAK;AAAG,aAAO,EAAE,kBAAkBA,IAAE,EAAE,YAAY,IAAE;AAAA,IAAG,OAAK;AAAC,UAAI,IAAE,KAAK,6BAA6B;AAAE,aAAO,EAAE,kBAAkBA,IAAE,EAAE,gBAAgB,IAAE;AAAA,IAAG;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE,GAAE;AAAC,QAAG,MAAI;AAAE,aAAM;AAAG,QAAG,MAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,kBAAkBA,IAAE,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,kBAAkBA,IAAE,EAAE,0BAA0B;AAAE,aAAO,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,GAAG,aAAa,EAAE,gBAAgB,IAAG,KAAG,CAAC,KAAK;AAAA,IAAQ;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,WAAO,IAAI,QAAQ,OAAG;AAAC,WAAK,cAAc,MAAIA,GAAE,cAAc,GAAE,MAAI,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAIA,KAAE,GAAG,KAAK,YAAY,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAE,aAAQ,IAAE,GAAE,KAAGA,IAAE,EAAE,GAAE;AAAC,UAAG,EAAC,WAAU,EAAC,IAAE,KAAK,YAAY,CAAC;AAAE,QAAE;AAAA,IAAC;AAAC,SAAK,cAAY,KAAK,YAAY,MAAMA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE,GAAE;AAAC,QAAG,KAAK,YAAY,KAAK,EAAC,UAASA,IAAE,WAAU,EAAC,CAAC,GAAE,KAAK,YAAY,SAAO;AAAE;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,yBAAyBA,IAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAGA,IAAE,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,qBAAqBA,IAAE,GAAE;AAAC,SAAK,yBAAyBA,EAAC;AAAE,QAAI,IAAE,EAAE;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6BA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAEA,IAAE,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,gBAAcA,IAAE,GAAG,GAAE,MAAI,EAAE,SAAS,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,QAAQ,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAiCA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,QAAQA,IAAE,GAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,QAAG,KAAK;AAAS,YAAM,IAAI,MAAM,yCAAyC;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,QAAG,KAAK,WAAS;AAAK,YAAM,IAAI,MAAM,kCAAkC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE;AAAE,SAAKA,KAAED,IAAE,UAAQA,IAAEC,EAAC,EAAE,GAAE,EAAEA;AAAE;AAAC,SAAOA,KAAE;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,GAAGD,KAAEC,IAAE;AAAC,SAAM,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAEA,EAAC,EAAE,IAAI,OAAG,GAAGD,GAAC,IAAI,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,SAAOA,OAAI,IAAE,CAACD,GAAC,IAAE,GAAGA,KAAEC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGD,QAAI;AAAE,WAAM;AAAK,MAAI,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAEA,KAAE;AAAI,SAAGC,GAAE,CAAC,GAAE,IAAED,MAAE,MAAI,KAAG;AAAK,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,KAAK,OAAKA,GAAE,QAAO,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,SAAO;AAAE,WAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAI7+c;AAAC,UAAI,IAAE,GAAG,MAAK,KAAK,IAAI,GAAE,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,KAAK,wBAAwB,CAAC,GAAE,IAAE,KAAK,SAAS,CAAC,GAAE,IAAE,KAAK,UAAU,CAAC;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,mBAAmBA,IAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,YAAI,IAAE,GAAG,MAAI,IAAE,MAAI,KAAK,KAAK,MAAI,IAAE,MAAI,KAAK;AAAG,iBAAQ,IAAE,GAAE,IAAE,KAAK,MAAK;AAAI,cAAE,GAAGA,GAAEA,GAAE,SAAO,IAAE,CAAC,CAAC,MAAI;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,wBAAwBA,IAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM,QAAQ,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC;AAAG,QAAI,IAAE;AAAG,aAAQ,IAAE,KAAK,OAAK,GAAE,IAAE,KAAK,MAAK;AAAI,WAAG,GAAGA,GAAE,CAAC,CAAC,OAAO,KAAK,sBAAoB,YAAY,CAAC,MAAI,KAAK,YAAY,CAAC,CAAC,IAAG,IAAE,KAAK,OAAK,MAAI,KAAG;AAAM,WAAO;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM;AAAG,QAAI,IAAEA,GAAE,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,gBAC3rB,EAAE,CAAC,CAAC;AAAA,gBACJ,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4BAIQ,CAAC;AAAA,4BACD,CAAC;AAAA;AAAA,EACxB;AAAA,EAAC,UAAUA,IAAE;AAAC,QAAI,IAAE,KAAK,mBAAmBA,EAAC;AAAE,WAAO,KAAK,SAAO,IAAE,wBAAwB,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC,gCAA8B,QAAQ,EAAE,CAAC,CAAC;AAAA,gCAClK,EAAE,CAAC,CAAC;AAAA,gCACJ,EAAE,CAAC,CAAC;AAAA,yCACK,EAAE,CAAC,CAAC;AAAA,EAAG;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,cAAa,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,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,GAAG,GAAE,KAAK,mBAAmB,CAAC;AAAA,QAC9B,KAAK,sBAAoB,GAAG,IAAE,GAAGA,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAQtB,KAAK,sBAAoB,gBAAcA,GAAE,CAAC,CAAC;AAAA,qBAC3C,KAAK,sBAAoB,gBAAcA,GAAE,CAAC,CAAC;AAAA;AAAA,UAEtD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM;AAAA;AAAA,QAEvBA,KAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,YAAY,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAED,GAAC,CAAC;AAAA;AAAA;AAAA;AAGzD;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,SAAK,QAAMA,IAAE,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,eAAeA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAGA,IAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC,IAAG,KAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAGA,IAAE,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,0BAA0BA,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,IAAE,MAAI,GAAG,qBAAmB,IAAE,KAAK,MAAM,iCAAiCA,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2BA,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2BA,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,IAAE,MAAI,GAAG,6BAA2B,IAAE,KAAK,MAAM,iCAAiCA,GAAE,CAAC,GAAEA,GAAE,CAAC,CAAC,IAAG,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK,sBAAoB,GAAE,KAAK,IAAI,GAAE;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAK,gBAAc;AAAK;AAAO,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAG,GAAE,GAAE,KAAK,MAAM,IAAG,KAAK,MAAM,eAAc,CAAC,GAAE,IAAE,EAAE,EAAE,UAAU,gCAAgC;AAAE,UAAI,MAAI,KAAK,qBAAmB,KAAG,KAAK,MAAM,oBAAoBA,GAAE,OAAO,GAAE,KAAK,sBAAoB,MAAI,KAAK,aAAa,CAAC,EAAE,KAAKA,EAAC,GAAE,KAAK,mBAAkB,KAAK,iBAAe,IAAG,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,CAAC,GAAE,IAAE,KAAG,EAAE,QAAQA,EAAC;AAAE,QAAG,KAAG,QAAM,IAAE;AAAE,YAAM,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;AAAW;AAAO,QAAIA,KAAE,KAAK,kBAAgB,KAAK;AAAgB,YAAQ,IAAI,aAAY,GAAG,KAAK,eAAe,MAAM,KAAK,eAAe,IAAG,IAAIA,EAAC,GAAG;AAAE,QAAI,IAAE,KAAK,gBAAc,KAAK;AAAmB,YAAQ,IAAI,oBAAoB,KAAK,kBAAkB,EAAE,GAAE,QAAQ,IAAI,iBAAiB,KAAK,aAAa,KAAK,KAAK,MAAM,MAAI,CAAC,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,eAAQA,MAAK,KAAK;AAAa,aAAK,aAAaA,EAAC,EAAE,QAAQ,OAAG;AAAC,eAAK,MAAM,oBAAoB,EAAE,OAAO;AAAA,QAAC,CAAC;AAAE,eAAQA,MAAK,KAAK;AAAa,aAAK,aAAaA,EAAC,EAAE,QAAQ,OAAG;AAAC,eAAK,MAAM,oBAAoB,EAAE,OAAO;AAAA,QAAC,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,KAAEC,IAAE;AAAC,MAAI,IAAED;AAAE,MAAGC,OAAI,EAAE;AAAK,WAAO;AAAE,MAAGA,OAAI,EAAE;AAAK,WAAO;AAAE,MAAGA,OAAI,EAAE;AAAQ,WAAO;AAAG,MAAGA,OAAID,IAAE;AAAK,WAAO;AAAG,MAAGC,OAAI,EAAE;AAAQ,WAAO;AAAE,MAAGA,OAAI,EAAE;AAAM,WAAO;AAAE,QAAM,IAAI,MAAM,2BAA2BA,EAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAGA,IAAE,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGD,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,GAAG,GAAE,CAAC;AAAE,SAAO,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,UAAOD,KAAE;AAAA,IAAC,KAAK,GAAG;AAAmB,aAAO,GAAGC,EAAC;AAAA,IAAE,KAAK,GAAG;AAAmB,aAAO,GAAGA,EAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAGA,EAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAGA,EAAC;AAAA,IAAE,KAAK,GAAG;AAAyB,aAAO,GAAGA,EAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iCAAiCD,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,KAAEC,IAAE;AAAC,MAAGD,QAAI,GAAG;AAAO,WAAO,GAAG;AAAmB,MAAGA,QAAI,GAAG,UAAQA,OAAG;AAAK,WAAO,GAAGC,EAAC;AAAE,MAAGD,QAAI,GAAG,YAAUA,QAAI,GAAG;AAAO,WAAO,GAAG;AAAyB,QAAM,IAAI,MAAM,gCAAgCA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,SAAM,GAAGD,IAAE,CAAC,CAAC,IAAIA,IAAE,CAAC,CAAC,IAAIC,EAAC,IAAI,CAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEryH,CAAC;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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEpN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAEA,GAAE,QAAO,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,KAAG,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,IAAmDI,MAAG;AAAI,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,OAAO,UAAQ,OAAK,OAAK,EAAE,EAAE,OAAO,OAAO,SAAO,EAAE,EAAE,OAAO,OAAO,QAAM,OAAO,mBAAiBA,MAAG,OAAK;AAAI;AAAC,IAAI,KAAG,MAAMJ,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,YAAYC,IAAE;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;AAAE,YAAM,IAAI,MAAM,uCAAuC;AAAE,QAAI;AAAE,QAAGA,MAAG,MAAK;AAAC,UAAGA,cAAa;AAAG,YAAEA;AAAA,WAAM;AAAC,YAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,GAAEA,EAAC;AAAE,YAAE,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,UAAE,IAAI,GAAG,CAAC,GAAE,KAAK,cAAY,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC,GAAE,KAAK,sBAAoB;AAAA,IAAE;AAAC,SAAK,QAAM,GAAE,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,aAAaA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,eAAe,GAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS,OAAG,EAAE,UAAQ,EAAC,SAAQA,IAAE,UAAS,CAAC,GAAE,CAAC,EAAC,GAAE,EAAE,WAAS,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,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,QAAM,GAAE,EAAE,UAAQ,MAAK,KAAK,8BAA8B,CAAC,GAAE,EAAE;AAAA,EAAM;AAAA,EAAC,MAAMA,IAAE,GAAE,GAAE;AAAC,SAAI,EAAE,EAAE,QAAQ,gCAAgC,KAAG,EAAE,EAAE,QAAQ,OAAO,MAAI,KAAK,uBAAuBA,EAAC,GAAE,MAAI,eAAaA,MAAG;AAAK,YAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,IAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,KAAK,QAAQ,IAAIA,EAAC,IAAE,KAAK,QAAQ,IAAIA,EAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC;AAAE,MAAE;AAAA,EAAU;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAG,KAAK,QAAQ,IAAIA,EAAC,GAAE;AAAC,UAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC;AAAE,QAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,KAAK,uBAAuB,CAAC,GAAE,MAAI;AAAY,YAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,QAAQ,IAAIA,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,GAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,8BAA8BA,IAAE;AAAC,SAAK,YAAYA,GAAE,MAAM;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,oBAAmB,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE;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,QAAOA,IAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,SAAS,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,aAAO,KAAK,qBAAqBA,EAAC;AAAE,QAAG,MAAI;AAAS,aAAO;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;AAAM,UAAE,KAAK,qBAAqBA,EAAC;AAAE,WAAO,MAAI,KAAK,kBAAgB,EAAE,IAAI,IAAE,IAAG,KAAK,qBAAqBA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAG,KAAK,YAAY,IAAIA,EAAC,GAAE;AAAC,UAAI,IAAE,KAAK,YAAY,IAAIA,EAAC;AAAE,aAAO,IAAI,QAAQ,OAAG,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAE;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,QAAOA,IAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,KAAK,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,aAAO,KAAK,qBAAqBA,EAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,CAAC,EAAE,EAAE,QAAQ,8BAA8B,KAAG,EAAE,EAAE,UAAU,eAAe,MAAI;AAAE,YAAM,IAAI,MAAM,8FAA8F;AAAE,QAAI,IAAE,MAAK;AAAE,QAAG,MAAI,eAAa,EAAE,EAAE,IAAI,wBAAwB,GAAE;AAAC,UAAE,KAAK,OAAOA,EAAC;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,IAAIA,IAAE,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;AAAK,UAAE,KAAK,qBAAqBA,EAAC;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,qBAAqBA,IAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAIA,EAAC;AAAE,WAAO,KAAK,YAAY,OAAOA,EAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,CAAC,CAAC,GAAE,KAAK,gBAAgB,IAAIA,EAAC,MAAI,KAAK,gBAAgB,OAAOA,EAAC,GAAE,KAAK,YAAYA,EAAC,KAAG,GAAG,EAAE,aAAaA,IAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE,IAAE,CAAC,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,GAAE,SAAQ,EAAC,IAAE;AAAE,QAAG,MAAI;AAAY,YAAM,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,QAAOA,IAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,UAAU,GAAE,CAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,YAAM,KAAG,OAAK,IAAI,MAAM,gCAAgC,IAAE,IAAI,MAAM,iCAAiC;AAAE,QAAI,IAAE,KAAK,OAAOA,IAAE,EAAE,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,WAAWA,IAAE;AAAC,QAAI,IAAE,KAAK,SAASA,GAAE,MAAM;AAAE,QAAGA,GAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuBA,IAAE;AAAC,QAAGA,MAAG;AAAK,eAAQ,IAAE,GAAE,IAAEA,GAAE,QAAO,KAAI;AAAC,YAAI,IAAEA,GAAE,CAAC;AAAE,YAAG,CAAC,GAAG,CAAC;AAAE,gBAAM,EAAE,EAAE,QAAQ,8BAA8B,IAAE,MAAM,aAAa,CAAC,+IAA+I,IAAE,MAAM,aAAa,CAAC,wCAAwC;AAAA,MAAC;AAAA,EAAC;AAAA,EAAC,qBAAqBA,IAAE;AAAC,QAAG,EAAC,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,8BAA8B,GAAE;AAAC,UAAI,IAAE,KAAK,OAAOA,EAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,KAAK,MAAM,gCAAgC,EAAE,QAAQ,SAAQ,GAAG,GAAG,CAAC,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,GAAG,CAAC,IAAE,GAAE,IAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,GAAC,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,KAAKA,IAAE;AAAC,QAAI,IAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAEA,GAAE;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,eAAa,GAAE,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;AAAM,UAAE,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,SAASA,IAAE;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE,KAAG,KAAK,MAAM,SAAS,GAAEA,OAAIA,GAAE,QAAM,EAAE,IAAI,GAAEA;AAAA,EAAE;AAAA,EAAC,MAAM,aAAaA,IAAE;AAAC,QAAG,EAAE,EAAE,UAAU,+CAA+C,IAAE;AAAE,aAAO,KAAK,MAAM,uBAAuBA,EAAC;AAAE,QAAI,IAAEA;AAAE,WAAO,EAAE,QAAM,EAAE;AAAA,EAAO;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAgB,IAAIA,EAAC;AAAE,aAAM;AAAG,QAAG,CAAC,KAAK,QAAQ,IAAIA,EAAC;AAAE,aAAM;AAAG,QAAG,IAAE,KAAK,QAAQ,IAAIA,EAAC,EAAE,WAAS,IAAE,KAAK,QAAQ,IAAIA,EAAC,EAAE,YAAW,CAAC,KAAG,KAAK,QAAQ,IAAIA,EAAC,EAAE,WAAS;AAAE,aAAM;AAAG,QAAG,KAAK,YAAY,IAAIA,EAAC;AAAE,aAAO,KAAK,gBAAgB,IAAIA,EAAC,GAAE,KAAK,kBAAiB;AAAG,SAAK,eAAeA,EAAC;AAAE,QAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,QAAQ,IAAIA,EAAC;AAAE,WAAO,KAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAO,CAAC,GAAE,KAAK,YAAY,EAAE,KAAK,QAAO,CAAC,IAAG,KAAK,QAAQ,OAAOA,EAAC,GAAE;AAAA,EAAE;AAAA,EAAC,eAAeA,IAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,OAAM,GAAE,UAAS,GAAE,OAAM,GAAE,UAAS,GAAE,OAAM,EAAC,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,IAAE,KAAG,EAAE,cAAYA,IAAE,IAAE,KAAK,aAAa,IAAI,CAAC;AAAE,QAAE,IAAE,KAAK,aAAa,IAAI,GAAE,IAAE,CAAC,KAAG,KAAK,aAAa,OAAO,CAAC,GAAE,KAAG,SAAO,KAAK,iBAAe,KAAK,aAAa,GAAE,CAAC,GAAE,KAAK,eAAe,eAAe,GAAE,GAAE,GAAE,CAAC;AAAI,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC;AAAE,MAAE,UAAQ,MAAK,EAAE,WAAS,MAAK,EAAE,WAAS,OAAG,EAAE,QAAM;AAAA,EAAI;AAAA,EAAC,WAAWA,IAAE;AAAC,WAAO,KAAK,YAAYA,EAAC,GAAE,KAAK,QAAQ,IAAIA,EAAC,EAAE,QAAQ;AAAA,EAAO;AAAA,EAAC,YAAYA,IAAE;AAAC,WAAO,KAAK,QAAQ,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE,IAAE,IAAG;AAAC,WAAO,EAAE,EAAE,QAAQ,mBAAmB,KAAGA,GAAE,MAAM,OAAG,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,WAAS,QAAM,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,MAAMA,IAAE;AAAC,MAAE,KAAK,uEAAuE;AAAE,QAAI,IAAEA,GAAE,SAAS;AAAE,WAAO,GAAGA,GAAE,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,GAAE,OAAM,CAAC,GAAE,IAAE,KAAK,cAAc,GAAE,CAACA,EAAC,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAIA,IAAE;AAAC,QAAG,KAAK,mBAAmB,CAACA,EAAC,CAAC,KAAGA,GAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,GAAG,KAAK,QAAQ,IAAIA,GAAE,MAAM,EAAE,MAAM;AAAE,aAAO,KAAK,WAAWA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,6BAA6B;AAAE,aAAO,KAAK,cAAcA,IAAE,IAAGA,GAAE,KAAK;AAAE,QAAI,IAAE,IAAI,GAAGA,GAAE,OAAM,EAAE,GAAE,IAAE,KAAK,cAAc,GAAE,CAACA,EAAC,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,GAAE,GAAE;AAAC,QAAI;AAAE,QAAG,MAAI,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,GAAEA,IAAE,CAAC;AAAA,IAAC;AAAM,UAAE,KAAK,MAAM,GAAEA,IAAE,CAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAM,MAAK,EAAC,QAAO,GAAE,OAAMA,IAAE,OAAM,EAAC;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE,GAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAeA,IAAE,GAAE,CAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,GAAE,KAAK;AAAE,WAAO,KAAK,gBAAgB,GAAE,CAACA,EAAC,GAAEA,GAAE,KAAK;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,GAAE,KAAK,GAAE,IAAE;AAAG,WAAO,KAAK,gBAAgB,GAAE,CAACA,EAAC,GAAEA,GAAE,OAAM,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAGA,GAAE,KAAK,GAAE,GAAG,GAAGA,GAAE,KAAK,CAAC,GAAE,IAAE,EAAC,OAAMA,GAAE,OAAM,OAAM,GAAE,QAAOA,GAAE,OAAM,GAAE,IAAE,CAAC,GAAG,CAAC,GAAE,GAAG,GAAG,CAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAEA,GAAE,OAAM,GAAE,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,UAAS,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,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,CAAC,KAAG,OAAK,IAAE,GAAG,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,GAAC,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAM,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAE,OAAM;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE,GAAE,GAAE,GAAE,IAAE,OAAG,GAAE;AAAC,QAAI,IAAE,KAAK,eAAeA,GAAE,aAAY,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAGA,GAAE,iBAAe,EAAE,WAAS,OAAIA,GAAE,qBAAmB,GAAG,OAAM;AAAC,UAAI,IAAE,KAAG,OAAK,IAAE,GAAGA,GAAE,WAAW;AAAE,QAAE,WAAS,EAAE,IAAI,OAAG,IAAE,CAAC;AAAA,IAAC;AAAC,QAAGA,GAAE,eAAa,SAAO,EAAE,QAAMA,GAAE,cAAa,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,aAAO,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,UAAG,EAAE,UAAQ;AAAY,cAAM,IAAI,MAAM,iIAAiI;AAAE,UAAI,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAG,EAAE,WAAS,MAAK;AAAC,YAAG,CAACA,GAAE,gBAAc,EAAE,cAAc,EAAE,KAAK,KAAG,EAAE,EAAE,UAAU,2BAA2B;AAAE,iBAAM,EAAC,OAAM,EAAE,OAAM,SAAQ,MAAK,WAAU,MAAG,eAAc,EAAE,OAAM;AAAE,QAAAA,GAAE,iBAAe,EAAE,WAAS,MAAG,EAAE,QAAM,EAAE;AAAA,MAAM;AAAC,UAAG,KAAK,YAAY,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,YAAU,CAAC,CAACA,GAAE;AAAa,YAAE,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,GAAGA,IAAE,GAAE,CAAC,GAAE,IAAE,KAAK,iBAAiB,GAAE,MAAI,GAAG,KAAK,OAAMA,IAAE,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,MAAKA,GAAE,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,cAAcA,IAAE,GAAE,GAAE,GAAE,IAAE,OAAG;AAAC,WAAO,IAAE,KAAG,EAAE,CAAC,EAAE,OAAM,KAAK,gBAAgBA,IAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE,GAAE;AAAC,WAAOA,MAAK,KAAK,gBAAc,KAAK,YAAYA,EAAC,IAAE,EAAE,IAAG,KAAK,YAAYA,EAAC;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,OAAG;AAAC,WAAK,MAAM,cAAc,KAAK,YAAY,CAAC,EAAE,YAAY,GAAE,OAAO,KAAK,YAAY,CAAC;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,YAAIA,KAAE,EAAE,EAAE,QAAQ,OAAO;AAAE,UAAE,EAAE,IAAI,SAAQ,KAAE;AAAE,YAAI,IAAE,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;AAAE,YAAG,EAAE,EAAE,IAAI,SAAQA,EAAC,GAAE,IAAE;AAAE,iBAAO;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,YAAYA,IAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE;AAAE,QAAG,KAAG;AAAK;AAAO,QAAI,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,EAAE,IAAI;AAAG,QAAI,IAAE,EAAE;AAAS,QAAG,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,GAAE,EAAE,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,MAAG,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAE,WAAS,EAAE,UAAS,EAAE,WAAS,EAAE,UAAS,EAAE,QAAM,EAAE,OAAM,EAAE,EAAE,IAAI,qBAAqB,IAAE,KAAK,YAAY,EAAE,MAAM,KAAG,EAAE,UAAQ,EAAE,SAAQ,EAAE,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,QAAE,UAAQ;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,qBAAqBA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAIA,EAAC,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,WAAO,KAAG,SAAO,EAAE,SAAO,GAAG,GAAE,CAAC,IAAG,EAAE;AAAA,EAAM;AAAA,EAAC,eAAeA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,KAAK,aAAaA,IAAE,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,eAAeA,IAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE,GAAE;AAAC,WAAOA,GAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,gBAAgB,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,aAAO,CAAC,EAACA,EAAC,KAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,WAAK,iBAAiBA,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,8BAA6B;AAAC,QAAIA,KAAE,CAAC;AAAE,QAAG,KAAK,MAAM,8BAA6B;AAAC,eAAO,CAAC,EAAC,CAAC,KAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,QAAAA,GAAE,KAAK,KAAK,sBAAsB,CAAC,CAAC;AAAE,aAAO,QAAQ,IAAIA,EAAC;AAAA,IAAC,OAAK;AAAC,eAAO,CAAC,EAAC,CAAC,KAAI,OAAO,QAAQ,KAAK,WAAW,GAAE;AAAC,YAAI,IAAE,IAAI,QAAQ,OAAG;AAAC,cAAG;AAAC,iBAAK,iBAAiB,CAAC,GAAE,EAAE,IAAE;AAAA,UAAC,SAAO,GAAE;AAAC,kBAAM;AAAA,UAAC;AAAA,QAAC,CAAC;AAAE,QAAAA,GAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,QAAQ,IAAIA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,sBAAsBA,IAAE;AAAC,WAAO,KAAK,MAAM,GAAG,oBAAoBA,GAAE,cAAa,KAAK,MAAM,6BAA6B,qBAAqB,IAAE,KAAK,iBAAiBA,EAAC,KAAG,MAAM,GAAG,GAAE,KAAK,sBAAsBA,EAAC;AAAA,EAAE;AAAA,EAAC,iBAAiBA,IAAE;AAAC,QAAG,KAAK,MAAM,GAAG,oBAAoBA,GAAE,cAAa,KAAK,MAAM,GAAG,WAAW,MAAI;AAAG,YAAM,QAAQ,IAAI,KAAK,MAAM,GAAG,kBAAkBA,GAAE,YAAY,CAAC,GAAE,KAAK,MAAM,GAAG,mBAAmBA,GAAE,gBAAe,KAAK,MAAM,GAAG,cAAc,MAAI,SAAI,GAAGA,GAAE,QAAO,KAAK,MAAM,GAAG,iBAAiBA,GAAE,cAAc,CAAC,GAAE,IAAI,MAAM,oCAAoC,KAAG,IAAI,MAAM,6CAA6C;AAAE,WAAM;AAAA,EAAE;AAAA,EAAC,sBAAqB;AAAC,aAAQA,MAAK,OAAO,OAAO,KAAK,WAAW,GAAE;AAAC,WAAK,MAAM,SAASA,GAAE,YAAY;AAAE,UAAG,EAAC,oBAAmB,GAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC,IAAE,GAAG,KAAK,OAAMA,GAAE,SAAQA,GAAE,YAAY;AAAE,MAAAA,GAAE,qBAAmB,GAAEA,GAAE,yBAAuB,GAAEA,GAAE,SAAO,GAAEA,GAAE,SAAO,GAAEA,GAAE,mBAAiB,GAAEA,GAAE,0BAAwB,GAAEA,GAAE,sBAAoB;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAwBA,IAAE,GAAE,GAAE;AAAC,IAAAA,GAAE,WAASA,GAAE,YAAU;AAAO,QAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA,IAAE,IAAE,GAAG,EAAE;AAAQ,QAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;AAAE,YAAM,IAAI,MAAM,+RAA+R;AAAE,QAAI,IAAE,EAAE,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,qBAAqB,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAGA,OAAI,aAAWA,OAAI;AAAY,WAAOD;AAAE,MAAGC,OAAI,WAASA,OAAI,QAAO;AAAC,QAAI,IAAEA,OAAI,UAAQ,IAAI,WAAWD,IAAE,MAAM,IAAE,IAAI,WAAWA,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,IAAE,KAAK,MAAMA,IAAE,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAM,UAAM,IAAI,MAAM,iBAAiBC,EAAC,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;AAG1viB,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAE3KA,EAAC;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,YAAYA,IAAE,GAAE,GAAE,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,uBAAqB,MAAG,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,EAAE,2BAA2B,GAAE,CAAC;AAAE,QAAI,IAAE,KAAK,YAAY;AAAO,SAAK,sBAAoB,GAAG,CAAC;AAAE,QAAI,IAAE;AAAG,QAAG;AAAE,UAAG,MAAI,KAAG,EAAE,cAAc,KAAK,WAAW,MAAI;AAAE,YAAE;AAAA;AAAA;AAAA;AAAA;AAAA,eAIzS,IAAE;AAAA,YACR,GAAG,CAAC,CAAC;AAAA,WACP,MAAI;AAAE,aAAK,sBAAoB,KAAG;AAAA;AAAA;AAAA;AAAA,cAIhC,KAAG;AAAA,yCAC0B,KAAK,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,WAG5C;AAAC,YAAI,IAAE,GAAG,UAAS,CAAC;AAAE,aAAK,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,MAI7C;AAAC,SAAK,WAAS;AAAA;AAAA,UAEhBA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAEC,IAAE,IAAE,EAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,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,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,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,iBAAgBC,IAAE,eAAc,GAAE,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,KAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,EAAE,QAAO,CAAC;AAAE,aAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,KAAGA,MAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAG,EAAE,OAAMA,EAAC,IAAE,IAAE,IAAI,GAAG,EAAE,OAAMD,GAAC,GAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAG,EAAC,WAAUA,KAAE,iBAAgBC,IAAE,kBAAiB,IAAE,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,KAAGC,MAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAGA,IAAE,EAAE,OAAM,EAAE,OAAM,CAAC,IAAE,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,EAAE,KAAK,GAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,OAAG;AAAC,MAAGD,QAAI;AAAS,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAO,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAM,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAQ,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAQ,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAY,WAAOC,KAAE,KAAG;AAAG,MAAGD,QAAI;AAAU,WAAOC,KAAE,KAAG;AAAG,QAAM,IAAI,MAAM,cAAcD,GAAC,kDAAkD;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE,GAAE,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,IAAEA,GAAE,CAAC,IAAEA,GAAE,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,IAAAA,GAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,cAAcA,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,MAAI,IAAE,cAAc,EAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,cAAY,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA,UAGnPA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUN;AAAC;AAAE,IAAI,KAAG;AAAgB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,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,IAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,QAAO,EAAE,QAAO,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,EAAE,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,GAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;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,GAAGC,EAAC,GAAE,GAAG,GAAGA,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAMC,IAAE,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE,GAAE,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;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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAiC,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,IAAE;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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,OAAM,IAAE;AAAG,UAAI,SAAO,IAAE,QAAM,MAAI,SAAO,IAAE,eAAc,IAAE,SAAO,MAAI,UAAQ,IAAE,gBAAe,IAAE;AAAO,QAAI,IAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAAqE,UAAI,QAAM,IAAE,aAAW,MAAI,SAAO,IAAE,cAAY,MAAI,QAAM,IAAE,aAAW,MAAI,UAAQ,IAAE;AAAY,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YACrc,MAAI,KAAK;AAAA;AAAA,mBAEF,MAAI,MAAM;AAAA;AAAA;AAAA;AAAA,wBAIL,CAAC;AAAA,cACX,MAAI,KAAK,OAAO,MAAI,KAAK;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOrB,IAAE;AAAO,UAAI,SAAO,IAAE,OAAM,IAAE;AAAA;AAAA;AAAA;AAAA,SAI5B,IAAE,WAAS,MAAI,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,MAAIC,KAAE,CAAC;AAAE,SAAKA,GAAE,WAAS,KAAGA,GAAEA,GAAE,SAAO,CAAC,EAAE,YAAU,KAAG;AAAC,QAAI,IAAEA,GAAE,SAAOA,GAAEA,GAAE,SAAO,CAAC,EAAE,UAAQD,IAAE,CAAC,GAAE,IAAE,EAAE,yBAAyB,CAAC;AAAE,IAAAC,GAAE,KAAK,EAAC,QAAO,GAAE,YAAW,GAAE,SAAQ,KAAK,KAAK,IAAE,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,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,UAAI,SAAO,IAAE,MAAI,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUA,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,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAEC,EAAC,GAAE,EAAE,WAASD,IAAE,UAAQ,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,EAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,QAEv0B,CAAC;AAAA,uBACc,CAAC;AAAA;AAAA;AAAA,EAEnB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE;AAAO,MAAGC,KAAE;AAAE,UAAM,MAAM,sBAAsBA,EAAC,uBAAuB;AAAE,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,IAAI,MAAMA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAEA,IAAE,CAAC,CAAC,IAAE,EAAE,CAAC;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,EAAE,CAAC,CAAC;AAAE,QAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,OAAK;AAAE,YAAM,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,IAAE,EAAE,QAAO;AAAI,QAAE,EAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAGD,IAAE,OAAMC,EAAC,IAAE,IAAI,GAAGD,IAAE,OAAMC,EAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAEA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,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,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcA,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,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;AAAM,QAAE,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,GAAEC,IAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAEC,GAAE,MAAM,QAAO,IAAE,IAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAEC,GAAE,MAAM,IAAE,CAAC,IAAEA,GAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAEC,GAAE,MAAM,IAAE,CAAC,IAAEA,GAAE,MAAM,IAAE,CAAC,GAAE,IAAED,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAEC,GAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BD,IAAE,MAAM,MAAM,GAAE,EAAE,GAAEC,GAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BD,IAAE,KAAK,QAAQC,GAAE,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,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,IAAE,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,UAAI,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,OAAMC,GAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,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;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM;AAAE,WAAO,EAAE,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,GAAE,EAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,gBAAc,EAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,KAAK,gBAAc,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,IAAEC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,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,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,CAAC,GAAE,CAAC,GAAE,SAAQ,EAAC,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,SAAO,EAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAM,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,KAAG,QAAM,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAM,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,KAAG,QAAM,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAEA;AAAE,SAAG,KAAK,cAAc,KAAK,cAAc,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,MAAI,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,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,EAAE,OAAOA,GAAE,SAAO,GAAE,MAAI,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,0CAA0C;AAAE,QAAI,IAAEA,GAAEA,GAAE,SAAO,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,SAAK,cAAYA,GAAE,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;AAAM,UAAE,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,OAAO,CAAC;AAAA;AAAA;AAAA,2BAGpB,CAAC;AAAA;AAAA,8BAEE,CAAC;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,KAAEC,IAAE,GAAE,IAAE,MAAK;AAAC,MAAI,IAAEA,GAAE,MAAM,CAAC,GAAE,IAAEA,GAAE,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,GAAE,GAAE,KAAG,IAAI,GAAE,IAAE,CAACA,EAAC;AAAE,OAAG,QAAM,EAAE,KAAK,CAAC;AAAE,MAAI,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,GAAGA,KAAEC,IAAE,GAAE,CAAC;AAAE,SAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,IAAE,MAAK;AAAC,MAAI,IAAE,KAAG,OAAK,EAAE,QAAMA,GAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,yBAAyB,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,KAAG,IAAI,GAAE,IAAE,KAAG,OAAK,CAACA,EAAC,IAAE,CAACA,IAAE,CAAC,GAAE,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,WAASC,GAAE,MAAM,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAEC,IAAE,GAAE,CAAC;AAAE,WAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,CAAC;AAAE,MAAG,EAAE,2BAA2B,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,GAAEA,GAAE,MAAM,MAAM,GAAE,CAAC,EAAE,EAAE,QAAQ,mBAAmB,KAAGA,GAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAED,IAAE,QAAQ,IAAIC,GAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAEA;AAAE,UAAI,IAAED,IAAE,aAAaC,EAAC,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,SAAQD,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,KAAEC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,GAAG,GAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,GAAG,GAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,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,YAAYA,IAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,MAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ;AAAK,SAAK,cAAYA,GAAE;AAAS,QAAI,IAAE,MAAI,OAAM,IAAE,cAAcA,GAAE,QAAQ,YAAYA,GAAE,OAAO,YAAYA,GAAE,UAAU,QAAO,IAAE,SAASA,GAAE,OAAO,YAAYA,GAAE,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,kCAGWA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGWA,GAAE,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,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAAqE,UAAI,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,8BAMbA,GAAE,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,gCAGWA,GAAE,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,YAAYA,IAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,MAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,QAAQ,OAAM,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ;AAAK,SAAK,cAAYA,GAAE;AAAS,QAAI,IAAE,MAAI,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,kCAGWA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGWA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIR,CAAC;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA,sCAGWA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAUnB,CAAC;AAAA;AAAA;AAAA,qCAGQ,IAAE,IAAE,cAAcA,GAAE,OAAO,YAAYA,GAAE,QAAQ,YAAYA,GAAE,OAAO,YAAYA,GAAE,UAAU,UAAQ,UAAUA,GAAE,QAAQ,YAAYA,GAAE,OAAO,YAAYA,GAAE,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,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAAqE,UAAI,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,8BAMbA,GAAE,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,gCAGWA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,oBACf,CAAC;AAAA;AAAA;AAAA,kCAGaA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;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;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,QAAQ,MAAK,IAAE,KAAG,IAAE;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,oCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,mBAChB,CAAC;AAAA,kDAC8B,CAAC;AAAA;AAAA,sCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa3C;AAAC;AA1C21B,IA0Cz1B,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAE,IAAE,IAAEA,GAAE,QAAQ,OAAM,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,QAAQ,MAAK,IAAE,KAAG,IAAE,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,oCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEbA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2BA,IAAE,CAAC,GAAE,EAAE,2BAA2BA,IAAE,CAAC;AAAE,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAYA,IAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2BA,IAAE,CAAC,GAAE,EAAE,2BAA2BA,IAAE,CAAC;AAAE,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAYA,IAAE,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,SAAQC,IAAE,OAAM,EAAC,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,IAAE;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,SAAOC,GAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAArwB,IAAuwB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAYA,IAAE,KAAK,OAAKA,GAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI;AAAE,SAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,GAAE,IAAEA,GAAE,IAAI,CAAC,GAAE,MAAI,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG;AAAE,QAAE;AAAA,UACjlC,CAAC;AAAA,UACD,CAAC;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;AAAE,WAAM;AAAY,MAAGA,OAAG;AAAE,WAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,CAAAC,OAAG,eAAaA,EAAC,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBD,GAAC,uBAAuB;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYC,IAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,KAAK,OAAKA,GAAE,QAAO,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAI,IAAE,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,MAAMA,GAAE,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,MAAMA,GAAE,KAAK,OAAK,CAAC,CAAC;AAAA,YACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,qBACL,CAAC;AAAA,gBACN,EAAE,KAAK,OAAK,CAAC,CAAC,MAAMA,GAAE,KAAK,OAAK,CAAC,CAAC;AAAA,cACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,uBACL,CAAC;AAAA;AAAA;AAAA,OAGlB,IAAE,KAAK,QAAM,IAAE;AAAA,cACP,CAAC,IAAIA,GAAE,IAAI,CAAC,GAAE,MAAI,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAKA,GAAE,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,UAEP,CAAC;AAAA,UACD,CAAC;AAAA,UACD,CAAC;AAAA;AAAA,UAED,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAQ,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAEA,IAAE,KAAK,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,OAAO,GAAE,CAAC,GAAE,EAAE,WAAS,GAAE,EAAE,QAAM,GAAE,EAAE,QAAMA,IAAE;AAAM,MAAI,IAAE,GAAG,kBAAkBC,IAAE,EAAE,eAAeD,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,UAAS,EAAC,IAAE,EAAE,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,WAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAtpB,IAAwpB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,GAAE,IAAE,EAAE,EAAE,UAAU,eAAe;AAAE,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,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,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAEC,IAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAwB,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,GAAE,IAAEC,GAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAQ,WAAO,GAAG,GAAE,CAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,EAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1kF;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;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,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAatX;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,SAAM,EAAC,QAAOA,GAAE,QAAO,OAAMA,GAAE,OAAM,OAAMD,IAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,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,SAAO,EAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgBA,IAAE,CAAC,GAAE,KAAK,gBAAcA,GAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,IAAI,MAAMA,GAAE,SAAO,CAAC;AAAE,MAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,CAAC;AAAE,QAAI,IAAE,CAAC,YAAY,EAAE,CAAC,CAAC,6BAA6B;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,QAAE,KAAK,iBAAiB,EAAE,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,EAAE,EAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgBA,IAAE,CAAC;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,gBAAcA,GAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,IAAI,MAAMA,GAAE,SAAO,CAAC;AAAE,MAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,CAAC;AAAE,QAAI,IAAE,EAAE,CAAC,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,QAAQC,EAAC;AAAE,SAAOD,IAAE,IAAI,CAAC,GAAE,MAAI,MAAI,IAAE,GAAG,CAAC,MAAM,CAAC,KAAG,CAAC,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAEA,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAMC,EAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,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,GAAEC,EAAC,GAAE,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,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,WAAO,EAAE,gBAAgB,GAAEA,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,GAAEC,IAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAEA,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,QAAE,8BAA8B,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,GAAEA,EAAC;AAAE,WAAO,EAAE,gBAAgB,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAEA,IAAE,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAEC,EAAC;AAAE,SAAM,EAAC,WAAUD,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAMC,EAAC,CAAC,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAEC,GAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgBA,GAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO,EAAE,eAAe,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAS,QAAI,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,KAAK,MAAMA,GAAE,aAAW,CAAC,IAAE,GAAE,IAAEA,GAAE,aAAW,GAAE,IAAEA,GAAE,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,IAAE,IAAE,oCAAkC;AAAG,SAAG,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,gCAENA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,kCAIR,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAENA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAS,QAAI,IAAEA,GAAE,QAAQ,OAAM,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,KAAK,MAAMA,GAAE,aAAW,CAAC,IAAE,GAAE,IAAEA,GAAE,aAAW;AAAE,SAAK,WAAS;AAAA,oCACnU,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,iCAChB,CAAC,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,gCAENA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAENA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,yCACI,CAAC;AAAA;AAAA,oCAENA,GAAE,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,YAAYA,IAAE,IAAE,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,cAAYA,GAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE5Y,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;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,8BACEA,GAAE,UAAU;AAAA;AACjC,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;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;AAAM,YAAE,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,2BACFA,GAAE,UAAU;AAAA,8BACT,CAAC;AAAA;AAAA,cAElB,IAAE,IAAE,MAAI,KAAG;AAAA,kCACU,IAAE,CAAC;AAAA,8BACP,IAAE,CAAC;AAAA,6BACJA,GAAE,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,IAAE,IAAE,oCAAkC;AAAG,SAAG,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,YAAYA,IAAE,GAAE;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,cAAYA,IAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAG,EAAC,YAAW,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,sBAAoB,wDAAsD,mBAAmBA,GAAE,CAAC,CAAC,aAAaA,GAAE,CAAC,CAAC,OAAM,IAAE;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,aAAG;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,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE;AAAO,SAAO,KAAG,IAAEC,KAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,GAAEA,IAAE,IAAE,CAAC,CAAC,IAAE,CAAC,GAAGA,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAE,IAAE,CAAC,GAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,CAAC,IAAE,CAACC,MAAG,MAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAOC,IAAE,UAAS,GAAE,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,IAAE,EAAE,YAAW,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,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,QAAOA,IAAE,QAAO,OAAM,CAAC,GAAE,GAAE,EAAE,UAAU,GAAE,OAAMA,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,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,EAAE,YAAW,EAAE,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,QAAM,EAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,QAAM,EAAE,UAAS,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,YAAU,EAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAAC,EAAE,WAAU,GAAE,EAAE,UAAU,IAAE,CAAC,EAAE,WAAU,EAAE,YAAW,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,EAAE,YAAW,EAAE,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,OAAM,EAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAOC,IAAE,UAAS,GAAE,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,IAAE,GAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,CAAC,EAAE,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,GAAEA,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,cAAcA,GAAE,KAAK,IAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAACD,IAAE,OAAM,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAU,GAAE,CAAC,EAAE,cAAY,EAAE,UAAU,GAAE,CAAC,EAAE,QAAQ,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACA,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,CAAC,EAAE,WAAU,GAAE,EAAE,WAAW,IAAE,CAAC,EAAE,WAAU,EAAE,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,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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;AAAS,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,EAAC,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,QAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB;AAAE,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,EAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,QAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAYA,GAAE;AAAY,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,eAAa;AAAe,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAYvxIA,GAAE,SAAS;AAAA,kCACPA,GAAE,SAAS;AAAA,iCACZ,CAAC,MAAM,CAAC;AAAA;AAAA,kCAEPA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIRA,GAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEPA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAa,gBAAe,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,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,gCAOvB,CAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtB,CAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMrB,CAAC;AAAA;AAAA,oCAEQA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAYA,GAAE;AAAY,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,QAAQ,OAAM,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ;AAAK,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAWrLA,GAAE,SAAS;AAAA,kCACPA,GAAE,QAAQ;AAAA,iCACX,CAAC,MAAM,CAAC;AAAA;AAAA,kCAEPA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIPA,GAAE,SAAS;AAAA,mCACZ,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEPA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIRA,GAAE,QAAQ;AAAA,qCACX,CAAC,MAAM,CAAC;AAAA;AAAA,sCAEPA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa1C;AAAC;AApIkmI,IAoIhmI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,IAAE,IAAEA,GAAE,QAAQ,OAAM,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,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,gCAcd,CAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKrB,CAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMtB,CAAC;AAAA;AAAA,oCAEQ,CAAC;AAAA,oDACe,CAAC;AAAA;AAAA,wCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMrB,CAAC;AAAA;AAAA,sCAEQA,GAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,WAAU,MAAK,OAAM,CAAC,GAAE,KAAK,cAAYA,GAAE,SAAQ,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,QAAQ;AAAK,SAAK,WAAS;AAAA,iCACvmB,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYR,CAAC;AAAA;AAAA,oCAEGA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA,yBAItB,CAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,2BACR,CAAC;AAAA;AAAA;AAAA,oDAGwBA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,uDAKPA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,sCAK3BA,GAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAiBbA,GAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCASbA,GAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,WAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,QAAQ,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAE,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,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,YAAYC,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,KAAGA,IAAE,KAAK,cAAY,GAAE,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,KAAEC,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAG,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC,OAAOA,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC,OAAOA,EAAC,OAAOA,EAAC;AAAK,QAAM,IAAI,MAAM,cAAc,CAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAG,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,QAAM,IAAI,MAAM,cAAc,CAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAEA;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE;AAAE,UAAM,IAAI,MAAM,mDAAmDA,GAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,QAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE;AAAE,QAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,YAAU,GAAE,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,uBAEnB,CAAC;AAAA,+BACO,CAAC;AAAA,uBACT,CAAC;AAAA,+BACO,CAAC;AAAA,mCACG,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,IAAE,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,cAAYA,GAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAYA,GAAE,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,IAAE,IAAE,oCAAkC;AAAG,SAAG,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,YAAYA,IAAE,IAAE,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,cAAYA,GAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAEA,GAAE,cAAYA,GAAE,YAAW,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE1a,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;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;AAAI,WAAG;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;AAAM,YAAE,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,IAAE,IAAE,oCAAkC;AAAG,SAAG,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAYA,GAAE;AAAY,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,QAAQ,KAAI,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,cAAYA,GAAE;AAAW,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOn3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKKA,GAAE,SAAS;AAAA,kCACPA,GAAE,SAAS;AAAA,iCACZ,CAAC,MAAM,CAAC;AAAA;AAAA,kCAEPA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIRA,GAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEPA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxC;AAAC;AAnC2rB,IAmCzrB,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,QAAQ,MAAK,IAAEA,GAAE,cAAYA,GAAE;AAAW,SAAK,WAAS;AAAA,iCAClN,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYR,CAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtB,CAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEbA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAACA,IAAEA,EAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvpB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAYA,GAAE;AAAS,QAAG,EAAC,UAAS,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,EAAC,IAAEA,IAAE,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,kCAEA,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,MAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAG,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM;AAAE,QAAI,IAAE,EAAE,CAAC;AAAE,SAAK,cAAY;AAAE,QAAI,IAAE,IAAE,SAAS,KAAK,EAAE,KAAG,UAAU,KAAK,EAAE,IAAG,IAAE,IAAE,GAAG,CAAC,OAAK,OAAM;AAAE,QAAGA,OAAI;AAAO,UAAE;AAAA,aAA4CA,OAAI;AAAO,UAAE;AAAA;AAAyC,YAAM,IAAI,MAAM,sDAAsDA,EAAC,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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,QAAO,GAAEC,EAAC,GAAE,IAAE,IAAI,GAAG,QAAO,GAAEA,EAAC,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,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,OAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKv+B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;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,GAAEC,GAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC;AAAE,WAAOA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC;AAAE,QAAI,IAAEA,GAAE,CAAC;AAAE,SAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK3a,CAAC;AAAA;AAAA,uCAEa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQC,GAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,IAAEC,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAEA;AAAE,SAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDAMhK,CAAC,OAAO,CAAC;AAAA;AAAA,wBAExC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa;AAAG,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAEA;AAAE,SAAK,cAAYA,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAe7H,CAAC,OAAO,CAAC;AAAA,4BACX,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgB7B,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,eAAe,GAAE,OAAO;AAAE,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAM,GAAG,QAAO,EAAE,MAAM,yBAAyB,EAAE,WAAW,EAAE,MAAM,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,YAAY,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,OAAO;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,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;AAAS,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,GAAE,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,QAAE,EAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB;AAAE,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,GAAE,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,QAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,IAAE,EAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,WAASA,IAAE,KAAK,UAAQ,GAAE,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;AAAI,WAAG;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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAGA,IAAE,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE33B,CAAC;AAAA;AAAA,oDAEyCA,GAAE,CAAC,CAAC;AAAA,oCACpB,CAAC;AAAA;AAAA;AAAA,EAEhC;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,UAAI,IAAE,EAAE,KAAK,OAAO,IAAE,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC;AAAE,MAAG,EAAE,EAAE,IAAI,OAAO,GAAE;AAAC,QAAI,IAAE,EAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA8B,KAAG;AAAA;AAAA;AAAjC,IAEtuC,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,IAAG,OAAM,OAAM,CAAC;AAFiqC,IAE/pC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA+B,KAAG;AAAA;AAAA;AAAlC,IAE5H,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,OAAM,QAAO,eAAc,GAAE,CAAC;AAFuD,IAErD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,MAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA+C,KAAG,GAAG,EAAC,WAAU,IAAG,OAAM,OAAM,CAAC;AAAhF,IAAkF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;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,IAE7nB,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAFqjB,IAEnjB,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,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOC,GAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAI,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE;AAAE,SAAK,cAAYA;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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,GAAE,IAAEA,GAAE,CAAC,IAAE;AAAE,SAAK,cAAYA;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,cAAa,eAAc,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,QAAMA,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,OAAK,GAAE,KAAK,QAAM,GAAE,KAAK,OAAK,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQvd,KAAK,KAAK;AAAA,oDACY,CAAC;AAAA,yCACZ,KAAK,KAAK;AAAA,0BACzB,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAA5K,IAA8K,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcA,EAAC,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,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,mBAAmB,CAAC,CAAC,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;AAAI,UAAE,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;AAAM,UAAE,GAAG,GAAE,GAAE,CAAC;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,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,cAAc,CAAC,GAAE,GAAE,EAAE,KAAK;AAAE,QAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,SAAO;AAAA,EAAC;AAAM,QAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,KAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;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;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,gBAAe,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,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,gDAC6B,CAAC;AAAA;AAAA,oCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEbA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAYA,GAAE;AAAQ,QAAI,IAAEA,GAAE,aAAY,IAAEA,GAAE,cAAa,IAAEA,GAAE,aAAY,IAAEA,GAAE,eAAc,IAAEA,GAAE,gBAAe,IAAEA,GAAE,eAAc,IAAEA,GAAE,sBAAqB,IAAEA,GAAE,uBAAsB,IAAEA,GAAE,sBAAqB,IAAE,IAAE,IAAEA,GAAE,QAAQ,OAAM,IAAE,IAAE,IAAEA,GAAE,QAAQ,KAAI,IAAE,IAAE,IAAEA,GAAE,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,gDAC4B,CAAC;AAAA;AAAA,oCAEbA,GAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEbA,GAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEbA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,SAAS;AAAE,MAAE,IAAI,GAAG,GAAE,OAAM,MAAG,MAAGC,EAAC;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,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAEC,IAAE,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,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcA,EAAC,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,OAAM,EAAC,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,QAAOA,KAAE,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAEC,IAAE,IAAE,GAAE,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;AAAI,UAAE,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;AAAM,UAAE,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;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC,EAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAM,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,KAAG,QAAM,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAEA,GAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAEA,GAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,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,SAAQC,IAAE,OAAM,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOC,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,CAACA,IAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQzN,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAUP,IAAE,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,IAAoGI,MAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGL,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,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;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQ,GAAE,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,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAG,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,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,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,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,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAE,EAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAS,GAAE,KAAK,cAAY,CAACA,IAAE,CAAC,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAlX,IAAoX,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,GAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAMA,GAAE,CAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,CAAC,EAAE,OAAM,IAAEA,GAAE,CAAC,EAAE;AAAM,EAAAA,GAAE,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,IAAEA,GAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAEA,GAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAEA,GAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,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;AAAI,WAAG;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,QAAE,EAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,QAAO,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAEC,IAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,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,OAAG,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAEC,IAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAEC,IAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,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,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,GAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,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;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,YAAYA,IAAE,GAAE,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,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,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;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAEA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,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,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,YAAYA,IAAE,GAAE,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,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,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,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAEA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAEA,GAAE;AAAO,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,QAAG,KAAK,cAAYA,IAAE,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA;AAAA;AAAA,2BAG7YA,GAAE,CAAC,CAAC;AAAA;AAAA;AAEvB;AAAA,IAAM;AAAC,QAAI,IAAE,OAAG,EAAE,QAAQ,CAAC,MAAI,MAAIA,GAAE,CAAC,MAAI,IAAE,GAAGA,GAAE,CAAC,CAAC,aAAa,CAAC,UAAQ,UAAU,CAAC,KAAI,IAAEA,GAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAEA,GAAE;AAAO,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,SAAK,cAAYA;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,uCAIrUA,GAAE,CAAC,CAAC;AAAA,cAC7BA,GAAE,CAAC,CAAC;AAAA,eACH,CAAC;AAAA,2CAC2BA,GAAE,CAAC,CAAC;AAAA,kBAC7BA,GAAE,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,IAAEA,GAAE,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,aAAO,EAAE,QAAQ,CAAC,MAAI,MAAIA,GAAE,CAAC,MAAI,IAAE,GAAGA,GAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,SAAO,GAAG,EAAE,CAAC,CAAC;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,OAAM,CAAC;AAAE,QAAI,IAAEA,GAAE,CAAC,GAAE,IAAEA,GAAE,CAAC;AAAE,SAAK,cAAYA;AAAE,QAAI,IAAE;AAAG,WAAO,KAAG,WAAS,IAAE,uBAAuB,EAAE,QAAQ,CAAC,CAAC,MAAI,IAAE;AAAA,2BACl9B,EAAE,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,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAEC,IAAE,IAAE,GAAE,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,YAAYA,IAAE,GAAE,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,IAAE,IAAE,IAAE,eAAa;AAAU,SAAK,WAAS;AAAA,UAC/kB,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmBA,EAAC;AAAA;AAAA,kCAEC,CAAC;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,YAAYA,IAAE,GAAE,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,IAAE,IAAE,IAAE,eAAa,WAAU,IAAE,IAAE,IAAE,mBAAiB;AAAU,SAAK,WAAS;AAAA,UACpd,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmBA,EAAC;AAAA;AAAA,kCAEC,CAAC;AAAA,oCACC,CAAC;AAAA,6CACQ,CAAC;AAAA,4BAClB,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,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,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,kBAAiB,QAAQ,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,aAAY,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,CAACA,IAAE,CAAC;AAAE,QAAI,IAAE,0BAAyB,IAAE,uBAAuB,KAAK,KAAK,KAAK,KAAK,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,GAAG,GAAE,KAAK,cAAY;AAAE,QAAI,GAAE;AAAE,QAAG,IAAE;AAAE,YAAM,MAAM,kBAAkB,CAAC,uBAAuB;AAAE,QAAG,MAAI;AAAE,UAAE,SAAQ,IAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAEA,MAAG,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAA/rB,IAAisB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WAC/7B,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UAClD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,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,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,uDAAuD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,gBACjxC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,gBACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,eAC1a,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,eACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,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,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,GAAE,UAAS,CAAC;AAAE,SAAO,EAAE,eAAe,EAAE,OAAM,UAAS,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAI,EAAC,QAAOD,KAAE,OAAMC,IAAE,SAAQ,EAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,KAAG;AAAA,mCACp5DC,GAAE,KAAK;AAAA,KACtC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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;AAAE,UAAE;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,IAAIA,EAAC;AAAA,QACnB,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGnB,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,QAAE,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,8BAA8B,CAAC;AAAA,EAAC,WAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAE,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,QAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAEC,IAAE,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;AAAE,SAAM,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAE,EAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAAC,EAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAE,EAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,IAAIA,EAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE3/B,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAIC,KAAED,IAAE;AAAO,MAAGC,KAAE;AAAE,UAAM,MAAM,iBAAiBA,EAAC,uBAAuB;AAAE,MAAGA,OAAI;AAAE,WAAM,eAAeD,IAAE,CAAC,CAAC;AAAI,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,MAAE,KAAK,QAAQ,EAAE,CAAC,CAAC,KAAKA,IAAE,CAAC,CAAC,GAAG;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,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,WAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;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,cAAYA,IAAE,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,YAAYA,IAAE;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,cAAYA,IAAE,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,KAAEC,IAAE;AAAC,EAAAA,OAAI,QAAMD,IAAE,8BAA8BC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE;AAAE,SAAKA,KAAED;AAAG,IAAAC,MAAG;AAAE,SAAOA;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,IAAE,KAAG,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAAC,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAE,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAE,WAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAE,EAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI;AAAE,WAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAE,IAAE,EAAE,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,SAAQ,EAAC,CAAC;AAAE,OAAG,GAAG,GAAE,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,QAAE,EAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,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,QAAE,EAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAG,GAAE,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,SAAQ,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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,4CAUgBA,EAAC,+BAA+B,CAAC;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,mDAIY,CAAC;AAAA,mDACDA,EAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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;AAAI,UAAI,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,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,YAAY;AAAE,QAAI,IAAEA,GAAE,YAAW,IAAEA,GAAE,WAAU,IAAEA,GAAE,QAAO,IAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,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,IAAE,EAAE,cAAc,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,QAAG,EAAE,KAAK,CAAC,GAAE,EAAE,MAAM,CAAC,MAAI;AAAE,aAAO;AAAE,QAAI,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,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,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAGI,KAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQL,OAAK;AAAI,KAAGA,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,6DAA6D;AAAE,MAAG,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,EAAE,MAAM,WAAS;AAAE,YAAM,IAAI,MAAM,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,QAAE,EAAE;AAAA,EAAE;AAAC,MAAI,IAAE,KAAG,OAAK,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,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,IAAE,EAAE,WAAW,CAAC,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,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,KAAEC,IAAE;AAAC,MAAI;AAAE,WAAS,EAAE,GAAE;AAAC,QAAE,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,OAAMC,MAAG,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,WAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAG,EAAE,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,KAAEC,IAAE,GAAE;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,IAAE,KAAG,OAAK,IAAE,EAAE,OAAM,IAAE,EAAE,2BAA2B,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,QAAG,EAAE,cAAc,CAAC,MAAI;AAAE,aAAO;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,YAAWA,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAWC,GAAE,CAAC,EAAE,OAAMA,GAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAEA,GAAE,IAAI,OAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,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,GAAEC,GAAC,GAAE,SAAQ,EAAC,IAAED;AAAE,MAAGC,GAAE,UAAQ;AAAS,WAAO,GAAG,EAAE,SAASA,GAAE,MAAM,GAAEA,GAAE,OAAMA,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,WAAWA,GAAE,OAAMA,GAAE,KAAK,GAAE,IAAE,EAAE,mBAAmBA,EAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,IAAIC,GAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,MAAI,MAAI,IAAE;AAAI,MAAI,IAAE,IAAIA,GAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE,EAAC,QAAOA,GAAE,EAAE,QAAO,OAAM,GAAE,OAAMA,GAAE,EAAE,MAAK;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAOA,IAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,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,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,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAEA,IAAEC,GAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,IAAID,KAAEC,IAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,IAAAA,IAAE,CAAC,MAAI,KAAG,EAAE,KAAKA,IAAE,CAAC,CAAC,GAAEA,IAAEC,GAAE,CAAC,CAAC,MAAI,KAAG,EAAE,KAAKA,GAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,KAAG,MAAI,MAAI,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,OAAK,IAAE;AAAG,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG,WAAU,IAAG;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAEA,IAAE,MAAM,QAAO,IAAE,EAAE,eAAeC,IAAE,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;AAAI,QAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAI,IAAE,EAAE,UAAU,IAAIA,IAAE,MAAM,EAAE;AAAG,MAAE,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,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,MAAIC;AAAE,WAAS,EAAE,GAAE;AAAC,IAAAA,KAAE,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,WAAOC,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,EAAE,YAAY,EAAE,MAAM,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,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,IAAG,KAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAEC,GAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,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;AAAe,UAAM,IAAI,MAAM,6CAA6C,EAAE,UAAU,+BAA+B;AAAE,MAAG,EAAE,kBAAgB,KAAG,EAAE,mBAAiB;AAAE,UAAM,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,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,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,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,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,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,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,GAAEC,GAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiBC,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,iBAAiBA,GAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,SAASA,GAAE,MAAM,GAAE,IAAE,EAAE,WAAW,GAAEA,GAAE,KAAK,GAAE,IAAE,EAAE,eAAeA,GAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkB,GAAE,CAAC;AAAE,WAAOA,GAAE,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,MAAGA,GAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAEA,GAAE,OAAMA,GAAE,KAAK;AAAE,WAAO,EAAE,cAAY,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,mBAAmB,CAAC,GAAE,IAAEA,GAAE,MAAM;AAAO,MAAG,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAEA,GAAE,OAAMA,GAAE,KAAK;AAAE,MAAE,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAEC,IAAE,GAAE,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,IAAEA,KAAE;AAAE,MAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE,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;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAEA,KAAE,IAAE,IAAE;AAAE,QAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,IAAC;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE,GAAE,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;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAEA,KAAE,IAAE,IAAE,IAAE,IAAE;AAAE,UAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,MAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,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,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAOA,GAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAEC,IAAE,IAAE,EAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAO,EAAE,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,GAAEC,GAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAWC,GAAE,OAAM,CAAC,GAAE,IAAE,EAAE,mBAAmBA,EAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,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,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,eAAeA,IAAE,MAAM,MAAKC,GAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgBA,GAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,GAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,GAAEA,GAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,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,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAE,QAAM;AAAE,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,cAAY,EAAE,uBAAuB,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,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,OAAG,EAAE,mBAAmB,CAAC,CAAC,GAAE,IAAE,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,GAAE,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;AAAe,UAAM,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,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,KAAGC,GAAE,WAAW,EAAE,SAAQ,SAAS,GAAE,KAAGA,GAAE,UAAU,IAAI,GAAG,MAAM,EAAE,IAAG,KAAGA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAGA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,yCAAyC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,aAAY,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,SAAQ,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,IAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,GAAE,SAAS,GAAE,IAAEA,GAAE,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,QAAMA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,WAAU,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,UAAS,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,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,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAOA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,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,IAAEC,GAAE,WAAW,GAAE,SAAS,GAAE,IAAEA,GAAE,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,IAAEA,GAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,GAAE,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;AAAe,UAAM,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,+DAA+D,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE;AAAM,UAAM,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,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE;AAAM,UAAM,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,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAE,OAAG,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,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,OAAMC,IAAE,OAAM,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,OAAM,EAAC,EAAC,IAAEA;AAAE,MAAE,KAAG,EAAE,WAAW,CAAC;AAAE,MAAI,IAAE,EAAE,WAAWC,IAAE,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,KAAK,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,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,MAAK,GAAE,UAAS,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,KAAG,OAAKA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAE,KAAG,OAAKA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAEA,GAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAEA,GAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,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;AAAE,YAAM,IAAI,MAAM,sDAAsD,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI;AAAE,YAAM,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;AAAO,UAAM,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,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;AAAE,YAAM,IAAI,MAAM,+DAA+D,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI;AAAE,YAAM,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;AAAO,UAAM,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,SAAQC,IAAE,QAAO,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,mBAAmB,GAAE,CAAC,GAAE,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,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,IAAEC,GAAE,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,SAAQA,GAAC,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,SAAQA,GAAC,CAAC,GAAE,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS,GAAE,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,MAAM,SAAO,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,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,GAAEA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,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,GAAEC,GAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAIC,GAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAWA,GAAE,OAAM,SAAS;AAAE,MAAG,EAAE,cAAcA,GAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAGA,GAAE,KAAK,GAAE,GAAE,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,OAAMC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,IAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAS;AAAE,SAAO,GAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,qDAAqD;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAEC,GAAE,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,IAAE,GAAE,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;AAAe,UAAM,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,EAAE,UAAS,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,EAAE,UAAS,OAAO;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,SAAQA,IAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAI,MAAI,IAAEA,GAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO,EAAE,UAAQ,aAAWA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,UAAS,GAAE,MAAK,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEC,GAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAIA,GAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAEA,GAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAWA,GAAE,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,GAAEA,GAAE,MAAM,QAAO,GAAGA,GAAE,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,SAAQC,IAAE,QAAO,EAAC,QAAO,EAAC,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,IAAED,KAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,SAAO,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAE,GAAE,GAAE,GAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,KAAG,EAAE,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,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,WAAWD,IAAE,KAAK,OAAO,QAAOC,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,SAAOD,IAAE,KAAK,MAAMC,EAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC;AAAC;AAAC,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAGA,IAAE,CAAC;AAAE,SAAOA,GAAE,KAAK,MAAM,CAAC,GAAEA,GAAE,KAAK,MAAM,CAAC,GAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,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,GAAGA,IAAE,CAAC;AAAE,EAAAA,GAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,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,GAAGA,IAAE,CAAC;AAAE,EAAAA,GAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAEC,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,GAAEC,GAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAWC,GAAE,OAAMA,GAAE,KAAK;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,GAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAMA,GAAE,CAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,CAAC,EAAE,OAAM,IAAEA,GAAE,CAAC,EAAE;AAAM,EAAAA,GAAE,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,IAAEA,GAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,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,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEC,GAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,MAAG,EAAE,cAAcA,GAAE,KAAK,MAAI;AAAE,WAAO,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAMA,GAAE,MAAK,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,UAAU,IAAIA,GAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAEA,GAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAWA,GAAE,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,GAAEA,GAAE,MAAM,QAAO,GAAGA,GAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,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,EAAE,OAAM,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,CAAC,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,GAAE,WAAW,CAAC,EAAE,MAAM,GAAE,CAAC;AAAE,SAAOA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,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,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,IAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAEA,GAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAMA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,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,IAAG,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,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,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,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,IAAEC,GAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,IAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAMA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,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,IAAG,GAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,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,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,SAAQ,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,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,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,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,+EAA+E,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO;AAAE,WAAS,EAAE,GAAE;AAAC,WAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,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,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,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,SAAQC,IAAE,QAAO,EAAC,GAAE,EAAC,EAAC,IAAED,KAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,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,SAAQC,IAAE,QAAO,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,GAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,MAAM,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,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,MAAGA,GAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAMA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,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,SAAQA,GAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQA,GAAC,CAAC,GAAEA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,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,SAAQC,IAAE,QAAO,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACrr9D,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEA,GAAE,WAAW,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAEA,GAAE,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,KAAKA,GAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAKA,GAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAI,IAAE,MAAM,KAAKA,GAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAKA,GAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAGA,GAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAMA,GAAE,YAAY,EAAE,MAAM,GAAEA,GAAE,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,KAAEC,IAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,QAAO,IAAE,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;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,WAAW,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,GAAG,EAAE,KAAK,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAEC,IAAE,CAAC;AAAE,MAAI,IAAE,EAAE,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,MAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAM,EAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,GAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,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;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAE,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,IAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,GAAE,YAAY,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEA,GAAE,WAAW,GAAE,SAAS,GAAE,IAAEA,GAAE,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,IAAEA,GAAE,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,SAAQA,IAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,IAAEC,GAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,GAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEA,GAAE,WAAW,CAAC,EAAE,MAAM,GAAE,QAAQ,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAEA,GAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAOA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAE,GAAE,EAAC,WAAU,EAAC,IAAE,GAAE,IAAEC,GAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,GAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAEA,GAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,EAAAA,GAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC;AAAE,MAAI,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,QAAQ,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAEA,GAAE,WAAW,CAAC,CAAC,GAAE,OAAO;AAAE,SAAOA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,EAAC,IAAE,GAAE,IAAEC,GAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAEA,GAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAOA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAEA,EAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAGA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,IAAE,GAAE,IAAEC,GAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,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,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,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,SAAQC,IAAE,OAAM,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,GAAE,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,IAAEA,GAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,WAAW,GAAE,OAAO,GAAE,IAAEA,GAAE,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,SAAQC,IAAE,QAAO,GAAE,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,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAEC,GAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,GAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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;AAAI,UAAI,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;AAAI,MAAE,CAAC,IAAE,GAAE,EAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,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,GAAEC,GAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAWC,GAAE,OAAMA,GAAE,KAAK;AAAE,SAAO,EAAE,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;AAAI,KAAGA,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;AAAE,WAAM;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,YAAYC,IAAE;AAAC,UAAM,GAAE,KAAK,OAAKA,IAAE,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,MAAMA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,mBAAkB;AAAE,WAAO,KAAK,KAAK,GAAEA,IAAE,GAAE,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,UAAU,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAI,IAAE,EAAE,IAAI;AAAE,WAAOA,GAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAE,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK;AAAmB,QAAG,MAAI,UAAS;AAAC,UAAI,IAAE;AAAE,WAAK,UAAU,IAAIA,IAAE,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,IAAIA,IAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE,KAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC,GAAE,KAAG,QAAM,KAAK,KAAK,OAAO,IAAI,IAAI,WAAW,EAAE,QAAO,EAAE,YAAW,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,WAAO,KAAK,SAASA,EAAC;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE,GAAE,GAAE;AAAC,QAAG,EAAC,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,aAAY,EAAC,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,QAAG,MAAI;AAAS,cAAO,KAAG,QAAM,MAAI,OAAK,KAAG,QAAM,KAAG,EAAE,UAAQ,IAAE,EAAE,MAAM,GAAE,CAAC;AAAE,QAAE,KAAG,GAAE,IAAE,KAAG,EAAE,cAAc,CAAC;AAAE,QAAI,IAAE,EAAE,gBAAgB,CAAC,GAAE,IAAE,KAAK,KAAK,OAAO,MAAM,IAAE,IAAE,GAAE,IAAE,IAAE,CAAC;AAAE,WAAO,IAAI,EAAE,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG;AAAC,QAAG,KAAK,UAAU,IAAIA,EAAC,GAAE;AAAC,UAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,UAAG,EAAE,YAAW,CAAC,KAAG,EAAE,WAAS;AAAE,eAAM;AAAG,WAAK,KAAK,MAAM,EAAE,YAAY,GAAE,KAAK,KAAK,KAAK,YAAY,EAAE,EAAE,GAAE,KAAK,UAAU,OAAOA,EAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,KAAK,UAAU,IAAIA,EAAC,IAAE,KAAK,UAAU,IAAIA,EAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,SAAG,QAAM,EAAE;AAAA,EAAU;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,gBAAgBA,IAAE;AAAC,WAAO,KAAK,UAAU,IAAIA,EAAC,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,WAAWA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI;AAAE,QAAG,KAAG;AAAK,UAAE,KAAK,MAAM,KAAG,OAAK,IAAE,MAAKA,IAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,KAAK;AAAmB,UAAE,EAAC,IAAG,EAAC,GAAE,KAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAMA,IAAE,OAAM,GAAE,UAAS,EAAC,CAAC;AAAE,UAAI,IAAE,EAAE,cAAcA,EAAC;AAAE,WAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,EAAC,QAAO,GAAE,OAAMA,IAAE,OAAM,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,EAAC,OAAMA,IAAE,OAAM,GAAE,QAAO,EAAC,GAAE;AAAC,QAAI,IAAE,KAAK,KAAK,OAAO,QAAO,EAAC,cAAa,EAAC,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,EAAE,cAAcA,EAAC;AAAE,YAAO,GAAE;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,iBAAiB,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,SAAM,CAACC,IAAE,OAAK,EAAE,MAAMD,KAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,OAAG;AAAC,MAAE,MAAIC,GAAE,IAAI,EAAE,uCAAuCD,GAAC,GAAG,GAAE,EAAE,YAAY,EAAE,KAAK,OAAG;AAAC,kBAAY,YAAY,GAAEC,EAAC,EAAE,KAAK,OAAG;AAAC,UAAE,EAAE,UAAS,EAAE,MAAM;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAG,MAAI;AAAK,WAAO;AAAG,MAAI,IAAE;AAAyB,SAAOD,OAAGC,KAAE,IAAE,yCAAuCD,QAAI,IAAE,gCAA+B,MAAI,QAAM,GAAG,CAAC,KAAG,OAAK,GAAG,CAAC,IAAE,IAAE;AAAC;AAAC,eAAe,KAAI;AAAC,MAAG,CAACA,KAAEC,EAAC,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,EAAE,SAAS,uBAAuB,GAAE,EAAE,EAAE,SAAS,8BAA8B,CAAC,CAAC;AAAE,SAAO,IAAI,QAAQ,CAAC,GAAE,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,KAAEC,IAAE,MAAI,OAAK,KAAG,CAAC,IAAE,IAAE;AAAA,IAAC,GAAE,OAAK,EAAE,kBAAgB,IAAI,GAAGD,KAAEC,IAAE,MAAI,OAAK,KAAG,EAAE,CAAC;AAAG,QAAI,IAAE;AAAG,MAAE,UAAQ,MAAI;AAAC,UAAG,KAAG;AAAG;AAAO,WAAG,MAAG,EAAE,EAAC,SAAQ,kMAAiM,CAAC;AAAA,IAAC;AAAE,QAAI;AAAE,IAAAA,MAAGD,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,GAAE,EAAE,EAAC,MAAK,EAAC,CAAC;AAAA,IAAC,CAAC,EAAE,MAAM,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE;AAAC,UAAOA,IAAE;AAAA,IAAC,KAAI;AAAU,aAAO,IAAI,aAAaD,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iBAAiBC,EAAC,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,IAAID,KAAEC,KAAE,OAAG;AAAC,MAAG,GAAG,mGAAmG,GAAE;AAAG,UAAM,IAAI,MAAM,gIAAgI;AAAE,OAAGD,KAAE,KAAGC;AAAC;AAAC,SAAS,IAAID,KAAEC,KAAE,OAAG;AAAC,MAAG;AAAG,UAAM,IAAI,MAAM,iIAAiI;AAAE,MAAG,OAAOD,OAAG;AAAS,SAAGA;AAAA,OAAM;AAAC,SAAGA;AAAE,QAAI,IAAE,IAAI,OAAO,OAAG,GAAG,CAAC,KAAG,IAAI;AAAE,QAAG,EAAE,SAAO;AAAE,YAAM,IAAI,MAAM,2DAA2D,EAAE,KAAK,GAAG,CAAC,+JAA+J;AAAA,EAAC;AAAC,OAAGC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAU,KAAG;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,MAAK;AAAC,MAAG,OAAK;AAAG,UAAM,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,YAAYC,IAAE;AAAC,IAAAA,OAAI,KAAK,SAAOA,GAAE,QAAO,KAAK,eAAaA,GAAE,cAAa,KAAK,qBAAmB,KAAK,sBAAsB;AAAA,EAAE;AAAA,EAAC,wBAAuB;AAAC,QAAG,KAAK,QAAQ,GAAE;AAAC,UAAG,KAAK,aAAa,WAAW,KAAK;AAAE,eAAO,OAAO,KAAK,aAAa,MAAM,KAAK,CAAC;AAAE,UAAG,KAAK,aAAa,WAAW,IAAI;AAAE,eAAO;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,WAAS;AAAA,EAAO;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,SAAOA,IAAE,KAAK,iBAAe,GAAE,KAAK,iBAAe,GAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,cAAY,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE,GAAE,IAAE,OAAG,IAAE,MAAG;AAAC,QAAI,GAAE,IAAE,GAAGA,IAAE,CAAC;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,MAAKA,IAAE,OAAM,GAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmBA,QAAK,IAAE,KAAK,OAAO,aAAa,EAAC,MAAKA,IAAE,OAAM,GAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmBA,KAAG,KAAK,YAAY,IAAI,CAAC,KAAG,KAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,kBAAiB,KAAK,gBAAcA,IAAE;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAE,IAAE,MAAG;AAAC,QAAG,KAAK,YAAY,SAAO;AAAE;AAAO,QAAI,IAAEA,GAAE,MAAK,IAAEA,GAAE,OAAM,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQA,EAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,MAAE,CAAC,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,EAAE,IAAI,GAAE,KAAK,kBAAiB,KAAK,gBAAc,GAAE,KAAG,KAAK,YAAY,IAAI,CAAC,EAAE,KAAKA,EAAC,GAAE,KAAK,qBAAmBA,GAAE,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,CAACA,IAAE,MAAI;AAAC,MAAAA,GAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,YAAY,QAAQ,CAACA,IAAE,MAAI;AAAC,MAAAA,GAAE,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,KAAEC,IAAE;AAAC,SAAM,GAAGD,GAAC,IAAIC,EAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,SAAOA,IAAE,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAEA,KAAE,IAAE,GAAE,IAAE,GAAGA,IAAE,GAAE,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,CAACA,IAAE,CAAC,GAAE,QAAO,GAAE,OAAM,EAAC,CAAC;AAAE,WAAO,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAeA,IAAE;AAAC,QAAG,KAAK,aAAa,SAAO;AAAE;AAAO,QAAI,IAAEA,GAAE,OAAM,IAAEA,GAAE,QAAO,IAAEA,GAAE,QAAO,IAAEA,GAAE,OAAM,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,aAAa,IAAI,CAAC,EAAE,KAAKA,EAAC,GAAE,KAAK,mBAAkB,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQA,EAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,0EAA0E;AAAE,MAAE,OAAO,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,IAAE,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,CAACA,IAAE,MAAI;AAAC,MAAAA,GAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,aAAa,QAAQ,CAACA,IAAE,MAAI;AAAC,MAAAA,GAAE,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,KAAEC,IAAE,GAAE,GAAE;AAAC,SAAM,GAAGD,GAAC,IAAIC,EAAC,IAAI,CAAC,IAAI,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAa,WAAO;AAAG,QAAM,IAAI,MAAM,GAAGA,GAAC,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAG,KAAK,IAAI,GAAGD,GAAC,IAAE;AAAE,UAAM,IAAI,MAAM,0DAA0D;AAAE,MAAI,IAAEA,IAAE,QAAO,IAAE,UAAS,IAAEA,IAAE,IAAI,OAAG,GAAGC,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC;AAAE,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,IAAI,KAAG,CAACD,KAAEC,IAAE,MAAI,MAAI,UAAQ,aAAaD,GAAC,kBAAkBC,EAAC,QAAM;AAAA;AAAA;AAAA;AAAA,4DAI72qBA,EAAC;AAAA;AAAA,oDAETD,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,KAAEC,IAAE,GAAE,GAAE,MAAI;AAAC,MAAI,IAAE,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAI,GAAE,GAAEA,EAAC,GAAE,IAAED,IAAE,mBAAmB,EAAC,MAAK,GAAE,OAAMC,GAAE,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,OAAGA,GAAE,UAAU,YAAY,EAAE,SAAS,CAAC,CAAC,OAAK,QAAQ,MAAMA,GAAE,SAAS,GAAE,QAAQ,MAAM,CAAC,GAAE,QAAQ,SAAS;AAAA,EAAE;AAAC,SAAO,IAAED,IAAE,2BAA2B,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAMC,GAAE,YAAY,MAAK,QAAO,OAAM,CAAC,IAAED,IAAE,sBAAsB,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAMC,GAAE,YAAY,MAAK,QAAO,OAAM,CAAC;AAAC;AAAhjB,IAAkjB,KAAG,CAACD,KAAEC,KAAE,UAAQ;AAAC,UAAOD,KAAE;AAAA,IAAC,KAAK;AAAE,aAAM,GAAGC,EAAC;AAAA,IAAG,KAAK;AAAE,aAAM,QAAQA,EAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQA,EAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQA,EAAC;AAAA,IAAI;AAAQ,YAAM,IAAI,MAAM,GAAGD,GAAC,cAAcC,EAAC,oBAAoB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAGA,OAAG;AAAE,WAAM;AAAM,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAO,MAAGA,QAAI;AAAE,WAAM;AAAO,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,QAAM,MAAM,SAASA,GAAC,uBAAuB;AAAC;AAAC,SAAS,KAAKA,KAAE;AAAC,MAAIC;AAAE,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,MAAAC,KAAE;AAAA;AAAA;AAErwC;AAAA,IAAM,KAAK;AAAE,MAAAA,KAAE;AAAA,kBACLD,IAAE,CAAC,CAAC;AAAA;AACd;AAAA,IAAM;AAAQ,YAAM,MAAM,aAAa;AAAA,EAAC;AAAC,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI;AAAE,SAAO,IAAE;AAAA,OACnF,IAAIA,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWHD,MAAE,4BAA0B,SAAS;AAAA;AAAA,OAEzC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAM;AAAA,6BACDA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC;AAAA;AAC5F;AAAC,SAAS,IAAIA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,IAAE,EAAE,cAAc,CAAC,IAAE,EAAE,cAAc,CAAC;AAAE,MAAG,EAAE,kBAAgB,EAAE,kBAAgB,EAAE,kBAAgB,GAAE,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUlJ,GAAG,CAAC,IAAE,8BAA4B;AAAA,qEACyB,CAAC;AAAA;AAAA,SAE7D;AAAA;AAAA,KAEJ,GAAE,EAAE,gBAAc,MAAK;AAAC,QAAI,IAAE,EAAE,iBAAe,GAAG,cAAY,gEAAgE,GAAGA,GAAE,OAAM,EAAE,eAAe,CAAC,OAAK,0DAA0D,GAAGD,IAAE,CAAC,EAAE,OAAM,EAAE,eAAe,CAAC,MAAK,IAAEC,GAAE,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,GAAG,CAAC;AAAE,WAAM,CAAC,IAAG,EAAE,KAAK;AAAA,CACrC,GAAE,GAAGA,GAAE,KAAK,GAAE,EAAE,YAAY,GAAE,GAAG,GAAE,CAAC,CAAC,EAAE,KAAK;AAAA,CAC5C;AAAA,EAAC;AAAC,MAAI,GAAE,GAAE,IAAE;AAAgD,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,GAAGC,GAAE,MAAM,MAAM;AAAE,OAAG,cAAc,CAAC,MAAK,IAAEA,GAAE,MAAM,SAAO,GAAE,IAAE,GAAG,CAAC,GAAE,KAAG;AAAA,4BACvU,CAAC,MAAK,EAAE,SAAO,KAAG,iBAAgB,EAAE,aAAW,KAAG,EAAE,WAAU,KAAG,MAAK,IAAE,IAAI,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,SAAO,EAAE,KAAK;AAAA;AAAA,KAEhI,IAAE,EAAE,KAAK;AAAA,qEACuD,GAAGA,GAAE,OAAM,EAAE,eAAe,CAAC;AAAA,KAC7F,GAAE,EAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,KAAK;AAAA,2BACnB,IAAE,CAAC,wBAAwB,CAAC,WAAW,EAAE,qBAAmB,GAAGD,IAAE,CAAC,EAAE,OAAM,EAAE,mBAAmB,CAAC,CAAC,IAAE,GAAGA,IAAE,CAAC,EAAE,OAAM,EAAE,eAAe,CAAC;AAAA,SACrJ;AAAA,EAAC,CAAC,GAAE,MAAI,MAAI,EAAE,KAAK;AAAA,2BACD,IAAE,EAAE,cAAc,MAAM;AAAA,OAC5C;AAAE,MAAI,IAAE,IAAIC,GAAE,OAAM,EAAE,cAAc,GAAE,IAAE,CAAC,IAAG,EAAE,KAAK;AAAA,CACzD,IAAE,KAAI,GAAGA,GAAE,KAAK,GAAE,GAAE,IAAIA,GAAE,MAAM,MAAM,CAAC;AAAE,IAAE,UAAQ,EAAE,KAAK,IAAIA,GAAE,OAAMA,GAAE,OAAM,EAAE,eAAe,CAAC,GAAE,EAAE,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,GAAEC,GAAE,OAAM,EAAE,qBAAmB,EAAE,mBAAmB,CAAC,IAAE,EAAE,iBAAgB,EAAE,eAAe,EAAE,WAASA,GAAE,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,CACpT;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,EAAE,YAAY,CAAC;AAAE,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,EAAE,KAAK,GAAG,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,CAC9E;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE;AAAU,MAAGA,IAAE,gBAAc;AAAK,WAAO;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,EAAAC,GAAE,QAAQ,OAAG;AAAC,MAAE,KAAK,EAAE,KAAK,GAAE,EAAE,KAAK,EAAE,KAAK;AAAA,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE,KAAK,GAAE,EAAE,KAAK,EAAE,KAAK;AAAE,MAAI,IAAEA,GAAE,IAAI,OAAG,EAAE,iBAAiB,EAAE,OAAM,EAAE,KAAK,CAAC,GAAE,IAAEA,GAAE,IAAI,OAAG,EAAE,YAAY,EAAE,OAAM,EAAE,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,KAAEC,KAAE,IAAG;AAAC,MAAI,IAAED,IAAE,QAAO,IAAEC,OAAI,KAAG,MAAMA,GAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,GAAE,MAAM,CAAC,CAAC,oBAAkB,sBAAqB,IAAEA,OAAI,KAAG,GAAGA,GAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,GAAE,MAAM,CAAC,CAAC,iBAAe;AAAkB,MAAG,KAAG;AAAE,WAAM,MAAM,CAAC;AAAyC,MAAI,IAAE,EAAE,eAAeD,GAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAK,IAAI,CAAC,EAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAM,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,IAAIA,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAEA,IAAE,MAAM,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,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;AAAE,WAAM;AAAA,WAC5L,CAAC,SAAS,GAAGC,EAAC,CAAC;AAAA,iBACT,GAAGA,EAAC,CAAC,IAAI,CAAC;AAAA;AAAA;AAErB,MAAI,IAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,SAAQ,IAAE,GAAG,CAAC;AAAI,SAAO,MAAI,MAAI,IAAE,OAAM;AAAA,SAC5F,CAAC,IAAI,CAAC,QAAQ,GAAGA,EAAC,CAAC;AAAA,eACb,GAAGA,EAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,UAC1D,CAAC,IAAIA,OAAI,IAAE,KAAG,MAAMA,EAAC,EAAE;AAAA;AAAA;AAE7B;AAAC,SAAS,IAAID,KAAEC,IAAE,GAAE,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,IAAEC,GAAE,QAAO,IAAE,GAAG,CAAC;AAAE,MAAG,EAAE,YAAYD,IAAE,OAAMC,EAAC,KAAG;AAAE,WAAM;AAAA,SACpK,CAAC,+BAA+B,GAAG,CAAC,CAAC;AAAA,eAC/B,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,SAGhB,CAAC,mBAAmB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAAA,eAC5B,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAE,IAAE,qCAAmC,QAAQ,GAAG,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAE3F,MAAI,IAAE,EAAE,iBAAiBD,IAAE,OAAMC,EAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAG,MAAG,MAAI;AAAE,WAAM;AAAA,SAC3D,CAAC,+BAA+B,GAAG,CAAC,CAAC;AAAA,kBAC5B,CAAC;AAAA;AAAA;AAAA,SAGV,CAAC,mBAAmB,CAAC,QAAQ,GAAG,CAAC,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;AAAE,QAAE;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;AAAM,QAAE;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,GAAG,CAAC,CAAC;AAAA;AAAA,MAEtC,CAAC;AAAA,aACM,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAAA,OAGxE,CAAC,qBAAqB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAAA;AAAA,MAErC,CAAC;AAAA,aACM,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAE9E;AAAC,SAAS,IAAIA,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,IAAID,KAAE,CAAC;AAAE,SAAOA,IAAE,MAAM,UAAQC,GAAE,WAAS,KAAG,IAAID,KAAEC,IAAE,GAAE,CAAC,IAAG;AAAC;AAAC,SAAS,IAAID,KAAEC,IAAE;AAAC,MAAG,EAAC,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,GAAE,IAAE,CAAC,EAAC,IAAEA,IAAE,IAAED,IAAE,QAAO,IAAE,EAAE,SAAO,EAAE,SAAO,EAAE;AAAO,MAAG,MAAI;AAAE,WAAM;AAAG,MAAG,EAAE,WAAS;AAAE,WAAM,2BAA2B,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAInP,MAAI,IAAE,IAAG,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,EAAE,WAAS;AAAE,UAAG,EAAE,WAAS;AAAE,aAAG,QAAQ,EAAE,CAAC,CAAC,mBAAmB,CAAC;AAAA,WAAU;AAAC,YAAI,IAAE,GAAG,GAAE,mBAAmB;AAAE,aAAG,YAAY,CAAC,mBAAmB,CAAC;AAAM,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,eAAG,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,MAAG;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,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,IAAIA,KAAE;AAAC,MAAIC,KAAE;AAAG,UAAOD,KAAE;AAAA,IAAC,KAAK;AAAA,IAAE,KAAK;AAAE,MAAAC,MAAG;AAAA;AAAA;AAAA;AAAA;AAI7H;AAAA,IAAM,KAAK;AAAE,MAAAA,MAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,MAAAA,MAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,MAAAA,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAKhB;AAAA,IAAM,KAAK;AAAE,MAAAA,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB;AAAA,IAAM,KAAK;AAAE,MAAAA,MAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShB;AAAA,IAAM;AAAQ,QAAE,OAAO,OAAG,MAAI,eAAeD,GAAC,SAAS;AAAE;AAAA,EAAK;AAAC,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,SAAS,CAAC,MAAI,KAAGA,IAAE,SAAS,CAAC,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,GAAE;AAAC,MAAGD,QAAI;AAAU,WAAO,GAAGC,IAAE,KAAK;AAAE,MAAGD,QAAI,WAASA,QAAI;AAAO,WAAO,GAAGC,IAAE,KAAK;AAAE,QAAM,IAAI,MAAM,QAAQD,GAAC,oBAAoB;AAAC;AAAC,SAAS,IAAIA,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,GAAGC,IAAE,CAAC,GAAE,IAAE,gDAAgD,GAAG,CAAC,CAAC;AAAA,4BACzW,CAAC;AAAA;AAAA;AAAA,sDAGyB,GAAG,GAAE,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,GAAG,CAAC,CAAC;AAAA,mDAC7B,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,oCAChC,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA,gCAEtB,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,aAAa,GAAG,GAAE,KAAK,CAAC;AAAA,mDACtC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,uCAC7B,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAAA,EAEpD;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAIC,KAAE;AAAwB,EAAAD,MAAEA,IAAE,QAAQC,IAAE,OAAG,gBAAc,CAAC;AAAE,MAAI,IAAE;AAAwB,SAAOD,MAAEA,IAAE,QAAQ,GAAE,CAAC,GAAE,GAAE,MAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAEA;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,MAAIC,KAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,IAAAC,MAAGD,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAE,SAAS,IAAID,KAAEC,IAAE;AAAC,MAAGD,IAAE,WAASC,GAAE;AAAO,UAAM,IAAI,MAAM,+BAA+BD,IAAE,MAAM,+BAA+BC,GAAE,MAAM,4BAA4B;AAAE,SAAOA,GAAE,MAAM,CAAC,GAAE,MAAI,IAAED,IAAE,CAAC,MAAI,CAAC;AAAC;AAAC,SAAS,EAAEA,KAAEC,IAAE,IAAE,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,OAAGC,GAAE,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAGC,GAAE,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAGC,GAAE,CAAC,CAAC,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,CAAC;AAAE,SAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,MAAI,EAAE,CAAC,IAAE,IAAGC,MAAG,MAAI,KAAG,OAAK,EAAE,CAAC,IAAE,KAAI,EAAC,eAAc,GAAE,mBAAkB,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,OAAG;AAAC,MAAG;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAGC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAGC,GAAE,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,GAAGD,KAAEC,IAAE,IAAE,OAAG;AAAC,MAAG;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAGC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAGC,GAAE,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,EAAED,KAAE;AAAC,SAAM,EAAC,GAAEA,IAAE,IAAI,CAACC,IAAE,MAAI,CAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI,WAASA,QAAI,UAAQA,QAAI;AAAS,WAAO;AAAE,MAAGA,QAAI;AAAY,WAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAM,CAAC,EAAE,cAAY,WAAW,aAAW,WAAW,UAAU;AAAI;AAAC,SAAS,GAAGA,KAAEC,IAAE;AAAC,QAAM,QAAQD,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,OAAG;AAAC,SAAG,QAAM,EAAE,OAAO,EAAE,UAAQ,aAAY,MAAI,GAAGC,EAAC,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,KAAEC,OAAI;AAAC,MAAI,IAAED,IAAE,OAAO,kCAAiC,IAAEC,GAAE,gBAAe,IAAEA,GAAE;AAAS,MAAG,EAAE,MAAM,OAAG,KAAG,CAAC;AAAE,WAAO;AAAE,IAAE,OAAO,EAAE,CAAC,IAAE,KAAG,EAAE,MAAI,UAAQ,EAAE,MAAI,QAAO,MAAI,0DAA0D;AAAE,MAAI,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,IAAE,KAAG,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,GAAE,EAAE,OAAO,KAAG,GAAE,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,YAAYC,IAAE,GAAE;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;AAAE,YAAM,IAAI,MAAM,wCAAwC;AAAE,SAAK,gBAAc,CAAC,GAAE,KAAK,SAAOA,IAAE,KAAK,QAAMA,GAAE,OAAM,KAAK,iBAAe,MAAK,KAAK,qBAAmB,MAAK,KAAK,cAAY,IAAI,GAAG,CAAC,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,QAAOA,IAAE,QAAO,aAAY,CAAC,GAAE,SAAS,KAAK,YAAY,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG;AAAC,QAAG,CAAC,KAAK,UAAU,IAAIA,EAAC;AAAE,aAAM;AAAG,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,WAAO,IAAE,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,IAAIA,EAAC,KAAG,KAAK,0BAA0B,KAAKA,EAAC,GAAE,SAAK,KAAK,gBAAgBA,EAAC,GAAE,KAAK,UAAU,OAAOA,EAAC,GAAE;AAAA,EAAI;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,eAAc,KAAK,cAAc,cAAa,wBAAuB,KAAK,cAAc,mBAAkB,YAAW,MAAE;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,QAAG,EAAE,CAAC,KAAG,CAAC,EAAE,WAAU;AAAC,UAAG,EAAE,UAAS;AAAC,UAAE,WAAS;AAAK;AAAA,MAAM;AAAC,QAAE,oBAAoB,YAAU,KAAK,cAAc,cAAc,EAAE,QAAQ,IAAE,EAAE,oBAAoB,cAAY,KAAK,eAAe,eAAe,EAAE,QAAQ,GAAE,EAAE,WAAS;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,SAASA,IAAE;AAAC,WAAO,KAAK,UAAU,IAAIA,EAAC,IAAE,KAAK,UAAU,IAAIA,EAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,MAAE;AAAA,EAAU;AAAA,EAAC,OAAOA,IAAE;AAAC,QAAG,KAAK,UAAU,IAAIA,EAAC,GAAE;AAAC,UAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,QAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,MAAMA,IAAE,GAAE,GAAE;AAAC,QAAG,MAAI,eAAaA,MAAG;AAAK,YAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,IAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,KAAKA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,UAAU,IAAIA,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,GAAE,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,CAAAA,OAAG;AAAC,WAAK,gBAAgBA,EAAC,GAAE,KAAK,UAAU,OAAOA,EAAC;AAAA,IAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,CAAAA,OAAG,KAAK,cAAc,cAAcA,EAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,CAAAA,OAAG,KAAK,cAAc,cAAcA,IAAE,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,QAAIA;AAAE,QAAG;AAAC,MAAAA,KAAE,MAAM,QAAQ,IAAI,OAAO,OAAO,KAAK,aAAa,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,IAAI,MAAM,EAAE,OAAO;AAAA,IAAC;AAAC,WAAO,KAAK,KAAK,aAAa,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,cAAc,CAAC,IAAEA,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAcA,IAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,4BAA4B;AAAE,aAAO,QAAQ,KAAK,oIAAoI,GAAE;AAAK,QAAI,IAAEA,GAAE,MAAK,IAAE,KAAK,cAAc,cAAc,GAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmBA,IAAE,GAAE,GAAE,GAAE,CAAC,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,qBAAqBA,IAAE,GAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,WAAO,EAAE,SAAO,GAAE,EAAE;AAAA,EAAM;AAAA,EAAC,SAASA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC,GAAE,EAAC,QAAO,GAAE,oBAAmB,EAAC,IAAE;AAAE,QAAG,KAAG,QAAM,EAAE,UAAQ;AAAS,aAAO;AAAE,QAAG,EAAE,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,qBAAqBA,IAAE,CAAC,GAAE;AAAA,IAAC;AAAC,SAAK,sBAAoB,KAAK,oBAAkB,MAAG,QAAQ,KAAK,oIAAoI;AAAG,QAAI,IAAE,CAAC,UAAS,eAAe,GAAE,IAAE,EAAE,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;AAAE,cAAG,MAAI;AAAgB,cAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,eAAM;AAAC,gBAAI,IAAE,EAAE,CAAC;AAAE,cAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE;AAAA,UAAC;AAAA,MAAC,GAAE,IAAE,KAAK,MAAM,KAAG,IAAE,EAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,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,GAAE,EAAE,KAAK;AAAE,WAAO,KAAK,qBAAqBA,IAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,QAAG,CAAC,KAAK,UAAU,IAAIA,EAAC;AAAE,YAAM,IAAI,MAAM,UAAUA,EAAC,sBAAsB;AAAE,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC,GAAE,EAAC,QAAO,EAAC,IAAE;AAAE,QAAG,KAAG;AAAK,aAAO;AAAE,QAAI;AAAE,QAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE,mBAAmB,KAAK,MAAM,GAAE,KAAK,KAAK,EAAE,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,cAAc,EAAE,QAAQ;AAAE,UAAE,EAAE,mCAAmC,GAAE,EAAE,KAAK;AAAA,IAAC;AAAC,WAAO,KAAK,qBAAqBA,IAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,WAAWA,IAAE;AAAC,QAAI,IAAEA,GAAE,MAAK,IAAEA,GAAE,OAAM,IAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,WAAO,KAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmBA,IAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAwBA,IAAE,GAAE,GAAE;AAAC,QAAI,IAAEA,GAAE;AAAO,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,qCAAqC;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,MAAK,UAAS,GAAE,UAASA,GAAE,SAAQ,CAAC;AAAE,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,IAAE,EAAE,cAAc,EAAE,KAAK;AAAE,QAAGA,GAAE,OAAO,OAAK;AAAE,YAAM,IAAI,MAAM,kBAAkBA,GAAE,OAAO,IAAI,iCAAiC,CAAC,IAAI;AAAE,SAAIA,GAAE,OAAO,SAAO,eAAe,UAAQ,eAAe,gBAAc,eAAe,UAAQ,eAAe;AAAU,YAAM,IAAI,MAAM,kFAAkF;AAAE,WAAOA,GAAE,aAAW,SAAK,IAAE,KAAK,WAAW,CAAC,IAAG,EAAE,WAAS,GAAE,GAAG,EAAE,qBAAqB,GAAE,GAAE,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,UAAUA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE;AAAE,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,sDAAsD;AAAE,QAAG,KAAG;AAAK,YAAM,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,WAAWA,IAAE;AAAC,QAAI,IAAE,KAAK,SAASA,GAAE,MAAM;AAAE,QAAGA,GAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAGA,GAAE,OAAMA,GAAE,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAKA,IAAE;AAAC,KAAC,KAAK,yBAAuB,CAAC,KAAK,4BAA0B,QAAQ,KAAK,mOAAmO,GAAE,KAAK,0BAAwB;AAAI,QAAI,IAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAEA,GAAE;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,eAAa,GAAE,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,eAAeA,IAAE,GAAE,GAAE;AAAC,WAAO,MAAI,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,GAAEA,IAAE,CAAC,GAAE,OAAMA,IAAE,OAAM,EAAC;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE;AAAC,QAAG,CAACA;AAAE,aAAO;AAAK,QAAI,IAAE,KAAK,UAAU,IAAIA,GAAE,MAAM,EAAE;AAAS,WAAO,aAAa,YAAU,EAAC,QAAO,EAAC,IAAE,aAAa,aAAW,EAAE,WAAW,IAAE;AAAA,EAAC;AAAA,EAAC,YAAYA,IAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAIA,EAAC;AAAE,QAAG,EAAE,YAAU;AAAK;AAAO,QAAI,IAAE,GAAG,EAAE,KAAK,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,GAAE,IAAE,eAAe,UAAQ,eAAe,WAAS,eAAe;AAAS,QAAG,EAAE,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,UAAE,UAAQ,WAAS,EAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,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,UAAE,UAAQ,WAAS,EAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,GAAE,EAAE,MAAM;AAAA,MAAC;AAAC,QAAE,SAAO;AAAA,IAAI;AAAM,UAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,MAAE,WAAS;AAAA,EAAC;AAAA,EAAC,aAAaA,IAAE;AAAC,QAAI,IAAE,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,IAAAA,GAAE,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,IAAG,IAAE,KAAK,KAAK,IAAE,CAAC,IAAE,GAAE,IAAE,EAAE,KAAK,QAAO,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,SAAO;AAAA,IAAC,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC,IAAE;AAAE,QAAI,IAAE,IAAI,YAAY,CAAC;AAAE,IAAAA,GAAE,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,cAAc,GAAE,eAAe,WAAS,eAAe,OAAO;AAAE,WAAO,KAAK,MAAM,YAAY,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,uBAAuB,KAAK,CAAC,GAAE,EAAC,QAAO,GAAE,MAAK,GAAE,QAAO,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiBA,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI,IAAE,KAAK,eAAeA,GAAE,aAAY,CAAC,IAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,aAAO,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,SAAK,YAAY,EAAE,MAAM,GAAEA,GAAE,WAAS,IAAI,KAAK,QAAOA,EAAC;AAAE,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAG,EAAE,UAAQ;AAAY,cAAM,IAAI,MAAM,iIAAiI;AAAE,aAAO,KAAK,YAAY,EAAE,MAAM,GAAE,EAAC,OAAM,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,OAAM,OAAM,EAAE,OAAM,MAAKA,GAAE,cAAc,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,IAAAA,GAAE,YAAU,GAAGA,IAAE,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,EAAE,QAAQ,4BAA4B;AAAE,WAAOA,GAAE,aAAa,KAAK,kBAAgB,KAAK,cAAcA,GAAE,SAAS,IAAE,GAAG,KAAK,QAAOA,IAAE,GAAE,GAAE,CAAC,IAAGA,GAAE,WAAS,KAAK,cAAcA,GAAE,SAAS,GAAE,KAAG,KAAK,gBAAgBA,IAAE,GAAE,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,gBAAgBA,IAAE,GAAE,GAAE,GAAE;AAAC,QAAGA,GAAE,oBAAoB;AAAQ,YAAM,IAAI,MAAM,iFAAiF;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAQ,QAAGA,GAAE,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,OAAO,CAAC,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,eAAe,EAAE,KAAK;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAA,IAAC;AAAC,QAAGA,GAAE,MAAK;AAAC,UAAI,IAAE,EAAE,cAAcA,GAAE,WAAW;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,CAACA,GAAE,kBAAgB,IAAEA,GAAE,kBAAgB,CAAC,EAAC,CAAC;AAAA,IAAC;AAAC,UAAI,IAAE,CAAC,GAAG,GAAE,GAAG,CAAC;AAAG,QAAI,IAAE,CAAC,KAAK,gBAAgB,CAAC,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,IAAI,EAAE,MAAM;AAAE,QAAI,IAAE,KAAK,OAAO,gBAAgB,EAAC,QAAOA,GAAE,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,YAAYA,GAAE,QAAQ,GAAE,KAAK,mBAAmB,aAAa,GAAE,CAAC,GAAE,KAAK,mBAAmB,mBAAmBA,GAAE,SAAS,CAAC,GAAEA,GAAE,SAAS,CAAC,GAAEA,GAAE,SAAS,CAAC,CAAC,GAAE,KAAK,wBAAuB,KAAG,EAAE,EAAE,IAAI,mCAAmC,KAAG,KAAK,uBAAqBA,GAAE,iBAAe,GAAG,UAAQ,KAAK,sBAAsB,GAAE,IAAE,KAAK,aAAa,KAAK,EAAC,MAAKA,GAAE,YAAY,MAAK,OAAM,KAAK,aAAa,EAAC,CAAC,IAAE,KAAK,YAAY;AAAA,EAAE;AAAA,EAAC,MAAM,eAAc;AAAC,QAAG,CAAC,KAAK;AAAsB,aAAO;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,QAAIA,KAAE,KAAK,cAAc,cAAc,KAAK,gBAAc,GAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,eAAe,mBAAmB,KAAK,oBAAmB,GAAEA,IAAE,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,YAAY,GAAE,MAAMA,GAAE,SAAS,WAAW,IAAI;AAAE,QAAI,IAAE,IAAI,eAAeA,GAAE,eAAe,CAAC,GAAE,IAAE,OAAO,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,IAAE;AAAI,WAAOA,GAAE,MAAM,GAAE,KAAK,cAAc,cAAcA,EAAC,GAAE;AAAA,EAAC;AAAA,EAAC,mBAAmBA,IAAE,IAAE,KAAI;AAAC,WAAO,EAAE,EAAE,QAAQ,oBAAoB,KAAGA,GAAE,MAAM,OAAG,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,YAAU,QAAM,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;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,GAAEC,KAAE,MAAM,UAAU,IAAI,eAAeD,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,EAAAC,GAAE,SAAS,IAAI,iBAAiB,KAAG,EAAE,KAAK,iBAAiB,GAAEA,GAAE,SAAS,IAAI,oBAAoB,KAAG,EAAE,KAAK,CAAC,oBAAoB,CAAC,GAAE,EAAE,mBAAiB;AAAE,MAAI,IAAEA,GAAE;AAAO,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,MAAMA,GAAE,cAAc,CAAC,GAAE,IAAE,MAAMA,GAAE,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,IAI31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJu1lB,IAU31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAVu1lB,IAc31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAdu1lB,IAkB31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAlBu1lB,IAsB31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAtBu1lB,IA0B31lB,MAAI;AA1Bu1lB,IA0BnzlB,MAAI;AAAA;AA1B+ylB,IA2BzzlB,MAAI;AA3BqzlB,IA2BjxlB,MAAI;AAAA;AA3B6wlB,IA4BzylB,MAAI;AA5BqylB,IA4BvwlB,MAAI;AA5BmwlB,IA4BrulB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AA5BiulB,IAiC31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjCu1lB,IAgD31lB,MAAI;AAhDu1lB,IAgD7zlB,MAAI;AAAA;AAAA;AAAA;AAhDyzlB,IAmD31lB,MAAI;AAAA;AAAA;AAAA;AAnDu1lB,IAsD31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtDu1lB,IA6D31lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7Du1lB,IAkF31lB,MAAI;AAlFu1lB,IAkF3ylB,MAAI;AAAA;AAAA;AAAA;AAlFuylB,IAqF31lB,MAAI;AArFu1lB,IAqFjzlB,MAAI;AAA0B,SAAS,GAAGA,KAAEC,IAAE;AAAC,MAAI;AAAE,KAAE;AAAC,YAAOD,KAAE;AAAA,MAAC,KAAK,GAAG;AAAM,YAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,YAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,YAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,YAAEC,KAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAU,YAAEA,KAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,YAAEA,KAAE,MAAI;AAAI;AAAA,MAAM;AAAQ;AAAA,IAAQ;AAAC,QAAI,GAAE,GAAE;AAAE,WAAOA,MAAG,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,UAMjC,CAAC;AAAA;AAAA,0BAEe,CAAC;AAAA,cACb,CAAC;AAAA;AAAA;AAAA,EAEV,SAAO;AAAI,UAAOD,KAAE;AAAA,IAAC,KAAK,GAAG;AAAI,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAU,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAc,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAK,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAW,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAY,aAAOC,KAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAW,aAAOA,KAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAI,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,aAAOA,KAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAmB,UAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,UAAE;AAAI;AAAA,IAAM;AAAA,EAAQ;AAAC,SAAM;AAAA,MAChjB,CAAC;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,KAAEC,IAAE;AAAC,UAAOD,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,aAAOC,KAAE,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,aAAOA,KAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAW,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAOA,KAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAM,aAAOA,KAAE,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,cAAcD,GAAC,sBAAsB;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAEC,KAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAK,WAAM;AAAG,MAAI,IAAE;AAAG,MAAGA,QAAI;AAAS,QAAE,GAAG,EAAE,MAAM;AAAA,WAAUA,QAAI;AAAO,QAAE,GAAG,EAAE,MAAK,CAAC;AAAA,WAAUA,QAAI;AAAM,QAAE,GAAG,EAAE,KAAI,CAAC;AAAA,WAAUA,QAAI;AAAQ,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,WAAUA,QAAI;AAAQ,QAAE,GAAG,GAAG,OAAM,CAAC;AAAA,WAAUA,QAAI;AAAU,QAAE,GAAG,EAAE,SAAQ,CAAC;AAAA,WAAUA,QAAI;AAAY,QAAE,GAAG,EAAE,WAAU,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,cAAcA,GAAC,mDAAmD;AAAE,MAAI,IAAE,GAAG,IAAE,IAAE,CAAC,GAAE,IAAE;AAAG,SAAOC,KAAE,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,KAAEC,IAAE;AAAC,SAAM;AAAA,QAC1BD,MAAE,mDAAiD,EAAE;AAAA,QACrDC,KAAE,uCAAqC,EAAE;AAAA;AAC1C;AAAC,SAAS,GAAGD,KAAEC,IAAE,IAAE,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,IAAEC,KAAE,mCAAiC;AAAiC,SAAM;AAAA,mDAC/B,GAAG,CAAC,CAAC;AAAA,kBACtC,GAAG,CAAC,CAAC;AAAA,MACjB,KAAG,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,KAAEC,IAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,SAAM;AAAA,IAC9C,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,yDACsC,GAAG,CAAC,CAAC;AAAA,MACxD,KAAG,IAAE,KAAG,2DAA2D;AAAA;AAAA;AAAA;AAAA,QAIjE,GAAGD,KAAEC,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAIZ;AAAC,IAAI,MAAI,CAACD,KAAEC,OAAID,MAAE;AAAA;AAAA;AAAA,wCAGmBC,EAAC;AAAA,YAC/B;AAAA;AAAA;AAAA,gCAGsBA,EAAC;AAAA;AAP7B,IAQM,MAAI,CAACD,KAAEC,IAAE,GAAE,MAAI;AAAC,MAAGD;AAAE,WAAM;AAAA,4BACT,CAAC;AAAA;AAAA;AAAA,8BAGC,CAAC;AAAA;AAAA;AAAA;AAGtB;AAAC,QAAI,IAAE,IAAG,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAEC,IAAE;AAAI,WAAG,cAAc,CAAC,kBAAkBA,EAAC,MAAM,CAAC,eAAc,KAAG,uBAAuB,CAAC,uBAAuB,CAAC;AAAe,WAAM;AAAA,4BAClJ,IAAEA,EAAC;AAAA,UACrB,CAAC;AAAA,8BACmB,CAAC;AAAA;AAAA,YAEnB,CAAC;AAAA;AAAA;AAAA,EAEL;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG;AAAC,MAAI,IAAEA,GAAE,CAAC,IAAED,IAAE,CAAC,GAAE,IAAEC,GAAE,CAAC,IAAED,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAEC,GAAE,CAAC,GAAE,IAAE,IAAEA,GAAE,CAAC,GAAE,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,SAAO,EAAE,QAAQ,KAAG,MAAI,KAAGA,IAAE,CAAC,MAAI,KAAG,CAAC,MAAI,MAAI,KAAG,MAAI,OAAK,IAAEC,GAAE,CAAC,MAAI,KAAG,IAAEA,GAAE,CAAC,MAAI,KAAGD,IAAE,CAAC,MAAI,GAAE,MAAI,iBAAiB,CAAC,8BAA8B,CAAC,yBAAyBA,IAAE,CAAC,CAAC;AAAA,wCACtQ,CAAC;AAAA,mBACtB,CAAC,yCAAyCC,GAAE,CAAC,CAAC,eAAe,CAAC,0CAA0CA,GAAE,CAAC,CAAC,kBAAkBD,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,IAAI,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4CAIsB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKjB,CAAC;AAAA;AAAA;AAAA;AAAA,UAInB,IAAI,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,wCAIkB,CAAC;AAAA;AAAA;AAAA;AAGrC;AAAC,IAAI,KAAG,CAAAA,QAAGA,MAAE;AAAA;AAAA;AAAA;AAAA,YAIP;AAAA;AAAA;AAAA;AAAA;AAJL,IAQK,MAAI,CAAAA,QAAGA,MAAE,kDAAgD;AAAgD,SAAS,GAAGA,KAAEC,IAAE,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC,IAAEC,GAAE,CAAC,GAAE,IAAED,IAAE,CAAC,IAAEC,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE;AAAE,IAAE,OAAO,IAAEA,GAAE,CAAC,MAAI,KAAG,IAAEA,GAAE,CAAC,MAAI,KAAG,IAAEA,GAAE,CAAC,MAAI,GAAE,MAAI,cAAc,CAAC,yCAAyCA,GAAE,CAAC,CAAC,gBAAgB,CAAC,yCAAyCA,GAAE,CAAC,CAAC,eAAe,CAAC,yCAAyCA,GAAE,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,IAAEA,GAAE,CAAC,GAAE,IAAE,IAAEA,GAAE,CAAC,GAAE,IAAE,IAAEA,GAAE,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,2BAA2BC,GAAE,CAAC,CAAC;AAAA,qDAC9B,CAAC,2BAA2BA,GAAE,CAAC,CAAC;AAAA,cACvE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,mDAIgC,CAAC,2BAA2BA,GAAE,CAAC,CAAC;AAAA,yDAC1B,CAAC,2BAA2BA,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAM7D,CAAC;AAAA;AAAA;AAAA;AAAA,mCAIM,CAAC;AAAA,8BACN,CAAC;AAAA,wCACS,CAAC;AAAA,6DACoBA,GAAE,CAAC,CAAC;AAAA;AAAA,8CAEnB,CAAC;AAAA,4BACnB,IAAE,oCAAoCA,GAAE,CAAC,CAAC,OAAK,iCAAiCA,GAAE,CAAC,CAAC,OAAO;AAAA,gDACvE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAQP,CAAC;AAAA,4DACiBA,GAAE,CAAC,CAAC;AAAA,4CACpB,CAAC;AAAA,8DACiBA,GAAE,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,GAAG,CAAC,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,IAAI,CAAC,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,KAAEC,KAAE,OAAG;AAAC,IAAE,OAAOD,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,GAAE,MAAI,iDAAiDA,GAAC,GAAG;AAAE,MAAI,IAAEA,IAAE,CAAC,IAAE;AAAE,SAAM;AAAA,gDACnFA,IAAE,CAAC,CAAC;AAAA;AAAA,MAE9C,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,iDAKwC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAUzB,CAAC;AAAA,uCACa,IAAIC,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIf,IAAE,CAAC;AAAA,2BACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAezB;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC;AAAE,QAAI,IAAE,IAAEA,GAAE,CAAC,IAAEA,GAAE,CAAC;AAAE,QAAG,KAAK,UAAQ,IAAE,MAAI,KAAG,CAAC,KAAG,EAAE,CAAC,IAAE,MAAI,KAAG,MAAI,EAAE,CAAC,IAAE,MAAI,KAAG,CAAC,GAAE,KAAK,kBAAgB,KAAK,SAAO,IAAE,GAAE,KAAK,YAAU,EAAE,CAAC,MAAI,KAAG,CAAC,GAAE,CAAC,KAAK,UAAQ,KAAK;AAAU,WAAK,oBAAkB,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,GAAG,EAAE,CAAC,GAAE,GAAE,EAAE,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,YAAY,EAAE,CAAC,GAAE,EAAE,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,YAAYA,IAAE,GAAE,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,IAAEA,KAAE,MAAI,GAAE,IAAE,IAAE,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,YAAYC,IAAE,IAAE,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,cAAYA,IAAE,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,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,YAAU,gBAAgB,KAAK,UAAU,IAAI,CAAC,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,MAAIC,KAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAEC,KAAE,IAAEA,KAAE;AAAE,SAAM;AAAA,8CACZ,CAAC,MAAMA,EAAC;AAAA,8CACR,CAAC,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,YAAYA,IAAE,GAAE,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,YAAYA,IAAE,GAAE,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,OAAOA,GAAE,CAAC,MAAI,GAAE,MAAI,8CAA8C,GAAE,KAAK,cAAYA,IAAE,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,KAAG,IAAE,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,GAAE,CAAC,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,QAAIA,KAAE,KAAK;AAAgB,WAAM;AAAA,QACp5B,GAAG,OAAG,KAAK,YAAW,OAAG,OAAG,OAAGA,EAAC,CAAC;AAAA,8DACqB,GAAGA,EAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMnCA,EAAC;AAAA,cACnB,GAAG,0BAAyB,GAAGA,KAAE,IAAE,aAAW,OAAO,IAAG,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA,QAIxEA,OAAI,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,YAAYA,IAAE,IAAE,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,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,UAAQ,KAAG,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,gBAAe,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;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,GAAEC,GAAE,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,WAAOA,GAAE,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,QAAOC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE,GAAE,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,GAAEC,IAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAEC,GAAE,MAAM,QAAO,IAAE,IAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAEC,GAAE,MAAM,IAAE,CAAC,IAAEA,GAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAEC,GAAE,MAAM,IAAE,CAAC,IAAEA,GAAE,MAAM,IAAE,CAAC,GAAE,IAAED,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAEC,GAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BD,IAAE,MAAM,MAAM,GAAE,EAAE,GAAEC,GAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BD,IAAE,KAAK,QAAQC,GAAE,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,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,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,GAAE,GAAE,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,GAAE,GAAE,CAAC,GAAE,KAAG,GAAE;AAAC,YAAE,EAAE,iBAAiB,GAAE,GAAEA,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;AAAE,YAAE,YAAY,GAAG,MAAM;AAAE,eAAO;AAAA,MAAE;AAAC;AAAA,IAAK;AAAA,IAAC,KAAK,GAAG;AAA6B,UAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK,GAAG;AAAoB,UAAI,IAAE,EAAE,YAAY,QAAQ;AAAE,UAAE,IAAI,GAAG,GAAE,GAAE,GAAE,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,GAAEA,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;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,mBAAmBA,EAAC,IAAG,KAAK,KAAGA;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,YAAYA,IAAE,GAAE,GAAE;AAAC,QAAG,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,KAAGA,IAAE,KAAK,uBAAqB,EAAE,UAAQ,KAAG,EAAE,SAAO,KAAG,EAAE,CAAC,IAAE,KAAI,KAAK,uBAAqB,EAAE,UAAQ,KAAG,EAAE,SAAO,KAAG,EAAE,CAAC,IAAE,KAAI,KAAK,wBAAsB,KAAK;AAAqB,WAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,GAAE,KAAK,oBAAkB,KAAK,uBAAqB,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,KAAK,YAAU,UAAUA,EAAC,IAAI,KAAK,iBAAiB,IAAG,KAAK,OAAK,UAAS,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE,SAAO,KAAG,EAAE,EAAE,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,cAAc,CAAC,KAAG,EAAE,EAAE,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,UAAUA,EAAC,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,QAAIA,IAAE,IAAE,KAAK,oBAAkB,IAAE,cAAY,OAAM,IAAE;AAAA,6BACzoC,CAAC,SAAS,CAAC,QAAQ,CAAC;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,MAAAA,KAAE;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;AAAM,MAAAA,KAAE;AAAA,SACR,CAAC;AAAA,SACD,EAAE,OAAO,CAAC;AAAA;AAAA,qDAEkC,KAAK,eAAe;AAAA,qBACpD,CAAC;AAAA,qBACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAIb,WAAOA;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,GAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,SAAOD,IAAE,QAAQ,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAEC,IAAE,IAAE,EAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,YAAYA,IAAE,GAAE,IAAE,IAAG;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE;AAAI,SAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,KAAG,GAAE,MAAI,OAAK,KAAK,WAAS,IAAG,KAAK,YAAU,SAAS,CAAC;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,eAAcC,IAAE,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,MAAG,MAAK;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAEA,GAAE,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,eAAcC,IAAE,iBAAgB,IAAE,OAAG,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAG,KAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,GAAE;AAAE,UAAGD,QAAI,GAAG;AAAI,SAAC,GAAE,CAAC,IAAE,CAAC,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,GAAE,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,OAAG;AAAC,cAAG,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,iBAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAA,QAAC,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,MAAIC,MAAG,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,IAAEA,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAGD,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,YAAYC,IAAE;AAAC,SAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,CAAC,GAAE,KAAK,gBAAcA,GAAE,IAAI,CAAC,GAAE,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,QAAIA,KAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,MAAAA,GAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,yBAAyB;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,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,cAGxCA,GAAE,KAAK;AAAA,SACZ,CAAC;AAAA,0CACgC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAItC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,IAAEC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,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,SAAO,EAAE,iBAAiB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,IAAG,CAAC;AAAE,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,EAAE,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,QAAIA,KAAE,KAAK,cAAc,CAAC;AAAE,WAAM;AAAA,+CACrvB,KAAK,cAAc,CAAC,IAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,QACzF,EAAE,CAAC;AAAA,uCAC4BA,EAAC;AAAA,uCACDA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAQLA,EAAC;AAAA,mCACDA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,EAAE,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,SAAO,GAAE,KAAK,YAAU,aAAa,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,GAAG,KAAK,YAAY,MAAM,GAAE,IAAE,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,gBACrEA,EAAC,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIjB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAED,IAAE;AAAO,MAAGC,KAAE;AAAE,UAAM,MAAM,sBAAsBA,EAAC,uBAAuB;AAAE,MAAI,IAAE,IAAI,MAAMA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAEA,IAAE,CAAC,CAAC,IAAE,UAAU,GAAG,CAAC,CAAC;AAAG,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAG,EAAE,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,WAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,qBAAoB,KAAK,OAAK,MAAG,KAAK,aAAW,CAACA,GAAE,WAAUA,GAAE,MAAM;AAAE,QAAG,CAAC,CAAC,IAAE,EAAE,0BAA0B,KAAK,YAAW,CAAC,CAAC,CAAC;AAAE,SAAK,cAAY,EAAE,WAAS,IAAE,CAAC,CAAC,IAAE,GAAEA,GAAE,UAAQ,SAAO,KAAG,MAAI,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAEA,GAAE,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,aAAW,GAAE,KAAK,YAAU,UAAU,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,IAAG,IAAE,OAAM,IAAE,KAAK,cAAc,CAAC;AAAE,SAAK,eAAa,SAAO,KAAK,eAAa,SAAOA,KAAE;AAAA;AAAA;AAAA,qDAG3vC,KAAK,eAAa,QAAM,MAAI,GAAG;AAAA,yCAC5C,IAAE,oBAAkB,KAAK,eAAa,SAAO,KAAK,eAAa,SAAOA,KAAE,yCAAuC,KAAK,eAAa,UAAQA,KAAE,wCAAuC,IAAE,SAAO,KAAK,eAAa,SAAOA,KAAE,4DAA2D,IAAE,SAAO,KAAK,eAAa,UAAQA,KAAE,4DAA2D,IAAE;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,2BAEX,CAAC;AAAA;AAAA,qDAEyB,CAAC;AAAA;AAAA,uBAE/B,CAAC;AAAA;AAAA,aAEXA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6CAK+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMhCA,EAAC;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,KAAEC,IAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,EAAE,eAAeC,IAAED,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,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,GAAEA,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,OAAK;AAAG,QAAI,IAAE,CAAC,CAAC;AAAE,SAAK,KAAG,MAAI,QAAM,MAAI;AAAI,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0BA,IAAE,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,aAAWA,IAAE,KAAK,YAAU,aAAa,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,cAAc,CAAC,GAAE,IAAE,MAAI,KAAK,WAAW,WAAS,IAAE,oBAAkB,mBAAmB,GAAG,KAAK,WAAW,SAAO,CAAC,CAAC,IAAG,IAAE,MAAI;AAAC,UAAI,IAAE;AAAG,UAAG,KAAK,YAAY,WAAS;AAAE,aAAK,WAAW,WAAS,MAAI,KAAG;AAAA;AAAsB,iBAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO;AAAI,eAAG,gBAAgB,GAAG,CAAC,CAAC;AAAI,aAAO;AAAA,IAAC;AAAE,WAAO,KAAK,SAAO,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAK3yE;AAAA,iDACyCA,EAAC;AAAA,gDACFA,EAAC;AAAA,KAC5C;AAAA;AAAA,QAEG,EAAE,OAAO,CAAC;AAAA,oCACkBA,EAAC;AAAA,6BACR,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMVA,EAAC;AAAA,iCACU,EAAE,CAAC;AAAA,+CACW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDASJA,EAAC;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,+BACL,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,YAAYA,IAAE,GAAE,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,MAAG,MAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAYA,GAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,GAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA;AAAE,SAAK,aAAW,QAAMA,KAAE,4DAA0D,KAAK,mBAAiBA,KAAE;AAAA;AAAA;AAAA;AAAA,wBAI1rB,KAAK,mBAAiB,KAAK,oBAAkB,2FAAyF,4DAA0D,iCAAiC;AAAA,WAChPA,KAAE;AAAyC,QAAI,IAAE;AAAc,WAAO,KAAK,aAAW,UAAQ,IAAE,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/FA,EAAC;AAAA;AAAA;AAAA;AAAA,YAIL,KAAK,mBAAiB,6CAA2C,2BAA2B,CAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAzCE,IAyCA,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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,MAAG,MAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAYA,GAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,GAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA;AAAE,SAAK,aAAW,QAAMA,KAAE,wCAAsC,KAAK,mBAAiBA,KAAE;AAAA;AAAA;AAAA;AAAA,wBAI3oB,KAAK,mBAAiB,KAAK,oBAAkB,oHAAkH,sFAAoF,sFAAsF;AAAA,WACxVA,KAAE;AAAyC,QAAI,IAAE;AAAc,WAAO,KAAK,aAAW,UAAQ,IAAE,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,kBAsB7FA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,KAAK,mBAAiB,6CAA2C,2BAA2B,CAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAO,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE,GAAE;AAAC,MAAGA,GAAE,gBAAc,KAAGA,GAAE,iBAAe,KAAG,EAAE,YAAYA,GAAE,SAAQA,GAAE,QAAQ;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAGC,GAAE,gBAAcA,GAAE,WAASA,GAAE,iBAAeA,GAAE,YAAUA,GAAE,cAAY,KAAGA,GAAE,QAAQ,SAAO,SAAQ;AAAC,QAAI,IAAED,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,UAAI,QAAM,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,KAAG,EAAE,OAAO,MAAI,OAAM,MAAI,qBAAqB,CAAC,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,OAAMC,GAAE,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,CAACA,GAAE,cAAaA,GAAE,WAAW,EAAC,CAAC;AAAE,SAAOA,GAAE,iBAAe,KAAGA,GAAE,gBAAc,IAAE,IAAE,IAAI,GAAGA,EAAC,KAAG,MAAI,QAAM,IAAE,IAAI,GAAGA,IAAE,KAAK,KAAG,EAAE,OAAO,MAAI,OAAM,MAAI,qBAAqB,CAAC,EAAE,GAAE,IAAE,IAAI,GAAGA,IAAE,KAAK,IAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAACA,GAAE,QAAQ,KAAIA,GAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,GAAE,gBAAeA,GAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,GAAE,UAASA,GAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,GAAE,uBAAsBA,GAAE,oBAAoB,EAAC,CAAC,IAAG,EAAE,iBAAiB,GAAE,CAACD,GAAC,GAAEA,IAAE,OAAM,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+DACtvE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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;AAvC0uE,IAuCxuE,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+EACM,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,QAAMA,IAAE,KAAK,WAAS,WAAW,GAAGA,GAAE,MAAM,CAAC,MAAK,KAAK,YAAU;AAAA,EAAO;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,GAAG,KAAK,IAAI,GAAE,IAAE,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,4BAEUA,EAAC;AAAA;AAAA,YAEjB,EAAE,KAAK;AAAA,CAClB,CAAC;AAAA,8CAC4C,CAAC;AAAA;AAAA;AAAA;AAAA,EAG1C;AAAC;AAV2nD,IAUznD,KAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,OAAG;AAAE,WAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,CAAAC,OAAG,aAAaA,EAAC,EAAE,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,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,YAAYA,IAAE,GAAE,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,cAAYA,IAAE,KAAK,OAAKA,GAAE,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,aAAW,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAO,EAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;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,CAACA,EAAC,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAEC;AAAE,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,WAAO,EAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,MAAM,GAAE,IAAEC,GAAE,iBAAiB,GAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,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,SAAQ,EAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAQ,WAAO,GAAG,GAAE,CAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,EAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,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,YAAYA,IAAE;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,cAAYA,IAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+BAA8B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,GAAE,EAAE,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,YAAYA,IAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,KAAEC,IAAE;AAAC,SAAM,EAAC,QAAOA,GAAE,QAAO,OAAMA,GAAE,OAAM,OAAMD,IAAE,MAAK;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,EAAE,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,SAAO,EAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,gBAAgBA,IAAE,CAAC,GAAE,KAAK,gBAAcA,GAAE,IAAI,CAAC,GAAE,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,eAAaA,GAAE,SAAO;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,cAAa;AAAI,WAAK,YAAU,SAAS,CAAC;AAAU,SAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,CAAC;AAAE,QAAG,KAAK,eAAa,GAAE;AAAC,MAAAA,GAAE,KAAK,qFAAqF;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,cAAa;AAAI,QAAAA,GAAE,KAAK,gCAAgC,CAAC,CAAC,CAAC,gDAAgD,CAAC,4BAA4B,IAAE,CAAC,OAAO;AAAE,UAAI,IAAE,KAAK,cAAa,IAAE,KAAK,eAAa;AAAE,MAAAA,GAAE,KAAK,oDAAoD,CAAC,4BAA4B,CAAC,OAAO;AAAA,IAAC;AAAM,MAAAA,GAAE,KAAK,uDAAuD;AAAE,WAAM;AAAA,QAC7xC,EAAE,OAAO,CAAC;AAAA,6BACW,KAAK,aAAa;AAAA,oCACX,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxCA,GAAE,KAAK;AAAA,SACZ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIL;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAEC,IAAE,CAAC,GAAE,IAAE,GAAG,GAAEA,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAMC,EAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,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,GAAEC,EAAC,GAAE,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,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,GAAEC,IAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAEA,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,QAAE,YAAY,EAAE,MAAM;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,IAAID,KAAEC,IAAE,CAAC,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;AAAI,QAAE,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,IAAE,EAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,IAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAEC,EAAC;AAAE,SAAM,EAAC,WAAUD,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,MAAM,MAAM,GAAEC,EAAC,CAAC,GAAE,EAAE,cAAc,EAAE,MAAM,MAAMA,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAEC,GAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgBA,GAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO,EAAE,eAAe,GAAEA,GAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAEC,IAAE,GAAE,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,MAAEC,MAAG,IAAE;AAAA,QACxB,CAAC,KAAG;AAAA;AAAA,UAEF,CAAC;AAAA;AAAA,eAEI,GAAG,CAAC,CAAC,WAAS,KAAG,IAAE;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,YAAYC,IAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,2IAA0I,KAAK,cAAYA,GAAE,UAAS,KAAK,iBAAeA,GAAE,eAAa,gBAAe,KAAK,WAASA,GAAE,aAAW,MAAI,KAAGA,GAAE,aAAW,MAAI,MAAI,KAAK,kBAAgBA,GAAE,WAAS,MAAI,KAAG,CAAC,KAAK,mBAAiBA,GAAE,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,kBAAgBA,GAAE,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,YAAU,IAAE,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,QAAIA,KAAE,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,GAAE,IAAE,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,2BAA0B,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAA,MAC/IA,EAAC;AAAA;AAAA,EACJ;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAYA,GAAE,UAAS,KAAK,iBAAeA,GAAE,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,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAG,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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS;AAAA,2BACpD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAe,GAAE,KAAK,YAAU,UAAU,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,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,oCAIeA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMC,CAAC;AAAA,sBACjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE;AAAC,MAAI,IAAED,IAAE;AAAO,SAAO,KAAG,IAAEC,KAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,GAAEA,IAAE,IAAE,CAAC,CAAC,IAAE,CAAC,GAAGA,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAE,IAAE,CAAC,GAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,CAAC,IAAE,CAACC,MAAG,MAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,IAAI,EAAC,GAAEA,KAAE,QAAOC,IAAE,UAAS,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAE,EAAE,eAAa,gBAAe,IAAE,CAAC,GAAE,IAAE,OAAG,IAAE,KAAG,EAAE,iBAAe,EAAE,YAAU,EAAE,gBAAc,EAAE,WAAS,EAAE,QAAQ,SAAO,SAAQ,IAAE,CAAC,GAAE,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,WAAS,EAAE,UAAQ,EAAE;AAAW,QAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,EAAE,WAAU,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,WAAW,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAAC,EAAE,WAAU,EAAE,WAAS,EAAE,SAAQ,EAAE,UAAU,IAAE,CAAC,EAAE,WAAU,EAAE,YAAW,EAAE,WAAS,EAAE,OAAO,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEC,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,EAAE,YAAW,EAAE,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,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAI,EAAC,GAAED,KAAE,QAAOC,IAAE,UAAS,GAAE,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,IAAE,GAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,CAAC,EAAE,WAAU,GAAE,CAAC,IAAE,CAAC,EAAE,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,GAAEC,GAAC,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,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAOC,IAAE,UAAS,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,EAAE,eAAa,gBAAe,IAAE,KAAG,EAAE,iBAAe,EAAE,YAAU,EAAE,gBAAc,EAAE,WAAS,EAAE,QAAQ,SAAO,SAAQ,IAAE,EAAE,EAAE,QAAQ,+BAA+B;AAAE,MAAG,CAAC,MAAI,KAAG,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;AAAU,WAAO,IAAI,EAAC,GAAED,KAAE,QAAOC,IAAE,UAAS,GAAE,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,IAAE,EAAE,YAAU,KAAK,KAAK,EAAE,YAAU,EAAE,WAAS,EAAE,IAAE,KAAK,KAAK,EAAE,cAAY,EAAE;AAAE,MAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,KAAG;AAAE,WAAO,IAAI,EAAC,GAAED,KAAE,QAAOC,IAAE,UAAS,GAAE,SAAQ,GAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAE,MAAI,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;AAAE,MAAG;AAAE,QAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE,EAAE,YAAU,EAAE,WAAS,EAAE,aAAY,IAAE,IAAE,EAAE,cAAY,EAAE,YAAU,EAAE,UAAS,IAAE,EAAE,eAAa,EAAE,cAAY,EAAE;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,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAACD,KAAEC,EAAC;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,GAAED,IAAE,OAAM,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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;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,YAAYA,IAAE;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,cAAYA,GAAE,SAAQ,KAAK,iBAAeA,GAAE,eAAa,gBAAe,KAAK,SAAO,KAAK,kBAAgBA,GAAE,cAAY,MAAI,KAAGA,GAAE,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,QAAIA,KAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,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,0CAEeA,EAAC,aAAa,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,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS,2HAA0H,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAeA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,wFACa,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4EACC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,MAAIC,KAAE,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,GAAGD,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,QASlDC,GAAED,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,YAAYC,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,6IAA4I,KAAK,cAAYA,GAAE,SAAQ,EAAE,OAAOA,GAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAE,KAAK,SAAOA,GAAE,aAAW,MAAI,KAAGA,GAAE,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,QAAIA,KAAE,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,aAAa,IAAE,GAAG,KAAK,mBAAkB,KAAK,aAAa;AAAE,WAAM;AAAA,MAC15B,IAAI,KAAK,SAAO,IAAE,CAAC,CAAC;AAAA,MACpBA,EAAC;AAAA;AAAA,EACF;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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;AAAe,QAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,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,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAEA,EAAC,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,CAACA,IAAE,CAAC,IAAE,CAAC,mCAAkC,iCAAiC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,wBAAsB,CAAC,IAAIA,EAAC,qCAAoC,0BAAyB,MAAMA,EAAC,0BAA0B,IAAE,CAAC,OAAM,OAAM,mBAAmBA,EAAC,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,uBAAqB,CAAC,IAAI,CAAC,qCAAoC,yBAAwB,MAAM,CAAC,yBAAyB,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,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,mCACaA,EAAC;AAAA;AAAA;AAAA;AAAA,qBAIf,CAAC;AAAA,mCACa,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYC,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,gBAAe,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAE,KAAK,KAAGA,IAAE,KAAK,YAAU,OAAO,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,YAAY,QAAO,IAAE,KAAK,OAAK,GAAG,OAAK,QAAM,OAAM,IAAE,KAAK,YAAU,IAAE,QAAQ,GAAGA,IAAE,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,GAAGA,IAAE,UAAS,KAAK,EAAE,CAAC;AAAA,qBACtB,CAAC;AAAA;AAAA,eAEP,CAAC;AAAA,uBACO,CAAC;AAAA,aACX,GAAGA,IAAE,UAAS,KAAK,EAAE,CAAC;AAAA,iBAClB,KAAK,EAAE,UAAU,GAAGA,IAAE,UAAS,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD;AAAC;AAAE,SAAS,GAAGD,KAAEC,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAG,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC,OAAOA,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC,OAAOA,EAAC,OAAOA,EAAC,OAAOA,EAAC;AAAK,QAAM,MAAM,cAAc,CAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAG,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,MAAGD,QAAI;AAAE,WAAM,GAAGC,EAAC;AAAK,QAAM,MAAM,cAAc,CAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAEA,GAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAEA;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,GAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE;AAAE,UAAM,IAAI,MAAM,oDAAoDA,GAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,QAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAO,EAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,WAAS,oBAAmB,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,gBAAgB,CAAC,IAAG,KAAK,aAAW;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,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,cAAYA,IAAE,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,eAAa,GAAE,KAAK,cAAY,GAAE,KAAK,YAAU,iBAAiB,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,cAAY,KAAK,cAAa,IAAE,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,UAS5FA,KAAE,IAAE,gBAAgBA,EAAC,MAAI,kBAAkBA,EAAC,uBAAuB,CAAC,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,YAAYA,IAAE,IAAE,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,cAAYA,GAAE,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,OAAOA,GAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAE,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAASA,IAAE,KAAK,UAAQ,GAAE,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,QAAIA,MAAG,KAAK,gBAAc,KAAG,KAAK,SAAS,cAAY,KAAK,SAAS,aAAY,IAAE,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,sDAKF,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,uCAItBA,EAAC;AAAA,yCACC,KAAK,aAAa;AAAA,8BAC7B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKhB,KAAK,SAAS,YAAY;AAAA;AAAA;AAAA,kCAGxBA,EAAC;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,YAAYA,IAAE,IAAE,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,cAAYA,GAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAeA,GAAE,eAAa,gBAAe,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAASA,IAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,YAAU,aAAa,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,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,+BA4BpBA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAoBDA,EAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAG,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,0FACtiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4DACjB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAACA,IAAEA,EAAC,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,oFAAmF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAYA,GAAE,SAAQ,KAAK,iBAAe,EAAEA,GAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,GAAE,UAAS,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI;AAAQ,YAAM,IAAI,MAAM;AAAA,oCACz1B,CAAC,QAAQ;AAAE,SAAK,OAAK,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAYA,GAAE,aAAY,KAAK,iBAAe,EAAEA,GAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,GAAE,UAAS,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI;AAAQ,YAAM,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,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,YAAYA,IAAE,GAAE,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,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAK,GAAE,KAAK,gBAAc,GAAE,KAAK,YAAU,QAAQ,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,IAAE,IAAE,KAAK,SAAO,YAAU,UAAQ;AAAgB,WAAOA,KAAE;AAAA;AAAA,oBAErmD,CAAC;AAAA,oBACD,CAAC;AAAA,oBACD,CAAC;AAAA;AAAA,oBAED,CAAC;AAAA,UACZ;AAAA,iEACwD,KAAK,aAAa;AAAA,SAC1E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,QAAO,EAAE,QAAO,QAAO,GAAE,OAAM,gBAAgB,iBAAgB,WAAU,gBAAe,CAAC;AAAE,MAAI,IAAE,SAAQ,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,EAAE,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,MAAG,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,IAAI;AAAE,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,2EAA2E;AAAE,MAAE,UAAU,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAG,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,IAAI,GAAG,GAAG,SAAQ,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,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,QAAOC,IAAE,OAAM,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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,YAAYA,IAAE,GAAE;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,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAUA,IAAE,KAAK,YAAU,OAAOA,EAAC;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,KAAEC,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,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,SAAQ,GAAE,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,IAAEC,KAAE,IAAE,KAAK,KAAG,KAAG,KAAK,IAAG,IAAEA,KAAE,EAAE,CAAC,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,OAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,SAAQC,GAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,IAAEC,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,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,YAAYA,IAAE,GAAE,IAAE,OAAG;AAAC,SAAK,eAAa,GAAG,aAAY,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,YAAU,cAAc,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,cAAY,4CAA0C;AAA4C,WAAM;AAAA,uCACzzB,KAAK,cAAY,qBAAmB,iBAAiB;AAAA,QACpF,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIOA,EAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,aAAY,EAAC,IAAE;AAAE,MAAG,KAAG;AAAK,UAAM,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;AAAE,UAAE,EAAE,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,IAAE,cAAa,IAAE,EAAE,eAAe,eAAe,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,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,IAAE,EAAE,eAAe,CAAC,GAAE,CAAC,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS;AAAE,QAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,WAAO,EAAE,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;AAAI,UAAE,IAAE,MAAI,EAAE,GAAG,IAAE,EAAE,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,eAAe,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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,2BAA2BA,IAAE,CAAC,GAAE,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,IAAG,KAAG,SAAO,EAAE,2BAA2BA,IAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,IAAG,KAAK,cAAY,GAAE,KAAK,aAAW,GAAE,KAAK,YAAU;AAAA,EAAW;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE;AAAM,SAAK,eAAa,SAAOA,KAAE;AAAiC,QAAI,IAAE;AAAM,WAAO,KAAK,cAAY,SAAO,IAAE,iCAAgC;AAAA,QAC//E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMYA,EAAC;AAAA,6BACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAEC,IAAE,IAAE,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAEC,IAAE,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,kBAAiB,EAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,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,YAAYA,EAAC,IAAG,KAAK,WAASA,IAAE,KAAK,WAAS,6BAA6B,GAAGA,EAAC,CAAC;AAAA,EAAG;AAAA,EAAC,cAAa;AAAC,QAAIA;AAAE,WAAO,KAAK,WAAS,IAAEA,KAAE,wBAAsBA,KAAE,oBAAmB;AAAA,QAC31E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMYA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,MAAM,GAAE,KAAK,SAAOA,IAAE,KAAK,cAAY,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,QAAIA,KAAE,IAAI,KAAK,MAAM;AAAE,WAAM;AAAA,QACjlC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,oDAKkCA,EAAC;AAAA;AAAA;AAAA;AAAA,EAGhD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAIC,KAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,UAAI,IAAE,EAAE,KAAK,QAAQ,IAAE,EAAE,KAAK,GAAGC,GAAE,CAAC,CAAC,EAAE;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,MAAG,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE,EAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,MAAG,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,4BAA2B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAACA,EAAC,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,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAE,GAAE,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,SAAOC,GAAE,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,YAAYA,IAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,iBAAe,IAAG,EAAE,OAAO,KAAG,KAAK,gBAAe,MAAI,wCAAwC,KAAK,cAAc,uBAAuB,CAAC,EAAE,GAAE,KAAK,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;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,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,yCAC5wC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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;AA7CiuC,IA6C/tC,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,wDAC1B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,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,IAAE,EAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,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,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,OAAM,MAAG,MAAG,CAAC;AAAE,MAAI,IAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,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,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,SAAOA,IAAE,EAAE,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,QAAIA,KAAE,KAAK,OAAO,QAAO,IAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwBA,KAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAEA,OAAI,IAAE,UAAQ,YAAW,IAAEA,OAAI,IAAE,QAAM,UAAS,IAAEA,OAAI,IAAE,SAAO,WAAU,IAAE,GAAGA,EAAC,GAAE,IAAEA,KAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAEA,EAAC,IAAE;AAAS,WAAM;AAAA,QAC36H,EAAE,OAAO,CAAC;AAAA;AAAA,wBAEM,CAAC,IAAI,CAAC;AAAA,sBACR,CAAC,IAAI,CAAC;AAAA;AAAA,gCAEIA,EAAC;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,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAEC,IAAE,IAAE,GAAE,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,YAAYA,IAAE,GAAE;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,CAACA,IAAE,CAAC,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAG;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,GAAG,wBAAwB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,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,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAE,EAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,kCAAiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAACA,IAAE,CAAC,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,GAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAMA,GAAE,CAAC,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAEA,GAAE,CAAC,EAAE,OAAM,IAAEA,GAAE,CAAC,EAAE;AAAM,EAAAA,GAAE,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,IAAEA,GAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAEC,KAAE,OAAG;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwB,IAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAE,IAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAE,IAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAE,IAAE,IAAE,8BAA4B,wBAAuB,IAAE,IAAE,IAAE,6BAA2B,uBAAsB,IAAE,IAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC,IAAE;AAAS,SAAM;AAAA,sBACp/E,CAAC;AAAA,oBACH,CAAC;AAAA,cACP,CAAC,OAAO,CAAC;AAAA,oCACaC,KAAE,IAAE,wBAAwB;AAAA;AAAA;AAAA,yCAGvB,CAAC;AAAA;AAAA;AAEvC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,SAAOA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,OAAG,EAAE,YAAY,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,SAAQ,GAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAEC,IAAE,IAAE,IAAI,GAAG,GAAG,OAAM,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAO,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQC,IAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,GAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,0DAAyD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAACA,GAAE,CAAC,GAAE,GAAE,GAAEA,GAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,qFACrU,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAa,GAAE,KAAK,YAAU,0BAA0B,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,mDAAkD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAACA,GAAE,CAAC,GAAE,GAAE,GAAEA,GAAE,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,QAAIA;AAAE,WAAO,KAAK,mBAAiBA,KAAE,4FAA0FA,KAAE,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,oCAmBkBA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,0CAChX,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAa,GAAE,KAAK,YAAU,gCAAgC,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,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,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS;AAAA,8BAC5yB,KAAK,YAAU,UAAS,KAAK,cAAYA,IAAE,OAAO,KAAG,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,OAAMC,IAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAEC,IAAE,IAAE,GAAE,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,YAAYA,IAAE,GAAE,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,EAAEA,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,IAAE,KAAK,aAAa,GAAE,KAAK,yBAAuB,IAAE,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,QAAIA,KAAE;AAAG,SAAK,gBAAc,IAAEA,KAAE,cAAY,KAAK,gBAAc,MAAIA,KAAE;AAAgB,QAAI,IAAE,cAAcA,EAAC,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,0CAKwB,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,GAAG,EAAC,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;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,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAK,GAAE,KAAK,YAAU,iBAAiB,CAAC;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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,YAAYA,IAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,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,QAAMA,IAAE,KAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAIA,IAAE;AAAE,QAAG,KAAK,OAAK;AAAE,YAAM,MAAM,kBAAkB,KAAK,IAAI,uBAAuB;AAAE,QAAG,KAAK,SAAO;AAAE,UAAE,SAAQA,KAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO;AAAI,UAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,KAAK,SAAO,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,MAAAA,KAAE,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK;AAAA,IAAC;AAAC,WAAM;AAAA,QAC52B,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGUA,EAAC;AAAA;AAAA,2CAEc,CAAC;AAAA;AAAA,2CAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIvC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAEC,IAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,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,YAAYA,IAAE,GAAE,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;AAAI,QAAE,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,SAAOA,IAAE,KAAK,eAAa,GAAE,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,QAAIA,KAAE,GAAG,KAAK,YAAY,MAAM,GAAE,IAAE,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,KAAKA,EAAC,IAAI,CAAC;AAAA;AAAA,YAExE,GAAG,KAAK,QAAO,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,EAGzB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,MAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAnsB,IAAqsB,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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,cAAYA,IAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,EAAE,CAAC,CAAC,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,CAAC,CAAC,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,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,YAAY,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,CAACA,EAAC,GAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,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,YAAYA,IAAE,GAAE;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,cAAYA,IAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,EAAEA,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,IAAE,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,KAAEC,IAAE,GAAE,IAAE,OAAG,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,OAAM,IAAE,EAAE,cAAcC,GAAE,KAAK,GAAE,IAAE,EAAE,SAAS,EAAE,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,KAAEC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG;AAAE,WAAO;AAAE,MAAI,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,GAAE,OAAM,GAAE,OAAM,QAAO,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,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,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAEC;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,MAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAMA,GAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAEA,GAAE,CAAC,IAAE,EAAE,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,QAAIA,KAAE,IAAI,KAAK,MAAK,WAAW;AAAE,WAAM;AAAA,QAC/2C,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,yCAGuBA,EAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAEC,KAAE,IAAG;AAAC,MAAGD,OAAG;AAAE,UAAM,MAAM,iBAAiBA,GAAC,uBAAuB;AAAE,MAAGA,QAAI;AAAE,WAAM,YAAYC,EAAC;AAAU,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE;AAAI,MAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAMC,EAAC,UAAU,CAAC,IAAI;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAE,EAAE,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,WAAO,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;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,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAEC,IAAE,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,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,eAAe,CAAC,GAAE,GAAE,EAAE,oBAAoB,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,UAAE,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,UAAE,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,UAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQC,GAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAEC,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,MAAM;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,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,OAAMC,IAAE,SAAQ,EAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,MAAK,kBAAkB,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAACC,GAAE,KAAK,EAAC,CAAC;AAAE,SAAO,EAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,YAAY,MAAM;AAAE,SAAK,WAAS,WAAW,CAAC,gBAAgB,CAAC,MAAK,KAAK,YAAU;AAAA,EAAc;AAAA,EAAC,cAAa;AAAC,QAAIA,KAAE,KAAK,YAAY,QAAO,IAAE;AAAG,QAAGA,OAAI;AAAE,UAAE;AAAA,SAAiD;AAAC,UAAI,IAAE;AAAE,UAAE,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,0CAGuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,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;AAAE,QAAE,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,WAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAE,EAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,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;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAEC,IAAE,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;AAAE,SAAM,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAE,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAEC,IAAE,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;AAAE,WAAO,EAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,KAAEC,IAAE;AAAC,EAAAA,OAAI,QAAMD,IAAE,YAAYC,GAAE,MAAM;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,KAAE;AAAE,SAAKA,KAAED;AAAG,IAAAC,MAAG;AAAE,SAAOA;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAAC,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAE,EAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAE,WAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAE,EAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI;AAAE,WAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQ,EAAC,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,SAAQ,EAAC,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,QAAE,EAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,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,QAAE,EAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAG,GAAE,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,SAAQ,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,YAAY,GAAE,KAAK,WAAS,iEAAgE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAEC,IAAE,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,SAAO,EAAE,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,IAAE,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;AAAI,UAAI,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,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAYA,IAAE,GAAE,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,cAAY,GAAE,KAAK,iBAAe,EAAEA,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,IAAE,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI;AAAQ,YAAM,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,QAAOC,IAAE,SAAQ,GAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAEC,IAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,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,SAAQ,GAAE,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,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,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,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,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;AAAI,KAAGA,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,QAAMM,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;AAAK,YAAQ,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;AAAG,UAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAChH,SAAO;AACT;AAGO,IAAM,MAAM,MAAM;AACvB,MAAI,OAAO,gBAAgB;AAAa,WAAO,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;AAAS,aAAK,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;AAAM,aAAK,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;AAAG,QAAI,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;AAAG,aAAK,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI;AAAA,eACtE,SAAS,IAAI,KAAK,SAAS,IAAI;AAAG,aAAK,GAAG,IAAI,UAAU,MAAM,IAAI;AAAA;AACtE,aAAK,GAAG,IAAI;AAAA,IACnB,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACoRA,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,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,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;;;ACndO,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;AAAgB;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;AAAW,WAAK,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;AAAS,WAAK,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;AAAQ;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;AAAgB;AACrB,QAAI,SAA8B;AAClC,QAAI,SAAkC;AACtC,QAAI,QAAQ;AACZ,QAAI,cAAc;AAAG,eAAS;AAAA;AACzB,eAAS,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;AAAS;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,OAAK,UAAU,KAAK;AAC1B,YAAM,IAAI,QAAQA,MAAI;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;AAAS;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;AAAS;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;AAAS;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;AAAe,sBAAgBA,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;AAAa,cAAM,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;AAAa,cAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,iBAC9D,OAAO,WAAW,WAAW;AAAa,cAAI,IAAI,WAAW,OAAO,OAAO,MAAM;AAAA;AACrF,gBAAM,IAAI,MAAM,wFAAwF;AAAA,MAC/G,OAAO;AACL,cAAM,IAAI,MAAM,kEAAkE;AAAA,MACpF;AAAA,IACF;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,IAAI,WAAW;AAAa,UAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,aAC9D,OAAO,WAAW,WAAW;AAAa,UAAI,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;AAAO,UAAI,+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;AAAG,YAAM,IAAI,MAAM,yDAAyD;AAC1G,QAAI,CAAE,MAAiB;AAAO,YAAM,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;AAAG,YAAM,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;AAAO,UAAI,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;AAAO,UAAI,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;AAAG,kBAAcA,QAAO,OAAO;AAAA,cACvD,KAAAA,QAAO,WAAP,mBAAe,WAAU,KAAK;AAAG,kBAAc,kBAAkBA,QAAO,OAAO,UAAU,KAAK;AACxG,OAAKA,QAAO,OAAO,UAAU,KAAK;AAAG,mBAAeA,QAAO,OAAO;AAAA,YACxDA,QAAO,OAAO,SAAS,KAAK;AAAG,mBAAe,mBAAmBA,QAAO,OAAO,SAAS,KAAK;AACvG,MAAI,CAAC,eAAe,CAAC;AAAc,UAAM,IAAI,MAAM,yCAAyC;AAC5F,MAAI,CAAC,YAAa,SAAS,UAAU,eAAiB,SAAS,WAAW;AAAe,eAAW,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;AAAS,gBAAY,OAAO,SAAS,OAAO,SAAS,MAAM;AAGpJ,MAAIA,QAAO,OAAO,WAAW,IAAI,MAAM,WAAW;AAChD,QAAI,CAACF;AAAI,MAAAA,MAAK,IAAI,UAAU,IAAY,cAAc,IAAI;AAC1D,QAAI,SAAS,CAAC,CAACA;AACf,QAAI,EAACA,OAAA,gBAAAA,IAAI,MAAK;AACZ,UAAIE,QAAO;AAAO,YAAI,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;AAAG,QAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,aAAa;AAAG,QAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,UAAIA,QAAO,OAAO,cAAc;AAAG,QAAAF,IAAG,IAAI,WAAWE,QAAO,OAAO,SAAS;AAC5E,UAAIA,QAAO,OAAO,SAAS;AAAG,QAAAF,IAAG,IAAI,QAAQE,QAAO,OAAO,IAAI;AAC/D,UAAIA,QAAO,OAAO,eAAe;AAAG,QAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,QAAQ;AAAG,QAAAF,IAAG,IAAI,OAAOE,QAAO,OAAO,GAAG;AAC5D,UAAIA,QAAO,OAAO;AAAU,QAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO;AAAO,QAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO;AAAS,QAAAF,IAAG,IAAI,SAAS;AAC3C,UAAIE,QAAO,OAAO;AAAO,QAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO;AAAY,QAAAF,IAAG,IAAI,YAAY;AACjD,UAAIE,QAAO,OAAO;AAAa,QAAAF,IAAG,IAAI,aAAa;AACnD,UAAIE,QAAO,OAAO;AAAU,QAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO,aAAa;AAAG,QAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,YAAIC,MAAAH,IAAG,IAAI,MAAP,gBAAAG,IAAU,UAAS;AAAG,oBAAYH,IAAG,MAAM,QAAQ;AAAA;AAClD,oBAAYA,IAAG,KAAK,QAAQ;AAAA,IACnC;AAAA,EACF,OAAO;AACL,SAAK,UAAU,SAAS;AACxB,QAAIA;AAAI,MAAAA,MAAK;AACb,QAAI,SAAS,CAAC,CAACA;AAAA,EACjB;AAEA,MAAI,CAAC;AAAW,WAAO,EAAE,QAAQ,MAAM,QAAQ,UAAU;AACzD,MAAI,CAAC;AAAW,UAAM,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;AAAS,kBAAY,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;AAAQ,UAAM,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;AAAM,WAAO;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,KAA4B,CAAC;AACnC,IAAAA,GAAE,OAAU,GAAI,OAAO,KAAK,WAAW;AACvC,IAAAA,GAAE,UAAa,GAAIA,GAAE,MAAMA,GAAE,IAAI;AACjC,IAAAA,GAAE,MAAS,GAAIA,GAAE,OAAO;AACxB,UAAM,UAAU,MAAMA,GAAE,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,GAAE,MAAMA,GAAE,SAASA,GAAE,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,KAA4B,CAAC;AACnC,MAAI,CAAC,UAAU,CAAC,UAAU,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,OAAO,MAAM,QAAQ;AAClG,QAAI,CAACJ,QAAO;AAAO,UAAI,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;AAAO,UAAI,yDAAyD,OAAO,OAAO,OAAO,KAAK;AAC1G,WAAO;AAAA,EACT;AACA,EAAAI,GAAE,SAAY,GAAM,MAAM;AAC1B,EAAAA,GAAE,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,GAAE,OAAU,GAAIA,GAAE,QAAQA,GAAE,MAAM;AAClC,EAAAA,GAAE,UAAa,GAAIA,GAAE,MAAMA,GAAE,IAAI;AACjC,EAAAA,GAAE,MAAS,GAAIA,GAAE,OAAO;AACxB,QAAM,UAAU,MAAMA,GAAE,IAAI,KAAK;AACjC,QAAM,eAAe,QAAQ,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,MAAM,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM;AAC1F,EAAG,GAAQ,CAACA,GAAE,QAAQA,GAAE,QAAQA,GAAE,MAAMA,GAAE,SAASA,GAAE,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;AAAG,eAAK,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,IAAQ,EAAE,SAAS,IAAO,IAAQ,EAAE,SAAS,EAAE,aAAa;AAAA,QACzE,KAAS,IAAQ,EAAE,SAAS,IAAO,IAAQ,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,IAAW,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;AAAK,aAAO,eAAe,MAAM,OAAO,EAAE,OAAO,IAAI,CAAC;AAAA;AAC3D,WAAK,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;AAAO,aAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc;AAAM,aAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc;AAAM,aAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc;AAAO,aAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc;AAAQ,aAAK,OAAO,SAAS,6CAAc;AAC7D,UAAI,6CAAc;AAAI,aAAK,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;AAAO,kBAAI,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;AAAO,gBAAI,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;AAAG,QAAC,qBAAqB,MAAgC,QAAQ,EAAE,OAAO,KAAK,OAAO,MAAM;AACrH,YAAI,UAAK,WAAL,mBAAa,UAAS;AAAG,QAAC,qBAAqB,MAAgC,SAAS,EAAE,OAAO,KAAK,OAAO,OAAO;AACxH,UAAI,KAAK,OAAO;AAAI,QAAC,qBAAqB,MAAkC,WAAW,KAAK,OAAO;AAGnG,WAAK,QAAQ,iBAAiB,QAAQ,MAAM;AAAE,YAAI,KAAK,OAAO;AAAO,cAAI,UAAU,MAAM;AAAA,MAAG,CAAC;AAC7F,WAAK,QAAQ,iBAAiB,SAAS,MAAM;AAAE,YAAI,KAAK,OAAO;AAAO,cAAI,UAAU,OAAO;AAAA,MAAG,CAAC;AAC/F,WAAK,QAAQ,iBAAiB,SAAS,YAAY;AACjD,YAAI,CAAC,KAAK,WAAW,CAAC,KAAK;AAAQ;AACnC,YAAI,KAAK,QAAQ;AAAQ,gBAAM,KAAK,QAAQ,KAAK;AAAA;AAC5C,eAAK,QAAQ,MAAM;AAAA,MAC1B,CAAC;AAGD,UAAI,EAAC,uCAAW,eAAc;AAC5B,YAAI,KAAK,OAAO;AAAO,cAAI,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;AAAO,cAAI,gBAAgB,WAAW;AACtD,eAAO;AAAA,MACT;AACA,WAAK,QAAQ,YAAY,KAAK;AAC9B,YAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AACrC,YAAI,CAAC,KAAK;AAAS,kBAAQ,KAAK;AAAA;AAC3B,eAAK,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;AAAS,aAAK,QAAQ,MAAM;AAAA,IACvC;AAGA;AAAA,wBAAO,QAAO,YAA2B;AACvC,UAAI,KAAK;AAAS,cAAM,KAAK,QAAQ,KAAK;AAAA,IAC5C;AAGA;AAAA,wBAAO,QAAO,MAAY;AACxB,UAAI,KAAK,OAAO;AAAO,YAAI,UAAU,MAAM;AAC3C,UAAI,KAAK;AAAO,aAAK,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;AAAQ,aAAO;AACzB,WAAO,KAAK,OAAO,eAAe,EAAE,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,IAAW,eAAmD;AAC5D,QAAI,CAAC,KAAK;AAAO,aAAO;AACxB,WAAO,KAAK,MAAM,kBAAkB,KAAK,MAAM,gBAAgB,IAAI;AAAA,EACrE;AAAA;AAAA,EAGA,IAAW,cAAiD;AAC1D,QAAI,CAAC,KAAK;AAAO,aAAO;AACxB,WAAO,KAAK,MAAM,iBAAiB,KAAK,MAAM,eAAe,IAAI;AAAA,EACnE;AAAA;AAAA,EAGA,IAAW,WAA2C;AACpD,QAAI,CAAC,KAAK;AAAQ,aAAO;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;AAAO,aAAO;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;AAAO,QAAI,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;AAAG,gBAAY;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;AAAO,UAAI,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;AAAW,MAAAA,QAAM,SAAS,SAAS;AAAA;AAClC,MAAAA,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;AAAS,UAAI,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;AAAO,YAAI,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;AAAI;AACT,EAAAD,QAAO,aAAaC,IAAG,uBAAuB;AAEhD;AAOO,SAAS,SAAS,UAAuB;AA1ChD;AA4CE,MAAI,SAAS,OAAO,YAAY;AAAW;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;AAAe,QAAG,EAAI,EAAE,IAAI,iBAAiB,CAAC;AAAA,IAC1E,SAAS,KAAK;AACZ,UAAI,kDAAkD,GAAG;AACzD;AAAA,IACF;AACA,eAAW;AACX,UAAM,UAAa,IAAQ;AAC3B,UAAM,UAAU,OAAO,QAAQ,OAAO,MAAM,cAAc,QAAQ,iBAAiB,EAAE,EAAE,KAAK;AAC5F,QAAI,SAAS;AACX,UAAI,SAAS,OAAO;AAAO,YAAI,+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;AAAS,WAAO;AACpC,MAAI,IAAI,OAAO,aAAa,IAAI,OAAO;AAAS,WAAO;AACvD,MAAI,IAAI,MAAM,aAAa,IAAI,MAAM;AAAS,WAAO;AACrD,MAAI,IAAI,KAAK,aAAa,IAAI,KAAK;AAAS,WAAO;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,IAAW;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,IAAW;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,IAAW;AAAA,MAC3B,YAAY,CAACC,QAAU,GAAK,MAAM;AAChC,cAAM,UAAa,IAAW;AAC9B,QAAG,IAAW,KAAK;AACnB,cAAMC,KAAO,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;AAAO,QAAI,uBAAuB,UAAU;AACpF;AAEA,IAAI,eAAwC,CAAC;AAE7C,eAAsB,MAAM,UAAiB,QAAQ,OAAO;AAlF5D;AAmFE,WAAS,QAAQ;AACjB,QAAI,cAAS,OAAO,YAAhB,mBAAyB,YAAW;AAAG,aAAS,OAAO,UAAU,MAAM,eAAe;AAC1F,MAAI,SAAS,IAAI,WAAY,SAAS,OAAO,WAAY,SAAS,OAAO,QAAQ,SAAS,KAAU,IAAW,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;AAAO,cAAI,2BAA2B;AAAA,MAC5D;AAEA,UAAI,OAAO,cAAc,iBAAe,4CAAW,cAAX,mBAAsB,cAAc,SAAS,cAAa;AAChG,YAAI,SAAS,OAAO;AAAO,cAAI,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;AAAO,YAAI,uBAAuB,SAAS;AAG/D,UAAI,IAAI,WAAW,CAAC,IAAI,QAAS,SAAS,OAAO,YAAY,gBAAiB,UAAU,SAAS,OAAO,GAAG;AACzG,YAAI,SAAS,OAAO;AAAO,cAAI,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;AAAO,cAAI,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;AAAO,gBAAI,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;AAAO,cAAI,6BAA6B,SAAS,OAAO,OAAO,EAAE;AAAA,MACvF;AAEA,UAAI,SAAS,OAAO;AAAO,YAAI,oBAAoB,CAAC,SAAS,OAAO,OAAO,CAAC;AAG5E,UAAI,SAAS,OAAO,YAAY,QAAQ;AAEtC,YAAO,EAAI,EAAE,aAAa;AAA+B,UAAG,EAAI,EAAE,IAAI,iCAAiC,IAAI;AAC3G,YAAI,SAAS,OAAO;AAAO,cAAI,cAAc,SAAS,OAAO,QAAQ;AACrE,YAAI,OAAU,QAAiB;AAAa,UAAG,IAAa,SAAS,OAAO,UAAU,SAAS,OAAO,iBAAiB;AAAA;AAClH,gBAAM,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;AAAO,gBAAI,mBAAmB,OAAO,SAAS,SAAS,IAAIA,MAAK,kBAAkB,gBAAgB,EAAE;AACxH,cAAI,SAAS,OAAO,SAAS,CAAC;AAAM,gBAAI,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;AAAO,uBAAe,KAAK,MAAM,KAAK,UAAa,EAAI,EAAE,KAAK,CAAC;AAAA,IACrF;AAGA,QAAO,IAAW,MAAM,aAAgB,IAAW,MAAM,SAAS;AAEhE,UAAO,EAAI,EAAE,aAAa;AAA2B,QAAG,EAAI,EAAE,IAAI,6BAA6B,IAAI;AAEnG,UAAO,EAAI,EAAE,aAAa;AAAgB,QAAG,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,IAAW,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;AAAG;AACzC,qBAAa,GAAG,IAAI,SAAS,GAAG;AAAA,MAClC;AACA,UAAI,SAAS,OAAO,SAAS,OAAO,KAAK,YAAY,EAAE,SAAS;AAAG,YAAI,YAAe,IAAW,GAAG,UAAU,YAAY;AAAA,IAC5H;AAEA,QAAI,SAAS,OAAO,SAAS,OAAO,KAAK,SAAS,OAAO,KAAK,EAAE,SAAS,GAAG;AAC1E,UAAI,SAAS,OAAO;AAAO,YAAI,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,IAAW;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;AAAO,cAAI,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,IAAW,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;AAAO,QAAI,4BAA4B;AAAA,WACnC,CAAC,MAAM;AAAY,QAAI,wCAAwC;AAAA,OACnE;AACH,UAAM,MAAM,MAAM,WAAW,MAAM,EAAE,oBAAoB,KAAK,CAAC;AAC/D,QAAI,CAAC;AAAK,UAAI,uCAAuC;AAAA;AAChD,aAAO;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;AAAa,WAAO,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;AAAG;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;AAAG;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;AAA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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,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,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,QAA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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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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,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", + "names": ["r2", "r", "t", "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", "_c", "_d", "_f", "model", "inputSize", "load", "config", "index", "face", "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", "_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", "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", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "t0", "_a", "_b", "_e", "annotations", "pt", "kp", "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", "x1", "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", "_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", "init", "process", "_c", "predict", "count", "model", "calc", "t0", "ms", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] } diff --git a/dist/human.js b/dist/human.js index cd1ca780..af678deb 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4,57 +4,57 @@ author: ' */ -"use strict";var Human=(()=>{var Hc=Object.defineProperty;var mC=Object.getOwnPropertyDescriptor;var fC=Object.getOwnPropertyNames;var gC=Object.prototype.hasOwnProperty;var yC=(e,t,a)=>t in e?Hc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var xr=(e,t)=>{for(var a in t)Hc(e,a,{get:t[a],enumerable:!0})},xC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of fC(t))!gC.call(e,r)&&r!==a&&Hc(e,r,{get:()=>t[r],enumerable:!(n=mC(t,r))||n.enumerable});return e};var AC=e=>xC(Hc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>(yC(e,typeof t!="symbol"?t+"":t,a),a),zx=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var Ka=(e,t,a)=>(zx(e,t,"read from private field"),a?a.call(e):t.get(e)),jn=(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)},Ar=(e,t,a,n)=>(zx(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var H3e={};xr(H3e,{Env:()=>ac,Human:()=>Sx,default:()=>Sx,defaults:()=>ol,draw:()=>C0,empty:()=>cr,env:()=>ne,match:()=>em,models:()=>Ix});var qe={};xr(qe,{Abs:()=>ru,Acos:()=>ri,Acosh:()=>si,AdadeltaOptimizer:()=>Xg,AdagradOptimizer:()=>Kg,AdamOptimizer:()=>Yg,AdamaxOptimizer:()=>Zg,Add:()=>rs,AddN:()=>ii,All:()=>oi,Any:()=>li,ArgMax:()=>su,ArgMin:()=>iu,Asin:()=>ui,Asinh:()=>di,Atan:()=>pi,Atan2:()=>hi,Atanh:()=>ci,AvgPool:()=>mi,AvgPool3D:()=>ou,AvgPool3DGrad:()=>dp,AvgPoolGrad:()=>up,BackendWasm:()=>lk,BatchMatMul:()=>fi,BatchToSpaceND:()=>lu,Bincount:()=>gi,BitwiseAnd:()=>uu,BroadcastArgs:()=>du,BroadcastTo:()=>dT,Cast:()=>yi,Ceil:()=>xi,ClipByValue:()=>ss,Complex:()=>pp,ComplexAbs:()=>cp,Concat:()=>pu,Conv2D:()=>Ai,Conv2DBackpropFilter:()=>hp,Conv2DBackpropInput:()=>bi,Conv3D:()=>vi,Conv3DBackpropFilterV2:()=>cu,Conv3DBackpropInputV2:()=>wi,Cos:()=>ki,Cosh:()=>Ii,CropAndResize:()=>Ti,Cumprod:()=>Si,Cumsum:()=>Ci,DataStorage:()=>ip,DenseBincount:()=>hu,DepthToSpace:()=>Ni,DepthwiseConv2dNative:()=>Ri,DepthwiseConv2dNativeBackpropFilter:()=>mp,DepthwiseConv2dNativeBackpropInput:()=>fp,Diag:()=>mu,Dilation2D:()=>Ei,Dilation2DBackpropFilter:()=>Ul,Dilation2DBackpropInput:()=>Vl,Draw:()=>gp,ENV:()=>J1,Einsum:()=>yp,Elu:()=>_i,EluGrad:()=>fu,Environment:()=>xA,Equal:()=>$i,Erf:()=>Pi,Exp:()=>Fi,ExpandDims:()=>gu,Expm1:()=>Di,FFT:()=>xp,Fill:()=>yu,FlipLeftRight:()=>Oi,Floor:()=>zi,FloorDiv:()=>Li,FromPixels:()=>zd,FusedBatchNorm:()=>Wi,FusedConv2D:()=>Yr,FusedDepthwiseConv2D:()=>Zr,GPGPUContext:()=>Wl,GatherNd:()=>Bi,GatherV2:()=>xu,GraphModel:()=>Xp,Greater:()=>Vi,GreaterEqual:()=>Ui,IFFT:()=>Ap,Identity:()=>Gi,Imag:()=>bp,IsFinite:()=>Hi,IsInf:()=>ji,IsNan:()=>qi,KernelBackend:()=>au,LRN:()=>no,LRNGrad:()=>Au,LeakyRelu:()=>Xi,Less:()=>Ki,LessEqual:()=>Yi,LinSpace:()=>Zi,Log:()=>Ji,Log1p:()=>Qi,LogSoftmax:()=>pT,LogicalAnd:()=>eo,LogicalNot:()=>to,LogicalOr:()=>ao,LogicalXor:()=>bA,LowerBound:()=>cT,MathBackendCPU:()=>Qh,MathBackendWebGL:()=>Ku,MatrixBandPart:()=>hT,Max:()=>ro,MaxPool:()=>io,MaxPool3D:()=>bu,MaxPool3DGrad:()=>wp,MaxPoolGrad:()=>vp,MaxPoolWithArgmax:()=>vu,Maximum:()=>so,Mean:()=>oo,Min:()=>lo,Minimum:()=>uo,MirrorPad:()=>po,Mod:()=>co,MomentumOptimizer:()=>Jg,Multinomial:()=>ho,Multiply:()=>mo,Neg:()=>wu,NonMaxSuppressionV3:()=>go,NonMaxSuppressionV4:()=>ku,NonMaxSuppressionV5:()=>yo,NotEqual:()=>fo,OP_SCOPE_SUFFIX:()=>ag,OneHot:()=>xo,OnesLike:()=>Iu,Optimizer:()=>us,OptimizerConstructors:()=>E7,Pack:()=>Su,PadV2:()=>Ao,Pool:()=>mT,Pow:()=>bo,Prelu:()=>vo,Prod:()=>wo,RMSPropOptimizer:()=>Qg,RaggedGather:()=>Mh,RaggedRange:()=>_h,RaggedTensorToTensor:()=>Ph,Range:()=>Cu,Rank:()=>n1,Real:()=>kp,RealDiv:()=>Mi,Reciprocal:()=>ko,Reduction:()=>ka,Relu:()=>Io,Relu6:()=>To,Reshape:()=>Tu,ResizeBilinear:()=>Co,ResizeBilinearGrad:()=>Ru,ResizeNearestNeighbor:()=>So,ResizeNearestNeighborGrad:()=>Nu,Reverse:()=>No,RotateWithOffset:()=>Zo,Round:()=>Ro,Rsqrt:()=>Eo,SGDOptimizer:()=>Jh,ScatterNd:()=>Mo,SearchSorted:()=>Po,Select:()=>Eu,Selu:()=>$o,Sigmoid:()=>zo,Sign:()=>Oo,Sin:()=>Fo,Sinh:()=>Do,Slice:()=>Mu,Softmax:()=>Vo,Softplus:()=>Lo,SpaceToBatchND:()=>_u,SparseFillEmptyRows:()=>Ip,SparseReshape:()=>$u,SparseSegmentMean:()=>Fu,SparseSegmentSum:()=>Du,SparseToDense:()=>Uo,SplitV:()=>Pu,Sqrt:()=>Wo,Square:()=>Sp,SquaredDifference:()=>Go,StaticRegexReplace:()=>Cp,Step:()=>os,StridedSlice:()=>Ho,StringNGrams:()=>Ou,StringSplit:()=>Tp,StringToHashBucketFast:()=>Np,Sub:()=>jo,Sum:()=>Bo,Tan:()=>qo,Tanh:()=>Xo,Tensor:()=>mt,TensorBuffer:()=>Ut,TensorScatterUpdate:()=>_o,Tile:()=>is,TopK:()=>Ko,Transform:()=>Yo,Transpose:()=>kr,Unique:()=>Rp,Unpack:()=>zu,UnsortedSegmentSum:()=>Ep,UpperBound:()=>fT,Variable:()=>Vd,WebGPUBackend:()=>u0,ZerosLike:()=>Lu,_FusedMatMul:()=>Kr,abs:()=>Ja,acos:()=>GA,acosh:()=>HA,add:()=>we,addN:()=>Fh,all:()=>jA,any:()=>qA,argMax:()=>sr,argMin:()=>XA,asin:()=>KA,asinh:()=>YA,atan:()=>ZA,atan2:()=>JA,atanh:()=>QA,avgPool:()=>dg,avgPool3d:()=>nb,backend:()=>rr,backend_util:()=>S,basicLSTMCell:()=>rb,batchNorm:()=>Wp,batchNorm2d:()=>sb,batchNorm3d:()=>ib,batchNorm4d:()=>ob,batchToSpaceND:()=>pg,bincount:()=>cg,bitwiseAnd:()=>lb,booleanMaskAsync:()=>j4,broadcastArgs:()=>ub,broadcastTo:()=>Ll,broadcast_util:()=>Qo,browser:()=>Er,buffer:()=>$e,cast:()=>Ue,ceil:()=>db,clipByValue:()=>pb,clone:()=>Sa,complex:()=>Cr,concat:()=>lt,concat1d:()=>cb,concat2d:()=>Wu,concat3d:()=>hb,concat4d:()=>mb,conv1d:()=>fb,conv2d:()=>Bp,conv2dTranspose:()=>yb,conv3d:()=>xb,conv3dTranspose:()=>Ab,copyRegisteredKernels:()=>bT,cos:()=>bb,cosh:()=>vb,cosineWindow:()=>qh,cumprod:()=>wb,cumsum:()=>kb,customGrad:()=>er,denseBincount:()=>Ib,deprecationWarn:()=>og,depthToSpace:()=>Sb,depthwiseConv2d:()=>Dh,deregisterOp:()=>bD,device_util:()=>$p,diag:()=>Cb,dilation2d:()=>Tb,disableDeprecationWarnings:()=>_N,dispose:()=>J,disposeVariables:()=>PN,div:()=>ve,divNoNan:()=>Rb,dot:()=>Eb,dropout:()=>Z4,einsum:()=>Ls,elu:()=>fg,enableDebugMode:()=>MN,enableProdMode:()=>ig,enclosingPowerOfTwo:()=>Hg,engine:()=>It,ensureShape:()=>Mb,env:()=>W,equal:()=>mg,erf:()=>_b,euclideanNorm:()=>Fb,exp:()=>es,expandDims:()=>Bt,expm1:()=>Db,eye:()=>yg,fft:()=>Uh,fill:()=>ir,findBackend:()=>lg,findBackendFactory:()=>zN,floor:()=>xg,floorDiv:()=>zp,forceHalfFloat:()=>a8,fused:()=>jg,gather:()=>Ag,gatherND:()=>Y4,gather_util:()=>a3,getBackend:()=>ha,getGradient:()=>t1,getKernel:()=>Wd,getKernelsForBackend:()=>Zn,getThreadsCount:()=>Goe,gpgpu_util:()=>$v,grad:()=>zE,grads:()=>LE,greater:()=>Gp,greaterEqual:()=>bg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>J4,io:()=>Xn,irfft:()=>Lg,isFinite:()=>Ob,isInf:()=>zb,isNaN:()=>Lb,keep:()=>zn,kernel_impls:()=>En,leakyRelu:()=>vg,less:()=>mh,lessEqual:()=>Oh,linalg:()=>i7,linspace:()=>Wb,loadGraphModel:()=>o3,loadGraphModelSync:()=>CO,localResponseNormalization:()=>Bb,log:()=>jl,log1p:()=>wg,logSigmoid:()=>Ub,logSoftmax:()=>Gb,logSumExp:()=>Ig,logicalAnd:()=>Xd,logicalNot:()=>Sg,logicalOr:()=>Cg,logicalXor:()=>Hb,losses:()=>o7,lowerBound:()=>jb,matMul:()=>pt,math:()=>x7,max:()=>ga,maxPool:()=>Tg,maxPool3d:()=>qb,maxPoolWithArgmax:()=>Xb,maximum:()=>Ng,mean:()=>Kd,memory:()=>$N,meshgrid:()=>Kb,min:()=>Qr,minimum:()=>Yd,mirrorPad:()=>Yb,mod:()=>Bu,moments:()=>Zb,movingAverage:()=>q4,mul:()=>te,multiRNNCell:()=>Jb,multinomial:()=>Qb,neg:()=>Ln,nextFrame:()=>M7,norm:()=>Up,notEqual:()=>Rg,oneHot:()=>fh,ones:()=>Gr,onesLike:()=>e4,op:()=>z,outerProduct:()=>t4,pad:()=>or,pad1d:()=>a4,pad2d:()=>n4,pad3d:()=>r4,pad4d:()=>s4,pool:()=>i4,pow:()=>Hl,prelu:()=>Mg,print:()=>sg,prod:()=>o4,profile:()=>FN,raggedGather:()=>l4,raggedRange:()=>u4,raggedTensorToTensor:()=>d4,rand:()=>p4,randomGamma:()=>f4,randomNormal:()=>Dg,randomStandardNormal:()=>g4,randomUniform:()=>Wh,randomUniformInt:()=>y4,range:()=>ql,ready:()=>Op,real:()=>Xl,reciprocal:()=>x4,registerBackend:()=>Jo,registerGradient:()=>yT,registerKernel:()=>xn,registerOp:()=>AD,relu:()=>jp,relu6:()=>Og,removeBackend:()=>ON,reshape:()=>Q,reverse:()=>ts,reverse1d:()=>A4,reverse2d:()=>b4,reverse3d:()=>v4,reverse4d:()=>w4,rfft:()=>Gh,round:()=>zg,rsqrt:()=>k4,scalar:()=>Ge,scatterND:()=>X4,scatter_util:()=>Hh,searchSorted:()=>Lh,selu:()=>I4,separableConv2d:()=>S4,serialization:()=>d7,setBackend:()=>Dp,setPlatform:()=>LN,setThreadsCount:()=>Uoe,setWasmPath:()=>Voe,setWasmPaths:()=>l0,setWebGLContext:()=>a0,setdiff1dAsync:()=>C4,shared:()=>e0,sigmoid:()=>Wa,sign:()=>T4,signal:()=>s7,sin:()=>N4,sinh:()=>R4,slice:()=>Fe,slice1d:()=>E4,slice2d:()=>M4,slice3d:()=>qp,slice4d:()=>Bh,slice_util:()=>Nt,softmax:()=>Vh,softplus:()=>kg,spaceToBatchND:()=>Eg,sparse:()=>l7,sparseToDense:()=>K4,spectral:()=>r7,split:()=>Ca,sqrt:()=>Qn,square:()=>Nn,squaredDifference:()=>Wg,squeeze:()=>Oe,stack:()=>ca,step:()=>Bg,stridedSlice:()=>_4,string:()=>u7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Pp,tan:()=>P4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Vt,tensor2d:()=>Yn,tensor3d:()=>Vg,tensor4d:()=>$4,tensor5d:()=>F4,tensor6d:()=>D4,tensorScatterUpdate:()=>z4,tensor_util:()=>SA,test_util:()=>c4,tidy:()=>De,tile:()=>qr,time:()=>DN,topk:()=>L4,train:()=>gF,transpose:()=>Ys,truncatedNormal:()=>W4,unique:()=>B4,unregisterGradient:()=>AT,unregisterKernel:()=>xT,unsortedSegmentSum:()=>V4,unstack:()=>Ra,upcastType:()=>pa,upperBound:()=>U4,util:()=>v,valueAndGrad:()=>WE,valueAndGrads:()=>BE,variable:()=>G4,variableGrads:()=>Vb,version:()=>tc,version_converter:()=>NO,version_core:()=>n3,version_cpu:()=>Bz,version_wasm:()=>Hoe,version_webgl:()=>Ej,webgl:()=>Mj,webgl_util:()=>rv,webgpu_util:()=>pk,where:()=>Ir,whereAsync:()=>Gg,zeros:()=>yn,zerosLike:()=>en});var bC=Object.create,K1=Object.defineProperty,vC=Object.getOwnPropertyDescriptor,wC=Object.getOwnPropertyNames,kC=Object.getPrototypeOf,IC=Object.prototype.hasOwnProperty,Kt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var a in t)K1(e,a,{get:t[a],enumerable:!0})},SC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wC(t))!IC.call(e,r)&&r!==a&&K1(e,r,{get:()=>t[r],enumerable:!(n=vC(t,r))||n.enumerable});return e},tu=(e,t,a)=>(a=e!=null?bC(kC(e)):{},SC(t||!e||!e.__esModule?K1(a,"default",{value:e,enumerable:!0}):a,e)),CC=Kt((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(C){}function n(C,_,O){this.low=C|0,this.high=_|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(C){return(C&&C.__isLong__)===!0}n.isLong=r;var s={},i={};function o(C,_){var O,B,F;return _?(C>>>=0,(F=0<=C&&C<256)&&(B=i[C],B)?B:(O=u(C,(C|0)<0?-1:0,!0),F&&(i[C]=O),O)):(C|=0,(F=-128<=C&&C<128)&&(B=s[C],B)?B:(O=u(C,C<0?-1:0,!1),F&&(s[C]=O),O))}n.fromInt=o;function l(C,_){if(isNaN(C))return _?b:A;if(_){if(C<0)return b;if(C>=g)return M}else{if(C<=-y)return P;if(C+1>=y)return N}return C<0?l(-C,_).neg():u(C%f|0,C/f|0,_)}n.fromNumber=l;function u(C,_,O){return new n(C,_,O)}n.fromBits=u;var p=Math.pow;function c(C,_,O){if(C.length===0)throw Error("empty string");if(C==="NaN"||C==="Infinity"||C==="+Infinity"||C==="-Infinity")return A;if(typeof _=="number"?(O=_,_=!1):_=!!_,O=O||10,O<2||360)throw Error("interior hyphen");if(B===0)return c(C.substring(1),_,O).neg();for(var F=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(C){if(C=C||10,C<2||36>>0,V=H.toString(C);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(P)?64:this.neg().getNumBitsAbs();for(var C=this.high!=0?this.high:this.low,_=31;_>0&&!(C&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(C){return r(C)||(C=d(C)),this.unsigned!==C.unsigned&&this.high>>>31===1&&C.high>>>31===1?!1:this.high===C.high&&this.low===C.low},E.eq=E.equals,E.notEquals=function(C){return!this.eq(C)},E.neq=E.notEquals,E.ne=E.notEquals,E.lessThan=function(C){return this.comp(C)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(C){return this.comp(C)<=0},E.lte=E.lessThanOrEqual,E.le=E.lessThanOrEqual,E.greaterThan=function(C){return this.comp(C)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(C){return this.comp(C)>=0},E.gte=E.greaterThanOrEqual,E.ge=E.greaterThanOrEqual,E.compare=function(C){if(r(C)||(C=d(C)),this.eq(C))return 0;var _=this.isNegative(),O=C.isNegative();return _&&!O?-1:!_&&O?1:this.unsigned?C.high>>>0>this.high>>>0||C.high===this.high&&C.low>>>0>this.low>>>0?-1:1:this.sub(C).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},E.neg=E.negate,E.add=function(C){r(C)||(C=d(C));var _=this.high>>>16,O=this.high&65535,B=this.low>>>16,F=this.low&65535,U=C.high>>>16,G=C.high&65535,q=C.low>>>16,H=C.low&65535,V=0,Z=0,X=0,re=0;return re+=F+H,X+=re>>>16,re&=65535,X+=B+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(C){return r(C)||(C=d(C)),this.add(C.neg())},E.sub=E.subtract,E.multiply=function(C){if(this.isZero())return A;if(r(C)||(C=d(C)),a){var _=a.mul(this.low,this.high,C.low,C.high);return u(_,a.get_high(),this.unsigned)}if(C.isZero())return A;if(this.eq(P))return C.isOdd()?P:A;if(C.eq(P))return this.isOdd()?P:A;if(this.isNegative())return C.isNegative()?this.neg().mul(C.neg()):this.neg().mul(C).neg();if(C.isNegative())return this.mul(C.neg()).neg();if(this.lt(x)&&C.lt(x))return l(this.toNumber()*C.toNumber(),this.unsigned);var O=this.high>>>16,B=this.high&65535,F=this.low>>>16,U=this.low&65535,G=C.high>>>16,q=C.high&65535,H=C.low>>>16,V=C.low&65535,Z=0,X=0,re=0,ee=0;return ee+=U*V,re+=ee>>>16,ee&=65535,re+=F*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=B*V,Z+=X>>>16,X&=65535,X+=F*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+B*H+F*q+U*G,Z&=65535,u(re<<16|ee,Z<<16|X,this.unsigned)},E.mul=E.multiply,E.divide=function(C){if(r(C)||(C=d(C)),C.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&C.low===-1&&C.high===-1)return this;var _=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,C.low,C.high);return u(_,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var O,B,F;if(this.unsigned){if(C.unsigned||(C=C.toUnsigned()),C.gt(this))return b;if(C.gt(this.shru(1)))return I;F=b}else{if(this.eq(P)){if(C.eq(w)||C.eq(T))return P;if(C.eq(P))return w;var U=this.shr(1);return O=U.div(C).shl(1),O.eq(A)?C.isNegative()?w:T:(B=this.sub(C.mul(O)),F=O.add(B.div(C)),F)}else if(C.eq(P))return this.unsigned?b:A;if(this.isNegative())return C.isNegative()?this.neg().div(C.neg()):this.neg().div(C).neg();if(C.isNegative())return this.div(C.neg()).neg();F=A}for(B=this;B.gte(C);){O=Math.max(1,Math.floor(B.toNumber()/C.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(C);V.isNegative()||V.gt(B);)O-=q,H=l(O,this.unsigned),V=H.mul(C);H.isZero()&&(H=w),F=F.add(H),B=B.sub(V)}return F},E.div=E.divide,E.modulo=function(C){if(r(C)||(C=d(C)),a){var _=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,C.low,C.high);return u(_,a.get_high(),this.unsigned)}return this.sub(this.div(C).mul(C))},E.mod=E.modulo,E.rem=E.modulo,E.not=function(){return u(~this.low,~this.high,this.unsigned)},E.and=function(C){return r(C)||(C=d(C)),u(this.low&C.low,this.high&C.high,this.unsigned)},E.or=function(C){return r(C)||(C=d(C)),u(this.low|C.low,this.high|C.high,this.unsigned)},E.xor=function(C){return r(C)||(C=d(C)),u(this.low^C.low,this.high^C.high,this.unsigned)},E.shiftLeft=function(C){return r(C)&&(C=C.toInt()),(C&=63)===0?this:C<32?u(this.low<>>32-C,this.unsigned):u(0,this.low<>>C|this.high<<32-C,this.high>>C,this.unsigned):u(this.high>>C-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(C){if(r(C)&&(C=C.toInt()),C&=63,C===0)return this;var _=this.high;if(C<32){var O=this.low;return u(O>>>C|_<<32-C,_>>>C,this.unsigned)}else return C===32?u(_,0,this.unsigned):u(_>>>C-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(C){return C?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var C=this.high,_=this.low;return[_&255,_>>>8&255,_>>>16&255,_>>>24,C&255,C>>>8&255,C>>>16&255,C>>>24]},E.toBytesBE=function(){var C=this.high,_=this.low;return[C>>>24,C>>>16&255,C>>>8&255,C&255,_>>>24,_>>>16&255,_>>>8&255,_&255]},n.fromBytes=function(C,_,O){return O?n.fromBytesLE(C,_):n.fromBytesBE(C,_)},n.fromBytesLE=function(C,_){return new n(C[0]|C[1]<<8|C[2]<<16|C[3]<<24,C[4]|C[5]<<8|C[6]<<16|C[7]<<24,_)},n.fromBytesBE=function(C,_){return new n(C[4]<<24|C[5]<<16|C[6]<<8|C[7],C[0]<<24|C[1]<<16|C[2]<<8|C[3],_)}}),TC=Kt(()=>{}),NC=Kt(()=>{}),RC=Kt((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)}),EC=Kt((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)}),MC=Kt((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)}),_C=Kt((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)}),PC=Kt((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)}),$C=Kt((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)}),FC=Kt(()=>{}),DC=Kt((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),P=new f(N),E=function(){for(var C=P.g(i),_=u,O=0;C=c;)C/=2,_/=2,O>>>=1;return(C+O)/_};return E.int32=function(){return P.g(4)|0},E.quick=function(){return P.g(4)/4294967296},E.double=E,x(b(P.S),n),(I.pass||T||function(C,_,O,B){return B&&(B.S&&g(B,P),C.state=function(){return g(P,{})}),O?(r[l]=C,_):C})(E,M,"global"in I?I.global:this==r,I.state)}function f(w){var I,T=w.length,N=this,M=0,P=N.i=N.j=0,E=N.S=[];for(T||(w=[T++]);M{var a=RC(),n=EC(),r=MC(),s=_C(),i=PC(),o=$C(),l=DC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),iA=Kt(()=>{}),oA=Kt(()=>{}),OC=Kt(()=>{}),zC=Kt(()=>{}),LC=Kt(()=>{}),WC=Kt((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),yt}function i(){return ie.buffer!=He&&ht(ie.buffer),qa}function o(){return ie.buffer!=He&&ht(ie.buffer),Lt}function l(){return ie.buffer!=He&&ht(ie.buffer),la}function u(){return ie.buffer!=He&&ht(ie.buffer),Fa}function p(){return ie.buffer!=He&&ht(ie.buffer),pn}function c(){return ie.buffer!=He&&ht(ie.buffer),Da}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 P,E,C,_;function O(D){D instanceof _s||H("exiting due to exception: "+D)}if(I){var B=iA(),F=oA();w?N=F.dirname(N)+"/":N=__dirname+"/",P=(j,oe)=>(j=Sl(j)?new URL(j):F.normalize(j),B.readFileSync(j,oe?void 0:"utf8")),C=j=>{var oe=P(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Me)=>{j=Sl(j)?new URL(j):F.normalize(j),B.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 _s))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=OC()}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||(P=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.send(null),j.responseText},w&&(C=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=zC().performance);var U=console.log.bind(console),G=console.warn.bind(console);I&&(U=D=>B.writeSync(1,D+` -`),G=D=>B.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"&&Ms("no native wasm support detected");var ie,be,Ce=!1,Re;function Le(D,j){D||Ms(j)}var Xe=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&&Xe)return Xe.decode(D.buffer instanceof SharedArrayBuffer?D.slice(j,je):D.subarray(j,je));for(var Be="";j>10,56320|hn&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,yt,qa,Lt,dn,la,Fa,pn,Da;T&&(He=d.buffer);function ht(D){He=D,d.HEAP8=yt=new Int8Array(D),d.HEAP16=Lt=new Int16Array(D),d.HEAP32=la=new Int32Array(D),d.HEAPU8=qa=new Uint8Array(D),d.HEAPU16=dn=new Uint16Array(D),d.HEAPU32=Fa=new Uint32Array(D),d.HEAPF32=pn=new Float32Array(D),d.HEAPF64=Da=new Float64Array(D)}var Oa=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:Oa/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),Oa=He.byteLength,ht(He);var Xa,mr=[],kl=[],Hn=[],hd=!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());fd(mr)}function Zt(){hd=!0,!T&&fd(kl)}function yc(){if(!T){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)Cx(d.postRun.shift());fd(Hn)}}function pm(D){mr.unshift(D)}function cm(D){kl.unshift(D)}function Cx(D){Hn.unshift(D)}var Or=0,Il=null,fr=null;function hm(D){Or++,d.monitorRunDependencies&&d.monitorRunDependencies(Or)}function xc(D){if(Or--,d.monitorRunDependencies&&d.monitorRunDependencies(Or),Or==0&&(Il!==null&&(clearInterval(Il),Il=null),fr)){var j=fr;fr=null,j()}}function Ms(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 Ac(D){return D.startsWith(mm)}function Sl(D){return D.startsWith("file://")}var fa;fa="tfjs-backend-wasm-threaded-simd.wasm",Ac(fa)||(fa=M(fa));function bc(D){try{if(D==fa&&ee)return new Uint8Array(ee);if(C)return C(D);throw"both async and sync fetching of the wasm failed"}catch(j){Ms(j)}}function fm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Sl(fa))return fetch(fa,{credentials:"same-origin"}).then(function(D){if(!D.ok)throw"failed to load wasm binary file at '"+fa+"'";return D.arrayBuffer()}).catch(function(){return bc(fa)});if(E)return new Promise(function(D,j){E(fa,function(oe){D(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return bc(fa)})}function gm(){var D={env:Pc,wasi_snapshot_preview1:Pc};function j(ye,Ne){var Tt=ye.exports;if(d.asm=Tt,Sm(d.asm._emscripten_tls_init),Xa=d.asm.__indirect_function_table,cm(d.asm.__wasm_call_ctors),be=Ne,!T){var hn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(yr){We.loadWasmModuleToWorker(yr,function(){--hn||xc("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),Ms(Ne)})}function je(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!Ac(fa)&&!Sl(fa)&&!I&&typeof fetch=="function"?fetch(fa,{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 Tx,Nx,vc={};function _s(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 md(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 wc={varargs:void 0,get:function(){wc.varargs+=4;var D=l()[wc.varargs-4>>>2];return D},getStr:function(D){var j=dt(D);return j}};function kc(D){if(T)return zr(1,1,D);Re=D,In()||(We.terminateAllThreads(),d.onExit&&d.onExit(D),Ce=!0),A(D,new _s(D))}function bm(D,j){if(Re=D,!j&&T)throw Sc(D),"unwind";kc(D)}var Ic=bm;function vm(D){if(D instanceof _s||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!=Lc()){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"?gd(ye.queue):Ne==="spawnThread"?Am(ye):Ne==="cleanupThread"?md(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 fd(D){for(;D.length>0;)D.shift()(d)}function wm(){var D=Lc(),j=l()[D+52>>>2],oe=l()[D+56>>>2],Me=j-oe;$x(j,Me),Wc(j)}d.establishStackSpace=wm;function Sc(D){if(T)return zr(2,0,D);try{Ic(D)}catch(j){vm(j)}}var Cl=[];function km(D){var j=Cl[D];return j||(D>=Cl.length&&(Cl.length=D+1),Cl[D]=j=Xa.get(D)),j}function Im(D,j){var oe=km(D)(j);In()?We.setExitStatus(oe):Px(oe)}d.invokeEntryPoint=Im;function Sm(D){We.tlsInitFunctions.push(D)}function Cm(D){Ex(D,!w,1,!b),We.threadInitTLS()}function Tm(D){T?postMessage({cmd:"cleanupThread",thread:D}):md(D)}function Cc(D,j,oe,Me){return T?zr(3,1,D,j,oe,Me):Tc(D,j,oe,Me)}function Tc(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 Cc(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 gd(D){Atomics.store(l(),D>>2,1),Lc()&&_x(D),Atomics.compareExchange(l(),D>>2,1,0)}d.executeNotifiedProxyingQueue=gd;function Mm(D,j,oe,Me){if(D==j)setTimeout(()=>gd(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(){Ms("")}function Ps(D){Ps.shown||(Ps.shown={}),Ps.shown[D]||(Ps.shown[D]=1,I&&(D="warning: "+D),H(D))}function $m(){I||w||Ps("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 Nc(){return 4294901760}function Dm(){return Nc()}var yd;I?yd=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:yd=()=>performance.timeOrigin+performance.now();function Om(D,j,oe){i().copyWithin(D>>>0,j>>>0,j+oe>>>0)}function zm(){return I?LC().cpus().length:navigator.hardwareConcurrency}function Lm(D){var j=U2(),oe=D();return Wc(j),oe}function zr(D,j){var oe=arguments.length-2,Me=arguments;return Lm(()=>{for(var je=oe,Be=Bc(je*8),ye=Be>>3,Ne=0;Ne>>0]=Tt}return Mx(D,je,Be,j)})}var xd=[];function Wm(D,j,oe){xd.length=j;for(var Me=oe>>3,je=0;je>>0];var Be=D<0,ye=Be?vc[-D-1]:Km[D];return ye.apply(null,xd)}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=Nc();if(D>oe)return!1;let Me=(Tt,hn)=>Tt+(hn-Tt%hn)%hn;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 Rc(D){return T?zr(4,1,D):52}function Ec(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 Mc(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 _c(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:mn=>{var El=0;if(mn!=null&&mn!==0){var Ox=(mn.length<<2)+1;El=Bc(Ox),it(mn,El,Ox)}return El},array:mn=>{var El=Bc(mn.length);return jm(mn,El),El}};function ye(mn){return j==="string"?dt(mn):j==="boolean"?!!mn:mn}var Ne=_c(D),Tt=[],hn=0;if(Me)for(var yr=0;yrye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Me?_c(D):function(){return qm(D,j,oe,arguments,Me)}}We.init();var Km=[null,kc,Sc,Cc,Rc,Ec,Mc],Pc={__emscripten_init_main_thread_js:Cm,__emscripten_thread_cleanup:Tm,__pthread_create_js:Tc,_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:yd,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:Ic,fd_close:Rc,fd_seek:Ec,fd_write:Mc,memory:ie||d.wasmMemory},Rx=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)},$c=d._NonMaxSuppressionV5=function(){return($c=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Fc=d._NotEqual=function(){return(Fc=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},Ad=d._OneHot=function(){return(Ad=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)},Tl=d._Prelu=function(){return(Tl=d._Prelu=d.asm.Prelu).apply(null,arguments)},Dc=d._Prod=function(){return(Dc=d._Prod=d.asm.Prod).apply(null,arguments)},Nl=d._RealDiv=function(){return(Nl=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},Rl=d._Reciprocal=function(){return(Rl=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)},Wt=d._Rsqrt=function(){return(Wt=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},cn=d._ScatterNd=function(){return(cn=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},gr=d._SearchSorted=function(){return(gr=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},Oc=d._SelectV2=function(){return(Oc=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},bd=d._Selu=function(){return(bd=d._Selu=d.asm.Selu).apply(null,arguments)},B2=d._Sigmoid=function(){return(B2=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},za=d._Sign=function(){return(za=d._Sign=d.asm.Sign).apply(null,arguments)},Lr=d._Sin=function(){return(Lr=d._Sin=d.asm.Sin).apply(null,arguments)},zc=d._Sinh=function(){return(zc=d._Sinh=d.asm.Sinh).apply(null,arguments)},FS=d._Softmax=function(){return(FS=d._Softmax=d.asm.Softmax).apply(null,arguments)},DS=d._Softplus=function(){return(DS=d._Softplus=d.asm.Softplus).apply(null,arguments)},OS=d._SparseFillEmptyRows=function(){return(OS=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},zS=d._SparseReshape=function(){return(zS=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},LS=d._SparseSegmentReduction=function(){return(LS=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},WS=d._SparseToDense=function(){return(WS=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},BS=d._Sqrt=function(){return(BS=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},VS=d._Square=function(){return(VS=d._Square=d.asm.Square).apply(null,arguments)},US=d._SquaredDifference=function(){return(US=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},GS=d._Step=function(){return(GS=d._Step=d.asm.Step).apply(null,arguments)},HS=d._StridedSlice=function(){return(HS=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},jS=d._Sub=function(){return(jS=d._Sub=d.asm.Sub).apply(null,arguments)},qS=d._Sum=function(){return(qS=d._Sum=d.asm.Sum).apply(null,arguments)},XS=d._Tan=function(){return(XS=d._Tan=d.asm.Tan).apply(null,arguments)},KS=d._Tanh=function(){return(KS=d._Tanh=d.asm.Tanh).apply(null,arguments)},YS=d._TensorScatterUpdate=function(){return(YS=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},ZS=d._Tile=function(){return(ZS=d._Tile=d.asm.Tile).apply(null,arguments)},JS=d._TopK=function(){return(JS=d._TopK=d.asm.TopK).apply(null,arguments)},QS=d._Transform=function(){return(QS=d._Transform=d.asm.Transform).apply(null,arguments)},eC=d._Transpose=function(){return(eC=d._Transpose=d.asm.Transpose).apply(null,arguments)},tC=d.__FusedMatMul=function(){return(tC=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},aC=d._malloc=function(){return(aC=d._malloc=d.asm.malloc).apply(null,arguments)},nC=d._free=function(){return(nC=d._free=d.asm.free).apply(null,arguments)},rC=d.__emscripten_tls_init=function(){return(rC=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Lc=d._pthread_self=function(){return(Lc=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},sC=d.___errno_location=function(){return(sC=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Ex=d.__emscripten_thread_init=function(){return(Ex=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},iC=d.__emscripten_thread_crashed=function(){return(iC=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},oC=d._emscripten_main_thread_process_queued_calls=function(){return(oC=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},lC=d._emscripten_main_browser_thread_id=function(){return(lC=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Mx=d._emscripten_run_in_main_runtime_thread_js=function(){return(Mx=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},uC=d._emscripten_dispatch_to_thread_=function(){return(uC=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},_x=d.__emscripten_proxy_execute_task_queue=function(){return(_x=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)},Px=d.__emscripten_thread_exit=function(){return(Px=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},$x=d._emscripten_stack_set_limits=function(){return($x=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)},Wc=d.stackRestore=function(){return(Wc=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Bc=d.stackAlloc=function(){return(Bc=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},dC=d.dynCall_iijjiiii=function(){return(dC=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},pC=d.dynCall_jiji=function(){return(pC=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=In,d.wasmMemory=ie,d.cwrap=Xm,d.ExitStatus=_s,d.PThread=We;var Vc;fr=function D(){Vc||Fx(),Vc||(fr=D)};function Fx(D){if(D=D||y,Or>0)return;if(T){h(d),Zt(),startWorker(d);return}if(Dr(),Or>0)return;function j(){Vc||(Vc=!0,d.calledRun=!0,!Ce&&(Zt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),yc()))}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()();Fx();var Uc;f&&(Uc={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 Gc;if(typeof WasmBackendModule!="undefined")Gc=WasmBackendModule;else if(typeof r!="undefined")Gc=r;else throw new Error("Could not find wasm module in post.js");if(Uc){var cC=Gc._dispose;Gc._dispose=function(){cC(),Uc.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Uc.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)}),BC=Kt((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}};`}),VC=Kt((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 Il||P("exiting due to exception: "+Y)}if(f){var T=iA(),N=oA();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 Il))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),d=(Y,se)=>{if(qa())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),P=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,C;s.wasmBinary&&(C=s.wasmBinary);var _=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Hn("no native wasm support detected");var O,B=!1,F;function U(Y,se){Y||Hn(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|cn&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 Wt=Y.charCodeAt(++Je);Ye=65536+((Ye&1023)<<10)|Wt&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 Xe(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=[],yt=!1;function qa(){return _}function Lt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Fa(s.preRun.shift());fr(st)}function dn(){yt=!0,fr(it)}function la(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Da(s.postRun.shift());fr(He)}function Fa(Y){st.unshift(Y)}function pn(Y){it.unshift(Y)}function Da(Y){He.unshift(Y)}var ht=0,Oa=null,Xa=null;function mr(Y){ht++,s.monitorRunDependencies&&s.monitorRunDependencies(ht)}function kl(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(Oa!==null&&(clearInterval(Oa),Oa=null),Xa)){var se=Xa;Xa=null,se()}}function Hn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",P(Y),B=!0,F=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var hd="data:application/octet-stream;base64,";function In(Y){return Y.startsWith(hd)}function Dr(Y){return Y.startsWith("file://")}var Zt;Zt="tfjs-backend-wasm.wasm",In(Zt)||(Zt=y(Zt));function yc(Y){try{if(Y==Zt&&C)return new Uint8Array(C);if(b)return b(Y);throw"both async and sync fetching of the wasm failed"}catch(se){Hn(se)}}function pm(){if(!C&&(h||m)){if(typeof fetch=="function"&&!Dr(Zt))return fetch(Zt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Zt+"'";return Y.arrayBuffer()}).catch(function(){return yc(Zt)});if(A)return new Promise(function(Y,se){A(Zt,function(Ee){Y(new Uint8Array(Ee))},se)})}return Promise.resolve().then(function(){return yc(Zt)})}function cm(){var Y={env:md,wasi_snapshot_preview1:md};function se(Je,Ye){var Wt=Je.exports;s.asm=Wt,O=s.asm.memory,Xe(O.buffer),dt=s.asm.__indirect_function_table,pn(s.asm.__wasm_call_ctors),kl("wasm-instantiate")}mr("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){P("failed to asynchronously prepare wasm: "+Ye),Hn(Ye)})}function wt(){return!C&&typeof WebAssembly.instantiateStreaming=="function"&&!In(Zt)&&!Dr(Zt)&&!f&&typeof fetch=="function"?fetch(Zt,{credentials:"same-origin"}).then(function(Je){var Ye=WebAssembly.instantiateStreaming(Je,Y);return Ye.then(Ee,function(Wt){return P("wasm streaming compile failed: "+Wt),P("falling back to ArrayBuffer instantiation"),et(Ee)})}):et(Ee)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,se);return kt}catch(Je){P("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return wt().catch(o),{}}var Cx,Or;function Il(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function fr(Y){for(;Y.length>0;)Y.shift()(s)}function hm(){Hn("")}function xc(){return 4294901760}function Ms(){return xc()}function mm(Y,se,Ee){ee.copyWithin(Y>>>0,se>>>0,se+Ee>>>0)}function Ac(Y){try{return O.grow(Y-X.byteLength+65535>>>16),Xe(O.buffer),1}catch(se){}}function Sl(Y){var se=ee.length;Y=Y>>>0;var Ee=xc();if(Y>Ee)return!1;let et=(Wt,cn)=>Wt+(cn-Wt%cn)%cn;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=Ac(Je);if(Ye)return!0}return!1}var fa={varargs:void 0,get:function(){fa.varargs+=4;var Y=be[fa.varargs-4>>>2];return Y},getStr:function(Y){var se=H(Y);return se}};function bc(Y){return 52}function fm(Y,se,Ee,et,wt){return 70}var gm=[null,[],[]];function Tx(Y,se){var Ee=gm[Y];se===0||se===10?((Y===1?M:P)(q(Ee,0)),Ee.length=0):Ee.push(se)}function Nx(Y,se,Ee,et){for(var wt=0,kt=0;kt>>2],Ye=Ce[se+4>>>2];se+=8;for(var Wt=0;Wt>>0]);wt+=Ye}return Ce[et>>>2]=wt,0}function vc(Y){var se=s["_"+Y];return se}function _s(Y,se){re.set(Y,se>>>0)}function ym(Y,se,Ee,et,wt){var kt={string:za=>{var Lr=0;if(za!=null&&za!==0){var zc=(za.length<<2)+1;Lr=Ad(zc),Z(za,Lr,zc)}return Lr},array:za=>{var Lr=Ad(za.length);return _s(za,Lr),Lr}};function Je(za){return se==="string"?H(za):se==="boolean"?!!za:za}var Ye=vc(Y),Wt=[],cn=0;if(et)for(var gr=0;grJe==="number"||Je==="boolean"),kt=se!=="string";return kt&&wt&&!et?vc(Y):function(){return ym(Y,se,Ee,arguments,et)}}var md={abort:hm,emscripten_get_heap_max:Ms,emscripten_memcpy_big:mm,emscripten_resize_heap:Sl,fd_close:bc,fd_seek:fm,fd_write:Nx},Am=cm(),wc=s.___wasm_call_ctors=function(){return(wc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},kc=s._init=function(){return(kc=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)},Ic=s._get_threads_count=function(){return(Ic=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)},fd=s._dispose=function(){return(fd=s._dispose=s.asm.dispose).apply(null,arguments)},wm=s._Abs=function(){return(wm=s._Abs=s.asm.Abs).apply(null,arguments)},Sc=s._Acos=function(){return(Sc=s._Acos=s.asm.Acos).apply(null,arguments)},Cl=s._Acosh=function(){return(Cl=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)},Cc=s._ArgMin=function(){return(Cc=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Tc=s._Asin=function(){return(Tc=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)},gd=s._Atanh=function(){return(gd=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)},Ps=s._AvgPoolGrad=function(){return(Ps=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)},Nc=s._BitwiseAnd=function(){return(Nc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Dm=s._Ceil=function(){return(Dm=s._Ceil=s.asm.Ceil).apply(null,arguments)},yd=s._ClipByValue=function(){return(yd=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)},xd=s._Conv3DBackpropInputV2=function(){return(xd=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)},Rc=s._Cumsum=function(){return(Rc=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Ec=s._DenseBincount=function(){return(Ec=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)},Mc=s._Diag=function(){return(Mc=s._Diag=s.asm.Diag).apply(null,arguments)},_c=s._Dilation2D=function(){return(_c=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)},Pc=s._Equal=function(){return(Pc=s._Equal=s.asm.Equal).apply(null,arguments)},Rx=s._Erf=function(){return(Rx=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)},$c=s.stackSave=function(){return($c=s.stackSave=s.asm.stackSave).apply(null,arguments)},Fc=s.stackRestore=function(){return(Fc=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},Ad=s.stackAlloc=function(){return(Ad=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 Tl;Xa=function Y(){Tl||Dc(),Tl||(Xa=Y)};function Dc(Y){if(Y=Y||p,ht>0||(Lt(),ht>0))return;function se(){Tl||(Tl=!0,s.calledRun=!0,!B&&(dn(),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()();Dc();var Nl;l&&(Nl={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 Rl;if(typeof r!="undefined")Rl=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Rl=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Nl){var W2=Rl._dispose;Rl._dispose=function(){W2(),Nl.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Nl.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}},au=class{refCount(e){return Ya("refCount")}incRef(e){return Ya("incRef")}timerAvailable(){return!0}time(e){return Ya("time")}read(e){return Ya("read")}readSync(e){return Ya("readSync")}readToGPU(e,t){return Ya("readToGPU")}numDataIds(){return Ya("numDataIds")}disposeData(e,t){return Ya("disposeData")}write(e,t,a){return Ya("write")}move(e,t,a,n,r){return Ya("move")}createTensorFromGPUData(e,t,a){return Ya("createTensorFromGPUData")}memory(){return Ya("memory")}floatPrecision(){return Ya("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Ya("dispose")}};function Ya(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 lA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,lh(e,t,a)}function UC(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--,lh(e,a,n),lh(t,a,n)}function Od(e,t,a){return Math.max(e,Math.min(t,a))}function GC(e){return e%2===0?e:e+1}function lh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function HC(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ni(e){$(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function vt(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 QC(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),$(e.every(n=>n>=-a&&n`All values in axis param must be in range [-${a}, ${a}) but got axis ${e}`),$(e.every(n=>Bl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function dA(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 pA(e,t){return Y1(e,t)}function Y1(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 cA(e,t){for(let a=0;at+=a.length),t}function Vr(e){return typeof e=="string"||e instanceof String}function fA(e){return typeof e=="boolean"}function gA(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":gA(e)?"float32":Vr(e)?"string":fA(e)?"bool":"float32"}function Xr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function dh(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function yA(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 yA(0,e,t,a)}function tT(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 Z1(e,t){let a=Rh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return Dl(e,new Float32Array(a));if(t==="int32")return Dl(e,new Int32Array(a));if(t==="bool")return Dl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function nn(e){e.forEach(t=>{$(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function nT(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]=oT(a,n)})}};function sT(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(iT(t,n[0],n[1]),n.join("="))),t}function iT(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function oT(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function W(){return J1}var J1=null;function lT(e){J1=e}var H2;function AA(){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 uT(){let e=AA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function Q1(e,t){let a=uT();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var ru="Abs",ri="Acos",si="Acosh",rs="Add",ii="AddN",oi="All",li="Any",su="ArgMax",iu="ArgMin",ui="Asin",di="Asinh",pi="Atan",ci="Atanh",hi="Atan2",mi="AvgPool",up="AvgPoolGrad",ou="AvgPool3D",dp="AvgPool3DGrad",fi="BatchMatMul",lu="BatchToSpaceND",gi="Bincount",uu="BitwiseAnd",dT="BroadcastTo",du="BroadcastArgs",yi="Cast",xi="Ceil",ss="ClipByValue",pp="Complex",cp="ComplexAbs",pu="Concat",Ai="Conv2D",hp="Conv2DBackpropFilter",bi="Conv2DBackpropInput",vi="Conv3D",cu="Conv3DBackpropFilterV2",wi="Conv3DBackpropInputV2",ki="Cos",Ii="Cosh",Si="Cumprod",Ci="Cumsum",Ti="CropAndResize",hu="DenseBincount",Ni="DepthToSpace",Ri="DepthwiseConv2dNative",mp="DepthwiseConv2dNativeBackpropFilter",fp="DepthwiseConv2dNativeBackpropInput",mu="Diag",Ei="Dilation2D",Vl="Dilation2DBackpropInput",Ul="Dilation2DBackpropFilter",gp="Draw",Mi="RealDiv",yp="Einsum",_i="Elu",fu="EluGrad",Pi="Erf",$i="Equal",Fi="Exp",gu="ExpandDims",Di="Expm1",xp="FFT",yu="Fill",Oi="FlipLeftRight",zi="Floor",Li="FloorDiv",Wi="FusedBatchNorm",xu="GatherV2",Bi="GatherNd",Vi="Greater",Ui="GreaterEqual",Gi="Identity",Ap="IFFT",bp="Imag",Hi="IsFinite",ji="IsInf",qi="IsNan",Xi="LeakyRelu",Ki="Less",Yi="LessEqual",Zi="LinSpace",Ji="Log",Qi="Log1p",eo="LogicalAnd",to="LogicalNot",ao="LogicalOr",bA="LogicalXor",pT="LogSoftmax",cT="LowerBound",no="LRN",Au="LRNGrad",hT="MatrixBandPart",ro="Max",so="Maximum",io="MaxPool",vp="MaxPoolGrad",bu="MaxPool3D",wp="MaxPool3DGrad",vu="MaxPoolWithArgmax",oo="Mean",lo="Min",uo="Minimum",po="MirrorPad",co="Mod",ho="Multinomial",mo="Multiply",wu="Neg",fo="NotEqual",go="NonMaxSuppressionV3",ku="NonMaxSuppressionV4",yo="NonMaxSuppressionV5",Iu="OnesLike",xo="OneHot",Su="Pack",Ao="PadV2",mT="Pool",bo="Pow",vo="Prelu",wo="Prod",Mh="RaggedGather",_h="RaggedRange",Ph="RaggedTensorToTensor",Cu="Range",kp="Real",ko="Reciprocal",Io="Relu",Tu="Reshape",So="ResizeNearestNeighbor",Nu="ResizeNearestNeighborGrad",Co="ResizeBilinear",Ru="ResizeBilinearGrad",To="Relu6",No="Reverse",Ro="Round",Eo="Rsqrt",Mo="ScatterNd",_o="TensorScatterUpdate",Po="SearchSorted",Eu="Select",$o="Selu",Mu="Slice",Fo="Sin",Do="Sinh",Oo="Sign",zo="Sigmoid",Lo="Softplus",Wo="Sqrt",Bo="Sum",_u="SpaceToBatchND",Pu="SplitV",Vo="Softmax",Ip="SparseFillEmptyRows",$u="SparseReshape",Fu="SparseSegmentMean",Du="SparseSegmentSum",Uo="SparseToDense",Go="SquaredDifference",Sp="Square",Cp="StaticRegexReplace",Ho="StridedSlice",Ou="StringNGrams",Tp="StringSplit",Np="StringToHashBucketFast",jo="Sub",qo="Tan",Xo="Tanh",is="Tile",Ko="TopK",Yo="Transform",kr="Transpose",Rp="Unique",zu="Unpack",Ep="UnsortedSegmentSum",fT="UpperBound",Lu="ZerosLike",os="Step",zd="FromPixels",Zo="RotateWithOffset",Kr="_FusedMatMul",Yr="FusedConv2D",Zr="FusedDepthwiseConv2D";function Br(...e){W().getBool("IS_TEST")||W().getBool("PROD")||console.warn(...e)}function gT(...e){W().getBool("IS_TEST")||W().getBool("PROD")||console.log(...e)}var Gl=Q1("kernelRegistry",()=>new Map),Ld=Q1("gradRegistry",()=>new Map);function Wd(e,t){let a=eg(e,t);return Gl.get(a)}function t1(e){return Ld.get(e)}function Zn(e){let t=Gl.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=eg(t,a);Gl.has(n)&&Br(`The kernel '${t}' for backend '${a}' is already registered`),Gl.set(n,e)}function yT(e){let{kernelName:t}=e;Ld.has(t)&&W().getBool("DEBUG")&&Br(`Overriding the gradient for '${t}'`),Ld.set(t,e)}function xT(e,t){let a=eg(e,t);if(!Gl.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Gl.delete(a)}function AT(e){if(!Ld.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Ld.delete(e)}function bT(e,t){Zn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});xn(n)})}function eg(e,t){return`${t}_${e}`}var v={};Ze(v,{arraysEqual:()=>Tr,arraysEqualWithNull:()=>uA,assert:()=>$,assertNonNegativeIntegerDimensions:()=>nn,assertNonNull:()=>ni,assertShapesMatch:()=>Na,bytesFromStringArray:()=>mA,bytesPerElement:()=>uh,checkConversionForErrors:()=>cA,clamp:()=>Od,computeStrides:()=>nu,convertBackendValuesAndArrayBuffer:()=>tT,createScalarValue:()=>CT,createShuffledIndices:()=>ZC,decodeString:()=>ph,distSquared:()=>qC,encodeString:()=>_p,fetch:()=>NT,fingerPrint64:()=>ST,flatten:()=>Jr,getArrayFromDType:()=>Y1,getTypedArrayFromDType:()=>pA,hasEncodingLoss:()=>eT,hexToLong:()=>Mp,indexToLoc:()=>rT,inferDtype:()=>lp,inferFromImplicitShape:()=>QC,isBoolean:()=>fA,isFunction:()=>Xr,isInt:()=>Bl,isNumber:()=>gA,isPromise:()=>Eh,isScalarShape:()=>XC,isString:()=>Vr,isTypedArray:()=>Qt,isValidDtype:()=>hA,locToIndex:()=>nT,makeOnesTypedArray:()=>Z1,makeZerosNestedTypedArray:()=>aT,makeZerosTypedArray:()=>Rh,nearestDivisor:()=>dh,nearestLargerEven:()=>GC,now:()=>Bd,parseAxisParam:()=>op,randUniform:()=>jC,repeatedTry:()=>JC,rightPad:()=>Pd,shuffle:()=>lA,shuffleCombo:()=>UC,sizeFromShape:()=>vt,sizeToSquarishShape:()=>YC,squeezeShape:()=>dA,sum:()=>HC,swap:()=>lh,tanh:()=>KC,toNestedArray:()=>Dl,toTypedArray:()=>$h});function vA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var Wx=tu(CC()),zs=Wx.default||Wx;function Mp(e){return zs.fromString(e,!0,16)}var wA=Mp("c3a5c85c97cb3127"),Ds=Mp("b492b66fbe98f273"),wa=Mp("9ae16a3b2f90404f");function a1(e){return e.xor(e.shru(47))}function kA(e,t,a){let n=e.slice(t,t+a);return zs.fromBytes(Array.from(n),!0,!0)}function xt(e,t){return kA(e,t,8)}function Bx(e,t){return kA(e,t,4)}function Jt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function jr(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 vT(e,t,a,n,r,s){r=r.add(e),s=Jt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Jt(r,44)),[r.add(n),s.add(i)]}function jc(e,t,a,n){return vT(xt(e,t),xt(e,t+8),xt(e,t+16),xt(e,t+24),a,n)}function wT(e,t=e.length){if(t>=8){let a=wa.add(t*2),n=xt(e,0).add(wa),r=xt(e,t-8),s=Jt(r,37).mul(a).add(n),i=Jt(n,25).add(r).mul(a);return jr(s,i,a)}if(t>=4){let a=wa.add(t*2),n=Bx(e,0);return jr(n.shl(3).add(t),Bx(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(wa.mul(s).xor(wA.mul(i))).mul(wa)}return wa}function kT(e,t=e.length){let a=wa.add(t*2),n=xt(e,0).mul(Ds),r=xt(e,8),s=xt(e,t-8).mul(a),i=xt(e,t-16).mul(wa);return jr(Jt(n.add(r),43).add(Jt(s,30)).add(i),n.add(Jt(r.add(wa),18)).add(s),a)}function IT(e,t=e.length){let a=wa.add(t*2),n=xt(e,0).mul(wa),r=xt(e,8),s=xt(e,t-8).mul(a),i=xt(e,t-16).mul(wa),o=Jt(n.add(r),43).add(Jt(s,30)).add(i),l=jr(o,n.add(Jt(r.add(wa),18)).add(s),a),u=xt(e,16).mul(a),p=xt(e,24),c=o.add(xt(e,t-32)).mul(a),d=l.add(xt(e,t-24)).mul(a);return jr(Jt(u.add(p),43).add(Jt(c,30)).add(d),u.add(Jt(p.add(n),18)).add(c),a)}function ST(e,t=e.length){let a=zs.fromNumber(81,!0);if(t<=32)return t<=16?wT(e,t):kT(e,t);if(t<=64)return IT(e,t);let n=a,r=a.mul(Ds).add(113),s=a1(r.mul(wa).add(113)).mul(wa),i=[zs.UZERO,zs.UZERO],o=[zs.UZERO,zs.UZERO];n=n.mul(wa).add(xt(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do n=Jt(n.add(r).add(i[0]).add(xt(e,l+8)),37).mul(Ds),r=Jt(r.add(i[1]).add(xt(e,l+48)),42).mul(Ds),n=n.xor(o[1]),r=r.add(i[0]).add(xt(e,l+40)),s=Jt(s.add(o[0]),33).mul(Ds),i=jc(e,l,i[1].mul(Ds),n.add(o[0])),o=jc(e,l+32,s.add(o[1]),r.add(xt(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Ds.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=Jt(n.add(r).add(i[0]).add(xt(e,l+8)),37).mul(c),r=Jt(r.add(i[1]).add(xt(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(xt(e,l+40))),s=Jt(s.add(o[0]),33).mul(c),i=jc(e,l,i[1].mul(c),n.add(o[0])),o=jc(e,l+32,s.add(o[1]),r.add(xt(e,l+16))),[s,n]=[n,s],jr(jr(i[0],o[0],c).add(a1(r).mul(wA)).add(s),jr(i[1],o[1],c).add(n),c)}function CT(e,t){return t==="string"?_p(e):$h([e],t)}function TT(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function $h(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Jr(e)),W().getBool("DEBUG")&&cA(e,t),TT(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=Bd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Bd()-i})}if(W().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{ET(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 ET(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 _T(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(!Tr(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 Vx=20,vd=3,j2=7;function $T(e,t,a,n){let r=nu(t),s=FT(e,t,a,r),i=t.length,o=Qc(e,t,a,r,s),l=["Tensor"];return n&&(l.push(` dtype: ${a}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` +"use strict";var Human=(()=>{var Gc=Object.defineProperty;var TC=Object.getOwnPropertyDescriptor;var NC=Object.getOwnPropertyNames;var RC=Object.prototype.hasOwnProperty;var EC=(e,t,a)=>t in e?Gc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var yr=(e,t)=>{for(var a in t)Gc(e,a,{get:t[a],enumerable:!0})},MC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of NC(t))!RC.call(e,r)&&r!==a&&Gc(e,r,{get:()=>t[r],enumerable:!(n=TC(t,r))||n.enumerable});return e};var PC=e=>MC(Gc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>(EC(e,typeof t!="symbol"?t+"":t,a),a),Ux=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var qa=(e,t,a)=>(Ux(e,t,"read from private field"),a?a.call(e):t.get(e)),jn=(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)=>(Ux(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var rye={};yr(rye,{Env:()=>tc,Human:()=>Ex,default:()=>Ex,defaults:()=>ll,draw:()=>S0,empty:()=>pr,env:()=>ne,match:()=>Q0,models:()=>Rx});var Ke={};yr(Ke,{Abs:()=>ru,Acos:()=>si,Acosh:()=>ii,AdadeltaOptimizer:()=>Yg,AdagradOptimizer:()=>Zg,AdamOptimizer:()=>Jg,AdamaxOptimizer:()=>Qg,Add:()=>is,AddN:()=>oi,All:()=>li,Any:()=>ui,ArgMax:()=>su,ArgMin:()=>iu,Asin:()=>di,Asinh:()=>pi,Atan:()=>ci,Atan2:()=>mi,Atanh:()=>hi,AvgPool:()=>fi,AvgPool3D:()=>ou,AvgPool3DGrad:()=>lp,AvgPoolGrad:()=>op,BackendWasm:()=>bk,BatchMatMul:()=>gi,BatchToSpaceND:()=>lu,Bincount:()=>yi,BitwiseAnd:()=>uu,BroadcastArgs:()=>du,BroadcastTo:()=>kT,Cast:()=>xi,Ceil:()=>Ai,ClipByValue:()=>os,Complex:()=>up,ComplexAbs:()=>dp,Concat:()=>pu,Conv2D:()=>bi,Conv2DBackpropFilter:()=>pp,Conv2DBackpropInput:()=>vi,Conv3D:()=>wi,Conv3DBackpropFilterV2:()=>cu,Conv3DBackpropInputV2:()=>ki,Cos:()=>Ii,Cosh:()=>Si,CropAndResize:()=>Ni,Cumprod:()=>Ci,Cumsum:()=>Ti,DataStorage:()=>rp,DenseBincount:()=>hu,DepthToSpace:()=>Ri,DepthwiseConv2dNative:()=>Ei,DepthwiseConv2dNativeBackpropFilter:()=>cp,DepthwiseConv2dNativeBackpropInput:()=>hp,Diag:()=>mu,Dilation2D:()=>Mi,Dilation2DBackpropFilter:()=>Hl,Dilation2DBackpropInput:()=>Gl,Draw:()=>mp,ENV:()=>Q1,Einsum:()=>fp,Elu:()=>_i,EluGrad:()=>fu,Environment:()=>IA,Equal:()=>Fi,Erf:()=>$i,Exp:()=>Di,ExpandDims:()=>gu,Expm1:()=>Oi,FFT:()=>gp,Fill:()=>yu,FlipLeftRight:()=>zi,Floor:()=>Li,FloorDiv:()=>Wi,FromPixels:()=>Od,FusedBatchNorm:()=>Bi,FusedConv2D:()=>Zr,FusedDepthwiseConv2D:()=>Jr,GPGPUContext:()=>Vl,GatherNd:()=>Vi,GatherV2:()=>xu,GraphModel:()=>jp,Greater:()=>Ui,GreaterEqual:()=>Gi,IFFT:()=>yp,Identity:()=>Hi,Imag:()=>xp,IsFinite:()=>ji,IsInf:()=>qi,IsNan:()=>Xi,KernelBackend:()=>au,LRN:()=>ro,LRNGrad:()=>Au,LeakyRelu:()=>Ki,Less:()=>Yi,LessEqual:()=>Zi,LinSpace:()=>Ji,Log:()=>Qi,Log1p:()=>eo,LogSoftmax:()=>IT,LogicalAnd:()=>to,LogicalNot:()=>ao,LogicalOr:()=>no,LogicalXor:()=>CA,LowerBound:()=>ST,MathBackendCPU:()=>d3,MathBackendWebGL:()=>Yp,MatrixBandPart:()=>CT,Max:()=>so,MaxPool:()=>oo,MaxPool3D:()=>bu,MaxPool3DGrad:()=>bp,MaxPoolGrad:()=>Ap,MaxPoolWithArgmax:()=>vu,Maximum:()=>io,Mean:()=>lo,Min:()=>uo,Minimum:()=>po,MirrorPad:()=>co,Mod:()=>ho,MomentumOptimizer:()=>e3,Multinomial:()=>mo,Multiply:()=>fo,Neg:()=>wu,NonMaxSuppressionV3:()=>yo,NonMaxSuppressionV4:()=>ku,NonMaxSuppressionV5:()=>xo,NotEqual:()=>go,OP_SCOPE_SUFFIX:()=>rg,OneHot:()=>Ao,OnesLike:()=>Iu,Optimizer:()=>ps,OptimizerConstructors:()=>L7,Pack:()=>Su,PadV2:()=>bo,Pool:()=>TT,Pow:()=>vo,Prelu:()=>wo,Prod:()=>ko,RMSPropOptimizer:()=>t3,RaggedGather:()=>Mh,RaggedRange:()=>Ph,RaggedTensorToTensor:()=>_h,Range:()=>Cu,Rank:()=>a1,Real:()=>vp,RealDiv:()=>Pi,Reciprocal:()=>Io,Reduction:()=>wa,Relu:()=>So,Relu6:()=>No,Reshape:()=>Tu,ResizeBilinear:()=>To,ResizeBilinearGrad:()=>Ru,ResizeNearestNeighbor:()=>Co,ResizeNearestNeighborGrad:()=>Nu,Reverse:()=>Ro,RotateWithOffset:()=>Jo,Round:()=>Eo,Rsqrt:()=>Mo,SGDOptimizer:()=>Jh,ScatterNd:()=>Po,SearchSorted:()=>$o,Select:()=>Eu,Selu:()=>Fo,Sigmoid:()=>Lo,Sign:()=>zo,Sin:()=>Do,Sinh:()=>Oo,Slice:()=>Mu,Softmax:()=>Uo,Softplus:()=>Wo,SpaceToBatchND:()=>Pu,SparseFillEmptyRows:()=>wp,SparseReshape:()=>$u,SparseSegmentMean:()=>Fu,SparseSegmentSum:()=>Du,SparseToDense:()=>Go,SplitV:()=>_u,Sqrt:()=>Bo,Square:()=>kp,SquaredDifference:()=>Ho,StaticRegexReplace:()=>Ip,Step:()=>us,StridedSlice:()=>jo,StringNGrams:()=>Ou,StringSplit:()=>Sp,StringToHashBucketFast:()=>Cp,Sub:()=>qo,Sum:()=>Vo,Tan:()=>Xo,Tanh:()=>Ko,Tensor:()=>gt,TensorBuffer:()=>Vt,TensorScatterUpdate:()=>_o,Tile:()=>ls,TopK:()=>Yo,Transform:()=>Zo,Transpose:()=>wr,Unique:()=>Tp,Unpack:()=>zu,UnsortedSegmentSum:()=>Np,UpperBound:()=>NT,Variable:()=>Bd,WebGPUBackend:()=>q3,ZerosLike:()=>Lu,_FusedMatMul:()=>Yr,abs:()=>Ya,acos:()=>JA,acosh:()=>QA,add:()=>we,addN:()=>Fh,all:()=>eb,any:()=>tb,argMax:()=>rr,argMin:()=>ab,asin:()=>nb,asinh:()=>rb,atan:()=>sb,atan2:()=>ib,atanh:()=>ob,avgPool:()=>cg,avgPool3d:()=>pb,backend:()=>nr,backend_util:()=>C,basicLSTMCell:()=>cb,batchNorm:()=>zp,batchNorm2d:()=>hb,batchNorm3d:()=>mb,batchNorm4d:()=>fb,batchToSpaceND:()=>hg,bincount:()=>mg,bitwiseAnd:()=>gb,booleanMaskAsync:()=>e7,broadcastArgs:()=>yb,broadcastTo:()=>Bl,broadcast_util:()=>el,browser:()=>Er,buffer:()=>$e,cast:()=>Ue,ceil:()=>xb,clipByValue:()=>Ab,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>bb,concat2d:()=>Wu,concat3d:()=>vb,concat4d:()=>wb,conv1d:()=>kb,conv2d:()=>Lp,conv2dTranspose:()=>Sb,conv3d:()=>Cb,conv3dTranspose:()=>Tb,copyRegisteredKernels:()=>_T,cos:()=>Nb,cosh:()=>Rb,cosineWindow:()=>qh,cumprod:()=>Eb,cumsum:()=>Mb,customGrad:()=>er,denseBincount:()=>Pb,deprecationWarn:()=>ug,depthToSpace:()=>_b,depthwiseConv2d:()=>Dh,deregisterOp:()=>PD,device_util:()=>Pp,diag:()=>$b,dilation2d:()=>Fb,disableDeprecationWarnings:()=>GN,dispose:()=>J,disposeVariables:()=>HN,div:()=>ve,divNoNan:()=>Ob,dot:()=>zb,dropout:()=>s7,einsum:()=>Bs,elu:()=>yg,enableDebugMode:()=>UN,enableProdMode:()=>lg,enclosingPowerOfTwo:()=>qg,engine:()=>It,ensureShape:()=>Lb,env:()=>B,equal:()=>gg,erf:()=>Wb,euclideanNorm:()=>Ub,exp:()=>as,expandDims:()=>Wt,expm1:()=>Gb,eye:()=>Ag,fft:()=>Uh,fill:()=>sr,findBackend:()=>dg,findBackendFactory:()=>YN,floor:()=>bg,floorDiv:()=>Dp,forceHalfFloat:()=>m8,fused:()=>Xg,gather:()=>vg,gatherND:()=>r7,gather_util:()=>r3,getBackend:()=>ca,getGradient:()=>e1,getKernel:()=>Ld,getKernelsForBackend:()=>Zn,getThreadsCount:()=>nle,gpgpu_util:()=>Hv,grad:()=>YE,grads:()=>ZE,greater:()=>Vp,greaterEqual:()=>wg,ifft:()=>Kd,imag:()=>Up,image:()=>fe,inTopKAsync:()=>i7,io:()=>Xn,irfft:()=>Bg,isFinite:()=>Hb,isInf:()=>jb,isNaN:()=>qb,keep:()=>zn,kernel_impls:()=>Rn,leakyRelu:()=>kg,less:()=>hh,lessEqual:()=>Oh,linalg:()=>m7,linspace:()=>Xb,loadGraphModel:()=>u3,loadGraphModelSync:()=>zO,localResponseNormalization:()=>Kb,log:()=>Xl,log1p:()=>Ig,logSigmoid:()=>Zb,logSoftmax:()=>Jb,logSumExp:()=>Cg,logicalAnd:()=>jd,logicalNot:()=>Tg,logicalOr:()=>Ng,logicalXor:()=>Qb,losses:()=>f7,lowerBound:()=>e4,matMul:()=>pt,math:()=>T7,max:()=>fa,maxPool:()=>Rg,maxPool3d:()=>t4,maxPoolWithArgmax:()=>a4,maximum:()=>Eg,mean:()=>qd,memory:()=>jN,meshgrid:()=>n4,min:()=>ts,minimum:()=>Xd,mirrorPad:()=>r4,mod:()=>Bu,moments:()=>s4,movingAverage:()=>t7,mul:()=>te,multiRNNCell:()=>i4,multinomial:()=>o4,neg:()=>Ln,nextFrame:()=>W7,node:()=>J3,norm:()=>Bp,notEqual:()=>Mg,oneHot:()=>mh,ones:()=>Hr,onesLike:()=>l4,op:()=>z,outerProduct:()=>u4,pad:()=>ir,pad1d:()=>d4,pad2d:()=>p4,pad3d:()=>c4,pad4d:()=>h4,pool:()=>m4,pow:()=>ql,prelu:()=>_g,print:()=>og,prod:()=>f4,profile:()=>qN,raggedGather:()=>g4,raggedRange:()=>y4,raggedTensorToTensor:()=>x4,rand:()=>A4,randomGamma:()=>k4,randomNormal:()=>zg,randomStandardNormal:()=>I4,randomUniform:()=>Wh,randomUniformInt:()=>S4,range:()=>Kl,ready:()=>Fp,real:()=>Yl,reciprocal:()=>C4,registerBackend:()=>Qo,registerGradient:()=>ET,registerKernel:()=>yn,registerOp:()=>MD,relu:()=>Gp,relu6:()=>Lg,removeBackend:()=>KN,reshape:()=>Q,reverse:()=>ns,reverse1d:()=>T4,reverse2d:()=>N4,reverse3d:()=>R4,reverse4d:()=>E4,rfft:()=>Gh,round:()=>Wg,rsqrt:()=>M4,scalar:()=>Ge,scatterND:()=>a7,scatter_util:()=>Hh,searchSorted:()=>Lh,selu:()=>P4,separableConv2d:()=>_4,serialization:()=>x7,setBackend:()=>$p,setPlatform:()=>ZN,setThreadsCount:()=>ale,setWasmPath:()=>tle,setWasmPaths:()=>l0,setWebGLContext:()=>a0,setdiff1dAsync:()=>$4,shared:()=>e0,sigmoid:()=>za,sign:()=>F4,signal:()=>h7,sin:()=>D4,sinh:()=>O4,slice:()=>Fe,slice1d:()=>z4,slice2d:()=>L4,slice3d:()=>Hp,slice4d:()=>Bh,slice_util:()=>Nt,softmax:()=>Vh,softplus:()=>Sg,spaceToBatchND:()=>Pg,sparse:()=>g7,sparseToDense:()=>n7,spectral:()=>c7,split:()=>Sa,sqrt:()=>Qn,square:()=>Tn,squaredDifference:()=>Vg,squeeze:()=>Oe,stack:()=>pa,step:()=>Ug,stridedSlice:()=>W4,string:()=>y7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Mp,tan:()=>B4,tanh:()=>ch,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Yn,tensor3d:()=>Gg,tensor4d:()=>V4,tensor5d:()=>U4,tensor6d:()=>G4,tensorScatterUpdate:()=>j4,tensor_util:()=>PA,test_util:()=>b4,tidy:()=>De,tile:()=>Xr,time:()=>XN,topk:()=>q4,train:()=>NF,transpose:()=>Zs,truncatedNormal:()=>X4,unique:()=>K4,unregisterGradient:()=>PT,unregisterKernel:()=>MT,unsortedSegmentSum:()=>Y4,unstack:()=>Na,upcastType:()=>da,upperBound:()=>Z4,util:()=>v,valueAndGrad:()=>JE,valueAndGrads:()=>QE,variable:()=>J4,variableGrads:()=>Yb,version:()=>ec,version_converter:()=>WO,version_core:()=>s3,version_cpu:()=>eL,version_wasm:()=>rle,version_webgl:()=>Uj,webgl:()=>Gj,webgl_util:()=>fv,webgpu_util:()=>kk,where:()=>kr,whereAsync:()=>jg,zeros:()=>gn,zerosLike:()=>Ja});var _C=Object.create,Y1=Object.defineProperty,$C=Object.getOwnPropertyDescriptor,FC=Object.getOwnPropertyNames,DC=Object.getPrototypeOf,OC=Object.prototype.hasOwnProperty,Xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var a in t)Y1(e,a,{get:t[a],enumerable:!0})},zC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of FC(t))!OC.call(e,r)&&r!==a&&Y1(e,r,{get:()=>t[r],enumerable:!(n=$C(t,r))||n.enumerable});return e},tu=(e,t,a)=>(a=e!=null?_C(DC(e)):{},zC(t||!e||!e.__esModule?Y1(a,"default",{value:e,enumerable:!0}):a,e)),LC=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,$;return _?(S>>>=0,($=0<=S&&S<256)&&(W=i[S],W)?W:(O=u(S,(S|0)<0?-1:0,!0),$&&(i[S]=O),O)):(S|=0,($=-128<=S&&S<128)&&(W=s[S],W)?W:(O=u(S,S<0?-1:0,!1),$&&(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 P;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 $=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(P)?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(P)?P: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,$=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+=$+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(P))return S.isOdd()?P:A;if(S.eq(P))return this.isOdd()?P: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,$=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+=$*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=W*V,Z+=X>>>16,X&=65535,X+=$*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+W*H+$*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,$;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return b;if(S.gt(this.shru(1)))return I;$=b}else{if(this.eq(P)){if(S.eq(w)||S.eq(T))return P;if(S.eq(P))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)),$=O.add(W.div(S)),$)}else if(S.eq(P))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();$=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),$=$.add(H),W=W.sub(V)}return $},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],_)}}),WC=Xt(()=>{}),BC=Xt(()=>{}),VC=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)}),UC=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)}),GC=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)}),HC=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)}),jC=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)}),qC=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)}),XC=Xt(()=>{}),KC=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),P=new f(N),E=function(){for(var S=P.g(i),_=u,O=0;S=c;)S/=2,_/=2,O>>>=1;return(S+O)/_};return E.int32=function(){return P.g(4)|0},E.quick=function(){return P.g(4)/4294967296},E.double=E,x(b(P.S),n),(I.pass||T||function(S,_,O,W){return W&&(W.S&&g(W,P),S.state=function(){return g(P,{})}),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,P=N.i=N.j=0,E=N.S=[];for(T||(w=[T++]);M{var a=VC(),n=UC(),r=GC(),s=HC(),i=jC(),o=qC(),l=KC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),cA=Xt(()=>{}),hA=Xt(()=>{}),YC=Xt(()=>{}),ZC=Xt(()=>{}),JC=Xt(()=>{}),QC=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),yt}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),oa}function u(){return ie.buffer!=He&&ht(ie.buffer),$a}function p(){return ie.buffer!=He&&ht(ie.buffer),un}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 P,E,S,_;function O(D){D instanceof $s||H("exiting due to exception: "+D)}if(I){var W=cA(),$=hA();w?N=$.dirname(N)+"/":N=__dirname+"/",P=(j,oe)=>(j=Cl(j)?new URL(j):$.normalize(j),W.readFileSync(j,oe?void 0:"utf8")),S=j=>{var oe=P(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Me)=>{j=Cl(j)?new URL(j):$.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 $s))throw j}),process.on("unhandledRejection",function(j){throw j}),A=(j,oe)=>{if(kn())throw process.exitCode=j,oe;O(oe),process.exit(j)},d.inspect=function(){return"[Emscripten Module object]"};let D;try{D=YC()}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||(P=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=ZC().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 ft(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|pn&1023)}}return Be}function dt(D,j){return D>>>=0,D?ft(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,yt,Ha,zt,ln,oa,$a,un,Fa;T&&(He=d.buffer);function ht(D){He=D,d.HEAP8=yt=new Int8Array(D),d.HEAP16=zt=new Int16Array(D),d.HEAP32=oa=new Int32Array(D),d.HEAPU8=Ha=new Uint8Array(D),d.HEAPU16=ln=new Uint16Array(D),d.HEAPU32=$a=new Uint32Array(D),d.HEAPF32=un=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=[],Il=[],Hn=[],cd=!1;function kn(){return ge}function Dr(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)dm(d.preRun.shift());md(hr)}function Yt(){cd=!0,!T&&md(Il)}function gc(){if(!T){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)Mx(d.postRun.shift());md(Hn)}}function dm(D){hr.unshift(D)}function pm(D){Il.unshift(D)}function Mx(D){Hn.unshift(D)}var Or=0,Sl=null,mr=null;function cm(D){Or++,d.monitorRunDependencies&&d.monitorRunDependencies(Or)}function yc(D){if(Or--,d.monitorRunDependencies&&d.monitorRunDependencies(Or),Or==0&&(Sl!==null&&(clearInterval(Sl),Sl=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 hm="data:application/octet-stream;base64,";function xc(D){return D.startsWith(hm)}function Cl(D){return D.startsWith("file://")}var ma;ma="tfjs-backend-wasm-threaded-simd.wasm",xc(ma)||(ma=M(ma));function Ac(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 mm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Cl(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 Ac(ma)});if(E)return new Promise(function(D,j){E(ma,function(oe){D(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return Ac(ma)})}function fm(){var D={env:Pc,wasi_snapshot_preview1:Pc};function j(ye,Ne){var Tt=ye.exports;if(d.asm=Tt,Im(d.asm._emscripten_tls_init),ja=d.asm.__indirect_function_table,pm(d.asm.__wasm_call_ctors),be=Ne,!T){var pn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(gr){We.loadWasmModuleToWorker(gr,function(){--pn||yc("wasm-instantiate")})})}}T||cm("wasm-instantiate");function oe(ye){j(ye.instance,ye.module)}function Me(ye){return mm().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"&&!xc(ma)&&!Cl(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,bc={};function $s(D){this.name="ExitStatus",this.message="Program terminated with exit("+D+")",this.status=D}function gm(D){var j=We.pthreads[D];delete We.pthreads[D],j.terminate(),B2(D),We.runningWorkers.splice(We.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function ym(D){var j=We.pthreads[D];j.postMessage({cmd:"cancel"})}function hd(D){var j=We.pthreads[D];Le(j),We.returnWorkerToPool(j)}function xm(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 vc={varargs:void 0,get:function(){vc.varargs+=4;var D=l()[vc.varargs-4>>>2];return D},getStr:function(D){var j=dt(D);return j}};function wc(D){if(T)return zr(1,1,D);Re=D,kn()||(We.terminateAllThreads(),d.onExit&&d.onExit(D),Ce=!0),A(D,new $s(D))}function Am(D,j){if(Re=D,!j&&T)throw Ic(D),"unwind";wc(D)}var kc=Am;function bm(D){if(D instanceof $s||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(),B2(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!=zc()){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"?fd(ye.queue):Ne==="spawnThread"?xm(ye):Ne==="cleanupThread"?hd(ye.thread):Ne==="killThread"?gm(ye.thread):Ne==="cancelThread"?ym(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 md(D){for(;D.length>0;)D.shift()(d)}function vm(){var D=zc(),j=l()[D+52>>>2],oe=l()[D+56>>>2],Me=j-oe;Lx(j,Me),Lc(j)}d.establishStackSpace=vm;function Ic(D){if(T)return zr(2,0,D);try{kc(D)}catch(j){bm(j)}}var Tl=[];function wm(D){var j=Tl[D];return j||(D>=Tl.length&&(Tl.length=D+1),Tl[D]=j=ja.get(D)),j}function km(D,j){var oe=wm(D)(j);kn()?We.setExitStatus(oe):zx(oe)}d.invokeEntryPoint=km;function Im(D){We.tlsInitFunctions.push(D)}function Sm(D){Fx(D,!w,1,!b),We.threadInitTLS()}function Cm(D){T?postMessage({cmd:"cleanupThread",thread:D}):hd(D)}function Sc(D,j,oe,Me){return T?zr(3,1,D,j,oe,Me):Cc(D,j,oe,Me)}function Cc(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 Sc(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):xm(ye)}function Tm(){return 65536}var Nm=!0;function Rm(){return Nm}function fd(D){Atomics.store(l(),D>>2,1),zc()&&Ox(D),Atomics.compareExchange(l(),D>>2,1,0)}d.executeNotifiedProxyingQueue=fd;function Em(D,j,oe,Me){if(D==j)setTimeout(()=>fd(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 Mm(D,j,oe){return-1}function Pm(){_s("")}function Fs(D){Fs.shown||(Fs.shown={}),Fs.shown[D]||(Fs.shown[D]=1,I&&(D="warning: "+D),H(D))}function _m(){I||w||Fs("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function $m(){return Date.now()}function Tc(){return 4294901760}function Fm(){return Tc()}var gd;I?gd=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:gd=()=>performance.timeOrigin+performance.now();function Dm(D,j,oe){i().copyWithin(D>>>0,j>>>0,j+oe>>>0)}function Om(){return I?JC().cpus().length:navigator.hardwareConcurrency}function zm(D){var j=V2(),oe=D();return Lc(j),oe}function zr(D,j){var oe=arguments.length-2,Me=arguments;return zm(()=>{for(var je=oe,Be=Wc(je*8),ye=Be>>3,Ne=0;Ne>>0]=Tt}return Dx(D,je,Be,j)})}var yd=[];function Lm(D,j,oe){yd.length=j;for(var Me=oe>>3,je=0;je>>0];var Be=D<0,ye=Be?bc[-D-1]:Xm[D];return ye.apply(null,yd)}function Wm(D){try{return ie.grow(D-He.byteLength+65535>>>16),ht(ie.buffer),1}catch(j){}}function Bm(D){var j=i().length;if(D=D>>>0,D<=j)return!1;var oe=Tc();if(D>oe)return!1;let Me=(Tt,pn)=>Tt+(pn-Tt%pn)%pn;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=Wm(ye);if(Ne)return!0}return!1}function Vm(){throw"unwind"}function Nc(D){return T?zr(4,1,D):52}function Rc(D,j,oe,Me,je){return T?zr(5,1,D,j,oe,Me,je):70}var Um=[null,[],[]];function Gm(D,j){var oe=Um[D];j===0||j===10?((D===1?q:H)(ft(oe,0)),oe.length=0):oe.push(j)}function Ec(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 Mc(D){var j=d["_"+D];return j}function Hm(D,j){s().set(D,j>>>0)}function jm(D,j,oe,Me,je){var Be={string:cn=>{var Ml=0;if(cn!=null&&cn!==0){var Vx=(cn.length<<2)+1;Ml=Wc(Vx),it(cn,Ml,Vx)}return Ml},array:cn=>{var Ml=Wc(cn.length);return Hm(cn,Ml),Ml}};function ye(cn){return j==="string"?dt(cn):j==="boolean"?!!cn:cn}var Ne=Mc(D),Tt=[],pn=0;if(Me)for(var gr=0;grye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Me?Mc(D):function(){return jm(D,j,oe,arguments,Me)}}We.init();var Xm=[null,wc,Ic,Sc,Nc,Rc,Ec],Pc={__emscripten_init_main_thread_js:Sm,__emscripten_thread_cleanup:Cm,__pthread_create_js:Cc,_emscripten_default_pthread_stack_size:Tm,_emscripten_get_now_is_monotonic:Rm,_emscripten_notify_task_queue:Em,_emscripten_set_offscreencanvas_size:Mm,abort:Pm,emscripten_check_blocking_allowed:_m,emscripten_date_now:$m,emscripten_get_heap_max:Fm,emscripten_get_now:gd,emscripten_memcpy_big:Dm,emscripten_num_logical_cores:Om,emscripten_receive_on_main_thread_js:Lm,emscripten_resize_heap:Bm,emscripten_unwind_to_js_event_loop:Vm,exit:kc,fd_close:Nc,fd_seek:Rc,fd_write:Ec,memory:ie||d.wasmMemory},$x=fm(),Km=d.___wasm_call_ctors=function(){return(Km=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},Ym=d._init=function(){return(Ym=d._init=d.asm.init).apply(null,arguments)},Zm=d._init_with_threads_count=function(){return(Zm=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Jm=d._get_threads_count=function(){return(Jm=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},Qm=d._register_tensor=function(){return(Qm=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},ef=d._dispose_data=function(){return(ef=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},tf=d._dispose=function(){return(tf=d._dispose=d.asm.dispose).apply(null,arguments)},af=d._Abs=function(){return(af=d._Abs=d.asm.Abs).apply(null,arguments)},nf=d._Acos=function(){return(nf=d._Acos=d.asm.Acos).apply(null,arguments)},rf=d._Acosh=function(){return(rf=d._Acosh=d.asm.Acosh).apply(null,arguments)},sf=d._Add=function(){return(sf=d._Add=d.asm.Add).apply(null,arguments)},of=d._AddN=function(){return(of=d._AddN=d.asm.AddN).apply(null,arguments)},lf=d._All=function(){return(lf=d._All=d.asm.All).apply(null,arguments)},uf=d._Any=function(){return(uf=d._Any=d.asm.Any).apply(null,arguments)},df=d._ArgMax=function(){return(df=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},pf=d._ArgMin=function(){return(pf=d._ArgMin=d.asm.ArgMin).apply(null,arguments)},cf=d._Asin=function(){return(cf=d._Asin=d.asm.Asin).apply(null,arguments)},hf=d._Asinh=function(){return(hf=d._Asinh=d.asm.Asinh).apply(null,arguments)},mf=d._Atan=function(){return(mf=d._Atan=d.asm.Atan).apply(null,arguments)},ff=d._Atan2=function(){return(ff=d._Atan2=d.asm.Atan2).apply(null,arguments)},gf=d._Atanh=function(){return(gf=d._Atanh=d.asm.Atanh).apply(null,arguments)},yf=d._AvgPool=function(){return(yf=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},xf=d._AvgPool3D=function(){return(xf=d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},Af=d._AvgPool3DGrad=function(){return(Af=d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},bf=d._AvgPoolGrad=function(){return(bf=d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},vf=d._BatchMatMul=function(){return(vf=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},wf=d._Bincount=function(){return(wf=d._Bincount=d.asm.Bincount).apply(null,arguments)},kf=d._BitwiseAnd=function(){return(kf=d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},If=d._Ceil=function(){return(If=d._Ceil=d.asm.Ceil).apply(null,arguments)},Sf=d._ClipByValue=function(){return(Sf=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Cf=d._Conv2D=function(){return(Cf=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Tf=d._Conv2DBackpropInput=function(){return(Tf=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Nf=d._Conv3D=function(){return(Nf=d._Conv3D=d.asm.Conv3D).apply(null,arguments)},Rf=d._Conv3DBackpropFilterV2=function(){return(Rf=d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ef=d._Conv3DBackpropInputV2=function(){return(Ef=d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},Mf=d._Cos=function(){return(Mf=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)},$f=d._Cumprod=function(){return($f=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Ff=d._Cumsum=function(){return(Ff=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Df=d._DenseBincount=function(){return(Df=d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},Of=d._DepthToSpace=function(){return(Of=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},zf=d._DepthwiseConv2dNative=function(){return(zf=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Lf=d._Diag=function(){return(Lf=d._Diag=d.asm.Diag).apply(null,arguments)},Wf=d._Dilation2D=function(){return(Wf=d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},Bf=d._Dilation2DBackpropFilter=function(){return(Bf=d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},Vf=d._Dilation2DBackpropInput=function(){return(Vf=d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},Uf=d._Elu=function(){return(Uf=d._Elu=d.asm.Elu).apply(null,arguments)},Gf=d._EluGrad=function(){return(Gf=d._EluGrad=d.asm.EluGrad).apply(null,arguments)},Hf=d._Equal=function(){return(Hf=d._Equal=d.asm.Equal).apply(null,arguments)},jf=d._Erf=function(){return(jf=d._Erf=d.asm.Erf).apply(null,arguments)},qf=d._Exp=function(){return(qf=d._Exp=d.asm.Exp).apply(null,arguments)},Xf=d._Expm1=function(){return(Xf=d._Expm1=d.asm.Expm1).apply(null,arguments)},Kf=d._FlipLeftRight=function(){return(Kf=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Yf=d._Floor=function(){return(Yf=d._Floor=d.asm.Floor).apply(null,arguments)},Zf=d._FloorDiv=function(){return(Zf=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},Jf=d._FusedBatchNorm=function(){return(Jf=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},Qf=d._FusedConv2D=function(){return(Qf=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},e2=d._FusedDepthwiseConv2D=function(){return(e2=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},t2=d._Gather=function(){return(t2=d._Gather=d.asm.Gather).apply(null,arguments)},a2=d._GatherNd=function(){return(a2=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},n2=d._Greater=function(){return(n2=d._Greater=d.asm.Greater).apply(null,arguments)},r2=d._GreaterEqual=function(){return(r2=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},s2=d._IsFinite=function(){return(s2=d._IsFinite=d.asm.IsFinite).apply(null,arguments)},i2=d._IsInf=function(){return(i2=d._IsInf=d.asm.IsInf).apply(null,arguments)},o2=d._IsNan=function(){return(o2=d._IsNan=d.asm.IsNan).apply(null,arguments)},l2=d._LRN=function(){return(l2=d._LRN=d.asm.LRN).apply(null,arguments)},u2=d._LRNGrad=function(){return(u2=d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},d2=d._LeakyRelu=function(){return(d2=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},p2=d._Less=function(){return(p2=d._Less=d.asm.Less).apply(null,arguments)},c2=d._LessEqual=function(){return(c2=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},h2=d._LinSpace=function(){return(h2=d._LinSpace=d.asm.LinSpace).apply(null,arguments)},m2=d._Log=function(){return(m2=d._Log=d.asm.Log).apply(null,arguments)},f2=d._Log1p=function(){return(f2=d._Log1p=d.asm.Log1p).apply(null,arguments)},g2=d._LogicalAnd=function(){return(g2=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},y2=d._LogicalNot=function(){return(y2=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},x2=d._LogicalOr=function(){return(x2=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},A2=d._LogicalXor=function(){return(A2=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},b2=d._Max=function(){return(b2=d._Max=d.asm.Max).apply(null,arguments)},v2=d._MaxPool=function(){return(v2=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},w2=d._MaxPool3D=function(){return(w2=d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},k2=d._MaxPool3DGrad=function(){return(k2=d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},I2=d._MaxPoolGrad=function(){return(I2=d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},S2=d._MaxPoolWithArgmax=function(){return(S2=d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},C2=d._Maximum=function(){return(C2=d._Maximum=d.asm.Maximum).apply(null,arguments)},T2=d._Mean=function(){return(T2=d._Mean=d.asm.Mean).apply(null,arguments)},N2=d._Min=function(){return(N2=d._Min=d.asm.Min).apply(null,arguments)},R2=d._Minimum=function(){return(R2=d._Minimum=d.asm.Minimum).apply(null,arguments)},E2=d._MirrorPad=function(){return(E2=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},M2=d._Mod=function(){return(M2=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)},$2=d._Neg=function(){return($2=d._Neg=d.asm.Neg).apply(null,arguments)},F2=d._NonMaxSuppressionV3=function(){return(F2=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},D2=d._NonMaxSuppressionV4=function(){return(D2=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},_c=d._NonMaxSuppressionV5=function(){return(_c=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},$c=d._NotEqual=function(){return($c=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},xd=d._OneHot=function(){return(xd=d._OneHot=d.asm.OneHot).apply(null,arguments)},O2=d._PadV2=function(){return(O2=d._PadV2=d.asm.PadV2).apply(null,arguments)},z2=d._Pow=function(){return(z2=d._Pow=d.asm.Pow).apply(null,arguments)},Nl=d._Prelu=function(){return(Nl=d._Prelu=d.asm.Prelu).apply(null,arguments)},Fc=d._Prod=function(){return(Fc=d._Prod=d.asm.Prod).apply(null,arguments)},Rl=d._RealDiv=function(){return(Rl=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},El=d._Reciprocal=function(){return(El=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},L2=d._Relu=function(){return(L2=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)},dn=d._ScatterNd=function(){return(dn=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},fr=d._SearchSorted=function(){return(fr=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},Dc=d._SelectV2=function(){return(Dc=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},Ad=d._Selu=function(){return(Ad=d._Selu=d.asm.Selu).apply(null,arguments)},W2=d._Sigmoid=function(){return(W2=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)},Oc=d._Sinh=function(){return(Oc=d._Sinh=d.asm.Sinh).apply(null,arguments)},XS=d._Softmax=function(){return(XS=d._Softmax=d.asm.Softmax).apply(null,arguments)},KS=d._Softplus=function(){return(KS=d._Softplus=d.asm.Softplus).apply(null,arguments)},YS=d._SparseFillEmptyRows=function(){return(YS=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},ZS=d._SparseReshape=function(){return(ZS=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},JS=d._SparseSegmentReduction=function(){return(JS=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},QS=d._SparseToDense=function(){return(QS=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},eC=d._Sqrt=function(){return(eC=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},tC=d._Square=function(){return(tC=d._Square=d.asm.Square).apply(null,arguments)},aC=d._SquaredDifference=function(){return(aC=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},nC=d._Step=function(){return(nC=d._Step=d.asm.Step).apply(null,arguments)},rC=d._StridedSlice=function(){return(rC=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},sC=d._Sub=function(){return(sC=d._Sub=d.asm.Sub).apply(null,arguments)},iC=d._Sum=function(){return(iC=d._Sum=d.asm.Sum).apply(null,arguments)},oC=d._Tan=function(){return(oC=d._Tan=d.asm.Tan).apply(null,arguments)},lC=d._Tanh=function(){return(lC=d._Tanh=d.asm.Tanh).apply(null,arguments)},uC=d._TensorScatterUpdate=function(){return(uC=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},dC=d._Tile=function(){return(dC=d._Tile=d.asm.Tile).apply(null,arguments)},pC=d._TopK=function(){return(pC=d._TopK=d.asm.TopK).apply(null,arguments)},cC=d._Transform=function(){return(cC=d._Transform=d.asm.Transform).apply(null,arguments)},hC=d._Transpose=function(){return(hC=d._Transpose=d.asm.Transpose).apply(null,arguments)},mC=d.__FusedMatMul=function(){return(mC=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},fC=d._malloc=function(){return(fC=d._malloc=d.asm.malloc).apply(null,arguments)},gC=d._free=function(){return(gC=d._free=d.asm.free).apply(null,arguments)},yC=d.__emscripten_tls_init=function(){return(yC=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},zc=d._pthread_self=function(){return(zc=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},xC=d.___errno_location=function(){return(xC=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Fx=d.__emscripten_thread_init=function(){return(Fx=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},AC=d.__emscripten_thread_crashed=function(){return(AC=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},bC=d._emscripten_main_thread_process_queued_calls=function(){return(bC=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},vC=d._emscripten_main_browser_thread_id=function(){return(vC=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Dx=d._emscripten_run_in_main_runtime_thread_js=function(){return(Dx=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},wC=d._emscripten_dispatch_to_thread_=function(){return(wC=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},Ox=d.__emscripten_proxy_execute_task_queue=function(){return(Ox=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},B2=d.__emscripten_thread_free_data=function(){return(B2=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},zx=d.__emscripten_thread_exit=function(){return(zx=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Lx=d._emscripten_stack_set_limits=function(){return(Lx=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},V2=d.stackSave=function(){return(V2=d.stackSave=d.asm.stackSave).apply(null,arguments)},Lc=d.stackRestore=function(){return(Lc=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Wc=d.stackAlloc=function(){return(Wc=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},kC=d.dynCall_iijjiiii=function(){return(kC=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},IC=d.dynCall_jiji=function(){return(IC=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=kn,d.wasmMemory=ie,d.cwrap=qm,d.ExitStatus=$s,d.PThread=We;var Bc;mr=function D(){Bc||Wx(),Bc||(mr=D)};function Wx(D){if(D=D||y,Or>0)return;if(T){h(d),Yt(),startWorker(d);return}if(Dr(),Or>0)return;function j(){Bc||(Bc=!0,d.calledRun=!0,!Ce&&(Yt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),gc()))}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()();Wx();var Vc;f&&(Vc={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 Uc;if(typeof WasmBackendModule!="undefined")Uc=WasmBackendModule;else if(typeof r!="undefined")Uc=r;else throw new Error("Could not find wasm module in post.js");if(Vc){var SC=Uc._dispose;Uc._dispose=function(){SC(),Vc.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Vc.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)}),eT=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}};`}),tT=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 Sl||P("exiting due to exception: "+Y)}if(f){var T=cA(),N=hA();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 Sl))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),P=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"&&Hn("no native wasm support detected");var O,W=!1,$;function U(Y,se){Y||Hn(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|dn&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 ft=s.INITIAL_MEMORY||16777216,dt,st=[],it=[],He=[],yt=!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 ln(){yt=!0,mr(it)}function oa(){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 un(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 Il(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(Da!==null&&(clearInterval(Da),Da=null),ja)){var se=ja;ja=null,se()}}function Hn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",P(Y),W=!0,$=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var cd="data:application/octet-stream;base64,";function kn(Y){return Y.startsWith(cd)}function Dr(Y){return Y.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",kn(Yt)||(Yt=y(Yt));function gc(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){Hn(se)}}function dm(){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 gc(Yt)});if(A)return new Promise(function(Y,se){A(Yt,function(Ee){Y(new Uint8Array(Ee))},se)})}return Promise.resolve().then(function(){return gc(Yt)})}function pm(){var Y={env:hd,wasi_snapshot_preview1:hd};function se(Je,Ye){var Lt=Je.exports;s.asm=Lt,O=s.asm.memory,qe(O.buffer),dt=s.asm.__indirect_function_table,un(s.asm.__wasm_call_ctors),Il("wasm-instantiate")}hr("wasm-instantiate");function Ee(Je){se(Je.instance)}function et(Je){return dm().then(function(Ye){return WebAssembly.instantiate(Ye,Y)}).then(function(Ye){return Ye}).then(Je,function(Ye){P("failed to asynchronously prepare wasm: "+Ye),Hn(Ye)})}function wt(){return!S&&typeof WebAssembly.instantiateStreaming=="function"&&!kn(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 P("wasm streaming compile failed: "+Lt),P("falling back to ArrayBuffer instantiation"),et(Ee)})}):et(Ee)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,se);return kt}catch(Je){P("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return wt().catch(o),{}}var Mx,Or;function Sl(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 cm(){Hn("")}function yc(){return 4294901760}function _s(){return yc()}function hm(Y,se,Ee){ee.copyWithin(Y>>>0,se>>>0,se+Ee>>>0)}function xc(Y){try{return O.grow(Y-X.byteLength+65535>>>16),qe(O.buffer),1}catch(se){}}function Cl(Y){var se=ee.length;Y=Y>>>0;var Ee=yc();if(Y>Ee)return!1;let et=(Lt,dn)=>Lt+(dn-Lt%dn)%dn;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=xc(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 Ac(Y){return 52}function mm(Y,se,Ee,et,wt){return 70}var fm=[null,[],[]];function Px(Y,se){var Ee=fm[Y];se===0||se===10?((Y===1?M:P)(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 bc(Y){var se=s["_"+Y];return se}function $s(Y,se){re.set(Y,se>>>0)}function gm(Y,se,Ee,et,wt){var kt={string:Oa=>{var Lr=0;if(Oa!=null&&Oa!==0){var Oc=(Oa.length<<2)+1;Lr=xd(Oc),Z(Oa,Lr,Oc)}return Lr},array:Oa=>{var Lr=xd(Oa.length);return $s(Oa,Lr),Lr}};function Je(Oa){return se==="string"?H(Oa):se==="boolean"?!!Oa:Oa}var Ye=bc(Y),Lt=[],dn=0;if(et)for(var fr=0;frJe==="number"||Je==="boolean"),kt=se!=="string";return kt&&wt&&!et?bc(Y):function(){return gm(Y,se,Ee,arguments,et)}}var hd={abort:cm,emscripten_get_heap_max:_s,emscripten_memcpy_big:hm,emscripten_resize_heap:Cl,fd_close:Ac,fd_seek:mm,fd_write:_x},xm=pm(),vc=s.___wasm_call_ctors=function(){return(vc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},wc=s._init=function(){return(wc=s._init=s.asm.init).apply(null,arguments)},Am=s._init_with_threads_count=function(){return(Am=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},kc=s._get_threads_count=function(){return(kc=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},bm=s._register_tensor=function(){return(bm=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)},md=s._dispose=function(){return(md=s._dispose=s.asm.dispose).apply(null,arguments)},vm=s._Abs=function(){return(vm=s._Abs=s.asm.Abs).apply(null,arguments)},Ic=s._Acos=function(){return(Ic=s._Acos=s.asm.Acos).apply(null,arguments)},Tl=s._Acosh=function(){return(Tl=s._Acosh=s.asm.Acosh).apply(null,arguments)},wm=s._Add=function(){return(wm=s._Add=s.asm.Add).apply(null,arguments)},km=s._AddN=function(){return(km=s._AddN=s.asm.AddN).apply(null,arguments)},Im=s._All=function(){return(Im=s._All=s.asm.All).apply(null,arguments)},Sm=s._Any=function(){return(Sm=s._Any=s.asm.Any).apply(null,arguments)},Cm=s._ArgMax=function(){return(Cm=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},Sc=s._ArgMin=function(){return(Sc=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Cc=s._Asin=function(){return(Cc=s._Asin=s.asm.Asin).apply(null,arguments)},Tm=s._Asinh=function(){return(Tm=s._Asinh=s.asm.Asinh).apply(null,arguments)},Nm=s._Atan=function(){return(Nm=s._Atan=s.asm.Atan).apply(null,arguments)},Rm=s._Atan2=function(){return(Rm=s._Atan2=s.asm.Atan2).apply(null,arguments)},fd=s._Atanh=function(){return(fd=s._Atanh=s.asm.Atanh).apply(null,arguments)},Em=s._AvgPool=function(){return(Em=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},Mm=s._AvgPool3D=function(){return(Mm=s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},Pm=s._AvgPool3DGrad=function(){return(Pm=s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},Fs=s._AvgPoolGrad=function(){return(Fs=s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},_m=s._BatchMatMul=function(){return(_m=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},$m=s._Bincount=function(){return($m=s._Bincount=s.asm.Bincount).apply(null,arguments)},Tc=s._BitwiseAnd=function(){return(Tc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Fm=s._Ceil=function(){return(Fm=s._Ceil=s.asm.Ceil).apply(null,arguments)},gd=s._ClipByValue=function(){return(gd=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Dm=s._Conv2D=function(){return(Dm=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Om=s._Conv2DBackpropInput=function(){return(Om=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},zm=s._Conv3D=function(){return(zm=s._Conv3D=s.asm.Conv3D).apply(null,arguments)},zr=s._Conv3DBackpropFilterV2=function(){return(zr=s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},yd=s._Conv3DBackpropInputV2=function(){return(yd=s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lm=s._Cos=function(){return(Lm=s._Cos=s.asm.Cos).apply(null,arguments)},Wm=s._Cosh=function(){return(Wm=s._Cosh=s.asm.Cosh).apply(null,arguments)},Bm=s._CropAndResize=function(){return(Bm=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Vm=s._Cumprod=function(){return(Vm=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Nc=s._Cumsum=function(){return(Nc=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Rc=s._DenseBincount=function(){return(Rc=s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},Um=s._DepthToSpace=function(){return(Um=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Gm=s._DepthwiseConv2dNative=function(){return(Gm=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Ec=s._Diag=function(){return(Ec=s._Diag=s.asm.Diag).apply(null,arguments)},Mc=s._Dilation2D=function(){return(Mc=s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},Hm=s._Dilation2DBackpropFilter=function(){return(Hm=s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},jm=s._Dilation2DBackpropInput=function(){return(jm=s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},qm=s._Elu=function(){return(qm=s._Elu=s.asm.Elu).apply(null,arguments)},Xm=s._EluGrad=function(){return(Xm=s._EluGrad=s.asm.EluGrad).apply(null,arguments)},Pc=s._Equal=function(){return(Pc=s._Equal=s.asm.Equal).apply(null,arguments)},$x=s._Erf=function(){return($x=s._Erf=s.asm.Erf).apply(null,arguments)},Km=s._Exp=function(){return(Km=s._Exp=s.asm.Exp).apply(null,arguments)},Ym=s._Expm1=function(){return(Ym=s._Expm1=s.asm.Expm1).apply(null,arguments)},Zm=s._FlipLeftRight=function(){return(Zm=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Jm=s._Floor=function(){return(Jm=s._Floor=s.asm.Floor).apply(null,arguments)},Qm=s._FloorDiv=function(){return(Qm=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},ef=s._FusedBatchNorm=function(){return(ef=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},tf=s._FusedConv2D=function(){return(tf=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},af=s._FusedDepthwiseConv2D=function(){return(af=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},nf=s._Gather=function(){return(nf=s._Gather=s.asm.Gather).apply(null,arguments)},rf=s._GatherNd=function(){return(rf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},sf=s._Greater=function(){return(sf=s._Greater=s.asm.Greater).apply(null,arguments)},of=s._GreaterEqual=function(){return(of=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},lf=s._IsFinite=function(){return(lf=s._IsFinite=s.asm.IsFinite).apply(null,arguments)},uf=s._IsInf=function(){return(uf=s._IsInf=s.asm.IsInf).apply(null,arguments)},df=s._IsNan=function(){return(df=s._IsNan=s.asm.IsNan).apply(null,arguments)},pf=s._LRN=function(){return(pf=s._LRN=s.asm.LRN).apply(null,arguments)},cf=s._LRNGrad=function(){return(cf=s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},hf=s._LeakyRelu=function(){return(hf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},mf=s._Less=function(){return(mf=s._Less=s.asm.Less).apply(null,arguments)},ff=s._LessEqual=function(){return(ff=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},gf=s._LinSpace=function(){return(gf=s._LinSpace=s.asm.LinSpace).apply(null,arguments)},yf=s._Log=function(){return(yf=s._Log=s.asm.Log).apply(null,arguments)},xf=s._Log1p=function(){return(xf=s._Log1p=s.asm.Log1p).apply(null,arguments)},Af=s._LogicalAnd=function(){return(Af=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},bf=s._LogicalNot=function(){return(bf=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},vf=s._LogicalOr=function(){return(vf=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},wf=s._LogicalXor=function(){return(wf=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},kf=s._Max=function(){return(kf=s._Max=s.asm.Max).apply(null,arguments)},If=s._MaxPool=function(){return(If=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Sf=s._MaxPool3D=function(){return(Sf=s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},Cf=s._MaxPool3DGrad=function(){return(Cf=s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},Tf=s._MaxPoolGrad=function(){return(Tf=s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},Nf=s._MaxPoolWithArgmax=function(){return(Nf=s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},Rf=s._Maximum=function(){return(Rf=s._Maximum=s.asm.Maximum).apply(null,arguments)},Ef=s._Mean=function(){return(Ef=s._Mean=s.asm.Mean).apply(null,arguments)},Mf=s._Min=function(){return(Mf=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)},$f=s._Mod=function(){return($f=s._Mod=s.asm.Mod).apply(null,arguments)},Ff=s._Multinomial=function(){return(Ff=s._Multinomial=s.asm.Multinomial).apply(null,arguments)},Df=s._Multiply=function(){return(Df=s._Multiply=s.asm.Multiply).apply(null,arguments)},Of=s._Neg=function(){return(Of=s._Neg=s.asm.Neg).apply(null,arguments)},zf=s._NonMaxSuppressionV3=function(){return(zf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Lf=s._NonMaxSuppressionV4=function(){return(Lf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Wf=s._NonMaxSuppressionV5=function(){return(Wf=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Bf=s._NotEqual=function(){return(Bf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Vf=s._OneHot=function(){return(Vf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Uf=s._PadV2=function(){return(Uf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Gf=s._Pow=function(){return(Gf=s._Pow=s.asm.Pow).apply(null,arguments)},Hf=s._Prelu=function(){return(Hf=s._Prelu=s.asm.Prelu).apply(null,arguments)},jf=s._Prod=function(){return(jf=s._Prod=s.asm.Prod).apply(null,arguments)},qf=s._RealDiv=function(){return(qf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Xf=s._Reciprocal=function(){return(Xf=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},Kf=s._Relu=function(){return(Kf=s._Relu=s.asm.Relu).apply(null,arguments)},Yf=s._Relu6=function(){return(Yf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Zf=s._ResizeBilinear=function(){return(Zf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Jf=s._ResizeBilinearGrad=function(){return(Jf=s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},Qf=s._ResizeNearestNeighbor=function(){return(Qf=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},e2=s._ResizeNearestNeighborGrad=function(){return(e2=s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},t2=s._Reverse=function(){return(t2=s._Reverse=s.asm.Reverse).apply(null,arguments)},a2=s._RotateWithOffset=function(){return(a2=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},n2=s._Round=function(){return(n2=s._Round=s.asm.Round).apply(null,arguments)},r2=s._Rsqrt=function(){return(r2=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},s2=s._ScatterNd=function(){return(s2=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},i2=s._SearchSorted=function(){return(i2=s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},o2=s._SelectV2=function(){return(o2=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},l2=s._Selu=function(){return(l2=s._Selu=s.asm.Selu).apply(null,arguments)},u2=s._Sigmoid=function(){return(u2=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},d2=s._Sign=function(){return(d2=s._Sign=s.asm.Sign).apply(null,arguments)},p2=s._Sin=function(){return(p2=s._Sin=s.asm.Sin).apply(null,arguments)},c2=s._Sinh=function(){return(c2=s._Sinh=s.asm.Sinh).apply(null,arguments)},h2=s._Softmax=function(){return(h2=s._Softmax=s.asm.Softmax).apply(null,arguments)},m2=s._Softplus=function(){return(m2=s._Softplus=s.asm.Softplus).apply(null,arguments)},f2=s._SparseFillEmptyRows=function(){return(f2=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},g2=s._SparseReshape=function(){return(g2=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},y2=s._SparseSegmentReduction=function(){return(y2=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},x2=s._SparseToDense=function(){return(x2=s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},A2=s._Sqrt=function(){return(A2=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},b2=s._Square=function(){return(b2=s._Square=s.asm.Square).apply(null,arguments)},v2=s._SquaredDifference=function(){return(v2=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},w2=s._Step=function(){return(w2=s._Step=s.asm.Step).apply(null,arguments)},k2=s._StridedSlice=function(){return(k2=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},I2=s._Sub=function(){return(I2=s._Sub=s.asm.Sub).apply(null,arguments)},S2=s._Sum=function(){return(S2=s._Sum=s.asm.Sum).apply(null,arguments)},C2=s._Tan=function(){return(C2=s._Tan=s.asm.Tan).apply(null,arguments)},T2=s._Tanh=function(){return(T2=s._Tanh=s.asm.Tanh).apply(null,arguments)},N2=s._TensorScatterUpdate=function(){return(N2=s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},R2=s._Tile=function(){return(R2=s._Tile=s.asm.Tile).apply(null,arguments)},E2=s._TopK=function(){return(E2=s._TopK=s.asm.TopK).apply(null,arguments)},M2=s._Transform=function(){return(M2=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)},$2=s._malloc=function(){return($2=s._malloc=s.asm.malloc).apply(null,arguments)},F2=s._free=function(){return(F2=s._free=s.asm.free).apply(null,arguments)},D2=s.___errno_location=function(){return(D2=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},_c=s.stackSave=function(){return(_c=s.stackSave=s.asm.stackSave).apply(null,arguments)},$c=s.stackRestore=function(){return($c=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},xd=s.stackAlloc=function(){return(xd=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},O2=s.dynCall_iijjiiii=function(){return(O2=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},z2=s.dynCall_jiji=function(){return(z2=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=ym;var Nl;ja=function Y(){Nl||Fc(),Nl||(ja=Y)};function Fc(Y){if(Y=Y||p,ht>0||(zt(),ht>0))return;function se(){Nl||(Nl=!0,s.calledRun=!0,!W&&(ln(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),oa()))}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()();Fc();var Rl;l&&(Rl={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 El;if(typeof r!="undefined")El=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")El=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Rl){var L2=El._dispose;El._dispose=function(){L2(),Rl.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Rl.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)}),rp=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}},au=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 mA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,oh(e,t,a)}function aT(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--,oh(e,a,n),oh(t,a,n)}function Dd(e,t,a){return Math.max(e,Math.min(t,a))}function nT(e){return e%2===0?e:e+1}function oh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function rT(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ri(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function vt(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 cT(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 sp(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=>Ul(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function gA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:sp(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 yA(e,t){return Z1(e,t)}function Z1(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 xA(e,t){for(let a=0;at+=a.length),t}function Ur(e){return typeof e=="string"||e instanceof String}function vA(e){return typeof e=="boolean"}function wA(e){return typeof e=="number"}function ip(e){return Array.isArray(e)?ip(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":wA(e)?"float32":Ur(e)?"string":vA(e)?"bool":"float32"}function Kr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function uh(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function kA(e,t,a,n=!1){let r=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;il*u)*(n?2:1);for(let l=0;lr*s)*(a?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${a?" for a complex tensor":""}.`);return kA(0,e,t,a)}function mT(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 J1(e,t){let a=Rh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return zl(e,new Float32Array(a));if(t==="int32")return zl(e,new Int32Array(a));if(t==="bool")return zl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function tn(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function gT(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]=bT(a,n)})}};function xT(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(AT(t,n[0],n[1]),n.join("="))),t}function AT(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function bT(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function B(){return Q1}var Q1=null;function vT(e){Q1=e}var G2;function SA(){if(G2==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");G2=e}return G2}function wT(){let e=SA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function eg(e,t){let a=wT();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var ru="Abs",si="Acos",ii="Acosh",is="Add",oi="AddN",li="All",ui="Any",su="ArgMax",iu="ArgMin",di="Asin",pi="Asinh",ci="Atan",hi="Atanh",mi="Atan2",fi="AvgPool",op="AvgPoolGrad",ou="AvgPool3D",lp="AvgPool3DGrad",gi="BatchMatMul",lu="BatchToSpaceND",yi="Bincount",uu="BitwiseAnd",kT="BroadcastTo",du="BroadcastArgs",xi="Cast",Ai="Ceil",os="ClipByValue",up="Complex",dp="ComplexAbs",pu="Concat",bi="Conv2D",pp="Conv2DBackpropFilter",vi="Conv2DBackpropInput",wi="Conv3D",cu="Conv3DBackpropFilterV2",ki="Conv3DBackpropInputV2",Ii="Cos",Si="Cosh",Ci="Cumprod",Ti="Cumsum",Ni="CropAndResize",hu="DenseBincount",Ri="DepthToSpace",Ei="DepthwiseConv2dNative",cp="DepthwiseConv2dNativeBackpropFilter",hp="DepthwiseConv2dNativeBackpropInput",mu="Diag",Mi="Dilation2D",Gl="Dilation2DBackpropInput",Hl="Dilation2DBackpropFilter",mp="Draw",Pi="RealDiv",fp="Einsum",_i="Elu",fu="EluGrad",$i="Erf",Fi="Equal",Di="Exp",gu="ExpandDims",Oi="Expm1",gp="FFT",yu="Fill",zi="FlipLeftRight",Li="Floor",Wi="FloorDiv",Bi="FusedBatchNorm",xu="GatherV2",Vi="GatherNd",Ui="Greater",Gi="GreaterEqual",Hi="Identity",yp="IFFT",xp="Imag",ji="IsFinite",qi="IsInf",Xi="IsNan",Ki="LeakyRelu",Yi="Less",Zi="LessEqual",Ji="LinSpace",Qi="Log",eo="Log1p",to="LogicalAnd",ao="LogicalNot",no="LogicalOr",CA="LogicalXor",IT="LogSoftmax",ST="LowerBound",ro="LRN",Au="LRNGrad",CT="MatrixBandPart",so="Max",io="Maximum",oo="MaxPool",Ap="MaxPoolGrad",bu="MaxPool3D",bp="MaxPool3DGrad",vu="MaxPoolWithArgmax",lo="Mean",uo="Min",po="Minimum",co="MirrorPad",ho="Mod",mo="Multinomial",fo="Multiply",wu="Neg",go="NotEqual",yo="NonMaxSuppressionV3",ku="NonMaxSuppressionV4",xo="NonMaxSuppressionV5",Iu="OnesLike",Ao="OneHot",Su="Pack",bo="PadV2",TT="Pool",vo="Pow",wo="Prelu",ko="Prod",Mh="RaggedGather",Ph="RaggedRange",_h="RaggedTensorToTensor",Cu="Range",vp="Real",Io="Reciprocal",So="Relu",Tu="Reshape",Co="ResizeNearestNeighbor",Nu="ResizeNearestNeighborGrad",To="ResizeBilinear",Ru="ResizeBilinearGrad",No="Relu6",Ro="Reverse",Eo="Round",Mo="Rsqrt",Po="ScatterNd",_o="TensorScatterUpdate",$o="SearchSorted",Eu="Select",Fo="Selu",Mu="Slice",Do="Sin",Oo="Sinh",zo="Sign",Lo="Sigmoid",Wo="Softplus",Bo="Sqrt",Vo="Sum",Pu="SpaceToBatchND",_u="SplitV",Uo="Softmax",wp="SparseFillEmptyRows",$u="SparseReshape",Fu="SparseSegmentMean",Du="SparseSegmentSum",Go="SparseToDense",Ho="SquaredDifference",kp="Square",Ip="StaticRegexReplace",jo="StridedSlice",Ou="StringNGrams",Sp="StringSplit",Cp="StringToHashBucketFast",qo="Sub",Xo="Tan",Ko="Tanh",ls="Tile",Yo="TopK",Zo="Transform",wr="Transpose",Tp="Unique",zu="Unpack",Np="UnsortedSegmentSum",NT="UpperBound",Lu="ZerosLike",us="Step",Od="FromPixels",Jo="RotateWithOffset",Yr="_FusedMatMul",Zr="FusedConv2D",Jr="FusedDepthwiseConv2D";function Vr(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.warn(...e)}function RT(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.log(...e)}var jl=eg("kernelRegistry",()=>new Map),zd=eg("gradRegistry",()=>new Map);function Ld(e,t){let a=tg(e,t);return jl.get(a)}function e1(e){return zd.get(e)}function Zn(e){let t=jl.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 yn(e){let{kernelName:t,backendName:a}=e,n=tg(t,a);jl.has(n)&&Vr(`The kernel '${t}' for backend '${a}' is already registered`),jl.set(n,e)}function ET(e){let{kernelName:t}=e;zd.has(t)&&B().getBool("DEBUG")&&Vr(`Overriding the gradient for '${t}'`),zd.set(t,e)}function MT(e,t){let a=tg(e,t);if(!jl.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);jl.delete(a)}function PT(e){if(!zd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);zd.delete(e)}function _T(e,t){Zn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});yn(n)})}function tg(e,t){return`${t}_${e}`}var v={};Ze(v,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>fA,assert:()=>F,assertNonNegativeIntegerDimensions:()=>tn,assertNonNull:()=>ri,assertShapesMatch:()=>Ta,bytesFromStringArray:()=>bA,bytesPerElement:()=>lh,checkConversionForErrors:()=>xA,clamp:()=>Dd,computeStrides:()=>nu,convertBackendValuesAndArrayBuffer:()=>mT,createScalarValue:()=>LT,createShuffledIndices:()=>dT,decodeString:()=>dh,distSquared:()=>iT,encodeString:()=>Ep,fetch:()=>BT,fingerPrint64:()=>zT,flatten:()=>Qr,getArrayFromDType:()=>Z1,getTypedArrayFromDType:()=>yA,hasEncodingLoss:()=>hT,hexToLong:()=>Rp,indexToLoc:()=>yT,inferDtype:()=>ip,inferFromImplicitShape:()=>cT,isBoolean:()=>vA,isFunction:()=>Kr,isInt:()=>Ul,isNumber:()=>wA,isPromise:()=>Eh,isScalarShape:()=>oT,isString:()=>Ur,isTypedArray:()=>Jt,isValidDtype:()=>AA,locToIndex:()=>gT,makeOnesTypedArray:()=>J1,makeZerosNestedTypedArray:()=>fT,makeZerosTypedArray:()=>Rh,nearestDivisor:()=>uh,nearestLargerEven:()=>nT,now:()=>Wd,parseAxisParam:()=>sp,randUniform:()=>sT,repeatedTry:()=>pT,rightPad:()=>Pd,shuffle:()=>mA,shuffleCombo:()=>aT,sizeFromShape:()=>vt,sizeToSquarishShape:()=>uT,squeezeShape:()=>gA,sum:()=>rT,swap:()=>oh,tanh:()=>lT,toNestedArray:()=>zl,toTypedArray:()=>$h});function TA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var Hx=tu(LC()),Ws=Hx.default||Hx;function Rp(e){return Ws.fromString(e,!0,16)}var NA=Rp("c3a5c85c97cb3127"),zs=Rp("b492b66fbe98f273"),va=Rp("9ae16a3b2f90404f");function t1(e){return e.xor(e.shru(47))}function RA(e,t,a){let n=e.slice(t,t+a);return Ws.fromBytes(Array.from(n),!0,!0)}function xt(e,t){return RA(e,t,8)}function jx(e,t){return RA(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function qr(e,t,a=Rp("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 $T(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 Hc(e,t,a,n){return $T(xt(e,t),xt(e,t+8),xt(e,t+16),xt(e,t+24),a,n)}function FT(e,t=e.length){if(t>=8){let a=va.add(t*2),n=xt(e,0).add(va),r=xt(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=jx(e,0);return qr(n.shl(3).add(t),jx(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 t1(va.mul(s).xor(NA.mul(i))).mul(va)}return va}function DT(e,t=e.length){let a=va.add(t*2),n=xt(e,0).mul(zs),r=xt(e,8),s=xt(e,t-8).mul(a),i=xt(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 OT(e,t=e.length){let a=va.add(t*2),n=xt(e,0).mul(va),r=xt(e,8),s=xt(e,t-8).mul(a),i=xt(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=xt(e,16).mul(a),p=xt(e,24),c=o.add(xt(e,t-32)).mul(a),d=l.add(xt(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 zT(e,t=e.length){let a=Ws.fromNumber(81,!0);if(t<=32)return t<=16?FT(e,t):DT(e,t);if(t<=64)return OT(e,t);let n=a,r=a.mul(zs).add(113),s=t1(r.mul(va).add(113)).mul(va),i=[Ws.UZERO,Ws.UZERO],o=[Ws.UZERO,Ws.UZERO];n=n.mul(va).add(xt(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(xt(e,l+8)),37).mul(zs),r=Zt(r.add(i[1]).add(xt(e,l+48)),42).mul(zs),n=n.xor(o[1]),r=r.add(i[0]).add(xt(e,l+40)),s=Zt(s.add(o[0]),33).mul(zs),i=Hc(e,l,i[1].mul(zs),n.add(o[0])),o=Hc(e,l+32,s.add(o[1]),r.add(xt(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=zs.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(xt(e,l+8)),37).mul(c),r=Zt(r.add(i[1]).add(xt(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(xt(e,l+40))),s=Zt(s.add(o[0]),33).mul(c),i=Hc(e,l,i[1].mul(c),n.add(o[0])),o=Hc(e,l+32,s.add(o[1]),r.add(xt(e,l+16))),[s,n]=[n,s],qr(qr(i[0],o[0],c).add(t1(r).mul(NA)).add(s),qr(i[1],o[1],c).add(n),c)}function LT(e,t){return t==="string"?Ep(e):$h([e],t)}function WT(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function $h(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")&&xA(e,t),WT(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=Wd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Wd()-i})}if(B().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{UT(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 UT(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 HT(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 qx=20,bd=3,H2=7;function qT(e,t,a,n){let r=nu(t),s=XT(e,t,a,r),i=t.length,o=Jc(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 FT(e,t,a,n){let r=vt(t),s=n[n.length-1],i=new Array(s).fill(0),o=t.length,l=a==="complex64"?Id(e):e;if(o>1)for(let u=0;uVx){let f=vd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-vd)*i,o*i));return a==="complex64"&&(g=Id(g),y=Id(y)),["["+g.map((x,A)=>kd(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>kd(x,r[o-vd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?Id(e):Array.from(e)).map((f,g)=>kd(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>Vx){for(let f=0;f0?d[0]+h:"");for(let f=1;f1)for(let u=0;uqx){let f=bd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-bd)*i,o*i));return a==="complex64"&&(g=kd(g),y=kd(y)),["["+g.map((x,A)=>wd(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>wd(x,r[o-bd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?kd(e):Array.from(e)).map((f,g)=>wd(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>qx){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||Y1(t,this.size),this.strides=nu(e)}set(e,...t){t.length===0&&(t=[0]),$(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let 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;nph(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=>ph(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 $l.print(this,e)}clone(){return this.throwIfDisposed(),$l.clone(this)}toString(e=!1){let t=this.dataSync();return $T(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),$l.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(mt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function WT(){return Q1("Tensor",()=>mt)}WT();var Vd=class extends mt{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(!Tr(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(Vd,Symbol.hasInstance,{value:e=>e instanceof mt&&e.assign!=null&&e.assign instanceof Function});var SA={};Ze(SA,{assertTypesMatch:()=>NA,getTensorsInContainer:()=>tg,isTensorInList:()=>VT,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 BT={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 BT[e][t]}function Pp(e){return pa(e,"int32")}function CA(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function TA(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 NA(e,t){$(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function VT(e,t){return t.some(a=>a.id===e.id)}function tg(e){let t=[];return RA(e,t,new Set),t}function RA(e,t,a){if(e==null)return;if(e instanceof mt){t.push(e);return}if(!UT(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),RA(s,t,a))}}function UT(e){return Array.isArray(e)||typeof e=="object"}function q2(e){return e.kernelName!=null}var Ux=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()}},Ud=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Ux}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Zn(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let a=t.factory();if(a&&!(a instanceof au)&&typeof a.then=="function"){let n=++this.pendingBackendInitId,r=a.then(s=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(a),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,a){e();try{let n=a();return t(),n}catch(n){throw t(),n}}nextTensorId(){return Ud.nextTensorId++}nextVariableId(){return Ud.nextVariableId++}clone(e){let t=L.runKernel(Gi,{x:e}),a={x:e},n=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return L.runKernel(yi,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,a,[t],n,r,{}),t}runKernel(e,t,a){if(this.backendName==null&&this.backend,Wd(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:a})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,a){let n=this.backend.numDataIds(),r=0;a.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,a=[],n=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=q2(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(q2(e)){let{kernelName:h,inputs:m,attrs:f}=e;this.backendName==null&&this.backend;let g=Wd(h,this.backendName);$(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=g.kernelFunc({inputs:m,attrs:f,backend:this.backend});let x=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,x);let A=x.map(b=>b.rank!=null?b:this.makeTensorFromTensorInfo(b));if(n){let b=this.getTensorsForGradient(h,m,A);a=this.saveTensorsForBackwardMode(b)}return A}}else{let{forwardFunc:h}=e,m=f=>{n&&(a=f.map(g=>this.keep(this.clone(g))))};i=()=>{let f=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,m));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,f,g),g}}let{inputs:u,attrs:p}=e,c=q2(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(l,u,t,c,a,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,a){let n=t1(e);if(n!=null){let r=n.inputsToSave||[],s=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=a.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,a,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");a=a||"float32",n=n||this.backend;let r=e;a==="string"&&Vr(e[0])&&(r=e.map(o=>_p(o)));let s=n.write(r,t,a),i=new mt(t,a,s,this.nextTensorId());if(this.trackTensor(i,n),a==="string"){let o=this.state.tensorInfo.get(s),l=mA(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,a,n){a=a||"float32";let r={dataId:e,shape:t,dtype:a};return this.makeTensorFromTensorInfo(r,n)}makeTensorFromTensorInfo(e,t){let{dataId:a,shape:n,dtype:r}=e,s=new mt(n,r,a,this.nextTensorId());return this.trackTensor(s,t),s}makeVariable(e,t=!0,a,n){a=a||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let r=new Vd(e,t,a,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let a=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(a=e.size*uh(e.dtype)),this.state.numBytes+=a,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:a})),e instanceof Vd||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let a=e.size*uh(e.dtype);this.state.numBytes-=a}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,a=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-a;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,a,n,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:a,saved:r},o=t1(e);o!=null&&(n=o.gradFunc),n!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let c=a[p],d=Rh(c.size,c.dtype);return this.makeTensor(d,c.shape,c.dtype)}return u}),n(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=tg(e),a=new Set(t.map(r=>r.id));for(let r=0;r{!r.kept&&r.scopeId===n.id&&this.track(r)})}gradients(e,t,a,n=!1){if($(t.length>0,()=>"gradients() received an empty list of xs."),a!=null&&a.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${a.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));$(r instanceof mt,()=>"The result y returned by f() must be a tensor.");let s=_T(this.state.activeTape,t,r);if(!n&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=a==null?GT(r.shape):a,PT(i,s,l=>this.tidy(l),HT);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return $(Xr(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{$(t.every(i=>i instanceof mt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let a,n={};t.forEach((i,o)=>{n[o]=i});let r=(i,o)=>(a=e(...t,o),$(a.value instanceof mt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),$(Xr(a.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),a.value),s=(i,o)=>{let l=a.gradFunc(i,o),u=Array.isArray(l)?l:[l];$(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),$(u.every(c=>c 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 p={};return u.forEach((c,d)=>{p[d]=()=>c}),p};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Bd(),a=await this.backend.time(e);return a.wallMs=Bd()-t,a}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Ux;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}};Ud.nextTensorId=0;Ud.nextVariableId=0;function GT(e){let t=Z1(vt(e),"float32");return L.makeTensor(t,e,"float32")}function EA(){let e=AA();if(e._tfengine==null){let t=new xA(e);e._tfengine=new Ud(t)}return lT(e._tfengine.ENV),OT(()=>e._tfengine),e._tfengine}var L=EA();function HT(e,t){let a={a:e,b:t};return L.runKernel(rs,a)}var $p={};Ze($p,{isBrowser:()=>MA,isMobile:()=>XT,mockIsMobile:()=>qT});function jT(){return typeof navigator!="undefined"&&navigator!=null}var l1;function qT(e){l1=e}function XT(e){if(l1!==void 0)return l1;if(e||jT()){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 MA(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ua=W();Ua.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.")});Ua.registerFlag("IS_BROWSER",()=>MA());Ua.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ua.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ua.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Ua.registerFlag("PROD",()=>!1);Ua.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ua.getBool("DEBUG"));Ua.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ua.registerFlag("IS_TEST",()=>!1);Ua.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Ua.getBool("DEBUG"));Ua.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ua.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ua.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Jn(e,t){let a=e;if(Qt(e))return t==="string"?[]:[e.length];if(CA(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if(TA(e))return[e.buffer.size/(t==null?4:uh(t))];if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||Qt(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&W().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&_A(e,n,[]),n}function _A(e,t,a){if(a=a||[],!Array.isArray(e)&&!Qt(e)){$(t.length===0,()=>`Element arr[${a.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}$(t.length>0,()=>`Element arr[${a.join("][")}] should be a primitive, but is an array of ${e.length} elements`),$(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),Gx(n,r,t,a),e==null||!Qt(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=Jn(e,r);!Qt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?$h(e,r):Jr(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 ag="__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+ag;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return Eh(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 KT(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Na(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 Cr=z({complex_:KT});function ls(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(TA(e)||CA(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(!Qt(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){nn(t);let r=vt(t),s=vt(a);$(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!Qt(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?$h(e,n):Jr(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=Jn(e,a);return ls(e,t,n,a)}var u1={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},nr=class{static join(e){return new nr(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(a=>Qt(a)?a.buffer:a),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let a=0;a=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 a=YT(this.shards,t);return a===-1?-1:(this.previousShardIndex=a,this.previousShardIndex)}};function YT(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}var ch=4;async function ZT(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)+ch*d.length,m=new Uint8Array(h),f=0;for(let g=0;g{if(t+=s.byteLength,a.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var ng=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Hx(e){return ng?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function QT(e){if(ng)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 nN(){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 rN(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function sN(){let e=aN(),t=nN(),a=rN();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 Pt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Pt.instance==null&&(Pt.instance=new Pt),Pt.instance}static registerSaveRouter(e){Pt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Pt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Pt.getHandlers(e,"save")}static getLoadHandlers(e,t){return Pt.getHandlers(e,"load",t)}static getHandlers(e,t,a){let n=[];return(t==="load"?Pt.getInstance().loadRouters:Pt.getInstance().saveRouters).forEach(r=>{let s=r(e,a);s!==null&&n.push(s)}),n}},iN=e=>Pt.registerSaveRouter(e),oN=e=>Pt.registerLoadRouter(e),lN=e=>Pt.getSaveHandlers(e),uN=(e,t)=>Pt.getLoadHandlers(e,t),d1="tensorflowjs",p1=1,Gs="models_store",Ur="model_info_store";function OA(){if(!W().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function c1(e){let t=e.result;t.createObjectStore(Gs,{keyPath:"modelPath"}),t.createObjectStore(Ur,{keyPath:"modelPath"})}var qs=class{constructor(e){if(this.indexedDB=OA(),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(d1,p1);r.onupgradeneeded=()=>c1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(Gs,"readonly"),o=i.objectStore(Gs).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=nr.join(t.weightData);let i=Fp(t),o=s.transaction(Ur,"readwrite"),l=o.objectStore(Ur),u;try{u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(c){return n(c)}let p;u.onsuccess=()=>{p=s.transaction(Gs,"readwrite");let c=p.objectStore(Gs),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(Ur);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)})}};qs.URL_SCHEME="indexeddb://";var zA=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(qs.URL_SCHEME)?dN(e.slice(qs.URL_SCHEME.length)):null;Pt.registerSaveRouter(zA);Pt.registerLoadRouter(zA);function dN(e){return new qs(e)}function pN(e){return e.startsWith(qs.URL_SCHEME)?e.slice(qs.URL_SCHEME.length):e}var cN=class{constructor(){this.indexedDB=OA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(d1,p1);a.onupgradeneeded=()=>c1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Ur,"readonly"),s=r.objectStore(Ur).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=pN(e),new Promise((t,a)=>{let n=this.indexedDB.open(d1,p1);n.onupgradeneeded=()=>c1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Ur,"readwrite"),i=s.objectStore(Ur),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(Gs,"readwrite");let c=l.objectStore(Gs).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)})}},wr="/",Fl="tensorflowjs_models",LA="info",hN="model_topology",mN="weight_specs",fN="weight_data",gN="model_metadata";function WA(e){return{info:[Fl,e,LA].join(wr),topology:[Fl,e,hN].join(wr),weightSpecs:[Fl,e,mN].join(wr),weightData:[Fl,e,fN].join(wr),modelMetadata:[Fl,e,gN].join(wr)}}function BA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function yN(e){let t=e.split(wr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(wr)}function xN(e){return e.startsWith(Xs.URL_SCHEME)?e.slice(Xs.URL_SCHEME.length):e}var Xs=class{constructor(e){if(!W().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=WA(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=Fp(e),r=nr.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,QT(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 BA(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=eN(s),t}};Xs.URL_SCHEME="localstorage://";var VA=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Xs.URL_SCHEME)?AN(e.slice(Xs.URL_SCHEME.length)):null;Pt.registerSaveRouter(VA);Pt.registerLoadRouter(VA);function AN(e){return new Xs(e)}var bN=class{constructor(){$(W().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),$(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Fl+wr,a=wr+LA;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(Ol)&&(e=e.slice(0,e.indexOf(Ol))),$(e.length>0,()=>"scheme must not be an empty string.");let a=La.getInstance();$(a.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),a.managers[e]=t}static getManager(e){let t=La.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(La.getInstance().managers)}};function eh(e){if(e.indexOf(Ol)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${La.getSchemes().join(",")}`);return{scheme:e.split(Ol)[0],path:e.split(Ol)[1]}}async function UA(e,t,a=!1){$(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=Pt.getLoadHandlers(e);$(n.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),$(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${e}.`);let r=n[0],s=Pt.getSaveHandlers(t);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),$(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],o=eh(e).scheme,l=eh(e).path,u=o===eh(e).scheme,p=await r.load();a&&u&&await La.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await La.getManager(o).removeModel(l),c.modelArtifactsInfo}async function vN(){let e=La.getSchemes(),t={};for(let a of e){let n=await La.getManager(a).listModels();for(let r in n){let s=a+Ol+r;t[s]=n[r]}}return t}async function wN(e){let t=eh(e);return La.getManager(t.scheme).removeModel(t.path)}async function kN(e,t){return UA(e,t,!1)}async function IN(e,t){return UA(e,t,!0)}var SN=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!W().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",a=>{if(a.source===window&&a.data.name===this.messageName){a.stopPropagation();let n=this.functionRefs[a.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return vA(e)}};if(W().get("IS_BROWSER")){W().setPlatform("browser",new SN);try{La.registerManager(Xs.URL_SCHEME,new bN)}catch(e){}try{La.registerManager(qs.URL_SCHEME,new cN)}catch(e){}}var CN={importFetch:()=>TC()},X2,TN=class{constructor(){this.util=NC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return W().global.fetch!=null?W().global.fetch(e,t):(X2==null&&(X2=CN.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)}};W().get("IS_NODE")&&!W().get("IS_BROWSER")&&W().setPlatform("node",new TN);function $e(e,t="float32",a){return t=t||"float32",nn(e),new Ut(e,t,a)}function NN(e,t){let a=R(e,"x","cast");if(!hA(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(yi,n,r)}var Ue=z({cast_:NN});function RN(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(Gi,t)}var Sa=z({clone_:RN});function sg(e,t=!1){console.log(e.toString(t))}EA();var EN={buffer:$e,cast:Ue,clone:Sa,print:sg};zT(EN);function ig(){W().set("PROD",!0)}function MN(){W().set("DEBUG",!0)}function _N(){W().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function og(e){W().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}LT(og);function PN(){L.disposeVariables()}function It(){return L}function $N(){return L.memory()}function FN(e){return L.profile(e)}function De(e,t){return L.tidy(e,t)}function J(e){tg(e).forEach(t=>t.dispose())}function zn(e){return L.keep(e)}function DN(e){return L.time(e)}function Dp(e){return L.setBackend(e)}function Op(){return L.ready()}function ha(){return L.backendName}function ON(e){L.removeBackend(e)}function lg(e){return L.findBackend(e)}function zN(e){return L.findBackendFactory(e)}function Jo(e,t,a=1){return L.registerBackend(e,t,a)}function rr(){return L.backend}function LN(e,t){W().setPlatform(e,t)}function WN(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(rs,r)}var we=z({add_:WN});function BN(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(Li,r)}var zp=z({floorDiv_:BN});function VN(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(Mi,r,s)}var ve=z({div_:VN});function UN(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(mo,r)}var te=z({mul_:UN});function GN(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(ru,a)}}var Ja=z({abs_:GN});function HN(e){let t={x:R(e,"x","acos")};return L.runKernel(ri,t)}var GA=z({acos_:HN});function jN(e){let t={x:R(e,"x","acosh")};return L.runKernel(si,t)}var HA=z({acosh_:jN});function qN(e){$(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),$(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(!Tr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return L.runKernel(ii,n)}var Fh=z({addN_:qN});function XN(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(oi,n,r)}var jA=z({all_:XN});function KN(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(li,n,r)}var qA=z({any_:KN});function YN(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(su,a,n)}var sr=z({argMax_:YN});function ZN(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(iu,a,n)}var XA=z({argMin_:ZN});function JN(e){let t={x:R(e,"x","asin")};return L.runKernel(ui,t)}var KA=z({asin_:JN});function QN(e){let t={x:R(e,"x","asinh")};return L.runKernel(di,t)}var YA=z({asinh_:QN});function eR(e){let t={x:R(e,"x","atan")};return L.runKernel(pi,t)}var ZA=z({atan_:eR});function tR(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(hi,r)}var JA=z({atan2_:tR});function aR(e){let t={x:R(e,"x","atanh")};return L.runKernel(ci,t)}var QA=z({atanh_:aR});function nR(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=ab(r);return Lp(e,o,a,s,n,null,null,l)}function eb(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 rR(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=h1(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 tb(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=zl(d,y),b=zl(h,x),{padInfo:w,outHeight:I,outWidth:T}=oR(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 tb(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]=h1(a),[b,w,I]=h1(n),T=zl(h,b),N=zl(m,w),M=zl(f,I),{padInfo:P,outDepth:E,outHeight:C,outWidth:_}=lR(r,u,p,c,y,x,A,T,N,M,o),O=s?g*d:g,B;return i==="channelsFirst"?B=[l,O,E,C,_]:i==="channelsLast"&&(B=[l,E,C,_,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:c,inChannels:d,outDepth:E,outHeight:C,outWidth:_,outChannels:O,padInfo:P,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:B,filterShape:t}}function sR(e,t,a,n,r){n==null&&(n=ug(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=ug(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 ug(e,t,a,n=1){let r=zl(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 h1(e){return typeof e=="number"?[e,e,e]:e}function zl(e,t){return t<=1?e:e+(e-1)*(t-1)}function oR(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=sR([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 lR(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 Ks(e){return Hd(e).every(t=>t>0)}function ab(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Rn(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")$(Bl(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=>{$(Bl(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 uR(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Tu,a,n)}var Q=z({reshape_:uR});function dR(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;$(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]])),$(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),Rn("avgPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(mi,u,p);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var dg=z({avgPool_:dR});function pR(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]])),$(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),$(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(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}'`),Rn("avgPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(ou,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 nb=z({avgPool3d_:pR});function cR(e,t=0){$(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 Sa(a[0]);let n=a,r={axis:t};return L.runKernel(pu,n,r)}var lt=z({concat_:cR});function hR(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(fi,i,o)}var pt=z({matMul_:hR});function mR(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(zo,t)}var Wa=z({sigmoid_:mR});function fR(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(Mu,r,s)}var Fe=z({slice_:fR});function gR(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(Xo,t)}var hh=z({tanh_:gR});function yR(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(Wa(x),hh(A)),te(p,Wa(we(i,b)))),T=te(hh(I),Wa(w));return[I,T]}var rb=z({basicLSTMCell_:yR});function xR(e,t,a){let n=R(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);$(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),$(a.length===t.length,()=>`crops.length is ${a.length} but should be equal to blockShape.length ${t.length}`),$(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(lu,s,i)}var pg=z({batchToSpaceND_:xR});function AR(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 bR(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")),$(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),$(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),$(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let c={x:AR(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=L.runKernel(Wi,c,d);return Q(h,i.shape)}var Wp=z({batchNorm_:bR});function vR(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")),$(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),$(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),$(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&$(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 sb=z({batchNorm2d_:vR});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")),$(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),$(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),$(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&$(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 ib=z({batchNorm3d_:wR});function kR(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")),$(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),$(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),$(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&$(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 ob=z({batchNorm4d_:kR});function IR(e,t,a){let n=R(e,"x","bincount"),r=R(t,"weights","bincount");$(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),$(a>=0,()=>`size must be non-negative, but got ${a}.`),$(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(gi,s,i)}var cg=z({bincount_:IR});function SR(e,t){let a=R(e,"x","bitwiseAnd"),n=R(t,"y","bitwiseAnd");if(!Tr(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(uu,r)}var lb=z({bitwiseAnd_:SR});function CR(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(du,r)}var ub=z({broadcastArgs_:CR});function TR(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(nn(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 Sa(a);let i={x:a},o={reps:s};return L.runKernel(is,i,o)}var Ll=z({broadcastTo_:TR});function NR(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(xi,t)}var db=z({ceil_:NR});function ir(e,t,a){nn(e),a=a||lp(t);let n={shape:e,value:t,dtype:a};return L.runKernel(yu,{},n)}function RR(e,t,a){let n=R(e,"x","clipByValue");if($(t<=a,()=>`Error in clip: min (${t}) must be less than or equal to max (${a}).`),t===a)return ir(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return L.runKernel(ss,r,s)}var pb=z({clipByValue_:RR});function ER(e){return lt(e,0)}var cb=z({concat1d_:ER});function MR(e,t){return lt(e,t)}var Wu=z({concat2d_:MR});function _R(e,t){return lt(e,t)}var hb=z({concat3d_:_R});function PR(e,t){return lt(e,t)}var mb=z({concat4d_:PR});function $R(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]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Rn("conv2d",n,i);let c=r==="NHWC"?u.shape[3]:u.shape[1];$(c===l.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${l.shape[2]}.`),$(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),$(Ks(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),$(Ks(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(Ai,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Bp=z({conv2d_:$R});function FR(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]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Rn("conv1d",n,i),$(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),$(Nr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),$(Ks(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),$(Ks(a),()=>"Error in conv1D: Stride should be larger than 0."),$(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 fb=z({conv1d_:FR});function DR(e,t,a,n,r,s="NHWC",i){$(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]]),$(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),$(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),$(a.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${a.rank}`);let p=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];$(p===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${a.shape[2]}.`),$(c===a.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${a.shape[3]}.`),Rn("conv2dDerInput",r,i);let d={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(bi,d,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var gb=z({conv2DBackpropInput_:DR});function OR(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return gb(a,i,o,n,r,"NHWC",s)}var yb=z({conv2dTranspose_:OR});function zR(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]])),$(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),$(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),$(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),$(Nr(a,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),$(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`),$(Ks(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),$(Ks(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(vi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var xb=z({conv3d_:zR});function LR(e,t,a,n,r){$(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];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),$(a.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${a.rank}`),$(l===a.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${a.shape[3]}.`),$(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(wi,p,c);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var WR=z({conv3DBackpropInput_:LR});function BR(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return WR(a,s,i,n,r)}var Ab=z({conv3dTranspose_:BR});function VR(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(ki,t)}var bb=z({cos_:VR});function UR(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Ii,t)}var vb=z({cosh_:UR});function GR(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Si,r,s)}var wb=z({cumprod_:GR});function HR(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ci,r,s)}var kb=z({cumsum_:HR});function jR(e,t,a,n=!1){let r=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");$(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),$(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),$(a>=0,()=>`size must be non-negative, but got ${a}.`),$(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(hu,i,o)}var Ib=z({denseBincount_:jR});function qR(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];$(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),$(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying +`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":m),d}function kd(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||Z1(t,this.size),this.strides=nu(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;ndh(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=>dh(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 Fl.print(this,e)}clone(){return this.throwIfDisposed(),Fl.clone(this)}toString(e=!1){let t=this.dataSync();return qT(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Fl.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(gt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function MA(){return eg("Tensor",()=>gt)}MA();var Bd=class extends gt{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(Bd,Symbol.hasInstance,{value:e=>e instanceof gt&&e.assign!=null&&e.assign instanceof Function});var PA={};Ze(PA,{assertTypesMatch:()=>FA,getTensorsInContainer:()=>ag,isTensorInList:()=>eN,makeTypesMatch:()=>Rt});var a1;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(a1||(a1={}));var n1;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(n1||(n1={}));var r1;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(r1||(r1={}));var s1;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(s1||(s1={}));var i1;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(i1||(i1={}));var QT={float32:s1,int32:n1,bool:r1,complex64:i1};function da(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return QT[e][t]}function Mp(e){return da(e,"int32")}function _A(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function $A(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=da(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function FA(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function eN(e,t){return t.some(a=>a.id===e.id)}function ag(e){let t=[];return DA(e,t,new Set),t}function DA(e,t,a){if(e==null)return;if(e instanceof gt){t.push(e);return}if(!tN(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),DA(s,t,a))}}function tN(e){return Array.isArray(e)||typeof e=="object"}function j2(e){return e.kernelName!=null}var Xx=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()}},ng=class o1{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Xx}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){Zn(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 au)&&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 o1.nextTensorId++}nextVariableId(){return o1.nextVariableId++}clone(t){let a=L.runKernel(Hi,{x:t}),n={x:t},r=i=>({x:()=>{let o="float32",l={x:i},u={dtype:o};return L.runKernel(xi,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,Ld(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=j2(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(j2(t)){let{kernelName:m,inputs:f,attrs:g}=t;this.backendName==null&&this.backend;let y=Ld(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=j2(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=e1(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=>Ep(l)));let i=r.write(s,a,n),o=new gt(a,n,i,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let l=this.state.tensorInfo.get(i),u=bA(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 gt(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 Bd(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*lh(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 Bd||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*lh(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=e1(t);l!=null&&(r=l.gradFunc),r!=null&&(o.gradient=u=>(u=u.map((p,c)=>{if(p==null){let d=n[c],h=Rh(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=ag(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 gt,()=>"The result y returned by f() must be a tensor.");let i=HT(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?aN(s.shape):n,jT(o,i,u=>this.tidy(u),nN);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 gt),()=>"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 gt,()=>"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 gt),()=>"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=Wd(),n=await this.backend.time(t);return n.wallMs=Wd()-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 Xx;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}};ng.nextTensorId=0;ng.nextVariableId=0;function aN(e){let t=J1(vt(e),"float32");return L.makeTensor(t,e,"float32")}function OA(){let e=SA();if(e._tfengine==null){let t=new IA(e);e._tfengine=new ng(t)}return vT(e._tfengine.ENV),YT(()=>e._tfengine),e._tfengine}var L=OA();function nN(e,t){let a={a:e,b:t};return L.runKernel(is,a)}var Pp={};Ze(Pp,{isBrowser:()=>zA,isMobile:()=>iN,mockIsMobile:()=>sN});function rN(){return typeof navigator!="undefined"&&navigator!=null}var l1;function sN(e){l1=e}function iN(e){if(l1!==void 0)return l1;if(e||rN()){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 zA(){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",()=>zA());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 Jn(e,t){let a=e;if(Jt(e))return t==="string"?[]:[e.length];if(_A(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if($A(e))return[e.buffer.size/(t==null?4:lh(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")&&LA(e,n,[]),n}function LA(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),Kx(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=Jn(e,r);!Jt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?$h(e,r):Qr(e,[],!0);return L.makeTensor(i,s,r)}function Vd(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 rg="__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+rg;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return Eh(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 oN(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(up,r)}var Sr=z({complex_:oN});function ds(e,t,a,n){if(n==null)n=ip(e);else if(n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if($A(e)||_A(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){tn(t);let r=vt(t),s=vt(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"?$h(e,n):Qr(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=Jn(e,a);return ds(e,t,n,a)}var u1={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Tr=class WA{static join(t){return new WA(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=lN(this.shards,a);return n===-1?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function lN(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}var ph=4;async function uN(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)+ph*d.length,m=new Uint8Array(h),f=0;for(let g=0;g{if(t+=s.byteLength,a.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var sg=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Yx(e){return sg?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function pN(e){if(sg)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 fN(){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 gN(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function yN(){let e=mN(),t=fN(),a=gN();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 fn=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}},xN=e=>fn.registerSaveRouter(e),AN=e=>fn.registerLoadRouter(e),bN=e=>fn.getSaveHandlers(e),vN=(e,t)=>fn.getLoadHandlers(e,t),d1="tensorflowjs",p1=1,Hs="models_store",Gr="model_info_store";function HA(){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 c1(e){let t=e.result;t.createObjectStore(Hs,{keyPath:"modelPath"}),t.createObjectStore(Gr,{keyPath:"modelPath"})}var Xs=class{constructor(e){if(this.indexedDB=HA(),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(d1,p1);r.onupgradeneeded=()=>c1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(Hs,"readonly"),o=i.objectStore(Hs).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=_p(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(Hs,"readwrite");let c=p.objectStore(Hs),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)})}};Xs.URL_SCHEME="indexeddb://";var jA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Xs.URL_SCHEME)?wN(e.slice(Xs.URL_SCHEME.length)):null;fn.registerSaveRouter(jA);fn.registerLoadRouter(jA);function wN(e){return new Xs(e)}function kN(e){return e.startsWith(Xs.URL_SCHEME)?e.slice(Xs.URL_SCHEME.length):e}var IN=class{constructor(){this.indexedDB=HA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(d1,p1);a.onupgradeneeded=()=>c1(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=kN(e),new Promise((t,a)=>{let n=this.indexedDB.open(d1,p1);n.onupgradeneeded=()=>c1(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(Hs,"readwrite");let c=l.objectStore(Hs).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="/",Dl="tensorflowjs_models",qA="info",SN="model_topology",CN="weight_specs",TN="weight_data",NN="model_metadata";function XA(e){return{info:[Dl,e,qA].join(vr),topology:[Dl,e,SN].join(vr),weightSpecs:[Dl,e,CN].join(vr),weightData:[Dl,e,TN].join(vr),modelMetadata:[Dl,e,NN].join(vr)}}function KA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function RN(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 EN(e){return e.startsWith(Ks.URL_SCHEME)?e.slice(Ks.URL_SCHEME.length):e}var Ks=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=XA(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=_p(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,pN(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 KA(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}};Ks.URL_SCHEME="localstorage://";var YA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ks.URL_SCHEME)?MN(e.slice(Ks.URL_SCHEME.length)):null;fn.registerSaveRouter(YA);fn.registerLoadRouter(YA);function MN(e){return new Ks(e)}var PN=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=Dl+vr,a=vr+qA;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(Ll)&&(t=t.slice(0,t.indexOf(Ll))),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 Qc(e){if(e.indexOf(Ll)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${es.getSchemes().join(",")}`);return{scheme:e.split(Ll)[0],path:e.split(Ll)[1]}}async function ZA(e,t,a=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=fn.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=fn.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=Qc(e).scheme,l=Qc(e).path,u=o===Qc(e).scheme,p=await r.load();a&&u&&await es.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await es.getManager(o).removeModel(l),c.modelArtifactsInfo}async function _N(){let e=es.getSchemes(),t={};for(let a of e){let n=await es.getManager(a).listModels();for(let r in n){let s=a+Ll+r;t[s]=n[r]}}return t}async function $N(e){let t=Qc(e);return es.getManager(t.scheme).removeModel(t.path)}async function FN(e,t){return ZA(e,t,!1)}async function DN(e,t){return ZA(e,t,!0)}var ON=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 TA(e)}};if(B().get("IS_BROWSER")){B().setPlatform("browser",new ON);try{es.registerManager(Ks.URL_SCHEME,new PN)}catch(e){}try{es.registerManager(Xs.URL_SCHEME,new IN)}catch(e){}}var zN={importFetch:()=>WC()},q2,LN=class{constructor(){this.util=BC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return B().global.fetch!=null?B().global.fetch(e,t):(q2==null&&(q2=zN.importFetch()),q2(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 LN);function $e(e,t="float32",a){return t=t||"float32",tn(e),new Vt(e,t,a)}function WN(e,t){let a=R(e,"x","cast");if(!AA(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(xi,n,r)}var Ue=z({cast_:WN});function BN(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(Hi,t)}var Ia=z({clone_:BN});function og(e,t=!1){console.log(e.toString(t))}OA();var VN={buffer:$e,cast:Ue,clone:Ia,print:og};ZT(VN);function lg(){B().set("PROD",!0)}function UN(){B().set("DEBUG",!0)}function GN(){B().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function ug(e){B().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}JT(ug);function HN(){L.disposeVariables()}function It(){return L}function jN(){return L.memory()}function qN(e){return L.profile(e)}function De(e,t){return L.tidy(e,t)}function J(e){ag(e).forEach(t=>t.dispose())}function zn(e){return L.keep(e)}function XN(e){return L.time(e)}function $p(e){return L.setBackend(e)}function Fp(){return L.ready()}function ca(){return L.backendName}function KN(e){L.removeBackend(e)}function dg(e){return L.findBackend(e)}function YN(e){return L.findBackendFactory(e)}function Qo(e,t,a=1){return L.registerBackend(e,t,a)}function nr(){return L.backend}function ZN(e,t){B().setPlatform(e,t)}function JN(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(is,r)}var we=z({add_:JN});function QN(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(Wi,r)}var Dp=z({floorDiv_:QN});function eR(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 Dp(a,n);let r={a,b:n},s={};return L.runKernel(Pi,r,s)}var ve=z({div_:eR});function tR(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(fo,r)}var te=z({mul_:tR});function aR(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return L.runKernel(dp,a)}else{let a={x:t};return L.runKernel(ru,a)}}var Ya=z({abs_:aR});function nR(e){let t={x:R(e,"x","acos")};return L.runKernel(si,t)}var JA=z({acos_:nR});function rR(e){let t={x:R(e,"x","acosh")};return L.runKernel(ii,t)}var QA=z({acosh_:rR});function sR(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(oi,n)}var Fh=z({addN_:sR});function iR(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(li,n,r)}var eb=z({all_:iR});function oR(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(ui,n,r)}var tb=z({any_:oR});function lR(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(su,a,n)}var rr=z({argMax_:lR});function uR(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(iu,a,n)}var ab=z({argMin_:uR});function dR(e){let t={x:R(e,"x","asin")};return L.runKernel(di,t)}var nb=z({asin_:dR});function pR(e){let t={x:R(e,"x","asinh")};return L.runKernel(pi,t)}var rb=z({asinh_:pR});function cR(e){let t={x:R(e,"x","atan")};return L.runKernel(ci,t)}var sb=z({atan_:cR});function hR(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(mi,r)}var ib=z({atan2_:hR});function mR(e){let t={x:R(e,"x","atanh")};return L.runKernel(hi,t)}var ob=z({atanh_:mR});function fR(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=db(r);return Op(e,o,a,s,n,null,null,l)}function lb(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Ud(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 Op(e,u,a,n,r,s,!1,i)}function gR(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=h1(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 ub(e,p,a,n,r,!1,c,s)}function Op(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]=Ud(a),[y,x]=Ud(n),A=Wl(d,y),b=Wl(h,x),{padInfo:w,outHeight:I,outWidth:T}=AR(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 ub(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]=h1(a),[b,w,I]=h1(n),T=Wl(h,b),N=Wl(m,w),M=Wl(f,I),{padInfo:P,outDepth:E,outHeight:S,outWidth:_}=bR(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:P,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 yR(e,t,a,n,r){n==null&&(n=pg(e,t,a));let s=e[0],i=e[1],o=Gd((s-t+2*n)/a+1,r),l=Gd((i-t+2*n)/a+1,r);return[o,l]}function xR(e,t,a,n,r,s){r==null&&(r=pg(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]=Gd((e[o]-t[o]+2*r)/n[o]+1,s));return i}function pg(e,t,a,n=1){let r=Wl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Ud(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function h1(e){return typeof e=="number"?[e,e,e]:e}function Wl(e,t){return t<=1?e:e+(e-1)*(t-1)}function AR(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=yR([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=Gd((t-s+d+h)/n+1,o),c=Gd((a-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:c}}function bR(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=xR([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 Gd(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 Hd(e){let[t,a,n]=Ud(e);return t===1&&a===1&&n===1}function Nr(e,t){return Hd(e)||Hd(t)}function Ys(e){return Ud(e).every(t=>t>0)}function db(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(Ul(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(Ul(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 vR(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Tu,a,n)}var Q=z({reshape_:vR});function wR(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(fi,u,p);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var cg=z({avgPool_:wR});function kR(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(ou,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 pb=z({avgPool3d_:kR});function IR(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let a=Vd(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(pu,n,r)}var lt=z({concat_:IR});function SR(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(gi,i,o)}var pt=z({matMul_:SR});function CR(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(Lo,t)}var za=z({sigmoid_:CR});function TR(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(Mu,r,s)}var Fe=z({slice_:TR});function NR(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(Ko,t)}var ch=z({tanh_:NR});function RR(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),ch(A)),te(p,za(we(i,b)))),T=te(ch(I),za(w));return[I,T]}var cb=z({basicLSTMCell_:RR});function ER(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(lu,s,i)}var hg=z({batchToSpaceND_:ER});function MR(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 PR(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:MR(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=L.runKernel(Bi,c,d);return Q(h,i.shape)}var zp=z({batchNorm_:PR});function _R(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}.`),zp(i,o,l,p,u,s)}var hb=z({batchNorm2d_:_R});function $R(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}.`),zp(i,o,l,p,u,s)}var mb=z({batchNorm3d_:$R});function FR(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}.`),zp(i,o,l,p,u,s)}var fb=z({batchNorm4d_:FR});function DR(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(yi,s,i)}var mg=z({bincount_:DR});function OR(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(uu,r)}var gb=z({bitwiseAnd_:OR});function zR(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(du,r)}var yb=z({broadcastArgs_:zR});function LR(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(tn(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(ls,i,o)}var Bl=z({broadcastTo_:LR});function WR(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(Ai,t)}var xb=z({ceil_:WR});function sr(e,t,a){tn(e),a=a||ip(t);let n={shape:e,value:t,dtype:a};return L.runKernel(yu,{},n)}function BR(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(os,r,s)}var Ab=z({clipByValue_:BR});function VR(e){return lt(e,0)}var bb=z({concat1d_:VR});function UR(e,t){return lt(e,t)}var Wu=z({concat2d_:UR});function GR(e,t){return lt(e,t)}var vb=z({concat3d_:GR});function HR(e,t){return lt(e,t)}var wb=z({concat4d_:HR});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(Ys(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),F(Ys(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(bi,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Lp=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(Ys(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),F(Ys(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=Lp(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 kb=z({conv1d_:qR});function XR(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(vi,d,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Ib=z({conv2DBackpropInput_:XR});function KR(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Ib(a,i,o,n,r,"NHWC",s)}var Sb=z({conv2dTranspose_:KR});function YR(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(Ys(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),F(Ys(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(wi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Cb=z({conv3d_:YR});function ZR(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(ki,p,c);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var JR=z({conv3DBackpropInput_:ZR});function QR(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return JR(a,s,i,n,r)}var Tb=z({conv3dTranspose_:QR});function eE(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(Ii,t)}var Nb=z({cos_:eE});function tE(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Si,t)}var Rb=z({cosh_:tE});function aE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ci,r,s)}var Eb=z({cumprod_:aE});function nE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ti,r,s)}var Mb=z({cumsum_:nE});function rE(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(hu,i,o)}var Pb=z({denseBincount_:rE});function sE(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}`),$(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying + ${n.shape}`),F(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape - ${n.shape}`),$(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(Ni,o,l)}var Sb=z({depthToSpace_:qR});function XR(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]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(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];$(c===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${l.shape[2]}.`),Rn("depthwiseConv2d",n,i);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(Ri,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Dh=z({depthwiseConv2d_:XR});function KR(e){let t={x:R(e,"x","diag")};return L.runKernel(mu,t)}var Cb=z({diag_:KR});function YR(e,t,a,n,r=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");$(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),$(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),$(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),$(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(Ei,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Tb=z({dilation2d_:YR}),Qo={};Ze(Qo,{assertAndGetBroadcastShape:()=>Gt,getBroadcastDims:()=>Nb,getReductionAxes:()=>hg});function Nb(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function hg(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function Gt(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($(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 Eb=z({dot_:tE});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 Ls=z({einsum_:aE});function nE(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(_i,t)}var fg=z({elu_:nE});function rE(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!uA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var Mb=z({ensureShape_:rE});function sE(e){let t=R(e,"x","erf");$(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(Pi,a)}var _b=z({erf_:sE});function gg(e,t){for(let a=0;ae[s]);return[a,r]}function Vp(e,t){let a=t.map(n=>1);return Pb(e,a,t)}function oE(e,t,a){$(gg(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function lE(e,t){if(gg(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function uE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function dE(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(gu,n,r)}var Bt=z({expandDims_:bE});function vE(e){let t={x:R(e,"x","expm1")};return L.runKernel(Di,t)}var Db=z({expm1_:vE});function wE(e,t){let a=R(e,"x","tile","string_or_numeric");$(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(is,n,r)}var qr=z({tile_:wE});function kE(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}.`),$(Bl(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(no,l,u);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Bb=z({localResponseNormalization_:FE});function DE(e){let t={x:R(e,"x","log","float32")};return L.runKernel(Ji,t)}var jl=z({log_:DE});function OE(e){let t={x:R(e,"x","log1p")};return L.runKernel(Qi,t)}var wg=z({log1p_:OE});function zE(e){return $(Xr(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&&Na(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),zh(i),i[0]})}}function LE(e){return $(Xr(e),()=>"The f passed in grads(f) must be a function"),(t,a)=>{$(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&&Na(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),zh(i),i})}}function WE(e){return $(Xr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{$(t instanceof mt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),$(a==null||a instanceof mt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return zh(n),{grad:n[0],value:r}}}function BE(e){return $(Xr(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{$(Array.isArray(t)&&t.every(r=>r instanceof mt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),$(a==null||a instanceof mt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=L.gradients(()=>e(...t),t,a);return a!=null&&Na(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),zh(n.grads),n}}function Vb(e,t){$(Xr(e),()=>"The f passed in variableGrads(f) must be a function"),$(t==null||Array.isArray(t)&&t.every(u=>u instanceof Vd),()=>"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),$(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);$(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()."),$(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 er(e){return L.customGrad(e)}function zh(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 VE(e){let t={x:R(e,"x","neg")};return L.runKernel(wu,t)}var Ln=z({neg_:VE});function UE(e){let t={x:R(e,"x","softplus")};return L.runKernel(Lo,t)}var kg=z({softplus_:UE});function GE(e){let t=R(e,"x","logSigmoid");return er(a=>({value:Ln(kg(Ln(a))),gradFunc:n=>te(n,Wa(Ln(a)))}))(t)}var Ub=z({logSigmoid_:GE});function HE(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(jo,r)}var xe=z({sub_:HE});function jE(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 er((n,r)=>{let s=ga(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),jl(ot(es(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=es(p);return xe(l,te(ot(l,t,c),d))}}})(a)}var Gb=z({logSoftmax_:jE});function qE(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=op(t,n.shape),s=ga(n,r,!0),i=xe(n,s),o=es(i),l=ot(o,r),u=jl(l),p=we(Q(s,u.shape),u);if(a){let c=Vp(p.shape,r);return Q(p,c)}return p}var Ig=z({logSumExp_:qE});function XE(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");Gt(a.shape,n.shape);let r={a,b:n};return L.runKernel(eo,r)}var Xd=z({logicalAnd_:XE});function KE(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(to,t)}var Sg=z({logicalNot_:KE});function YE(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");Gt(a.shape,n.shape);let r={a,b:n};return L.runKernel(ao,r)}var Cg=z({logicalOr_:YE});function ZE(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Gt(a.shape,n.shape),Xd(Cg(e,t),Sg(Xd(e,t)))}var Hb=z({logicalXor_:ZE}),qc=2147483648;function JE(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(vt(l.shape)>=qc)throw new Error(`values tensor size must less than ${qc}`);if(o.shape[1]>=qc)throw new Error(`trailing dim_size must less than ${qc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return L.runKernel(Po,u,p)}var Lh=z({searchSorted_:JE});function jb(e,t){return Lh(e,t,"left")}function QE(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]])),$(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),$(Nr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Rn("maxPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(io,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Tg=z({maxPool_:QE});function eM(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]])),$(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),$(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Rn("maxPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(bu,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var qb=z({maxPool3d_:eM});function tM(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(vu,s,i);return{result:o[0],indexes:o[1]}}var Xb=z({maxPoolWithArgmax_:tM});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")),Gt(a.shape,n.shape);let r={a,b:n};return L.runKernel(so,r)}var Ng=z({maximum_:aM});function nM(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(oo,n,r)}var Kd=z({mean_:nM});function yn(e,t="float32"){if(nn(e),t==="complex64"){let n=yn(e,"float32"),r=yn(e,"float32");return Cr(n,r)}let a=Rh(vt(e),t);return L.makeTensor(a,e,t)}function Gr(e,t="float32"){if(nn(e),t==="complex64"){let n=Gr(e,"float32"),r=yn(e,"float32");return Cr(n,r)}let a=Z1(vt(e),t);return L.makeTensor(a,e,t)}function Kb(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 mt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof mt?t.dtype:"float32"),s=vt(n.shape),i=vt(r.shape);return a==="xy"?(n=Q(n,[1,-1]),r=Q(r,[-1,1]),[pt(Gr([i,1],n.dtype),n),pt(r,Gr([1,s],r.dtype))]):(n=Q(n,[-1,1]),r=Q(r,[1,-1]),[pt(n,Gr([1,i],n.dtype)),pt(Gr([s,1],r.dtype),r)])}function rM(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")),Gt(a.shape,n.shape);let r={a,b:n};return L.runKernel(uo,r)}var Yd=z({minimum_:rM});function sM(e,t,a){$(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");$(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."),$(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(po,i,s)}var Yb=z({mirrorPad_:sM});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(co,r)}var Bu=z({mod_:iM});function oM(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=Nn(xe(Ue(e,"float32"),Q(r,s))),o=Kd(i,n,a);return{mean:r,variance:o}}var Zb=z({moments_:oM});function lM(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(ho,o,l);return i===1?Q(u,[u.size]):u}var Qb=z({multinomial_:uM});function dM(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=Rt(a,n),Gt(a.shape,n.shape);let r={a,b:n};return L.runKernel(fo,r)}var Rg=z({notEqual_:dM});function pM(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(xo,s,i)}var fh=z({oneHot_:pM});function cM(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Iu,t)}var e4=z({onesLike_:cM});function hM(e,t){let a=R(e,"v1","outerProduct"),n=R(t,"v2","outerProduct");$(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 t4=z({outerProduct_:hM});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(Ao,s,r)}var or=z({pad_:mM});function fM(e,t,a=0){return $(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),or(e,[t],a)}var a4=z({pad1d_:fM});function gM(e,t,a=0){return $(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),or(e,t,a)}var n4=z({pad2d_:gM});function yM(e,t,a=0){return $(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."),or(e,t,a)}var r4=z({pad3d_:yM});function xM(e,t,a=0){return $(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."),or(e,t,a)}var s4=z({pad4d_:xM});function AM(e,t,a){let n=R(e,"x","spaceToBatchND");$(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),$(a.length===t.length,()=>`paddings.shape[0] ${a.length} must be equal to [blockShape] ${t.length}`),$(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 Eg=z({spaceToBatchND_:AM});function bM(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]])),$(Nr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=eb(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]=vM([p.inHeight,p.inWidth],c,d),g=h?n:"valid",y=h?l:Eg(l,c,m),x=(a==="avg"?()=>dg(y,t,s,g,i):()=>Tg(y,t,s,g,i))(),A=h?x:pg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function vM(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 i4=z({pool_:bM});function kM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(vo,r)}var Mg=z({prelu_:kM});function IM(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(wo,r,s)}var o4=z({prod_:IM});function SM(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(Mh,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var l4=z({raggedGather_:SM});function CM(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(_h,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var u4=z({raggedRange_:CM});function TM(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(Ph,u,p)}var d4=z({raggedTensorToTensor_:TM});function NM(e,t,a){nn(e);let n=vt(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;sh4,createVideoElement:()=>DM,encodeStrings:()=>m4,expectArrayBuffersEqual:()=>FM,expectArraysClose:()=>EM,expectArraysEqual:()=>_M,expectNumbersClose:()=>PM,expectPromiseToFail:()=>MM,expectValuesInRange:()=>$M,play:()=>OM,testEpsilon:()=>Pg});var RM=.001,h4=.1;function EM(e,t,a){return a==null&&(a=Pg()),m1(e,t,(n,r)=>$g(n,r,a))}function Pg(){return L.backend.floatPrecision()===32?RM:h4}function m1(e,t,a){let n=!0;if((Qt(e)||Qt(t))&&(n=!1),Qt(e)&&Qt(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=Jn(e),o=Jn(t);if(!Tr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=Qt(e)?e:Jr(e),s=Qt(t)?t:Jr(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(Ri,o,l)}var _b=z({depthToSpace_:sE});function iE(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(Ei,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Dh=z({depthwiseConv2d_:iE});function oE(e){let t={x:R(e,"x","diag")};return L.runKernel(mu,t)}var $b=z({diag_:oE});function lE(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(Mi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Fb=z({dilation2d_:lE}),el={};Ze(el,{assertAndGetBroadcastShape:()=>Ut,getBroadcastDims:()=>Db,getReductionAxes:()=>fg});function Db(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function fg(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 zb=z({dot_:hE});function mE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return L.runKernel(fp,a,n)}var Bs=z({einsum_:mE});function fE(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(_i,t)}var yg=z({elu_:fE});function gE(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!fA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var Lb=z({ensureShape_:gE});function yE(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($i,a)}var Wb=z({erf_:yE});function xg(e,t){for(let a=0;ae[s]);return[a,r]}function Wp(e,t){let a=t.map(n=>1);return Bb(e,a,t)}function AE(e,t,a){F(xg(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function bE(e,t){if(xg(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function vE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function wE(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(gu,n,r)}var Wt=z({expandDims_:PE});function _E(e){let t={x:R(e,"x","expm1")};return L.runKernel(Oi,t)}var Gb=z({expm1_:_E});function $E(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(ls,n,r)}var Xr=z({tile_:$E});function FE(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(Ul(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(ro,l,u);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Kb=z({localResponseNormalization_:qE});function XE(e){let t={x:R(e,"x","log","float32")};return L.runKernel(Qi,t)}var Xl=z({log_:XE});function KE(e){let t={x:R(e,"x","log1p")};return L.runKernel(eo,t)}var Ig=z({log1p_:KE});function YE(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)"),zh(i),i[0]})}}function ZE(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=Vd(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,...])"),zh(i),i})}}function JE(e){return F(Kr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{F(t instanceof gt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(a==null||a instanceof gt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return zh(n),{grad:n[0],value:r}}}function QE(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 gt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(a==null||a instanceof gt,()=>"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,...])"),zh(n.grads),n}}function Yb(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 Bd),()=>"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 er(e){return L.customGrad(e)}function zh(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 eM(e){let t={x:R(e,"x","neg")};return L.runKernel(wu,t)}var Ln=z({neg_:eM});function tM(e){let t={x:R(e,"x","softplus")};return L.runKernel(Wo,t)}var Sg=z({softplus_:tM});function aM(e){let t=R(e,"x","logSigmoid");return er(a=>({value:Ln(Sg(Ln(a))),gradFunc:n=>te(n,za(Ln(a)))}))(t)}var Zb=z({logSigmoid_:aM});function nM(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(qo,r)}var xe=z({sub_:nM});function rM(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 er((n,r)=>{let s=fa(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),Xl(ot(as(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=as(p);return xe(l,te(ot(l,t,c),d))}}})(a)}var Jb=z({logSoftmax_:rM});function sM(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=sp(t,n.shape),s=fa(n,r,!0),i=xe(n,s),o=as(i),l=ot(o,r),u=Xl(l),p=we(Q(s,u.shape),u);if(a){let c=Wp(p.shape,r);return Q(p,c)}return p}var Cg=z({logSumExp_:sM});function iM(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(to,r)}var jd=z({logicalAnd_:iM});function oM(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(ao,t)}var Tg=z({logicalNot_:oM});function lM(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(no,r)}var Ng=z({logicalOr_:lM});function uM(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Ut(a.shape,n.shape),jd(Ng(e,t),Tg(jd(e,t)))}var Qb=z({logicalXor_:uM}),jc=2147483648;function dM(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(vt(l.shape)>=jc)throw new Error(`values tensor size must less than ${jc}`);if(o.shape[1]>=jc)throw new Error(`trailing dim_size must less than ${jc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return L.runKernel($o,u,p)}var Lh=z({searchSorted_:dM});function e4(e,t){return Lh(e,t,"left")}function pM(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(oo,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Rg=z({maxPool_:pM});function cM(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(bu,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var t4=z({maxPool3d_:cM});function hM(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(vu,s,i);return{result:o[0],indexes:o[1]}}var a4=z({maxPoolWithArgmax_:hM});function mM(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(io,r)}var Eg=z({maximum_:mM});function fM(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(lo,n,r)}var qd=z({mean_:fM});function gn(e,t="float32"){if(tn(e),t==="complex64"){let n=gn(e,"float32"),r=gn(e,"float32");return Sr(n,r)}let a=Rh(vt(e),t);return L.makeTensor(a,e,t)}function Hr(e,t="float32"){if(tn(e),t==="complex64"){let n=Hr(e,"float32"),r=gn(e,"float32");return Sr(n,r)}let a=J1(vt(e),t);return L.makeTensor(a,e,t)}function n4(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 gt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof gt?t.dtype:"float32"),s=vt(n.shape),i=vt(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 gM(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(po,r)}var Xd=z({minimum_:gM});function yM(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(co,i,s)}var r4=z({mirrorPad_:yM});function xM(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(ho,r)}var Bu=z({mod_:xM});function AM(e,t=null,a=!1){e=R(e,"x","moments");let n=sp(t,e.shape),r=qd(e,n,a),s=r.shape;a||(s=Wp(r.shape,n));let i=Tn(xe(Ue(e,"float32"),Q(r,s))),o=qd(i,n,a);return{mean:r,variance:o}}var s4=z({moments_:AM});function bM(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=Vd(a,"c","multiRNNCell"),i=Vd(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(mo,o,l);return i===1?Q(u,[u.size]):u}var o4=z({multinomial_:vM});function wM(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(go,r)}var Mg=z({notEqual_:wM});function kM(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(Ao,s,i)}var mh=z({oneHot_:kM});function IM(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Iu,t)}var l4=z({onesLike_:IM});function SM(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 u4=z({outerProduct_:SM});function CM(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(bo,s,r)}var ir=z({pad_:CM});function TM(e,t,a=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ir(e,[t],a)}var d4=z({pad1d_:TM});function NM(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 p4=z({pad2d_:NM});function RM(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 c4=z({pad3d_:RM});function EM(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 h4=z({pad4d_:EM});function MM(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(Pu,r,s)}var Pg=z({spaceToBatchND_:MM});function PM(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=lb(l.shape,t,s,r,n),c=[p.dilationHeight,p.dilationWidth],d;n==="same"?d=$M([p.filterHeight,p.filterWidth],c):d=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[m,f]=_M([p.inHeight,p.inWidth],c,d),g=h?n:"valid",y=h?l:Pg(l,c,m),x=(a==="avg"?()=>cg(y,t,s,g,i):()=>Rg(y,t,s,g,i))(),A=h?x:hg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function _M(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 $M(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 m4=z({pool_:PM});function FM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(wo,r)}var _g=z({prelu_:FM});function DM(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(ko,r,s)}var f4=z({prod_:DM});function OM(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(Mh,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var g4=z({raggedGather_:OM});function zM(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 y4=z({raggedRange_:zM});function LM(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 x4=z({raggedTensorToTensor_:LM});function WM(e,t,a){tn(e);let n=vt(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;sv4,createVideoElement:()=>XM,encodeStrings:()=>w4,expectArrayBuffersEqual:()=>qM,expectArraysClose:()=>VM,expectArraysEqual:()=>GM,expectNumbersClose:()=>HM,expectPromiseToFail:()=>UM,expectValuesInRange:()=>jM,play:()=>KM,testEpsilon:()=>Fg});var BM=.001,v4=.1;function VM(e,t,a){return a==null&&(a=Fg()),m1(e,t,(n,r)=>Dg(n,r,a))}function Fg(){return L.backend.floatPrecision()===32?BM:v4}function m1(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=Jn(e),o=Jn(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 _M(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Vr(e)||Vr(e[0])||Vr(t)||Vr(t[0])?m1(e,a,(n,r)=>n==r):m1(e,t,(n,r)=>$g(n,r,0))}function PM(e,t,a){if(a==null&&(a=Pg()),!$g(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function $g(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function $M(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function FM(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 OM(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var Fg=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=_g.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}},zM=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=_g.alea(r.toString()),this.randn=new Fg(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=_g.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function WM(e,t,a=1,n="float32",r){if(nn(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new zM(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}.`),ts(t,0)}var A4=z({reverse1d_:YM});function ZM(e,t){let a=R(e,"x","reverse");return $(a.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${a.rank}.`),ts(a,t)}var b4=z({reverse2d_:ZM});function JM(e,t){let a=R(e,"x","reverse");return $(a.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${a.rank}.`),ts(a,t)}var v4=z({reverse3d_:JM});function QM(e,t){let a=R(e,"x","reverse");return $(a.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${a.rank}.`),ts(a,t)}var w4=z({reverse4d_:QM});function e_(e){let t={x:R(e,"x","round")};return L.runKernel(Ro,t)}var zg=z({round_:e_});function t_(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Eo,t)}var k4=z({rsqrt_:t_});function a_(e){let t={x:R(e,"x","selu")};return L.runKernel($o,t)}var I4=z({selu_:a_});function n_(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");$(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),$(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],h=l.shape[3];$(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=Dh(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 S4=z({separableConv2d_:n_});async function r_(e,t){let a=R(e,"x","setdiff1d"),n=R(t,"y","setdiff1d");$(a.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${a.dtype}) and y (${n.dtype}).`),$(a.rank===1,()=>`x should be 1D tensor, but got x (${a.shape}).`),$(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 E4=z({slice1d_:l_});function u_(e,t,a){let n=R(e,"x","slice2d");return $(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var M4=z({slice2d_:u_});function d_(e,t,a){let n=R(e,"x","slice3d");return $(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var qp=z({slice3d_:d_});function p_(e,t,a){let n=R(e,"x","slice4d");return $(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var Bh=z({slice4d_:p_});function c_(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(Vo,n,r)}var Vh=z({softmax_:c_});function h_(e){$(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 Uh=z({fft_:h_});function m_(e){$(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 f_(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(Xl(e),[a,t]),i=Q(Hp(e),[a,t]),o=ts(Fe(s,[0,1],[a,t-2]),1),l=te(ts(Fe(i,[0,1],[a,t-2]),1),Ge(-1)),u=lt([s,o],1),p=lt([i,l],1),c=Q(Cr(u,p),[r[0],r[1]]);n=Zd(c)}if(n=Xl(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 Lg=z({irfft_:f_});function g_(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(Pu,n,r)}var Ca=z({split_:g_});function y_(e,t){$(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=en(r),i=Q(Cr(r,s),[n,a]),o=Uh(i),l=Math.floor(a/2)+1,u=Xl(o),p=Hp(o),c=Ca(u,[l,a-l],u.shape.length-1),d=Ca(p,[l,a-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,Q(Cr(c[0],d[0]),h)}var Gh=z({rfft_:y_});function x_(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=Rt(a,n),Gt(a.shape,n.shape);let r={a,b:n},s={};return L.runKernel(Go,r,s)}var Wg=z({squaredDifference_:x_});function A_(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,dA(a.shape,t).newShape)}var Oe=z({squeeze_:A_});function b_(e,t=0){let a=Gd(e,"tensors","stack","string_or_numeric");$(a.length>=1,()=>"Pass at least one tensor to tf.stack"),a.length>0&&$(t<=a[0].rank,()=>"Axis must be <= rank of the tensor");let n=a,r={axis:t};return L.runKernel(Su,n,r)}var ca=z({stack_:b_});function v_(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(os,a,n)}var Bg=z({step_:v_});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(Ho,u,p)}var _4=z({stridedSlice_:w_});function k_(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(qo,t)}var P4=z({tan_:k_});function Vt(e,t){ni(e);let a=Jn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ls(e,null,a,t)}function Yn(e,t,a){if(ni(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Jn(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 ls(e,t,n,a)}function Vg(e,t,a){if(ni(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Jn(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 ls(e,t,n,a)}function $4(e,t,a){if(ni(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Jn(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 ls(e,t,n,a)}function F4(e,t,a){if(ni(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Jn(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 ls(e,t,n,a)}function D4(e,t,a){if(ni(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Jn(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,ls(e,t,n,a)}var Hh={};Ze(Hh,{calculateShapes:()=>O4,validateInput:()=>jh,validateUpdateShape:()=>Ug});function Ug(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(Ko,s,i);return{values:o,indices:l}}var L4=z({topk_:S_});function C_(e,t=0,a=1,n,r){if(nn(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Fg(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 B4=z({unique_:T_});function N_(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");$(Bl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(Ep,s,i)}var V4=z({unsortedSegmentSum_:N_});function R_(e,t=0){let a=R(e,"x","unstack","string_or_numeric");$(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(zu,n,r)}var Ra=z({unstack_:R_});function U4(e,t){return Lh(e,t,"right")}function G4(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function H4(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Na(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()),$(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{$(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=Xl(n),o=Hp(n);return i=L.runKernel(kr,{x:i},s),o=L.runKernel(kr,{x:o},s),a&&(o=Ln(o)),Cr(i,o)}):L.runKernel(kr,r,s)}var Ys=z({transpose_:__});function P_(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");NA(s,i),$(Tr(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){$(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");p=ve(p,xe(l,Hl(o,c)))}return we(s,p)}var q4=z({movingAverage_:P_});function $_(e,t,a){nn(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");jh(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(Mo,s,i)}var X4=z({scatterND_:$_});function F_(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 D_(e,t,a,n=0){nn(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);F_(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(Uo,o,l)}var K4=z({sparseToDense_:D_});function O_(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(Bi,n)}var Y4=z({gatherND_:O_});function z_(e,t){if(t==null)return e.shape.slice();if(Tr(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.`),$(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof mt?r.clone():r;let s=z_(r,a),i=1-t,o=ve(xg(we(Wh(s,0,1,"float32",n),i)),i);return te(r,o)}var Z4=z({dropout_:L_});function Hg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function qh(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}`),$(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}`),Na(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];$(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=pA("bool",l);for(let c=0;cg.value-f.value),p[c]=0;for(let f=0;fG_,depthwiseConv2d:()=>Y_,matMul:()=>J_});function B_(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]])),$(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),$(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),$(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];$(u===a[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${a[2]}.`),$(p===a[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${a[3]}).`),Rn("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 V_=z({conv2DBackpropFilter_:B_});function Xh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Bg(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Kh(e,t){let a=t,n=hg(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function Yh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return jp(e);if(t==="elu")return fg(e);if(t==="relu6")return Og(e);if(t==="prelu")return Mg(e,a);if(t==="leakyrelu")return vg(e,n);if(t==="sigmoid")return Wa(e);throw new Error(`Unknown fused activation ${t}.`)}var Zh=(e,t)=>!(e>0)||t==="linear";function U_({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",Zh(L.state.gradientDepth,l)===!1){$(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)),Yh(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]])),$(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),$(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),Rn("fused conv2d",n,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];$(d.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${d.shape[2]}.`),$(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"?Gt(g.outShape,y.shape):($(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),$(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let x;if(u!=null){let I=u.shape;if($(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)$(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{Gt(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)=>{$(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,M,P,E]=T,C=Xh(I,P,l);$(qd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let _=gb(M.shape,C,N,a,n),O=V_(M,C,N.shape,a,n),B=[_,O];if(E!=null){let F=Kh(E,C);B.push(F)}return B},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?er((I,T,N)=>{let M=L.runKernel(Yr,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):er((I,T,N,M)=>{let P=L.runKernel(Yr,b,w);return M([T,I,P,N]),m&&(P=Q(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:A}})(h,d,y)}var G_=z({fusedConv2d_:U_});function H_(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 j_=z({depthwiseConv2dNativeBackpropFilter_:H_});function q_(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 X_=z({depthwiseConv2dNativeBackpropInput_:q_});function K_({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(Zh(L.state.gradientDepth,l)===!1){let w=Dh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),Yh(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]])),$(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),$(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),$(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]),$(Nr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Rn("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),Gt(f.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let x=(w,I)=>{$(qd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,N,M,P]=I,E=Xh(w,M,l),C=X_(N.shape,E,T,a,n,s,i),_=j_(N,E,T.shape,a,n,s,i);if(P!=null){let O=Kh(g,E);return[C,_,O]}return[C,_]},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?er((w,I,T)=>{let N=L.runKernel(Zr,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):er((w,I,T,N)=>{let M=L.runKernel(Zr,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 Y_=z({fusedDepthwiseConv2d_:K_});function Z_({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Zh(L.state.gradientDepth,s)===!1){let P=pt(e,t,a,n);return r!=null&&(P=we(P,r)),Yh(P,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=vt(m),y=vt(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=Gt(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),Gt(x,w.shape));let I;i!=null&&(I=R(i,"prelu weights","fused matMul"));let T=(P,E)=>{let[C,_,O,B]=E,F=Xh(Q(P,O.shape),O,s),U,G;if(!a&&!n?(U=pt(F,_,!1,!0),G=pt(C,F,!0,!1)):!a&&n?(U=pt(F,_,!1,!1),G=pt(F,C,!0,!1)):a&&!n?(U=pt(_,F,!1,!0),G=pt(C,F,!1,!1)):(U=pt(_,F,!0,!0),G=pt(F,C,!0,!0)),r!=null){let q=Kh(B,F);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?er((P,E,C)=>{let _=L.runKernel(Kr,N,M);return C([P,E,_]),{value:Q(_,x),gradFunc:T}})(A,b):er((P,E,C,_)=>{let O=L.runKernel(Kr,N,M);return _([P,E,O,C]),{value:Q(O,x),gradFunc:T}})(A,b,w)}var J_=z({fusedMatMul_:Z_});function Q_(e){return qh(e,.54,.46)}var eP=z({hammingWindow_:Q_});function tP(e){return qh(e,.5,.5)}var Q4=z({hannWindow_:tP});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}.`),$(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),$(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),$(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),$(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),$(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(Ti,p,c)}var iP=z({cropAndResize_:sP});function oP(e){let t=R(e,"image","flipLeftRight","float32");$(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let a={image:t};return L.runKernel(Oi,a,{})}var lP=z({flipLeftRight_:oP});function uP(e){let t=R(e,"image","grayscaleToRGB"),a=t.rank-1,n=t.shape[a];$(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),$(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,qr(t,r)}var dP=z({grayscaleToRGB_:uP});function pP(e){let t=R(e,"image","RGBToGrayscale"),a=t.rank-1,n=t.shape[a];$(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),$(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=Vt([.2989,.587,.114]),o;switch(t.rank){case 2:o=Ls("ij,j->i",s,i);break;case 3:o=Ls("ijk,k->ij",s,i);break;case 4:o=Ls("ijkl,l->ijk",s,i);break;case 5:o=Ls("ijklm,m->ijkl",s,i);break;case 6:o=Ls("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Bt(o,-1),Ue(o,r)}var cP=z({rgbToGrayscale_:pP});function hP(e,t,a=0,n=.5){let r=R(e,"image","rotateWithOffset","float32");$(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(Zo,s,i)}var mP=z({rotateWithOffset_:hP});function Vu(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),$(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),$(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),$(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),$(t.rank===1,()=>"scores must be a 1D tensor"),$(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s}}function fP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Vu(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(go,{boxes:s,scores:i},l)}var gP=z({nonMaxSuppression_:fP});function yP(e,t,a){let n=xP(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function xP(e,t,a){return bP(e,t,a||AP)}function AP(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 t7(e,t,a,n,r){return qg(e,t,a,n,r,0)}function a7(e,t,a,n,r,s){return qg(e,t,a,n,r,0,!1,s,!0)}function n7(e,t,a,n,r,s){return qg(e,t,a,n,r,s,!0)}function qg(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(qx);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=vP(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&&yP(u,g,qx))}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 vP(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 qx(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function kP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Vu(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}=t7(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Vt(c,"int32")}var IP=kP;function SP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Vu(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(yo,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var CP=z({nonMaxSuppressionWithScore_:SP});async function TP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Vu(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}=n7(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Vt(d,"int32"),selectedScores:Vt(h)}}var NP=TP;function RP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Vu(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(ku,d,h);return{selectedIndices:m[0],validOutputs:m[1]}}var EP=z({nonMaxSuppressionPadded_:RP});async function MP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Vu(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}=a7(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Vt(m,"int32"),validOutputs:Ge(f,"int32")}}var _P=MP;function PP(e,t,a=!1,n=!1){let r=R(e,"images","resizeBilinear");$(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),$(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),$(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(Co,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var $P=z({resizeBilinear_:PP});function FP(e,t,a=!1,n=!1){let r=R(e,"images","resizeNearestNeighbor");$(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),$(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),$(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),$(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(So,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var DP=z({resizeNearestNeighbor_:FP});function OP(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(Vt([n]),255),p,c,d,h;if($(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),$(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]}.`),$(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),$(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,c,d]=Ca(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=cg(Ue(zg(h),"int32"),Ve([]),256);u=zP(f,l)}let m=a?Oh(h,u):Gp(h,u);return Ue(te(m,255),"int32")}function zP(e,t){let a=Vt([-1]),n=Vt([0]),r=Vt([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}.`),$(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"),$(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(Yo,l,u)}var BP=z({transform_:WP});function VP(e,t,a){let n=R(e,"a","bandPart");$(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"?($(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),$(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),o=R(t<0?s:t,"numLower","bandPart")):($(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),o=Ir(mh(t,0),s,Yd(t,s))),typeof a=="number"?($(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`),$(a<=i,()=>`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`),l=R(a<0?i:a,"numUpper","bandPart")):($(a.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),l=Ir(mh(a,0),i,Yd(a,i)));let u=Q(ql(0,s,1,"int32"),[-1,1]),p=ql(0,i,1,"int32"),c=xe(u,p),d=Xd(Oh(c,o),bg(c,Ln(l))),h=yn([s,i],n.dtype);return Q(ca(Ra(Q(n,[-1,s,i])).map(m=>Ir(d,m,h))),r)}var UP=z({bandPart_:VP});function GP(e){let t;if(Array.isArray(e)){t=!1,$(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=Ca(e,e.shape[0],0).map(r=>Oe(r,[0]));$(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 Xx(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Ra(Q(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,p]=Xx(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 Xx(e,t=!1){return L.tidy(()=>{$(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=yg(a),s=Sa(e),i=Yn([[1]],[1,1]),o=Sa(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=Ir(Gp(f,0),Yn([[-1]]),Yn([[1]])),y=xe(f,te(g,m)),x=ve(h,y);x.shape[0]===1?o=Sa(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=Ys(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=Ys(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 qP=z({qr_:jP}),ka;(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"})(ka||(ka={}));function XP(e,t,a=ka.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===ka.NONE)return s;if(a===ka.SUM)return ot(s);if(a===ka.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===ka.SUM_BY_NONZERO_WEIGHTS){if(r==null)return ve(ot(s),Ge(n.size));{let i=te(r,Gr(n.shape)),o=Ue(ot(Rg(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Rr=z({computeWeightedLoss_:XP});function KP(e,t,a,n=ka.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Na(r.shape,s.shape,"Error in absoluteDifference: ");let o=Ja(xe(r,s));return Rr(o,i,n)}var YP=z({absoluteDifference_:KP});function ZP(e,t,a,n,r=ka.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Na(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 JP=z({cosineDistance_:ZP});function QP(e,t,a,n=ka.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Na(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 e$=z({hingeLoss_:QP});function t$(e,t,a,n=1,r=ka.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Na(s.shape,i.shape,"Error in huberLoss: ");let l=Ge(n),u=Ja(xe(i,s)),p=Yd(u,l),c=xe(u,p),d=we(te(Ge(.5),Nn(p)),te(l,c));return Rr(d,o,r)}var a$=z({huberLoss_:t$});function n$(e,t,a,n=1e-7,r=ka.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Na(s.shape,i.shape,"Error in logLoss: ");let l=Ge(1),u=Ge(n),p=Ln(te(s,jl(we(i,u)))),c=te(xe(l,s),jl(we(xe(l,i),u))),d=xe(p,c);return Rr(d,o,r)}var r$=z({logLoss_:n$});function s$(e,t,a,n=ka.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Na(r.shape,s.shape,"Error in meanSquaredError: ");let o=Wg(r,s);return Rr(o,i,n)}var i$=z({meanSquaredError_:s$});function o$(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Na(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=jp(n),s=te(n,a),i=wg(es(Ln(Ja(n))));return we(xe(r,s),i)}function l$(e,t,a,n=0,r=ka.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")),Na(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=o$(s,i);return Rr(l,o,r)}var u$=z({sigmoidCrossEntropy_:l$});function d$(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 er((n,r,s)=>{let i=Ig(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"),es(d))),te(Q(u,h),xe(es(d),Ue(c,"float32")))]}}})(e,t)}function p$(e,t,a,n=0,r=ka.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")),Na(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=d$(s,i);return Rr(l,o,r)}var c$=z({softmaxCrossEntropy_:p$});function h$(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_:h$});function f$(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($u,i);return{outputIndices:o[0],outputShape:o[1]}}var g$=z({sparseReshape_:f$});function y$(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 UM(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function GM(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])?m1(e,a,(n,r)=>n==r):m1(e,t,(n,r)=>Dg(n,r,0))}function HM(e,t,a){if(a==null&&(a=Fg()),!Dg(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Dg(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 KM(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var Og=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=$g.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}},YM=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=$g.alea(r.toString()),this.randn=new Og(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=$g.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function JM(e,t,a=1,n="float32",r){if(tn(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new YM(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}.`),ns(t,0)}var T4=z({reverse1d_:lP});function uP(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}.`),ns(a,t)}var N4=z({reverse2d_:uP});function dP(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}.`),ns(a,t)}var R4=z({reverse3d_:dP});function pP(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}.`),ns(a,t)}var E4=z({reverse4d_:pP});function cP(e){let t={x:R(e,"x","round")};return L.runKernel(Eo,t)}var Wg=z({round_:cP});function hP(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Mo,t)}var M4=z({rsqrt_:hP});function mP(e){let t={x:R(e,"x","selu")};return L.runKernel(Fo,t)}var P4=z({selu_:mP});function fP(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=Dh(p,l,n,r,i,s),f=Lp(m,u,1,"valid",i);return c?Q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var _4=z({separableConv2d_:fP});async function gP(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 z4=z({slice1d_:bP});function vP(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 L4=z({slice2d_:vP});function wP(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 Hp=z({slice3d_:wP});function kP(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 Bh=z({slice4d_:kP});function IP(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(Uo,n,r)}var Vh=z({softmax_:IP});function SP(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(gp,t)}var Uh=z({fft_:SP});function CP(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(yp,t)}var Kd=z({ifft_:CP});function TP(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=Q(e,[a,t]);n=Kd(r)}else{let r=[a,2*(t-1)],s=Q(Yl(e),[a,t]),i=Q(Up(e),[a,t]),o=ns(Fe(s,[0,1],[a,t-2]),1),l=te(ns(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=Kd(c)}if(n=Yl(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 Bg=z({irfft_:TP});function NP(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(_u,n,r)}var Sa=z({split_:NP});function RP(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,gn(m)],e.shape.length-1),a=t}else r=e;let s=Ja(r),i=Q(Sr(r,s),[n,a]),o=Uh(i),l=Math.floor(a/2)+1,u=Yl(o),p=Up(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 Gh=z({rfft_:RP});function EP(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(Ho,r,s)}var Vg=z({squaredDifference_:EP});function MP(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,gA(a.shape,t).newShape)}var Oe=z({squeeze_:MP});function PP(e,t=0){let a=Vd(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(Su,n,r)}var pa=z({stack_:PP});function _P(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(us,a,n)}var Ug=z({step_:_P});function $P(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(jo,u,p)}var W4=z({stridedSlice_:$P});function FP(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(Xo,t)}var B4=z({tan_:FP});function Bt(e,t){ri(e);let a=Jn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ds(e,null,a,t)}function Yn(e,t,a){if(ri(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Jn(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 ds(e,t,n,a)}function Gg(e,t,a){if(ri(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Jn(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 ds(e,t,n,a)}function V4(e,t,a){if(ri(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Jn(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 ds(e,t,n,a)}function U4(e,t,a){if(ri(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Jn(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 ds(e,t,n,a)}function G4(e,t,a){if(ri(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Jn(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,ds(e,t,n,a)}var Hh={};Ze(Hh,{calculateShapes:()=>H4,validateInput:()=>jh,validateUpdateShape:()=>Hg});function Hg(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(Yo,s,i);return{values:o,indices:l}}var q4=z({topk_:OP});function zP(e,t=0,a=1,n,r){if(tn(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Og(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(Tp,n,r);return{values:s,indices:i}}var K4=z({unique_:LP});function WP(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");F(Ul(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(Np,s,i)}var Y4=z({unsortedSegmentSum_:WP});function BP(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(zu,n,r)}var Na=z({unstack_:BP});function Z4(e,t){return Lh(e,t,"right")}function J4(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function Q4(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=Yl(n),o=Up(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 Zs=z({transpose_:GP});function HP(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");FA(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,ql(o,c)))}return we(s,p)}var t7=z({movingAverage_:HP});function jP(e,t,a){tn(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");jh(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(Po,s,i)}var a7=z({scatterND_:jP});function qP(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 XP(e,t,a,n=0){tn(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);qP(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(Go,o,l)}var n7=z({sparseToDense_:XP});function KP(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(Vi,n)}var r7=z({gatherND_:KP});function YP(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 gt?r.clone():r;let s=YP(r,a),i=1-t,o=ve(bg(we(Wh(s,0,1,"float32",n),i)),i);return te(r,o)}var s7=z({dropout_:ZP});function qg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function qh(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=yA("bool",l);for(let c=0;cg.value-f.value),p[c]=0;for(let f=0;fa_,depthwiseConv2d:()=>l_,matMul:()=>d_});function QP(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(pp,c,d)}var e_=z({conv2DBackpropFilter_:QP});function Xh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Ug(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Kh(e,t){let a=t,n=fg(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function Yh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return Gp(e);if(t==="elu")return yg(e);if(t==="relu6")return Lg(e);if(t==="prelu")return _g(e,a);if(t==="leakyrelu")return kg(e,n);if(t==="sigmoid")return za(e);throw new Error(`Unknown fused activation ${t}.`)}var Zh=(e,t)=>!(e>0)||t==="linear";function t_({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",Zh(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=Lp(e,t,a,n,r,s,i);return o!=null&&(I=we(I,o)),Yh(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=Op(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,P,E]=T,S=Xh(I,P,l);F(Hd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let _=Ib(M.shape,S,N,a,n),O=e_(M,S,N.shape,a,n),W=[_,O];if(E!=null){let $=Kh(E,S);W.push($)}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?er((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):er((I,T,N,M)=>{let P=L.runKernel(Zr,b,w);return M([T,I,P,N]),m&&(P=Q(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:A}})(h,d,y)}var a_=z({fusedConv2d_:t_});function n_(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(cp,u,p)}var r_=z({depthwiseConv2dNativeBackpropFilter_:n_});function s_(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(hp,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var i_=z({depthwiseConv2dNativeBackpropInput_:s_});function o_({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(Zh(L.state.gradientDepth,l)===!1){let w=Dh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),Yh(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=Op(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(Hd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,N,M,P]=I,E=Xh(w,M,l),S=i_(N.shape,E,T,a,n,s,i),_=r_(N,E,T.shape,a,n,s,i);if(P!=null){let O=Kh(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?er((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):er((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 l_=z({fusedDepthwiseConv2d_:o_});function u_({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Zh(L.state.gradientDepth,s)===!1){let P=pt(e,t,a,n);return r!=null&&(P=we(P,r)),Yh(P,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=vt(m),y=vt(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=(P,E)=>{let[S,_,O,W]=E,$=Xh(Q(P,O.shape),O,s),U,G;if(!a&&!n?(U=pt($,_,!1,!0),G=pt(S,$,!0,!1)):!a&&n?(U=pt($,_,!1,!1),G=pt($,S,!0,!1)):a&&!n?(U=pt(_,$,!1,!0),G=pt(S,$,!1,!1)):(U=pt(_,$,!0,!0),G=pt($,S,!0,!0)),r!=null){let q=Kh(W,$);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?er((P,E,S)=>{let _=L.runKernel(Yr,N,M);return S([P,E,_]),{value:Q(_,x),gradFunc:T}})(A,b):er((P,E,S,_)=>{let O=L.runKernel(Yr,N,M);return _([P,E,O,S]),{value:Q(O,x),gradFunc:T}})(A,b,w)}var d_=z({fusedMatMul_:u_});function p_(e){return qh(e,.54,.46)}var c_=z({hammingWindow_:p_});function h_(e){return qh(e,.5,.5)}var o7=z({hannWindow_:h_});function m_(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(Ni,p,c)}var x_=z({cropAndResize_:y_});function A_(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(zi,a,{})}var b_=z({flipLeftRight_:A_});function v_(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 w_=z({grayscaleToRGB_:v_});function k_(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=Bs("ij,j->i",s,i);break;case 3:o=Bs("ijk,k->ij",s,i);break;case 4:o=Bs("ijkl,l->ijk",s,i);break;case 5:o=Bs("ijklm,m->ijkl",s,i);break;case 6:o=Bs("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Wt(o,-1),Ue(o,r)}var I_=z({rgbToGrayscale_:k_});function S_(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(Jo,s,i)}var C_=z({rotateWithOffset_:S_});function Vu(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 T_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Vu(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(yo,{boxes:s,scores:i},l)}var N_=z({nonMaxSuppression_:T_});function R_(e,t,a){let n=E_(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function E_(e,t,a){return P_(e,t,a||M_)}function M_(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 u7(e,t,a,n,r){return Kg(e,t,a,n,r,0)}function d7(e,t,a,n,r,s){return Kg(e,t,a,n,r,0,!1,s,!0)}function p7(e,t,a,n,r,s){return Kg(e,t,a,n,r,s,!0)}function Kg(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(Jx);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=__(e,x,c[w]);if(I>=n){b=!0;break}if(g.score=g.score*$_(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&&R_(u,g,Jx))}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 __(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 $_(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function Jx(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function F_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Vu(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}=u7(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Bt(c,"int32")}var D_=F_;function O_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Vu(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(xo,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var z_=z({nonMaxSuppressionWithScore_:O_});async function L_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Vu(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}=p7(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(d,"int32"),selectedScores:Bt(h)}}var W_=L_;function B_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Vu(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(ku,d,h);return{selectedIndices:m[0],validOutputs:m[1]}}var V_=z({nonMaxSuppressionPadded_:B_});async function U_(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Vu(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}=d7(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(m,"int32"),validOutputs:Ge(f,"int32")}}var G_=U_;function H_(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(To,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var j_=z({resizeBilinear_:H_});function q_(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(Co,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var X_=z({resizeNearestNeighbor_:q_});function K_(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=mg(Ue(Wg(h),"int32"),Ve([]),256);u=Y_(f,l)}let m=a?Oh(h,u):Vp(h,u);return Ue(te(m,255),"int32")}function Y_(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(Zo,l,u)}var Q_=z({transform_:J_});function e$(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(hh(t,0),s,Xd(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(hh(a,0),i,Xd(a,i)));let u=Q(Kl(0,s,1,"int32"),[-1,1]),p=Kl(0,i,1,"int32"),c=xe(u,p),d=jd(Oh(c,o),wg(c,Ln(l))),h=gn([s,i],n.dtype);return Q(pa(Na(Q(n,[-1,s,i])).map(m=>kr(d,m,h))),r)}var t$=z({bandPart_:e$});function a$(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 Qx(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]=Qx(l,t);r.push(u),s.push(p)});let i=Q(pa(r,0),e.shape),o=Q(pa(s,0),e.shape);return[i,o]}}function Qx(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=Ag(a),s=Ia(e),i=Yn([[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=Bp(h),f=Fe(s,[u,u],[1,1]),g=kr(Vp(f,0),Yn([[-1]]),Yn([[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=Zs(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=Zs(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 s$=z({qr_:r$}),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 i$(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 qd(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(Mg(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Rr=z({computeWeightedLoss_:i$});function o$(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=Ya(xe(r,s));return Rr(o,i,n)}var l$=z({absoluteDifference_:o$});function u$(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 d$=z({cosineDistance_:u$});function p$(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=Gp(xe(o,te(r,s)));return Rr(l,i,n)}var c$=z({hingeLoss_:p$});function h$(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=Ya(xe(i,s)),p=Xd(u,l),c=xe(u,p),d=we(te(Ge(.5),Tn(p)),te(l,c));return Rr(d,o,r)}var m$=z({huberLoss_:h$});function f$(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,Xl(we(i,u)))),c=te(xe(l,s),Xl(we(xe(l,i),u))),d=xe(p,c);return Rr(d,o,r)}var g$=z({logLoss_:f$});function y$(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=Vg(r,s);return Rr(o,i,n)}var x$=z({meanSquaredError_:y$});function A$(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Ta(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=Gp(n),s=te(n,a),i=Ig(as(Ln(Ya(n))));return we(xe(r,s),i)}function b$(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=A$(s,i);return Rr(l,o,r)}var v$=z({sigmoidCrossEntropy_:b$});function w$(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 er((n,r,s)=>{let i=Cg(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=Wp(u.shape,[a]);return[te(Q(u,h),xe(Ue(c,"float32"),as(d))),te(Q(u,h),xe(as(d),Ue(c,"float32")))]}}})(e,t)}function k$(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=w$(s,i);return Rr(l,o,r)}var I$=z({softmaxCrossEntropy_:k$});function S$(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(wp,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var C$=z({sparseFillEmptyRows_:S$});function T$(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($u,i);return{outputIndices:o[0],outputShape:o[1]}}var N$=z({sparseReshape_:T$});function R$(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(Fu,i)}var x$=z({sparseSegmentMean_:y$});function A$(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(Fu,i)}var E$=z({sparseSegmentMean_:R$});function M$(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(Du,i)}var b$=z({sparseSegmentSum_:A$});function v$(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(Ou,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var w$=z({stringNGrams_:v$});function k$(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 I$=z({stringSplit_:k$});function S$(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 C$=z({stringToHashBucketFast_:S$});function T$(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 N$=z({staticRegexReplace_:T$}),r7={fft:Uh,ifft:Zd,rfft:Gh,irfft:Lg},s7={hammingWindow:eP,hannWindow:Q4,frame:e7,stft:rP},fe={flipLeftRight:lP,grayscaleToRGB:dP,resizeNearestNeighbor:DP,resizeBilinear:$P,rgbToGrayscale:cP,rotateWithOffset:mP,cropAndResize:iP,nonMaxSuppression:gP,nonMaxSuppressionAsync:IP,nonMaxSuppressionWithScore:CP,nonMaxSuppressionWithScoreAsync:NP,nonMaxSuppressionPadded:EP,nonMaxSuppressionPaddedAsync:_P,threshold:LP,transform:BP},i7={bandPart:UP,gramSchmidt:HP,qr:qP},o7={absoluteDifference:YP,computeWeightedLoss:Rr,cosineDistance:JP,hingeLoss:e$,huberLoss:a$,logLoss:r$,meanSquaredError:i$,sigmoidCrossEntropy:u$,softmaxCrossEntropy:c$},l7={sparseFillEmptyRows:m$,sparseReshape:g$,sparseSegmentMean:x$,sparseSegmentSum:b$},u7={stringNGrams:w$,stringSplit:I$,stringToHashBucketFast:C$,staticRegexReplace:N$},d7={};Ze(d7,{Serializable:()=>p7,SerializationMap:()=>Ws,getRegisteredName:()=>E$,registerClass:()=>c7});var R$=new Map,f1=new Map,p7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ws=class{constructor(){this.classNameMap={}}static getMap(){return Ws.instance==null&&(Ws.instance=new Ws),Ws.instance}static register(e){Ws.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function c7(e,t,a){$(e.className!=null,()=>"Class being registered does not have the static className property defined."),$(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),$(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 Ws.register(e),R$.set(r,e),f1.set(e,r),e}function E$(e){return f1.has(e)?f1.get(e):e.className}var us=class extends p7{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 Vb(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(us,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Xg=class extends us{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(()=>en(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:De(()=>en(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(Nn(s),1-this.rho)),u=te(ve(Qn(we(o,this.epsilon)),Qn(we(i,this.epsilon))),s),p=we(te(o,this.rho),te(Nn(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)}},Kg=class extends us{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(()=>ir(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,Nn(r));s.assign(i);let o=we(te(ve(r,Qn(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)}},Yg=class extends us{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(()=>en(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:De(()=>en(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(Nn(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(Qn(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(Hl(this.beta1,this.iterations_+1)),this.accBeta2.assign(Hl(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)}},Zg=class extends us{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:en(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:en(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=Ja(l),m=Ng(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)}},Jh=class extends us{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)}},Jg=class extends Jh{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(()=>en(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)}},Qg=class extends us{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(()=>en(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:De(()=>en(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:De(()=>en(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(Nn(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),Qn(xe(l,we(Nn(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(Nn(s),1-this.decay)),p=we(te(o,this.momentum),ve(te(s,this.learningRate),Qn(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)}},M$=[Xg,Kg,Yg,Zg,Jg,Qg,Jh];function _$(){for(let e of M$)c7(e)}var Xn={};Ze(Xn,{CompositeArrayBuffer:()=>nr,browserFiles:()=>L$,browserHTTPRequest:()=>G$,concatenateArrayBuffers:()=>tN,copyModel:()=>kN,decodeWeights:()=>PA,encodeWeights:()=>ZT,fromMemory:()=>j$,fromMemorySync:()=>y7,getLoadHandlers:()=>uN,getModelArtifactsForJSON:()=>rg,getModelArtifactsForJSONSync:()=>FA,getModelArtifactsInfoForJSON:()=>Fp,getSaveHandlers:()=>lN,getWeightSpecs:()=>DA,http:()=>t3,isHTTPScheme:()=>g1,listModels:()=>vN,loadWeights:()=>W$,moveModel:()=>IN,registerLoadRouter:()=>oN,registerSaveRouter:()=>iN,removeModel:()=>wN,weightsLoaderFactory:()=>m7,withSaveHandler:()=>q$,withSaveHandlerSync:()=>X$});var P$="model",$$=".json",F$=".weights.bin";function Kx(e){return new Promise(t=>setTimeout(t)).then(e)}var Kl=class{constructor(e){if(!W().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(Kl.URL_SCHEME)&&(e=e.slice(Kl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=P$),this.modelJsonFileName=e+$$,this.weightDataFileName=e+F$}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=nr.join(e.weightData),a=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}],r=$A(e,n),s=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=s,await Kx(()=>i.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let o=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;o.download=this.weightDataFileName,o.href=a,await Kx(()=>o.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Fp(e)}}}};Kl.URL_SCHEME="downloads://";var D$=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=rg(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=>jx(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=jx(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}},O$=e=>W().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Kl.URL_SCHEME)?z$(e.slice(Kl.URL_SCHEME.length)):null;Pt.registerSaveRouter(O$);function z$(e="model"){return new Kl(e)}function L$(e){return new D$(e)}function Yx(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){$(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){$(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function h7(e,t){t==null&&(t={});let a=t.fetchFunc==null?W().platform.fetch:t.fetchFunc,n=e.map(u=>a(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(n):await Yx(n,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await Yx(i,t.onProgress,o,l)}async function W$(e,t="",a,n){return m7(r=>h7(r,{requestInit:n}))(e,t,a)}function m7(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=u1[y]*vt(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 nr(p.slice(d,d+m));s[h].forEach(g=>{let y=f.slice(g.groupOffset,g.groupOffset+g.sizeBytes),x=PA(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),d+=m}),c}}var B$="application/octet-stream",V$="application/json",e3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?($(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=W().platform.fetch,$(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&$(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let a=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=$A(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:V$}),"model.json"),e.weightData!=null){let s=nr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:B$}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Fp(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return rg(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=U$(t),r=this.weightPathPrefix||a,s=DA(e),i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+n);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await h7(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,l]}};e3.URL_SCHEME_REGEX=/^https?:\/\//;function U$(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function g1(e){return e.match(e3.URL_SCHEME_REGEX)!=null}var f7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>g1(n)):a=g1(e),a)return t3(e,t)}return null};Pt.registerSaveRouter(f7);Pt.registerLoadRouter(f7);function t3(e,t){return new e3(e,t)}function G$(e,t){return t3(e,t)}var K2=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},g7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},H$=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function j$(e,t,a,n){let r=arguments;return new H$(y7(...r))}function y7(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 q$(e){return new g7(e)}function X$(e){return new g7(e)}var x7={};Ze(x7,{confusionMatrix:()=>Y$});function K$(e,t,a){let n=R(e,"labels","confusionMatrix"),r=R(t,"predictions","confusionMatrix");$(a==null||a>0&&Number.isInteger(a),()=>`If provided, numClasses must be a positive integer, but got ${a}`),$(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),$(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),$(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.`),$(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=Ys(s),l=pt(o,i);return Ue(l,"int32")}var Y$=z({confusionMatrix_:K$}),Er={};Ze(Er,{draw:()=>rF,fromPixels:()=>sF,fromPixelsAsync:()=>tF,toPixels:()=>nF});var $s,Zx=!1;function A7(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(Wd(zd,L.backendName)!=null){let d={pixels:e},h={numChannels:t};return L.runKernel(zd,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($s==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")$s=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else $s=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});$s.canvas.width=l,$s.canvas.height=u,$s.drawImage(e,0,0,l,u),p=$s.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 aF(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 nF(e,t){let a=R(e,"img","toPixels");if(!(e instanceof mt)){let u=a;a=Ue(u,"int32"),u.dispose()}b7(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){Zx||Wd(gp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),Zx=!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 rF(e,t,a){let n=R(e,"img","draw");if(!(e instanceof mt)){let i=n;n=Ue(i,"int32"),i.dispose()}b7(n),aF(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(gp,r,s)}var sF=z({fromPixels_:A7}),a3={};Ze(a3,{prepareAndValidate:()=>v7});function v7(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(vt(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:()=>oF,computeFlatOffset:()=>cF,computeOutShape:()=>uF,getNormalizedAxes:()=>dF,isSliceContinous:()=>pF,maskToAxes:()=>lF,parseSliceParams:()=>hF,sliceInfo:()=>mF,startForAxis:()=>N7,startIndicesWithElidedDims:()=>S7,stopForAxis:()=>R7,stopIndicesWithElidedDims:()=>C7,stridesForAxis:()=>T7,stridesWithElidedDims:()=>w7});var y1=-2,iF=-1;function oF(e,t,a){let n=e.shape.length;$(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),$(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 lF(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function uF(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;p=S7(i,h,m,n,e),c=C7(o,h,m,r,e),d=w7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=k7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=k7(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=Od(0,i,l-1),i}function R7(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=Od(0,i,l):i=Od(-1,i,l-1),i}function pF(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 cF(e,t){let a=e.length>0?e[e.length-1]:1;for(let n=0;n{$(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:($(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 mF(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]=Jx(d.begin[x],0,d.strides[x],b,w,I),d.end[x]=Jx(d.end[x],1,d.strides[x],b,w,I);let P=d.strides[x]===1&&d.begin[x]===0&&d.end[x]===b;h=h&&P,m=m&&(x===0&&d.strides[x]===1||P)}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 P;N===0||N<0!=d.strides[x]<0?P=0:P=Math.trunc(N/d.strides[x])+(N%d.strides[x]!==0?1:0),g.push(P)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===y1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>d.finalShapeGatherIndices[A]!==y1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:d.begin,end:d.end,strides:d.strides}}function fF(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 n3="4.11.0",E7=class{static sgd(e){return new Jh(e)}static momentum(e,t,a=!1){return new Jg(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new Qg(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Yg(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Xg(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new Zg(e,t,a,n,r)}static adagrad(e,t=.1){return new Kg(e,t)}},gF=E7,yF=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function M7(){return new Promise(e=>yF(()=>e()))}var S={};Ze(S,{ERF_A1:()=>$F,ERF_A2:()=>FF,ERF_A3:()=>DF,ERF_A4:()=>OF,ERF_A5:()=>zF,ERF_P:()=>PF,PARALLELIZE_THRESHOLD:()=>r3,RowPartitionType:()=>qn,SELU_SCALE:()=>_F,SELU_SCALEALPHA:()=>MF,applyActivation:()=>Yh,assertAndGetBroadcastShape:()=>Gt,assertAxesAreInnerMostDims:()=>oE,assertParamsConsistent:()=>xF,assignToTypedArray:()=>GF,axesAreInnerMostDims:()=>gg,calculateShapes:()=>O4,checkEinsumDimSizes:()=>YF,checkPadOnDimRoundingMode:()=>Rn,combineLocations:()=>Pb,combineRaggedTensorToTensorShapes:()=>bF,complexWithEvenIndex:()=>BF,complexWithOddIndex:()=>VF,computeConv2DInfo:()=>Lp,computeConv3DInfo:()=>tb,computeDefaultPad:()=>ug,computeDilation2DInfo:()=>nR,computeOptimalWindowSize:()=>IF,computeOutAndReduceShapes:()=>iE,computeOutShape:()=>AF,computePool2DInfo:()=>eb,computePool3DInfo:()=>rR,convertConv2DDataFormat:()=>ab,decodeEinsumEquation:()=>XF,eitherStridesOrDilationsAreOne:()=>Nr,expandShapeToKeepDim:()=>Vp,exponent:()=>jF,exponents:()=>HF,fromStringArrayToUint8:()=>yD,fromUint8ToStringArray:()=>gD,getAxesPermutation:()=>lE,getBroadcastDims:()=>Nb,getComplexWithIndex:()=>UF,getEinsumComputePath:()=>ZF,getEinsumPermutation:()=>KF,getFusedBiasGradient:()=>Kh,getFusedDyActivation:()=>Xh,getImageCenter:()=>SF,getInnerMostAxes:()=>dE,getPermuted:()=>TF,getRaggedRank:()=>wF,getReductionAxes:()=>hg,getReshaped:()=>CF,getReshapedPermuted:()=>NF,getRowPartitionTypesHelper:()=>vF,getSliceBeginCoords:()=>RF,getSliceSize:()=>EF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>tD,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>aD,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>nD,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>iD,getSparseReshapeInputOutputMismatchErrorMessage:()=>lD,getSparseReshapeInputOutputMultipleErrorMessage:()=>oD,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>rD,getSparseReshapeNegativeOutputDimErrorMessage:()=>sD,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>cD,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>uD,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>dD,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>pD,getUndoAxesPermutation:()=>uE,isIdentityPermutation:()=>JF,log:()=>gT,mergeRealAndImagArrays:()=>LF,prepareAndValidate:()=>v7,prepareSplitSize:()=>eD,segment_util:()=>_7,shouldFuse:()=>Zh,slice_util:()=>Nt,splitRealAndImagArrays:()=>WF,stridesOrDilationsArePositive:()=>Ks,tupleValuesAreOne:()=>qd,upcastType:()=>pa,validateDefaultValueShape:()=>kF,validateInput:()=>jh,validateUpdateShape:()=>Ug,warn:()=>Br});function xF(e,t){let a=e[0].length;e.forEach((r,s)=>{$(r.length===a,()=>`Error in concat${a}D: rank of tensors[${s}] must be the same as the rank of the rest (${a})`)}),$(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 AF(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 vF(e){let t={FIRST_DIM_SIZE:qn.FIRST_DIM_SIZE,VALUE_ROWIDS:qn.VALUE_ROWIDS,ROW_LENGTHS:qn.ROW_LENGTHS,ROW_SPLITS:qn.ROW_SPLITS,ROW_LIMITS:qn.ROW_LIMITS,ROW_STARTS:qn.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]===qn.FIRST_DIM_SIZE?e.length-1:e.length}function kF(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 r3=30;function IF(e){return e<=r3?e:dh(e,Math.floor(Math.sqrt(e)))}function SF(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function CF(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 NF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,Qx=",",e5="...";function XF(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(qF,"").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);$(n.indexOf(e5)===-1,()=>`The ellipsis notation ("${e5}") is not supported yet.`);let s=n.split(Qx),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 YF(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 ZF(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 QF(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);$(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}$(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 tD(e){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${e}`}function aD(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function nD(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function rD(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function sD(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 oD(e,t){let a=vt(e),n=vt(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 lD(e,t){let a=vt(e),n=vt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function uD(){return"segment ids must be >= 0"}function dD(){return"segment ids are not increasing"}function pD(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function cD(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var _7={};Ze(_7,{collectGatherOpShapeInfo:()=>fD,computeOutShape:()=>mD,segOpComputeOptimalWindowSize:()=>hD});function hD(e,t){let a=!1,n;for(e<=r3?(n=e,a=!0):n=dh(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=dh(e,n+1);return n}function mD(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(aph(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function yD(e){return e.map(t=>_p(t))}var En={};Ze(En,{nonMaxSuppressionV3Impl:()=>t7,nonMaxSuppressionV4Impl:()=>a7,nonMaxSuppressionV5Impl:()=>n7,whereImpl:()=>H4});_$();var xD=W();xD.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 Cn;(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"})(Cn||(Cn={}));var t5;(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={}))})(t5||(t5={}));var s3={};function AD(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};s3[e]=a}function P7(e){return s3[e]}function bD(e){delete s3[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]=Za(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[gh(r,o)]);return i!==void 0?t[gh(r,i)][s]:void 0}function a5(e,t,a){return t[gh(e,a.currentContextId)]}function br(e,t){let[a,n,r]=Za(e,t);return[gh(a,t&&t.currentContextId),n,r]}function gh(e,t){return t?`${e}-${t}`:e}function Za(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 th(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 vr(e){return e.kept?e:Sa(e)}var $7={};Ze($7,{json:()=>vD});var vD=[{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}]}],F7={};Ze(F7,{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}]}],D7={};Ze(D7,{json:()=>kD});var kD=[{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"}]}],O7={};Ze(O7,{json:()=>ID});var ID=[{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:()=>SD});var SD=[{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"}]}],L7={};Ze(L7,{json:()=>CD});var CD=[{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}]}],W7={};Ze(W7,{json:()=>TD});var TD=[{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"}]}],B7={};Ze(B7,{json:()=>ND});var ND=[{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"}]}],V7={};Ze(V7,{json:()=>RD});var RD=[{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"}]}],U7={};Ze(U7,{json:()=>ED});var ED=[{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"}]}],G7={};Ze(G7,{json:()=>MD});var MD=[{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"}]}],H7={};Ze(H7,{json:()=>_D});var _D=[{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"}]}],j7={};Ze(j7,{json:()=>PD});var PD=[{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"}]}],q7={};Ze(q7,{json:()=>$D});var $D=[{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"}]}],X7={};Ze(X7,{json:()=>FD});var FD=[{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"}]}],K7={};Ze(K7,{json:()=>DD});var DD=[{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"}]}],Y7={};Ze(Y7,{json:()=>OD});var OD=[{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}]}],Z7={};Ze(Z7,{json:()=>zD});var zD=[{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"}]}],J7={};Ze(J7,{json:()=>LD});var LD=[{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:[]}],n5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[$7,F7,D7,O7,z7,L7,W7,B7,V7,U7,G7,H7,j7,q7,X7,K7,Y7,Z7,J7],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]=br(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]=br(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]=br(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=P7(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=x1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=x1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=S1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=S1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=b1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=b1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=I1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=I1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=A1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=A1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=k1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=k1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=C1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=C1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=v1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=v1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=w1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=w1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=r5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=r5(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]=br(u.name),c={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:i3(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]=br(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]=br(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 WD(e){let t=W().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function Q7(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):WD(e);return t?a:a.toLowerCase()}function x1(e,t,a,n=!1){let r=e[t];return r!=null?Q7(r.s,n):a}function A1(e,t,a){let n=e[t];return n?n.b:a}function b1(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 i3(e){switch(typeof e=="string"&&(e=Cn[e]),e){case Cn.DT_FLOAT:case Cn.DT_HALF:return"float32";case Cn.DT_INT32:case Cn.DT_INT64:case Cn.DT_INT8:case Cn.DT_UINT8:return"int32";case Cn.DT_BOOL:return"bool";case Cn.DT_DOUBLE:return"float32";case Cn.DT_STRING:return"string";default:return null}}function r5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function v1(e,t,a){let n=e[t];return n&&n.type?i3(n.type):a}function w1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>i3(r)):a}function e6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function k1(e,t,a){let n=e[t];return n&&n.shape?e6(n.shape):a}function I1(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 S1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>Q7(s,n)):a}function C1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>e6(r)):a}function T1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var BD=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 b1(this.node.rawAttrs,e,t);if(a.s!=null)return x1(this.node.rawAttrs,e,t);if(a.b!=null)return A1(this.node.rawAttrs,e,t);if(a.shape!=null)return k1(this.node.rawAttrs,e,t);if(a.type!=null)return v1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return I1(this.node.rawAttrs,e,t);if(a.list.s!=null)return S1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return C1(this.node.rawAttrs,e,t);if(a.list.b!=null)return T1(this.node.rawAttrs,e,t);if(a.list.type!=null)return w1(this.node.rawAttrs,e,t)}return t}},ea={};Ze(ea,{OP_SCOPE_SUFFIX:()=>ag,abs:()=>Ja,acos:()=>GA,acosh:()=>HA,add:()=>we,addN:()=>Fh,all:()=>jA,any:()=>qA,argMax:()=>sr,argMin:()=>XA,asin:()=>KA,asinh:()=>YA,atan:()=>ZA,atan2:()=>JA,atanh:()=>QA,avgPool:()=>dg,avgPool3d:()=>nb,basicLSTMCell:()=>rb,batchNorm:()=>Wp,batchNorm2d:()=>sb,batchNorm3d:()=>ib,batchNorm4d:()=>ob,batchToSpaceND:()=>pg,bincount:()=>cg,bitwiseAnd:()=>lb,booleanMaskAsync:()=>j4,broadcastArgs:()=>ub,broadcastTo:()=>Ll,buffer:()=>$e,cast:()=>Ue,ceil:()=>db,clipByValue:()=>pb,clone:()=>Sa,complex:()=>Cr,concat:()=>lt,concat1d:()=>cb,concat2d:()=>Wu,concat3d:()=>hb,concat4d:()=>mb,conv1d:()=>fb,conv2d:()=>Bp,conv2dTranspose:()=>yb,conv3d:()=>xb,conv3dTranspose:()=>Ab,cos:()=>bb,cosh:()=>vb,cosineWindow:()=>qh,cumprod:()=>wb,cumsum:()=>kb,denseBincount:()=>Ib,depthToSpace:()=>Sb,depthwiseConv2d:()=>Dh,diag:()=>Cb,dilation2d:()=>Tb,div:()=>ve,divNoNan:()=>Rb,dot:()=>Eb,dropout:()=>Z4,einsum:()=>Ls,elu:()=>fg,enclosingPowerOfTwo:()=>Hg,ensureShape:()=>Mb,equal:()=>mg,erf:()=>_b,euclideanNorm:()=>Fb,exp:()=>es,expandDims:()=>Bt,expm1:()=>Db,eye:()=>yg,fft:()=>Uh,fill:()=>ir,floor:()=>xg,floorDiv:()=>zp,fused:()=>jg,gather:()=>Ag,gatherND:()=>Y4,greater:()=>Gp,greaterEqual:()=>bg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>J4,irfft:()=>Lg,isFinite:()=>Ob,isInf:()=>zb,isNaN:()=>Lb,leakyRelu:()=>vg,less:()=>mh,lessEqual:()=>Oh,linalg:()=>i7,linspace:()=>Wb,localResponseNormalization:()=>Bb,log:()=>jl,log1p:()=>wg,logSigmoid:()=>Ub,logSoftmax:()=>Gb,logSumExp:()=>Ig,logicalAnd:()=>Xd,logicalNot:()=>Sg,logicalOr:()=>Cg,logicalXor:()=>Hb,losses:()=>o7,lowerBound:()=>jb,matMul:()=>pt,max:()=>ga,maxPool:()=>Tg,maxPool3d:()=>qb,maxPoolWithArgmax:()=>Xb,maximum:()=>Ng,mean:()=>Kd,meshgrid:()=>Kb,min:()=>Qr,minimum:()=>Yd,mirrorPad:()=>Yb,mod:()=>Bu,moments:()=>Zb,movingAverage:()=>q4,mul:()=>te,multiRNNCell:()=>Jb,multinomial:()=>Qb,neg:()=>Ln,norm:()=>Up,notEqual:()=>Rg,oneHot:()=>fh,ones:()=>Gr,onesLike:()=>e4,op:()=>z,outerProduct:()=>t4,pad:()=>or,pad1d:()=>a4,pad2d:()=>n4,pad3d:()=>r4,pad4d:()=>s4,pool:()=>i4,pow:()=>Hl,prelu:()=>Mg,print:()=>sg,prod:()=>o4,raggedGather:()=>l4,raggedRange:()=>u4,raggedTensorToTensor:()=>d4,rand:()=>p4,randomGamma:()=>f4,randomNormal:()=>Dg,randomStandardNormal:()=>g4,randomUniform:()=>Wh,randomUniformInt:()=>y4,range:()=>ql,real:()=>Xl,reciprocal:()=>x4,relu:()=>jp,relu6:()=>Og,reshape:()=>Q,reverse:()=>ts,reverse1d:()=>A4,reverse2d:()=>b4,reverse3d:()=>v4,reverse4d:()=>w4,rfft:()=>Gh,round:()=>zg,rsqrt:()=>k4,scalar:()=>Ge,scatterND:()=>X4,searchSorted:()=>Lh,selu:()=>I4,separableConv2d:()=>S4,setdiff1dAsync:()=>C4,sigmoid:()=>Wa,sign:()=>T4,signal:()=>s7,sin:()=>N4,sinh:()=>R4,slice:()=>Fe,slice1d:()=>E4,slice2d:()=>M4,slice3d:()=>qp,slice4d:()=>Bh,softmax:()=>Vh,softplus:()=>kg,spaceToBatchND:()=>Eg,sparse:()=>l7,sparseToDense:()=>K4,spectral:()=>r7,split:()=>Ca,sqrt:()=>Qn,square:()=>Nn,squaredDifference:()=>Wg,squeeze:()=>Oe,stack:()=>ca,step:()=>Bg,stridedSlice:()=>_4,string:()=>u7,sub:()=>xe,sum:()=>ot,tan:()=>P4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Vt,tensor2d:()=>Yn,tensor3d:()=>Vg,tensor4d:()=>$4,tensor5d:()=>F4,tensor6d:()=>D4,tensorScatterUpdate:()=>z4,tile:()=>qr,topk:()=>L4,transpose:()=>Ys,truncatedNormal:()=>W4,unique:()=>B4,unsortedSegmentSum:()=>V4,unstack:()=>Ra,upperBound:()=>U4,variable:()=>G4,where:()=>Ir,whereAsync:()=>Gg,zeros:()=>yn,zerosLike:()=>en});var VD=(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`)}},UD=(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 Tn(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 s5(e){return!(typeof e=="number"||e.some(t=>t<0))}function wd(e,t,a){let n=N1(e,a),r=!s5(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=N1(s.shape,n)}),!s5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function N1(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 GD=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),Tn(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,Ra(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let a=0,n=e.map(o=>(a+=o,a));if(a!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(Du,i)}var P$=z({sparseSegmentSum_:M$});function _$(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(Ou,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var $$=z({stringNGrams_:_$});function F$(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(Sp,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var D$=z({stringSplit_:F$});function O$(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(Cp,r,n)}var z$=z({stringToHashBucketFast_:O$});function L$(e,t,a,n=!0){let r=R(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:a,replaceGlobal:n};return L.runKernel(Ip,{x:r},s)}var W$=z({staticRegexReplace_:L$}),c7={fft:Uh,ifft:Kd,rfft:Gh,irfft:Bg},h7={hammingWindow:c_,hannWindow:o7,frame:l7,stft:g_},fe={flipLeftRight:b_,grayscaleToRGB:w_,resizeNearestNeighbor:X_,resizeBilinear:j_,rgbToGrayscale:I_,rotateWithOffset:C_,cropAndResize:x_,nonMaxSuppression:N_,nonMaxSuppressionAsync:D_,nonMaxSuppressionWithScore:z_,nonMaxSuppressionWithScoreAsync:W_,nonMaxSuppressionPadded:V_,nonMaxSuppressionPaddedAsync:G_,threshold:Z_,transform:Q_},m7={bandPart:t$,gramSchmidt:n$,qr:s$},f7={absoluteDifference:l$,computeWeightedLoss:Rr,cosineDistance:d$,hingeLoss:c$,huberLoss:m$,logLoss:g$,meanSquaredError:x$,sigmoidCrossEntropy:v$,softmaxCrossEntropy:I$},g7={sparseFillEmptyRows:C$,sparseReshape:N$,sparseSegmentMean:E$,sparseSegmentSum:P$},y7={stringNGrams:$$,stringSplit:D$,stringToHashBucketFast:z$,staticRegexReplace:W$},x7={};Ze(x7,{Serializable:()=>A7,SerializationMap:()=>b7,getRegisteredName:()=>V$,registerClass:()=>v7});var B$=new Map,f1=new Map,A7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},b7=class Ol{constructor(){this.classNameMap={}}static getMap(){return Ol.instance==null&&(Ol.instance=new Ol),Ol.instance}static register(t){Ol.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function v7(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 b7.register(e),B$.set(r,e),f1.set(e,r),e}function V$(e){return f1.has(e)?f1.get(e):e.className}var ps=class extends A7{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 Yb(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(ps,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Yg=class extends ps{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(()=>Ja(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:De(()=>Ja(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(Qn(we(o,this.epsilon)),Qn(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)}},Zg=class extends ps{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,Qn(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)}},Jg=class extends ps{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(()=>Ja(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:De(()=>Ja(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(Qn(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(ql(this.beta1,this.iterations_+1)),this.accBeta2.assign(ql(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)}},Qg=class extends ps{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:Ja(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Ja(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=Ya(l),m=Eg(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)}},Jh=class extends ps{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)}},e3=class extends Jh{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(()=>Ja(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)}},t3=class extends ps{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(()=>Ja(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:De(()=>Ja(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:De(()=>Ja(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),Qn(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),Qn(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)}},U$=[Yg,Zg,Jg,Qg,e3,t3,Jh];function G$(){for(let e of U$)v7(e)}var Xn={};Ze(Xn,{CompositeArrayBuffer:()=>Tr,browserFiles:()=>Z$,browserHTTPRequest:()=>aF,concatenateArrayBuffers:()=>hN,copyModel:()=>FN,decodeWeights:()=>BA,encodeWeights:()=>uN,fromMemory:()=>rF,fromMemorySync:()=>C7,getLoadHandlers:()=>vN,getModelArtifactsForJSON:()=>ig,getModelArtifactsForJSONSync:()=>UA,getModelArtifactsInfoForJSON:()=>_p,getSaveHandlers:()=>bN,getWeightSpecs:()=>GA,http:()=>n3,isHTTPScheme:()=>y1,listModels:()=>_N,loadWeights:()=>J$,moveModel:()=>DN,registerLoadRouter:()=>AN,registerSaveRouter:()=>xN,removeModel:()=>$N,weightsLoaderFactory:()=>k7,withSaveHandler:()=>sF,withSaveHandlerSync:()=>iF});var H$="model",j$=".json",q$=".weights.bin";function e5(e){return new Promise(t=>setTimeout(t)).then(e)}var fh=class g1{constructor(t){if(!B().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(g1.URL_SCHEME)&&(t=t.slice(g1.URL_SCHEME.length)),(t==null||t.length===0)&&(t=H$),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=VA(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 e5(()=>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 e5(()=>l.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:_p(t)}}}};fh.URL_SCHEME="downloads://";var X$=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=ig(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=>Zx(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=Zx(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}},K$=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(fh.URL_SCHEME)?Y$(e.slice(fh.URL_SCHEME.length)):null;fn.registerSaveRouter(K$);function Y$(e="model"){return new fh(e)}function Z$(e){return new X$(e)}function t5(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 w7(e,t){t==null&&(t={});let a=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,n=e.map(u=>a(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(n):await t5(n,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await t5(i,t.onProgress,o,l)}async function J$(e,t="",a,n){return k7(r=>w7(r,{requestInit:n}))(e,t,a)}function k7(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=u1[y]*vt(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=BA(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),d+=m}),c}}var Q$="application/octet-stream",eF="application/json",a3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(F(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=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||{}}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=VA(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:eF}),"model.json"),e.weightData!=null){let s=Tr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:Q$}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:_p(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return ig(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=tF(t),r=this.weightPathPrefix||a,s=GA(e),i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+n);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await w7(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,l]}};a3.URL_SCHEME_REGEX=/^https?:\/\//;function tF(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function y1(e){return e.match(a3.URL_SCHEME_REGEX)!=null}var I7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>y1(n)):a=y1(e),a)return n3(e,t)}return null};fn.registerSaveRouter(I7);fn.registerLoadRouter(I7);function n3(e,t){return new a3(e,t)}function aF(e,t){return n3(e,t)}var X2=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},S7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},nF=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rF(e,t,a,n){let r=arguments;return new nF(C7(...r))}function C7(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new X2(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 X2({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 X2({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function sF(e){return new S7(e)}function iF(e){return new S7(e)}var T7={};Ze(T7,{confusionMatrix:()=>lF});function oF(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=mh(Ue(n,"int32"),a),i=mh(Ue(r,"int32"),a),o=Zs(s),l=pt(o,i);return Ue(l,"int32")}var lF=z({confusionMatrix_:oF}),Er={};Ze(Er,{draw:()=>gF,fromPixels:()=>yF,fromPixelsAsync:()=>hF,toPixels:()=>fF});var Ds,a5=!1;function N7(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(Ld(Od,L.backendName)!=null){let d={pixels:e},h={numChannels:t};return L.runKernel(Od,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(Ds==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Ds=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Ds=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Ds.canvas.width=l,Ds.canvas.height=u,Ds.drawImage(e,0,0,l,u),p=Ds.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 mF(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 fF(e,t){let a=R(e,"img","toPixels");if(!(e instanceof gt)){let u=a;a=Ue(u,"int32"),u.dispose()}R7(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){a5||Ld(mp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),a5=!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 gF(e,t,a){let n=R(e,"img","draw");if(!(e instanceof gt)){let i=n;n=Ue(i,"int32"),i.dispose()}R7(n),mF(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(mp,r,s)}var yF=z({fromPixels_:N7}),r3={};Ze(r3,{prepareAndValidate:()=>E7});function E7(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(vt(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:()=>AF,computeFlatOffset:()=>IF,computeOutShape:()=>vF,getNormalizedAxes:()=>wF,isSliceContinous:()=>kF,maskToAxes:()=>bF,parseSliceParams:()=>SF,sliceInfo:()=>CF,startForAxis:()=>O7,startIndicesWithElidedDims:()=>$7,stopForAxis:()=>z7,stopIndicesWithElidedDims:()=>F7,stridesForAxis:()=>D7,stridesWithElidedDims:()=>M7});var x1=-2,xF=-1;function AF(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 bF(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function vF(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;p=$7(i,h,m,n,e),c=F7(o,h,m,r,e),d=M7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=P7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=P7(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=Dd(0,i,l-1),i}function z7(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=Dd(0,i,l):i=Dd(-1,i,l-1),i}function kF(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 IF(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 CF(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]=n5(d.begin[x],0,d.strides[x],b,w,I),d.end[x]=n5(d.end[x],1,d.strides[x],b,w,I);let P=d.strides[x]===1&&d.begin[x]===0&&d.end[x]===b;h=h&&P,m=m&&(x===0&&d.strides[x]===1||P)}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 P;N===0||N<0!=d.strides[x]<0?P=0:P=Math.trunc(N/d.strides[x])+(N%d.strides[x]!==0?1:0),g.push(P)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===x1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>d.finalShapeGatherIndices[A]!==x1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:d.begin,end:d.end,strides:d.strides}}function TF(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 s3="4.14.0",L7=class{static sgd(e){return new Jh(e)}static momentum(e,t,a=!1){return new e3(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new t3(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Jg(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Yg(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new Qg(e,t,a,n,r)}static adagrad(e,t=.1){return new Zg(e,t)}},NF=L7,RF=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function W7(){return new Promise(e=>RF(()=>e()))}var C={};Ze(C,{ERF_A1:()=>jF,ERF_A2:()=>qF,ERF_A3:()=>XF,ERF_A4:()=>KF,ERF_A5:()=>YF,ERF_P:()=>HF,PARALLELIZE_THRESHOLD:()=>i3,RowPartitionType:()=>qn,SELU_SCALE:()=>GF,SELU_SCALEALPHA:()=>UF,applyActivation:()=>Yh,assertAndGetBroadcastShape:()=>Ut,assertAxesAreInnerMostDims:()=>AE,assertParamsConsistent:()=>EF,assignToTypedArray:()=>aD,axesAreInnerMostDims:()=>xg,calculateShapes:()=>H4,checkEinsumDimSizes:()=>lD,checkPadOnDimRoundingMode:()=>Nn,combineLocations:()=>Bb,combineRaggedTensorToTensorShapes:()=>PF,complexWithEvenIndex:()=>QF,complexWithOddIndex:()=>eD,computeConv2DInfo:()=>Op,computeConv3DInfo:()=>ub,computeDefaultPad:()=>pg,computeDilation2DInfo:()=>fR,computeOptimalWindowSize:()=>DF,computeOutAndReduceShapes:()=>xE,computeOutShape:()=>MF,computePool2DInfo:()=>lb,computePool3DInfo:()=>gR,convertConv2DDataFormat:()=>db,decodeEinsumEquation:()=>iD,eitherStridesOrDilationsAreOne:()=>Nr,expandShapeToKeepDim:()=>Wp,exponent:()=>rD,exponents:()=>nD,fromStringArrayToUint8:()=>RD,fromUint8ToStringArray:()=>ND,getAxesPermutation:()=>bE,getBroadcastDims:()=>Db,getComplexWithIndex:()=>tD,getEinsumComputePath:()=>uD,getEinsumPermutation:()=>oD,getFusedBiasGradient:()=>Kh,getFusedDyActivation:()=>Xh,getImageCenter:()=>OF,getInnerMostAxes:()=>wE,getPermuted:()=>LF,getRaggedRank:()=>$F,getReductionAxes:()=>fg,getReshaped:()=>zF,getReshapedPermuted:()=>WF,getRowPartitionTypesHelper:()=>_F,getSliceBeginCoords:()=>BF,getSliceSize:()=>VF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>hD,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>mD,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>fD,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>xD,getSparseReshapeInputOutputMismatchErrorMessage:()=>bD,getSparseReshapeInputOutputMultipleErrorMessage:()=>AD,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>gD,getSparseReshapeNegativeOutputDimErrorMessage:()=>yD,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>ID,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>vD,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>wD,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>kD,getUndoAxesPermutation:()=>vE,isIdentityPermutation:()=>dD,log:()=>RT,mergeRealAndImagArrays:()=>ZF,prepareAndValidate:()=>E7,prepareSplitSize:()=>cD,segment_util:()=>B7,shouldFuse:()=>Zh,slice_util:()=>Nt,splitRealAndImagArrays:()=>JF,stridesOrDilationsArePositive:()=>Ys,tupleValuesAreOne:()=>Hd,upcastType:()=>da,validateDefaultValueShape:()=>FF,validateInput:()=>jh,validateUpdateShape:()=>Hg,warn:()=>Vr});function EF(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 MF(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 _F(e){let t={FIRST_DIM_SIZE:qn.FIRST_DIM_SIZE,VALUE_ROWIDS:qn.VALUE_ROWIDS,ROW_LENGTHS:qn.ROW_LENGTHS,ROW_SPLITS:qn.ROW_SPLITS,ROW_LIMITS:qn.ROW_LIMITS,ROW_STARTS:qn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function $F(e){return e.length===0?0:e[0]===qn.FIRST_DIM_SIZE?e.length-1:e.length}function FF(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 i3=30;function DF(e){return e<=i3?e:uh(e,Math.floor(Math.sqrt(e)))}function OF(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function zF(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 WF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,r5=",",s5="...";function iD(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(sD,"").length)/K2.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 ("${K2}").`);let[n,r]=e.split(K2);F(n.indexOf(s5)===-1,()=>`The ellipsis notation ("${s5}") is not supported yet.`);let s=n.split(r5),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 lD(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 uD(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 pD(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 hD(e){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${e}`}function mD(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function fD(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function gD(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function yD(e,t){return`size ${e} must be non-negative, not ${t}`}function xD(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function AD(e,t){let a=vt(e),n=vt(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 bD(e,t){let a=vt(e),n=vt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function vD(){return"segment ids must be >= 0"}function wD(){return"segment ids are not increasing"}function kD(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function ID(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var B7={};Ze(B7,{collectGatherOpShapeInfo:()=>TD,computeOutShape:()=>CD,segOpComputeOptimalWindowSize:()=>SD});function SD(e,t){let a=!1,n;for(e<=i3?(n=e,a=!0):n=uh(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=uh(e,n+1);return n}function CD(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(adh(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function RD(e){return e.map(t=>Ep(t))}var Rn={};Ze(Rn,{nonMaxSuppressionV3Impl:()=>u7,nonMaxSuppressionV4Impl:()=>d7,nonMaxSuppressionV5Impl:()=>p7,whereImpl:()=>Q4});G$();var ED=B();ED.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 Sn;(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"})(Sn||(Sn={}));var i5;(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={}))})(i5||(i5={}));var o3={};function MD(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};o3[e]=a}function V7(e){return o3[e]}function PD(e){delete o3[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 la(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=>la(h,a,n,r))}let p=la(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 la(e,t,a,n){let[r,s]=Ka(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[gh(r,o)]);return i!==void 0?t[gh(r,i)][s]:void 0}function o5(e,t,a){return t[gh(e,a.currentContextId)]}function Ar(e,t){let[a,n,r]=Ka(e,t);return[gh(a,t&&t.currentContextId),n,r]}function gh(e,t){return t?`${e}-${t}`:e}function Ka(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 eh(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 U7={};Ze(U7,{json:()=>_D});var _D=[{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}]}],G7={};Ze(G7,{json:()=>$D});var $D=[{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}]}],H7={};Ze(H7,{json:()=>FD});var FD=[{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"}]}],j7={};Ze(j7,{json:()=>DD});var DD=[{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"}]}],q7={};Ze(q7,{json:()=>OD});var OD=[{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"}]}],X7={};Ze(X7,{json:()=>zD});var zD=[{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}]}],K7={};Ze(K7,{json:()=>LD});var LD=[{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"}]}],Y7={};Ze(Y7,{json:()=>WD});var WD=[{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"}]}],Z7={};Ze(Z7,{json:()=>BD});var BD=[{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"}]}],J7={};Ze(J7,{json:()=>VD});var VD=[{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"}]}],Q7={};Ze(Q7,{json:()=>UD});var UD=[{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"}]}],e6={};Ze(e6,{json:()=>GD});var GD=[{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"}]}],t6={};Ze(t6,{json:()=>HD});var HD=[{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"}]}],a6={};Ze(a6,{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"}]}],n6={};Ze(n6,{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"}]}],r6={};Ze(r6,{json:()=>XD});var XD=[{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"}]}],s6={};Ze(s6,{json:()=>KD});var KD=[{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}]}],i6={};Ze(i6,{json:()=>YD});var YD=[{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"}]}],o6={};Ze(o6,{json:()=>ZD});var ZD=[{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:[]}],l5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[U7,G7,H7,j7,q7,X7,K7,Y7,Z7,J7,Q7,e6,t6,a6,n6,r6,s6,i6,o6],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=V7(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=A1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=A1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=C1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=C1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=v1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=v1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=S1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=S1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=b1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=b1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=N1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=N1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=I1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=I1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=w1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=w1(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"func":i=u5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=u5(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:l3(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 JD(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 l6(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):JD(e);return t?a:a.toLowerCase()}function A1(e,t,a,n=!1){let r=e[t];return r!=null?l6(r.s,n):a}function b1(e,t,a){let n=e[t];return n?n.b:a}function v1(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 l3(e){switch(typeof e=="string"&&(e=Sn[e]),e){case Sn.DT_FLOAT:case Sn.DT_HALF:return"float32";case Sn.DT_INT32:case Sn.DT_INT64:case Sn.DT_INT8:case Sn.DT_UINT8:return"int32";case Sn.DT_BOOL:return"bool";case Sn.DT_DOUBLE:return"float32";case Sn.DT_STRING:return"string";default:return null}}function u5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function w1(e,t,a){let n=e[t];return n&&n.type?l3(n.type):a}function k1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>l3(r)):a}function u6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function I1(e,t,a){let n=e[t];return n&&n.shape?u6(n.shape):a}function S1(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 C1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>l6(s,n)):a}function T1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>u6(r)):a}function N1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var QD=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 la(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return la(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return v1(this.node.rawAttrs,e,t);if(a.s!=null)return A1(this.node.rawAttrs,e,t);if(a.b!=null)return b1(this.node.rawAttrs,e,t);if(a.shape!=null)return I1(this.node.rawAttrs,e,t);if(a.type!=null)return w1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return S1(this.node.rawAttrs,e,t);if(a.list.s!=null)return C1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return T1(this.node.rawAttrs,e,t);if(a.list.b!=null)return N1(this.node.rawAttrs,e,t);if(a.list.type!=null)return k1(this.node.rawAttrs,e,t)}return t}},Qt={};Ze(Qt,{OP_SCOPE_SUFFIX:()=>rg,abs:()=>Ya,acos:()=>JA,acosh:()=>QA,add:()=>we,addN:()=>Fh,all:()=>eb,any:()=>tb,argMax:()=>rr,argMin:()=>ab,asin:()=>nb,asinh:()=>rb,atan:()=>sb,atan2:()=>ib,atanh:()=>ob,avgPool:()=>cg,avgPool3d:()=>pb,basicLSTMCell:()=>cb,batchNorm:()=>zp,batchNorm2d:()=>hb,batchNorm3d:()=>mb,batchNorm4d:()=>fb,batchToSpaceND:()=>hg,bincount:()=>mg,bitwiseAnd:()=>gb,booleanMaskAsync:()=>e7,broadcastArgs:()=>yb,broadcastTo:()=>Bl,buffer:()=>$e,cast:()=>Ue,ceil:()=>xb,clipByValue:()=>Ab,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>bb,concat2d:()=>Wu,concat3d:()=>vb,concat4d:()=>wb,conv1d:()=>kb,conv2d:()=>Lp,conv2dTranspose:()=>Sb,conv3d:()=>Cb,conv3dTranspose:()=>Tb,cos:()=>Nb,cosh:()=>Rb,cosineWindow:()=>qh,cumprod:()=>Eb,cumsum:()=>Mb,denseBincount:()=>Pb,depthToSpace:()=>_b,depthwiseConv2d:()=>Dh,diag:()=>$b,dilation2d:()=>Fb,div:()=>ve,divNoNan:()=>Ob,dot:()=>zb,dropout:()=>s7,einsum:()=>Bs,elu:()=>yg,enclosingPowerOfTwo:()=>qg,ensureShape:()=>Lb,equal:()=>gg,erf:()=>Wb,euclideanNorm:()=>Ub,exp:()=>as,expandDims:()=>Wt,expm1:()=>Gb,eye:()=>Ag,fft:()=>Uh,fill:()=>sr,floor:()=>bg,floorDiv:()=>Dp,fused:()=>Xg,gather:()=>vg,gatherND:()=>r7,greater:()=>Vp,greaterEqual:()=>wg,ifft:()=>Kd,imag:()=>Up,image:()=>fe,inTopKAsync:()=>i7,irfft:()=>Bg,isFinite:()=>Hb,isInf:()=>jb,isNaN:()=>qb,leakyRelu:()=>kg,less:()=>hh,lessEqual:()=>Oh,linalg:()=>m7,linspace:()=>Xb,localResponseNormalization:()=>Kb,log:()=>Xl,log1p:()=>Ig,logSigmoid:()=>Zb,logSoftmax:()=>Jb,logSumExp:()=>Cg,logicalAnd:()=>jd,logicalNot:()=>Tg,logicalOr:()=>Ng,logicalXor:()=>Qb,losses:()=>f7,lowerBound:()=>e4,matMul:()=>pt,max:()=>fa,maxPool:()=>Rg,maxPool3d:()=>t4,maxPoolWithArgmax:()=>a4,maximum:()=>Eg,mean:()=>qd,meshgrid:()=>n4,min:()=>ts,minimum:()=>Xd,mirrorPad:()=>r4,mod:()=>Bu,moments:()=>s4,movingAverage:()=>t7,mul:()=>te,multiRNNCell:()=>i4,multinomial:()=>o4,neg:()=>Ln,norm:()=>Bp,notEqual:()=>Mg,oneHot:()=>mh,ones:()=>Hr,onesLike:()=>l4,op:()=>z,outerProduct:()=>u4,pad:()=>ir,pad1d:()=>d4,pad2d:()=>p4,pad3d:()=>c4,pad4d:()=>h4,pool:()=>m4,pow:()=>ql,prelu:()=>_g,print:()=>og,prod:()=>f4,raggedGather:()=>g4,raggedRange:()=>y4,raggedTensorToTensor:()=>x4,rand:()=>A4,randomGamma:()=>k4,randomNormal:()=>zg,randomStandardNormal:()=>I4,randomUniform:()=>Wh,randomUniformInt:()=>S4,range:()=>Kl,real:()=>Yl,reciprocal:()=>C4,relu:()=>Gp,relu6:()=>Lg,reshape:()=>Q,reverse:()=>ns,reverse1d:()=>T4,reverse2d:()=>N4,reverse3d:()=>R4,reverse4d:()=>E4,rfft:()=>Gh,round:()=>Wg,rsqrt:()=>M4,scalar:()=>Ge,scatterND:()=>a7,searchSorted:()=>Lh,selu:()=>P4,separableConv2d:()=>_4,setdiff1dAsync:()=>$4,sigmoid:()=>za,sign:()=>F4,signal:()=>h7,sin:()=>D4,sinh:()=>O4,slice:()=>Fe,slice1d:()=>z4,slice2d:()=>L4,slice3d:()=>Hp,slice4d:()=>Bh,softmax:()=>Vh,softplus:()=>Sg,spaceToBatchND:()=>Pg,sparse:()=>g7,sparseToDense:()=>n7,spectral:()=>c7,split:()=>Sa,sqrt:()=>Qn,square:()=>Tn,squaredDifference:()=>Vg,squeeze:()=>Oe,stack:()=>pa,step:()=>Ug,stridedSlice:()=>W4,string:()=>y7,sub:()=>xe,sum:()=>ot,tan:()=>B4,tanh:()=>ch,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Yn,tensor3d:()=>Gg,tensor4d:()=>V4,tensor5d:()=>U4,tensor6d:()=>G4,tensorScatterUpdate:()=>j4,tile:()=>Xr,topk:()=>q4,transpose:()=>Zs,truncatedNormal:()=>X4,unique:()=>K4,unsortedSegmentSum:()=>Y4,unstack:()=>Na,upperBound:()=>Z4,variable:()=>J4,where:()=>kr,whereAsync:()=>jg,zeros:()=>gn,zerosLike:()=>Ja});var eO=(e,t,a,n=Qt)=>{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`)}},tO=(e,t,a,n=Qt)=>{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(la(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(la(e.inputNames[0],t,a))];case"IsInf":return[n.isInf(la(e.inputNames[0],t,a))];case"IsFinite":return[n.isFinite(la(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 d5(e){return!(typeof e=="number"||e.some(t=>t<0))}function vd(e,t,a){let n=R1(e,a),r=!d5(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=R1(s.shape,n)}),!d5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function R1(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 aO=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(a!==r.dtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${r.dtype}`);Tn(t,r.shape,"TensorList shape mismatch: "),zn(r)}),this.idTensor=Ge(0),this.maxNumElements=n,zn(this.idTensor)}copy(){return new Yl([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,a=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(a!==-1&&this.tensors.length!==a)throw new Error(`Operation expected a list with ${a} elements but got a list with ${this.tensors.length} elements.`);Tn(e,this.elementShape,"TensorList shape mismatch: ");let n=wd(this.elementShape,this.tensors,e);return De(()=>{let r=this.tensors.map(s=>Q(s,n));return ca(r,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let a=wd(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Tn(n.shape,e,"TensorList shape mismatch: "),Q(n,a)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Tn(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");zn(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 Yl([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let a=0;athis.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);Tn(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=wd(this.elementShape,this.tensors,t);return Q(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.`);Tn(this.elementShape,t.shape,"TensorList shape mismatch: "),zn(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,a){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Tn(this.elementShape,a,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=wd(this.elementShape,this.tensors,a);return e.length===0?Ve([],[0].concat(n)):De(()=>{let r=e.map(s=>Q(this.tensors[s],n));return ca(r,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Tn(this.elementShape,t,"TensorList shape mismatch: ");let a=wd(this.elementShape,this.tensors,t);return this.size()===0?Ve([],[0].concat(a)):De(()=>{let n=this.tensors.map(r=>Q(r,a));return lt(n,0)})}};function HD(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);Tn(r,t,"TensorList shape mismatch: ");let s=Ra(e);return new Yl(s,t,n)}function jD(e,t,a,n){return new Yl([],e,t,n)}function qD(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 Yl([],a,e.dtype,n),i=Ra(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function XD(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 E1([...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=vd(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(i=>Q(i,r));return pa(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=vd(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 E1([],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=vd(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=vd(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 pa(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=vd(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 nO(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 Qh(s,t,n)}function rO(e,t,a,n){return new Qh([],e,t,n)}function sO(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 Qh([],a,e.dtype,n),i=Na(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function iO(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=N1(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[vr(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=vr(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[vr(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[vr(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[vr(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[vr(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 GD(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=qD(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=jD(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=HD(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=XD(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 i5(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=th(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 YD=(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=th(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}=i5(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}=i5(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=th(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=th(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`)}},ZD=(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 JD=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`)}},QD=(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`)}},eO=(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[vr(p)]}case"IdentityN":return k("x",e,t,a).map(p=>vr(p));case"Snapshot":let s=k("x",e,t,a);return[vr(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=Ra(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 tO(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`)}},nO=(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`)}},rO=(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`)}},sO=(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`)}},oO=(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`)}},lO=(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`)}},uO=(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`)}},dO=(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`)}},pO=(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`)}},cO=(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`)}},hO=(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 o5(e,t,a,n,r=De){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>VD(i,o,l));case"basic_math":return r(()=>UD(i,o,l));case"control":return KD(i,o,l);case"convolution":return r(()=>YD(i,o,l));case"creation":return r(()=>ZD(i,o,l));case"dynamic":return JD(i,o,l);case"evaluation":return r(()=>QD(i,o,l));case"image":return r(()=>nO(i,o,l));case"graph":return r(()=>eO(i,o,l));case"logical":return r(()=>rO(i,o,l));case"matrices":return r(()=>sO(i,o,l));case"normalization":return r(()=>iO(i,o,l));case"ragged":return r(()=>oO(i,o,l));case"reduction":return r(()=>lO(i,o,l));case"slice_join":return r(()=>uO(i,o,l));case"sparse":return r(()=>dO(i,o,l));case"spectral":return r(()=>pO(i,o,l));case"string":return r(()=>cO(i,o,l));case"transformation":return r(()=>hO(i,o,l));case"hash_table":return aO(i,o,l,n);case"custom":let u=P7(i.op);if(u&&u.customExecutor)return u.customExecutor(new BD(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 l5=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 u5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(d=>Za(d)[0]));n=n||[];let p=new Set(n.map(d=>Za(d.name)[0])),c=[...t];for(;c.length>0;){let d=c.pop();if((Bs(d)||vO(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 mO(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Za(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=fO(m,l);return gO(f,l),f}function fO(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 Xc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function gO(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 Xc(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new Xc(`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 Xc(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new Xc(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function yO(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>Bs(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;oe[a].map(n=>n.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}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(a=>{this._functionExecutorMap[a]=new R1(e.functions[a],this)})}getCompilationKey(e,t){let a=e.map(r=>r.name).sort(),n=t.map(r=>r.name).sort();return a.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(e,t){let a=u5(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:r,syncInputs:s}=a;if(r!=null)throw new Error(`This execution contains the node '${r.name}', which has the dynamic op '${r.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(n.length>0){let l=t.map(p=>p.name),u=Object.keys(e);throw new Error(`Cannot compute the outputs [${l}] from the provided inputs [${u}]. Missing the following inputs: [${n}]`)}let i=mO(this.graph,a),o=yO(i);return{orderedNodes:i,nodeLiveUntilMap:o}}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return zn(t),t}cloneTensorList(e){return e?e.map(t=>this.cloneAndKeepTensor(t)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,a])=>[t,this.cloneTensorList(a)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let a=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=a.map(c=>this.graph.nodes[Za(c)[0]]),r=t.map(c=>Za(c)[0]),s=new Set(r),i=r.map(c=>this.graph.nodes[c]);i.length===0&&(i=this._outputs);let o=this.getCompilationKey(n,i),l=this.compiledMap.get(o);l==null&&(l=this.compile(e,i),this.compiledMap.set(o,l));try{this.keepIntermediateTensors=W().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(c){this.keepIntermediateTensors=!1,console.warn(c.message)}let u={},p={};return De(()=>{let c=new l5(this.weightMap,u,p,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(g=>{let[y,x]=Za(g,c),A=[];A[x]=e[g],d[y]=A,this.keepIntermediateTensors&&(this.clonedTensorsMap[y]=this.cloneTensorList(A))});let h=this.getFrozenTensorIds(d),{orderedNodes:m,nodeLiveUntilMap:f}=l;for(let g of m){if(d[g.name])continue;let y=o5(g,d,c,this._resourceManager);if(v.isPromise(y))throw new Error(`The execution of the op '${g.op}' returned a promise. Please use model.executeAsync() instead.`);d[g.name]=y,this.keepIntermediateTensors&&(this.clonedTensorsMap[g.name]=this.cloneTensorList(y)),this.checkTensorForDisposalWithNodeLiveUntilInfo(g,d,c,h,s,f.get(g.name))}return this.parent==null&&c.dispose(h),t.map(g=>ua(g,d,c))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(a=>e[a]).map(a=>a.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,a,n,r,s,i){if(!(Bs(t)||s.has(e))){for(let o of a[e])o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length);for(let o of t.inputs){if(Bs(o))continue;let l=a5(o.name,a,n);if(l!=null)for(let u of l){if(!u||u.kept||r.has(u.id))continue;let p=i[u.id];p===1?(u.dispose(),delete i[u.id]):p!=null&&i[u.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,a,n,r,s){function i(o){return Bs(o)||r.has(o.name)}if(!(Bs(e)||s==null))for(let o of s){if(i(o))continue;let l=a5(o.name,t,a);for(let u of l)!u||u.kept||n.has(u.id)||u.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,a=!1,n={},r={}){this.disposeIntermediateTensors(),a||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=W().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(c){this.keepIntermediateTensors=!1,console.warn(c.message)}let s=new l5(this.weightMap,n,r,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,s,t,a),o=t.map(c=>ua(c,i,s)),l=o.map(c=>c.id),u=Object.keys(e).map(c=>e[c].id),p=new Set([...l,...u,...this.weightIds]);return Object.values(i).forEach(c=>{c.forEach(d=>{d&&!d.isDisposed&&!p.has(d.id)&&d.dispose()})}),this.parent==null&&s.dispose(p),o}async executeFunctionAsync(e,t,a){let n=e.reduce((r,s,i)=>(r[this.inputs[i].name]=s,r),{});return this._executeAsync(n,this.outputNodes,!0,t,a)}async executeWithControlFlow(e,t,a,n){let r=Object.keys(e),s=r.map(A=>this.graph.nodes[Za(A)[0]]),i=a.map(A=>Za(A)[0]),o=new Set(i),l=i.map(A=>this.graph.nodes[A]);l.length===0&&(l=this._outputs);let{usedNodes:u,missingInputs:p,dynamicNode:c,syncInputs:d}=u5(e,l,this.weightMap,this._initNodes),h=[...s,...this.graph.weights,...this._initNodes||[]].map(A=>({node:A,contexts:t.currentContext})),m=Object.assign({},this.weightMap);Object.keys(e).forEach(A=>{let[b,w]=Za(A),I=[];I[w]=e[A],m[b]=I});let f={},g=this.getFrozenTensorIds(m),y={};for(;h.length>0;){let A=this.processStack(s,h,t,m,y,g,o,f,u);await Promise.all(A)}c==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let x=l.filter(A=>!Bs(A)&&!ua(A.name,m,t)).map(A=>A.name);if(x.length>0){let A="";throw c!=null&&(A=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${x}] from the provided inputs [${r}]. Consider providing the following inputs: [${p}]. ${A}`)}return m}processStack(e,t,a,n,r,s,i,o,l){let u=[];for(;t.length>0;){let p=t.pop();a.currentContext=p.contexts;let c="";if(p.node.op==="Enter"&&k("isConstant",p.node,n,a)&&([c]=br(p.node.name,a)),n[p.node.name]==null){let d=o5(p.node,n,a,this._resourceManager);c||([c]=br(p.node.name,a));let h=a.currentContext;v.isPromise(d)?u.push(d.then(m=>(n[c]=m,this.keepIntermediateTensors&&(this.clonedTensorsMap[c]=this.cloneTensorList(m)),a.currentContext=h,this.checkTensorForDisposal(c,p.node,n,a,s,i,o),this.processChildNodes(p.node,t,a,n,r,l),m))):(n[c]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[c]=this.cloneTensorList(d)),this.checkTensorForDisposal(c,p.node,n,a,s,i,o),this.processChildNodes(p.node,t,a,n,r,l))}else this.processChildNodes(p.node,t,a,n,r,l)}return u}processChildNodes(e,t,a,n,r,s){e.children.forEach(i=>{let[o]=br(i.name,a);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!ua(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})):i.inputNames.every(l=>!!ua(l,n,a))&&(r[o]=!0,t.push({contexts:a.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let a=e[t],[n]=Za(t),r=this.graph.nodes[n];if(r.attrParams.shape&&r.attrParams.shape.value){let s=r.attrParams.shape.value,i=s.length===a.shape.length&&a.shape.every((o,l)=>s[l]===-1||s[l]===o);v.assert(i,()=>`The shape of dict['${r.name}'] provided in model.execute(dict) must be [${s}], but was [${a.shape}]`)}r.attrParams.dtype&&r.attrParams.dtype.value&&v.assert(a.dtype===r.attrParams.dtype.value,()=>`The dtype of dict['${r.name}'] provided in model.execute(dict) must be ${r.attrParams.dtype.value}, but was ${a.dtype}`)})}mapInputs(e){var t,a;let n={};for(let r in e){let s=(a=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||a===void 0?void 0:a[r];s!=null?n[s.name]=e[r]:n[r]=e[r]}return n}checkInputs(e){let t=Object.keys(e).filter(a=>{let[n]=Za(a);return this.graph.nodes[n]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>{var a,n;let r=(n=(a=this._signature)===null||a===void 0?void 0:a.outputs)===null||n===void 0?void 0:n[t];return r!=null?r.name:t},{})}checkOutputs(e){e.forEach(t=>{let[a]=Za(t);if(!this.graph.nodes[a])throw new Error(`The output '${t}' is not found in the graph`)})}},kO=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]}},IO="?tfjs-format=file",SO="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=Xn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new kO}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return v.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,a=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(a=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}this.signature=a,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new R1(n5.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=n5.Instance.transformGraph(e.modelInitializer);this.initializer=new R1(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 mt?[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 mt)&&!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 o3(e,t={},a=Xn){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=TO(e));let n=new Xp(e,t,a);return await n.load(),n}function CO(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=Xn.getWeightSpecs(n.weightsManifest),i=Xn.getModelArtifactsForJSONSync(n,s,r);t=Xn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Xn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new Xp(t);return a.load(),a}function TO(e){return e.endsWith("/")||(e=e+"/"),`${e}${SO}${IO}`}var NO="4.11.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 RO=En.whereImpl,Qh=class extends au{nextDataId(){return Qh.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ip(this,It())}write(e,t,a){this.firstUse&&(this.firstUse=!1,W().get("IS_NODE")&&S.warn(` + ${n}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=R1(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=>la(r,t,a)!==void 0);if(n){let r=la(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 aO(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=sO(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=rO(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=nO(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=iO(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 p5(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=eh(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 lO=(e,t,a,n=Qt)=>{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=eh(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}=p5(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}=p5(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=eh(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=eh(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`)}},uO=(e,t,a,n=Qt)=>{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 Y2(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 dO=async(e,t,a,n,r=Qt)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Y2(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}=Y2(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}=Y2(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`)}},pO=(e,t,a,n=Qt)=>{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`)}},cO=(e,t,a,n=Qt)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[la(e.name,t,a)||r];case"Placeholder":return[la(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 hO(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`)}},fO=(e,t,a,n=Qt)=>{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`)}},gO=(e,t,a,n=Qt)=>{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`)}},yO=(e,t,a,n=Qt)=>{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`)}},xO=(e,t,a,n=Qt)=>{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`)}},AO=(e,t,a,n=Qt)=>{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`)}},bO=(e,t,a,n=Qt)=>{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`)}},vO=(e,t,a,n=Qt)=>{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`)}},wO=(e,t,a,n=Qt)=>{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`)}},kO=(e,t,a,n=Qt)=>{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`)}},IO=(e,t,a,n=Qt)=>{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`)}},SO=(e,t,a,n=Qt)=>{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 c5(e,t,a,n,r=De){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>eO(i,o,l));case"basic_math":return r(()=>tO(i,o,l));case"control":return oO(i,o,l);case"convolution":return r(()=>lO(i,o,l));case"creation":return r(()=>uO(i,o,l));case"dynamic":return dO(i,o,l);case"evaluation":return r(()=>pO(i,o,l));case"image":return r(()=>fO(i,o,l));case"graph":return r(()=>cO(i,o,l));case"logical":return r(()=>gO(i,o,l));case"matrices":return r(()=>yO(i,o,l));case"normalization":return r(()=>xO(i,o,l));case"ragged":return r(()=>AO(i,o,l));case"reduction":return r(()=>bO(i,o,l));case"slice_join":return r(()=>vO(i,o,l));case"sparse":return r(()=>wO(i,o,l));case"spectral":return r(()=>kO(i,o,l));case"string":return r(()=>IO(i,o,l));case"transformation":return r(()=>SO(i,o,l));case"hash_table":return mO(i,o,l,n);case"custom":let u=V7(i.op);if(u&&u.customExecutor)return u.customExecutor(new QD(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 h5=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 m5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(d=>Ka(d)[0]));n=n||[];let p=new Set(n.map(d=>Ka(d.name)[0])),c=[...t];for(;c.length>0;){let d=c.pop();if((Vs(d)||_O(d)||$O(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 CO(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Ka(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=TO(m,l);return NO(f,l),f}function TO(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 qc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function NO(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 qc(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new qc(`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 qc(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new qc(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function RO(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>Vs(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 d6(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=m5(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=CO(this.graph,n),l=RO(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[Ka(d)[0]]),s=a.map(d=>Ka(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 h5(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]=Ka(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=c5(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=>la(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(!(Vs(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(Vs(l))continue;let u=o5(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 Vs(l)||s.has(l.name)}if(!(Vs(t)||i==null))for(let l of i){if(o(l))continue;let u=o5(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 h5(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=>la(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[Ka(b)[0]]),o=n.map(b=>Ka(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}=m5(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]=Ka(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=>!Vs(b)&&!la(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=c5(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=>!!la(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})):o.inputNames.every(u=>!!la(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]=Ka(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]=Ka(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]=Ka(a);if(!this.graph.nodes[n])throw new Error(`The output '${a}' is not found in the graph`)})}},FO=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]}},DO="?tfjs-format=file",OO="model.json",jp=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=Xn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new FO}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return v.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,a=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(a=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}this.signature=a,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new f5(l5.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=l5.Instance.transformGraph(e.modelInitializer);this.initializer=new f5(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 gt?[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 gt)&&!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 u3(e,t={},a=Xn){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=LO(e));let n=new jp(e,t,a);return await n.load(),n}function zO(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=Xn.getWeightSpecs(n.weightsManifest),i=Xn.getModelArtifactsForJSONSync(n,s,r);t=Xn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Xn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new jp(t);return a.load(),a}function LO(e){return e.endsWith("/")||(e=e+"/"),`${e}${OO}${DO}`}var WO="4.14.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 BO=Rn.whereImpl,d3=class p6 extends au{nextDataId(){return p6.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new rp(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 n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:a,refCount:1}),n}makeTensorInfo(e,t,a){let n;if(t==="string"&&a!=null&&a.length>0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return{dataId:n,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,a,n,r){this.data.set(e,{values:t,dtype:n,refCount:r})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:a}=this.data.get(e);if(t==="complex64"){let n=this.readSync(a.real.dataId),r=this.readSync(a.imag.dataId);return S.mergeRealAndImagArrays(n,r)}return v.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return $e(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return $e(e.shape,e.dtype,t)}makeOutput(e,t,a){return It().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:a}=this.data.get(e);a!=null&&(this.disposeData(a.real.dataId,!0),this.disposeData(a.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){Ie([e],"where");let t=this.readSync(e.dataId);return RO(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Qh.nextDataId=0;var e0={};Ze(e0,{addImpl:()=>n6,bincountImpl:()=>u3,bincountReduceImpl:()=>r6,bitwiseAndImpl:()=>s6,castImpl:()=>a6,ceilImpl:()=>i6,concatImpl:()=>d3,equalImpl:()=>o6,expImpl:()=>u6,expm1Impl:()=>p6,floorDivImpl:()=>h6,floorImpl:()=>c6,gatherNdImpl:()=>m6,gatherV2Impl:()=>f6,greaterEqualImpl:()=>y6,greaterImpl:()=>g6,lessEqualImpl:()=>A6,lessImpl:()=>x6,linSpaceImpl:()=>b6,logImpl:()=>v6,maxImpl:()=>w6,maximumImpl:()=>k6,minimumImpl:()=>I6,multiplyImpl:()=>p3,negImpl:()=>S6,notEqualImpl:()=>C6,prodImpl:()=>T6,raggedGatherImpl:()=>N6,raggedRangeImpl:()=>R6,raggedTensorToTensorImpl:()=>E6,rangeImpl:()=>h3,rsqrtImpl:()=>M6,scatterImpl:()=>Hs,sigmoidImpl:()=>Tz,simpleAbsImpl:()=>t6,sliceImpl:()=>xh,sparseFillEmptyRowsImpl:()=>P6,sparseReshapeImpl:()=>$6,sparseSegmentReductionImpl:()=>m3,sqrtImpl:()=>Ez,squaredDifferenceImpl:()=>F6,staticRegexReplaceImpl:()=>D6,stridedSliceImpl:()=>O6,stringNGramsImpl:()=>f3,stringSplitImpl:()=>g3,stringToHashBucketFastImpl:()=>y3,subImpl:()=>z6,tileImpl:()=>L6,topKImpl:()=>B6,transposeImpl:()=>c3,uniqueImpl:()=>A3});function t6(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=t6(r),a.makeOutput(n,t.shape,t.dtype)},MO={kernelName:ru,backendName:"cpu",kernelFunc:EO};function Ft(e){return(t,a,n,r,s)=>{let i=S.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=S.getBroadcastDims(t,i),g=S.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 Qa(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}var _O={kernelName:pp,backendName:"cpu",kernelFunc:Qa};function yh(e,t,a="float32"){if(a==="complex64"){let r=yh(e,t,"float32"),s=yh(e,t,"float32");return Qa({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function tr(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 PO={kernelName:Gi,backendName:"cpu",kernelFunc:tr};function Zs(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 $O={kernelName:kp,backendName:"cpu",kernelFunc:Zs};function a6(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]=Ft((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 as(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tr({inputs:{x:r},backend:a});let p=yh(a,r.shape,r.dtype),c=as({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=Qa({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=Zs({inputs:{input:r},backend:a}),c=as({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=tr({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]=a6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var FO={kernelName:yi,backendName:"cpu",kernelFunc:as};function Yt(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"?S.fromUint8ToStringArray(u):u,d=i.dtype==="string"?S.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=as({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=as({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),P=Qa({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),P}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 l3(e){return(t,a,n,r,s,i)=>{let o=S.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=S.getBroadcastDims(t,o),m=S.getBroadcastDims(a,o),f=S.mergeRealAndImagArrays(n,r),g=S.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[C]=0);let N=v.locToIndex(T,y,x),M=I.slice(-A);m.forEach(C=>M[C]=0);let P=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[P*2],g[P*2+1]);c[w]=E.real,d[w]=E.imag}return[c,d,o]}}var n6=Ft((e,t)=>e+t),DO=l3((e,t,a,n)=>({real:e+a,imag:t+n})),Zl=Yt(rs,n6,DO),OO={kernelName:rs,backendName:"cpu",kernelFunc:Zl};function u3(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function r6(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 s6=Ft((e,t)=>e&t),zO=Yt(uu,s6),LO={kernelName:uu,backendName:"cpu",kernelFunc:zO};function lr(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=S.fromUint8ToStringArray(l)}else u=l;let p=a||i.dtype,c=t(u,p,r);return o.makeTensorInfo(i.shape,p,c)}}var i6=lr(e=>Math.ceil(e)),WO=ds(xi,i6),BO={kernelName:xi,backendName:"cpu",kernelFunc:WO};function d3(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?S.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),l6=Yt($i,o6,null,"bool"),VO={kernelName:$i,backendName:"cpu",kernelFunc:l6},u6=lr(e=>Math.exp(e)),d6=ds(Fi,u6,"float32"),UO={kernelName:Fi,backendName:"cpu",kernelFunc:d6},p6=lr(e=>Math.expm1(e)),GO=ds(Di,p6),HO={kernelName:Di,backendName:"cpu",kernelFunc:GO},c6=lr(e=>Math.floor(e)),jO=ds(zi,c6),qO={kernelName:zi,backendName:"cpu",kernelFunc:jO},h6=Ft((e,t)=>Math.floor(e/t)),XO=Yt(Li,h6,null,"int32"),KO={kernelName:Li,backendName:"cpu",kernelFunc:XO};function m6(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),YO=Yt(Vi,g6,null,"bool"),ZO={kernelName:Vi,backendName:"cpu",kernelFunc:YO},y6=Ft((e,t)=>e>=t?1:0),JO=Yt(Ui,y6,null,"bool"),QO={kernelName:Ui,backendName:"cpu",kernelFunc:JO},x6=Ft((e,t)=>ee<=t?1:0),az=Yt(Yi,A6,null,"bool"),nz={kernelName:Yi,backendName:"cpu",kernelFunc:az};function b6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),rz=ds(Ji,v6),sz={kernelName:Ji,backendName:"cpu",kernelFunc:rz};function w6(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 k6=Ft((e,t)=>Math.max(e,t)),iz=Yt(so,k6),oz={kernelName:so,backendName:"cpu",kernelFunc:iz},I6=Ft((e,t)=>Math.min(e,t)),lz=Yt(uo,I6),uz={kernelName:uo,backendName:"cpu",kernelFunc:lz},p3=Ft((e,t)=>e*t),dz=l3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),t0=Yt(mo,p3,dz),pz={kernelName:mo,backendName:"cpu",kernelFunc:t0};function S6(e,t,a){let n=v.createScalarValue(-1,a);return p3([],t,n,e,a)}function cz(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=S6(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var hz={kernelName:wu,backendName:"cpu",kernelFunc:cz},C6=Ft((e,t)=>e!==t?1:0),mz=Yt(fo,C6,null,"bool"),fz={kernelName:fo,backendName:"cpu",kernelFunc:mz};function c3(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let p=0;pa.disposeIntermediateTensorInfo(x)),a.makeTensorInfo(y,g,m)}var xz={kernelName:wo,backendName:"cpu",kernelFunc:yz};function Az(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 bz(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 vz(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);bz(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 d5(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>p5)throw new Error(`Requires ((limit - start) / delta) <= ${p5}`);d[g+1]=d[g]+b}let h=d[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;ga&&(a=r)}return a}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let a=0,n=e[0],r=0;for(let s=1;s"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,a,n){let r=e.length,s=[];for(let i=0;i0&&s.length!==e[r-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,a,n){let r=e.length,s=[];if(r===0)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${p} which is not less than ${t.length}`);l=t[p]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,a,n){let r=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case Sn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,a,n);case Sn.ROW_SPLITS:if(r.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${r.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(r,t,a,n);default:throw new Error(`Unsupported partition type: ${Sn[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case Sn.FIRST_DIM_SIZE:return e[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[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),a=new Array(this.raggedRank+1);a[a.length-1]=1;for(let s=a.length-2;s>=0;--s)a[s]=a[s+1]*t[s+1];let n=h5(t,!1),r=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(n));if(a[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,a[0],t[0]);for(let i=1;i<=this.raggedRank;++i)s=this.calculateOutputIndex(i-1,s,a[i],t[i]);this.setOutput(this.raggedRank,s,r,n)}return[n,r]}setOutput(e,t,a,n){if(a.length===0)return;let r=this.values,s=a,i=n.slice();i=i.slice(e+1);let o=v.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&u.length!==1){let h=this.defaultValueShape;De(()=>{let m=Q(u,h);u=Ll(m,i).dataSync()})}let p=0,c=0,d=0;for(let h=0;h<=l;++h){let m=h=l){let f=a.length;m=Math.floor(f/o)}if(m>d)if(this.defaultValue.length===1)s.subarray(d*o,m*o).fill(this.defaultValue[0]),d=m;else for(;m>d;){let f=s.slice(d*o);c5(f,u,o),++d}m<0?(p=h+1,c=d):(p=h,c=d,d=c+1)}}};function c5(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 E6(e,t,a,n,r,s,i,o,l,u){return new E1(e,t,a,n,r,s,i,o,l,u).compute()}function h3(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),Sz=ds(Eo,M6),Cz={kernelName:Eo,backendName:"cpu",kernelFunc:Sz};function Hs(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 Ut?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))),_6=ct(zo,e=>1/(1+Math.exp(-e))),Nz={kernelName:zo,backendName:"cpu",kernelFunc:_6};function xh(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"?S.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"?S.fromStringArrayToUint8(p.values):p.values}function Js(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=xh(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var Rz={kernelName:Mu,backendName:"cpu",kernelFunc:Js};function P6(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(S.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(S.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(S.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(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),Mz=ct(Wo,e=>Math.sqrt(e)),_z={kernelName:Wo,backendName:"cpu",kernelFunc:Mz},F6=Ft((e,t)=>{let a=e-t;return a*a}),Pz=Yt(Go,F6),$z={kernelName:Go,backendName:"cpu",kernelFunc:Pz},D6=lr((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),Fz=ds(Cp,D6),Dz={kernelName:Cp,backendName:"cpu",kernelFunc:Fz};function O6(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,d=1;this.createNGrams(e,l,i,u,d,c)}}return[i,s]}};function f3(e,t,a,n,r,s,i,o){return new Oz(a,n,r,s,i,o).compute(e,t)}function zz(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),Lz=l3((e,t,a,n)=>({real:e-a,imag:t-n})),x3=Yt(jo,z6,Lz),Wz={kernelName:jo,backendName:"cpu",kernelFunc:x3};function L6(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 W6(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));W6(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Sd(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Sd(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 B6(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 Qh,1);var V6=ct(_i,e=>e>=0?e:Math.exp(e)-1),Vz={kernelName:_i,backendName:"cpu",kernelFunc:V6};function U6(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 G6(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]=Gz(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var Hz={kernelName:vo,backendName:"cpu",kernelFunc:G6},H6=ct(Io,e=>Math.max(0,e)),jz={kernelName:Io,backendName:"cpu",kernelFunc:H6},j6=ct(To,e=>Math.min(Math.max(0,e),6)),qz={kernelName:To,backendName:"cpu",kernelFunc:j6};function Ah(e,t,a,n,r){if(a==="linear")return tr({inputs:{x:t},backend:e});if(a==="relu")return H6({inputs:{x:t},backend:e});if(a==="elu")return V6({inputs:{x:t},backend:e});if(a==="relu6")return j6({inputs:{x:t},backend:e});if(a==="prelu")return G6({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return U6({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return _6({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function At(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 Xz={kernelName:Tu,backendName:"cpu",kernelFunc:At};function q6(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=Qo.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=At({inputs:{x:r},backend:a,attrs:{shape:A}}),I=At({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],P=Math.max(g,y),E=a.data.get(w.dataId).values,C=a.data.get(I.dataId).values,_=v.computeStrides(w.shape),O=v.computeStrides(I.shape),[B,F,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([P,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;eeMath.acos(e)),Qz={kernelName:ri,backendName:"cpu",kernelFunc:Jz},eL=ct(si,e=>Math.acosh(e)),tL={kernelName:si,backendName:"cpu",kernelFunc:eL};function aL(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 uL={kernelName:su,backendName:"cpu",kernelFunc:lL};function dL(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=S.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ga({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=S.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],S.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,c]=S.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 pL={kernelName:iu,backendName:"cpu",kernelFunc:dL},cL=ct(ui,e=>Math.asin(e)),hL={kernelName:ui,backendName:"cpu",kernelFunc:cL},mL=ct(di,e=>Math.asinh(e)),fL={kernelName:di,backendName:"cpu",kernelFunc:mL},gL=ct(pi,e=>Math.atan(e)),yL={kernelName:pi,backendName:"cpu",kernelFunc:gL},xL=Ft((e,t)=>Math.atan2(e,t)),AL=Yt(hi,xL),bL={kernelName:hi,backendName:"cpu",kernelFunc:AL},vL=ct(ci,e=>Math.atanh(e)),wL={kernelName:ci,backendName:"cpu",kernelFunc:vL};function b3(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=C+_*A+T;g[H]=s==="avg"?G/q:U}}}return f}function X6(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;gP&&(P=F,r?E=s?((g*n.inHeight+C)*n.inWidth+O)*n.inChannels+y:(C*n.inWidth+O)*n.inChannels+y:E=_*d+B)}}i.set(E,g,x,I,y)}}return i}function K6(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=yt:s==="avg"&&(Ce+=yt,Re++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Le=ie+C;b[Le]=s==="avg"?Ce/Math.max(Re,1):be}}}}return A}function kL(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=F*p*c+G*p+H)}}}a.set(O,f,y,w,M,g)}}}return a}function IL(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(S.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=S.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=tr({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=b3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var SL={kernelName:mi,backendName:"cpu",kernelFunc:IL};function CL(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=S.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=K6(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var TL={kernelName:ou,backendName:"cpu",kernelFunc:CL};function NL(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=S.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,P=$e(s.shape,"float32"),E=1/(m*f*g),C=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=C.get(_,X,ee,ie,O);V+=be}}}P.set(V*E,_,B,F,U,O)}return a.makeTensorInfo(P.shape,P.dtype,P.values)}var RL={kernelName:dp,backendName:"cpu",kernelFunc:NL};function EL(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=S.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,P);B+=H}}w.set(B*I,M,E,C,P)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var ML={kernelName:up,backendName:"cpu",kernelFunc:EL};function _L(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 PL={kernelName:Wi,backendName:"cpu",kernelFunc:_L};function $L(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=S.getReshaped(r.shape,s,o),u=S.getPermuted(l.length,s.length),p=S.getReshapedPermuted(r.shape,s,o),c=S.getSliceBeginCoords(i,s.length),d=S.getSliceSize(p,i,s.length),h=At({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Ga({inputs:{x:h},backend:a,attrs:{perm:u}}),f=At({inputs:{x:m},backend:a,attrs:{shape:p}}),g=Js({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var FL={kernelName:lu,backendName:"cpu",kernelFunc:$L};function DL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,u=u3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var OL={kernelName:gi,backendName:"cpu",kernelFunc:DL};function zL(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=S.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var LL={kernelName:du,backendName:"cpu",kernelFunc:zL},WL=ct(ss,(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);S.assertParamsConsistent(i,s);let o=S.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 tr({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>Zs({inputs:{input:b},backend:a})),g=l.map(b=>Jl({inputs:{input:b},backend:a})),y=Ql({inputs:f,backend:a,attrs:{axis:s}}),x=Ql({inputs:g,backend:a,attrs:{axis:s}}),A=Qa({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 At({inputs:{x:f},backend:a,attrs:{shape:g}})}),p=u.map(f=>({vals:a.data.get(f.dataId).values,shape:f.shape}));o=S.computeOutShape(u.map(f=>f.shape),1);let c=u[0].shape[0]===1,d=d3(p,o,t[0].dtype,c),h=S.computeOutShape(l.map(f=>f.shape),s),m=a.makeTensorInfo(h,t[0].dtype,d);return u.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var HL={kernelName:pu,backendName:"cpu",kernelFunc:Ql};function Y6(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=S.convertConv2DDataFormat(l),d=S.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 Ut(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,P=A?1:w[1],E=b.strides[0],C=A?b.strides[1]:b.strides[2],_=A?b.strides[2]:1,O=A?1:b.strides[1],B=a.data.get(r.dataId).values,F=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+Xe*M,st=gt;for(let it=0;it=u.inDepth)continue;let G=F*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 Xe=ee+Re*M[2],gt=ge+Le*u.inChannels,dt=Xe;for(let st=0;stMath.cos(e)),rW={kernelName:ki,backendName:"cpu",kernelFunc:nW},sW=ct(Ii,e=>Math.cosh(e)),iW={kernelName:Ii,backendName:"cpu",kernelFunc:sW};function oW(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,B=g>1?(C-P)*(d-1)/(g-1):0;for(let F=0;F1?M*(c-1)+F*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?P*(d-1)+V*B:.5*(P+C)*(d-1);if(Z<0||Z>d-1){for(let ge=0;ge1?P*(d-1)+G*B:.5*(P+C)*(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=S.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 Ut(h.outShape,r.dtype),T=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,M=I.values;for(let P=0;P=h.inHeight)continue;let G=F*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:P}=S.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape(P),C=P.length,_=v.getArrayFromDType(n.dtype,E);for(let O=0;O=0&&X=0&&eeH&&(H=be)}}}let V=v.locToIndex([O,B,U,q],C,v.computeStrides(P));_[V]=H}}}return{dataId:l.write(v.toTypedArray(_,n.dtype),P,n.dtype),shape:P,dtype:n.dtype}}},SW={kernelName:Ul,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}=S.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${Ul}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let P=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let C=0;C=0&&Z=0&&reG&&(G=ee,q=V,H=X)}}}E[q][H][U]+=P[C][_][B][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},CW={kernelName:Vl,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}=S.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${Vl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let P=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let C=0;C=0&&Z=0&&reG&&(G=ee,q=Z,H=re)}}}E[C][q][H][U]+=P[C][_][B][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function TW(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 NW={kernelName:gp,backendName:"cpu",kernelFunc:TW};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=as({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=tr({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=S.getAxesPermutation(u,l),c=u,d=o;p!=null&&(d=Ga({inputs:{x:o},backend:a,attrs:{perm:p}}),c=S.getInnerMostAxes(c.length,l)),S.assertAxesAreInnerMostDims("sum",c,d.shape.length);let[h,m]=S.computeOutAndReduceShapes(d.shape,c),f=S.upcastType(d.dtype,"int32"),g=yh(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 MW={kernelName:yp,backendName:"cpu",kernelFunc:EW};function _W(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 PW={kernelName:fu,backendName:"cpu",kernelFunc:_W},$W=S.ERF_P,FW=S.ERF_A1,DW=S.ERF_A2,OW=S.ERF_A3,zW=S.ERF_A4,LW=S.ERF_A5,WW=ct(Pi,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+$W*a);return t*(1-((((LW*n+zW)*n+OW)*n+DW)*n+FW)*n*Math.exp(-a*a))}),BW={kernelName:Pi,backendName:"cpu",kernelFunc:WW};function bh(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),At({inputs:{x:r},backend:a,attrs:{shape:o}})}var VW={kernelName:gu,backendName:"cpu",kernelFunc:bh},UW=Ft((e,t)=>e/t),v3=Yt(Mi,UW),M1={kernelName:Mi,backendName:"cpu",kernelFunc:v3};function J6(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=S.segment_util.collectGatherOpShapeInfo(r,s,l,c),m=At({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=At({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=f6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var sB={kernelName:xu,backendName:"cpu",kernelFunc:rB};function iB(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=At({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=J6(o,!0,a),u=At({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var oB={kernelName:Ap,backendName:"cpu",kernelFunc:iB},lB=ct(Hi,e=>Number.isFinite(e)?1:0,"bool"),uB={kernelName:Hi,backendName:"cpu",kernelFunc:lB},dB=ct(ji,e=>Math.abs(e)===1/0?1:0,"bool"),pB={kernelName:ji,backendName:"cpu",kernelFunc:dB},cB=ct(qi,e=>Number.isNaN(e)?1:0,"bool"),hB={kernelName:qi,backendName:"cpu",kernelFunc:cB};function mB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=b6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var fB={kernelName:Zi,backendName:"cpu",kernelFunc:mB},gB=ct(Qi,e=>Math.log1p(e)),yB={kernelName:Qi,backendName:"cpu",kernelFunc:gB},xB=Ft((e,t)=>e&&t),AB=Yt(eo,xB,null,"bool"),bB={kernelName:eo,backendName:"cpu",kernelFunc:AB},vB=ct(to,e=>e?0:1,"bool"),wB={kernelName:to,backendName:"cpu",kernelFunc:vB},kB=Ft((e,t)=>e||t),IB=Yt(ao,kB,null,"bool"),SB={kernelName:ao,backendName:"cpu",kernelFunc:IB};function CB(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=S.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=tr({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=b3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var _B={kernelName:io,backendName:"cpu",kernelFunc:MB};function PB(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=S.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=K6(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var $B={kernelName:bu,backendName:"cpu",kernelFunc:PB};function FB(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=S.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),d=kL(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"),P=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,C),ie=H*b*w+Z*w+re,be=ge===ie?1:0;if(be===0)continue;let Ce=P.get(E,V,X,ee,C);q+=Ce*be}}}M.set(q,E,_,O,B,C)}return a.makeTensorInfo(M.shape,M.dtype,M.values)}var DB={kernelName:wp,backendName:"cpu",kernelFunc:FB};function OB(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=S.computePool2DInfo(o.shape,l,u,1,p,c),h=a.data.get(o.dataId).values,m=$e(d.outShape,o.dtype,X6(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 P=0;P=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(P,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get(P,G,H,E);F+=re*X}}T.set(F,P,C,_,E)}return a.makeTensorInfo(T.shape,T.dtype,T.values)}var zB={kernelName:vp,backendName:"cpu",kernelFunc:OB};function LB(e,t,a,n,r){let s=v.computeStrides(t),i=b3(e,t,a,s,r,"max"),o=X6(e,t,a,r,!0,n);return[i.values,o.values]}var WB={kernelName:vu,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=S.computePool2DInfo(n.shape,r,s,[1,1],i),[c,d]=LB(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 BB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=S.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));p.push(c);let d=as({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=v3({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 VB={kernelName:oo,backendName:"cpu",kernelFunc:BB};function UB(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=S.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Ga({inputs:{x:r},backend:a,attrs:{perm:u}}),l=S.getInnerMostAxes(l.length,r.shape.length)),S.assertAxesAreInnerMostDims("min",l,p.shape.length);let[c,d]=S.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 jB={kernelName:po,backendName:"cpu",kernelFunc:HB},qB=Ft((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),XB=Yt(co,qB),KB={kernelName:co,backendName:"cpu",kernelFunc:XB},YB=tu(sA());function ev(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=Q6({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=S.expandShapeToKeepDim(u.shape,l),c=At({inputs:{x:u},backend:a,attrs:{shape:p}}),d=x3({inputs:{a:r,b:c},backend:a}),h=d6({inputs:{x:d},backend:a}),m=Kp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=At({inputs:{x:m},backend:a,attrs:{shape:p}}),g=v3({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 ZB={kernelName:Vo,backendName:"cpu",kernelFunc:ev};function JB(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:ev({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=bh({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Ql({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var hV={kernelName:Su,backendName:"cpu",kernelFunc:av};function mV(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 nv={kernelName:Ao,backendName:"cpu",kernelFunc:mV},fV=Ft((e,t)=>Math.pow(e,t)),gV=Yt(bo,fV),yV={kernelName:bo,backendName:"cpu",kernelFunc:gV};function xV(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]=N6(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 AV={kernelName:Mh,backendName:"cpu",kernelFunc:xV};function bV(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]=R6(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 vV={kernelName:_h,backendName:"cpu",kernelFunc:bV};function wV(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]=E6(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var kV={kernelName:Ph,backendName:"cpu",kernelFunc:wV};function IV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=h3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var SV={kernelName:Cu,backendName:"cpu",kernelFunc:IV},CV=ct(ko,e=>1/e),TV={kernelName:ko,backendName:"cpu",kernelFunc:CV};function NV(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=P+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));B===Re&&(H+=g[be+q])}}f[F+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var FV={kernelName:Nu,backendName:"cpu",kernelFunc:$V};function DV(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 tr({inputs:{x:r},backend:a});let l=new Ut(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 OV={kernelName:No,backendName:"cpu",kernelFunc:DV},zV={kernelName:Zo,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]=S.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}),WV={kernelName:Ro,backendName:"cpu",kernelFunc:LV};function BV(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}=S.calculateShapes(s,r,i),d=!0,h=a.bufferSync(r),m=a.bufferSync(s),f=Hs(h,m,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,f.dtype,f.values)}var VV={kernelName:Mo,backendName:"cpu",kernelFunc:BV};function UV(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?ZV*e:YV*(Math.exp(e)-1)),QV={kernelName:$o,backendName:"cpu",kernelFunc:JV},eU=ct(Oo,e=>e<0?-1:e>0?1:0),tU={kernelName:Oo,backendName:"cpu",kernelFunc:eU},aU=ct(Fo,e=>Math.sin(e)),nU={kernelName:Fo,backendName:"cpu",kernelFunc:aU},rU=ct(Do,e=>Math.sinh(e)),sU={kernelName:Do,backendName:"cpu",kernelFunc:rU},iU=11920928955078125e-23,m5=Math.log(iU)+2,oU=ct(Lo,e=>{let t=e>-m5,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 BO(t.shape,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};d3.nextDataId=0;var e0={};Ze(e0,{addImpl:()=>m6,bincountImpl:()=>c3,bincountReduceImpl:()=>f6,bitwiseAndImpl:()=>g6,castImpl:()=>h6,ceilImpl:()=>y6,concatImpl:()=>h3,equalImpl:()=>x6,expImpl:()=>b6,expm1Impl:()=>w6,floorDivImpl:()=>I6,floorImpl:()=>k6,gatherNdImpl:()=>S6,gatherV2Impl:()=>C6,greaterEqualImpl:()=>N6,greaterImpl:()=>T6,lessEqualImpl:()=>E6,lessImpl:()=>R6,linSpaceImpl:()=>M6,logImpl:()=>P6,maxImpl:()=>_6,maximumImpl:()=>$6,minimumImpl:()=>F6,multiplyImpl:()=>m3,negImpl:()=>D6,notEqualImpl:()=>O6,prodImpl:()=>z6,raggedGatherImpl:()=>L6,raggedRangeImpl:()=>W6,raggedTensorToTensorImpl:()=>B6,rangeImpl:()=>g3,rsqrtImpl:()=>V6,scatterImpl:()=>js,sigmoidImpl:()=>Wz,simpleAbsImpl:()=>c6,sliceImpl:()=>xh,sparseFillEmptyRowsImpl:()=>G6,sparseReshapeImpl:()=>H6,sparseSegmentReductionImpl:()=>y3,sqrtImpl:()=>Uz,squaredDifferenceImpl:()=>j6,staticRegexReplaceImpl:()=>q6,stridedSliceImpl:()=>X6,stringNGramsImpl:()=>x3,stringSplitImpl:()=>A3,stringToHashBucketFastImpl:()=>b3,subImpl:()=>K6,tileImpl:()=>Y6,topKImpl:()=>J6,transposeImpl:()=>f3,uniqueImpl:()=>w3});function c6(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=c6(r),a.makeOutput(n,t.shape,t.dtype)},UO={kernelName:ru,backendName:"cpu",kernelFunc:VO};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 Za(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 GO={kernelName:up,backendName:"cpu",kernelFunc:Za};function yh(e,t,a="float32"){if(a==="complex64"){let r=yh(e,t,"float32"),s=yh(e,t,"float32");return Za({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function tr(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 HO={kernelName:Hi,backendName:"cpu",kernelFunc:tr};function Js(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:vp,backendName:"cpu",kernelFunc:Js};function h6(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 rs(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tr({inputs:{x:r},backend:a});let p=yh(a,r.shape,r.dtype),c=rs({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=Za({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=Js({inputs:{input:r},backend:a}),c=rs({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=tr({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]=h6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var qO={kernelName:xi,backendName:"cpu",kernelFunc:rs};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=rs({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=rs({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),P=Za({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),P}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 p3(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 P=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[P*2],g[P*2+1]);c[w]=E.real,d[w]=E.imag}return[c,d,o]}}var m6=$t((e,t)=>e+t),XO=p3((e,t,a,n)=>({real:e+a,imag:t+n})),Zl=Kt(is,m6,XO),KO={kernelName:is,backendName:"cpu",kernelFunc:Zl};function c3(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 f6(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 g6=$t((e,t)=>e&t),YO=Kt(uu,g6),ZO={kernelName:uu,backendName:"cpu",kernelFunc:YO};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 y6=or(e=>Math.ceil(e)),JO=cs(Ai,y6),QO={kernelName:Ai,backendName:"cpu",kernelFunc:JO};function h3(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),A6=Kt(Fi,x6,null,"bool"),ez={kernelName:Fi,backendName:"cpu",kernelFunc:A6},b6=or(e=>Math.exp(e)),v6=cs(Di,b6,"float32"),tz={kernelName:Di,backendName:"cpu",kernelFunc:v6},w6=or(e=>Math.expm1(e)),az=cs(Oi,w6),nz={kernelName:Oi,backendName:"cpu",kernelFunc:az},k6=or(e=>Math.floor(e)),rz=cs(Li,k6),sz={kernelName:Li,backendName:"cpu",kernelFunc:rz},I6=$t((e,t)=>Math.floor(e/t)),iz=Kt(Wi,I6,null,"int32"),oz={kernelName:Wi,backendName:"cpu",kernelFunc:iz};function S6(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),lz=Kt(Ui,T6,null,"bool"),uz={kernelName:Ui,backendName:"cpu",kernelFunc:lz},N6=$t((e,t)=>e>=t?1:0),dz=Kt(Gi,N6,null,"bool"),pz={kernelName:Gi,backendName:"cpu",kernelFunc:dz},R6=$t((e,t)=>ee<=t?1:0),mz=Kt(Zi,E6,null,"bool"),fz={kernelName:Zi,backendName:"cpu",kernelFunc:mz};function M6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),gz=cs(Qi,P6),yz={kernelName:Qi,backendName:"cpu",kernelFunc:gz};function _6(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 $6=$t((e,t)=>Math.max(e,t)),xz=Kt(io,$6),Az={kernelName:io,backendName:"cpu",kernelFunc:xz},F6=$t((e,t)=>Math.min(e,t)),bz=Kt(po,F6),vz={kernelName:po,backendName:"cpu",kernelFunc:bz},m3=$t((e,t)=>e*t),wz=p3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),t0=Kt(fo,m3,wz),kz={kernelName:fo,backendName:"cpu",kernelFunc:t0};function D6(e,t,a){let n=v.createScalarValue(-1,a);return m3([],t,n,e,a)}function Iz(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=D6(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var Sz={kernelName:wu,backendName:"cpu",kernelFunc:Iz},O6=$t((e,t)=>e!==t?1:0),Cz=Kt(go,O6,null,"bool"),Tz={kernelName:go,backendName:"cpu",kernelFunc:Cz};function f3(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 Ez={kernelName:ko,backendName:"cpu",kernelFunc:Rz};function Mz(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 Pz(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 _z(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);Pz(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 g5(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>y5)throw new Error(`Requires ((limit - start) / delta) <= ${y5}`);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 In.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case In.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: ${In[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 In.FIRST_DIM_SIZE:return t[0];case In.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case In.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${In[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=A5(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=Bl(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);x5(g,p,l),++h}f<0?(c=m+1,d=h):(c=m,d=h,h=d+1)}}};function x5(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 B6(e,t,a,n,r,s,i,o,l,u){return new Oz(e,t,a,n,r,s,i,o,l,u).compute()}function g3(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)),zz=cs(Mo,V6),Lz={kernelName:Mo,backendName:"cpu",kernelFunc:zz};function js(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))),U6=ct(Lo,e=>1/(1+Math.exp(-e))),Bz={kernelName:Lo,backendName:"cpu",kernelFunc:U6};function xh(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 Qs(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=xh(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var Vz={kernelName:Mu,backendName:"cpu",kernelFunc:Qs};function G6(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)),Gz=ct(Bo,e=>Math.sqrt(e)),Hz={kernelName:Bo,backendName:"cpu",kernelFunc:Gz},j6=$t((e,t)=>{let a=e-t;return a*a}),jz=Kt(Ho,j6),qz={kernelName:Ho,backendName:"cpu",kernelFunc:jz},q6=or((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),Xz=cs(Ip,q6),Kz={kernelName:Ip,backendName:"cpu",kernelFunc:Xz};function X6(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,d=1;this.createNGrams(e,l,i,u,d,c)}}return[i,s]}};function x3(e,t,a,n,r,s,i,o){return new Yz(a,n,r,s,i,o).compute(e,t)}function Zz(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),Jz=p3((e,t,a,n)=>({real:e-a,imag:t-n})),v3=Kt(qo,K6,Jz),Qz={kernelName:qo,backendName:"cpu",kernelFunc:v3};function Y6(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 Z6(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));Z6(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Id(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Id(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 J6(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 d3,1);var Q6=ct(_i,e=>e>=0?e:Math.exp(e)-1),tL={kernelName:_i,backendName:"cpu",kernelFunc:Q6};function ev(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 tv(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]=nL(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var rL={kernelName:wo,backendName:"cpu",kernelFunc:tv},av=ct(So,e=>Math.max(0,e)),sL={kernelName:So,backendName:"cpu",kernelFunc:av},nv=ct(No,e=>Math.min(Math.max(0,e),6)),iL={kernelName:No,backendName:"cpu",kernelFunc:nv};function Ah(e,t,a,n,r){if(a==="linear")return tr({inputs:{x:t},backend:e});if(a==="relu")return av({inputs:{x:t},backend:e});if(a==="elu")return Q6({inputs:{x:t},backend:e});if(a==="relu6")return nv({inputs:{x:t},backend:e});if(a==="prelu")return tv({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return ev({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return U6({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function At(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 oL={kernelName:Tu,backendName:"cpu",kernelFunc:At};function rv(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=el.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=At({inputs:{x:r},backend:a,attrs:{shape:A}}),I=At({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],P=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,$,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([P,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;eeMath.acos(e)),cL={kernelName:si,backendName:"cpu",kernelFunc:pL},hL=ct(ii,e=>Math.acosh(e)),mL={kernelName:ii,backendName:"cpu",kernelFunc:hL};function fL(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 wL={kernelName:su,backendName:"cpu",kernelFunc:vL};function kL(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 IL={kernelName:iu,backendName:"cpu",kernelFunc:kL},SL=ct(di,e=>Math.asin(e)),CL={kernelName:di,backendName:"cpu",kernelFunc:SL},TL=ct(pi,e=>Math.asinh(e)),NL={kernelName:pi,backendName:"cpu",kernelFunc:TL},RL=ct(ci,e=>Math.atan(e)),EL={kernelName:ci,backendName:"cpu",kernelFunc:RL},ML=$t((e,t)=>Math.atan2(e,t)),PL=Kt(mi,ML),_L={kernelName:mi,backendName:"cpu",kernelFunc:PL},$L=ct(hi,e=>Math.atanh(e)),FL={kernelName:hi,backendName:"cpu",kernelFunc:$L};function k3(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 sv(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;gP&&(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 iv(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=yt:s==="avg"&&(Ce+=yt,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 DL(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*c+G*p+H)}}}a.set(O,f,y,w,M,g)}}}return a}function OL(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=tr({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=k3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var zL={kernelName:fi,backendName:"cpu",kernelFunc:OL};function LL(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=iv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var WL={kernelName:ou,backendName:"cpu",kernelFunc:LL};function BL(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,P=$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}}}P.set(V*E,_,W,$,U,O)}return a.makeTensorInfo(P.shape,P.dtype,P.values)}var VL={kernelName:lp,backendName:"cpu",kernelFunc:BL};function UL(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,P);W+=H}}w.set(W*I,M,E,S,P)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var GL={kernelName:op,backendName:"cpu",kernelFunc:UL};function HL(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:Bi,backendName:"cpu",kernelFunc:HL};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=At({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Va({inputs:{x:h},backend:a,attrs:{perm:u}}),f=At({inputs:{x:m},backend:a,attrs:{shape:p}}),g=Qs({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var XL={kernelName:lu,backendName:"cpu",kernelFunc:qL};function KL(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=c3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var YL={kernelName:yi,backendName:"cpu",kernelFunc:KL};function ZL(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 JL={kernelName:du,backendName:"cpu",kernelFunc:ZL},QL=ct(os,(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 tr({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>Js({inputs:{input:b},backend:a})),g=l.map(b=>Jl({inputs:{input:b},backend:a})),y=Ql({inputs:f,backend:a,attrs:{axis:s}}),x=Ql({inputs:g,backend:a,attrs:{axis:s}}),A=Za({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 At({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=h3(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 rW={kernelName:pu,backendName:"cpu",kernelFunc:Ql};function ov(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,P=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,$=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 ft=ge+Le*I[1],dt=ie+qe*M,st=ft;for(let it=0;it=u.inDepth)continue;let G=$*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],ft=ge+Le*u.inChannels,dt=qe;for(let st=0;stMath.cos(e)),yW={kernelName:Ii,backendName:"cpu",kernelFunc:gW},xW=ct(Si,e=>Math.cosh(e)),AW={kernelName:Si,backendName:"cpu",kernelFunc:xW};function bW(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-P)*(d-1)/(g-1):0;for(let $=0;$1?M*(c-1)+$*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?P*(d-1)+V*W:.5*(P+S)*(d-1);if(Z<0||Z>d-1){for(let ge=0;ge1?P*(d-1)+G*W:.5*(P+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 P=0;P=h.inHeight)continue;let G=$*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:P}=C.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape(P),S=P.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(P));_[V]=H}}}return{dataId:l.write(v.toTypedArray(_,n.dtype),P,n.dtype),shape:P,dtype:n.dtype}}},zW={kernelName:Hl,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 ${Hl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let P=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]+=P[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},LW={kernelName:Gl,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 ${Gl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let P=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]+=P[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function WW(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 BW={kernelName:mp,backendName:"cpu",kernelFunc:WW};function qp(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=rs({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=tr({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=yh(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=qp({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 GW={kernelName:fp,backendName:"cpu",kernelFunc:UW};function HW(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:fu,backendName:"cpu",kernelFunc:HW},qW=C.ERF_P,XW=C.ERF_A1,KW=C.ERF_A2,YW=C.ERF_A3,ZW=C.ERF_A4,JW=C.ERF_A5,QW=ct($i,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+qW*a);return t*(1-((((JW*n+ZW)*n+YW)*n+KW)*n+XW)*n*Math.exp(-a*a))}),eB={kernelName:$i,backendName:"cpu",kernelFunc:QW};function bh(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),At({inputs:{x:r},backend:a,attrs:{shape:o}})}var tB={kernelName:gu,backendName:"cpu",kernelFunc:bh},aB=$t((e,t)=>e/t),I3=Kt(Pi,aB),P1={kernelName:Pi,backendName:"cpu",kernelFunc:I3};function uv(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=At({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=At({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=C6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var xB={kernelName:xu,backendName:"cpu",kernelFunc:yB};function AB(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=At({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=uv(o,!0,a),u=At({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var bB={kernelName:yp,backendName:"cpu",kernelFunc:AB},vB=ct(ji,e=>Number.isFinite(e)?1:0,"bool"),wB={kernelName:ji,backendName:"cpu",kernelFunc:vB},kB=ct(qi,e=>Math.abs(e)===1/0?1:0,"bool"),IB={kernelName:qi,backendName:"cpu",kernelFunc:kB},SB=ct(Xi,e=>Number.isNaN(e)?1:0,"bool"),CB={kernelName:Xi,backendName:"cpu",kernelFunc:SB};function TB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=M6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var NB={kernelName:Ji,backendName:"cpu",kernelFunc:TB},RB=ct(eo,e=>Math.log1p(e)),EB={kernelName:eo,backendName:"cpu",kernelFunc:RB},MB=$t((e,t)=>e&&t),PB=Kt(to,MB,null,"bool"),_B={kernelName:to,backendName:"cpu",kernelFunc:PB},$B=ct(ao,e=>e?0:1,"bool"),FB={kernelName:ao,backendName:"cpu",kernelFunc:$B},DB=$t((e,t)=>e||t),OB=Kt(no,DB,null,"bool"),zB={kernelName:no,backendName:"cpu",kernelFunc:OB};function LB(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=tr({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=k3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var HB={kernelName:oo,backendName:"cpu",kernelFunc:GB};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=iv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var qB={kernelName:bu,backendName:"cpu",kernelFunc:jB};function XB(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=DL(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"),P=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=P.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 KB={kernelName:bp,backendName:"cpu",kernelFunc:XB};function YB(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,sv(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 P=0;P=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(P,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get(P,G,H,E);$+=re*X}}T.set($,P,S,_,E)}return a.makeTensorInfo(T.shape,T.dtype,T.values)}var ZB={kernelName:Ap,backendName:"cpu",kernelFunc:YB};function JB(e,t,a,n,r){let s=v.computeStrides(t),i=k3(e,t,a,s,r,"max"),o=sv(e,t,a,r,!0,n);return[i.values,o.values]}var QB={kernelName:vu,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]=JB(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 eV(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=rs({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=I3({inputs:{a:d,b:c},backend:a});p.push(h);let m=qp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return p.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var tV={kernelName:lo,backendName:"cpu",kernelFunc:eV};function aV(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 sV={kernelName:co,backendName:"cpu",kernelFunc:rV},iV=$t((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),oV=Kt(ho,iV),lV={kernelName:ho,backendName:"cpu",kernelFunc:oV},uV=tu(pA());function pv(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=dv({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=C.expandShapeToKeepDim(u.shape,l),c=At({inputs:{x:u},backend:a,attrs:{shape:p}}),d=v3({inputs:{a:r,b:c},backend:a}),h=v6({inputs:{x:d},backend:a}),m=qp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=At({inputs:{x:m},backend:a,attrs:{shape:p}}),g=I3({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 dV={kernelName:Uo,backendName:"cpu",kernelFunc:pv};function pV(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:pv({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=bh({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Ql({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var CV={kernelName:Su,backendName:"cpu",kernelFunc:hv};function TV(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 mv={kernelName:bo,backendName:"cpu",kernelFunc:TV},NV=$t((e,t)=>Math.pow(e,t)),RV=Kt(vo,NV),EV={kernelName:vo,backendName:"cpu",kernelFunc:RV};function MV(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]=L6(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 PV={kernelName:Mh,backendName:"cpu",kernelFunc:MV};function _V(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]=W6(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 $V={kernelName:Ph,backendName:"cpu",kernelFunc:_V};function FV(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]=B6(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var DV={kernelName:_h,backendName:"cpu",kernelFunc:FV};function OV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=g3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var zV={kernelName:Cu,backendName:"cpu",kernelFunc:OV},LV=ct(Io,e=>1/e),WV={kernelName:Io,backendName:"cpu",kernelFunc:LV};function BV(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=P+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[$+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var XV={kernelName:Nu,backendName:"cpu",kernelFunc:qV};function KV(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 tr({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 YV={kernelName:Ro,backendName:"cpu",kernelFunc:KV},ZV={kernelName:Jo,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}),QV={kernelName:Eo,backendName:"cpu",kernelFunc:JV};function eU(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=js(h,m,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,f.dtype,f.values)}var tU={kernelName:Po,backendName:"cpu",kernelFunc:eU};function aU(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?dU*e:uU*(Math.exp(e)-1)),cU={kernelName:Fo,backendName:"cpu",kernelFunc:pU},hU=ct(zo,e=>e<0?-1:e>0?1:0),mU={kernelName:zo,backendName:"cpu",kernelFunc:hU},fU=ct(Do,e=>Math.sin(e)),gU={kernelName:Do,backendName:"cpu",kernelFunc:fU},yU=ct(Oo,e=>Math.sinh(e)),xU={kernelName:Oo,backendName:"cpu",kernelFunc:yU},AU=11920928955078125e-23,b5=Math.log(AU)+2,bU=ct(Wo,e=>{let t=e>-b5,a=eNumber(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var cU={kernelName:Ip,backendName:"cpu",kernelFunc:pU};function hU(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]=G6(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 SU={kernelName:wp,backendName:"cpu",kernelFunc:IU};function CU(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]=$6(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var mU={kernelName:$u,backendName:"cpu",kernelFunc:hU};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(`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]=H6(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var TU={kernelName:$u,backendName:"cpu",kernelFunc:CU};function NU(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]=m3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var gU={kernelName:Fu,backendName:"cpu",kernelFunc:fU};function yU(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]=y3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var RU={kernelName:Fu,backendName:"cpu",kernelFunc:NU};function EU(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]=m3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var xU={kernelName:Du,backendName:"cpu",kernelFunc:yU};function AU(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}=S.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=Hs(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=Hs(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=Hs(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=Hs(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 bU={kernelName:Uo,backendName:"cpu",kernelFunc:AU};function vU(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=S.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=Js({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var wU={kernelName:Pu,backendName:"cpu",kernelFunc:vU},kU={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}),SU={kernelName:os,backendName:"cpu",kernelFunc:IU};function CU(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=At({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=Js({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=At({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(T)}else{let I=a.bufferSync(r),T=O6(h,I,b,x);w=a.makeTensorInfo(m,T.dtype,T.values)}return w}var TU={kernelName:Ho,backendName:"cpu",kernelFunc:CU};function NU(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]=f3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var RU={kernelName:Ou,backendName:"cpu",kernelFunc:NU};function EU(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]=g3(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 MU={kernelName:Tp,backendName:"cpu",kernelFunc:EU};function _U(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.data.get(s.dataId).values,o=y3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var PU={kernelName:Np,backendName:"cpu",kernelFunc:_U},$U=ct(qo,e=>Math.tan(e)),FU={kernelName:qo,backendName:"cpu",kernelFunc:$U},DU=ct(Xo,e=>Math.tanh(e)),OU={kernelName:Xo,backendName:"cpu",kernelFunc:DU};function zU(e){let{inputs:t,backend:a}=e,{tensor:n,indices:r,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:p}=S.calculateShapes(s,r,n.shape),c=!1,d=a.bufferSync(r),h=a.bufferSync(s),m=a.bufferSync(n),f=Hs(d,h,n.shape,p,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var LU={kernelName:_o,backendName:"cpu",kernelFunc:zU};function WU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=L6(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var BU={kernelName:is,backendName:"cpu",kernelFunc:WU};function VU(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]=B6(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 UU={kernelName:Ko,backendName:"cpu",kernelFunc:VU};function GU(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 P=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values;for(let C=0;Ct-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 qU(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 XU(e,t){return e}function KU(e,t){return v.clamp(0,e,t-1)}function Cd(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 nG={kernelName:Ep,backendName:"cpu",kernelFunc:aG},rG=[Zz,MO,Qz,tL,OO,nL,sL,oL,uL,pL,hL,fL,yL,bL,wL,SL,TL,RL,ML,Kz,PL,FL,OL,LO,LL,FO,BO,BL,_O,UL,HL,jL,XL,YL,JL,eW,aW,rW,iW,lW,dW,cW,mW,gW,yW,AW,vW,kW,IW,SW,CW,NW,MW,Vz,PW,VO,BW,UO,VW,HO,XW,KW,ZW,qO,KO,QW,tB,nB,sB,ZO,QO,PO,oB,GL,uB,pB,hB,Uz,tz,nz,fB,sz,yB,bB,wB,SB,TB,RB,EB,oz,_B,$B,DB,zB,WB,VB,GB,uz,jB,KB,QB,pz,hz,aV,sV,lV,fz,dV,cV,hV,nv,yV,Hz,xz,AV,vV,kV,SV,$O,M1,TV,jz,qz,Xz,RV,MV,PV,FV,OV,zV,WV,Cz,VV,qV,KV,QV,Nz,tU,nU,sU,Rz,ZB,lU,dU,cU,mU,gU,xU,bU,wU,_z,kU,$z,Dz,SU,TU,RU,MU,PU,Wz,RW,FU,OU,LU,BU,UU,HU,gz,QU,tG,nG,pV];for(let e of rG)xn(e);var rv={};Ze(rv,{assertNotComplex:()=>Gu,bindCanvasToFramebuffer:()=>fG,bindColorTextureToFramebuffer:()=>nh,bindTextureToProgramUniformSampler:()=>Av,bindTextureUnit:()=>gv,bindVertexBufferToProgramAttribute:()=>P1,callAndCheck:()=>ce,canBeRepresented:()=>sv,createFragmentShader:()=>lv,createFramebuffer:()=>fv,createProgram:()=>uv,createStaticIndexBuffer:()=>cv,createStaticVertexBuffer:()=>pv,createTexture:()=>hv,createVertexShader:()=>ov,getBatchDim:()=>Qs,getExtensionOrThrow:()=>Td,getFramebufferErrorMessage:()=>bv,getMaxTexturesInShader:()=>Iv,getNumChannels:()=>hG,getProgramUniformLocation:()=>xv,getProgramUniformLocationOrThrow:()=>yv,getRowsCols:()=>ei,getShapeAs3D:()=>Rd,getTextureShapeFromLogicalShape:()=>wv,getWebGLDisjointQueryTimerVersion:()=>Sv,getWebGLErrorMessage:()=>iv,getWebGLMaxTextureSize:()=>kv,hasExtension:()=>gn,isCapableOfRenderingToFloatTexture:()=>Cv,isDownloadFloatTextureEnabled:()=>Tv,isReshapeFree:()=>Qd,isWebGLFenceEnabled:()=>Nv,isWebGLVersionEnabled:()=>F1,linkProgram:()=>dv,logShaderSourceAndInfoLog:()=>I3,resetMaxTextureSize:()=>gG,resetMaxTexturesInShader:()=>yG,unbindColorTextureFromFramebuffer:()=>$1,unbindTextureUnit:()=>mG,validateFramebuffer:()=>Nd,validateProgram:()=>ah,validateTextureSize:()=>mv});var Vs={},Kc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function a0(e,t){Vs[e]=t}function Wn(e,t){if(!(e in Vs)||t!=null){let n=iG(e,t);if(n!==null)Vs[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Vs[e];return a==null||a.isContextLost()?(delete Vs[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),Vs[e])}function sG(e){if(!W().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 iG(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 Vs[e]},!1),W().getBool("SOFTWARE_WEBGL_ENABLED")&&(Kc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",Kc)||a.getContext("experimental-webgl",Kc):a.getContext("webgl2",Kc)}var Jd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Jd||(Jd={}));var fn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(fn||(fn={}));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 oG(e,t){return e*t}function Yc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Uu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function lG(e,t){let[a,n]=Uu(e,t);return a*n*4}function k3(e,t){let a=e,n,r,s,i,o,l,u,p,c,d;return W().getNumber("WEBGL_VERSION")===2?(n=a.R32F,r=a.R16F,s=a.RGBA16F,i=a.RGBA32F,o=a.RED,u=4,p=1,c=a.HALF_FLOAT,d=a.FLOAT,l=a.RGBA8):(n=e.RGBA,r=e.RGBA,s=e.RGBA,i=a.RGBA,o=e.RGBA,u=4,p=4,c=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT,l=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:p,textureTypeHalfFloat:c,textureTypeFloat:d}}function ce(e,t){let a=t();return W().getBool("DEBUG")&&uG(e),a}function uG(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+iv(e,t))}var dG=596e-10,pG=65504;function sv(e){return!!(W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||dGe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function ov(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 lv(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)),W().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw I3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var cG=/ERROR: [0-9]+:([0-9]+):/g;function I3(e,t){let a=cG.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]=y3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var MU={kernelName:Du,backendName:"cpu",kernelFunc:EU};function PU(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=js(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=js(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=js(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=js(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 _U={kernelName:Go,backendName:"cpu",kernelFunc:PU};function $U(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=Qs({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var FU={kernelName:_u,backendName:"cpu",kernelFunc:$U},DU={kernelName:kp,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}),zU={kernelName:us,backendName:"cpu",kernelFunc:OU};function LU(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=At({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=Qs({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=At({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(T)}else{let I=a.bufferSync(r),T=X6(h,I,b,x);w=a.makeTensorInfo(m,T.dtype,T.values)}return w}var WU={kernelName:jo,backendName:"cpu",kernelFunc:LU};function BU(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]=x3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var VU={kernelName:Ou,backendName:"cpu",kernelFunc:BU};function UU(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]=A3(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 GU={kernelName:Sp,backendName:"cpu",kernelFunc:UU};function HU(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=b3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var jU={kernelName:Cp,backendName:"cpu",kernelFunc:HU},qU=ct(Xo,e=>Math.tan(e)),XU={kernelName:Xo,backendName:"cpu",kernelFunc:qU},KU=ct(Ko,e=>Math.tanh(e)),YU={kernelName:Ko,backendName:"cpu",kernelFunc:KU};function ZU(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=js(d,h,n.shape,p,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var JU={kernelName:_o,backendName:"cpu",kernelFunc:ZU};function QU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=Y6(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var eG={kernelName:ls,backendName:"cpu",kernelFunc:QU};function tG(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]=J6(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 aG={kernelName:Yo,backendName:"cpu",kernelFunc:tG};function nG(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 P=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 iG(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 oG(e,t){return e}function lG(e,t){return v.clamp(0,e,t-1)}function Sd(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 gG={kernelName:Np,backendName:"cpu",kernelFunc:fG},yG=[dL,UO,cL,mL,KO,gL,xL,bL,wL,IL,CL,NL,EL,_L,FL,zL,WL,VL,GL,lL,jL,XL,YL,ZO,JL,qO,QO,eW,GO,aW,rW,sW,oW,uW,pW,hW,fW,yW,AW,vW,kW,SW,TW,RW,EW,PW,$W,DW,OW,zW,LW,BW,GW,tL,jW,ez,eB,tz,tB,nz,oB,lB,dB,sz,oz,cB,mB,gB,xB,uz,pz,HO,bB,nW,wB,IB,CB,aL,hz,fz,NB,yz,EB,_B,FB,zB,WB,VB,UB,Az,HB,qB,KB,ZB,QB,tV,nV,vz,sV,lV,cV,kz,Sz,fV,xV,vV,Tz,kV,SV,CV,mv,EV,rL,Ez,PV,$V,DV,zV,jO,P1,WV,sL,iL,oL,VV,GV,jV,XV,YV,ZV,QV,Lz,tU,iU,lU,cU,Bz,mU,gU,xU,Vz,dV,vU,kU,SU,TU,RU,MU,_U,FU,Hz,DU,qz,Kz,zU,WU,VU,GU,jU,Qz,VW,XU,YU,JU,eG,aG,rG,Nz,cG,mG,gG,IV];for(let e of yG)yn(e);var fv={};Ze(fv,{assertNotComplex:()=>Gu,bindCanvasToFramebuffer:()=>NG,bindColorTextureToFramebuffer:()=>ah,bindTextureToProgramUniformSampler:()=>Ev,bindTextureUnit:()=>Tv,bindVertexBufferToProgramAttribute:()=>$1,callAndCheck:()=>ce,canBeRepresented:()=>gv,createFragmentShader:()=>Av,createFramebuffer:()=>Cv,createProgram:()=>bv,createStaticIndexBuffer:()=>kv,createStaticVertexBuffer:()=>wv,createTexture:()=>Iv,createVertexShader:()=>xv,getBatchDim:()=>ei,getExtensionOrThrow:()=>Cd,getFramebufferErrorMessage:()=>Mv,getMaxTexturesInShader:()=>Fv,getNumChannels:()=>CG,getProgramUniformLocation:()=>Rv,getProgramUniformLocationOrThrow:()=>Nv,getRowsCols:()=>ti,getShapeAs3D:()=>Nd,getTextureShapeFromLogicalShape:()=>_v,getWebGLDisjointQueryTimerVersion:()=>Dv,getWebGLErrorMessage:()=>yv,getWebGLMaxTextureSize:()=>$v,hasExtension:()=>mn,isCapableOfRenderingToFloatTexture:()=>Ov,isDownloadFloatTextureEnabled:()=>zv,isReshapeFree:()=>Zd,isWebGLFenceEnabled:()=>Lv,isWebGLVersionEnabled:()=>D1,linkProgram:()=>vv,logShaderSourceAndInfoLog:()=>T3,resetMaxTextureSize:()=>RG,resetMaxTexturesInShader:()=>EG,unbindColorTextureFromFramebuffer:()=>F1,unbindTextureUnit:()=>TG,validateFramebuffer:()=>Td,validateProgram:()=>th,validateTextureSize:()=>Sv});var Us={},Xc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function a0(e,t){Us[e]=t}function Wn(e,t){if(!(e in Us)||t!=null){let n=AG(e,t);if(n!==null)Us[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Us[e];return a==null||a.isContextLost()?(delete Us[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),Us[e])}function xG(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 AG(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?xG(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Us[e]},!1),B().getBool("SOFTWARE_WEBGL_ENABLED")&&(Xc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",Xc)||a.getContext("experimental-webgl",Xc):a.getContext("webgl2",Xc)}var Yd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Yd||(Yd={}));var hn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(hn||(hn={}));var ua;(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"})(ua||(ua={}));function Xp(e,t){return[t,e]}function bG(e,t){return e*t}function Kc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Uu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function vG(e,t){let[a,n]=Uu(e,t);return a*n*4}function C3(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")&&wG(e),a}function wG(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+yv(e,t))}var kG=596e-10,IG=65504;function gv(e){return!!(B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||kGe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function xv(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 Av(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 T3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var SG=/ERROR: [0-9]+:([0-9]+):/g;function T3(e,t){let a=SG.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 dv(e,t){if(ce(e,()=>e.linkProgram(t)),!W().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function ah(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 pv(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 hG(){return W().getNumber("WEBGL_VERSION")===2?1:4}function hv(e){return Mr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function mv(e,t){let a=W().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let n=`[${e}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(e>a||t>a){let n=`[${e}x${t}]`,r=`[${a}x${a}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+r+".")}}function fv(e){return Mr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function P1(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 gv(e,t,a){vv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function mG(e,t){vv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function yv(e,t,a){return Mr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function xv(e,t,a){return e.getUniformLocation(t,a)}function Av(e,t,a,n){ce(e,()=>gv(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 nh(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 $1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Nd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+bv(e,t))}function bv(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 vv(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 Qs(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function ei(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 Rd(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[Qs(e),...ei(e)]),t}function wv(e,t=!1){let a=W().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=W().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&W().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=a/2),t&&(a=a*2,n=n*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=a?s=[1,r]:e.length===2&&e[0]<=a&&e[1]<=a?s=e:e.length===3&&e[0]*e[1]<=a&&e[2]<=a?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=a&&e[1]*e[2]<=a?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=a&&e[3]<=a?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=a&&e[1]*e[2]*e[3]<=a&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=Qs(e),l=2,u=2;e.length&&([l,u]=ei(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function Zc(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||Zc(a)&&Zc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Zc(e[0])&&Zc(t[0])}var rh,sh;function kv(e){if(rh==null){let t=Wn(e);rh=t.getParameter(t.MAX_TEXTURE_SIZE)}return rh}function gG(){rh=null}function yG(){sh=null}function Iv(e){if(sh==null){let t=Wn(e);sh=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,sh)}function Sv(e){if(e===0)return 0;let t,a=Wn(e);return gn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:gn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function gn(e,t){return e.getExtension(t)!=null}function F1(e){try{if(Wn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Cv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!gn(t,"OES_texture_float"))return!1}else if(!gn(t,"EXT_color_buffer_float"))return!1;return D1(t)}function Tv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!gn(t,"OES_texture_float")||!gn(t,"WEBGL_color_buffer_float"))return!1}else{if(gn(t,"EXT_color_buffer_float"))return D1(t);let a="EXT_color_buffer_half_float";if(gn(t,a)){let n=t.getExtension(a);return xG(t,n)}return!1}return D1(t)}function D1(e){let t=k3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let n=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,n,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(s),i}function xG(e,t){let a=k3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,r,s,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(i),o}function Nv(e){return e!==2?!1:Wn(e).fenceSync!=null}function Gu(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=W();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>F1(2)?2:F1(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",()=>kv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>Iv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:Sv(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",()=>Cv(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",()=>Tv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Nv(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 Ea(){let e,t,a,n,r,s,i,o,l,u;return W().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=W().getBool("WEBGL2_ISNAN_CUSTOM")?` +`))}function bv(e){return Mr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function vv(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 th(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 wv(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 kv(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 CG(){return B().getNumber("WEBGL_VERSION")===2?1:4}function Iv(e){return Mr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Sv(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 Cv(e){return Mr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function $1(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 Tv(e,t,a){Pv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function TG(e,t){Pv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Nv(e,t,a){return Mr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function Rv(e,t,a){return e.getUniformLocation(t,a)}function Ev(e,t,a,n){ce(e,()=>Tv(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function NG(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 ah(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 F1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Td(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Mv(e,t))}function Mv(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 Pv(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 ei(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function ti(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 Nd(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ei(e),...ti(e)]),t}function _v(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=ei(e),l=2,u=2;e.length&&([l,u]=ti(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function Yc(e){return e%2===0}function Zd(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||Yc(a)&&Yc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Yc(e[0])&&Yc(t[0])}var nh,rh;function $v(e){if(nh==null){let t=Wn(e);nh=t.getParameter(t.MAX_TEXTURE_SIZE)}return nh}function RG(){nh=null}function EG(){rh=null}function Fv(e){if(rh==null){let t=Wn(e);rh=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,rh)}function Dv(e){if(e===0)return 0;let t,a=Wn(e);return mn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:mn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function mn(e,t){return e.getExtension(t)!=null}function D1(e){try{if(Wn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Ov(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!mn(t,"OES_texture_float"))return!1}else if(!mn(t,"EXT_color_buffer_float"))return!1;return O1(t)}function zv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!mn(t,"OES_texture_float")||!mn(t,"WEBGL_color_buffer_float"))return!1}else{if(mn(t,"EXT_color_buffer_float"))return O1(t);let a="EXT_color_buffer_half_float";if(mn(t,a)){let n=t.getExtension(a);return MG(t,n)}return!1}return O1(t)}function O1(e){let t=C3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let n=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,n,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(s),i}function MG(e,t){let a=C3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,r,s,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(i),o}function Lv(e){return e!==2?!1:Wn(e).fenceSync!=null}function Gu(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",()=>D1(2)?2:D1(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",()=>$v(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>Fv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:Dv(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Pp.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Ov(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",()=>zv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Lv(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",()=>Pp.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,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:e,attribute:t,varyingVs:a,varyingFs:n,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function el(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 n0(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 AG(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 bG(e,t,a="index"){let n=e.map((s,i)=>i),r=AG(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 S3(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 tl(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 n0(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 PG(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 _G(e,t,a="index"){let n=e.map((s,i)=>i),r=PG(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 N3(e){let t=v.computeStrides(e).map(a=>a.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } -`}function C3(){return` +`}function R3(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var Rv=` +`}var Wv=` 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:Ev}=S;function vG(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}=T3(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=>wG(d,t,a.packedInputs,a.enableShapeUniforms)).join(` -`),i=t.texShape,o=Ea(),l=SG(o),u,p,c=NG(o);return t.isPacked?(u=kG(t.logicalShape,i,a.enableShapeUniforms),p=TG(o)):(u=IG(t.logicalShape,i,a.enableShapeUniforms),p=CG(o)),a.packedInputs&&(c+=_G),[c,l,p,r,u,s,a.userCode].join(` -`)}function Hu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return GG(e,t);case 1:return jG(e,t);case 2:return XG(e,t);case 3:return YG(e,t);case 4:return JG(e,t);case 5:return QG(e);case 6:return eH(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function Mv(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return UG(e);case 1:return HG(e,t);case 2:return qG(e,t);case 3:return KG(e,t);default:return ZG(e,t)}}function wG(e,t,a=!1,n){let r="";a?r+=Mv(e,n):r+=Hu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=tH(e,t):r+=aH(e,t)),r}function kG(e,t,a){switch(e.length){case 0:return _v();case 1:return PG(e,t,a);case 2:return BG(e,t,a);case 3:return FG(e,t,a);default:return OG(e,t,a)}}function IG(e,t,a){switch(e.length){case 0:return _v();case 1:return $G(e,t,a);case 2:return VG(e,t,a);case 3:return DG(e,t,a);case 4:return zG(e,t,a);case 5:return LG(e,t);case 6:return WG(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function SG(e){return` +`,{getBroadcastDims:Bv}=C;function $G(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}=E3(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=>FG(d,t,a.packedInputs,a.enableShapeUniforms)).join(` +`),i=t.texShape,o=Ra(),l=zG(o),u,p,c=BG(o);return t.isPacked?(u=DG(t.logicalShape,i,a.enableShapeUniforms),p=WG(o)):(u=OG(t.logicalShape,i,a.enableShapeUniforms),p=LG(o)),a.packedInputs&&(c+=HG),[c,l,p,r,u,s,a.userCode].join(` +`)}function Hu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return nH(e,t);case 1:return sH(e,t);case 2:return oH(e,t);case 3:return uH(e,t);case 4:return pH(e,t);case 5:return cH(e);case 6:return hH(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function Vv(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return aH(e);case 1:return rH(e,t);case 2:return iH(e,t);case 3:return lH(e,t);default:return dH(e,t)}}function FG(e,t,a=!1,n){let r="";a?r+=Vv(e,n):r+=Hu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=mH(e,t):r+=fH(e,t)),r}function DG(e,t,a){switch(e.length){case 0:return Uv();case 1:return jG(e,t,a);case 2:return eH(e,t,a);case 3:return XG(e,t,a);default:return YG(e,t,a)}}function OG(e,t,a){switch(e.length){case 0:return Uv();case 1:return qG(e,t,a);case 2:return tH(e,t,a);case 3:return KG(e,t,a);case 4:return ZG(e,t,a);case 5:return JG(e,t);case 6:return QG(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function zG(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } - `}function CG(e){return` + `}function LG(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } - `}function TG(e){return` + `}function WG(e){return` void setOutput(vec4 val) { ${e.output} = val; } - `}function NG(e){return`${e.version} + `}function BG(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); } - ${RG} - ${EG} - ${MG} - `}var RG=` + ${VG} + ${UG} + ${GG} + `}var VG=` 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); } -`,EG=` +`,UG=` 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); } -`,MG=` +`,GG=` 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); } -`,_G=` +`,HG=` 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 _v(){return` +`;function Uv(){return` int getOutputCoords() { return 0; } - `}function PG(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` + `}function jG(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 $G(e,t,a){return t[0]===1?a?` + `}function qG(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 FG(e,t,a){if(a)return` + `}function XG(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 DG(e,t,a){if(a)return` + `}function KG(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -360,7 +360,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n0(["r","c","d"],e)} return ivec3(r, c, d); } -`;let n=el(["r","c","d"],e);return` +`;let n=tl(["r","c","d"],e);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec3(r, c, d); } - `}function OG(e,t,a){if(a)return` + `}function YG(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 zG(e,t,a){if(a)return` + `}function ZG(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -417,7 +417,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n0(["r","c","d","d2"],e)} return ivec4(r, c, d, d2); } - `;let n=el(["r","c","d","d2"],e);return` + `;let n=tl(["r","c","d","d2"],e);return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec4(r, c, d, d2); } - `}function LG(e,t){let a=el(["r","c","d","d2","d3"],e);return` + `}function JG(e,t){let a=tl(["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 WG(e,t){let a=el(["r","c","d","d2","d3","d4"],e);return` + `}function QG(e,t){let a=tl(["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 BG(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` + `}function eH(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 VG(e,t,a){return v.arraysEqual(e,t)?a?` + `}function tH(e,t,a){return v.arraysEqual(e,t)?a?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,15 +535,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${e[1]}; return ivec2(r, c); } - `}function tl(e){return`offset${e}`}function UG(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ea();return` + `}function al(e){return`offset${e}`}function aH(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 GG(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 nH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${a};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return` float ${n}() { return sampleTexture(${a}, halfCR); } - `;let i=tl(a);if(t)return` + `;let i=al(a);if(t)return` float ${n}() { vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], ${i}); return sampleTexture(${a}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${o}, ${l}, ${i}); return sampleTexture(${a}, uv); } - `}function HG(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ea();if(t)return` + `}function rH(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 jG(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` + `}function sH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` float ${n}(int index) { ${ju(e)} } @@ -574,7 +574,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float ${n}(int index) { return sampleTexture(${a}, halfCR); } - `;let o=tl(a);return i===1?t?` + `;let o=al(a);return i===1?t?` float ${n}(int index) { vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${a}TexShape[0])); return sampleTexture(${a}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${i}, index + ${o}); return sampleTexture(${a}, uv); } - `}function qG(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=Ea();if(s!=null&&v.arraysEqual(a,s))return t?` + `}function iH(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 XG(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 oH(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); @@ -648,7 +648,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int index = round(dot(vec2(row, col), vec2(${a[1]}, 1))); ${ju(e)} } - `;let u=s[0],p=s[1],c=tl(n);return p===1?t?` + `;let u=s[0],p=s[1],c=al(n);return p===1?t?` float ${r}(int row, int col) { float index = dot(vec3(row, col, ${c}), vec3(${n}Shape[1], 1, 1)); vec2 uv = vec2(0.5, (index + 0.5) / float(${n}TexShape[0])); @@ -686,12 +686,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${u}, ${p}, index); return sampleTexture(${n}, uv); } -`}function KG(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=qu(e,d),f=["b","row","col"];return` - ${Mv(m,t)} +`}function lH(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=qu(e,d),f=["b","row","col"];return` + ${Vv(m,t)} vec4 ${r}(int b, int row, int col) { return ${r}(${Xu(f,h)}); } - `}let o=Ea();if(t)return` + `}let o=Ra();if(t)return` vec4 ${r}(int b, int row, int col) { ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0)); int valuesPerRow = int(ceil(float(${n}Shape[2]) / 2.0)); @@ -706,7 +706,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${l}, ${u}, ${c}, ${p}, b, row, col); return ${o.texture2D}(${n}, uv); } - `}function YG(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 mH(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=Bv(e.shapeInfo.logicalShape,t.logicalShape),l=mt(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,20 +965,20 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec4 outputValue = get${n}(${d}); ${h} } - `}function aH(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 fH(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=Ev(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=mt(l),p=Bv(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 T3(e,t,a){let{newShape:n,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):n,l=!e&&s>1&&!v.arraysEqual(t,a)&&n.lengthe[a]).join(", ")}function nH(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=vG(r,i,t),l=lv(e.gl,o),u=e.createProgram(l);return W().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,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},Pv(e,t,u)))}function Pv(e,t,a){let n=[],r=[],s,i,o,l=null,u=null;u=e.getUniformLocation(a,"NAN",!1),W().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 g5(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 rH(e,t,a,n,r){t.program.enableShapeUniforms||(g5(t.inShapeInfos,a),g5([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),W().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}=T3(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=S.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+`${W().getNumber("WEBGL_VERSION")}`,s}function ya(e){return W().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var iH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ea();this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length),this.userCode=` + `}function mt(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function E3(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 gH(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=$G(r,i,t),l=Av(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},Gv(e,t,u)))}function Gv(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 w5(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 yH(e,t,a,n,r){t.program.enableShapeUniforms||(w5(t.inShapeInfos,a),w5([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}=E3(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 AH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Yd.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?n0(["r","c","d"],e):el(["r","c","d"],e)} + ${this.enableShapeUniforms?n0(["r","c","d"],e):tl(["r","c","d"],e)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},oH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ea();this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length),this.userCode=` + `}},bH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Yd.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?n0(["r","c","d"],e):el(["r","c","d"],e)} + ${this.enableShapeUniforms?n0(["r","c","d"],e):tl(["r","c","d"],e)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},lH=class{constructor(e){this.variableNames=["A"],this.outTexUsage=fn.DOWNLOAD;let t=Ea();this.outputShape=e,this.userCode=` - ${Rv} + `}},vH=class{constructor(e){this.variableNames=["A"],this.outTexUsage=hn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Wv} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}},uH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=fn.DOWNLOAD;let t=Ea();this.outputShape=e,this.userCode=` - ${Rv} + `}},wH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=hn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Wv} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}},dH={R:0,G:1,B:2,A:3},y5=class{constructor(e,t=!1,a="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ea();this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)");let s="";for(let i=0;iUv,createBufferFromOutputTexture:()=>jv,createFloat16MatrixTexture:()=>Lv,createFloat16PackedMatrixTexture:()=>Vv,createFloat32MatrixTexture:()=>zv,createIndexBuffer:()=>Ov,createPackedMatrixTexture:()=>Bv,createUnsignedBytesMatrixTexture:()=>Wv,createVertexBuffer:()=>Dv,createVertexShader:()=>Fv,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Xv,downloadFloat32MatrixFromBuffer:()=>qv,downloadMatrixFromPackedOutputTexture:()=>Yv,downloadPackedMatrixFromBuffer:()=>Kv,getInternalFormatForFloat16MatrixTexture:()=>R3,getInternalFormatForFloat16PackedMatrixTexture:()=>_3,getInternalFormatForFloat32MatrixTexture:()=>N3,getInternalFormatForPackedMatrixTexture:()=>M3,getInternalFormatForUnsignedBytesMatrixTexture:()=>E3,uploadDenseMatrixToTexture:()=>Gv,uploadPixelDataToTexture:()=>Hv});function Fv(e){let t=Ea(),a=`${t.version} + `}},Hv={};Ze(Hv,{bindVertexProgramAttributeStreams:()=>e8,createBufferFromOutputTexture:()=>n8,createFloat16MatrixTexture:()=>Yv,createFloat16PackedMatrixTexture:()=>Qv,createFloat32MatrixTexture:()=>Kv,createIndexBuffer:()=>Xv,createPackedMatrixTexture:()=>Jv,createUnsignedBytesMatrixTexture:()=>Zv,createVertexBuffer:()=>qv,createVertexShader:()=>jv,downloadByteEncodedFloatMatrixFromOutputTexture:()=>s8,downloadFloat32MatrixFromBuffer:()=>r8,downloadMatrixFromPackedOutputTexture:()=>o8,downloadPackedMatrixFromBuffer:()=>i8,getInternalFormatForFloat16MatrixTexture:()=>P3,getInternalFormatForFloat16PackedMatrixTexture:()=>F3,getInternalFormatForFloat32MatrixTexture:()=>M3,getInternalFormatForPackedMatrixTexture:()=>$3,getInternalFormatForUnsignedBytesMatrixTexture:()=>_3,uploadDenseMatrixToTexture:()=>t8,uploadPixelDataToTexture:()=>a8});function jv(e){let t=Ra(),a=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; @@ -1107,11 +1107,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return ov(e,a)}function Dv(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 pv(e,t)}function Ov(e){let t=new Uint16Array([0,1,2,2,1,3]);return cv(e,t)}function Zp(e,t,a,n,r,s){mv(t,a);let i=hv(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)),W().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 N3(e){return e.internalFormatFloat}function zv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,N3(n),n.textureFormatFloat,e.FLOAT)}function R3(e){return e.internalFormatHalfFloat}function Lv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,R3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function E3(e){return e.downloadTextureFormat}function Wv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,E3(n),e.RGBA,e.UNSIGNED_BYTE)}function M3(e){return e.internalFormatPackedFloat}function Bv(e,t,a,n){let[r,s]=Uu(t,a);return Zp(e,r,s,M3(n),e.RGBA,e.FLOAT)}function _3(e){return e.internalFormatPackedHalfFloat}function Vv(e,t,a,n){let[r,s]=Uu(t,a);return Zp(e,r,s,_3(n),e.RGBA,n.textureTypeHalfFloat)}function Uv(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),P1(e,t,"clipSpacePos",a,3,20,0)&&P1(e,t,"uv",a,2,20,12)}function Gv(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),W().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 Hv(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?W().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)):W().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 jv(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 qv(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 Xv(e,t,a,n){let[r,s]=Yp(t,a),i=4,o=new Uint8Array(oG(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function Kv(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(lG(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 Yv(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 Wl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=W().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,a0(t,e)):this.gl=Wn(t),e=this.gl,W().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"),W().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Td(this.gl,r),gn(this.gl,s))this.textureHalfFloatExtension=Td(this.gl,s);else if(W().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(a),gn(this.gl,n))this.colorBufferHalfFloatExtension=Td(this.gl,n);else if(W().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(a="EXT_color_buffer_float",gn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(gn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Dv(this.gl),this.indexBuffer=Ov(this.gl),this.framebuffer=fv(this.gl),this.textureConfig=k3(this.gl,this.textureHalfFloatExtension)}get debug(){return W().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;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(),zv(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Lv(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Wv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),Hv(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),Gv(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Vv(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),Bv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&($1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>Xv(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return Kv(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return qv(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=jv(this.gl,t,a,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,a;if(W().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),a=()=>{let s=n.clientWaitSync(r,0,0);return s===n.ALREADY_SIGNALED||s===n.CONDITION_SATISFIED},t=r}else W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>Yv(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=Fv(t));let a=uv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),dv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&ah(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)),Uv(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&&ah(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?yv(this.gl,e,t):xv(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(),Av(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Uu(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&&ah(this.gl,this.program),Nd(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=Td(this.gl,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.createQuery();return a.beginQuery(n.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,a=this.getQueryTimerExtensionWebGL2();t.endQuery(a.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let a=this.gl;return a.getQueryParameter(e,a.QUERY_RESULT)/1e6}else{let a=this.getQueryTimerExtensionWebGL1();return a.getQueryObjectEXT(e,a.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.getQueryParameter(e,a.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let a=this.getQueryTimerExtensionWebGL1(),n=a.getQueryObjectEXT(e,a.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=cH(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:a}=this.itemsToPoll[t];a()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let a;"setTimeoutCustom"in W().platform&&(a=W().platform.setTimeoutCustom.bind(W().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),nh(this.gl,e,this.framebuffer),this.debug&&Nd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(nh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Nd(this.gl)):$1(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;nh(n,e,this.framebuffer),this.debug&&Nd(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 cH(e){let t=0;for(;t`${e}.${a}`)}function Ia(e,t){return t===1?[e]:e8(e,t)}function rj(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 M3(e){return e.internalFormatFloat}function Kv(e,t,a,n){let[r,s]=Xp(t,a);return Kp(e,r,s,M3(n),n.textureFormatFloat,e.FLOAT)}function P3(e){return e.internalFormatHalfFloat}function Yv(e,t,a,n){let[r,s]=Xp(t,a);return Kp(e,r,s,P3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function _3(e){return e.downloadTextureFormat}function Zv(e,t,a,n){let[r,s]=Xp(t,a);return Kp(e,r,s,_3(n),e.RGBA,e.UNSIGNED_BYTE)}function $3(e){return e.internalFormatPackedFloat}function Jv(e,t,a,n){let[r,s]=Uu(t,a);return Kp(e,r,s,$3(n),e.RGBA,e.FLOAT)}function F3(e){return e.internalFormatPackedHalfFloat}function Qv(e,t,a,n){let[r,s]=Uu(t,a);return Kp(e,r,s,F3(n),e.RGBA,n.textureTypeHalfFloat)}function e8(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),$1(e,t,"clipSpacePos",a,3,20,0)&&$1(e,t,"uv",a,2,20,12)}function t8(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 a8(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 n8(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 r8(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 s8(e,t,a,n){let[r,s]=Xp(t,a),i=4,o=new Uint8Array(bG(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function i8(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(vG(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 o8(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 Vl=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,a0(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=Cd(this.gl,r),mn(this.gl,s))this.textureHalfFloatExtension=Cd(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),mn(this.gl,n))this.colorBufferHalfFloatExtension=Cd(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",mn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(mn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=qv(this.gl),this.indexBuffer=Xv(this.gl),this.framebuffer=Cv(this.gl),this.textureConfig=C3(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(),Kv(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Yv(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Zv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),a8(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),t8(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Qv(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),Jv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(F1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>s8(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return i8(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return r8(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=n8(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,()=>o8(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=jv(t));let a=bv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),vv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&th(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)),e8(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&&th(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?Nv(this.gl,e,t):Rv(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(),Ev(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Uu(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&&th(this.gl,this.program),Td(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=Cd(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=SH(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(),ah(this.gl,e,this.framebuffer),this.debug&&Td(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(ah(this.gl,this.outputTexture,this.framebuffer),this.debug&&Td(this.gl)):F1(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;ah(n,e,this.framebuffer),this.debug&&Td(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 SH(e){let t=0;for(;t`${e}.${a}`)}function ka(e,t){return t===1?[e]:p8(e,t)}function yj(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]})`}},t8=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ya(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]})`}},c8=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,8 +1146,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${ij(t,this.enableShapeUniforms)} - ${this.enableShapeUniforms?C3():S3(e)} + ${Aj(t,this.enableShapeUniforms)} + ${this.enableShapeUniforms?R3():N3(e)} void main() { ivec3 rc = getOutputCoords(); @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function ij(e,t){return` + `}};function Aj(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t?bG(["r","c","d"],"inputShape"):el(["r","c","d"],e)} + ${t?_G(["r","c","d"],"inputShape"):tl(["r","c","d"],e)} return ivec3(r, c, d); } - `}var oj=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=A5(t,a),r=b5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=x5(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=A5(a,n),s=b5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=x5(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=W().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 lj(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 x5(e,t,a,n,r){let s=uj(t,n),i;if(r){let[l,u]=Uu(e[0],e[1]);i=l*u}else{let[l,u]=Yp(e[0],e[1]);i=l*u}let o=lj(a,s);return i*o}function uj(e,t){switch(e){case da.PACKED_2X2_FLOAT32:return M3(t);case da.PACKED_2X2_FLOAT16:return _3(t);case da.UNPACKED_FLOAT32:return N3(t);case da.UNPACKED_FLOAT16:return R3(t);case da.PACKED_4X1_UNSIGNED_BYTE:return E3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function dj(e){return W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?da.PACKED_2X2_FLOAT32:da.UNPACKED_FLOAT32:e?da.PACKED_2X2_FLOAT16:da.UNPACKED_FLOAT16}function A5(e,t){if(e===fn.UPLOAD)return da.PACKED_2X2_FLOAT32;if(e===fn.RENDER||e==null)return dj(t);if(e===fn.DOWNLOAD||e===fn.PIXELS)return da.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function b5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Kn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length),this.userCode=` + `}var bj=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=S5(t,a),r=C5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=I5(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===ua.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===ua.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===ua.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===ua.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===ua.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=S5(a,n),s=C5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=I5(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 vj(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 I5(e,t,a,n,r){let s=wj(t,n),i;if(r){let[l,u]=Uu(e[0],e[1]);i=l*u}else{let[l,u]=Xp(e[0],e[1]);i=l*u}let o=vj(a,s);return i*o}function wj(e,t){switch(e){case ua.PACKED_2X2_FLOAT32:return $3(t);case ua.PACKED_2X2_FLOAT16:return F3(t);case ua.UNPACKED_FLOAT32:return M3(t);case ua.UNPACKED_FLOAT16:return P3(t);case ua.PACKED_4X1_UNSIGNED_BYTE:return _3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function kj(e){return B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?ua.PACKED_2X2_FLOAT32:ua.UNPACKED_FLOAT32:e?ua.PACKED_2X2_FLOAT16:ua.UNPACKED_FLOAT16}function S5(e,t){if(e===hn.UPLOAD)return ua.PACKED_2X2_FLOAT32;if(e===hn.RENDER||e==null)return kj(t);if(e===hn.DOWNLOAD||e===hn.PIXELS)return ua.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function C5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Kn=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); } - `}},Mn="if (isnan(x)) return x;",pj="return x;",v5="return abs(x);",cj="return (x >= 0.0) ? x : (exp(x) - 1.0);",hj=Mn+` + `}},En="if (isnan(x)) return x;",Ij="return x;",T5="return abs(x);",Sj="return (x >= 0.0) ? x : (exp(x) - 1.0);",Cj=En+` return (x < 0.0) ? 0.0 : x; -`,mj=Mn+` +`,Tj=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Wr="return x;",fj="return 1.0 / (1.0 + exp(-1.0 * x));",gj="return x;",yj=` +`,Br="return x;",Nj="return 1.0 / (1.0 + exp(-1.0 * x));",Rj="return x;",Ej=` 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; -`,xj=` +`,Mj=` 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; -`,Aj=` +`,Pj=` 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; -`,bj="return 1.0 / (1.0 + exp(-1.0 * x));",Hr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length),this.userCode=` +`,_j="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,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},vj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ya(this.outputShape.length);let t=e.length,a=Ia("rc",t),n=ft(t),r=rj(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` + `}},$j=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=mt(t),r=yj(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})); } - `}},wj=En.whereImpl,kj=1e-7,Ij=1e-4,J2={};function Sj(e){return e in J2||(J2[e]={}),J2[e]}var Cj=W().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),Tj=600;function Nj(){return W().global.screen==null?1024:W().global.screen.height*W().global.screen.width*window.devicePixelRatio*Tj/1024/1024}var Ku=class extends au{nextDataId(){return Ku.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,!W().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Wl)t=e;else{let a=Wn(W().getNumber("WEBGL_VERSION"),e);t=new Wl(a)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let a=Wn(W().getNumber("WEBGL_VERSION"));t=new Wl(a),this.binaryCache=Sj(W().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new oj(this.gpgpu),this.numMBBeforeWarning=Nj(),this.texData=new ip(this,It())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,a,n,r,s){let i=this.makeTensorInfo(t,a),o=this.texData.get(i.dataId);o.isPacked=!1,o.texture={texture:e,texShape:[n,r]},o.texShape=[n,r];let l=Rd(t),u=new y5(l,!1,s),p=this.runWebGLProgram(u,[i],a,[[n,r]]);return p.shape=t,o.texture=null,this.disposeIntermediateTensorInfo(i),p.dataId}write(e,t,a){if((W().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||W().getBool("DEBUG"))&&this.checkNumericalProblems(e),a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:a,values:e,usage:fn.UPLOAD,refCount:1}),n}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,a,n,r){if(W().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:a,dtype:n,values:t,usage:fn.UPLOAD,refCount:r})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:a,dtype:n,complexTensorInfos:r,slice:s,shape:i,isPacked:o}=t;if(s!=null){let c;o?c=new Hr(i,Wr):c=new Kn(i,Wr);let d=this.runWebGLProgram(c,[{dataId:e,shape:i,dtype:n}],n),h=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),h}if(a!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return a;let l=this.activeTimers!=null,u;l&&(u=v.now());let p;if(n==="complex64"){let c=this.readSync(r.real.dataId),d=this.readSync(r.imag.dataId);p=S.mergeRealAndImagArrays(c,d)}else p=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=v.now()-u),this.convertAndCacheOnCPU(e,p)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(m=>h.push(m))}let t=this.texData.get(e),{values:a,shape:n,slice:r,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(r!=null){let h;o?h=new Hr(n,Wr):h=new Kn(n,Wr);let m=this.runWebGLProgram(h,[{dataId:e,shape:n,dtype:s}],s),f=this.read(m.dataId);return this.disposeIntermediateTensorInfo(m),f}if(a!=null)return this.convertAndCacheOnCPU(e);if(W().getBool("DEBUG")&&!W().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&W().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&W().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...Yc(n))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(s==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),m=h[0],f=h[1];p=S.mergeRealAndImagArrays(m,f)}else if(l==null)p=this.getValuesFromTexture(e);else{let h=v.sizeFromShape(n);p=this.gpgpu.downloadFloat32MatrixFromBuffer(l,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let h=this.gpgpu.gl;ce(h,()=>h.deleteBuffer(l))}let c=this.convertAndCacheOnCPU(e,p),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(h=>h(c)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&It().removeDataId(e,this),this.pendingDeletes--),c}readToGPU(e,t={}){let a=this.texData.get(e),{values:n,shape:r,slice:s,dtype:i,isPacked:o,texture:l}=a;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(s!=null){let d;o?d=new Hr(r,Wr):d=new Kn(r,Wr);let h=this.runWebGLProgram(d,[{dataId:e,shape:r,dtype:i}],i),m=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),m}if(l==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),p=It().makeTensorFromTensorInfo(u),c=this.texData.get(u.dataId);return Object.assign({tensorRef:p},c.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let a=t.map(n=>v.decodeString(n));return $e(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return $e(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=v.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(r);i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:a}=this.texData.get(e);return a!=null&&(this.disposeData(a.real.dataId,t),this.disposeData(a.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:a,texShape:n,usage:r,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,a),this.textureManager.releaseTexture(t,n,r,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=Cj){return W().getBool("WEBGL_CPU_FORWARD")&&e.every(a=>this.texData.get(a.dataId).texture==null&&v.sizeFromShape(a.shape)0&&v.isString(a[0])){let r=a.map(s=>v.encodeString(s));n=this.write(r,e,t)}else n=this.write(a,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,a){return It().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,a),this)}unpackTensor(e){let t=new vj(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new sj(e.shape),a=!0;return this.runWebGLProgram(t,[e],e.dtype,null,a)}packedReshape(e,t){let a=[Qs(e.shape),...ei(e.shape)],n={dtype:e.dtype,shape:a,dataId:e.dataId},r=[Qs(t),...ei(t)],s=new t8(r,a),i=!0,o=[a],l=this.runWebGLProgram(s,[n],e.dtype,o,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e,t){let a=this.texData.get(e),{isPacked:n,shape:r,dtype:s}=a;if(t!=null){let c=v.sizeFromShape(r),d=t[0]*t[1]*4;v.assert(c<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Rd(r),o;n?o=new oH(i):o=new iH(i);let l=!0,u=[t!=null?t:Yc(i)],p=this.runWebGLProgram(o,[{shape:i,dtype:s,dataId:e}],s,u,l,t);return{dtype:s,shape:r,dataId:p.dataId}}runWebGLProgram(e,t,a,n,r=!1,s){let i=this.makeTensorInfo(e.outputShape,a),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===Jd.DENSE){let g=s!=null?s:Yc(e.outputShape);o.texShape=g.map(y=>y*2)}if(e.outTexUsage!=null&&(o.usage=e.outTexUsage),v.sizeFromShape(i.shape)===0)return o.values=v.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let y=this.texData.get(g.dataId);if(y.texture==null){if(!e.packedInputs&&v.sizeFromShape(g.shape)<=W().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:y.values};e.packedInputs&&(y.isPacked=!0,y.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!y.isPacked!=!!e.packedInputs)g=y.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),y=this.texData.get(g.dataId);else if(y.isPacked&&!Qd(y.shape,g.shape)){let x=g,A=g.shape;g.shape=y.shape,g=this.packedReshape(g,A),l.push(g),y=this.texData.get(g.dataId),x.shape=A}return{shape:g.shape,texData:y,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:o,isUniform:!1},c=sH(e,u,p),d=this.getAndSaveBinary(c,()=>nH(this.gpgpu,e,u,p)),h=this.activeTimers!=null,m;h&&(m=this.startTimer()),W().get("ENGINE_COMPILE_ONLY")||rH(this.gpgpu,d,u,p,n),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(m=this.endTimer(m),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(m)}));let f=W().getNumber("WEBGL_FLUSH_THRESHOLD");if(f>0){let g=v.now();g-this.lastGlFlushTime>f&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!W().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&r===!1){let g=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),g}return i}compileAndRun(e,t,a,n,r=!1){return a=a||t[0].dtype,this.runWebGLProgram(e,t,a,n,r)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(W().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=De(()=>{if(!W().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=W().getBool("DEBUG");W().set("DEBUG",!1);let t=this.abs(Ge(1e-8)).dataSync()[0];if(W().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?kj:Ij}uploadToGPU(e){let t=this.texData.get(e),{shape:a,dtype:n,values:r,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=v.now());let p=t.texShape;if(p==null&&(p=wv(a,o),t.texShape=p),r!=null){let c=Rd(a),d,h=p[1],m=p[0],f=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!f)&&([h,m]=Uu(p[0],p[1])),o?d=new pH(c,f):d=new y5(c,f);let g=f?[m,h]:p,y=this.makeTensorInfo(g,n),x=this.texData.get(y.dataId);f?x.usage=fn.PIXELS:x.usage=fn.UPLOAD,x.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),h,m,r);let A=[[m,h]],b=!0,w=this.runWebGLProgram(d,[y],n,A,b),I=this.texData.get(w.dataId);t.texShape=I.texShape,t.isPacked=I.isPacked,t.usage=I.usage,W().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(t.texture=I.texture,t.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(y),l&&(this.uploadWaitMs+=v.now()-u)}else{let c=this.acquireTexture(p,i,n,o);t.texture=c}}convertAndCacheOnCPU(e,t){let a=this.texData.get(e),{dtype:n}=a;return t!=null&&(a.values=Rj(t,n)),a.values}acquireTexture(e,t,a,n){if(this.numBytesInGPU+=this.computeBytes(e,a),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let r=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${r} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*v.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let a=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(r){throw r}});e.push(a)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await M7(),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?(I3(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:a,infLoc:n,nanLoc:r,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:o}=Pv(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=a,e.infLoc=n,e.nanLoc=r,e.outShapeLocation=s,e.outShapeStridesLocation=i,e.outTexShapeLocation=o}}createTensorFromGPUData(e,t,a){e.channels=e.channels||"RGBA";let{texture:n,height:r,width:s,channels:i}=e,o=It().backend;if(!o.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let l=o.writeTexture(n,t,a,r,s,i);return It().makeTensorFromDataId(l,t,a,o)}};Ku.nextDataId=0;function Rj(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 Ku,2);var Mj={forceHalfFloat:a8},$3=` + `}},Fj=Rn.whereImpl,Dj=1e-7,Oj=1e-4,Z2={};function zj(e){return e in Z2||(Z2[e]={}),Z2[e]}var Lj=B().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),Wj=600;function Bj(){return B().global.screen==null?1024:B().global.screen.height*B().global.screen.width*window.devicePixelRatio*Wj/1024/1024}var Yp=class h8 extends au{nextDataId(){return h8.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 Vl)a=t;else{let n=Wn(B().getNumber("WEBGL_VERSION"),t);a=new Vl(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Wn(B().getNumber("WEBGL_VERSION"));a=new Vl(n),this.binaryCache=zj(B().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=a,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new bj(this.gpgpu),this.numMBBeforeWarning=Bj(),this.texData=new rp(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=Nd(a),p=new k5(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:hn.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:hn.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 Kn(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 Kn(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,...Kc(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 Kn(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=Lj){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 $j(t.shape);return this.runWebGLProgram(a,[t],t.dtype)}packTensor(t){let a=new xj(t.shape),n=!0;return this.runWebGLProgram(a,[t],t.dtype,null,n)}packedReshape(t,a){let n=[ei(t.shape),...ti(t.shape)],r={dtype:t.dtype,shape:n,dataId:t.dataId},s=[ei(a),...ti(a)],i=new c8(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=Nd(s),l;r?l=new bH(o):l=new AH(o);let u=!0,p=[a!=null?a:Kc(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===Yd.DENSE){let y=i!=null?i:Kc(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&&!Zd(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=xH(t,p,c),h=this.getAndSaveBinary(d,()=>gH(this.gpgpu,t,p,c)),m=this.activeTimers!=null,f;m&&(f=this.startTimer()),B().get("ENGINE_COMPILE_ONLY")||yH(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?Dj:Oj}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=_v(n,l),a.texShape=c),s!=null){let d=Nd(n),h,m=c[1],f=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(l||!g)&&([m,f]=Uu(c[0],c[1])),l?h=new IH(d,g):h=new k5(d,g);let y=g?[f,m]:c,x=this.makeTensorInfo(y,r),A=this.texData.get(x.dataId);g?A.usage=hn.PIXELS:A.usage=hn.UPLOAD,A.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),m,f,s);let b=[[f,m]],w=!0,I=this.runWebGLProgram(h,[x],r,b,w),T=this.texData.get(I.dataId);a.texShape=T.texShape,a.isPacked=T.isPacked,a.usage=T.usage,B().get("ENGINE_COMPILE_ONLY")?this.disposeData(I.dataId):(a.texture=T.texture,a.values=null,this.texData.delete(I.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=Vj(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 W7(),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?(T3(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}=Gv(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)}};Yp.nextDataId=0;function Vj(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 Yp,2);var Gj={forceHalfFloat:m8},O3=` if (isnan(a)) return a; if (isnan(b)) return b; -`,ti=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=S.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=ya(this.outputShape.length),this.userCode=` +`,ai=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } @@ -1242,17 +1242,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } - `}},al=` + `}},nl=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; -`,Yu=class{constructor(e,t,a,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=S.assertAndGetBroadcastShape(t,a);let r=this.outputShape.length;this.enableShapeUniforms=ya(r);let s="";if(n)if(r===0||v.sizeFromShape(this.outputShape)===1)s=` +`,Ku=class{constructor(e,t,a,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,a);let r=this.outputShape.length;this.enableShapeUniforms=ga(r);let s="";if(n)if(r===0||v.sizeFromShape(this.outputShape)===1)s=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(s=` - ${ft(r)} coords = getOutputCoords(); + ${mt(r)} coords = getOutputCoords(); `,r===1)this.enableShapeUniforms?s+=` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; @@ -1261,7 +1261,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; - `;else{let i=Ia("coords",r);this.enableShapeUniforms?s+=` + `;else{let i=ka("coords",r);this.enableShapeUniforms?s+=` bool nextRowOutOfBounds = (${i[r-2]} + 1) >= outShape[${r} - 2]; bool nextColOutOfBounds = @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function tn(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 _j={kernelName:Gi,backendName:"webgl",kernelFunc:tn};function ps(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=tn({inputs:{x:n},backend:a}),l=tn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Pj={kernelName:pp,backendName:"webgl",kernelFunc:ps},n8="return (a < 0.) ? b * a : a;",r8=` + `}};function Qa(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 Hj={kernelName:Hi,backendName:"webgl",kernelFunc:Qa};function hs(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=Qa({inputs:{x:n},backend:a}),l=Qa({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var jj={kernelName:up,backendName:"webgl",kernelFunc:hs},f8="return (a < 0.) ? b * a : a;",g8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function $j(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Yu(r8,r.shape,i.shape):new ti(n8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var Fj={kernelName:Xi,backendName:"webgl",kernelFunc:$j},s8="return (a < 0.) ? b * a : a;",i8=` +`;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 Ku(g8,r.shape,i.shape):new ai(f8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var Xj={kernelName:Ki,backendName:"webgl",kernelFunc:qj},y8="return (a < 0.) ? b * a : a;",x8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function Dj(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Yu(i8,n.shape,r.shape):new ti(s8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var Oj={kernelName:vo,backendName:"webgl",kernelFunc:Dj},Zu="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=W().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new Hr(i.shape,t):p=new Kn(i.shape,e),o.runWebGLProgram(p,[i],l)}}function ma({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 ti(e,l.shape,u.shape);return p.runWebGLProgram(N,[I,T],pa(b.dtype,w.dtype))}),x=ps({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"?S.fromUint8ToStringArray(m):m,y=l.dtype==="string"?S.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=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new Yu(t,l.shape,u.shape,a):h=new ti(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function ep(e,t=!1){if(e==="linear")return t?gj:pj;if(e==="relu")return t?xj:hj;if(e==="elu")return t?yj:cj;if(e==="relu6")return t?Aj:mj;if(e==="prelu")return t?i8:s8;if(e==="leakyrelu")return t?r8:n8;if(e==="sigmoid")return t?bj:fj;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var o8=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=ya(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 Kj(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ku(x8,n.shape,r.shape):new ai(y8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var Yj={kernelName:wo,backendName:"webgl",kernelFunc:Kj},Yu="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 Kn(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 ai(e,l.shape,u.shape);return p.runWebGLProgram(N,[I,T],da(b.dtype,w.dtype))}),x=hs({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),x}let c=s||da(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 Ku(t,l.shape,u.shape,a):h=new ai(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function Jd(e,t=!1){if(e==="linear")return t?Rj:Ij;if(e==="relu")return t?Mj:Cj;if(e==="elu")return t?Ej:Sj;if(e==="relu6")return t?Pj:Tj;if(e==="prelu")return t?x8:y8;if(e==="leakyrelu")return t?g8:f8;if(e==="sigmoid")return t?_j:Nj;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var A8=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); } - `}},w5={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},k5=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=S.assertAndGetBroadcastShape(t,a),this.userCode=` + `}},N5={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},R5=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)); } - `}},I5="return a * b;";function F3(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=S.upcastType(n.dtype,r.dtype);if(n.dtype==="complex64"){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),u=new k5(w5.REAL,n.shape,r.shape),p=new k5(w5.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=ps({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]=$H(n.shape,r.shape,o.values,l.values,s),c=a.makeTensorInfo(p,s),d=a.texData.get(c.dataId);return d.values=u,c}let i;return W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new Yu(I5,n.shape,r.shape):i=new ti(I5,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var zj={kernelName:mo,backendName:"webgl",kernelFunc:F3};function Lj(e,t,a){let n=[Qs(e.shape),...ei(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[Qs(t),...ei(t)],i=new t8(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))?Lj(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var Wj={kernelName:Tu,backendName:"webgl",kernelFunc:pe},S5=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=` + `}},E5="return a * b;";function z3(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 R5(N5.REAL,n.shape,r.shape),p=new R5(N5.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=hs({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 Ku(E5,n.shape,r.shape):i=new ai(E5,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var Zj={kernelName:fo,backendName:"webgl",kernelFunc:z3};function Jj(e,t,a){let n=[ei(e.shape),...ti(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[ei(t),...ti(t)],i=new c8(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&&!Zd(r.shape,l)&&!(p.texture!==null&&Zd(p.shape,l))?Jj(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var Qj={kernelName:Tu,backendName:"webgl",kernelFunc:pe},M5=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); } - `}},Bj=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=` + `}},eq=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 Vj(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=S.computeOptimalWindowSize(a);t.push({inSize:a,windowSize:n,outSize:Math.ceil(a/n)})}return t}function nl(e,t,a,n){let r=Vj(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=e8("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=mt(this.rank),r=p8("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),P=a?I.shape[1]:I.shape[2],E=s!=null,C=i!=null,_=l==="leakyrelu",O=l!=null?ep(l,!0):null,B=E||C||_||O!=null,F;if((h===1||m===1)&&P>l8&&B===!1){let G=I,q=T;a&&(G=Ta({inputs:{x:I},backend:r,attrs:{perm:[0,2,1]}}),N.push(G)),n&&(q=Ta({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,P,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,P]}}),N.push(re));let ee=F3({inputs:{a:Z,b:re},backend:r});F=s0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=pa(e.dtype,t.dtype),q=new o8(b,w,[M,h,m],a,n,E,O,C,_),H=[I,T];if(s!=null&&H.push(s),C&&H.push(i),_){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),N.push(V)}F=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:F},backend:r,attrs:{shape:A}});N.push(F);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function Kj(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 wh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var Yj={kernelName:Kr,backendName:"webgl",kernelFunc:Kj},C5="return abs(x);";function Zj(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=Jv(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Hr(n.shape,C5):r=new Kn(n.shape,C5),a.runWebGLProgram(r,[n],n.dtype)}var Jj={kernelName:ru,backendName:"webgl",kernelFunc:Zj},Qj=Mn+` + `}};function r0(e,t,a){let n=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new rq(e.shape,t):new aq(e.shape,t);return a.runWebGLProgram(n,[e],e.dtype)}function sq(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=r0(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=Mp(e.dtype),x=rl(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 s0(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return sq(r,s,i,a)}var iq={kernelName:Vo,backendName:"webgl",kernelFunc:s0};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),P=a?I.shape[1]:I.shape[2],E=s!=null,S=i!=null,_=l==="leakyrelu",O=l!=null?Jd(l,!0):null,W=E||S||_||O!=null,$;if((h===1||m===1)&&P>b8&&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,P,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,P]}}),N.push(re));let ee=z3({inputs:{a:Z,b:re},backend:r});$=s0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=da(e.dtype,t.dtype),q=new A8(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)}$=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:$},backend:r,attrs:{shape:A}});N.push($);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function lq(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 wh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var uq={kernelName:Yr,backendName:"webgl",kernelFunc:lq},P5="return abs(x);";function dq(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=u8(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,P5):r=new Kn(n.shape,P5),a.runWebGLProgram(r,[n],n.dtype)}var pq={kernelName:ru,backendName:"webgl",kernelFunc:dq},cq=En+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,eq=tt({opSnippet:Qj}),tq={kernelName:ri,backendName:"webgl",kernelFunc:eq},aq=Mn+` +`,hq=tt({opSnippet:cq}),mq={kernelName:si,backendName:"webgl",kernelFunc:hq},fq=En+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,nq=tt({opSnippet:aq}),rq={kernelName:si,backendName:"webgl",kernelFunc:nq},T5="return a + b;",sq=ma({opSnippet:T5,packedOpSnippet:T5,supportsComplex:!0,cpuKernelImpl:hH}),iq={kernelName:rs,backendName:"webgl",kernelFunc:sq},oq=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));`,gq=tt({opSnippet:fq}),yq={kernelName:ii,backendName:"webgl",kernelFunc:gq},_5="return a + b;",xq=ha({opSnippet:_5,packedOpSnippet:_5,supportsComplex:!0,cpuKernelImpl:CH}),Aq={kernelName:is,backendName:"webgl",kernelFunc:xq},bq=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));`,nq=tt({opSnippet:aq}),rq={kernelName:si,back float result = ${n}; setOutput(result); } - `}},lq=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=` + `}},vq=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));`,nq=tt({opSnippet:aq}),rq={kernelName:si,back vec4 result = ${n}; setOutput(result); } - `}};function ih(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return tn({inputs:{x:n[0]},backend:a});if(n.length>W().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=ih({inputs:n.slice(0,o),backend:a}),u=ih({inputs:n.slice(o),backend:a});return ih({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=W().getBool("WEBGL_PACK")?new lq(n[0].shape,s):new oq(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var uq={kernelName:ii,backendName:"webgl",kernelFunc:ih};function dq(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=S.getAxesPermutation(u,o),c=r;p!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:p}}),u=S.getInnerMostAxes(u.length,o)),S.assertAxesAreInnerMostDims("all",u,o);let[d,h]=S.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=nl(f,f.dtype,"all",a),y;if(i){let x=S.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:oi,backendName:"webgl",kernelFunc:dq};function cq(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=S.getAxesPermutation(u,o),c=r;p!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:p}}),u=S.getInnerMostAxes(u.length,o)),S.assertAxesAreInnerMostDims("any",u,o);let[d,h]=S.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=nl(f,f.dtype,"any",a),y;if(i){let x=S.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 hq={kernelName:li,backendName:"webgl",kernelFunc:cq},mq=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 sh(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return Qa({inputs:{x:n[0]},backend:a});if(n.length>B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=sh({inputs:n.slice(0,o),backend:a}),u=sh({inputs:n.slice(o),backend:a});return sh({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>da(o,l)),s=n.map(o=>o.shape),i=B().getBool("WEBGL_PACK")?new vq(n[0].shape,s):new bq(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var wq={kernelName:oi,backendName:"webgl",kernelFunc:sh};function kq(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=rl(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 Iq={kernelName:li,backendName:"webgl",kernelFunc:kq};function Sq(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=rl(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 Cq={kernelName:ui,backendName:"webgl",kernelFunc:Sq},Tq=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));`,nq=tt({opSnippet:aq}),rq={kernelName:si,back } setOutput(float(bestIndex)); } - `}},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=Ia("coords",o),p,c;if(s===1){c=o+1;let T=ft(c);p=` + `}},Nq=class{constructor(e,t,a,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${a.charAt(0).toUpperCase()+a.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=mt(o),u=ka("coords",o),p,c;if(s===1){c=o+1;let T=mt(c);p=` ${T} sourceLocR = ${T}(${u.join()}, 0); ++${u[o-1]}; ${T} sourceLocG = ${T}(${u.join()}, 0); @@ -1575,7 +1575,7 @@ return log(x + sqrt(x * x - 1.0));`,nq=tt({opSnippet:aq}),rq={kernelName:si,back ${l} sourceLocA = coords; --${u[o-1]}; ${l} sourceLocB = coords; - --${u[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,c),h="."+d[c-1],m=d.map(T=>"int "+T),f=Ia("sourceLocR",c-1).concat("inIdx.r"),g=Ia("sourceLocG",c-1).concat("inIdx.g"),y=Ia("sourceLocB",c-1).concat("inIdx.b"),x=Ia("sourceLocA",c-1).concat("inIdx.a"),A=a==="max"?"greaterThan":"lessThan",b=n?"":` + --${u[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,c),h="."+d[c-1],m=d.map(T=>"int "+T),f=ka("sourceLocR",c-1).concat("inIdx.r"),g=ka("sourceLocG",c-1).concat("inIdx.g"),y=ka("sourceLocB",c-1).concat("inIdx.b"),x=ka("sourceLocA",c-1).concat("inIdx.a"),A=a==="max"?"greaterThan":"lessThan",b=n?"":` inIdx = round(vec4(getBestIndicesAChannel(${f.join()}), getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${y.join()}), @@ -1621,25 +1621,25 @@ return log(x + sqrt(x * x - 1.0));`,nq=tt({opSnippet:aq}),rq={kernelName:si,back } setOutput(bestIndex); } - `}};function u8(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=S.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new mq(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=u8(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function d8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=S.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=d8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function p8(e,t,a,n){let r=[a];if(S.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!W().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,p]=S.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(p),d=pe({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(d);let h=u8(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 d8(e,t,n)}function gq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=S.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ta({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=S.getInnerMostAxes(i.length,l.shape.length)),S.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=p8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var yq={kernelName:su,backendName:"webgl",kernelFunc:gq};function xq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=S.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ta({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=S.getInnerMostAxes(i.length,l.shape.length)),S.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=p8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Aq={kernelName:iu,backendName:"webgl",kernelFunc:xq},bq=Mn+` + `}};function v8(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 Tq(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=v8(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function w8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=C.computeOptimalWindowSize(s),o=new Nq(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=w8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function k8(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=v8(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 w8(e,t,n)}function Rq(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=k8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Eq={kernelName:su,backendName:"webgl",kernelFunc:Rq};function Mq(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=k8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Pq={kernelName:iu,backendName:"webgl",kernelFunc:Mq},_q=En+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,vq=tt({opSnippet:bq}),wq={kernelName:ui,backendName:"webgl",kernelFunc:vq},kq=Mn+"return log(x + sqrt(x * x + 1.0));",Iq=tt({opSnippet:kq}),Sq={kernelName:di,backendName:"webgl",kernelFunc:Iq},Cq=Mn+` +`,$q=tt({opSnippet:_q}),Fq={kernelName:di,backendName:"webgl",kernelFunc:$q},Dq=En+"return log(x + sqrt(x * x + 1.0));",Oq=tt({opSnippet:Dq}),zq={kernelName:pi,backendName:"webgl",kernelFunc:Oq},Lq=En+` return atan(x); -`,Tq=tt({opSnippet:Cq}),Nq={kernelName:pi,backendName:"webgl",kernelFunc:Tq},Rq=$3+` +`,Wq=tt({opSnippet:Lq}),Bq={kernelName:ci,backendName:"webgl",kernelFunc:Wq},Vq=O3+` return atan(a, b); -`,Eq=` +`,Uq=` 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); - `+al+` + `+nl+` return result; -`,Mq=ma({opSnippet:Rq,packedOpSnippet:Eq}),_q={kernelName:hi,backendName:"webgl",kernelFunc:Mq},Pq=Mn+` +`,Gq=ha({opSnippet:Vq,packedOpSnippet:Uq}),Hq={kernelName:mi,backendName:"webgl",kernelFunc:Gq},jq=En+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelName:ci,backendName:"webgl",kernelFunc:$q},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;`,qq=tt({opSnippet:jq}),Xq={kernelName:hi,backendName:"webgl",kernelFunc:qq},Qd=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}); @@ -1780,7 +1780,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(${A}); } - `}},D3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,c=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let x=t==="avg",A="0.0";if(x||(A="-1.0 / 1e-20"),a){let M=">=";this.userCode=` + `}},L3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,c=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let x=t==="avg",A="0.0";if(x||(A="-1.0 / 1e-20"),a){let M=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); const ivec3 pads = ivec3(${f}, ${g}, ${y}); @@ -1943,7 +1943,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(${w}); } - `}};function Dq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Gu(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(S.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=S.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return tn({inputs:{x:r},backend:a});let c=new tp(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var Oq={kernelName:mi,backendName:"webgl",kernelFunc:Dq};function zq(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=S.computePool3DInfo(r.shape,s,i,p,o,l,u),d=new D3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var Lq={kernelName:ou,backendName:"webgl",kernelFunc:zq},Wq=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 Kq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Gu(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 Qa({inputs:{x:r},backend:a});let c=new Qd(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var Yq={kernelName:fi,backendName:"webgl",kernelFunc:Kq};function Zq(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 L3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var Jq={kernelName:ou,backendName:"webgl",kernelFunc:Zq},Qq=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},Bq=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=` + `}},eX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}};function Vq(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=S.computePool3DInfo(i.shape,o,l,c,u,p),h=new Bq(d);return a.runWebGLProgram(h,[r],i.dtype)}var Uq={kernelName:dp,backendName:"webgl",kernelFunc:Vq};function Gq(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Gu([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=S.computePool2DInfo(i.shape,o,l,1,u),c=new Wq(p);return a.runWebGLProgram(c,[r],i.dtype)}var Hq={kernelName:up,backendName:"webgl",kernelFunc:Gq};function jq(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return wh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var qq={kernelName:fi,backendName:"webgl",kernelFunc:jq},Xq=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(S.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function tX(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 eX(d);return a.runWebGLProgram(h,[r],i.dtype)}var aX={kernelName:lp,backendName:"webgl",kernelFunc:tX};function nX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Gu([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new Qq(p);return a.runWebGLProgram(c,[r],i.dtype)}var rX={kernelName:op,backendName:"webgl",kernelFunc:nX};function sX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return wh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var iX={kernelName:gi,backendName:"webgl",kernelFunc:sX},oX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam float inv = scale * inversesqrt(variance + float(${s})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}},Kq=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(e,t),S.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(S.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(S.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}},lX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam setOutput((x - mean) * inv + offset); } - `}},Yq=({inputs:e,backend:t,attrs:a})=>{let{x:n,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=a;l==null&&(l=.001);let u=[n,r,s],p=null;i!=null&&(p=i.shape,u.push(i));let c=null;o!=null&&(c=o.shape,u.push(o));let d=W().getBool("WEBGL_PACK_NORMALIZATION")?new Kq(n.shape,r.shape,s.shape,p,c,l):new Xq(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},Zq={kernelName:Wi,backendName:"webgl",kernelFunc:Yq},Jq=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=Qq(this.rank),n,r=e.map((s,i)=>`sourceLoc.${O1[i]} = start[${i}] + coords.${O1[i]};`);n=` + `}},uX=({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 lX(n.shape,r.shape,s.shape,p,c,l):new oX(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},dX={kernelName:Bi,backendName:"webgl",kernelFunc:uX},pX=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=mt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=cX(this.rank),n,r=e.map((s,i)=>`sourceLoc.${z1[i]} = start[${i}] + coords.${z1[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${r.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${n} setOutput(getSource(${a})); } - `}},O1=["x","y","z","w","u","v"];function Qq(e){if(e===1)return"sourceLoc";if(e<=6)return O1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var eX=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=Ia("coords",this.rank),n=Ia("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` + `}},z1=["x","y","z","w","u","v"];function cX(e){if(e===1)return"sourceLoc";if(e<=6)return z1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var hX=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=mt(this.rank),a=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${o} setOutput(result); } - `}};function tX(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 Ju(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=HH(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=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new eX(l):new Jq(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),tX(r,o,l,a)}var aX={kernelName:Mu,backendName:"webgl",kernelFunc:Ju},nX=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=S.getReshaped(r.shape,s,o),u=S.getPermuted(l.length,s.length),p=S.getReshapedPermuted(r.shape,s,o),c=S.getSliceBeginCoords(i,s.length),d=S.getSliceSize(p,i,s.length),h=[],m=pe({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Ta({inputs:{x:m},backend:a,attrs:{perm:u}}),g=pe({inputs:{x:f},backend:a,attrs:{shape:p}}),y=Ju({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},rX={kernelName:lu,backendName:"webgl",kernelFunc:nX};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=Zv(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var iX={kernelName:gi,backendName:"webgl",kernelFunc:sX},oX=` + `}};function mX(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 Zu(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=rj(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 hX(l):new pX(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),mX(r,o,l,a)}var fX={kernelName:Mu,backendName:"webgl",kernelFunc:Zu},gX=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=Zu({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},yX={kernelName:lu,backendName:"webgl",kernelFunc:gX};function xX(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=l8(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var AX={kernelName:yi,backendName:"webgl",kernelFunc:xX},bX=` 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); -`,lX=` +`,vX=` return float(int(a.r) & int(b.r)); -`;function uX(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS"),i=W().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 Yu(oX,n.shape,r.shape,!1):o=new ti(lX,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var dX={kernelName:uu,backendName:"webgl",kernelFunc:uX};function pX(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=S.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var cX={kernelName:du,backendName:"webgl",kernelFunc:pX},hX="return float(a != b);",c8=ma({opSnippet:hX,cpuKernelImpl:DH,dtype:"bool"}),mX={kernelName:fo,backendName:"webgl",kernelFunc:c8};function Jp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.real},backend:a})}var fX={kernelName:kp,backendName:"webgl",kernelFunc:Jp},gX="return float(int(x));";function yX(e,t){let a=new Kn(e.shape,gX),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function z1(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=z1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ps({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Jp({inputs:{input:r},backend:a}),o=z1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),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.texData.get(r.dataId).values,[o,l,u]=gH(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return yX(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=c8({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 xX={kernelName:yi,backendName:"webgl",kernelFunc:z1},N5="return ceil(x);",AX=tt({opSnippet:N5,packedOpSnippet:N5,cpuKernelImpl:yH}),bX={kernelName:xi,backendName:"webgl",kernelFunc:AX},vX=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` +`;function wX(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]=NH(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 Ku(bX,n.shape,r.shape,!1):o=new ai(vX,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var kX={kernelName:uu,backendName:"webgl",kernelFunc:wX};function IX(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 SX={kernelName:du,backendName:"webgl",kernelFunc:IX},CX="return float(a != b);",I8=ha({opSnippet:CX,cpuKernelImpl:KH,dtype:"bool"}),TX={kernelName:go,backendName:"webgl",kernelFunc:I8};function Zp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Qa({inputs:{x:r.complexTensorInfos.real},backend:a})}var NX={kernelName:vp,backendName:"webgl",kernelFunc:Zp},RX="return float(int(x));";function EX(e,t){let a=new Kn(e.shape,RX),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function L1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return Qa({inputs:{x:r},backend:a});let i=gn(r.shape),o=L1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=hs({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Zp({inputs:{input:r},backend:a}),o=L1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=Qa({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]=RH(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return EX(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=I8({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 MX={kernelName:xi,backendName:"webgl",kernelFunc:L1},$5="return ceil(x);",PX=tt({opSnippet:$5,packedOpSnippet:$5,cpuKernelImpl:EH}),_X={kernelName:Ai,backendName:"webgl",kernelFunc:PX},$X=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}},wX=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=` + `}},FX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function kX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;W().getBool("WEBGL_PACK_CLIP")?o=new wX(r.shape):o=new vX(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var IX={kernelName:ss,backendName:"webgl",kernelFunc:kX},SX=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function DX(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 FX(r.shape):o=new $X(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var OX={kernelName:os,backendName:"webgl",kernelFunc:DX},zX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function R5(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function CX(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.texData.get(n.dataId),s=new SX(n.shape),i=[R5(n,r.complexTensorInfos.real),R5(n,r.complexTensorInfos.imag)];return a.runWebGLProgram(s,i,i[0].dtype)}var TX={kernelName:cp,backendName:"webgl",kernelFunc:CX},NX=class{constructor(e){this.outputShape=[],this.outputShape=S.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;m= ${o[m-1]}) { return getChannel( - getT${m}(${Jc(i,l,f)}), - vec2(${Jc(u,l,f)})); + getT${m}(${Zc(i,l,f)}), + vec2(${Zc(u,l,f)})); }`}let d=o.length,h=o[o.length-1];c+=` return getChannel( - getT${d}(${Jc(i,l,h)}), - vec2(${Jc(u,l,h)}));`,this.userCode=` + getT${d}(${Zc(i,l,h)}), + vec2(${Zc(u,l,h)}));`,this.userCode=` float getValue(${i.map(m=>"int "+m)}) { ${c} } @@ -2192,7 +2192,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(result); } - `}};function Jc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function i0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.imag},backend:a})}var EX={kernelName:bp,backendName:"webgl",kernelFunc:i0};function Ed(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>Jp({inputs:{input:x},backend:a})),m=e.map(x=>i0({inputs:{input:x},backend:a})),f=Ed(h,t,a),g=Ed(m,t,a),y=ps({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=S.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,y=xH(m,f,n,g),x=S.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=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new Kn(e[0].shape,Wr):new Hr(e[0].shape,Wr);return a.runWebGLProgram(h,e,n)}let o=W().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}=MX(s,t,a),p=new NX(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 MX(e,t,a){let n=S.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 h8(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);S.assertParamsConsistent(i,s);let o=S.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}):Ed(l,s,a)}var _X={kernelName:pu,backendName:"webgl",kernelFunc:h8},m8=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 Zc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function i0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return Qa({inputs:{x:r.complexTensorInfos.imag},backend:a})}var UX={kernelName:xp,backendName:"webgl",kernelFunc:i0};function Rd(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>Zp({inputs:{input:x},backend:a})),m=e.map(x=>i0({inputs:{input:x},backend:a})),f=Rd(h,t,a),g=Rd(m,t,a),y=hs({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=MH(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 Kn(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}=GX(s,t,a),p=new BX(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 GX(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 S8(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?Qa({inputs:{x:l[0]},backend:a}):Rd(l,s,a)}var HX={kernelName:pu,backendName:"webgl",kernelFunc:S8},C8=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${b} setOutput(result); } - `}},PX=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=` + `}},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=` 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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},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=ya(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,p=u,c=` + `}},T8=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 g8({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=kh(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=kh(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||d===1)&&p>l8)&&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=wh({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=tn({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=wh({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 y8({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=kh(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=kh(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 $X(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 P=r!=null,E=s!=null,C=o==="leakyrelu",_=o?ep(o,!0):null,O=new o8(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,P,_,E,C),B=m?[M,w]:[w,M];if(r&&B.push(r),E&&B.push(s),C){let G=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));B.push(G),b.push(G)}let F=n.runWebGLProgram(O,B,"float32"),U=pe({inputs:{x:F},backend:n,attrs:{shape:a.outShape}});b.push(F);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function FX(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=S.convertConv2DDataFormat(l),d=S.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=g8({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&W().getBool("WEBGL_EXP_CONV")){let f=new f8(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(W().getBool("WEBGL_CONV_IM2COL"))h=y8({x:r,filter:s,convInfo:d,backend:a});else{let f=new m8(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 DX={kernelName:Ai,backendName:"webgl",kernelFunc:FX},OX=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 kh(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 N8({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=kh(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=kh(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||d===1)&&p>b8)&&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(Zd(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=wh({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=Qa({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=wh({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 R8({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=kh(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=kh(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 P=r!=null,E=s!=null,S=o==="leakyrelu",_=o?Jd(o,!0):null,O=new A8(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,P,_,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 $=n.runWebGLProgram(O,W,"float32"),U=pe({inputs:{x:$},backend:n,attrs:{shape:a.outShape}});b.push($);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function XX(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=N8({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let f=new T8(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=R8({x:r,filter:s,convInfo:d,backend:a});else{let f=new C8(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 KX={kernelName:bi,backendName:"webgl",kernelFunc:XX},YX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},zX=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=` + `}},ZX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},LX=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=` + `}},JX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},WX=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=` + `}},QX=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}};function BX(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=S.convertConv2DDataFormat(l),d=S.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new OX(d);return a.runWebGLProgram(h,[r,s],"float32")}var VX={kernelName:hp,backendName:"webgl",kernelFunc:BX},UX=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=ya(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 eK(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 YX(d);return a.runWebGLProgram(h,[r,s],"float32")}var tK={kernelName:pp,backendName:"webgl",kernelFunc:eK},aK=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(result); } - `}};function GX(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=S.convertConv2DDataFormat(u),d=S.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c);if(W().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let h=[[d.strideHeight,d.strideWidth]],m=new UX(d);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new zX(d);return a.runWebGLProgram(h,[r,s],"float32")}}var HX={kernelName:bi,backendName:"webgl",kernelFunc:GX};function jX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=S.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new PX(u);return a.runWebGLProgram(p,[r,s],"float32")}var qX={kernelName:vi,backendName:"webgl",kernelFunc:jX};function XX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=S.computeConv3DInfo(r.shape,l,i,1,o),p=new LX(u);return a.runWebGLProgram(p,[r,s],"float32")}var KX={kernelName:cu,backendName:"webgl",kernelFunc:XX};function YX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=S.computeConv3DInfo(l,s.shape,o,1,i),p=new WX(u);return a.runWebGLProgram(p,[r,s],"float32")}var ZX={kernelName:wi,backendName:"webgl",kernelFunc:YX},JX=Zu+` + `}};function nK(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 aK(d);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new ZX(d);return a.runWebGLProgram(h,[r,s],"float32")}}var rK={kernelName:vi,backendName:"webgl",kernelFunc:nK};function sK(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 iK={kernelName:wi,backendName:"webgl",kernelFunc:sK};function oK(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 JX(u);return a.runWebGLProgram(p,[r,s],"float32")}var lK={kernelName:cu,backendName:"webgl",kernelFunc:oK};function uK(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 QX(u);return a.runWebGLProgram(p,[r,s],"float32")}var dK={kernelName:ki,backendName:"webgl",kernelFunc:uK},pK=Yu+` return cos(x); -`,QX=` +`,cK=` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${al} + ${nl} return result; -`,eK=tt({opSnippet:JX,packedOpSnippet:QX}),tK={kernelName:ki,backendName:"webgl",kernelFunc:eK},aK=` +`,hK=tt({opSnippet:pK,packedOpSnippet:cK}),mK={kernelName:Ii,backendName:"webgl",kernelFunc:hK},fK=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,nK=tt({opSnippet:aK}),rK={kernelName:Ii,backendName:"webgl",kernelFunc:nK},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=` +`,gK=tt({opSnippet:fK}),yK={kernelName:Si,backendName:"webgl",kernelFunc:gK},xK=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam setOutput(newValue); } } - `}},iK=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")},oK={kernelName:Ti,backendName:"webgl",kernelFunc:iK},ap;(function(e){e.Prod="*",e.Sum="+"})(ap||(ap={}));var E5=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(${M5(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=` + `}},AK=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 xK(r.shape,s.shape,o,l,u);return a.runWebGLProgram(p,[r,s,i],"float32")},bK={kernelName:Ni,backendName:"webgl",kernelFunc:AK},ep;(function(e){e.Prod="*",e.Sum="+"})(ep||(ep={}));var D5=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===ep.Prod?"1.0":"0.0",i=a?s:`getX(${O5(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 = ${_5(r,"coords",this.op)}; + ${mt(r)} coords = getOutputCoords(); + int end = ${z5(r,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${l}) { int idx = ${u}; - ${_5(r,"coords",this.op)} = idx; - val ${this.op}= getX(${M5(r,"coords",this.op)}); + ${z5(r,"coords",this.op)} = idx; + val ${this.op}= getX(${O5(r,"coords",this.op)}); } setOutput(val); } - `}};function M5(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 _5(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 x8(e,t,a,n,r,s){let i=t.shape.length,o=S.getAxesPermutation([n],i),l=t;o!=null&&(l=Ta({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=S.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=tn({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new E5(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 E5(e,l.shape,r,s),h=c;c=a.runWebGLProgram(d,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let d=S.getUndoAxesPermutation(o),h=Ta({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function lK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return x8(ap.Prod,r,a,s,i,o)}var uK={kernelName:Si,backendName:"webgl",kernelFunc:lK};function dK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return x8(ap.Sum,r,a,s,i,o)}var pK={kernelName:Ci,backendName:"webgl",kernelFunc:dK};function cK(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=Zv(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=mH(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 hK={kernelName:hu,backendName:"webgl",kernelFunc:cK},mK=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` + `}};function O5(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 z5(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 E8(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=Qa({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new D5(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 D5(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 vK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return E8(ep.Prod,r,a,s,i,o)}var wK={kernelName:Ci,backendName:"webgl",kernelFunc:vK};function kK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return E8(ep.Sum,r,a,s,i,o)}var IK={kernelName:Ti,backendName:"webgl",kernelFunc:kK};function SK(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=l8(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=TH(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 CK={kernelName:hu,backendName:"webgl",kernelFunc:SK},TK=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;`,$q=tt({opSnippet:Pq}),Fq={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 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 mK(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var gK={kernelName:Ni,backendName:"webgl",kernelFunc:fK},A8=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=ya(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 NK(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 TK(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var RK={kernelName:Ri,backendName:"webgl",kernelFunc:NK},M8=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${u} setOutput(result); } - `}},b8=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=ya(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=` + `}},P8=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=S.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),d;W().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?d=new b8(c):d=new A8(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 xK={kernelName:Ri,backendName:"webgl",kernelFunc:yK},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.outChannels/e.inChannels;this.userCode=` + `}};function EK(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 P8(c):d=new M8(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 MK={kernelName:Ei,backendName:"webgl",kernelFunc:EK},PK=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},bK=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=` + `}},_K=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}};function vK(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=S.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new AK(c);return a.runWebGLProgram(d,[r,s],"float32")}var wK={kernelName:mp,backendName:"webgl",kernelFunc:vK};function kK(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=S.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new bK(c);return a.runWebGLProgram(d,[r,s],"float32")}var IK={kernelName:fp,backendName:"webgl",kernelFunc:kK},SK=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function $K(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 PK(c);return a.runWebGLProgram(d,[r,s],"float32")}var FK={kernelName:cp,backendName:"webgl",kernelFunc:$K};function DK(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 _K(c);return a.runWebGLProgram(d,[r,s],"float32")}var OK={kernelName:hp,backendName:"webgl",kernelFunc:DK},zK=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 CK(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 SK(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 TK={kernelName:mu,backendName:"webgl",kernelFunc:CK},NK=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 LK(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 zK(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 WK={kernelName:mu,backendName:"webgl",kernelFunc:LK},BK=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam float result = curVal; setOutput(result); } - `}};function RK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=S.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,c=new NK(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 EK={kernelName:Ei,backendName:"webgl",kernelFunc:RK};function MK(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=S.decodeEinsumEquation(r,s.length);S.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=S.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=s0({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 _K={kernelName:yp,backendName:"webgl",kernelFunc:MK},PK="return (x >= 0.0) ? x : (exp(x) - 1.0);",$K=` + `}};function VK(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 BK(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 UK={kernelName:Mi,backendName:"webgl",kernelFunc:VK};function GK(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=s0({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 HK={kernelName:fp,backendName:"webgl",kernelFunc:GK},jK="return (x >= 0.0) ? x : (exp(x) - 1.0);",qK=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3398,29 +3398,29 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,$q=tt({opSnippet:Pq}),Fq={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,FK=tt({opSnippet:PK,packedOpSnippet:$K}),DK={kernelName:_i,backendName:"webgl",kernelFunc:FK},OK="return (b >= 0.0) ? a : a * (b + 1.0);",zK=` +`,XK=tt({opSnippet:jK,packedOpSnippet:qK}),KK={kernelName:_i,backendName:"webgl",kernelFunc:XK},YK="return (b >= 0.0) ? a : a * (b + 1.0);",ZK=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,LK=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Yu(zK,n.shape,r.shape):new ti(OK,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},WK={kernelName:fu,backendName:"webgl",kernelFunc:LK},BK=` +`,JK=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Ku(ZK,n.shape,r.shape):new ai(YK,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},QK={kernelName:fu,backendName:"webgl",kernelFunc:JK},eY=` return vec4(equal(a, b)); -`,VK="return float(a == b);",UK=ma({opSnippet:VK,packedOpSnippet:BK,dtype:"bool",cpuKernelImpl:AH}),GK={kernelName:$i,backendName:"webgl",kernelFunc:UK},HK=` +`,tY="return float(a == b);",aY=ha({opSnippet:tY,packedOpSnippet:eY,dtype:"bool",cpuKernelImpl:PH}),nY={kernelName:Fi,backendName:"webgl",kernelFunc:aY},rY=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - float p = ${S.ERF_P}; - float a1 = ${S.ERF_A1}; - float a2 = ${S.ERF_A2}; - float a3 = ${S.ERF_A3}; - float a4 = ${S.ERF_A4}; - float a5 = ${S.ERF_A5}; + float p = ${C.ERF_P}; + float a1 = ${C.ERF_A1}; + float a2 = ${C.ERF_A2}; + float a3 = ${C.ERF_A3}; + float a4 = ${C.ERF_A4}; + float a5 = ${C.ERF_A5}; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); -`,jK=tt({opSnippet:HK}),qK={kernelName:Pi,backendName:"webgl",kernelFunc:jK},XK=Zu+` +`,sY=tt({opSnippet:rY}),iY={kernelName:$i,backendName:"webgl",kernelFunc:sY},oY=Yu+` return exp(x); -`,KK=` +`,lY=` 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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,v8=tt({opSnippet:XK,packedOpSnippet:KK,cpuKernelImpl:bH,dtype:"float32"}),YK={kernelName:Fi,backendName:"webgl",kernelFunc:v8};function L1(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 ZK={kernelName:gu,backendName:"webgl",kernelFunc:L1},P5="return exp(x) - 1.0;",JK=tt({opSnippet:P5,packedOpSnippet:P5,cpuKernelImpl:vH}),QK={kernelName:Di,backendName:"webgl",kernelFunc:JK},$5=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=` +`,_8=tt({opSnippet:oY,packedOpSnippet:lY,cpuKernelImpl:_H,dtype:"float32"}),uY={kernelName:Di,backendName:"webgl",kernelFunc:_8};function W1(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 dY={kernelName:gu,backendName:"webgl",kernelFunc:W1},L5="return exp(x) - 1.0;",pY=tt({opSnippet:L5,packedOpSnippet:L5,cpuKernelImpl:$H}),cY={kernelName:Oi,backendName:"webgl",kernelFunc:pY},W5=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function w8(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 $5("real",l,t),p=new $5("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=ps({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 eY(e){let{inputs:t,backend:a}=e,{input:n}=t;return w8(n,!1,a)}var tY={kernelName:xp,backendName:"webgl",kernelFunc:eY},aY=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function $8(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 W5("real",l,t),p=new W5("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=hs({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 hY(e){let{inputs:t,backend:a}=e,{input:n}=t;return $8(n,!1,a)}var mY={kernelName:gp,backendName:"webgl",kernelFunc:hY},fY=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 Qp(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 aY(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var nY={kernelName:yu,backendName:"webgl",kernelFunc:Qp},rY=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function Jp(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 fY(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var gY={kernelName:yu,backendName:"webgl",kernelFunc:Jp},yY=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(outputValue); } - `}},sY={kernelName:Oi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new rY(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},F5="return floor(x);",iY=tt({opSnippet:F5,packedOpSnippet:F5,cpuKernelImpl:wH}),oY={kernelName:zi,backendName:"webgl",kernelFunc:iY},lY=` + `}},xY={kernelName:zi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new yY(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},B5="return floor(x);",AY=tt({opSnippet:B5,packedOpSnippet:B5,cpuKernelImpl:FH}),bY={kernelName:Li,backendName:"webgl",kernelFunc:AY},vY=` 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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } else { return NAN; } -`,uY=` +`,wY=` 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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,dY=ma({opSnippet:lY,packedOpSnippet:uY,dtype:"int32"}),pY={kernelName:Li,backendName:"webgl",kernelFunc:dY},cY=class{constructor(e){this.variableNames=["A"];let t=Ea(),[a,n]=e;this.outputShape=e,this.userCode=` +`,kY=ha({opSnippet:vY,packedOpSnippet:wY,dtype:"int32"}),IY={kernelName:Wi,backendName:"webgl",kernelFunc:kY},SY=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}},hY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ea(),[a,n]=e;this.outputShape=e,this.userCode=` + `}},CY=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${t.output} = result; } - `}},mY={kernelName:zd,backendName:"webgl",kernelFunc:fY},Ml,Q2=W().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=W().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ml==null||f!==Q2)&&(Q2=f,Ml=document.createElement("canvas").getContext("2d",{willReadFrequently:Q2})),Ml.canvas.width=l,Ml.canvas.height=u,Ml.drawImage(r,0,0,l,u),r=Ml.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=fn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=W().getBool("WEBGL_PACK")?new hY(c):new cY(c),m=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),m}function gY(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=S.convertConv2DDataFormat(p),g=S.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=(P,E)=>{if(E==="NCHW"&&P.shape.length===1&&P.shape[0]!==1){let C=pe({inputs:{x:P},backend:a,attrs:{shape:[P.shape[0],1,1]}});return x.push(C),C}return P};if(A&&N.push(M(i,p)),b&&N.push(M(o,p)),w){let P=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push(P),x.push(P)}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=g8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&W().getBool("WEBGL_EXP_CONV")){let N=h?ep(h,!0):null,M=new f8(g,A,N,b,w),P=[[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",P)}else if(W().getBool("WEBGL_CONV_IM2COL"))y=y8({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 m8(g,A,N,b,w),P=I();y=a.runWebGLProgram(M,P,"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 yY={kernelName:Yr,backendName:"webgl",kernelFunc:gY};function xY(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(S.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=S.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),y=W().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 P=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push(P),m.push(P)}let T;y?T=new b8(g,b,x,w,I):T=new A8(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(P=>a.disposeIntermediateTensorInfo(P)),M}var AY={kernelName:Zr,backendName:"webgl",kernelFunc:xY},bY=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=` + `}},TY={kernelName:Od,backendName:"webgl",kernelFunc:NY},Pl,J2=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function NY(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");(Pl==null||f!==J2)&&(J2=f,Pl=document.createElement("canvas").getContext("2d",{willReadFrequently:J2})),Pl.canvas.width=l,Pl.canvas.height=u,Pl.drawImage(r,0,0,l,u),r=Pl.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=hn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=B().getBool("WEBGL_PACK")?new CY(c):new SY(c),m=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),m}function RY(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=(P,E)=>{if(E==="NCHW"&&P.shape.length===1&&P.shape[0]!==1){let S=pe({inputs:{x:P},backend:a,attrs:{shape:[P.shape[0],1,1]}});return x.push(S),S}return P};if(A&&N.push(M(i,p)),b&&N.push(M(o,p)),w){let P=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push(P),x.push(P)}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=N8({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?Jd(h,!0):null,M=new T8(g,A,N,b,w),P=[[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",P)}else if(B().getBool("WEBGL_CONV_IM2COL"))y=R8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let N=h?Jd(h,!1):null,M=new C8(g,A,N,b,w),P=I();y=a.runWebGLProgram(M,P,"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 EY={kernelName:Zr,backendName:"webgl",kernelFunc:RY};function MY(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?Jd(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 P=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push(P),m.push(P)}let T;y?T=new P8(g,b,x,w,I):T=new M8(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(P=>a.disposeIntermediateTensorInfo(P)),M}var PY={kernelName:Jr,backendName:"webgl",kernelFunc:MY},_Y=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=mt(a.length),s=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function IY(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=S.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=IH(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new kY(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 SY={kernelName:xu,backendName:"webgl",kernelFunc:k8},CY="return float(a > b);",TY=` + `}};function OY(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=OH(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new DY(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 zY={kernelName:xu,backendName:"webgl",kernelFunc:F8},LY="return float(a > b);",WY=` return vec4(greaterThan(a, b)); -`,NY=ma({opSnippet:CY,packedOpSnippet:TY,cpuKernelImpl:SH,dtype:"bool"}),RY={kernelName:Vi,backendName:"webgl",kernelFunc:NY},EY="return float(a >= b);",MY=` +`,BY=ha({opSnippet:LY,packedOpSnippet:WY,cpuKernelImpl:zH,dtype:"bool"}),VY={kernelName:Ui,backendName:"webgl",kernelFunc:BY},UY="return float(a >= b);",GY=` return vec4(greaterThanEqual(a, b)); -`,_Y=ma({opSnippet:EY,packedOpSnippet:MY,dtype:"bool",cpuKernelImpl:CH}),PY={kernelName:Ui,backendName:"webgl",kernelFunc:_Y};function $Y(e){let{inputs:t,backend:a}=e,{input:n}=t;return w8(n,!0,a)}var FY={kernelName:Ap,backendName:"webgl",kernelFunc:$Y},DY="return float(!isnan(x) && !isinf(x));",OY=tt({opSnippet:DY,dtype:"bool"}),zY={kernelName:Hi,backendName:"webgl",kernelFunc:OY},LY="return float(isinf(x));",WY=tt({opSnippet:LY,dtype:"bool"}),BY={kernelName:ji,backendName:"webgl",kernelFunc:WY},VY="return float(isnan(x));",UY=tt({opSnippet:VY,dtype:"bool"}),GY={kernelName:qi,backendName:"webgl",kernelFunc:UY},HY="return float(a < b);",jY=` +`,HY=ha({opSnippet:UY,packedOpSnippet:GY,dtype:"bool",cpuKernelImpl:LH}),jY={kernelName:Gi,backendName:"webgl",kernelFunc:HY};function qY(e){let{inputs:t,backend:a}=e,{input:n}=t;return $8(n,!0,a)}var XY={kernelName:yp,backendName:"webgl",kernelFunc:qY},KY="return float(!isnan(x) && !isinf(x));",YY=tt({opSnippet:KY,dtype:"bool"}),ZY={kernelName:ji,backendName:"webgl",kernelFunc:YY},JY="return float(isinf(x));",QY=tt({opSnippet:JY,dtype:"bool"}),eZ={kernelName:qi,backendName:"webgl",kernelFunc:QY},tZ="return float(isnan(x));",aZ=tt({opSnippet:tZ,dtype:"bool"}),nZ={kernelName:Xi,backendName:"webgl",kernelFunc:aZ},rZ="return float(a < b);",sZ=` return vec4(lessThan(a, b)); -`,qY=ma({opSnippet:HY,packedOpSnippet:jY,cpuKernelImpl:TH,dtype:"bool"}),XY={kernelName:Ki,backendName:"webgl",kernelFunc:qY},KY="return float(a <= b);",YY=` +`,iZ=ha({opSnippet:rZ,packedOpSnippet:sZ,cpuKernelImpl:WH,dtype:"bool"}),oZ={kernelName:Yi,backendName:"webgl",kernelFunc:iZ},lZ="return float(a <= b);",uZ=` return vec4(lessThanEqual(a, b)); -`,ZY=ma({opSnippet:KY,packedOpSnippet:YY,cpuKernelImpl:NH,dtype:"bool"}),JY={kernelName:Yi,backendName:"webgl",kernelFunc:ZY};function QY(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=RH(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var eZ={kernelName:Zi,backendName:"webgl",kernelFunc:QY},tZ=Zu+` +`,dZ=ha({opSnippet:lZ,packedOpSnippet:uZ,cpuKernelImpl:BH,dtype:"bool"}),pZ={kernelName:Zi,backendName:"webgl",kernelFunc:dZ};function cZ(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=VH(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var hZ={kernelName:Ji,backendName:"webgl",kernelFunc:cZ},mZ=Yu+` return x < 0.0 ? 0./0. : log(x); -`,aZ=` +`,fZ=` 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;`,$q=tt({opSnippet:Pq}),Fq={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; -`,nZ=tt({opSnippet:tZ,packedOpSnippet:aZ,cpuKernelImpl:EH}),rZ={kernelName:Ji,backendName:"webgl",kernelFunc:nZ},sZ=Zu+` +`,gZ=tt({opSnippet:mZ,packedOpSnippet:fZ,cpuKernelImpl:UH}),yZ={kernelName:Qi,backendName:"webgl",kernelFunc:gZ},xZ=Yu+` return log(1.0 + x); -`,iZ=tt({opSnippet:sZ}),oZ={kernelName:Qi,backendName:"webgl",kernelFunc:iZ},lZ="return float(a >= 1.0 && b >= 1.0);",uZ=` +`,AZ=tt({opSnippet:xZ}),bZ={kernelName:eo,backendName:"webgl",kernelFunc:AZ},vZ="return float(a >= 1.0 && b >= 1.0);",wZ=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,dZ=ma({opSnippet:lZ,packedOpSnippet:uZ,dtype:"bool"}),pZ={kernelName:eo,backendName:"webgl",kernelFunc:dZ},cZ="return float(!(x >= 1.0));",hZ=tt({opSnippet:cZ}),mZ={kernelName:to,backendName:"webgl",kernelFunc:hZ},fZ="return float(a >= 1.0 || b >= 1.0);",gZ=` +`,kZ=ha({opSnippet:vZ,packedOpSnippet:wZ,dtype:"bool"}),IZ={kernelName:to,backendName:"webgl",kernelFunc:kZ},SZ="return float(!(x >= 1.0));",CZ=tt({opSnippet:SZ}),TZ={kernelName:ao,backendName:"webgl",kernelFunc:CZ},NZ="return float(a >= 1.0 || b >= 1.0);",RZ=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,yZ=ma({opSnippet:fZ,packedOpSnippet:gZ,dtype:"bool"}),xZ={kernelName:ao,backendName:"webgl",kernelFunc:yZ},AZ=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=` +`,EZ=ha({opSnippet:NZ,packedOpSnippet:RZ,dtype:"bool"}),MZ={kernelName:no,backendName:"webgl",kernelFunc:EZ},PZ=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam float val = x * ${o}; setOutput(val); } - `}},bZ=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=` + `}},_Z=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam vec4 result = xAtOutputCoords * ${o}; setOutput(result); } - `}},vZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=W().getBool("WEBGL_PACK_NORMALIZATION")?new bZ(r.shape,s,i,o,l):new AZ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},wZ={kernelName:no,backendName:"webgl",kernelFunc:vZ},kZ=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=` + `}},$Z=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 _Z(r.shape,s,i,o,l):new PZ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},FZ={kernelName:ro,backendName:"webgl",kernelFunc:$Z},DZ=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(result); } - `}},IZ=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 kZ(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},SZ={kernelName:Au,backendName:"webgl",kernelFunc:IZ};function CZ(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=nl(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function I8(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=S.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 DZ(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},zZ={kernelName:Au,backendName:"webgl",kernelFunc:OZ};function LZ(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=rl(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function D8(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=S.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return tn({inputs:{x:r},backend:a});let c=new tp(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var PZ={kernelName:io,backendName:"webgl",kernelFunc:_Z};function $Z(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=S.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new D3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var FZ={kernelName:bu,backendName:"webgl",kernelFunc:$Z},DZ=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=` +`,UZ=ha({opSnippet:BZ,packedOpSnippet:VZ,cpuKernelImpl:HH}),GZ={kernelName:io,backendName:"webgl",kernelFunc:UZ};function HZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Gu(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 Qa({inputs:{x:r},backend:a});let c=new Qd(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var jZ={kernelName:oo,backendName:"webgl",kernelFunc:HZ};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 L3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var XZ={kernelName:bu,backendName:"webgl",kernelFunc:qZ},KZ=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}},OZ=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=` + `}},YZ=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam } setOutput(dotProd); } - `}};function zZ(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=S.computePool3DInfo(i.shape,o,l,c,u,p),h=new D3(d,"max",!0),m=a.runWebGLProgram(h,[i],i.dtype),f=new OZ(d),g=a.runWebGLProgram(f,[r,m],i.dtype);return a.disposeIntermediateTensorInfo(m),g}var LZ={kernelName:wp,backendName:"webgl",kernelFunc:zZ};function WZ(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Gu([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=S.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 DZ(d),y=a.runWebGLProgram(g,[r,f],o.dtype);return a.disposeIntermediateTensorInfo(f),y}var BZ={kernelName:vp,backendName:"webgl",kernelFunc:WZ};function VZ(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 UZ={kernelName:vu,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(S.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=S.computePool2DInfo(n.shape,r,s,u,i),[c,d]=VZ(n,o,p,l);return[c,d]}};function GZ(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=nl(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var HZ={kernelName:oo,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=S.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]=tJ(n,o,p,l);return[c,d]}};function nJ(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=rl(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var rJ={kernelName:lo,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=` +`,uJ=ha({opSnippet:oJ,packedOpSnippet:lJ,cpuKernelImpl:jH}),dJ={kernelName:po,backendName:"webgl",kernelFunc:uJ},pJ=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=mt(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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${r} coords = outC - start; setOutput(getX(${o})); } - `}},QZ=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=Ia("rc",n),l=Ia("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=` + `}},cJ=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=mt(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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam ${d} setOutput(result); } - `}},eJ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new QZ(n.shape,r,s):new JZ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},tJ={kernelName:po,backendName:"webgl",kernelFunc:eJ},aJ=`if (b == 0.0) return NAN; - return mod(a, b);`,nJ=` + `}},hJ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new cJ(n.shape,r,s):new pJ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},mJ={kernelName:co,backendName:"webgl",kernelFunc:hJ},fJ=`if (b == 0.0) return NAN; + return mod(a, b);`,gJ=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - `+al+` + `+nl+` return result; -`,rJ=ma({opSnippet:aJ,packedOpSnippet:nJ}),sJ={kernelName:co,backendName:"webgl",kernelFunc:rJ},iJ=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` +`,yJ=ha({opSnippet:fJ,packedOpSnippet:gJ}),xJ={kernelName:ho,backendName:"webgl",kernelFunc:yJ},AJ=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;`,$q=tt({opSnippet:Pq}),Fq={kernelNam // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}},oJ=` + `}},bJ=` if (a == b) { return 1.0; }; -return a / b;`,lJ=` +return a / b;`,vJ=` // 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;`,lJ=` } return result; -`,S8=ma({opSnippet:oJ,packedOpSnippet:lJ,checkOutOfBounds:!0}),uJ={kernelName:Mi,backendName:"webgl",kernelFunc:S8},D5="return a - b;",C8=ma({opSnippet:D5,packedOpSnippet:D5,supportsComplex:!0,cpuKernelImpl:ej}),dJ={kernelName:jo,backendName:"webgl",kernelFunc:C8};function T8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=I8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=S.expandShapeToKeepDim(o.shape,i),u=pe({inputs:{x:o},backend:a,attrs:{shape:l}}),p=C8({inputs:{a:r,b:u},backend:a}),c=v8({inputs:{x:p},backend:a}),d=s0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:d},backend:a,attrs:{shape:l}}),m=S8({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 pJ={kernelName:Vo,backendName:"webgl",kernelFunc:T8};function cJ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:T8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new iJ(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var hJ={kernelName:ho,backendName:"webgl",kernelFunc:cJ},mJ=Mn+` +`,O8=ha({opSnippet:bJ,packedOpSnippet:vJ,checkOutOfBounds:!0}),wJ={kernelName:Pi,backendName:"webgl",kernelFunc:O8},V5="return a - b;",z8=ha({opSnippet:V5,packedOpSnippet:V5,supportsComplex:!0,cpuKernelImpl:hj}),kJ={kernelName:qo,backendName:"webgl",kernelFunc:z8};function L8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=D8({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=z8({inputs:{a:r,b:u},backend:a}),c=_8({inputs:{x:p},backend:a}),d=s0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:d},backend:a,attrs:{shape:l}}),m=O8({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 IJ={kernelName:Uo,backendName:"webgl",kernelFunc:L8};function SJ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:L8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new AJ(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var CJ={kernelName:mo,backendName:"webgl",kernelFunc:SJ},TJ=En+` return -x; -`,fJ=` +`,NJ=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -4028,14 +4028,14 @@ return a / b;`,lJ=` result.a = isNaN.a ? x.a : result.a; return result; -`;function gJ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=FH(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Hr(n.shape,fJ):r=new Kn(n.shape,mJ),a.runWebGLProgram(r,[n],n.dtype)}var yJ={kernelName:wu,backendName:"webgl",kernelFunc:gJ},xJ=En.nonMaxSuppressionV3Impl;function AJ(e){S.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}=xJ(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var bJ={kernelName:go,backendName:"webgl",kernelFunc:AJ},vJ=En.nonMaxSuppressionV4Impl;function wJ(e){S.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}=vJ(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var kJ={kernelName:ku,backendName:"webgl",kernelFunc:wJ},IJ=En.nonMaxSuppressionV5Impl;function SJ(e){S.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}=IJ(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var CJ={kernelName:yo,backendName:"webgl",kernelFunc:SJ},TJ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function RJ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=XH(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,NJ):r=new Kn(n.shape,TJ),a.runWebGLProgram(r,[n],n.dtype)}var EJ={kernelName:wu,backendName:"webgl",kernelFunc:RJ},MJ=Rn.nonMaxSuppressionV3Impl;function PJ(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}=MJ(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var _J={kernelName:yo,backendName:"webgl",kernelFunc:PJ},$J=Rn.nonMaxSuppressionV4Impl;function FJ(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}=$J(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var DJ={kernelName:ku,backendName:"webgl",kernelFunc:FJ},OJ=Rn.nonMaxSuppressionV5Impl;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,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}=OJ(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var LJ={kernelName:xo,backendName:"webgl",kernelFunc:zJ},WJ=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))); } - `}},NJ=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 TJ(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},RJ={kernelName:xo,backendName:"webgl",kernelFunc:NJ};function Ih(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Jp({inputs:{input:n},backend:a}),s=Ih({inputs:{x:r},backend:a}),i=i0({inputs:{input:n},backend:a}),o=Ih({inputs:{x:i},backend:a}),l=ps({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return Qp({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var EJ={kernelName:Lu,backendName:"webgl",kernelFunc:Ih};function N8(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=Jp({inputs:{input:n},backend:a}),s=N8({inputs:{x:r},backend:a}),i=i0({inputs:{input:n},backend:a}),o=Ih({inputs:{x:i},backend:a}),l=ps({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return Qp({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var MJ={kernelName:Iu,backendName:"webgl",kernelFunc:N8};function _J(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return L1({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=L1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=h8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var PJ={kernelName:Su,backendName:"webgl",kernelFunc:_J},$J=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=` + `}},BJ=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 WJ(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},VJ={kernelName:Ao,backendName:"webgl",kernelFunc:BJ};function Ih(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Zp({inputs:{input:n},backend:a}),s=Ih({inputs:{x:r},backend:a}),i=i0({inputs:{input:n},backend:a}),o=Ih({inputs:{x:i},backend:a}),l=hs({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return Jp({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var UJ={kernelName:Lu,backendName:"webgl",kernelFunc:Ih};function W8(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=Zp({inputs:{input:n},backend:a}),s=W8({inputs:{x:r},backend:a}),i=i0({inputs:{input:n},backend:a}),o=Ih({inputs:{x:i},backend:a}),l=hs({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return Jp({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var GJ={kernelName:Iu,backendName:"webgl",kernelFunc:W8};function HJ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return W1({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=W1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=S8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var jJ={kernelName:Su,backendName:"webgl",kernelFunc:HJ},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=mt(n),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${s}; int end = ${i}; @@ -4060,7 +4060,7 @@ return a / b;`,lJ=` setOutput(getX(${o})); } } - `}},FJ=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=Ia("rc",n),l=Ia("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; + `}},XJ=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=mt(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;`,lJ=` ${h} setOutput(result); } - `}},R8=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 Qp({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new FJ(r.shape,s,i):new $J(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},DJ={kernelName:Ao,backendName:"webgl",kernelFunc:R8},OJ=` + `}},B8=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 Jp({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new XJ(r.shape,s,i):new qJ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},KJ={kernelName:bo,backendName:"webgl",kernelFunc:B8},YJ=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4093,7 +4093,7 @@ return a / b;`,lJ=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,zJ=` +`,ZJ=` // 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); @@ -4109,11 +4109,11 @@ return a / b;`,lJ=` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - `+al+` + `+nl+` return result; -`,LJ=ma({opSnippet:OJ,packedOpSnippet:zJ}),WJ={kernelName:bo,backendName:"webgl",kernelFunc:LJ};function BJ(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=S.getAxesPermutation(p,o),d=r;c!=null&&(d=Ta({inputs:{x:r},backend:a,attrs:{perm:c}}),p=S.getInnerMostAxes(p.length,o),l.push(d)),S.assertAxesAreInnerMostDims("prod",p,o);let h;if(a.shouldExecuteOnCPU([d])){let m=a.texData.get(d.dataId).values,{outVals:f,outShape:g,outDtype:y}=OH(d.shape,d.dtype,m,p);h=a.makeTensorInfo(g,y,f)}else{let[m,f]=S.computeOutAndReduceShapes(d.shape,p),g=v.sizeFromShape(f),y=pe({inputs:{x:d},backend:a,attrs:{shape:[-1,g]}}),x=Pp(r.dtype),A=nl(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=S.expandShapeToKeepDim(h.shape,u);h=pe({inputs:{x:h},backend:a,attrs:{shape:m}})}return l.forEach(m=>a.disposeIntermediateTensorInfo(m)),h}var VJ={kernelName:wo,backendName:"webgl",kernelFunc:BJ};function UJ(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]=zH(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 GJ={kernelName:Mh,backendName:"webgl",kernelFunc:UJ};function HJ(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]=LH(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 jJ={kernelName:_h,backendName:"webgl",kernelFunc:HJ};function qJ(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]=WH(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var XJ={kernelName:Ph,backendName:"webgl",kernelFunc:qJ},E8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=BH(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},KJ={kernelName:Cu,backendName:"webgl",kernelFunc:E8},YJ="return 1.0 / x;",ZJ=tt({opSnippet:YJ}),JJ={kernelName:ko,backendName:"webgl",kernelFunc:ZJ},QJ=Mn+` +`,JJ=ha({opSnippet:YJ,packedOpSnippet:ZJ}),QJ={kernelName:vo,backendName:"webgl",kernelFunc:JJ};function eQ(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}=YH(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=Mp(r.dtype),A=rl(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 tQ={kernelName:ko,backendName:"webgl",kernelFunc:eQ};function aQ(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]=ZH(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 nQ={kernelName:Mh,backendName:"webgl",kernelFunc:aQ};function rQ(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]=JH(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 sQ={kernelName:Ph,backendName:"webgl",kernelFunc:rQ};function iQ(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]=QH(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var oQ={kernelName:_h,backendName:"webgl",kernelFunc:iQ},V8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=ej(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},lQ={kernelName:Cu,backendName:"webgl",kernelFunc:V8},uQ="return 1.0 / x;",dQ=tt({opSnippet:uQ}),pQ={kernelName:Io,backendName:"webgl",kernelFunc:dQ},cQ=En+` return (x < 0.0) ? 0.0 : x; -`,eQ=` +`,hQ=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4123,9 +4123,9 @@ return a / b;`,lJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,tQ=tt({opSnippet:QJ,packedOpSnippet:eQ}),aQ={kernelName:Io,backendName:"webgl",kernelFunc:tQ},nQ=Mn+` +`,mQ=tt({opSnippet:cQ,packedOpSnippet:hQ}),fQ={kernelName:So,backendName:"webgl",kernelFunc:mQ},gQ=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,rQ=` +`,yQ=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4135,7 +4135,7 @@ return a / b;`,lJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,sQ=tt({opSnippet:nQ,packedOpSnippet:rQ}),iQ={kernelName:To,backendName:"webgl",kernelFunc:sQ},oQ=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=` +`,xQ=tt({opSnippet:gQ,packedOpSnippet:yQ}),AQ={kernelName:No,backendName:"webgl",kernelFunc:xQ},bQ=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;`,lJ=` setOutput(newValue); } - `}},lQ=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=` + `}},vQ=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;`,lJ=` setOutput(newValue); } - `}};function uQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=W().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new lQ(r.shape,l,u,s,i):new oQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var dQ={kernelName:Co,backendName:"webgl",kernelFunc:uQ},pQ=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 wQ(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 vQ(r.shape,l,u,s,i):new bQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var kQ={kernelName:To,backendName:"webgl",kernelFunc:wQ},IQ=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;`,lJ=` setOutput(accumulator); } - `}};function cQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new pQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var hQ={kernelName:Ru,backendName:"webgl",kernelFunc:cQ},mQ=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 SQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new IQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var CQ={kernelName:Ru,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=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;`,lJ=` setOutput(newValue); } - `}},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=` + `}},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=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;`,lJ=` setOutput(newValue); } - `}};function gQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=W().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new fQ(r.shape,l,u,s,i):new mQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],r.dtype)}var yQ={kernelName:So,backendName:"webgl",kernelFunc:gQ},xQ=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],r.dtype)}var EQ={kernelName:Co,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]; @@ -4459,17 +4459,17 @@ return a / b;`,lJ=` setOutput(accumulator); } - `}};function AQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new xQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var bQ={kernelName:Nu,backendName:"webgl",kernelFunc:AQ},vQ=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 PQ(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 _Q={kernelName:Nu,backendName:"webgl",kernelFunc:PQ},$Q=class{constructor(e,t){this.variableNames=["x"];let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);if(this.outputShape=e,a===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); } - `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>n(o)).join(","),s=ft(a);this.userCode=` + `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>n(o)).join(","),s=mt(a);this.userCode=` void main() { ${s} coords = getOutputCoords(); setOutput(getX(${r})); } - `}},wQ=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=Ia("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=` + `}},FQ=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=mt(a);a===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4497,7 +4497,7 @@ return a / b;`,lJ=` } 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 kQ(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 tn({inputs:{x:r},backend:a});let l=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new wQ(r.shape,o):new vQ(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var IQ={kernelName:No,backendName:"webgl",kernelFunc:kQ},SQ=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 DQ(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 Qa({inputs:{x:r},backend:a});let l=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new FQ(r.shape,o):new $Q(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var OQ={kernelName:Ro,backendName:"webgl",kernelFunc:DQ},zQ=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;`,lJ=` } setOutput(outputValue); } - `}},CQ={kernelName:Zo,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new SQ(n.shape,s),[u,p]=S.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)}},TQ=` + `}},LQ={kernelName:Jo,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new zQ(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)}},WQ=` // 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;`,lJ=` return base + 1.0; } } -`,NQ=tt({opSnippet:TQ}),RQ={kernelName:Ro,backendName:"webgl",kernelFunc:NQ},EQ="return inversesqrt(x);",MQ=tt({opSnippet:EQ,cpuKernelImpl:VH}),_Q={kernelName:Eo,backendName:"webgl",kernelFunc:MQ},O3=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=` +`,BQ=tt({opSnippet:WQ}),VQ={kernelName:Eo,backendName:"webgl",kernelFunc:BQ},UQ="return inversesqrt(x);",GQ=tt({opSnippet:UQ,cpuKernelImpl:tj}),HQ={kernelName:Mo,backendName:"webgl",kernelFunc:GQ},W3=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=mt(r.length),u=mt(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;`,lJ=` } setOutput(mix(${f}, sum, float(found))); } - `}},PQ=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=` + `}},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=mt(r.length),u=mt(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;`,lJ=` } setOutput(mix(${f}, sum, found)); } - `}};function $Q(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}=S.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;W().getBool("WEBGL_PACK")?g=new PQ(l,o,h.shape.length,m.shape.length,p,d):g=new O3(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 FQ={kernelName:Mo,backendName:"webgl",kernelFunc:$Q},DQ=class{constructor(e,t,a,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,a];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=W().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` + `}};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 W3(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 XQ={kernelName:Po,backendName:"webgl",kernelFunc:qQ},KQ=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;`,lJ=` setOutput(float(findBound(batch, value))); } - `}};function OQ(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new DQ(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return a.runWebGLProgram(o,[r,s],"int32",l)}var zQ={kernelName:Po,backendName:"webgl",kernelFunc:OQ},LQ=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); -`,UQ=tt({opSnippet:VQ}),GQ={kernelName:$o,backendName:"webgl",kernelFunc:UQ},HQ=Zu+` +`,aee=tt({opSnippet:tee}),nee={kernelName:Fo,backendName:"webgl",kernelFunc:aee},ree=Yu+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,jQ=` +`,see=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4641,20 +4641,20 @@ return a / b;`,lJ=` result.a = isNaN.a ? x.a : result.a; return result; -`,qQ=tt({opSnippet:HQ,packedOpSnippet:jQ,cpuKernelImpl:GH}),XQ={kernelName:zo,backendName:"webgl",kernelFunc:qQ},KQ=` +`,iee=tt({opSnippet:ree,packedOpSnippet:see,cpuKernelImpl:nj}),oee={kernelName:Lo,backendName:"webgl",kernelFunc:iee},lee=` if (isnan(x)) { return 0.0; } return sign(x); -`,YQ=tt({opSnippet:KQ}),ZQ={kernelName:Oo,backendName:"webgl",kernelFunc:YQ},JQ=Zu+` +`,uee=tt({opSnippet:lee}),dee={kernelName:zo,backendName:"webgl",kernelFunc:uee},pee=Yu+` return sin(x); -`,QQ=` +`,cee=` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${al} + ${nl} return result; -`,eee=tt({opSnippet:JQ,packedOpSnippet:QQ}),tee={kernelName:Fo,backendName:"webgl",kernelFunc:eee},aee=` +`,hee=tt({opSnippet:pee,packedOpSnippet:cee}),mee={kernelName:Do,backendName:"webgl",kernelFunc:hee},fee=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,nee=tt({opSnippet:aee}),ree={kernelName:Do,backendName:"webgl",kernelFunc:nee},see=` +`,gee=tt({opSnippet:fee}),yee={kernelName:Oo,backendName:"webgl",kernelFunc:gee},xee=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4674,17 +4674,17 @@ return a / b;`,lJ=` result = log(exp_x + 1.0); } return result; -`,iee=tt({opSnippet:see}),oee={kernelName:Lo,backendName:"webgl",kernelFunc:iee},lee=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},uee={kernelName:_u,backendName:"webgl",kernelFunc:lee};function dee(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: +`,Aee=tt({opSnippet:xee}),bee={kernelName:Wo,backendName:"webgl",kernelFunc:Aee},vee=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},wee={kernelName:Pu,backendName:"webgl",kernelFunc:vee};function kee(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]=jH(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 pee={kernelName:Ip,backendName:"webgl",kernelFunc:dee};function cee(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]=qH(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var hee={kernelName:$u,backendName:"webgl",kernelFunc:cee};function mee(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]=sj(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 Iee={kernelName:wp,backendName:"webgl",kernelFunc:kee};function See(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]=ij(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var Cee={kernelName:$u,backendName:"webgl",kernelFunc:See};function Tee(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]=Qv(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var fee={kernelName:Fu,backendName:"webgl",kernelFunc:mee};function gee(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]=d8(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var Nee={kernelName:Fu,backendName:"webgl",kernelFunc:Tee};function Ree(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]=Qv(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var yee={kernelName:Du,backendName:"webgl",kernelFunc:gee};function xee(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}=S.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=UH(y,x,o,d,p,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new O3(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 Aee={kernelName:Uo,backendName:"webgl",kernelFunc:xee};function bee(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=S.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=Ju({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var vee={kernelName:Pu,backendName:"webgl",kernelFunc:bee},O5="return sqrt(x);",wee=tt({opSnippet:O5,packedOpSnippet:O5,cpuKernelImpl:XH}),kee={kernelName:Wo,backendName:"webgl",kernelFunc:wee},Iee="return x * x;",See=tt({opSnippet:Iee}),Cee={kernelName:Sp,backendName:"webgl",kernelFunc:See},z5="return (a - b) * (a - b);",Tee=ma({opSnippet:z5,packedOpSnippet:z5}),Nee={kernelName:Go,backendName:"webgl",kernelFunc:Tee};function Ree(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=S.fromUint8ToStringArray(s),o=KH(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Eee={kernelName:Cp,backendName:"webgl",kernelFunc:Ree};function Mee({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=Mn+` + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=d8(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var Eee={kernelName:Du,backendName:"webgl",kernelFunc:Ree};function Mee(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=aj(y,x,o,d,p,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new W3(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 Pee={kernelName:Go,backendName:"webgl",kernelFunc:Mee};function _ee(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=Zu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var $ee={kernelName:_u,backendName:"webgl",kernelFunc:_ee},U5="return sqrt(x);",Fee=tt({opSnippet:U5,packedOpSnippet:U5,cpuKernelImpl:oj}),Dee={kernelName:Bo,backendName:"webgl",kernelFunc:Fee},Oee="return x * x;",zee=tt({opSnippet:Oee}),Lee={kernelName:kp,backendName:"webgl",kernelFunc:zee},G5="return (a - b) * (a - b);",Wee=ha({opSnippet:G5,packedOpSnippet:G5}),Bee={kernelName:Ho,backendName:"webgl",kernelFunc:Wee};function Vee(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=lj(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Uee={kernelName:Ip,backendName:"webgl",kernelFunc:Vee};function Gee({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=En+` return x > 0.0 ? 1.0 : float(${t.alpha}); - `,s=new Kn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var _ee={kernelName:os,backendName:"webgl",kernelFunc:Mee},Pee=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 Kn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var Hee={kernelName:us,backendName:"webgl",kernelFunc:Gee},jee=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=mt(a.length),s=mt(a.length),i="";if(n===1)i="coords * strides + begin";else{let o=0;i=a.map((l,u)=>(o++,a.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` ${r} begin = ${r}(${e}); ${r} strides = ${r}(${t}); @@ -4692,15 +4692,15 @@ return a / b;`,lJ=` ${s} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function $ee(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=Ju({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=YH(h,N,b,x);w=a.makeTensorInfo(m,r.dtype,M.values)}else{let T=new Pee(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 Fee={kernelName:Ho,backendName:"webgl",kernelFunc:$ee};function Dee(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]=ZH(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var Oee={kernelName:Ou,backendName:"webgl",kernelFunc:Dee};function zee(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]=JH(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 Lee={kernelName:Tp,backendName:"webgl",kernelFunc:zee};function Wee(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=QH(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var Bee={kernelName:Np,backendName:"webgl",kernelFunc:Wee},Vee="return tan(x);",Uee=tt({opSnippet:Vee}),Gee={kernelName:qo,backendName:"webgl",kernelFunc:Uee},Hee=` + `}};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=Zu({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=uj(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 Xee={kernelName:jo,backendName:"webgl",kernelFunc:qee};function Kee(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]=dj(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var Yee={kernelName:Ou,backendName:"webgl",kernelFunc:Kee};function Zee(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]=pj(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 Jee={kernelName:Sp,backendName:"webgl",kernelFunc:Zee};function Qee(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=cj(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var ete={kernelName:Cp,backendName:"webgl",kernelFunc:Qee},tte="return tan(x);",ate=tt({opSnippet:tte}),nte={kernelName:Xo,backendName:"webgl",kernelFunc:ate},rte=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,jee=tt({opSnippet:Hee}),qee={kernelName:Xo,backendName:"webgl",kernelFunc:jee};function Xee(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}=S.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 O3(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 Kee={kernelName:_o,backendName:"webgl",kernelFunc:Xee},Yee=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=tj(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new Yee(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var Jee={kernelName:is,backendName:"webgl",kernelFunc:M8},Qee=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 dte(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=mj(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new ute(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var pte={kernelName:ls,backendName:"webgl",kernelFunc:U8},cte=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;`,lJ=` setOutput(float(i1)); } } - `}},ete=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=` + `}},hte=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;`,lJ=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function Fs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function L5(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[P,E]=aj(M,u,r.dtype,s,i);return[a.makeTensorInfo(P.shape,P.dtype,P.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,Qp({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&&Fs(a,h);let g=L5(s),y=L5(p),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,P,E)=>{let C=A(),_=new Qee(E),O=[[p],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[P]],B=x;x=a.runWebGLProgram(_,C,"int32",O),Fs(a,B)};for(let M=1;M=1;E/=2)b(P,E,[m,y])}for(let M=y;M>g;M/=2){let P=A(),E=new ete([m,M/2]),C=[[p],[x===null?1:0],[g]],_=x;x=a.runWebGLProgram(E,P,"int32",C),Fs(a,_);let O=g/2,B=O*2;for(let F=O;F>=1;F/=2)b(B,F,x.shape)}let w=x;x=Ju({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),Fs(a,w);let I=k8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});Fs(a,f);let T=u.slice(0,-1);T.push(s),w=x,x=pe({inputs:{x},attrs:{shape:T},backend:a}),Fs(a,w);let N=I;return I=pe({inputs:{x:I},attrs:{shape:T},backend:a}),Fs(a,N),[I,x]}var ate={kernelName:Ko,backendName:"webgl",kernelFunc:tte},nte=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 Os(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function H5(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[P,E]=fj(M,u,r.dtype,s,i);return[a.makeTensorInfo(P.shape,P.dtype,P.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,Jp({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&&Os(a,h);let g=H5(s),y=H5(p),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,P,E)=>{let S=A(),_=new cte(E),O=[[p],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[P]],W=x;x=a.runWebGLProgram(_,S,"int32",O),Os(a,W)};for(let M=1;M=1;E/=2)b(P,E,[m,y])}for(let M=y;M>g;M/=2){let P=A(),E=new hte([m,M/2]),S=[[p],[x===null?1:0],[g]],_=x;x=a.runWebGLProgram(E,P,"int32",S),Os(a,_);let O=g/2,W=O*2;for(let $=O;$>=1;$/=2)b(W,$,x.shape)}let w=x;x=Zu({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),Os(a,w);let I=F8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});Os(a,f);let T=u.slice(0,-1);T.push(s),w=x,x=pe({inputs:{x},attrs:{shape:T},backend:a}),Os(a,w);let N=I;return I=pe({inputs:{x:I},attrs:{shape:T},backend:a}),Os(a,N),[I,x]}var fte={kernelName:Yo,backendName:"webgl",kernelFunc:mte},gte=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;`,lJ=` } setOutput(outputValue); } - `}};function rte(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 nte(c,d,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var ste={kernelName:Yo,backendName:"webgl",kernelFunc:rte};function ite(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;Gu(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}=nj(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var ote={kernelName:Rp,backendName:"webgl",kernelFunc:ite};function lte(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 ute={kernelName:zu,backendName:"webgl",kernelFunc:lte},dte=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 yte(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 gte(c,d,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var xte={kernelName:Zo,backendName:"webgl",kernelFunc:yte};function Ate(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;Gu(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}=gj(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var bte={kernelName:Tp,backendName:"webgl",kernelFunc:Ate};function vte(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 wte={kernelName:zu,backendName:"webgl",kernelFunc:vte},kte=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;`,lJ=` } setOutput(${l}); } - `}};function pte(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=S.getAxesPermutation([u],o),c=r;p!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=S.getInnerMostAxes(1,o)[0]);let d=S.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],P=b.shape[1],E=S.segment_util.segOpComputeOptimalWindowSize(P,N),C={windowSize:E,inSize:P,batchSize:M,numSegments:N},_=new dte(C,w),O=a.compileAndRun(_,[b,I],T);if(l.push(O),O.shape[1]===N)return O;let B=E8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),F=M8({inputs:{x:B},backend:a,attrs:{reps:[P/E]}});return l.push(B),l.push(F),g(O,w,F,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=S.getUndoAxesPermutation(p);A=Ta({inputs:{x:A},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}var cte={kernelName:Ep,backendName:"webgl",kernelFunc:pte},hte=[Yj,Jj,tq,rq,iq,uq,pq,hq,yq,Aq,wq,Sq,Nq,_q,Fq,Oq,Lq,Uq,Hq,qq,Zq,rX,iX,dX,cX,xX,bX,IX,Pj,TX,_X,DX,VX,HX,qX,KX,ZX,tK,rK,oK,uK,pK,hK,gK,xK,wK,IK,TK,EK,_K,DK,WK,GK,qK,YK,ZK,QK,tY,nY,sY,oY,pY,mY,yY,AY,wY,SY,RY,PY,_j,FY,EX,zY,BY,GY,Fj,XY,JY,eZ,rZ,oZ,pZ,mZ,xZ,wZ,SZ,TZ,MZ,PZ,FZ,LZ,BZ,UZ,HZ,qZ,ZZ,tJ,sJ,hJ,zj,yJ,bJ,kJ,CJ,mX,RJ,MJ,PJ,DJ,WJ,Oj,VJ,GJ,jJ,XJ,KJ,fX,uJ,JJ,aQ,iQ,Wj,dQ,hQ,yQ,bQ,IQ,CQ,RQ,_Q,FQ,zQ,BQ,GQ,XQ,ZQ,tee,ree,aX,pJ,oee,uee,pee,hee,fee,yee,Aee,vee,kee,Cee,Nee,Eee,_ee,Fee,Oee,Lee,Bee,dJ,qj,Gee,qee,Kee,Jee,ate,ste,Xj,ote,ute,cte,EJ];for(let e of hte)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 _8;function mte(e){_8=e.wasm.cwrap(Kr,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=Qo.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 _8(d,I,r.shape.length,h,T,s.shape.length,l,u,g,m,f,c||0,w),b}var gte={kernelName:Kr,backendName:"wasm",setupFunc:mte,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 yte=Qe(ru),xte=Qe(ri),Ate=Qe(si);function Ht(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=S.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 bte=!0,vte=Ht(rs,bte),P8;function wte(e){P8=e.wasm.cwrap(ii,null,["array","number","number","number"])}function kte(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 P8(s,r.length,nt[n.dtype],i),n}var Ite={kernelName:ii,backendName:"wasm",setupFunc:wte,kernelFunc:kte};function o0(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 Ste={kernelName:Gi,backendName:"wasm",kernelFunc:o0},$8;function Cte(e){$8=e.wasm.cwrap(kr,null,["number","array","number","number","number","array","number"])}function ns(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=Nte(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 Rte={kernelName:kr,backendName:"wasm",kernelFunc:ns,setupFunc:Cte};function cs(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=S.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 tae={kernelName:Tu,backendName:"wasm",kernelFunc:Ba},V8;function aae(e){V8=e.wasm.cwrap(fi,null,["number","array","number","number","array","number","number","number","number"])}function nae(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=Qo.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=Ba({inputs:{x:r},backend:a,attrs:{shape:A}}),I=Ba({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],P=o?I.shape[1]:I.shape[2],E=Math.max(g,y),C=a.makeOutput([E,M,P],w.dtype),_=a.dataIdMap.get(C.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),B=new Uint8Array(new Int32Array(I.shape).buffer);return V8(T,O,w.shape.length,N,B,I.shape.length,i,o,_),a.disposeData(w.dataId),a.disposeData(I.dataId),C.shape=x,C}var rae={kernelName:fi,backendName:"wasm",setupFunc:aae,kernelFunc:nae};function ai(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=xh(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)iae(l,p[0],p[1],d,s,i);else if(h===4)oae(l,p[0],p[1],p[2],d,s,i);else{let m=xh(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=S.getReshaped(r.shape,s,o),u=S.getPermuted(l.length,s.length),p=S.getReshapedPermuted(r.shape,s,o),c=S.getSliceBeginCoords(i,s.length),d=S.getSliceSize(p,i,s.length),h=Ba({inputs:{x:r},backend:a,attrs:{shape:l}}),m=ns({inputs:{x:h},backend:a,attrs:{perm:u}}),f=Ba({inputs:{x:m},backend:a,attrs:{shape:p}}),g=ai({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 dae={kernelName:lu,backendName:"wasm",kernelFunc:uae},U8;function pae(e){U8=e.wasm.cwrap(gi,null,["number","number","boolean","number","number","number"])}function cae(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 U8(p(r),i,o,p(s),nt[s.dtype],p(u)),u}var hae={kernelName:gi,backendName:"wasm",setupFunc:pae,kernelFunc:cae},mae=!0,fae=Ht(uu,mae);function gae(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.typedArrayFromHeap(n),i=a.typedArrayFromHeap(r),o=S.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}var yae={kernelName:du,backendName:"wasm",kernelFunc:gae};function hs(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 xae={kernelName:yi,backendName:"wasm",kernelFunc:hs},Aae=Qe(xi),G8;function bae(e){G8=e.wasm.cwrap(ss,null,["number","number","number","number"])}function vae(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 G8(o,s,i,u),l}var wae={kernelName:ss,backendName:"wasm",setupFunc:bae,kernelFunc:vae};function H8(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);S.assertParamsConsistent(r,n);let s=S.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return o0({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 Ba({inputs:{x:A},backend:a,attrs:{shape:b}})}),m=h.map(A=>({vals:a.readSync(A.dataId),shape:A.shape}));s=S.computeOutShape(h.map(A=>A.shape),1);let f=h[0].shape[0]===1,g=d3(m,s,t[0].dtype,f),y=S.computeOutShape(i.map(A=>A.shape),n);o.shape=y;let x=a.dataIdMap.get(o.dataId);return x.stringBytes=S.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=S.getAxesPermutation([s],l),p=r;u!==null&&(p=ns({inputs:{x:r},attrs:{perm:u},backend:a}));let c=S.getInnerMostAxes(1,l)[0];S.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;J8(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=S.getUndoAxesPermutation(u);g=ns({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var jae={kernelName:Si,backendName:"wasm",setupFunc:Gae,kernelFunc:Hae},Q8;function qae(e){Q8=e.wasm.cwrap(Ci,null,["number","number","number","number","number","number"])}function Xae(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=S.getAxesPermutation([s],l),p=r;u!==null&&(p=ns({inputs:{x:r},attrs:{perm:u},backend:a}));let c=S.getInnerMostAxes(1,l)[0];S.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;Q8(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=S.getUndoAxesPermutation(u);g=ns({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var Kae={kernelName:Ci,backendName:"wasm",setupFunc:qae,kernelFunc:Xae},ew;function Yae(e){ew=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function Zae(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 ew(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(p)),p}var Jae={kernelName:hu,backendName:"wasm",setupFunc:Yae,kernelFunc:Zae},tw;function Qae(e){tw=e.wasm.cwrap(Ni,null,["number","number","number","array","number","array","array","number","number"])}function ene(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 tw(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var tne={kernelName:Ni,backendName:"wasm",setupFunc:Qae,kernelFunc:ene},aw;function ane(e){aw=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function nne(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=S.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,P=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"),C=n.dataIdMap.get(E.dataId).id;return aw(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,P,b,w,I,T,N,M,C),E}var rne={kernelName:Ri,backendName:"wasm",setupFunc:ane,kernelFunc:nne},nw;function sne(e){nw=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function ine(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 nw(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var one={kernelName:mu,backendName:"wasm",setupFunc:sne,kernelFunc:ine},rw;function lne(e){rw=e.wasm.cwrap(Ei,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function une(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=S.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=a.makeOutput(u.outShape,r.dtype);return rw(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 dne={kernelName:Ei,backendName:"wasm",setupFunc:lne,kernelFunc:une},sw;function pne(e){sw=e.wasm.cwrap(Ul,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function cne(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=S.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(s.shape,s.dtype);return sw(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 hne={kernelName:Ul,backendName:"wasm",setupFunc:pne,kernelFunc:cne},iw;function mne(e){iw=e.wasm.cwrap(Vl,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=S.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(r.shape,r.dtype);return iw(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 gne={kernelName:Vl,backendName:"wasm",setupFunc:mne,kernelFunc:fne},yne=Qe(_i),ow;function xne(e){ow=e.wasm.cwrap(fu,null,["number","number","number"])}function Ane(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 ow(i(r),i(n),i(s)),s}var bne={kernelName:fu,backendName:"wasm",setupFunc:xne,kernelFunc:Ane},vne=!1,wne=Ht($i,vne,"bool"),kne=Qe(Pi),Ine=Qe(Fi,"float32");function B1(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),Ba({inputs:{x:r},backend:n,attrs:{shape:o}})}var Sne={kernelName:gu,backendName:"wasm",kernelFunc:B1},Cne=Qe(Di,"float32");function lw(e){let{attrs:{shape:t,value:a,dtype:n},backend:r}=e,s=r.makeOutput(t,n);return r.typedArrayFromHeap(s).fill(a),s}var Tne={kernelName:yu,backendName:"wasm",kernelFunc:lw},uw;function Nne(e){uw=e.wasm.cwrap(Oi,null,["number","number","number","number","number","number"])}function Rne(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 uw(s,o,l,u,p,i),r}var Ene={kernelName:Oi,backendName:"wasm",kernelFunc:Rne,setupFunc:Nne},Mne=Qe(zi),_ne=!1,Pne=Ht(Li,_ne),dw;function $ne(e){dw=e.wasm.cwrap(Wi,null,["number","number","number","number","number","number","number"])}function Fne(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 dw(p,c,d,h,m,r,g),f}var Dne={kernelName:Wi,backendName:"wasm",setupFunc:$ne,kernelFunc:Fne},pw;function One(e){pw=e.wasm.cwrap(Yr,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 zne(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=S.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,P=f.padInfo.left,E=f.dilationHeight,C=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,B=f.inChannels,F=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 pw(y,U,G,q,x,w,I,b,T,N,M,P,F,E,C,_,O,B,A,g,Z,m||0,V),H}var Lne={kernelName:Yr,backendName:"wasm",setupFunc:One,kernelFunc:zne},cw;function Wne(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 Bne(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=S.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,P=f.padInfo.left,E=f.dilationHeight,C=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,B=f.inChannels,F=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 cw(y,U,G,q,x,w,I,b,T,N,M,P,F,E,C,_,O,B,A,g,Z,m||0,V),H}var Vne={kernelName:Zr,backendName:"wasm",setupFunc:Wne,kernelFunc:Bne},hw;function Une(e){hw=e.wasm.cwrap(Bi,null,["number","number","number","number","number","number","array","number"])}function Gne(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=a3.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 hw(d,nt[n.dtype],h,i,c,o,m,f),u}var Hne={kernelName:Bi,backendName:"wasm",setupFunc:Une,kernelFunc:Gne},mw;function jne(e){mw=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function qne(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=S.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=Ba({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=Ba({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 mw(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 Xne={kernelName:xu,backendName:"wasm",setupFunc:jne,kernelFunc:qne},Kne=!1,Yne=Ht(Vi,Kne,"bool"),Zne=!1,Jne=Ht(Ui,Zne,"bool"),Qne=Qe(Hi,"bool"),ere=Qe(ji,"bool"),tre=Qe(qi,"bool"),fw;function are(e){fw=e.wasm.cwrap(Xi,null,["number","number","number","number"])}function nre(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;fw(r,nt[t.dtype],a,i)}return s}var rre={kernelName:Xi,backendName:"wasm",setupFunc:are,kernelFunc:nre},sre=!1,ire=Ht(Ki,sre,"bool"),ore=!1,lre=Ht(Yi,ore,"bool"),gw;function ure(e){gw=e.wasm.cwrap(Zi,null,["number","number","number","number"])}function dre(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return gw(a.dataIdMap.get(o.dataId).id,n,r,i),o}var pre={kernelName:Zi,backendName:"wasm",setupFunc:ure,kernelFunc:dre},cre=Qe(Ji),hre=Qe(Qi),mre=!1,fre=Ht(eo,mre,"bool"),gre=Qe(to),yre=!1,xre=Ht(ao,yre,"bool"),Are=!1,bre=Ht(bA,Are,"bool"),yw;function vre(e){yw=e.wasm.cwrap(no,null,["number","number","number","number","number","number","number"])}function wre(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 yw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var kre={kernelName:no,backendName:"wasm",setupFunc:vre,kernelFunc:wre},xw;function Ire(e){xw=e.wasm.cwrap(Au,null,["number","number","number","number","number","number","number","number","number"])}function Sre(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 xw(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 Cre={kernelName:Au,backendName:"wasm",setupFunc:Ire,kernelFunc:Sre},Aw;function Tre(e){Aw=e.wasm.cwrap(ro,null,["number","number","number","number"])}function Nre(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}=cs(i,r,t);if(d){let x=t.dataIdMap.get(u.dataId).id;l=u,o=x}let h=l.shape.length;S.assertAxesAreInnerMostDims("max",p,h);let[m,f]=S.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;Aw(o,nt[i.dtype],g,x)}if(d&&t.disposeData(u.dataId),s){let x=S.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var Rre={kernelName:ro,backendName:"wasm",setupFunc:Tre,kernelFunc:Nre},Ere=!1,Mre=Ht(so,Ere),bw;function _re(e){bw=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Pre(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=S.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 bw(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 $re={kernelName:io,backendName:"wasm",setupFunc:_re,kernelFunc:Pre},vw;function Fre(e){vw=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 Dre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=S.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.makeOutput(p.outShape,r.dtype);return vw(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 Ore={kernelName:bu,backendName:"wasm",setupFunc:Fre,kernelFunc:Dre},ww;function zre(e){ww=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 Lre(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=S.computePool3DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return ww(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 Wre={kernelName:wp,backendName:"wasm",setupFunc:zre,kernelFunc:Lre},kw;function Bre(e){kw=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Vre(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=S.computePool2DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return kw(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 Ure={kernelName:vp,backendName:"wasm",setupFunc:Bre,kernelFunc:Vre},Iw;function Gre(e){Iw=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 Hre(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(S.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=S.computePool2DInfo(r.shape,s,i,[1,1],o),c=a.makeOutput(p.outShape,r.dtype),d=a.makeOutput(p.outShape,"int32");return Iw(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 jre={kernelName:vu,backendName:"wasm",setupFunc:Gre,kernelFunc:Hre},Sw;function qre(e){Sw=e.wasm.cwrap(oo,null,["number, number, number"])}function Xre(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}=cs(i,r,t),m=c;if(h){let b=t.dataIdMap.get(p.dataId).id;b!==o&&(u=p,l=b,m=S.getInnerMostAxes(m.length,u.shape.length))}S.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=S.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=u;u.dtype!=="float32"&&(x=hs({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;Sw(l,y,b)}if(h&&t.disposeData(p.dataId),s){let b=S.expandShapeToKeepDim(A.shape,d);A.shape=b}return u.dtype!=="float32"&&t.disposeData(x.dataId),A}var Kre={kernelName:oo,backendName:"wasm",setupFunc:qre,kernelFunc:Xre},Cw;function Yre(e){Cw=e.wasm.cwrap(lo,null,["number","number","number","number"])}function Zre(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}=cs(i,r,t);if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A)}let m=u.shape.length;S.assertAxesAreInnerMostDims("min",c,m);let[f,g]=S.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;Cw(l,nt[i.dtype],y,A)}if(h&&t.disposeData(p.dataId),s){let A=S.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var Jre={kernelName:lo,backendName:"wasm",setupFunc:Yre,kernelFunc:Zre},Qre=!1,ese=Ht(uo,Qre),V1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(V1||(V1={}));var Tw;function tse(e){Tw=e.wasm.cwrap(po,null,["number","array","number","number","array","array","number","number"])}function ase(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 Tw(i,u,t.shape.length,nt[t.dtype],d,h,V1[r],l),o}var nse={kernelName:po,backendName:"wasm",kernelFunc:ase,setupFunc:tse},Nw;function rse(e){Nw=e.wasm.cwrap(Vo,null,["number","number","number","number"])}function Rw(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||Nw(r,i,o,l),s}var sse={kernelName:Vo,backendName:"wasm",setupFunc:rse,kernelFunc:Rw},Ew;function ise(e){Ew=e.wasm.cwrap(ho,null,["number","number","number","number","number","number"])}function ose(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:Rw({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,p]=l.shape,c=a.makeOutput([u,s],"int32");return Ew(a.dataIdMap.get(l.dataId).id,u,p,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var lse={kernelName:ho,backendName:"wasm",setupFunc:ise,kernelFunc:ose},use=Ht(co,!0),dse=!0,pse=Ht(mo,dse),cse=Qe(wu);function z3(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 Mw;function hse(e){Mw=e.wasm.cwrap(go,"number",["number","number","number","number","number"])}function mse(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=Mw(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=z3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",d)}var fse={kernelName:go,backendName:"wasm",setupFunc:hse,kernelFunc:mse},_w;function gse(e){_w=e.wasm.cwrap(ku,"number",["number","number","number","number","number","bool"])}function yse(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=_w(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=z3(t,d);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var xse={kernelName:ku,backendName:"wasm",setupFunc:gse,kernelFunc:yse},Pw;function Ase(e){Pw=e.wasm.cwrap(yo,"number",["number","number","number","number","number","number"])}function bse(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=Pw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=z3(t,d);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var vse={kernelName:yo,backendName:"wasm",setupFunc:Ase,kernelFunc:bse},wse=!1,kse=Ht(fo,wse,"bool"),$w;function Ise(e){$w=e.wasm.cwrap(xo,null,["number","number","number","number","number"])}function Sse(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 $w(c,i,o,l,p),u}var Cse={kernelName:xo,backendName:"wasm",setupFunc:Ise,kernelFunc:Sse};function Tse(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var Nse={kernelName:Iu,backendName:"wasm",kernelFunc:Tse};function Rse(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=H8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Ese={kernelName:Su,backendName:"wasm",kernelFunc:Rse},Fw;function Mse(e){Fw=e.wasm.cwrap(Ao,null,["number","array","number","number","array","array","number","number"])}function _se(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 lw({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 Fw(i,u,t.shape.length,nt[t.dtype],d,h,r,l),o}var Dw={kernelName:Ao,backendName:"wasm",kernelFunc:_se,setupFunc:Mse},Pse=!1,$se=Ht(bo,Pse),Ow;function Fse(e){Ow=e.wasm.cwrap(vo,null,["number","number","number"])}function Dse(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=hs({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 Ow(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var Ose={kernelName:vo,backendName:"wasm",setupFunc:Fse,kernelFunc:Dse},zw;function zse(e){zw=e.wasm.cwrap(wo,null,["number","number","number","number"])}function Lse(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}=cs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=S.getInnerMostAxes(m.length,u.shape.length))}S.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=S.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;zw(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=S.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var Wse={kernelName:wo,backendName:"wasm",setupFunc:zse,kernelFunc:Lse},Bse=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=h3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Vse={kernelName:Cu,backendName:"wasm",kernelFunc:Bse},Use=!0,Gse=Ht(Mi,Use),Hse=Qe(ko),jse=Qe(Io),qse=Qe(To),Lw;function Xse(e){Lw=e.wasm.cwrap(Co,null,["number","number","number","number","number","number","number","number","number","number"])}function Kse(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=hs({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 Lw(y,p,c,d,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var Yse={kernelName:Co,backendName:"wasm",setupFunc:Xse,kernelFunc:Kse},Ww;function Zse(e){Ww=e.wasm.cwrap(Ru,null,["number","number","number","array","array","boolean"])}function Jse(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=hs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),Ww(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 Qse={kernelName:Ru,backendName:"wasm",setupFunc:Zse,kernelFunc:Jse},Bw;function eie(e){Bw=e.wasm.cwrap(So,null,["number","number","number","number","number","number","number","number","number","number"])}function tie(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=hs({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 Bw(x,p,c,d,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var aie={kernelName:So,backendName:"wasm",setupFunc:eie,kernelFunc:tie},Vw;function nie(e){Vw=e.wasm.cwrap(Nu,null,["number","number","number","array","array","boolean"])}function rie(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=hs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),Vw(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:Nu,backendName:"wasm",setupFunc:nie,kernelFunc:rie},Uw;function iie(e){Uw=e.wasm.cwrap(No,null,["number","array","number","array","number","number"])}function oie(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 o0({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);Uw(l,p,i.length,c,r.shape.length,u);let d=Ba({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),d}var lie={kernelName:No,backendName:"wasm",kernelFunc:oie,setupFunc:iie},Gw;function uie(e){Gw=e.wasm.cwrap(Zo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function die(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]=S.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 Gw(u,c,d,h,m,s,f,g,b,A.length,p),l}var pie={kernelName:Zo,backendName:"wasm",kernelFunc:die,setupFunc:uie},cie=Qe(Ro),hie=Qe(Eo),Hw;function mie(e){Hw=e.wasm.cwrap(Mo,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}=Hh.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 Hw(h,m,nt[s.dtype],l,u,p,f,d,g),o}var gie={kernelName:Mo,backendName:"wasm",setupFunc:mie,kernelFunc:fie},jw;function yie(e){jw=e.wasm.cwrap(Po,null,["number","number","number","number","number","number","bool","number"])}function xie(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 jw(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var Aie={kernelName:Po,backendName:"wasm",setupFunc:yie,kernelFunc:xie},qw;function bie(e){qw=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function vie(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 qw(i,o,l,h,p),u}var wie={kernelName:Eu,backendName:"wasm",kernelFunc:vie,setupFunc:bie},kie=Qe($o),Xw;function Iie(e){Xw=e.wasm.cwrap(zo,null,["number","number"])}function Sie(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||Xw(n,s),r}var Cie={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Iie,kernelFunc:Sie},Tie=Qe(Oo),Nie=Qe(Fo),Rie=Qe(Do),Eie=Qe(Lo);function Mie(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],P=b.shape[1],E=C.segment_util.segOpComputeOptimalWindowSize(P,N),S={windowSize:E,inSize:P,batchSize:M,numSegments:N},_=new kte(S,w),O=a.compileAndRun(_,[b,I],T);if(l.push(O),O.shape[1]===N)return O;let W=V8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),$=U8({inputs:{x:W},backend:a,attrs:{reps:[P/E]}});return l.push(W),l.push($),g(O,w,$,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 Ste={kernelName:Np,backendName:"webgl",kernelFunc:Ite},Cte=[uq,pq,mq,yq,Aq,wq,Iq,Cq,Eq,Pq,Fq,zq,Bq,Hq,Xq,Yq,Jq,aX,rX,iX,dX,yX,AX,kX,SX,MX,_X,OX,jj,WX,HX,KX,tK,rK,iK,lK,dK,mK,yK,bK,wK,IK,CK,RK,MK,FK,OK,WK,UK,HK,KK,QK,nY,iY,uY,dY,cY,mY,gY,xY,bY,IY,TY,EY,PY,FY,zY,VY,jY,Hj,XY,UX,ZY,eZ,nZ,Xj,oZ,pZ,hZ,yZ,bZ,IZ,TZ,MZ,FZ,zZ,WZ,GZ,jZ,XZ,JZ,eJ,aJ,rJ,iJ,dJ,mJ,xJ,CJ,Zj,EJ,_J,DJ,LJ,TX,VJ,GJ,jJ,KJ,QJ,Yj,tQ,nQ,sQ,oQ,lQ,NX,wJ,pQ,fQ,AQ,Qj,kQ,CQ,EQ,_Q,OQ,LQ,VQ,HQ,XQ,ZQ,eee,nee,oee,dee,mee,yee,fX,IJ,bee,wee,Iee,Cee,Nee,Eee,Pee,$ee,Dee,Lee,Bee,Uee,Hee,Xee,Yee,Jee,ete,kJ,iq,nte,ite,lte,pte,fte,xte,oq,bte,wte,Ste,UJ];for(let e of Cte)yn(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 tp;(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"})(tp||(tp={}));var G8;function Tte(e){G8=e.wasm.cwrap(Yr,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Nte(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=tp[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=el.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 G8(d,I,r.shape.length,h,T,s.shape.length,l,u,g,m,f,c||0,w),b}var Rte={kernelName:Yr,backendName:"wasm",setupFunc:Tte,kernelFunc:Nte};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 Ete=Qe(ru),Mte=Qe(si),Pte=Qe(ii);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 _te=!0,$te=Gt(is,_te),H8;function Fte(e){H8=e.wasm.cwrap(oi,null,["array","number","number","number"])}function Dte(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 H8(s,r.length,nt[n.dtype],i),n}var Ote={kernelName:oi,backendName:"wasm",setupFunc:Fte,kernelFunc:Dte};function o0(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 zte={kernelName:Hi,backendName:"wasm",kernelFunc:o0},j8;function Lte(e){j8=e.wasm.cwrap(wr,null,["number","array","number","number","number","array","number"])}function ss(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=Bte(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 Vte={kernelName:wr,backendName:"wasm",kernelFunc:ss,setupFunc:Lte};function ms(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 mae={kernelName:Tu,backendName:"wasm",kernelFunc:La},ew;function fae(e){ew=e.wasm.cwrap(gi,null,["number","array","number","number","array","number","number","number","number"])}function gae(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=el.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],P=o?I.shape[1]:I.shape[2],E=Math.max(g,y),S=a.makeOutput([E,M,P],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 ew(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 yae={kernelName:gi,backendName:"wasm",setupFunc:fae,kernelFunc:gae};function ni(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=xh(l,s,i,t.shape,t.dtype);return c.stringBytes=m,u}let d=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)xae(l,p[0],d,s,i);else if(h===3)Aae(l,p[0],p[1],d,s,i);else if(h===4)bae(l,p[0],p[1],p[2],d,s,i);else{let m=xh(l,s,i,t.shape,t.dtype);d.set(m)}return u}function xae(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=ss({inputs:{x:h},backend:a,attrs:{perm:u}}),f=La({inputs:{x:m},backend:a,attrs:{shape:p}}),g=ni({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 kae={kernelName:lu,backendName:"wasm",kernelFunc:wae},tw;function Iae(e){tw=e.wasm.cwrap(yi,null,["number","number","boolean","number","number","number"])}function Sae(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 tw(p(r),i,o,p(s),nt[s.dtype],p(u)),u}var Cae={kernelName:yi,backendName:"wasm",setupFunc:Iae,kernelFunc:Sae},Tae=!0,Nae=Gt(uu,Tae);function Rae(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 Eae={kernelName:du,backendName:"wasm",kernelFunc:Rae};function fs(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 Mae={kernelName:xi,backendName:"wasm",kernelFunc:fs},Pae=Qe(Ai),aw;function _ae(e){aw=e.wasm.cwrap(os,null,["number","number","number","number"])}function $ae(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 aw(o,s,i,u),l}var Fae={kernelName:os,backendName:"wasm",setupFunc:_ae,kernelFunc:$ae};function nw(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 o0({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=h3(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=ss({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;dw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=ss({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var sne={kernelName:Ci,backendName:"wasm",setupFunc:nne,kernelFunc:rne},pw;function ine(e){pw=e.wasm.cwrap(Ti,null,["number","number","number","number","number","number"])}function one(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=ss({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;pw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=ss({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var lne={kernelName:Ti,backendName:"wasm",setupFunc:ine,kernelFunc:one},cw;function une(e){cw=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function dne(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 cw(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(p)),p}var pne={kernelName:hu,backendName:"wasm",setupFunc:une,kernelFunc:dne},hw;function cne(e){hw=e.wasm.cwrap(Ri,null,["number","number","number","array","number","array","array","number","number"])}function hne(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 hw(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var mne={kernelName:Ri,backendName:"wasm",setupFunc:cne,kernelFunc:hne},mw;function fne(e){mw=e.wasm.cwrap(Ei,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gne(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,P=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 mw(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,P,b,w,I,T,N,M,S),E}var yne={kernelName:Ei,backendName:"wasm",setupFunc:fne,kernelFunc:gne},fw;function xne(e){fw=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function Ane(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 fw(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var bne={kernelName:mu,backendName:"wasm",setupFunc:xne,kernelFunc:Ane},gw;function vne(e){gw=e.wasm.cwrap(Mi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wne(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 gw(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 kne={kernelName:Mi,backendName:"wasm",setupFunc:vne,kernelFunc:wne},yw;function Ine(e){yw=e.wasm.cwrap(Hl,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Sne(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 yw(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 Cne={kernelName:Hl,backendName:"wasm",setupFunc:Ine,kernelFunc:Sne},xw;function Tne(e){xw=e.wasm.cwrap(Gl,null,["number","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,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 xw(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 Rne={kernelName:Gl,backendName:"wasm",setupFunc:Tne,kernelFunc:Nne},Ene=Qe(_i),Aw;function Mne(e){Aw=e.wasm.cwrap(fu,null,["number","number","number"])}function Pne(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 Aw(i(r),i(n),i(s)),s}var _ne={kernelName:fu,backendName:"wasm",setupFunc:Mne,kernelFunc:Pne},$ne=!1,Fne=Gt(Fi,$ne,"bool"),Dne=Qe($i),One=Qe(Di,"float32");function V1(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 zne={kernelName:gu,backendName:"wasm",kernelFunc:V1},Lne=Qe(Oi,"float32");function bw(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 Wne={kernelName:yu,backendName:"wasm",kernelFunc:bw},vw;function Bne(e){vw=e.wasm.cwrap(zi,null,["number","number","number","number","number","number"])}function Vne(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 vw(s,o,l,u,p,i),r}var Une={kernelName:zi,backendName:"wasm",kernelFunc:Vne,setupFunc:Bne},Gne=Qe(Li),Hne=!1,jne=Gt(Wi,Hne),ww;function qne(e){ww=e.wasm.cwrap(Bi,null,["number","number","number","number","number","number","number"])}function Xne(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 ww(p,c,d,h,m,r,g),f}var Kne={kernelName:Bi,backendName:"wasm",setupFunc:qne,kernelFunc:Xne},kw;function Yne(e){kw=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 Zne(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=tp[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,P=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,$=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 kw(y,U,G,q,x,w,I,b,T,N,M,P,$,E,S,_,O,W,A,g,Z,m||0,V),H}var Jne={kernelName:Zr,backendName:"wasm",setupFunc:Yne,kernelFunc:Zne},Iw;function Qne(e){Iw=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 ere(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=tp[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,P=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,$=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 Iw(y,U,G,q,x,w,I,b,T,N,M,P,$,E,S,_,O,W,A,g,Z,m||0,V),H}var tre={kernelName:Jr,backendName:"wasm",setupFunc:Qne,kernelFunc:ere},Sw;function are(e){Sw=e.wasm.cwrap(Vi,null,["number","number","number","number","number","number","array","number"])}function nre(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=r3.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 Sw(d,nt[n.dtype],h,i,c,o,m,f),u}var rre={kernelName:Vi,backendName:"wasm",setupFunc:are,kernelFunc:nre},Cw;function sre(e){Cw=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function ire(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 Cw(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 ore={kernelName:xu,backendName:"wasm",setupFunc:sre,kernelFunc:ire},lre=!1,ure=Gt(Ui,lre,"bool"),dre=!1,pre=Gt(Gi,dre,"bool"),cre=Qe(ji,"bool"),hre=Qe(qi,"bool"),mre=Qe(Xi,"bool"),Tw;function fre(e){Tw=e.wasm.cwrap(Ki,null,["number","number","number","number"])}function gre(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;Tw(r,nt[t.dtype],a,i)}return s}var yre={kernelName:Ki,backendName:"wasm",setupFunc:fre,kernelFunc:gre},xre=!1,Are=Gt(Yi,xre,"bool"),bre=!1,vre=Gt(Zi,bre,"bool"),Nw;function wre(e){Nw=e.wasm.cwrap(Ji,null,["number","number","number","number"])}function kre(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return Nw(a.dataIdMap.get(o.dataId).id,n,r,i),o}var Ire={kernelName:Ji,backendName:"wasm",setupFunc:wre,kernelFunc:kre},Sre=Qe(Qi),Cre=Qe(eo),Tre=!1,Nre=Gt(to,Tre,"bool"),Rre=Qe(ao),Ere=!1,Mre=Gt(no,Ere,"bool"),Pre=!1,_re=Gt(CA,Pre,"bool"),Rw;function $re(e){Rw=e.wasm.cwrap(ro,null,["number","number","number","number","number","number","number"])}function Fre(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 Rw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var Dre={kernelName:ro,backendName:"wasm",setupFunc:$re,kernelFunc:Fre},Ew;function Ore(e){Ew=e.wasm.cwrap(Au,null,["number","number","number","number","number","number","number","number","number"])}function zre(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 Ew(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 Lre={kernelName:Au,backendName:"wasm",setupFunc:Ore,kernelFunc:zre},Mw;function Wre(e){Mw=e.wasm.cwrap(so,null,["number","number","number","number"])}function Bre(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}=ms(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;Mw(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 Vre={kernelName:so,backendName:"wasm",setupFunc:Wre,kernelFunc:Bre},Ure=!1,Gre=Gt(io,Ure),Pw;function Hre(e){Pw=e.wasm.cwrap(oo,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 Pw(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:oo,backendName:"wasm",setupFunc:Hre,kernelFunc:jre},_w;function Xre(e){_w=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 Kre(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 _w(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 Yre={kernelName:bu,backendName:"wasm",setupFunc:Xre,kernelFunc:Kre},$w;function Zre(e){$w=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 Jre(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 $w(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 Qre={kernelName:bp,backendName:"wasm",setupFunc:Zre,kernelFunc:Jre},Fw;function ese(e){Fw=e.wasm.cwrap("MaxPoolGrad",null,["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,{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 Fw(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 ase={kernelName:Ap,backendName:"wasm",setupFunc:ese,kernelFunc:tse},Dw;function nse(e){Dw=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 rse(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 Dw(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 sse={kernelName:vu,backendName:"wasm",setupFunc:nse,kernelFunc:rse},Ow;function ise(e){Ow=e.wasm.cwrap(lo,null,["number, number, number"])}function ose(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}=ms(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=fs({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;Ow(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 lse={kernelName:lo,backendName:"wasm",setupFunc:ise,kernelFunc:ose},zw;function use(e){zw=e.wasm.cwrap(uo,null,["number","number","number","number"])}function dse(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}=ms(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;zw(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 pse={kernelName:uo,backendName:"wasm",setupFunc:use,kernelFunc:dse},cse=!1,hse=Gt(po,cse),U1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(U1||(U1={}));var Lw;function mse(e){Lw=e.wasm.cwrap(co,null,["number","array","number","number","array","array","number","number"])}function fse(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 Lw(i,u,t.shape.length,nt[t.dtype],d,h,U1[r],l),o}var gse={kernelName:co,backendName:"wasm",kernelFunc:fse,setupFunc:mse},Ww;function yse(e){Ww=e.wasm.cwrap(Uo,null,["number","number","number","number"])}function Bw(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||Ww(r,i,o,l),s}var xse={kernelName:Uo,backendName:"wasm",setupFunc:yse,kernelFunc:Bw},Vw;function Ase(e){Vw=e.wasm.cwrap(mo,null,["number","number","number","number","number","number"])}function bse(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:Bw({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,p]=l.shape,c=a.makeOutput([u,s],"int32");return Vw(a.dataIdMap.get(l.dataId).id,u,p,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var vse={kernelName:mo,backendName:"wasm",setupFunc:Ase,kernelFunc:bse},wse=Gt(ho,!0),kse=!0,Ise=Gt(fo,kse),Sse=Qe(wu);function B3(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 Uw;function Cse(e){Uw=e.wasm.cwrap(yo,"number",["number","number","number","number","number"])}function Tse(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=Uw(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=B3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",d)}var Nse={kernelName:yo,backendName:"wasm",setupFunc:Cse,kernelFunc:Tse},Gw;function Rse(e){Gw=e.wasm.cwrap(ku,"number",["number","number","number","number","number","bool"])}function Ese(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=Gw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=B3(t,d);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var Mse={kernelName:ku,backendName:"wasm",setupFunc:Rse,kernelFunc:Ese},Hw;function Pse(e){Hw=e.wasm.cwrap(xo,"number",["number","number","number","number","number","number"])}function _se(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=Hw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=B3(t,d);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var $se={kernelName:xo,backendName:"wasm",setupFunc:Pse,kernelFunc:_se},Fse=!1,Dse=Gt(go,Fse,"bool"),jw;function Ose(e){jw=e.wasm.cwrap(Ao,null,["number","number","number","number","number"])}function zse(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 jw(c,i,o,l,p),u}var Lse={kernelName:Ao,backendName:"wasm",setupFunc:Ose,kernelFunc:zse};function Wse(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var Bse={kernelName:Iu,backendName:"wasm",kernelFunc:Wse};function Vse(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return V1({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=V1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=nw({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Use={kernelName:Su,backendName:"wasm",kernelFunc:Vse},qw;function Gse(e){qw=e.wasm.cwrap(bo,null,["number","array","number","number","array","array","number","number"])}function Hse(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 bw({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 qw(i,u,t.shape.length,nt[t.dtype],d,h,r,l),o}var Xw={kernelName:bo,backendName:"wasm",kernelFunc:Hse,setupFunc:Gse},jse=!1,qse=Gt(vo,jse),Kw;function Xse(e){Kw=e.wasm.cwrap(wo,null,["number","number","number"])}function Kse(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=fs({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 Kw(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var Yse={kernelName:wo,backendName:"wasm",setupFunc:Xse,kernelFunc:Kse},Yw;function Zse(e){Yw=e.wasm.cwrap(ko,null,["number","number","number","number"])}function Jse(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}=ms(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;Yw(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 Qse={kernelName:ko,backendName:"wasm",setupFunc:Zse,kernelFunc:Jse},eie=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=g3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},tie={kernelName:Cu,backendName:"wasm",kernelFunc:eie},aie=!0,nie=Gt(Pi,aie),rie=Qe(Io),sie=Qe(So),iie=Qe(No),Zw;function oie(e){Zw=e.wasm.cwrap(To,null,["number","number","number","number","number","number","number","number","number","number"])}function lie(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=fs({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 Zw(y,p,c,d,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var uie={kernelName:To,backendName:"wasm",setupFunc:oie,kernelFunc:lie},Jw;function die(e){Jw=e.wasm.cwrap(Ru,null,["number","number","number","array","array","boolean"])}function pie(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=fs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),Jw(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 cie={kernelName:Ru,backendName:"wasm",setupFunc:die,kernelFunc:pie},Qw;function hie(e){Qw=e.wasm.cwrap(Co,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.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=fs({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 Qw(x,p,c,d,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var fie={kernelName:Co,backendName:"wasm",setupFunc:hie,kernelFunc:mie},ek;function gie(e){ek=e.wasm.cwrap(Nu,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=fs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),ek(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:Nu,backendName:"wasm",setupFunc:gie,kernelFunc:yie},tk;function Aie(e){tk=e.wasm.cwrap(Ro,null,["number","array","number","array","number","number"])}function bie(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 o0({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);tk(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 vie={kernelName:Ro,backendName:"wasm",kernelFunc:bie,setupFunc:Aie},ak;function wie(e){ak=e.wasm.cwrap(Jo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function kie(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 ak(u,c,d,h,m,s,f,g,b,A.length,p),l}var Iie={kernelName:Jo,backendName:"wasm",kernelFunc:kie,setupFunc:wie},Sie=Qe(Eo),Cie=Qe(Mo),nk;function Tie(e){nk=e.wasm.cwrap(Po,null,["number","number","number","number","number","number","array","number","number"])}function Nie(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}=Hh.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 nk(h,m,nt[s.dtype],l,u,p,f,d,g),o}var Rie={kernelName:Po,backendName:"wasm",setupFunc:Tie,kernelFunc:Nie},rk;function Eie(e){rk=e.wasm.cwrap($o,null,["number","number","number","number","number","number","bool","number"])}function Mie(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 rk(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var Pie={kernelName:$o,backendName:"wasm",setupFunc:Eie,kernelFunc:Mie},sk;function _ie(e){sk=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function $ie(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 sk(i,o,l,h,p),u}var Fie={kernelName:Eu,backendName:"wasm",kernelFunc:$ie,setupFunc:_ie},Die=Qe(Fo),ik;function Oie(e){ik=e.wasm.cwrap(Lo,null,["number","number"])}function zie(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||ik(n,s),r}var Lie={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Oie,kernelFunc:zie},Wie=Qe(zo),Bie=Qe(Do),Vie=Qe(Oo),Uie=Qe(Wo);function Gie(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(S.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;Zw(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=S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{A=S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:A=S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:A=S.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 Lie(e){return Qw(e,!0)}var Wie={kernelName:Fu,backendName:"wasm",setupFunc:Jw,kernelFunc:Lie};function Bie(e){return Qw(e,!1)}var Vie={kernelName:Du,backendName:"wasm",setupFunc:Jw,kernelFunc:Bie},ek;function Uie(e){ek=e.wasm.cwrap(Uo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Gie(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}=S.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 ek(m,f,s.shape.length,g,nt[i.dtype],u,p,c,y,h,x),l}var Hie={kernelName:Uo,backendName:"wasm",setupFunc:Uie,kernelFunc:Gie};function jie(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=S.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=ai({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var qie={kernelName:Pu,backendName:"wasm",kernelFunc:jie},Xie=Qe(Wo),Kie=Qe(Sp),Yie=!0,Zie=Ht(Go,Yie),tk;function Jie(e){tk=e.wasm.cwrap(os,null,["number","number","number","number"])}function Qie(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 tk(i,r,nt[s.dtype],l),o}var eoe={kernelName:os,backendName:"wasm",setupFunc:Jie,kernelFunc:Qie},ak;function toe(e){ak=e.wasm.cwrap(Ho,null,["number","array","number","array","array","array","array","array","number","number"])}function aoe(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=Ba({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=ai({inputs:{x:r},backend:t,attrs:{begin:x,size:I}});w=Ba({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),P=new Uint8Array(new Int32Array(A).buffer),E=new Uint8Array(new Int32Array(b).buffer),C=new Uint8Array(new Int32Array(h).buffer),_=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(I.dataId).id;ak(T,N,r.shape.length,M,P,E,C,_,h.length,O),w=Ba({inputs:{x:I},backend:t,attrs:{shape:m}}),t.disposeData(I.dataId)}return w}var noe={kernelName:Ho,backendName:"wasm",setupFunc:toe,kernelFunc:aoe};function roe(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]=f3(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:Ou,backendName:"wasm",kernelFunc:roe};function ioe(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]=g3(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 ooe={kernelName:Tp,backendName:"wasm",kernelFunc:ioe};function loe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=y3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var uoe={kernelName:Np,backendName:"wasm",kernelFunc:loe},doe=!0,poe=Ht(jo,doe),nk;function coe(e){nk=e.wasm.cwrap(Bo,null,["number","number","number","number"])}function hoe(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}=cs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=S.getInnerMostAxes(m.length,u.shape.length))}S.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=S.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;nk(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=S.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var moe={kernelName:Bo,backendName:"wasm",setupFunc:coe,kernelFunc:hoe},foe=Qe(qo),goe=Qe(Xo),rk;function yoe(e){rk=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","array","number","number","number"])}function xoe(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}=Hh.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 rk(h,m,nt[i.dtype],l,u,p,g,d,y,f),o}var Aoe={kernelName:_o,backendName:"wasm",setupFunc:yoe,kernelFunc:xoe},sk;function boe(e){sk=e.wasm.cwrap(is,null,["number","array","number","array","number","number"])}function voe(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 ik(i,o,n.shape.length,nt[n.dtype],r,s,p,d),[u,c]},Soe={kernelName:Ko,backendName:"wasm",setupFunc:koe,kernelFunc:Ioe},ok;function Coe(e){ok=e.wasm.cwrap(Yo,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Toe(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 ok(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 Noe={kernelName:Yo,backendName:"wasm",setupFunc:Coe,kernelFunc:Toe};function Roe(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=A3(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 Eoe={kernelName:Rp,backendName:"wasm",kernelFunc:Roe};function Moe(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 _oe={kernelName:zu,backendName:"wasm",kernelFunc:Moe};function Poe(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var $oe={kernelName:Lu,backendName:"wasm",kernelFunc:Poe},Foe=[gte,yte,xte,Ate,vte,Ite,_te,Fte,Dte,Ote,zte,Lte,Wte,Bte,Vte,Hte,eae,Xte,Zte,rae,dae,hae,fae,yae,xae,Aae,wae,kae,Cae,Rae,_ae,Fae,zae,Lae,Wae,Uae,jae,Kae,Jae,tne,rne,one,dne,hne,gne,yne,bne,wne,kne,Ine,Sne,Cne,Tne,Ene,Mne,Pne,Dne,Lne,Vne,Hne,Xne,Yne,Jne,Ste,Qne,ere,tre,rre,ire,lre,pre,hre,cre,fre,gre,xre,bre,kre,Cre,Rre,Mre,$re,Ore,Wre,Ure,jre,Kre,Jre,ese,nse,lse,use,pse,cse,fse,xse,vse,kse,Cse,Nse,Ese,Dw,$se,Ose,Wse,Vse,Gse,Hse,jse,qse,tae,Yse,Qse,aie,sie,lie,pie,cie,hie,gie,Aie,wie,kie,Cie,Tie,Nie,Rie,lae,sse,Eie,_ie,Fie,zie,Wie,Vie,Hie,qie,Xie,Kie,Zie,eoe,noe,soe,ooe,uoe,poe,moe,foe,goe,Aoe,woe,Soe,Noe,Rte,Eoe,_oe,$oe];for(let e of Foe)xn(e);var U1=W();U1.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}});U1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(U1.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 W5=tu(WC()),Doe=tu(BC()),B5=tu(VC()),V5=W5.default||W5,Ooe=B5.default||B5,lk=class extends au{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(uk),G1=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 Woe(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 zoe(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 U5(e,t,a){if(Sh!=null)return Sh;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),$d!=null&&$d[n]!=null?$d[n]:a+n}async function Loe(){let[e,t]=await Promise.all([W().getAsync("WASM_HAS_SIMD_SUPPORT"),W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=Doe.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?U5(e,t,Md!=null?Md:l):l+o},L3&&(r.instantiateWasm=zoe(U5(e,t,Md!=null?Md:"")));let s=!1;r.onAbort=()=>{s||Fd||(Fd=!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&&Sh==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+V5.toString()],{type:"text/javascript"}),i=V5(r)):i=Ooe(r),i.then(o=>{s=!0,Fd=!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 Woe(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 Boe=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Sh=null,Md=null,$d={},Fd=!1,L3=!1;function Voe(e,t=!1){if(og("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Fd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Sh=e,L3=t}function l0(e,t=!1){if(Fd)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")Md=e;else{$d=e;let a=Boe.filter(n=>$d[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.`)}L3=t}var uk=-1,G1=-1;function Uoe(e){uk=e}function Goe(){if(G1===-1)throw new Error("WASM backend not initialized.");return G1}var Hoe="4.11.0",joe=2;Jo("wasm",async()=>{let{wasm:e}=await Loe();return new lk(e)},joe);var An=W();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 qoe=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"}},Xoe=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=G5(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=G5(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 G5(e,t){return`${e}_${t}`}var Koe=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=j5(a),s=e*t*r,i=H5(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=H5(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=j5(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 H5(e,t,a,n){return`${e}_${t}_${a}_${n}`}function j5(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function Yoe(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 ms=(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;lk(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 Zie={kernelName:$u,backendName:"wasm",setupFunc:Kie,kernelFunc:Yie},uk;function dk(e){uk=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function pk(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;uk(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 Jie(e){return pk(e,!0)}var Qie={kernelName:Fu,backendName:"wasm",setupFunc:dk,kernelFunc:Jie};function eoe(e){return pk(e,!1)}var toe={kernelName:Du,backendName:"wasm",setupFunc:dk,kernelFunc:eoe},ck;function aoe(e){ck=e.wasm.cwrap(Go,null,["number","number","number","number","number","number","number","number","array","number","number"])}function noe(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 ck(m,f,s.shape.length,g,nt[i.dtype],u,p,c,y,h,x),l}var roe={kernelName:Go,backendName:"wasm",setupFunc:aoe,kernelFunc:noe};function soe(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=ni({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var ioe={kernelName:_u,backendName:"wasm",kernelFunc:soe},ooe=Qe(Bo),loe=Qe(kp),uoe=!0,doe=Gt(Ho,uoe),hk;function poe(e){hk=e.wasm.cwrap(us,null,["number","number","number","number"])}function coe(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 hk(i,r,nt[s.dtype],l),o}var hoe={kernelName:us,backendName:"wasm",setupFunc:poe,kernelFunc:coe},mk;function moe(e){mk=e.wasm.cwrap(jo,null,["number","array","number","array","array","array","array","array","number","number"])}function foe(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=ni({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),P=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;mk(T,N,r.shape.length,M,P,E,S,_,h.length,O),w=La({inputs:{x:I},backend:t,attrs:{shape:m}}),t.disposeData(I.dataId)}return w}var goe={kernelName:jo,backendName:"wasm",setupFunc:moe,kernelFunc:foe};function yoe(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]=x3(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 xoe={kernelName:Ou,backendName:"wasm",kernelFunc:yoe};function Aoe(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]=A3(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 boe={kernelName:Sp,backendName:"wasm",kernelFunc:Aoe};function voe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=b3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var woe={kernelName:Cp,backendName:"wasm",kernelFunc:voe},koe=!0,Ioe=Gt(qo,koe),fk;function Soe(e){fk=e.wasm.cwrap(Vo,null,["number","number","number","number"])}function Coe(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}=ms(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;fk(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 Toe={kernelName:Vo,backendName:"wasm",setupFunc:Soe,kernelFunc:Coe},Noe=Qe(Xo),Roe=Qe(Ko),gk;function Eoe(e){gk=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","array","number","number","number"])}function Moe(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}=Hh.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 gk(h,m,nt[i.dtype],l,u,p,g,d,y,f),o}var Poe={kernelName:_o,backendName:"wasm",setupFunc:Eoe,kernelFunc:Moe},yk;function _oe(e){yk=e.wasm.cwrap(ls,null,["number","array","number","array","number","number"])}function $oe(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 xk(i,o,n.shape.length,nt[n.dtype],r,s,p,d),[u,c]},zoe={kernelName:Yo,backendName:"wasm",setupFunc:Doe,kernelFunc:Ooe},Ak;function Loe(e){Ak=e.wasm.cwrap(Zo,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Woe(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 Ak(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 Boe={kernelName:Zo,backendName:"wasm",setupFunc:Loe,kernelFunc:Woe};function Voe(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=w3(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 Uoe={kernelName:Tp,backendName:"wasm",kernelFunc:Voe};function Goe(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 Hoe={kernelName:zu,backendName:"wasm",kernelFunc:Goe};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:Lu,backendName:"wasm",kernelFunc:joe},Xoe=[Rte,Ete,Mte,Pte,$te,Ote,Hte,Xte,Kte,Yte,Zte,Jte,Qte,eae,tae,rae,hae,oae,dae,yae,kae,Cae,Nae,Eae,Mae,Pae,Fae,Dae,Lae,Vae,Hae,Xae,Zae,Jae,Qae,ane,sne,lne,pne,mne,yne,bne,kne,Cne,Rne,Ene,_ne,Fne,Dne,One,zne,Lne,Wne,Une,Gne,jne,Kne,Jne,tre,rre,ore,ure,pre,zte,cre,hre,mre,yre,Are,vre,Ire,Cre,Sre,Nre,Rre,Mre,_re,Dre,Lre,Vre,Gre,qre,Yre,Qre,ase,sse,lse,pse,hse,gse,vse,wse,Ise,Sse,Nse,Mse,$se,Dse,Lse,Bse,Use,Xw,qse,Yse,Qse,tie,nie,rie,sie,iie,mae,uie,cie,fie,xie,vie,Iie,Sie,Cie,Rie,Pie,Fie,Die,Lie,Wie,Bie,Vie,vae,xse,Uie,Hie,Xie,Zie,Qie,toe,roe,ioe,ooe,loe,doe,hoe,goe,xoe,boe,woe,Ioe,Toe,Noe,Roe,Poe,Foe,zoe,Boe,Vte,Uoe,Hoe,qoe];for(let e of Xoe)yn(e);var G1=B();G1.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}});G1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(G1.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 j5=tu(QC()),Koe=tu(eT()),q5=tu(tT()),X5=j5.default||j5,Yoe=q5.default||q5,bk=class extends au{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(vk),H1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new rp(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 Qoe(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 Zoe(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 K5(e,t,a){if(Sh!=null)return Sh;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),_d!=null&&_d[n]!=null?_d[n]:a+n}async function Joe(){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=Koe.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?K5(e,t,Ed!=null?Ed:l):l+o},V3&&(r.instantiateWasm=Zoe(K5(e,t,Ed!=null?Ed:"")));let s=!1;r.onAbort=()=>{s||$d||($d=!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&&Sh==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+X5.toString()],{type:"text/javascript"}),i=X5(r)):i=Yoe(r),i.then(o=>{s=!0,$d=!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 Qoe(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 ele=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Sh=null,Ed=null,_d={},$d=!1,V3=!1;function tle(e,t=!1){if(ug("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),$d)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Sh=e,V3=t}function l0(e,t=!1){if($d)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")Ed=e;else{_d=e;let a=ele.filter(n=>_d[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.`)}V3=t}var vk=-1,H1=-1;function ale(e){vk=e}function nle(){if(H1===-1)throw new Error("WASM backend not initialized.");return H1}var rle="4.14.0",sle=2;Qo("wasm",async()=>{let{wasm:e}=await Joe();return new bk(e)},sle);var xn=B();xn.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);xn.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);xn.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);xn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);xn.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);xn.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);xn.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);xn.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);xn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);xn.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);xn.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);xn.registerFlag("WEBGPU_PRINT_SHADER",()=>"");xn.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var ile=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"}},ole=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=Y5(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=Y5(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 Y5(e,t){return`${e}_${t}`}var lle=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=J5(a),s=e*t*r,i=Z5(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=Z5(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=J5(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 Z5(e,t,a,n){return`${e}_${t}_${a}_${n}`}function J5(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function ule(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 gs=(e,t,a)=>a==="int32"?`atomicAdd(${e}, bitcast(${t}));`:` { var oldValue = 0; loop { @@ -5006,12 +5006,12 @@ return a / b;`,lJ=` } oldValue = res.old_value; } - }`,eu;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(eu||(eu={}));var Zoe=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=Qoe(a,s,t),o=e.createShaderModule({code:i,label:t.constructor.name}),l=W().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"})},Ke=(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 $t(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 Sr(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=` + }`,eu;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(eu||(eu={}));var dle=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=cle(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 _t(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 q5(e,t){let a;return a=` - ${Joe(t)} + `;break;default:throw Error("Unreachable")}return t}function Q5(e,t){let a;return a=` + ${ple(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;`,lJ=` workgroupId = WorkgroupId; ${e?"main(getGlobalIndex());":"main();"}; } - `,a}function Joe(e){return` + `,a}function ple(e){return` @compute @workgroup_size(${e.workgroupSize[0]}, ${e.workgroupSize[1]}, ${e.workgroupSize[2]}) -`}function Qoe(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 cle(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,12 +5036,12 @@ return a / b;`,lJ=` // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${dk(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${wk(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${r}u + localIndex); `} } - `),a.pixelsOpType!=null){let h=a.pixelsOpType===eu.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Us(t.dtype,a.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Us(e[0].dtype,a.outputComponent)}>;`,m=t.shape.length===3?"vec2":"i32";n.push(` + `),a.pixelsOpType!=null){let h=a.pixelsOpType===eu.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Gs(t.dtype,a.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Gs(e[0].dtype,a.outputComponent)}>;`,m=t.shape.length===3?"vec2":"i32";n.push(` struct Uniform { outShapeStrides : ${m}, size : i32, @@ -5051,21 +5051,21 @@ return a / b;`,lJ=` ${h} @group(0) @binding(2) var uniforms: Uniform; - `);let f=K5(a);return[X5,n.join(` -`),oh(t.shape),a.getUserCode(),q5(f,a)].join(` -`)}let s,i,o="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,m)=>{let f=$t(e[m].shape.length);o+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${f}, `,s=e[m].shape.length-1,i=$t(s),o+=`${h.charAt(0).toLowerCase()+h.slice(1)}ShapeStrides: ${i}, `});let l=$t(t.shape.length);o+=`outShape : ${l}, `,s=t.shape.length-1,i=$t(s),o+=` - outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=lle(o),n.push(o),a.atomic?n.push(` + `);let f=tA(a);return[eA,n.join(` +`),ih(t.shape),a.getUserCode(),Q5(f,a)].join(` +`)}let s,i,o="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,m)=>{let f=_t(e[m].shape.length);o+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${f}, `,s=e[m].shape.length-1,i=_t(s),o+=`${h.charAt(0).toLowerCase()+h.slice(1)}ShapeStrides: ${i}, `});let l=_t(t.shape.length);o+=`outShape : ${l}, `,s=t.shape.length-1,i=_t(s),o+=` + outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=vle(o),n.push(o),a.atomic?n.push(` @group(0) @binding(0) var result: array>; `):n.push(` - @group(0) @binding(0) var result: array<${Us(t.dtype,a.outputComponent)}>; + @group(0) @binding(0) var result: array<${Gs(t.dtype,a.outputComponent)}>; `),a.variableNames.forEach((h,m)=>{n.push(` - @group(0) @binding(${1+m}) var ${h}: array<${a.variableComponents?Us(e[m].dtype,a.variableComponents[m]):Us(e[m].dtype,a.outputComponent)}>; + @group(0) @binding(${1+m}) var ${h}: array<${a.variableComponents?Gs(e[m].dtype,a.variableComponents[m]):Gs(e[m].dtype,a.outputComponent)}>; `)}),o!==""&&n.push(` @group(0) @binding(${1+a.variableNames.length}) var uniforms: Uniforms; - `);let u=sle(t.shape,a.dispatchLayout),p=[X5,n.join(` -`)+tle,oh(t.shape),u,ile(t.shape.length)];a.atomic||p.push(ole(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{p.push(`${oh(e[m].shape,h)}`)});let c=e.map((h,m)=>rle(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=K5(a);return p.push(q5(d,a)),p.join(` -`)}function ele(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=>S.getBroadcastDims(p.shape,a.shape)),o=t.map(p=>v.arraysEqual(p.shape,a.shape)).join("_"),l=i.map(p=>p.join("_")).join(";"),u=dk(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 X5=` + `);let u=xle(t.shape,a.dispatchLayout),p=[eA,n.join(` +`)+mle,ih(t.shape),u,Ale(t.shape.length)];a.atomic||p.push(ble(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{p.push(`${ih(e[m].shape,h)}`)});let c=e.map((h,m)=>yle(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=tA(a);return p.push(Q5(d,a)),p.join(` +`)}function hle(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=wk(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 eA=` 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,63 +5115,63 @@ return a / b;`,lJ=` let floatToUint: vec4 = bitcast>(val); return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u); } -`,tle=` +`,mle=` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } -`;function oh(e,t=""){let a=e.length,n=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",r=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(a<=1)return`fn ${n}(index : i32) -> i32 { return index; }`;let s=v.computeStrides(e),i=$t(a),o=[];for(let u=0;u vec2 { +`;function ih(e,t=""){let a=e.length,n=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",r=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(a<=1)return`fn ${n}(index : i32) -> i32 { return index; }`;let s=v.computeStrides(e),i=_t(a),o=[];for(let u=0;u vec2 { let d0 = index / uniforms.${r}; let d1 = index - d0 * uniforms.${r}; return vec2(d0, d1); - }`;let l;return l="var index2 = index;"+s.map((u,p)=>{let c=`let ${o[p]} = index2 / uniforms.${r}.${Sr(p)}`,d=p===s.length-1?`let ${o[p+1]} = index2 - ${o[p]} * uniforms.${r}.${Sr(p)}`:`index2 = index2 - ${o[p]} * uniforms.${r}.${Sr(p)}`;return`${c}; ${d};`}).join(""),` + }`;let l;return l="var index2 = index;"+s.map((u,p)=>{let c=`let ${o[p]} = index2 / uniforms.${r}.${Ir(p)}`,d=p===s.length-1?`let ${o[p+1]} = index2 - ${o[p]} * uniforms.${r}.${Ir(p)}`:`index2 = index2 - ${o[p]} * uniforms.${r}.${Ir(p)}`;return`${c}; ${d};`}).join(""),` fn ${n}(index : i32) -> ${i} { ${l} return ${i}(${o.join(",")}); } - `}function ale(e,t){let a=e.name,n=e.shape.length,r=$t(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}() -> ${Ke(t)} { - return ${Ke(t)}(${a}[0]); + `}function fle(e,t){let a=e.name,n=e.shape.length,r=_t(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]); } `;let l=`uniforms.${a.charAt(0).toLowerCase()+a.slice(1)}Shape`,u=`${n}D`;return n===0&&(u="1D"),` - fn ${s}(${o}) -> ${Ke(t)} { - return ${Ke(t)}(${a}[getIndexFromCoords${u}(${r}(${i.join(",")}), + fn ${s}(${o}) -> ${Xe(t)} { + return ${Xe(t)}(${a}[getIndexFromCoords${u}(${r}(${i.join(",")}), ${l})${t===1?"":` / ${t}`}]); } - `}function nle(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=$t(l);if(v.arraysEqual(e.shape,t)&&n)return` - fn ${i}Index(globalIndex : i32) -> ${Ke(a)} { - return ${Ke(a)}(${r}[globalIndex]); + `}function gle(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=_t(l);if(v.arraysEqual(e.shape,t)&&n)return` + fn ${i}Index(globalIndex : i32) -> ${Xe(a)} { + return ${Xe(a)}(${r}[globalIndex]); } - fn ${i}Coords(coords : ${u}) -> ${Ke(a)} { - return ${Ke(a)}(${r}[${l>1?"getOutputIndexFromCoords(coords)":"coords"}${a===1?"":` / ${a}`}]); + fn ${i}Coords(coords : ${u}) -> ${Xe(a)} { + return ${Xe(a)}(${r}[${l>1?"getOutputIndexFromCoords(coords)":"coords"}${a===1?"":` / ${a}`}]); } - `;let p=S.getBroadcastDims(e.shape,t),c=l-o,d="";if(o===0)return` - fn ${i}Index(globalIndex : i32) -> ${Ke(a)}{ + `;let p=C.getBroadcastDims(e.shape,t),c=l-o,d="";if(o===0)return` + fn ${i}Index(globalIndex : i32) -> ${Xe(a)}{ return get${s}(); } - fn ${i}Coords(coords : ${u}) -> ${Ke(a)}{ + fn ${i}Coords(coords : ${u}) -> ${Xe(a)}{ return get${s}(); } - `;l<2&&p.length>=1?d="coords = 0;":d=p.map(g=>`coords.${Sr(g+c)} = 0;`).join(` -`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=$t(o),y=e.shape.map((x,A)=>`coords.${Sr(A+c)}`).join(", ");h=`${g}(${y})`}else h="coords";let m=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,f=`${o}D`;return` - fn ${i}Index(globalIndex : i32) -> ${Ke(a)} { + `;l<2&&p.length>=1?d="coords = 0;":d=p.map(g=>`coords.${Ir(g+c)} = 0;`).join(` +`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=_t(o),y=e.shape.map((x,A)=>`coords.${Ir(A+c)}`).join(", ");h=`${g}(${y})`}else h="coords";let m=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,f=`${o}D`;return` + fn ${i}Index(globalIndex : i32) -> ${Xe(a)} { var coords = getCoordsFromIndex(globalIndex); ${d} - return ${Ke(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); + return ${Xe(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); } - fn ${i}Coords(coordsIn : ${u}) -> ${Ke(a)} { + fn ${i}Coords(coordsIn : ${u}) -> ${Xe(a)} { var coords = coordsIn; ${d} - return ${Ke(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); + return ${Xe(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); } -`}function rle(e,t,a,n){let r=ale(e,a);return e.shape.length<=t.length&&(r+=nle(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() -> ${$t(s)}{ +`}function yle(e,t,a,n){let r=fle(e,a);return e.shape.length<=t.length&&(r+=gle(e,t,a,n)),r}function xle(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() -> ${_t(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 ile(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 Ale(e){let t="";switch(e){case 0:case 1:t+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5205,56 +5205,56 @@ return a / b;`,lJ=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function dk(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Us(e,t=1){if(e==="float32")return Ke(t,"f32");if(e==="int32"||e==="bool")return Ke(t,"i32");throw new Error(`type ${e} is not supported.`)}function ole(e,t,a){let n=e.length,r=Us(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ke(a)}) { + `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function wk(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Gs(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 ble(e,t,a){let n=e.length,r=Gs(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Xe(a)}) { result[flatIndex] = ${r}(value); } - fn setOutputAtIndexI32(flatIndex : i32, value : ${Ke(a,"i32")}) { + fn setOutputAtIndexI32(flatIndex : i32, value : ${Xe(a,"i32")}) { result[flatIndex] = ${r}(value); } - `;if(n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=$t(n);s+=` - fn setOutputAtCoords(${i.map(l=>`${l} : i32`).join(", ")}, value : ${Ke(a)}) { + `;if(n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=_t(n);s+=` + fn setOutputAtCoords(${i.map(l=>`${l} : i32`).join(", ")}, value : ${Xe(a)}) { let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndex(flatIndex${a===1?"":` / ${a}`}, value); } - fn setOutputAtCoordsI32(${i.map(l=>`${l} : i32`).join(", ")}, value : ${Ke(a,"i32")}) { + fn setOutputAtCoordsI32(${i.map(l=>`${l} : i32`).join(", ")}, value : ${Xe(a,"i32")}) { let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndexI32(flatIndex${a===1?"":` / ${a}`}, value); } - `}return s}function lle(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 K5(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var pk={};Ze(pk,{GPUBytesPerElement:()=>H1,MatMulProgramType:()=>Dn,assertNotComplex:()=>U3,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>B3,computeWorkgroupInfoForMatMul:()=>ck,computeWorkgroupSizeForConv2d:()=>W3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>V3,tilesFitEvenlyIntoShape:()=>ule});var js=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(js(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(js(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(js(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function ck(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 W3(e,t,a=!1){if(a)return[8,8,1];let n=js(e.x.map(s=>t[s])),r=js(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function B3(e,t,a=!1){if(a)return[4,4,1];let n=js(e.x.map(s=>t[s])),r=js(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 H1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function V3(){return(typeof window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}function U3(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the 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 dle=W().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),ple=(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]},u0=class extends au{nextDataId(){return u0.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,!V3())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 qoe(t),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Xoe(this.device),this.textureManager=new Koe(this.device),this.tensorMap=new ip(this,It()),W().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let a=this.tensorMap.get(e);return t?a.refCount=0:a.refCount--,a.refCount>0?!1:(a.complexTensorInfos!=null&&(this.disposeData(a.complexTensorInfos.real.dataId),this.disposeData(a.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,a){if(a==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:a,shape:t,values:e,refCount:1}),n}move(e,t,a,n,r){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:a,values:t,refCount:r})}submitQueue(){this.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,a)=>{this.pipelineCache[t]=e[a]})}async getBufferData(e){if(W().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,a=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,a,0,t),this.submitQueue(),await a.mapAsync(GPUMapMode.READ);let n=a.getMappedRange().slice(0);return a.unmap(),a!=null&&this.bufferManager.releaseBuffer(a),W().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let a=this.tensorMap.get(e);return a.values=t,a.values}readSync(e){let t=this.tensorMap.get(e),{values:a,complexTensorInfos:n}=t;if(a!=null||t.dtype==="string")return a;if(t.dtype==="complex64"){let m=this.readSync(n.real.dataId),f=this.readSync(n.imag.dataId),g=v.convertBackendValuesAndArrayBuffer(S.mergeRealAndImagArrays(m,f).buffer,"float32");return this.convertAndCacheOnCPU(e,g),g}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 r=["opaque","premultiplied"],s=t.resource,i=s.size;v.assert(i%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let o=i/4,l=new ArrayBuffer(i),u=256,p=256,c=r.map(m=>new OffscreenCanvas(u,p)),d=new OffscreenCanvas(u,p);this.endComputePassEncoder(),c.map((m,f)=>{let g=m.getContext("webgpu");return g.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:r[f]}),g.getCurrentTexture()}).map((m,f)=>{let g=u*4,y=(T,N,M)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:s,bytesPerRow:g,offset:M},{texture:m},{width:T,height:N}),this.submitQueue();let P=d.getContext("2d",{willReadFrequently:!0});P.clearRect(0,0,T,N),P.drawImage(c[f],0,0);let E=P.getImageData(0,0,T,N).data,C=r[f],_=new Uint8ClampedArray(l,M,T*N*4);for(let O=0;O<_.length;O+=4)if(C==="premultiplied")_[O+3]=E[O+3];else{let B=E[O];_[O]=E[O+2],_[O+1]=E[O+1],_[O+2]=B}},x=Math.floor(o/(u*p)),A=u,b=p,w=0;for(let T=0;T0&&(y(A,b,w),w+=b*(u*4)),A=I%u,A>0&&y(A,1,w)});let h=v.convertBackendValuesAndArrayBuffer(l,t.dtype);return this.convertAndCacheOnCPU(e,h),h}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:a}=t;if(a!=null)return a;let n;if(t.dtype==="complex64"){let r=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),s=r[0],i=r[1];n=S.mergeRealAndImagArrays(s,i)}else{let r=await this.getBufferData(t.resource);n=v.convertBackendValuesAndArrayBuffer(r,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,a=e.usage,n=this.bufferManager.acquireBuffer(t,a);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,a){let n=e.buffer;if(a==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let r={id:this.nextDataId()};this.tensorMap.set(r,{dtype:a,shape:t,values:null,refCount:1,external:e.zeroCopy});let s=this.tensorMap.get(r),i=H1(s.dtype)*v.sizeFromShape(s.shape);if(e.buffer.sizev.decodeString(n));return $e(e.shape,e.dtype,a)}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return $e(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 --disable-dawn-features=disallow_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,a=[],n=!1;this.programTimersStack==null?(this.programTimersStack=a,n=!0):this.activeTimers.push(a),this.activeTimers=a,e();let r=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),s=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},o=await Promise.all(r);return i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,a){return t==="string"&&a!=null&&a.length>0&&v.isString(a[0])&&(a=a.map(n=>v.encodeString(n))),{dataId:this.write(a,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let t=this.tensorMap.get(e.dataId).resource;return t instanceof GPUBuffer?{buffer:t}:t instanceof GPUTexture?t.createView():t}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let a=H1(t.dtype)*v.sizeFromShape(t.shape),n,r=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(a,r,!0),n.mapState==="unmapped"){let s=this.bufferManager.acquireBuffer(a,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=s.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),s.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(s,0,n,0,a),this.stagingPendingDisposal.push(s)}else{let s=n.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(s).set(t.values):new Float32Array(s).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(a,r);t.resource=n}makeUniforms(e){let t=0,a=0,n=[],r=1;e.forEach(o=>{o.data.length===0&&(o.data=[1]);let l;switch(o.data.length){case 1:l=4;break;case 2:l=8;break;case 3:l=16;break;case 4:l=16;break;case 5:l=16;break;case 6:l=16;break;default:v.assert(!1,()=>`Unsupported ${o.data.length}D shape`)}(a===5||a===6)&&(l=16),l>r&&(r=l),t=Math.ceil(t/l)*l,a=o.data.length,n.push(t),t+=o.data.length*4}),t=Math.ceil(t/r)*r;let s=new ArrayBuffer(t);e.forEach((o,l)=>{let u=n[l];o.type==="int32"?new Int32Array(s,u,o.data.length).set(o.data):o.type==="uint32"?new Uint32Array(s,u,o.data.length).set(o.data):new Float32Array(s,u,o.data.length).set(o.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,s,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}runWebGPUProgram(e,t,a,n,r){if(r||(r=this.makeTensorInfo(e.outputShape,a)),v.sizeFromShape(r.shape)===0)return this.tensorMap.get(r.dataId).values=v.getTypedArrayFromDType(r.dtype,0),r;this.uploadToGPU(r.dataId),e.dispatch=ple(this.device,e);let s=t.map((o,l)=>{if(o.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(o.dataId),{dtype:this.tensorMap.get(o.dataId).dtype,shape:o.shape,name:e.variableNames[l]}});e.shaderKey=ele(e,s,r);let i=W().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=Zoe(this.device,e,s,r,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,r,t,n),r}recordAndSubmit(e,t,a,n){if(e.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let r=[],s=[],i="int32";if(e.pixelsOpType==null){r.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),s=a.concat(t).map(d=>d.shape);let c="int32";s.map(d=>{r.push({type:c,data:d});let h=v.computeStrides(d);r.push({type:c,data:h})})}else{let c=v.computeStrides(t.shape);r.push({type:i,data:c})}if(e.size){let c=v.sizeFromShape(e.outputShape);r.push({type:i,data:[e.outputComponent?c/e.outputComponent:c]})}n&&(r=[...r,...n]);let o=[this.tensorToBinding(t),...a.map(c=>this.tensorToBinding(c)),this.makeUniforms(r)];a.forEach(c=>{this.commandQueueOwnedIds.add(c.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let l=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:o.map((c,d)=>({binding:d,resource:c}))}),u=this.activeTimers!=null;this.ensureCommandEncoderReady();let p={};u&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),p.timestampWrites=[{querySet:this.querySet,queryIndex:0,location:"beginning"},{querySet:this.querySet,queryIndex:1,location:"end"}],this.computePassEncoder=this.commandEncoder.beginComputePass(p)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(p)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,l),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(u||W().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||e.pixelsOpType===eu.DRAW)&&(this.endComputePassEncoder(),u?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()),a=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),a}shouldExecuteOnCPU(e,t=dle){return W().getBool("WEBGPU_CPU_FORWARD")&&e.every(a=>this.tensorMap.get(a.dataId).resource==null&&v.sizeFromShape(a.shape){let e={powerPreference:W().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 u0(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 cle="let resultTemp = a + b;",hle="let resultTemp = atan2(a, b);",mle="let resultTemp = areal * breal - aimag * bimag;",fle="let resultTemp = areal * bimag + aimag * breal;",gle="let resultTemp = a / b;",yle="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",xle=` + `}return s}function vle(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 tA(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var kk={};Ze(kk,{GPUBytesPerElement:()=>j1,MatMulProgramType:()=>Dn,assertNotComplex:()=>j3,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>G3,computeWorkgroupInfoForMatMul:()=>Ik,computeWorkgroupSizeForConv2d:()=>U3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>H3,tilesFitEvenlyIntoShape:()=>wle});var qs=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(qs(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(qs(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(qs(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Ik(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 U3(e,t,a=!1){if(a)return[8,8,1];let n=qs(e.x.map(s=>t[s])),r=qs(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function G3(e,t,a=!1){if(a)return[4,4,1];let n=qs(e.x.map(s=>t[s])),r=qs(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 j1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function H3(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function j3(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 kle=B().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Ile=(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]},q3=class Sk extends au{nextDataId(){return Sk.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,!H3())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 ile(a),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new ole(this.device),this.textureManager=new lle(this.device),this.tensorMap=new rp(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,P)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:i,bytesPerRow:y,offset:P},{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,P,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=j1(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=j1(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=Ile(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=hle(t,i,s);let o=B().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=dle(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===eu.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=kle){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 q3(s,i)},3);var _e;(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"})(_e||(_e={}));var Sle="let resultTemp = a + b;",Cle="let resultTemp = atan2(a, b);",Tle="let resultTemp = areal * breal - aimag * bimag;",Nle="let resultTemp = areal * bimag + aimag * breal;",Rle="let resultTemp = a / b;",Ele="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",Mle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); -`,Ale=` +`,Ple=` 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))); -`,ble=` +`,_le=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a > b); -`,vle=` +`,$le=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a >= b); -`,wle=` +`,Fle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a < b); -`,kle=` +`,Dle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a <= b); -`,Ile="return f32(a >= 1.0 && b >= 1.0);",Sle=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,Cle="return f32(a >= 1.0 || b >= 1.0);",Tle=`return min(vec4(a >= vec4(1.0)) + - vec4(b >= vec4(1.0)), vec4(1.0));`,Nle="let resultTemp = max(a, b);",Rle="let resultTemp = min(a, b);",Ele=` +`,Ole="return f32(a >= 1.0 && b >= 1.0);",zle=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,Lle="return f32(a >= 1.0 || b >= 1.0);",Wle=`return min(vec4(a >= vec4(1.0)) + + vec4(b >= vec4(1.0)), vec4(1.0));`,Ble="let resultTemp = max(a, b);",Vle="let resultTemp = min(a, b);",Ule=` let isNaN = b == 0.; var resultTemp = a % b; resultTemp = select((resultTemp + b) % b, resultTemp, (a < 0. && b < 0.) || (a >= 0. && b > 0.)); -`,Mle=` +`,Gle=` 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;`,lJ=` if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; } -`,_le="let resultTemp = a * b;",Ple=` +`,Hle="let resultTemp = a * b;",jle=` var resultTemp = f32(a != b); let valueForNaN = 1.0; -`,$le=` +`,qle=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; -`,Fle=` +`,Xle=` 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); -`,Dle=` +`,Kle=` 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;`,lJ=` resultTemp.a = 1.0; } let isNaN = (a < vec4(0.0)) & (floor(b) < b); -`,Ole="if (a < 0.0) { return b * a; } return a;",zle=` +`,Yle="if (a < 0.0) { return b * a; } return a;",Zle=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,Lle="let resultTemp = (a - b) * (a - b);",Wle="let resultTemp = a - b;";function G3(e,t){let a;do{switch(e){case Pe.ATAN2:a=hle;break;case Pe.MAX:a=Nle;break;case Pe.MIN:a=Rle;break;case Pe.MOD:a=t?Mle:Ele;break;case Pe.NOT_EQUAL:a=t?$le:Ple;break;case Pe.POW:a=t?Dle:Fle;break;default:continue}let n,r,s;return t?(n="isnanVec4",r="vec4",s="vec4"):(n="isnan",r="f32",s="bool"),` +`,Jle="let resultTemp = (a - b) * (a - b);",Qle="let resultTemp = a - b;";function X3(e,t){let a;do{switch(e){case _e.ATAN2:a=Cle;break;case _e.MAX:a=Ble;break;case _e.MIN:a=Vle;break;case _e.MOD:a=t?Gle:Ule;break;case _e.NOT_EQUAL:a=t?qle:jle;break;case _e.POW:a=t?Kle:Xle;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;`,lJ=` resultTemp, ${r}(valueForNaN), ${s}(isNaN) | aIsNaN | bIsNaN); } - `}while(!1);switch(e){case Pe.ADD:a=cle;break;case Pe.COMPLEX_MULTIPLY_IMAG:a=fle;break;case Pe.COMPLEX_MULTIPLY_REAL:a=mle;break;case Pe.DIV:a=gle;break;case Pe.ELU_DER:a=yle;break;case Pe.EQUAL:a=xle;break;case Pe.FLOOR_DIV:a=Ale;break;case Pe.GREATER:a=ble;break;case Pe.GREATER_EQUAL:a=vle;break;case Pe.LESS:a=wle;break;case Pe.LESS_EQUAL:a=kle;break;case Pe.LOGICAL_AND:return t?Sle:Ile;case Pe.LOGICAL_OR:return t?Tle:Cle;case Pe.MUL:a=_le;break;case Pe.PRELU:return t?zle:Ole;case Pe.SQUARED_DIFFERENCE:a=Lle;break;case Pe.SUB:a=Wle;break;default:}return` + `}while(!1);switch(e){case _e.ADD:a=Sle;break;case _e.COMPLEX_MULTIPLY_IMAG:a=Nle;break;case _e.COMPLEX_MULTIPLY_REAL:a=Tle;break;case _e.DIV:a=Rle;break;case _e.ELU_DER:a=Ele;break;case _e.EQUAL:a=Mle;break;case _e.FLOOR_DIV:a=Ple;break;case _e.GREATER:a=_le;break;case _e.GREATER_EQUAL:a=$le;break;case _e.LESS:a=Fle;break;case _e.LESS_EQUAL:a=Dle;break;case _e.LOGICAL_AND:return t?zle:Ole;case _e.LOGICAL_OR:return t?Wle:Lle;case _e.MUL:a=Hle;break;case _e.PRELU:return t?Zle:Yle;case _e.SQUARED_DIFFERENCE:a=Jle;break;case _e.SUB:a=Qle;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 Ble="return abs(a);",Vle=` + `}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 eue="return abs(a);",tue=` if (abs(a) > 1.) { return uniforms.NAN; } return acos(a); -`,Ule=` +`,aue=` if (a < 1.) { return uniforms.NAN; } return acosh(a); -`,Gle=` +`,nue=` if (abs(a) > 1.) { return uniforms.NAN; } return asin(a); -`,Hle="return asinh(a);",jle=` +`,rue="return asinh(a);",sue=` if (isnan(a)) { return uniforms.NAN; } return atan(a); -`,qle=` +`,iue=` if (abs(a) > 1.) { return uniforms.NAN; } @@ -5355,10 +5355,10 @@ return a / b;`,lJ=` return -uniforms.INFINITY; } return atanh(a); -`,Xle="return ceil(a);",Kle="return cos(a);",Yle=` +`,oue="return ceil(a);",lue="return cos(a);",uue=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,Zle="return exp(a) - 1.0;",Jle="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",Qle=` +`,due="return exp(a) - 1.0;",pue="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",cue=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5373,40 +5373,40 @@ return a / b;`,lJ=` resFloat.a = a.a; } return resFloat; -`,eue=` +`,hue=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - let p = ${S.ERF_P}; - let a1 = ${S.ERF_A1}; - let a2 = ${S.ERF_A2}; - let a3 = ${S.ERF_A3}; - let a4 = ${S.ERF_A4}; - let a5 = ${S.ERF_A5}; + let p = ${C.ERF_P}; + let a1 = ${C.ERF_A1}; + let a2 = ${C.ERF_A2}; + let a3 = ${C.ERF_A3}; + let a4 = ${C.ERF_A4}; + let a5 = ${C.ERF_A5}; let sign = sign(a); let absA = abs(a); let t = 1.0 / (1.0 + p * absA); return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); -`,tue="return exp(a);",aue="return floor(a);",nue="return f32(!isnan(a) && !isinf(a));",rue="return f32(isinf(a));",sue="return f32(isnan(a));",iue="return a;",oue=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,lue=` +`,mue="return exp(a);",fue="return floor(a);",gue="return f32(!isnan(a) && !isinf(a));",yue="return f32(isinf(a));",xue="return f32(isnan(a));",Aue="return a;",bue=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,vue=` if (isnan(a)) { return a; } return log(1.0 + a); -`,uue="return f32(!(a >= 1.0));",due="return -a;",pue="if (a < 0.0) { return uniforms.alpha * a; } return a;",cue=` +`,wue="return f32(!(a >= 1.0));",kue="return -a;",Iue="if (a < 0.0) { return uniforms.alpha * a; } return a;",Sue=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,hue="return 1.0 / a;",mue="return select(a, 0.0, a < 0.0);",fue="return clamp(a, 0.0, 6.0);",gue="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",yue=` +`,Cue="return 1.0 / a;",Tue="return select(a, 0.0, a < 0.0);",Nue="return clamp(a, 0.0, 6.0);",Rue="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Eue=` return select(a, vec4(0.0), a < vec4(0.0)); -`,xue="return round(a);",Aue="return inverseSqrt(a);",bue=` +`,Mue="return round(a);",Pue="return inverseSqrt(a);",_ue=` if (a >= 0.0) { - return ${S.SELU_SCALE} * a; + return ${C.SELU_SCALE} * a; } else { - return ${S.SELU_SCALEALPHA} * (exp(a) - 1.0); + return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0); } -`,vue="return 1.0 / (1.0 + exp(-1.0 * a));",wue="return sign(a);",kue="return sin(a);",Iue=` +`,$ue="return 1.0 / (1.0 + exp(-1.0 * a));",Fue="return sign(a);",Due="return sin(a);",Oue=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,Sue=` +`,zue=` let epsilon = 1.1920928955078125e-7; let threshold = log(epsilon) + 2.0; @@ -5421,31 +5421,31 @@ return a / b;`,lJ=` } else { return log(exp_a + 1.0); } -`,Cue="return sqrt(a);",Tue="return a * a;",Nue=` +`,Lue="return sqrt(a);",Wue="return a * a;",Bue=` if (isnan(a)) { return a; } return select(uniforms.stepAlpha, 1.0, a > 0.0); -`,Rue="return tan(a);",Eue=` +`,Vue="return tan(a);",Uue=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,Mue="return f32(i32((a)));";function Os(e,t){switch(e){case le.ABS:return Ble;case le.ACOS:return Vle;case le.ACOSH:return Ule;case le.ASIN:return Gle;case le.ASINH:return Hle;case le.ATAN:return jle;case le.ATANH:return qle;case le.COS:return Kle;case le.COSH:return Yle;case le.CEIL:return Xle;case le.ELU:return t?Qle:Jle;case le.ERF:return eue;case le.EXP:return tue;case le.EXPM1:return Zle;case le.FLOOR:return aue;case le.IS_FINITE:return nue;case le.IS_INF:return rue;case le.IS_NAN:return sue;case le.LINEAR:return iue;case le.LOG:return oue;case le.LOG1P:return lue;case le.LOGICAL_NOT:return uue;case le.NEG:return due;case le.LEAKYRELU:return t?cue:pue;case le.RECIPROCAL:return hue;case le.RELU:return t?yue:mue;case le.RELU6:return t?gue:fue;case le.ROUND:return xue;case le.RSQRT:return Aue;case le.SELU:return bue;case le.SIGMOID:return vue;case le.SIGN:return wue;case le.SIN:return kue;case le.SINH:return Iue;case le.SOFTPLUS:return Sue;case le.SQRT:return Cue;case le.SQUARE:return Tue;case le.STEP:return Nue;case le.TAN:return Rue;case le.TANH:return Eue;case le.TO_INT:return Mue;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=Os(le.LINEAR);else if(e==="relu")r=Os(le.RELU,a);else if(e==="elu")r=Os(le.ELU,a);else if(e==="relu6")r=Os(le.RELU6,a);else if(e==="prelu")r=G3(Pe.PRELU,a);else if(e==="sigmoid")r=Os(le.SIGMOID,a);else if(e==="leakyrelu")r=Os(le.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Ke(a?4:1),i="";return t?i=` +`,Gue="return f32(i32((a)));";function Ls(e,t){switch(e){case le.ABS:return eue;case le.ACOS:return tue;case le.ACOSH:return aue;case le.ASIN:return nue;case le.ASINH:return rue;case le.ATAN:return sue;case le.ATANH:return iue;case le.COS:return lue;case le.COSH:return uue;case le.CEIL:return oue;case le.ELU:return t?cue:pue;case le.ERF:return hue;case le.EXP:return mue;case le.EXPM1:return due;case le.FLOOR:return fue;case le.IS_FINITE:return gue;case le.IS_INF:return yue;case le.IS_NAN:return xue;case le.LINEAR:return Aue;case le.LOG:return bue;case le.LOG1P:return vue;case le.LOGICAL_NOT:return wue;case le.NEG:return kue;case le.LEAKYRELU:return t?Sue:Iue;case le.RECIPROCAL:return Cue;case le.RELU:return t?Eue:Tue;case le.RELU6:return t?Rue:Nue;case le.ROUND:return Mue;case le.RSQRT:return Pue;case le.SELU:return _ue;case le.SIGMOID:return $ue;case le.SIGN:return Fue;case le.SIN:return Due;case le.SINH:return Oue;case le.SOFTPLUS:return zue;case le.SQRT:return Lue;case le.SQUARE:return Wue;case le.STEP:return Bue;case le.TAN:return Vue;case le.TANH:return Uue;case le.TO_INT:return Gue;default:throw new Error(`BinaryType ${e} is not implemented!`)}}function Pr(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=Ls(le.LINEAR);else if(e==="relu")r=Ls(le.RELU,a);else if(e==="elu")r=Ls(le.ELU,a);else if(e==="relu6")r=Ls(le.RELU6,a);else if(e==="prelu")r=X3(_e.PRELU,a);else if(e==="sigmoid")r=Ls(le.SIGMOID,a);else if(e==="leakyrelu")r=Ls(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} }`:i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { ${r} - }`,i}function rl(e,t){return` + }`,i}function sl(e,t){return` ${e?"value = value + getBiasByOutputCoords(coords);":""} ${t?"value = activation(value, coords);":""} - `}function hk(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 Ck(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` - fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ke(s)} { - var value = ${Ke(s)}(0.0); + fn mm_readA(batch: i32, row: i32, col: i32) -> ${Xe(s)} { + var value = ${Xe(s)}(0.0); ${a&&r?i:` ${e?"if(row < uniforms.dimAOuter && col < uniforms.dimInner)":"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} { @@ -5455,23 +5455,23 @@ return a / b;`,lJ=` return value; } - fn mm_readB(batch: i32, row: i32, col: i32) -> ${Ke(s)} { - var value = ${Ke(s)}(0.0); + fn mm_readB(batch: i32, row: i32, col: i32) -> ${Xe(s)} { + var value = ${Xe(s)}(0.0); ${o} return value; } - `}function H3(e,t,a,n,r=!1,s=!1,i=!1,o=1){return` - ${hk(a,n,r,s,i,o)} - fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ke(o)}) { + `}function K3(e,t,a,n,r=!1,s=!1,i=!1,o=1){return` + ${Ck(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)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${rl(e,t)} + ${sl(e,t)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var _ue=(e,t)=>e?` + `}var Hue=(e,t)=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${t}); @@ -5479,7 +5479,7 @@ return a / b;`,lJ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRow + innerRow, kStart + inputCol * ${t}); - `,Pue=(e,t,a,n)=>{if(e)return` + `,jue=(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]; @@ -5493,7 +5493,7 @@ return a / b;`,lJ=` let ACached = mm_Asub[tileRow + i][k]; ${s} } - }`}};function d0(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,p=a?n:o,c=u/t[0],d=n/t[1],h=e[1],m=e[0];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. + }`}};function u0(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,p=a?n:o,c=u/t[0],d=n/t[1],h=e[1],m=e[0];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. Otherwise, innerElementSize ${c} must be 3 or 4. tileAWidth ${u} must be divisible by workgroupSize[0]${t[0]}. tileInner ${n} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${e[0]} must be 4.`),` var mm_Asub : array, ${u/c}>, ${p}>; @@ -5523,7 +5523,7 @@ return a / b;`,lJ=` for (var innerRow = 0; innerRow < ${h}; innerRow++) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${_ue(a,c)} + ${Hue(a,c)} } // Load one tile of B into local memory. @@ -5536,14 +5536,14 @@ return a / b;`,lJ=` workgroupBarrier(); // Compute acc values for a single thread. - ${Pue(a,c,h,n)} + ${jue(a,c,h,n)} workgroupBarrier(); } for (var innerRow = 0; innerRow < ${h}; innerRow++) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var Y5=e=>e?` + }`}var aA=e=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -5551,7 +5551,7 @@ return a / b;`,lJ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRowStart + inputRow, kStart + inputCol); - `,$ue=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?` + `,que=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function d0(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;`,lJ=` // 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]}) { - ${Y5(a)} + ${aA(a)} } } // Load one tile of B into local memory. @@ -5617,7 +5617,7 @@ return a / b;`,lJ=` for (var innerCol = 0; innerCol < ${h}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${Y5(a)} + ${aA(a)} } } @@ -5642,7 +5642,7 @@ return a / b;`,lJ=` } for (var innerRow = 0; innerRow < ${f}; innerRow++) { - ${$ue(a)} + ${que(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;`,lJ=` } ${y} } - `}var Fue=e=>e?` + `}var Xue=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;`,lJ=` mm_readA(batchA, globalRow, colA + 1), mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) - `;function Due(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 Kue(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;`,lJ=` 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(${Fue(t)}); + mm_Asub[tileCol] = vec4(${Xue(t)}); workgroupBarrier(); // Compute acc values for a single thread. @@ -5729,11 +5729,11 @@ return a / b;`,lJ=` mm_write(batch, globalRow, globalCol, acc); } - `}var Oue=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=ck(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)} - ${H3(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?Due(this.workgroupSize,this.transposeA):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} - `}};function zue(e){return` + `}var Yue=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=Ik(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` + ${Pr(this.activation,this.hasPreluActivationWeights,this.isVec4)} + ${K3(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?u0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Kue(this.workgroupSize,this.transposeA):d0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} + `}};function Zue(e){return` var sumValues : array; ${ue()} { let coords = getOutputCoords(); @@ -5766,11 +5766,11 @@ return a / b;`,lJ=` mm_write(batch, row, col, sum); } } - `}var Lue=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)} - ${H3(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${zue(this.workgroupSize[0])} - `}};function Wue(e){let t=e[1],a=e[0],n=t>a?t:a;return` + `}var Jue=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` + ${Pr(this.activation,this.hasPreluActivationWeights)} + ${K3(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${Zue(this.workgroupSize[0])} + `}};function Que(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,44 +5822,44 @@ return a / b;`,lJ=` mm_write(batch, globalRow, globalCol, acc); } - `}var Bue=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)} - ${H3(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${Wue(this.workgroupSize)} - `}},Vue=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` - ${hk(!1,this.transposeB,!1,!1,!1,e)} - fn mm_write(batch: i32, row : i32, col : i32, value : ${Ke(e)}) { + `}var ede=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` + ${Pr(this.activation,this.hasPreluActivationWeights)} + ${K3(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${Que(this.workgroupSize)} + `}},tde=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` + ${Ck(!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); let flatIndex = getOutputIndexFromCoords(coords); // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${e}; i = i + 1) { - ${ms("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} + ${gs("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} } } } - ${e===4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},Uue=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)} + ${e===4?u0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):d0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},ade=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` + ${Pr(this.activation,this.hasPreluActivationWeights)} ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${rl(this.addBias,this.activation)} + ${sl(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}},Gue=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` + `}},nde=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 Va(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 Gue(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var Hue={kernelName:yu,backendName:"webgpu",kernelFunc:Va};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 jue={kernelName:Tu,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=Qo.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),P=[I,T],E=[{type:"int32",data:[h]},{type:"int32",data:[m]},{type:"int32",data:[c]}],C,_,O=[M,h,m],B=W().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(B<0){let U=W().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?B=Dn.MatMulReduceProgram:M===1&&d>=2e3?B=Dn.MatMulSplitKProgram:B=Dn.MatMulSmallOutputSizeProgram:B=Dn.MatMulPackedProgram}switch(B){case Dn.MatMulReduceProgram:C=new Lue(O,a,n,s,l,i);break;case Dn.MatMulSplitKProgram:{if(_=Va({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),C=new Vue(O,d,a,n),s||l){_=r.runWebGPUProgram(C,P,e.dtype,E,_);let G=new Uue(_.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:C=new Bue(b,w,O,a,n,s,l,i);break;case Dn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();C=new Oue(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${B}.`)}s&&P.push(s),i&&P.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),C.uniforms+=" alpha : f32,"),_=r.runWebGPUProgram(C,P,e.dtype,E,_);let F=ke({inputs:{x:_},backend:r,attrs:{shape:A}});N.push(_);for(let U of N)r.disposeData(U.dataId);return F}function que(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 Xue={kernelName:Kr,backendName:"webgpu",kernelFunc:que},Z5=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=S.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 nde(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var rde={kernelName:yu,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 sde={kernelName:Tu,backendName:"webgpu",kernelFunc:ke};function p0({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=el.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),P=[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 Jue(O,a,n,s,l,i);break;case Dn.MatMulSplitKProgram:{if(_=Wa({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),S=new tde(O,d,a,n),s||l){_=r.runWebGPUProgram(S,P,e.dtype,E,_);let G=new ade(_.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 ede(b,w,O,a,n,s,l,i);break;case Dn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();S=new Yue(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${W}.`)}s&&P.push(s),i&&P.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),S.uniforms+=" alpha : f32,"),_=r.runWebGPUProgram(S,P,e.dtype,E,_);let $=ke({inputs:{x:_},backend:r,attrs:{shape:A}});N.push(_);for(let U of N)r.disposeData(U.dataId);return $}function ide(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 p0({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var ode={kernelName:Yr,backendName:"webgpu",kernelFunc:ide},nA=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 { - ${G3(this.op,!1)} + ${X3(this.op,!1)} } ${ue("index")} { @@ -5871,9 +5871,9 @@ return a / b;`,lJ=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}},Ch=class{constructor(e,t,a){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=S.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?a[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,r=a.length>0&&a[a.length-1]%4===0;n&&r?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(v.isScalarShape(a)||a[a.length-1]===1)||r&&(v.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=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",a=` + `}},Ch=class{constructor(e,t,a){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?a[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,r=a.length>0&&a[a.length-1]%4===0;n&&r?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(v.isScalarShape(a)||a[a.length-1]===1)||r&&(v.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=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",a=` fn binaryOperation(a : ${t}, b : ${t}) -> ${t} { - ${G3(this.op,this.outputComponent===4)} + ${X3(this.op,this.outputComponent===4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",r=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; @@ -5904,9 +5904,9 @@ return a / b;`,lJ=` setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function an(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var Kue={kernelName:Gi,backendName:"webgpu",kernelFunc:an};function sl(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=an({inputs:{x:n},backend:a}),l=an({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Yue={kernelName:pp,backendName:"webgpu",kernelFunc:sl},Qu=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 en(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var lde={kernelName:Hi,backendName:"webgpu",kernelFunc:en};function il(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=en({inputs:{x:n},backend:a}),l=en({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var ude={kernelName:up,backendName:"webgpu",kernelFunc:il},Ju=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 { - ${Os(this.op,!1)} + ${Ls(this.op,!1)} } ${ue("index")} { if (index < uniforms.size) { @@ -5914,7 +5914,7 @@ return a / b;`,lJ=` 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 Qu(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 Ch(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],pa(y.dtype,x.dtype))});else{let g=new Z5(Pe.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new Z5(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=sl({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"?S.fromUint8ToStringArray(c):c,m=i.dtype==="string"?S.fromUint8ToStringArray(d):d,[f,g]=t(i.shape,o.shape,h,m,u);return l.makeTensorInfo(g,u,f)}let p=new Ch(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:Zue,castImpl:Jue,ceilImpl:Que,concatImpl:ede,equalImpl:tde,expImpl:ade,expm1Impl:nde,floorImpl:rde,floorDivImpl:sde,gatherNdImpl:ide,gatherV2Impl:ode,greaterEqualImpl:lde,greaterImpl:ude,lessEqualImpl:dde,lessImpl:pde,logImpl:cde,maxImpl:hde,maximumImpl:mde,minimumImpl:fde,multiplyImpl:gde,negImpl:yde,notEqualImpl:xde,prodImpl:Ade,rangeImpl:bde,rsqrtImpl:vde,scatterImpl:wde,simpleAbsImpl:kde,sliceImpl:Ide,stridedSliceImpl:Sde,stringNGramsImpl:Cde,subImpl:Tde,tileImpl:Nde,topKImpl:Rde,transposeImpl:Ede,uniqueImpl:q3e}=e0,Mde=at({opType:le.ABS,cpuKernelImpl:kde}),_de={kernelName:ru,backendName:"webgpu",kernelFunc:Mde},Pde=at({opType:le.ACOS}),$de={kernelName:ri,backendName:"webgpu",kernelFunc:Pde},Fde=at({opType:le.ACOSH}),Dde={kernelName:si,backendName:"webgpu",kernelFunc:Fde},Ode=ta({opType:Pe.ADD,cpuKernelImpl:Zue,supportsComplex:!0}),zde={kernelName:rs,backendName:"webgpu",kernelFunc:Ode},Lde=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 Ju(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ea({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!==_e.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 Ch(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],da(y.dtype,x.dtype))});else{let g=new nA(_e.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new nA(_e.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=il({inputs:{real:h,imag:m},backend:l});return l.disposeData(h.dataId),l.disposeData(m.dataId),f}let u=n||da(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 Ch(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:dde,castImpl:pde,ceilImpl:cde,concatImpl:hde,equalImpl:mde,expImpl:fde,expm1Impl:gde,floorImpl:yde,floorDivImpl:xde,gatherNdImpl:Ade,gatherV2Impl:bde,greaterEqualImpl:vde,greaterImpl:wde,lessEqualImpl:kde,lessImpl:Ide,logImpl:Sde,maxImpl:Cde,maximumImpl:Tde,minimumImpl:Nde,multiplyImpl:Rde,negImpl:Ede,notEqualImpl:Mde,prodImpl:Pde,rangeImpl:_de,rsqrtImpl:$de,scatterImpl:Fde,simpleAbsImpl:Dde,sliceImpl:Ode,stridedSliceImpl:zde,stringNGramsImpl:Lde,subImpl:Wde,tileImpl:Bde,topKImpl:Vde,transposeImpl:Ude,uniqueImpl:iye}=e0,Gde=at({opType:le.ABS,cpuKernelImpl:Dde}),Hde={kernelName:ru,backendName:"webgpu",kernelFunc:Gde},jde=at({opType:le.ACOS}),qde={kernelName:si,backendName:"webgpu",kernelFunc:jde},Xde=at({opType:le.ACOSH}),Kde={kernelName:ii,backendName:"webgpu",kernelFunc:Xde},Yde=ea({opType:_e.ADD,cpuKernelImpl:dde,supportsComplex:!0}),Zde={kernelName:is,backendName:"webgpu",kernelFunc:Yde},Jde=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;`,lJ=` } } } - `}};function Wde(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return an({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 Lde(s);return a.runWebGPUProgram(i,n,r)}var Bde={kernelName:ii,backendName:"webgpu",kernelFunc:Wde},Vde=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 Qde(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return en({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>da(o,l)),s=n.map(o=>o.shape),i=new Jde(s);return a.runWebGPUProgram(i,n,r)}var epe={kernelName:oi,backendName:"webgpu",kernelFunc:Qde},tpe=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;`,lJ=` [localId.y]); } } - `}},Ude=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 Tk(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;`,lJ=` ${n} } } - `}},jde={mean:"float32",all:"bool",any:"bool"};function il(e,t,a,n,r){let s=e.shape.length,i=[],o=v.parseAxisParam(t,e.shape),l=o,u=S.getAxesPermutation(l,s),p=e;u!=null&&(p=ar({inputs:{x:e},attrs:{perm:u},backend:r}),l=S.getInnerMostAxes(l.length,s),i.push(p)),S.assertAxesAreInnerMostDims(n,l,s);let[c,d]=S.computeOutAndReduceShapes(p.shape,l),h=c;a&&(h=S.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=hde(f,v.sizeFromShape(d),h,e.dtype);m=r.makeTensorInfo(h,e.dtype,g);break;case"prod":let{outVals:y,outShape:x,outDtype:A}=Ade(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=jde[n]||Pp(e.dtype),A=[{type:"int32",data:[f]}],b=new Hde(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 qde(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return il(r,i,s,"all",a)}var Xde={kernelName:oi,backendName:"webgpu",kernelFunc:qde};function Kde(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return il(r,i,s,"any",a)}var Yde={kernelName:li,backendName:"webgpu",kernelFunc:Kde},fk=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]=S.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.${Sr(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 ipe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ol(r,i,s,"all",a)}var ope={kernelName:li,backendName:"webgpu",kernelFunc:ipe};function lpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ol(r,i,s,"any",a)}var upe={kernelName:ui,backendName:"webgpu",kernelFunc:lpe},Nk=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;`,lJ=` setOutputAtIndexI32(index, bestIndex); } } - `}};function Zde(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=S.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=ar({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=S.getInnerMostAxes(i.length,l.shape.length)),S.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=new fk(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 Jde={kernelName:su,backendName:"webgpu",kernelFunc:Zde};function Qde(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=S.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=ar({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=S.getInnerMostAxes(i.length,l.shape.length)),S.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=new fk(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 epe={kernelName:iu,backendName:"webgpu",kernelFunc:Qde},tpe=at({opType:le.ASIN}),ape={kernelName:ui,backendName:"webgpu",kernelFunc:tpe},npe=at({opType:le.ASINH}),rpe={kernelName:di,backendName:"webgpu",kernelFunc:npe},spe=at({opType:le.ATAN}),ipe={kernelName:pi,backendName:"webgpu",kernelFunc:spe},ope=ta({opType:Pe.ATAN2}),lpe={kernelName:hi,backendName:"webgpu",kernelFunc:ope},upe=at({opType:le.ATANH}),dpe={kernelName:ci,backendName:"webgpu",kernelFunc:upe},ppe=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 dpe(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=ar({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 Nk(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 ppe={kernelName:su,backendName:"webgpu",kernelFunc:dpe};function cpe(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=ar({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 Nk(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 hpe={kernelName:iu,backendName:"webgpu",kernelFunc:cpe},mpe=at({opType:le.ASIN}),fpe={kernelName:di,backendName:"webgpu",kernelFunc:mpe},gpe=at({opType:le.ASINH}),ype={kernelName:pi,backendName:"webgpu",kernelFunc:gpe},xpe=at({opType:le.ATAN}),Ape={kernelName:ci,backendName:"webgpu",kernelFunc:xpe},bpe=ea({opType:_e.ATAN2}),vpe={kernelName:mi,backendName:"webgpu",kernelFunc:bpe},wpe=at({opType:le.ATANH}),kpe={kernelName:hi,backendName:"webgpu",kernelFunc:wpe},Ipe=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); @@ -6085,7 +6085,7 @@ return a / b;`,lJ=` setOutputAtIndex(index, value); } } - `}},rp=class{constructor(e,t,a=!1,n=!1,r=!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"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool2D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},ap=class{constructor(e,t,a=!1,n=!1,r=!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"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool2D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6126,7 +6126,7 @@ return a / b;`,lJ=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}},j3=class{constructor(e,t,a=!1,n=!1,r=!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"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool3D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},Y3=class{constructor(e,t,a=!1,n=!1,r=!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"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool3D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6175,7 +6175,7 @@ return a / b;`,lJ=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}};function gk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return il(r,s,i,"max",a)}var cpe={kernelName:ro,backendName:"webgpu",kernelFunc:gk};function yk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return il(r,i,s,"mean",a)}var hpe={kernelName:oo,backendName:"webgpu",kernelFunc:yk};function xk(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return an({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=yk({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=gk({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 ppe(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 mpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=S.computePool2DInfo(r.shape,s,i,u,o,l);return xk(r,p,"avg",a)}var fpe={kernelName:mi,backendName:"webgpu",kernelFunc:mpe};function gpe(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=S.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new j3(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 ype={kernelName:ou,backendName:"webgpu",kernelFunc:gpe},xpe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function Rk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return ol(r,s,i,"max",a)}var Spe={kernelName:so,backendName:"webgpu",kernelFunc:Rk};function Ek(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ol(r,i,s,"mean",a)}var Cpe={kernelName:lo,backendName:"webgpu",kernelFunc:Ek};function Mk(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return en({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=Ek({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=Rk({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 Ipe(t):(a==="avg"?r=new ap(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new ap(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 Tpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=C.computePool2DInfo(r.shape,s,i,u,o,l);return Mk(r,p,"avg",a)}var Npe={kernelName:fi,backendName:"webgpu",kernelFunc:Tpe};function Rpe(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 Y3(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 Epe={kernelName:ou,backendName:"webgpu",kernelFunc:Rpe},Mpe=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},Ape=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},Ppe=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}};function bpe(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=S.computePool3DInfo(i.shape,o,l,1,u,p),d=new Ape(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 vpe={kernelName:dp,backendName:"webgpu",kernelFunc:bpe};function wpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;U3([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=S.computePool2DInfo(i.shape,o,l,1,u),c=new xpe(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 kpe={kernelName:up,backendName:"webgpu",kernelFunc:wpe};function Ipe(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 Spe={kernelName:fi,backendName:"webgpu",kernelFunc:Ipe},Cpe=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 : ${$t(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=$t(this.rank),t=Tpe(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.${j1[r]} = uniforms.start.${Sr(r)} + coords.${j1[r]};`),` + `}};function _pe(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 Ppe(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 $pe={kernelName:lp,backendName:"webgpu",kernelFunc:_pe};function Fpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;j3([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new Mpe(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 Dpe={kernelName:op,backendName:"webgpu",kernelFunc:Fpe};function Ope(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return p0({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var zpe={kernelName:gi,backendName:"webgpu",kernelFunc:Ope},Lpe=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 : ${_t(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=_t(this.rank),t=Wpe(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.${q1[r]} = uniforms.start.${Ir(r)} + coords.${q1[r]};`),` ${ue("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; @@ -6273,16 +6273,16 @@ return a / b;`,lJ=` setOutputAtIndex(index, getSource(${t})); } } - `}},j1=["x","y","z","w","u","v"];function Tpe(e){if(e===1)return"sourceLoc";if(e<=6)return j1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function ed(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=Ide(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 Cpe(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Npe={kernelName:Mu,backendName:"webgpu",kernelFunc:ed},Rpe=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=S.getReshaped(r.shape,s,o),u=S.getPermuted(l.length,s.length),p=S.getReshapedPermuted(r.shape,s,o),c=S.getSliceBeginCoords(i,s.length),d=S.getSliceSize(p,i,s.length),h=[],m=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),f=ar({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({inputs:{x:f},backend:a,attrs:{shape:p}}),y=ed({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},Epe={kernelName:lu,backendName:"webgpu",kernelFunc:Rpe},Mpe=` + `}},q1=["x","y","z","w","u","v"];function Wpe(e){if(e===1)return"sourceLoc";if(e<=6)return q1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}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),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),d=Ode(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 Lpe(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Bpe={kernelName:Mu,backendName:"webgpu",kernelFunc:Qu},Vpe=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=ar({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({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.disposeData(x.dataId)),y},Upe={kernelName:lu,backendName:"webgpu",kernelFunc:Vpe},Gpe=` fn bincount_write(index: i32, value: f32) { - ${ms("&result[index]","value","float32")} + ${gs("&result[index]","value","float32")} } -`,_pe=` +`,Hpe=` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } -`,Ak=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?_pe:Mpe} +`,Pk=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?Hpe:Gpe} ${ue("index")} { ${this.rank===1?`if (index < uniforms.xShape) { let indexVal = i32(getX(index)); @@ -6299,7 +6299,7 @@ return a / b;`,lJ=` } }`} } - `}};function Ppe(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=Va({backend:a,attrs:{shape:u,value:0,dtype:p}}),d=new Ak([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(d,m,p,h,c)}var $pe={kernelName:gi,backendName:"webgpu",kernelFunc:Ppe},Fpe=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 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 Pk([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(d,m,p,h,c)}var qpe={kernelName:yi,backendName:"webgpu",kernelFunc:jpe},Xpe=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;`,lJ=` } } } - `}};function Dpe(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=S.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 Fpe(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var Ope={kernelName:du,backendName:"webgpu",kernelFunc:Dpe},bk=ta({opType:Pe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:xde}),zpe={kernelName:fo,backendName:"webgpu",kernelFunc:bk};function ec(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return an({inputs:{x:r.complexTensorInfos.real},backend:a})}var Lpe={kernelName:kp,backendName:"webgpu",kernelFunc:ec};function Wpe(e,t){let a=new Qu(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function q1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return an({inputs:{x:r},backend:a});let i=yn(r.shape),o=q1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=sl({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=ec({inputs:{input:r},backend:a}),o=q1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=an({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]=Jue(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return Wpe(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=bk({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 Bpe={kernelName:yi,backendName:"webgpu",kernelFunc:q1},Vpe=at({opType:le.CEIL,cpuKernelImpl:Que}),Upe={kernelName:xi,backendName:"webgpu",kernelFunc:Vpe},Gpe=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 Kpe(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 Xpe(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var Ype={kernelName:du,backendName:"webgpu",kernelFunc:Kpe},_k=ea({opType:_e.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Mde}),Zpe={kernelName:go,backendName:"webgpu",kernelFunc:_k};function Qp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.real},backend:a})}var Jpe={kernelName:vp,backendName:"webgpu",kernelFunc:Qp};function Qpe(e,t){let a=new Ju(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function X1(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=gn(r.shape),o=X1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=il({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=Qp({inputs:{input:r},backend:a}),o=X1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),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.tensorMap.get(r.dataId).values,[o,l,u]=pde(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return Qpe(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=_k({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 ece={kernelName:xi,backendName:"webgpu",kernelFunc:X1},tce=at({opType:le.CEIL,cpuKernelImpl:cde}),ace={kernelName:Ai,backendName:"webgpu",kernelFunc:tce},nce=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;`,lJ=` setOutputAtIndex(index, clampedValue); } } - `}},Hpe=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` + `}},rce=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;`,lJ=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function jpe(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 Gpe(r.shape):o=new Hpe(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var qpe={kernelName:ss,backendName:"webgpu",kernelFunc:jpe},Xpe=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 sce(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 nce(r.shape):o=new rce(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var ice={kernelName:os,backendName:"webgpu",kernelFunc:sce},oce=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;`,lJ=` setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0)); } } - `}};function J5(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function Kpe(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.tensorMap.get(n.dataId),s=new Xpe(n.shape),i=[J5(n,r.complexTensorInfos.real),J5(n,r.complexTensorInfos.imag)];return a.runWebGPUProgram(s,i,i[0].dtype)}var Ype={kernelName:cp,backendName:"webgpu",kernelFunc:Kpe},Zpe=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=S.computeOutShape(e,1),this.variableNames=e.map((t,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;nec({inputs:{input:A},backend:a})),f=e.map(A=>h0({inputs:{input:A},backend:a})),g=_d(m,t,a),y=_d(f,t,a),x=sl({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=S.computeOutShape(m.map(w=>w.shape),1),y=m[0].shape[0]===1,x=ede(f,g,n,y),A=S.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 Zpe(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 Qpe(e,t,a){let n=S.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 vk(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);S.assertParamsConsistent(i,s);let o=S.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?an({inputs:{x:l[0]},backend:a}):_d(l,s,a)}var ece={kernelName:pu,backendName:"webgpu",kernelFunc:vk};function tce(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 c0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.imag},backend:a})}var pce={kernelName:xp,backendName:"webgpu",kernelFunc:c0};function Md(e,t,a){let n=e[0].dtype;if(n==="complex64"){let m=e.map(A=>Qp({inputs:{input:A},backend:a})),f=e.map(A=>c0({inputs:{input:A},backend:a})),g=Md(m,t,a),y=Md(f,t,a),x=il({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=hde(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 dce(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 cce(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 $k(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 hce={kernelName:pu,backendName:"webgpu",kernelFunc:$k};function mce(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); @@ -6398,7 +6398,7 @@ return a / b;`,lJ=` let xRow = outRow * uniforms.strides[0] + uniforms.dilations[0] * WRow - uniforms.pads[0]; let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * WCol - uniforms.pads[1]; let xCh = ${y} % inChannels; - var resData = ${Ke(o)}(0.0); + var resData = ${Xe(o)}(0.0); // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. if (xRow >= 0 && xRow < ${m} && xCol >= 0 && xCol < ${f}) { @@ -6411,13 +6411,13 @@ return a / b;`,lJ=` if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${x} } - return ${Ke(o)}(0.0);`:n&&a?` + return ${Xe(o)}(0.0);`:n&&a?` ${x}`:` if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${x} } - return ${Ke(o)}(0.0);`,b=`${c(l)}`,w=Ke(u),I=Ke(e?o:l),T=Ke(e?l:o);return` - ${_r(s,i,u===4,4)} + return ${Xe(o)}(0.0);`,b=`${c(l)}`,w=Xe(u),I=Xe(e?o:l),T=Xe(e?l:o);return` + ${Pr(s,i,u===4,4)} fn mm_readA(batch: i32, row : i32, col : i32) -> ${I} { ${e?A:b} } @@ -6432,14 +6432,14 @@ return a / b;`,lJ=` var value = valueIn; let outWidth = ${e?"uniforms.outShape[2]":"uniforms.outShape[3]"}; ${h} - ${rl(r,s)} + ${sl(r,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var ace=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=W3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=B3(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` - ${tce(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var fce=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=U3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=G3(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?u0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):d0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${mce(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}},nce=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)} + `}},gce=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` + ${Pr(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -6460,7 +6460,7 @@ return a / b;`,lJ=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${rl(this.addBias,this.activation)} + ${sl(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -6484,7 +6484,7 @@ return a / b;`,lJ=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}},rce=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, + `}},yce=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;`,lJ=` setOutputAtIndex(index, value); } } - `}};function Th(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=Th(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),d.push(s))}if(r!=null){let y=Th(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 ice({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 rce(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),P=[];P.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if(P.push(E),s!=null){let O=Th(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),P.push(s))}if(r!=null){let O=Th(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),P.push(r))}let C=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:C},backend:n,attrs:{shape:a.outShape}});P.push(C);for(let O of P)n.disposeData(O.dataId);return _}function wk({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=r!=null,u=s!=null,p=a.dataFormat==="channelsLast",c=p&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",d=W().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!d&&(c||a.filterHeight===1&&a.filterWidth===1&&a.dilationHeight===1&&a.dilationWidth===1&&a.strideHeight===1&&a.strideWidth===1&&(a.padInfo.type==="SAME"||a.padInfo.type==="VALID")))return sce({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=W().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),m=h>-1?h:n.thresholdToIncreaseWorkgroups,f=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(W().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||f<=m)return ice({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 nce(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 ace(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 oce(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=S.convertConv2DDataFormat(l),d=S.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c);return wk({x:r,filter:s,convInfo:d,backend:n})}var lce={kernelName:Ai,backendName:"webgpu",kernelFunc:oce},uce=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 Th(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 xce({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=Th(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),d.push(s))}if(r!=null){let y=Th(r.shape,l);y!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:y}}),d.push(r))}let f=p0({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 Ace({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 yce(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),P=[];P.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if(P.push(E),s!=null){let O=Th(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),P.push(s))}if(r!=null){let O=Th(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),P.push(r))}let S=p0({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}});P.push(S);for(let O of P)n.disposeData(O.dataId);return _}function Fk({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 xce({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 Ace({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 gce(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 fce(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 bce(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 Fk({x:r,filter:s,convInfo:d,backend:n})}var vce={kernelName:bi,backendName:"webgpu",kernelFunc:bce},wce=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},dce=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` + `}},kce=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},pce=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, + `}},Ice=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},cce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, + `}},Sce=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}};function hce(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=S.convertConv2DDataFormat(l),d=S.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new dce(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 mce={kernelName:hp,backendName:"webgpu",kernelFunc:hce};function fce(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};function Cce(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 kce(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 Tce={kernelName:pp,backendName:"webgpu",kernelFunc:Cce};function Nce(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); @@ -6806,10 +6806,10 @@ return a / b;`,lJ=` let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.strides[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${Ke(e)}(0.0); + return ${Xe(e)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${Ke(e)}(0.0); + return ${Xe(e)}(0.0); } let coord = vec4( batch, @@ -6818,12 +6818,12 @@ return a / b;`,lJ=` col % uniforms.outBackprop[3]); return x[getIndexFromCoords4D(coord, uniforms.xShape)/${e}];`} } - return ${Ke(e)}(0.0);`;return` - fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ke(e)} { + return ${Xe(e)}(0.0);`;return` + fn mm_readA(batch: i32, row : i32, col : i32) -> ${Xe(e)} { ${a} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ke(e)} { + fn mm_readB(batch: i32, row : i32, col : i32) -> ${Xe(e)} { let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); let coordY = uniforms.filterDims.y - 1 - @@ -6834,10 +6834,10 @@ return a / b;`,lJ=` let coord = vec4(coordX, coordY, col, rowInner); ${t(e)} } - return ${Ke(e)}(0.0); + return ${Xe(e)}(0.0); } - fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ke(e)}) { + fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Xe(e)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { var value = valueInput; let outCoord = vec4( @@ -6847,10 +6847,10 @@ return a / b;`,lJ=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${e}] = value; } - }`}var gce=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=W3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=B3(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)} + }`}var Rce=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=U3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=G3(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?u0(this.elementsPerThread,this.workgroupSize):d0(this.elementsPerThread,this.workgroupSize);return` + ${Nce(this.isVec4?4:1)} ${e} - `}};function yce(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=S.convertConv2DDataFormat(u),d=S.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(W().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||d.dataFormat!=="channelsLast")m=new uce(d);else{m=new gce(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 xce={kernelName:bi,backendName:"webgpu",kernelFunc:yce},Ace=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 Ece(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 wce(d);else{m=new Rce(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 Mce={kernelName:vi,backendName:"webgpu",kernelFunc:Ece},Pce=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;`,lJ=` } setOutputAtIndex(index, dotProd); } - }`}};function bce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=S.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 Ace(u),h=pa(r.dtype,s.dtype);return a.runWebGPUProgram(d,[r,s],h,c)}var vce={kernelName:vi,backendName:"webgpu",kernelFunc:bce};function wce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=S.computeConv3DInfo(r.shape,l,i,1,o),p=new pce(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 kce={kernelName:cu,backendName:"webgpu",kernelFunc:wce};function Ice(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,pad:o,inputShape:l}=n,u=S.computeConv3DInfo(l,s.shape,i,1,o),p=new cce(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 Sce={kernelName:wi,backendName:"webgpu",kernelFunc:Ice},Cce=at({opType:le.COS}),Tce={kernelName:ki,backendName:"webgpu",kernelFunc:Cce},Nce=at({opType:le.COSH}),Rce={kernelName:Ii,backendName:"webgpu",kernelFunc:Nce},Ece=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 _ce(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 Pce(u),h=da(r.dtype,s.dtype);return a.runWebGPUProgram(d,[r,s],h,c)}var $ce={kernelName:wi,backendName:"webgpu",kernelFunc:_ce};function Fce(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 Ice(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 Dce={kernelName:cu,backendName:"webgpu",kernelFunc:Fce};function Oce(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 Sce(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 zce={kernelName:ki,backendName:"webgpu",kernelFunc:Oce},Lce=at({opType:le.COS}),Wce={kernelName:Ii,backendName:"webgpu",kernelFunc:Lce},Bce=at({opType:le.COSH}),Vce={kernelName:Si,backendName:"webgpu",kernelFunc:Bce},Uce=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;`,lJ=` } } } - `}},Mce=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 Ece(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},_ce={kernelName:Ti,backendName:"webgpu",kernelFunc:Mce},sp;(function(e){e.Prod="*",e.Sum="+"})(sp||(sp={}));var Q5=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(${eA(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"),` + `}},Gce=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 Uce(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},Hce={kernelName:Ni,backendName:"webgpu",kernelFunc:Gce},np;(function(e){e.Prod="*",e.Sum="+"})(np||(np={}));var sA=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===np.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${iA(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 = ${tA(e,"coords",this.op)}; + let end = ${oA(e,"coords",this.op)}; var val = ${a}; let pow2 = i32(pow(2.0, uniforms.index)); if (${r}) { let idx = ${s}; - ${tA(e,"coords",this.op)} = idx; - val ${this.op}= getX(${eA(e,"coords",this.op)}); + ${oA(e,"coords",this.op)} = idx; + val ${this.op}= getX(${iA(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function eA(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 tA(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 kk(e,t,a,n,r,s){let i=t.shape.length,o=S.getAxesPermutation([n],i),l=t;o!=null&&(l=ar({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=S.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=an({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new Q5(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 Q5(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=S.getUndoAxesPermutation(o),h=ar({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function Pce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return kk(sp.Prod,r,a,s,i,o)}var $ce={kernelName:Si,backendName:"webgpu",kernelFunc:Pce};function Fce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return kk(sp.Sum,r,a,s,i,o)}var Dce={kernelName:Ci,backendName:"webgpu",kernelFunc:Fce};function Oce(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=Va({backend:a,attrs:{shape:d,value:0,dtype:p}}),m=new Ak(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,p,f,h)}var zce={kernelName:hu,backendName:"webgpu",kernelFunc:Oce},Lce=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 iA(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 oA(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 Dk(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=ar({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=en({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new sA(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 sA(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=ar({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 Dk(np.Prod,r,a,s,i,o)}var qce={kernelName:Ci,backendName:"webgpu",kernelFunc:jce};function Xce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Dk(np.Sum,r,a,s,i,o)}var Kce={kernelName:Ti,backendName:"webgpu",kernelFunc:Xce};function Yce(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 Pk(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,p,f,h)}var Zce={kernelName:hu,backendName:"webgpu",kernelFunc:Yce},Jce=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,8 +7024,8 @@ return a / b;`,lJ=` 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 Wce(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 Lce(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var Bce={kernelName:Ni,backendName:"webgpu",kernelFunc:Wce},Vce=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)} + }`}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 Qce(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 Jce(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var ehe={kernelName:Ri,backendName:"webgpu",kernelFunc:Qce},the=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` + ${Pr(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${a}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -7081,13 +7081,13 @@ return a / b;`,lJ=` value = fma(xVal, wVal, value); } } - ${rl(this.addBias,this.activation)} + ${sl(this.addBias,this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}},Ik=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)} + `}},Ok=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` + ${Pr(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -7136,14 +7136,14 @@ return a / b;`,lJ=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${rl(this.addBias,this.activation)} + ${sl(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}},Sk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, + `}},zk=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)} + ${Pr(this.activation,this.hasPreluActivation,!1,4)} ${ue("index")} { if (index < uniforms.size) { @@ -7204,11 +7204,11 @@ return a / b;`,lJ=` } } } - ${rl(this.addBias,this.activation)} + ${sl(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function Uce(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=S.convertConv2DDataFormat(l),d=u;d==null&&(d=[1,1]);let h=S.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 Vce(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 Ik(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new Sk(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 Gce={kernelName:Ri,backendName:"webgpu",kernelFunc:Uce},Hce=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, + `}};function ahe(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 the(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 Ok(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new zk(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 nhe={kernelName:Ei,backendName:"webgpu",kernelFunc:ahe},rhe=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},jce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, + `}},she=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}};function qce(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=S.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new Hce(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 Xce={kernelName:mp,backendName:"webgpu",kernelFunc:qce};function Kce(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=S.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new jce(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 Yce={kernelName:fp,backendName:"webgpu",kernelFunc:Kce},Zce=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 ihe(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 rhe(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 ohe={kernelName:cp,backendName:"webgpu",kernelFunc:ihe};function lhe(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 she(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 uhe={kernelName:hp,backendName:"webgpu",kernelFunc:lhe},dhe=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;`,lJ=` setOutputAtIndex(index, value); } } - `}};function Jce(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 Zce(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 Qce={kernelName:mu,backendName:"webgpu",kernelFunc:Jce},ehe=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 phe(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 dhe(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 che={kernelName:mu,backendName:"webgpu",kernelFunc:phe},hhe=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;`,lJ=` setOutputAtIndex(index, curVal); } } - `}};function the(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=S.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 ehe(u);return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var ahe={kernelName:Ei,backendName:"webgpu",kernelFunc:the},nhe=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 mhe(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 hhe(u);return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var fhe={kernelName:Mi,backendName:"webgpu",kernelFunc:mhe},ghe=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) { @@ -7368,10 +7368,10 @@ return a / b;`,lJ=` let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${ms("&result[flatIndexIn]","value",this.type)} + ${gs("&result[flatIndexIn]","value",this.type)} } } - `}},rhe=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 + `}},yhe=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) { @@ -7411,10 +7411,10 @@ return a / b;`,lJ=` let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${ms("&result[flatIndexIn]","value",this.type)} + ${gs("&result[flatIndexIn]","value",this.type)} } } - `}};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=S.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=s.dtype,d=new rhe(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=Va({backend:a,attrs:{shape:s.shape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var ihe={kernelName:Ul,backendName:"webgpu",kernelFunc:she};function ohe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=S.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=r.dtype,d=new nhe(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=Va({backend:a,attrs:{shape:p.inShape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var lhe={kernelName:Vl,backendName:"webgpu",kernelFunc:ohe},uhe=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=eu.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 xhe(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 yhe(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 Ahe={kernelName:Hl,backendName:"webgpu",kernelFunc:xhe};function bhe(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 ghe(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 vhe={kernelName:Gl,backendName:"webgpu",kernelFunc:bhe},whe=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=eu.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;`,lJ=` textureStore(outImage, vec2(coords.yx), rgba); } } - `}};function dhe(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 uhe(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 phe={kernelName:gp,backendName:"webgpu",kernelFunc:dhe},Ck=ta({opType:Pe.MUL,cpuKernelImpl:gde,supportsComplex:!0}),che={kernelName:mo,backendName:"webgpu",kernelFunc:Ck};function Tk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return il(r,s,i,"sum",a)}var hhe={kernelName:Bo,backendName:"webgpu",kernelFunc:Tk};function mhe(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=S.decodeEinsumEquation(r,s.length);S.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=S.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=Tk({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:mhe},ghe=at({opType:le.ELU}),yhe={kernelName:_i,backendName:"webgpu",kernelFunc:ghe},xhe=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new Ch(Pe.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},Ahe={kernelName:fu,backendName:"webgpu",kernelFunc:xhe},bhe=ta({opType:Pe.EQUAL,dtype:"bool",cpuKernelImpl:tde}),vhe={kernelName:$i,backendName:"webgpu",kernelFunc:bhe},whe=at({opType:le.ERF}),khe={kernelName:Pi,backendName:"webgpu",kernelFunc:whe},Ihe=at({opType:le.EXP,cpuKernelImpl:ade,dtype:"float32"}),She={kernelName:Fi,backendName:"webgpu",kernelFunc:Ihe};function X1(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 Che={kernelName:gu,backendName:"webgpu",kernelFunc:X1},The=at({opType:le.EXPM1,cpuKernelImpl:nde}),Nhe={kernelName:Di,backendName:"webgpu",kernelFunc:The},aA=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 khe(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 whe(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 Ihe={kernelName:mp,backendName:"webgpu",kernelFunc:khe},Lk=ea({opType:_e.MUL,cpuKernelImpl:Rde,supportsComplex:!0}),She={kernelName:fo,backendName:"webgpu",kernelFunc:Lk};function Wk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ol(r,s,i,"sum",a)}var Che={kernelName:Vo,backendName:"webgpu",kernelFunc:Wk};function The(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=Wk({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 Nhe={kernelName:fp,backendName:"webgpu",kernelFunc:The},Rhe=at({opType:le.ELU}),Ehe={kernelName:_i,backendName:"webgpu",kernelFunc:Rhe},Mhe=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new Ch(_e.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},Phe={kernelName:fu,backendName:"webgpu",kernelFunc:Mhe},_he=ea({opType:_e.EQUAL,dtype:"bool",cpuKernelImpl:mde}),$he={kernelName:Fi,backendName:"webgpu",kernelFunc:_he},Fhe=at({opType:le.ERF}),Dhe={kernelName:$i,backendName:"webgpu",kernelFunc:Fhe},Ohe=at({opType:le.EXP,cpuKernelImpl:fde,dtype:"float32"}),zhe={kernelName:Di,backendName:"webgpu",kernelFunc:Ohe};function K1(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 Lhe={kernelName:gu,backendName:"webgpu",kernelFunc:K1},Whe=at({opType:le.EXPM1,cpuKernelImpl:gde}),Bhe={kernelName:Oi,backendName:"webgpu",kernelFunc:Whe},lA=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;`,lJ=` setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); } } - `}};function Nk(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 aA("real",u),c=new aA("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=sl({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 Rhe(e){let{inputs:t,backend:a}=e,{input:n}=t;return Nk(n,!1,a)}var Ehe={kernelName:xp,backendName:"webgpu",kernelFunc:Rhe},Mhe=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 Bk(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 lA("real",u),c=new lA("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=il({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 Vhe(e){let{inputs:t,backend:a}=e,{input:n}=t;return Bk(n,!1,a)}var Uhe={kernelName:gp,backendName:"webgpu",kernelFunc:Vhe},Ghe=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;`,lJ=` setOutputAtIndex(index, outputValue); } } - `}},_he={kernelName:Oi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Mhe(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Phe=at({opType:le.FLOOR,cpuKernelImpl:rde}),$he={kernelName:zi,backendName:"webgpu",kernelFunc:Phe},Fhe=ta({opType:Pe.FLOOR_DIV,cpuKernelImpl:sde,dtype:"int32"}),Dhe={kernelName:Li,backendName:"webgpu",kernelFunc:Fhe},Ohe=class{constructor(e,t,a=!1){this.pixelsOpType=eu.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` + `}},Hhe={kernelName:zi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Ghe(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},jhe=at({opType:le.FLOOR,cpuKernelImpl:yde}),qhe={kernelName:Li,backendName:"webgpu",kernelFunc:jhe},Xhe=ea({opType:_e.FLOOR_DIV,cpuKernelImpl:xde,dtype:"int32"}),Khe={kernelName:Wi,backendName:"webgpu",kernelFunc:Xhe},Yhe=class{constructor(e,t,a=!1){this.pixelsOpType=eu.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;`,lJ=` } } } - `}},zhe={kernelName:zd,backendName:"webgpu",kernelFunc:Lhe},_l,e1=W().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Lhe(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=!1,m=i||o;if(u||l||m){let x;if(h)x=a.device.importExternalTexture({source:r});else{if(m){let _=W().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(_l==null||_!==e1)&&(e1=_,_l=document.createElement("canvas").getContext("2d",{willReadFrequently:e1})),_l.canvas.width=p,_l.canvas.height=c,_l.drawImage(r,0,0,p,c),r=_l.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,E="rgba8unorm",C=a.textureManager.acquireTexture(d[1],d[0],E,P);a.queue.copyExternalImageToTexture({source:r},{texture:C},[d[1],d[0]]),x=C}let A=v.sizeFromShape(d),b=v.computeStrides(d),w=new Ohe(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))); } } - `}},Bhe={kernelName:Wi,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 Whe(n.shape,i.shape,o.shape,c,d),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,m)}};function Vhe(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=S.convertConv2DDataFormat(p),g=S.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f);return wk({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var Uhe={kernelName:Yr,backendName:"webgpu",kernelFunc:Vhe};function Ghe(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(S.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let f=S.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 Ik(f,y,d,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new Sk(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 Hhe={kernelName:Zr,backendName:"webgpu",kernelFunc:Ghe},jhe=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 : ${$t(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + `}},e0e={kernelName:Bi,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 Qhe(n.shape,i.shape,o.shape,c,d),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,m)}};function t0e(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 Fk({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var a0e={kernelName:Zr,backendName:"webgpu",kernelFunc:t0e};function n0e(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 Ok(f,y,d,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new zk(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 r0e={kernelName:Jr,backendName:"webgpu",kernelFunc:n0e},s0e=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 : ${_t(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;`,lJ=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function qhe(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]=S.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=ide(x,A,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new jhe(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 Xhe={kernelName:Bi,backendName:"webgpu",kernelFunc:qhe},Khe=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=Yhe(this.aShape);return` + `}};function i0e(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=Ade(x,A,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new s0e(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 o0e={kernelName:Vi,backendName:"webgpu",kernelFunc:i0e},l0e=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=u0e(this.aShape);return` ${ue("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); @@ -7527,13 +7527,13 @@ return a / b;`,lJ=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function Yhe(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 Khe(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 Zhe={kernelName:xu,backendName:"webgpu",kernelFunc:Rk},Jhe=ta({opType:Pe.GREATER,cpuKernelImpl:ude,dtype:"bool"}),Qhe={kernelName:Vi,backendName:"webgpu",kernelFunc:Jhe},e0e=ta({opType:Pe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:lde}),t0e={kernelName:Ui,backendName:"webgpu",kernelFunc:e0e};function a0e(e){let{inputs:t,backend:a}=e,{input:n}=t;return Nk(n,!0,a)}var n0e={kernelName:Ap,backendName:"webgpu",kernelFunc:a0e},r0e=at({opType:le.IS_FINITE,dtype:"bool"}),s0e={kernelName:Hi,backendName:"webgpu",kernelFunc:r0e},i0e=at({opType:le.IS_INF,dtype:"bool"}),o0e={kernelName:ji,backendName:"webgpu",kernelFunc:i0e},l0e=at({opType:le.IS_NAN,dtype:"bool"}),u0e={kernelName:qi,backendName:"webgpu",kernelFunc:l0e};function d0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new Qu(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var p0e={kernelName:Xi,backendName:"webgpu",kernelFunc:d0e},c0e=ta({opType:Pe.LESS,dtype:"bool",cpuKernelImpl:pde}),h0e={kernelName:Ki,backendName:"webgpu",kernelFunc:c0e},m0e=ta({opType:Pe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:dde}),f0e={kernelName:Yi,backendName:"webgpu",kernelFunc:m0e},g0e=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 u0e(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 l0e(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 d0e={kernelName:xu,backendName:"webgpu",kernelFunc:Vk},p0e=ea({opType:_e.GREATER,cpuKernelImpl:wde,dtype:"bool"}),c0e={kernelName:Ui,backendName:"webgpu",kernelFunc:p0e},h0e=ea({opType:_e.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:vde}),m0e={kernelName:Gi,backendName:"webgpu",kernelFunc:h0e};function f0e(e){let{inputs:t,backend:a}=e,{input:n}=t;return Bk(n,!0,a)}var g0e={kernelName:yp,backendName:"webgpu",kernelFunc:f0e},y0e=at({opType:le.IS_FINITE,dtype:"bool"}),x0e={kernelName:ji,backendName:"webgpu",kernelFunc:y0e},A0e=at({opType:le.IS_INF,dtype:"bool"}),b0e={kernelName:qi,backendName:"webgpu",kernelFunc:A0e},v0e=at({opType:le.IS_NAN,dtype:"bool"}),w0e={kernelName:Xi,backendName:"webgpu",kernelFunc:v0e};function k0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new Ju(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var I0e={kernelName:Ki,backendName:"webgpu",kernelFunc:k0e},S0e=ea({opType:_e.LESS,dtype:"bool",cpuKernelImpl:Ide}),C0e={kernelName:Yi,backendName:"webgpu",kernelFunc:S0e},T0e=ea({opType:_e.LESS_EQUAL,dtype:"bool",cpuKernelImpl:kde}),N0e={kernelName:Zi,backendName:"webgpu",kernelFunc:T0e},R0e=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 y0e(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new g0e(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var x0e={kernelName:Zi,backendName:"webgpu",kernelFunc:y0e},A0e=at({opType:le.LOG,cpuKernelImpl:cde}),b0e={kernelName:Ji,backendName:"webgpu",kernelFunc:A0e},v0e=at({opType:le.LOG1P}),w0e={kernelName:Qi,backendName:"webgpu",kernelFunc:v0e},k0e=ta({opType:Pe.LOGICAL_AND,dtype:"bool"}),I0e={kernelName:eo,backendName:"webgpu",kernelFunc:k0e},S0e=at({opType:le.LOGICAL_NOT}),C0e={kernelName:to,backendName:"webgpu",kernelFunc:S0e},T0e=ta({opType:Pe.LOGICAL_OR}),N0e={kernelName:ao,backendName:"webgpu",kernelFunc:T0e},Ek=` + `}};function E0e(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new R0e(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var M0e={kernelName:Ji,backendName:"webgpu",kernelFunc:E0e},P0e=at({opType:le.LOG,cpuKernelImpl:Sde}),_0e={kernelName:Qi,backendName:"webgpu",kernelFunc:P0e},$0e=at({opType:le.LOG1P}),F0e={kernelName:eo,backendName:"webgpu",kernelFunc:$0e},D0e=ea({opType:_e.LOGICAL_AND,dtype:"bool"}),O0e={kernelName:to,backendName:"webgpu",kernelFunc:D0e},z0e=at({opType:le.LOGICAL_NOT}),L0e={kernelName:ao,backendName:"webgpu",kernelFunc:z0e},W0e=ea({opType:_e.LOGICAL_OR}),B0e={kernelName:no,backendName:"webgpu",kernelFunc:W0e},Uk=` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -7543,7 +7543,7 @@ return a / b;`,lJ=` } else { powValue = exp(log(basis) * (-uniforms.beta)); } -`,R0e=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` +`,V0e=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;`,lJ=` sum = sum + z * z; } } - ${Ek} + ${Uk} setOutputAtIndex(index, x * powValue); } } - `}},E0e=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` + `}},U0e=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;`,lJ=` let z = lrnSub[index + i]; sum = sum + z * z; } - ${Ek} + ${Uk} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } - } `}};function M0e(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 R0e(r.shape):u=new E0e(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 _0e={kernelName:no,backendName:"webgpu",kernelFunc:M0e},P0e=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 G0e(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 V0e(r.shape):u=new U0e(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 H0e={kernelName:ro,backendName:"webgpu",kernelFunc:G0e},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` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7648,7 +7648,7 @@ return a / b;`,lJ=` setOutputAtIndex(index, result); } } - `}};function $0e(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 P0e(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 F0e={kernelName:Au,backendName:"webgpu",kernelFunc:$0e},D0e=ta({opType:Pe.MAX,cpuKernelImpl:mde}),O0e={kernelName:so,backendName:"webgpu",kernelFunc:D0e};function z0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=S.computePool2DInfo(r.shape,s,i,u,o,l);return xk(r,p,"max",a)}var L0e={kernelName:io,backendName:"webgpu",kernelFunc:z0e};function W0e(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=S.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new j3(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 B0e={kernelName:bu,backendName:"webgpu",kernelFunc:W0e},V0e=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};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 X0e={kernelName:Au,backendName:"webgpu",kernelFunc:q0e},K0e=ea({opType:_e.MAX,cpuKernelImpl:Tde}),Y0e={kernelName:io,backendName:"webgpu",kernelFunc:K0e};function Z0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1,p=C.computePool2DInfo(r.shape,s,i,u,o,l);return Mk(r,p,"max",a)}var J0e={kernelName:oo,backendName:"webgpu",kernelFunc:Z0e};function Q0e(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 Y3(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 eme={kernelName:bu,backendName:"webgpu",kernelFunc:Q0e},tme=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}},U0e=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},ame=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;`,lJ=` setOutputAtIndex(index, dotProd); } } - `}};function G0e(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=S.computePool3DInfo(i.shape,o,l,c,u,p),h=new j3(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 U0e(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 H0e={kernelName:wp,backendName:"webgpu",kernelFunc:G0e};function j0e(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;U3([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=S.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 V0e(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 q0e={kernelName:vp,backendName:"webgpu",kernelFunc:j0e};function X0e(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(S.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=S.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 K0e={kernelName:vu,backendName:"webgpu",kernelFunc:X0e};function Y0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return il(r,s,i,"min",a)}var Z0e={kernelName:lo,backendName:"webgpu",kernelFunc:Y0e},J0e=ta({opType:Pe.MIN,cpuKernelImpl:fde}),Q0e={kernelName:uo,backendName:"webgpu",kernelFunc:J0e},eme=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=$t(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + `}};function nme(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 Y3(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 ame(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 rme={kernelName:bp,backendName:"webgpu",kernelFunc:nme};function sme(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;j3([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 ap(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 tme(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 ime={kernelName:Ap,backendName:"webgpu",kernelFunc:sme};function ome(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 ap(p,"max",!1),h=a.runWebGPUProgram(d,[l],l.dtype,c);d=new ap(p,"max",!0,!0,o);let m=a.runWebGPUProgram(d,[l],"int32",c);return[h,m]}var lme={kernelName:vu,backendName:"webgpu",kernelFunc:ome};function ume(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ol(r,s,i,"min",a)}var dme={kernelName:uo,backendName:"webgpu",kernelFunc:ume},pme=ea({opType:_e.MIN,cpuKernelImpl:Nde}),cme={kernelName:po,backendName:"webgpu",kernelFunc:pme},hme=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=_t(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;`,lJ=` setOutputAtIndex(index, getX(${o})); } } - `}},tme={kernelName:po,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 eme(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},ame=ta({opType:Pe.MOD}),nme={kernelName:co,backendName:"webgpu",kernelFunc:ame},rme=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` + `}},mme={kernelName:co,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 hme(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},fme=ea({opType:_e.MOD}),gme={kernelName:ho,backendName:"webgpu",kernelFunc:fme},yme=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;`,lJ=` setOutputAtIndexI32(index, uniforms.numOutcomes - 1); } } - `}},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` + `}},xme=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;`,lJ=` setOutputAtCoords(row, col, value); } } - `}};function Mk(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 ime={kernelName:Vo,backendName:"webgpu",kernelFunc:Mk};function ome(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:Mk({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new rme(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 lme={kernelName:ho,backendName:"webgpu",kernelFunc:ome};function ume(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=yde(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new Qu(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var dme={kernelName:wu,backendName:"webgpu",kernelFunc:ume};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}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),{selectedIndices:c}=En.nonMaxSuppressionV3Impl(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var cme={kernelName:go,backendName:"webgpu",kernelFunc:pme};function hme(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}=En.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 mme={kernelName:yo,backendName:"webgpu",kernelFunc:hme},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` + `}};function Gk(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 xme(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 Ame={kernelName:Uo,backendName:"webgpu",kernelFunc:Gk};function bme(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:Gk({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new yme(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 vme={kernelName:mo,backendName:"webgpu",kernelFunc:bme};function wme(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=Ede(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new Ju(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var kme={kernelName:wu,backendName:"webgpu",kernelFunc:wme};function Ime(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 Sme={kernelName:yo,backendName:"webgpu",kernelFunc:Ime};function Cme(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 Tme={kernelName:xo,backendName:"webgpu",kernelFunc:Cme},Nme=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;`,lJ=` f32(i32(round(getX(coords.x))) == coords.y))); } } - `}};function gme(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 yme={kernelName:xo,backendName:"webgpu",kernelFunc:gme};function Nh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=ec({inputs:{input:n},backend:a}),s=Nh({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Nh({inputs:{x:i},backend:a}),l=sl({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 Va({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var xme={kernelName:Lu,backendName:"webgpu",kernelFunc:Nh};function _k(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=ec({inputs:{input:n},backend:a}),s=_k({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Nh({inputs:{x:i},backend:a}),l=sl({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 Va({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var Ame={kernelName:Iu,backendName:"webgpu",kernelFunc:_k};function bme(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return X1({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=X1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=vk({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var vme={kernelName:Su,backendName:"webgpu",kernelFunc:bme};function Pk(e,t=!1){let a=e.length,n=$t(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 Rme(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 Nme(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 Eme={kernelName:Ao,backendName:"webgpu",kernelFunc:Rme};function Nh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Qp({inputs:{input:n},backend:a}),s=Nh({inputs:{x:r},backend:a}),i=c0({inputs:{input:n},backend:a}),o=Nh({inputs:{x:i},backend:a}),l=il({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 Mme={kernelName:Lu,backendName:"webgpu",kernelFunc:Nh};function Hk(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=Hk({inputs:{x:r},backend:a}),i=c0({inputs:{input:n},backend:a}),o=Nh({inputs:{x:i},backend:a}),l=il({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 Pme={kernelName:Iu,backendName:"webgpu",kernelFunc:Hk};function _me(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return K1({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=K1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=$k({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var $me={kernelName:Su,backendName:"webgpu",kernelFunc:_me};function jk(e,t=!1){let a=e.length,n=_t(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;`,lJ=` let coords = paddedCoords - start; setOutputAtIndex(index, getX(${p})); } - `}var wme=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 Fme=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); - ${Pk(this.xShape)} + ${jk(this.xShape)} } } - `}},kme=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 an({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 Va({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 wme(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Ime={kernelName:Ao,backendName:"webgpu",kernelFunc:kme},Sme=ta({opType:Pe.POW}),Cme={kernelName:bo,backendName:"webgpu",kernelFunc:Sme};function Tme(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new Ch(Pe.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var Nme={kernelName:vo,backendName:"webgpu",kernelFunc:Tme};function Rme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return il(r,s,i,"prod",a)}var Eme={kernelName:wo,backendName:"webgpu",kernelFunc:Rme},Mme=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=bde(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},_me={kernelName:Cu,backendName:"webgpu",kernelFunc:Mme},Pme=ta({opType:Pe.DIV}),$me={kernelName:Mi,backendName:"webgpu",kernelFunc:Pme},Fme=at({opType:le.RECIPROCAL}),Dme={kernelName:ko,backendName:"webgpu",kernelFunc:Fme},Ome=at({opType:le.RELU}),zme={kernelName:Io,backendName:"webgpu",kernelFunc:Ome},Lme=at({opType:le.RELU6}),Wme={kernelName:To,backendName:"webgpu",kernelFunc:Lme},Bme=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` + `}},Dme=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 en({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 Fme(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Ome={kernelName:bo,backendName:"webgpu",kernelFunc:Dme},zme=ea({opType:_e.POW}),Lme={kernelName:vo,backendName:"webgpu",kernelFunc:zme};function Wme(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new Ch(_e.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var Bme={kernelName:wo,backendName:"webgpu",kernelFunc:Wme};function Vme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ol(r,s,i,"prod",a)}var Ume={kernelName:ko,backendName:"webgpu",kernelFunc:Vme},Gme=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=_de(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},Hme={kernelName:Cu,backendName:"webgpu",kernelFunc:Gme},jme=ea({opType:_e.DIV}),qme={kernelName:Pi,backendName:"webgpu",kernelFunc:jme},Xme=at({opType:le.RECIPROCAL}),Kme={kernelName:Io,backendName:"webgpu",kernelFunc:Xme},Yme=at({opType:le.RELU}),Zme={kernelName:So,backendName:"webgpu",kernelFunc:Yme},Jme=at({opType:le.RELU6}),Qme={kernelName:No,backendName:"webgpu",kernelFunc:Jme},efe=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;`,lJ=` setOutputAtIndex(index, newValue); } } - `}};function Vme(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 Bme(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var Ume={kernelName:Co,backendName:"webgpu",kernelFunc:Vme},Gme=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, + `}};function tfe(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 efe(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var afe={kernelName:To,backendName:"webgpu",kernelFunc:tfe},nfe=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;`,lJ=` setOutputAtIndex(index, accumulator); } } - `}};function Hme(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 Gme(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 jme={kernelName:Ru,backendName:"webgpu",kernelFunc:Hme},qme=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 rfe(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 nfe(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 sfe={kernelName:Ru,backendName:"webgpu",kernelFunc:rfe},ife=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;`,lJ=` setOutputAtIndex(index, newValue); } } - `}};function Xme(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 qme(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var Kme={kernelName:So,backendName:"webgpu",kernelFunc:Xme},Yme=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, + `}};function ofe(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 ife(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var lfe={kernelName:Co,backendName:"webgpu",kernelFunc:ofe},ufe=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;`,lJ=` setOutputAtIndex(index, accumulator); } } - `}};function Zme(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 Yme(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 Jme={kernelName:Nu,backendName:"webgpu",kernelFunc:Zme},Qme=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 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:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var pfe={kernelName:Nu,backendName:"webgpu",kernelFunc:dfe},cfe=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;`,lJ=` reverseCoords[1], reverseCoords[2], reverseCoords[3])); } } - `}};function efe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return an({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 Qme(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 tfe={kernelName:No,backendName:"webgpu",kernelFunc:efe},afe=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 hfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return en({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 cfe(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 mfe={kernelName:Ro,backendName:"webgpu",kernelFunc:hfe},ffe=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;`,lJ=` setOutputAtIndex(index, outputValue); } } - `}},nfe={kernelName:Zo,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new afe(n.shape,s),[u,p]=S.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)}},rfe=at({opType:le.ROUND}),sfe={kernelName:Ro,backendName:"webgpu",kernelFunc:rfe},ife=at({opType:le.RSQRT,cpuKernelImpl:vde}),ofe={kernelName:Eo,backendName:"webgpu",kernelFunc:ife},Dd=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}`;let l=$t(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=` + `}},gfe={kernelName:Jo,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new ffe(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)}},yfe=at({opType:le.ROUND}),xfe={kernelName:Eo,backendName:"webgpu",kernelFunc:yfe},Afe=at({opType:le.RSQRT,cpuKernelImpl:$de}),bfe={kernelName:Mo,backendName:"webgpu",kernelFunc:Afe},Fd=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=_t(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; } @@ -8170,12 +8170,12 @@ return a / b;`,lJ=` flattenedIndex = flattenedIndex + indexInside * ${a}; } let updateValue = - ${Us(this.type)}(${s}); + ${Gs(this.type)}(${s}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices?ms("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices?gs("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} } - }`}};function lfe(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}=S.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=Va({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 Dd(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 ufe={kernelName:Mo,backendName:"webgpu",kernelFunc:lfe},dfe=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 vfe(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 Fd(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 wfe={kernelName:Po,backendName:"webgpu",kernelFunc:vfe},kfe=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;`,lJ=` setOutputAtIndexI32(index, findBound(coords[0], value)); } } - `}};function pfe(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new dfe([s.shape[0],s.shape[1]],i),l=[{type:"int32",data:[r.shape[1]]}];return a.runWebGPUProgram(o,[r,s],"int32",l)}var cfe={kernelName:Po,backendName:"webgpu",kernelFunc:pfe},hfe=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=$t(this.outputShape.length),t=mk(this.newDim);return` - ${oh(this.paddedXShape,"PaddedX")} + `}};function Tfe(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=new Cfe(n.shape.length,r.shape,r.shape.length);return a.runWebGPUProgram(i,[n,r,s],da(r.dtype,s.dtype))}var Nfe={kernelName:Eu,backendName:"webgpu",kernelFunc:Tfe},Rfe=at({opType:le.SELU}),Efe={kernelName:Fo,backendName:"webgpu",kernelFunc:Rfe},Mfe=at({opType:le.SIGMOID}),Pfe={kernelName:Lo,backendName:"webgpu",kernelFunc:Mfe},_fe=at({opType:le.SIGN}),$fe={kernelName:zo,backendName:"webgpu",kernelFunc:_fe},Ffe=at({opType:le.SIN}),Dfe={kernelName:Do,backendName:"webgpu",kernelFunc:Ffe},Ofe=at({opType:le.SINH}),zfe={kernelName:Oo,backendName:"webgpu",kernelFunc:Ofe},Lfe=at({opType:le.SOFTPLUS}),Wfe={kernelName:Wo,backendName:"webgpu",kernelFunc:Lfe},Bfe=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=_t(this.outputShape.length),t=Tk(this.newDim);return` + ${ih(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); - ${Pk(this.xShape,!0)} + ${jk(this.xShape,!0)} } } - `}},Rfe=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=S.getReshaped(u,s,o,!1),c=S.getPermuted(p.length,s.length,!1),d=S.getReshapedPermuted(u,s,o,!1),h=v.computeStrides(u),m=new Nfe(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},Efe={kernelName:_u,backendName:"webgpu",kernelFunc:Rfe},Mfe=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` + `}},Vfe=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 Bfe(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},Ufe={kernelName:Pu,backendName:"webgpu",kernelFunc:Vfe},Gfe=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; @@ -8229,17 +8229,17 @@ return a / b;`,lJ=` let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${ms("&result[outIndex]","value",this.type)} + ${gs("&result[outIndex]","value",this.type)} } } - `}},_fe=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` + `}},Hfe=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]; - ${ms("&result[segmentId]","1","int32")} + ${gs("&result[segmentId]","1","int32")} } } - `}},Pfe=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` + `}},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` ${ue("index")} { if (index < uniforms.size) { let segmentId = index / uniforms.segmentSize; @@ -8249,21 +8249,21 @@ return a / b;`,lJ=` } } } - `}};function $k(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=Va({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Mfe(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=Va({backend:r,attrs:{shape:[u],value:0,dtype:"int32"}});p=new _fe(u,a.shape);let y=r.runWebGPUProgram(p,[a],"int32",null,g),x=Va({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Pfe(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 $fe(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return $k(n,r,s,!1,a)}var Ffe={kernelName:Fu,backendName:"webgpu",kernelFunc:$fe};function Dfe(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return $k(n,r,s,!0,a)}var Ofe={kernelName:Du,backendName:"webgpu",kernelFunc:Dfe},zfe=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 Gfe(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 Hfe(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 qk(n,r,s,!1,a)}var Xfe={kernelName:Fu,backendName:"webgpu",kernelFunc:qfe};function Kfe(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return qk(n,r,s,!0,a)}var Yfe={kernelName:Du,backendName:"webgpu",kernelFunc:Kfe},Zfe=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=Nde(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new zfe(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var Wfe={kernelName:is,backendName:"webgpu",kernelFunc:q3};function Bfe(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}=S.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),M=a.bufferSync(s),P=v.decodeString(a.readSync(i.dataId)[0]),E=wde(N,M,o,d,p,u,l,c,P,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]}}):an({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=q3({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 Dd([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 Dd([u,p],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,I,b)}{let N=new Dd([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 Vfe={kernelName:Uo,backendName:"webgpu",kernelFunc:Bfe};function Ufe(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=S.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=ed({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var Gfe={kernelName:Pu,backendName:"webgpu",kernelFunc:Ufe},Hfe=at({opType:le.SQRT}),jfe={kernelName:Wo,backendName:"webgpu",kernelFunc:Hfe},qfe={kernelName:Sp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new Qu(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},Xfe=ta({opType:Pe.SQUARED_DIFFERENCE}),Kfe={kernelName:Go,backendName:"webgpu",kernelFunc:Xfe};function Yfe({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new Qu(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var Zfe={kernelName:os,backendName:"webgpu",kernelFunc:Yfe},Jfe=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=$t(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 Jfe(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=Bde(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new Zfe(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var Qfe={kernelName:ls,backendName:"webgpu",kernelFunc:Z3};function e2e(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),P=v.decodeString(a.readSync(i.dataId)[0]),E=Fde(N,M,o,d,p,u,l,c,P,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]}}):en({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=Z3({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 Fd([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 Fd([u,p],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,I,b)}{let N=new Fd([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 t2e={kernelName:Go,backendName:"webgpu",kernelFunc:e2e};function a2e(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 n2e={kernelName:_u,backendName:"webgpu",kernelFunc:a2e},r2e=at({opType:le.SQRT}),s2e={kernelName:Bo,backendName:"webgpu",kernelFunc:r2e},i2e={kernelName:kp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new Ju(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},o2e=ea({opType:_e.SQUARED_DIFFERENCE}),l2e={kernelName:Ho,backendName:"webgpu",kernelFunc:o2e};function u2e({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new Ju(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var d2e={kernelName:us,backendName:"webgpu",kernelFunc:u2e},p2e=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=_t(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 Qfe(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=ed({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=Sde(h,T,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let I=new Jfe(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 e2e={kernelName:Ho,backendName:"webgpu",kernelFunc:Qfe};function t2e(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]=Cde(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var a2e={kernelName:Ou,backendName:"webgpu",kernelFunc:t2e},n2e=ta({opType:Pe.SUB,cpuKernelImpl:Tde,supportsComplex:!0}),r2e={kernelName:jo,backendName:"webgpu",kernelFunc:n2e},s2e=at({opType:le.TAN}),i2e={kernelName:qo,backendName:"webgpu",kernelFunc:s2e},o2e=at({opType:le.TANH}),l2e={kernelName:Xo,backendName:"webgpu",kernelFunc:o2e};function u2e(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}=S.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=q3({inputs:{x:g},backend:a,attrs:{reps:Array(d.length).fill(1)}}),x=new Dd([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 d2e={kernelName:_o,backendName:"webgpu",kernelFunc:u2e},p2e=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 c2e(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=Qu({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=zde(h,T,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let I=new p2e(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 h2e={kernelName:jo,backendName:"webgpu",kernelFunc:c2e};function m2e(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]=Lde(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var f2e={kernelName:Ou,backendName:"webgpu",kernelFunc:m2e},g2e=ea({opType:_e.SUB,cpuKernelImpl:Wde,supportsComplex:!0}),y2e={kernelName:qo,backendName:"webgpu",kernelFunc:g2e},x2e=at({opType:le.TAN}),A2e={kernelName:Xo,backendName:"webgpu",kernelFunc:x2e},b2e=at({opType:le.TANH}),v2e={kernelName:Ko,backendName:"webgpu",kernelFunc:b2e};function w2e(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=Z3({inputs:{x:g},backend:a,attrs:{reps:Array(d.length).fill(1)}}),x=new Fd([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 k2e={kernelName:_o,backendName:"webgpu",kernelFunc:w2e},I2e=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;`,lJ=` } } } - `}},c2e=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` + `}},S2e=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;`,lJ=` } } } - `}};function Pl(e,t){t!==null&&e.disposeData(t.dataId)}function nA(e){let t=1;for(;th===null?[p,p]:[p,h],f=(b,w,I)=>{let T=m(),N=new p2e(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]}],P=h;h=a.runWebGPUProgram(N,T,"int32",M),Pl(a,P)};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 c2e([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),Pl(a,N);let M=c/2,P=M*2;for(let E=M;E>=1;E/=2)f(P,E,h.shape)}let g=h;h=ed({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Pl(a,g);let y=Rk({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Pl(a,p);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),Pl(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),Pl(a,A),[y,h]}var m2e={kernelName:Ko,backendName:"webgpu",kernelFunc:h2e},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` + `}};function $l(e,t){t!==null&&e.disposeData(t.dataId)}function uA(e){let t=1;for(;th===null?[p,p]:[p,h],f=(b,w,I)=>{let T=m(),N=new I2e(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]}],P=h;h=a.runWebGPUProgram(N,T,"int32",M),$l(a,P)};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 S2e([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),$l(a,N);let M=c/2,P=M*2;for(let E=M;E>=1;E/=2)f(P,E,h.shape)}let g=h;h=Qu({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),$l(a,g);let y=Vk({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});$l(a,p);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),$l(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),$l(a,A),[y,h]}var T2e={kernelName:Yo,backendName:"webgpu",kernelFunc:C2e},N2e=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;`,lJ=` setOutputAtIndex(index, outputValue); } } - `}};function g2e(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 y2e={kernelName:Yo,backendName:"webgpu",kernelFunc:g2e};function x2e(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 A2e={kernelName:zu,backendName:"webgpu",kernelFunc:x2e},b2e=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 R2e(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 N2e(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 E2e={kernelName:Zo,backendName:"webgpu",kernelFunc:R2e};function M2e(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 P2e={kernelName:zu,backendName:"webgpu",kernelFunc:M2e},_2e=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) { @@ -8519,11 +8519,11 @@ return a / b;`,lJ=` let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${ms("&result[flatIndex]","value",this.type)} + ${gs("&result[flatIndex]","value",this.type)} } } } - `}};function v2e(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=S.getAxesPermutation([u],o),c=r;p!=null&&(c=ar({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=S.getInnerMostAxes(1,o)[0]);let d=S.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=Va({backend:a,attrs:{shape:g,value:0,dtype:f}}),x=new b2e(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=S.getUndoAxesPermutation(p);I=ar({inputs:{x:I},backend:a,attrs:{perm:T}})}return l.forEach(T=>a.disposeData(T.dataId)),I}var w2e={kernelName:Ep,backendName:"webgpu",kernelFunc:v2e},k2e=[Xue,_de,$de,Dde,zde,Bde,Xde,Yde,Jde,epe,ape,rpe,ipe,lpe,dpe,fpe,ype,vpe,kpe,Spe,Epe,$pe,Ope,Bpe,Upe,qpe,Yue,Ype,ece,lce,mce,xce,vce,kce,Sce,Tce,Rce,_ce,$ce,Dce,zce,Bce,Xce,Yce,Gce,Qce,ahe,ihe,lhe,phe,fhe,yhe,Ahe,vhe,khe,She,Che,Nhe,Ehe,Hue,_he,zhe,$he,Dhe,Bhe,Uhe,Hhe,Xhe,Zhe,Qhe,t0e,Kue,n0e,Jpe,s0e,o0e,u0e,p0e,h0e,f0e,x0e,w0e,b0e,I0e,C0e,N0e,_0e,F0e,cpe,O0e,L0e,q0e,B0e,H0e,K0e,hpe,Z0e,Q0e,tme,nme,lme,che,dme,cme,mme,zpe,yme,Ame,vme,Ime,Cme,Nme,Eme,_me,Lpe,$me,Dme,zme,Wme,jue,Ume,jme,Kme,Jme,tfe,nfe,sfe,ofe,ufe,cfe,ffe,yfe,Afe,vfe,kfe,Sfe,Npe,Zfe,e2e,a2e,ime,Tfe,Efe,Ffe,Ofe,Vfe,Gfe,jfe,qfe,Kfe,r2e,hhe,i2e,l2e,d2e,Wfe,m2e,y2e,Gde,A2e,w2e,xme];for(let e of k2e)xn(e);var rA="4.11.0",I2e="4.11.0",S2e="4.11.0",C2e="4.11.0",T2e="4.11.0",N2e="4.11.0",tc={tfjs:rA,"tfjs-core":rA,"tfjs-converter":I2e,"tfjs-backend-cpu":S2e,"tfjs-backend-webgl":C2e,"tfjs-backend-wasm":T2e,"tfjs-backend-webgpu":N2e};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 Fk(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 X3(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")X3(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 ol={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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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 Dk=` + `}};function $2e(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=ar({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 _2e(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=ar({inputs:{x:I},backend:a,attrs:{perm:T}})}return l.forEach(T=>a.disposeData(T.dataId)),I}var F2e={kernelName:Np,backendName:"webgpu",kernelFunc:$2e},D2e=[ode,Hde,qde,Kde,Zde,epe,ope,upe,ppe,hpe,fpe,ype,Ape,vpe,kpe,Npe,Epe,$pe,Dpe,zpe,Upe,qpe,Ype,ece,ace,ice,ude,uce,hce,vce,Tce,Mce,$ce,Dce,zce,Wce,Vce,Hce,qce,Kce,Zce,ehe,ohe,uhe,nhe,che,fhe,Ahe,vhe,Ihe,Nhe,Ehe,Phe,$he,Dhe,zhe,Lhe,Bhe,Uhe,rde,Hhe,Zhe,qhe,Khe,e0e,a0e,r0e,o0e,d0e,c0e,m0e,lde,g0e,pce,x0e,b0e,w0e,I0e,C0e,N0e,M0e,F0e,_0e,O0e,L0e,B0e,H0e,X0e,Spe,Y0e,J0e,ime,eme,rme,lme,Cpe,dme,cme,mme,gme,vme,She,kme,Sme,Tme,Zpe,Eme,Pme,$me,Ome,Lme,Bme,Ume,Hme,Jpe,qme,Kme,Zme,Qme,sde,afe,sfe,lfe,pfe,mfe,gfe,xfe,bfe,wfe,Sfe,Nfe,Efe,Pfe,$fe,Dfe,zfe,Bpe,d2e,h2e,f2e,Ame,Wfe,Ufe,Xfe,Yfe,t2e,n2e,s2e,i2e,l2e,y2e,Che,A2e,v2e,k2e,Qfe,T2e,E2e,npe,P2e,F2e,Mme];for(let e of D2e)yn(e);var dA="4.14.0",O2e="4.14.0",z2e="4.14.0",L2e="4.14.0",W2e="4.14.0",B2e="4.14.0",ec={tfjs:dA,"tfjs-core":dA,"tfjs-converter":O2e,"tfjs-backend-cpu":z2e,"tfjs-backend-webgl":L2e,"tfjs-backend-wasm":W2e,"tfjs-backend-webgpu":B2e},J3=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 Xk(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 Q3(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Q3(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 ll={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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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 Kk=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -8533,7 +8533,7 @@ return a / b;`,lJ=` vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var Ok=` +`;var Yk=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8545,7 +8545,7 @@ return a / b;`,lJ=` 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]; } -`,zk=` +`,Zk=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8557,7 +8557,7 @@ return a / b;`,lJ=` gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,Lk=` +`,Jk=` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -8570,7 +8570,7 @@ return a / b;`,lJ=` vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,Wk=` +`,Qk=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8593,7 +8593,7 @@ return a / b;`,lJ=` 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; } -`,Bk=` +`,e9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8615,8 +8615,8 @@ return a / b;`,lJ=` c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var K3=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},Y3=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),K3(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);K3(a,"uniform",this.uniform),K3(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function Vk(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=_n(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 Y3(c,Dk,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?zk:Ok,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(Bk);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(Wk);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(Lk);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=Bt(t,0);return J([...a,...n,...r,a,t,e]),u}var f0=3840,aa=null,na=null,td=null,bt,bn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function Z3(){bn.inputSum=0,bn.cacheDiff=1,bn.sumMethod=0,bn.inputTensor=void 0}function _n(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||_n(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 mt)&&!(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 mt){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=Bt(e,0);else if(e.shape[2]===4){let g=qp(e,[0,0,0],[-1,-1,3]);f=Bt(g,0),J(g)}}else e.shape.length===4&&(e.shape[3]===3?f=Sa(e):e.shape[3]===4&&(f=Bh(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=_n(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=_n(aa.width,aa.height)),t.filter.enabled&&ne.webgl.supported?(bt||(bt=ne.browser?new Vk:null),ne.filter=!!bt,bt!=null&&bt.add?(bt.reset(),t.filter.brightness!==0&&bt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&bt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&bt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&bt.add("blur",t.filter.blur),t.filter.saturation!==0&&bt.add("saturation",t.filter.saturation),t.filter.hue!==0&&bt.add("hue",t.filter.hue),t.filter.negative&&bt.add("negative"),t.filter.sepia&&bt.add("sepia"),t.filter.vintage&&bt.add("brownie"),t.filter.sepia&&bt.add("sepia"),t.filter.kodachrome&&bt.add("kodachrome"),t.filter.technicolor&&bt.add("technicolor"),t.filter.polaroid&&bt.add("polaroid"),t.filter.pixelate!==0&&bt.add("pixelate",t.filter.pixelate),((m=bt.get())==null?void 0:m.length)>1?na=bt.apply(aa):na=bt.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),bt&&(bt=null),ne.filter=!!bt),!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((!td||na.width!==td.width||na.height!==td.height)&&(td=_n(na.width,na.height)),Er&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Er.fromPixels(na):(td=g0(na),l=Er.fromPixels(td));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):Bt(p,0);if(J([l,p]),t.filter.autoBrightness){let f=ga(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 Uk(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=Sa(t);else if(bn.inputTensor.shape[1]!==t.shape[1]||bn.inputTensor.shape[2]!==t.shape[2])J(bn.inputTensor),bn.inputTensor=Sa(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=Sa(t),a=s<=(e.cacheSensitivity||0)}return a}async function Gk(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=Sa(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?fe.resizeBilinear(a,[t.shape[1],t.shape[2]]):Sa(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 nc,rc,sc,ac=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",[]);jn(this,nc,void 0);jn(this,rc,void 0);jn(this,sc,void 0);if(this.browser=typeof navigator!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:tc["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 Ka(this,nc)}set Canvas(t){Ar(this,nc,t),globalThis.Canvas=t}get Image(){return Ka(this,rc)}set Image(t){Ar(this,rc,t),globalThis.Image=t}get ImageData(){return Ka(this,sc)}set ImageData(t){Ar(this,sc,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(It().registryFactory);try{this.tensorflow={version:rr().binding?rr().binding.TF_Version:void 0,gpu:rr().binding?rr().binding.isUsingGpuDevice():void 0}}catch(n){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=_n(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=Zn(ha()).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})}};nc=new WeakMap,rc=new WeakMap,sc=new WeakMap;var ne=new ac;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 J3={};xr(J3,{"affectnet-mobilenet":()=>G2e,age:()=>H2e,"anti-spoofing":()=>k1e,antispoof:()=>_2e,blazeface:()=>P2e,"blazeface-back":()=>j2e,"blazeface-front":()=>q2e,"blazepose-detector":()=>X2e,"blazepose-full":()=>K2e,"blazepose-heavy":()=>Y2e,"blazepose-lite":()=>Z2e,centernet:()=>$2e,default:()=>D1e,efficientpose:()=>J2e,"efficientpose-i-lite":()=>I1e,"efficientpose-ii-lite":()=>S1e,"efficientpose-iv":()=>C1e,emotion:()=>F2e,faceboxes:()=>Q2e,facemesh:()=>D2e,"facemesh-attention":()=>t1e,"facemesh-attention-pinto":()=>e1e,"facemesh-detection-full":()=>a1e,"facemesh-detection-short":()=>n1e,faceres:()=>O2e,"faceres-deep":()=>r1e,gear:()=>o1e,"gear-e1":()=>s1e,"gear-e2":()=>i1e,gender:()=>u1e,"gender-ssrnet-imdb":()=>l1e,handdetect:()=>d1e,"handlandmark-full":()=>p1e,"handlandmark-lite":()=>z2e,"handlandmark-sparse":()=>c1e,handskeleton:()=>h1e,handtrack:()=>L2e,"insightface-efficientnet-b0":()=>T1e,"insightface-ghostnet-strides1":()=>N1e,"insightface-ghostnet-strides2":()=>R1e,"insightface-mobilenet-emore":()=>E1e,"insightface-mobilenet-swish":()=>M1e,iris:()=>W2e,liveness:()=>B2e,meet:()=>m1e,mobileface:()=>f1e,mobilefacenet:()=>g1e,models:()=>V2e,"movenet-lightning":()=>U2e,"movenet-multipose":()=>y1e,"movenet-thunder":()=>x1e,nanodet:()=>A1e,"nanodet-e":()=>_1e,"nanodet-g":()=>P1e,"nanodet-m":()=>$1e,"nanodet-t":()=>F1e,posenet:()=>b1e,rvm:()=>v1e,selfie:()=>w1e});var _2e=853098,P2e=538928,$2e=4030290,F2e=820516,D2e=1477958,O2e=6978814,z2e=2023432,L2e=2964837,W2e=2599092,B2e=592976,V2e=0,U2e=4650216,G2e=6920630,H2e=161240,j2e=538928,q2e=402048,X2e=5928856,K2e=6339202,Y2e=27502466,Z2e=2726402,J2e=5651240,Q2e=2013002,e1e=2387598,t1e=2382414,a1e=1026192,n1e=201268,r1e=13957620,s1e=112438,i1e=112438,o1e=1498916,l1e=161236,u1e=201808,d1e=3515612,p1e=5431368,c1e=5286322,h1e=5502280,m1e=372228,f1e=2183192,g1e=5171976,y1e=9448838,x1e=12477112,A1e=7574558,b1e=5032780,v1e=3739355,w1e=212886,k1e=853098,I1e=2269064,S1e=5651240,C1e=25643252,T1e=13013224,N1e=8093408,R1e=8049584,E1e=6938536,M1e=12168584,_1e=12319156,P1e=7574558,$1e=1887474,F1e=5294216,D1e={antispoof:_2e,blazeface:P2e,centernet:$2e,emotion:F2e,facemesh:D2e,faceres:O2e,"handlandmark-lite":z2e,handtrack:L2e,iris:W2e,liveness:B2e,models:V2e,"movenet-lightning":U2e,"affectnet-mobilenet":G2e,age:H2e,"blazeface-back":j2e,"blazeface-front":q2e,"blazepose-detector":X2e,"blazepose-full":K2e,"blazepose-heavy":Y2e,"blazepose-lite":Z2e,efficientpose:J2e,faceboxes:Q2e,"facemesh-attention-pinto":e1e,"facemesh-attention":t1e,"facemesh-detection-full":a1e,"facemesh-detection-short":n1e,"faceres-deep":r1e,"gear-e1":s1e,"gear-e2":i1e,gear:o1e,"gender-ssrnet-imdb":l1e,gender:u1e,handdetect:d1e,"handlandmark-full":p1e,"handlandmark-sparse":c1e,handskeleton:h1e,meet:m1e,mobileface:f1e,mobilefacenet:g1e,"movenet-multipose":y1e,"movenet-thunder":x1e,nanodet:A1e,posenet:b1e,rvm:v1e,selfie:w1e,"anti-spoofing":k1e,"efficientpose-i-lite":I1e,"efficientpose-ii-lite":S1e,"efficientpose-iv":C1e,"insightface-efficientnet-b0":T1e,"insightface-ghostnet-strides1":N1e,"insightface-ghostnet-strides2":R1e,"insightface-mobilenet-emore":E1e,"insightface-mobilenet-swish":M1e,"nanodet-e":_1e,"nanodet-g":P1e,"nanodet-m":$1e,"nanodet-t":F1e};var Ma={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},xa={};async function O1e(e,t){return Ma.debug&&K("load model fetch:",e,t),fetch(e,t)}function Hk(e){Ma.cacheModels=e.cacheModels,Ma.verbose=e.debug,Ma.modelBasePath=e.modelBasePath}async function _e(e){var u,p,c,d;let t=Fk(Ma.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;xa[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:J3[n],inCache:!1,url:""},Ma.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ma.cacheSupported&&Ma.cacheModels?await Xn.listModels():{}}catch(h){Ma.cacheSupported=!1}xa[n].inCache=Ma.cacheSupported&&Ma.cacheModels&&Object.keys(s).includes(r),xa[n].url=xa[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,m)=>O1e(h,m)},o=new Xp(xa[n].url,i),l=!1;try{o.findIOHandler(),Ma.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;xa[n].sizeFromManifest=((p=h==null?void 0:h.weightData)==null?void 0:p.byteLength)||0,h?o.loadSync(h):o=await o3(xa[n].inCache?r:t,i),xa[n].sizeLoadedWeights=((d=(c=o.artifacts)==null?void 0:c.weightData)==null?void 0:d.byteLength)||0,Ma.verbose&&K("load:",{model:n,url:o.modelUrl,bytes:xa[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ma.cacheModels&&Ma.cacheSupported&&!xa[n].inCache)try{let h=await o.save(r);Ma.debug&&K("model saved:",r,h)}catch(h){K("error saving model:",t,h)}return o}var Q3="3.1.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 W1e(){let e=St.gl;e&&(St.extensions=e.getSupportedExtensions())}function jk(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=_n(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{a0(2,St.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Wl(St.gl);Jo(St.name,()=>new Ku(r),St.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Zn("webgl").forEach(s=>{let i={...s,backendName:St.name};xn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{W().flagRegistry.WEBGL_VERSION&&W().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}W1e();let a=rr(),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 qk(){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=Vt([.2989,.587,.114],"float32")}async function U1e(){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 G1e(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:ha(),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:ha(),kernelFunc:n=>De(()=>we(te(zp(n.inputs.a,n.inputs.b),n.inputs.b),Bu(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:ha(),kernelFunc:n=>De(()=>{let r=ha();Dp("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Dp(r),s})};xn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var Xk={};async function ic(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await U1e()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&ha()!==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")&&(jk(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(W().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&W().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof l0!="undefined")l0(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 W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),o=await W().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 Dp(e.config.backend),await Op()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(Xk=JSON.parse(JSON.stringify(W().flags)))}if((ha()==="humangl"||ha()==="webgl")&&(W().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&W().set("WEBGL_USE_SHAPES_UNIFORMS",!0),W().flagRegistry.WEBGL_EXP_CONV&&W().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),W().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),ha(),e.config.debug){let s=W().flags,i={};for(let o of Object.keys(s))Xk[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",ha(),"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))W().set(s,i)}ig(),qk(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=ha(),await ne.updateBackend(),G1e(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=Zn(ha()).map(a=>a.kernelName.toLowerCase())}var C0={};xr(C0,{all:()=>vge,body:()=>w0,canvas:()=>bge,face:()=>v0,gesture:()=>S0,hand:()=>k0,init:()=>iy,object:()=>I0,options:()=>Dt,person:()=>Age});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},ll=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),ul=(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 ur(e,t,a,n,r){e.fillStyle=ul(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function dr(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 ey(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=ul(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function Yk(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){ey(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;noc[e]),$be=j1e.map(e=>oc[e]),Fbe=q1e.map(e=>oc[e]);function fs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var X1e=[[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]],K1e=[[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]],Y1e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Z1e=[[474,475],[475,476],[476,477],[477,474]],J1e=[[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]],Q1e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],ege=[[469,470],[470,471],[471,472],[472,469]],tge=[[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]],Dbe={lips:fs(X1e),leftEye:fs(K1e),leftEyebrow:fs(Y1e),leftIris:fs(Z1e),rightEye:fs(J1e),rightEyebrow:fs(Q1e),rightIris:fs(ege),faceOval:fs(tge)};var age=[[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]],nge=[[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]],rge=[[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]],ige=[[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]],oge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],lge=[[469,470],[470,471],[471,472],[472,469]],uge=[[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 gs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var dge={lips:gs(age),leftEye:gs(nge),leftEyebrow:gs(rge),leftIris:gs(sge),rightEye:gs(ige),rightEyebrow:gs(oge),rightIris:gs(lge),faceOval:gs(uge)},pge=Object.entries(dge).map(([e,t])=>t.map(a=>[a,e])).flat(),Obe=new Map(pge),lc=[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],cl=[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],hl=[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 cge(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]",ll(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",ll(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",ll(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",ll(e.rotation.gaze.bearing))),wn(t,a,e.box[0],e.box[1],rt)}function hge(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 mge(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]*ll(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*ll(e.rotation.angle.pitch)/90,s=new Path2D(` +`;var ey=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},ty=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),ey(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);ey(a,"uniform",this.uniform),ey(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function t9(){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 ty(c,Kk,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?Zk:Yk,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(e9);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(Qk);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(Jk);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=pa([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 m0=3840,ta=null,aa=null,ed=null,bt,An={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ay(){An.inputSum=0,An.cacheDiff=1,An.sumMethod=0,An.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 f0(e,t){let a=t||Mn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function g0(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 gt)&&!(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 gt){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=Hp(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=Bh(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?aa:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:ta};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:ta};let s=n,i=r;if(s>m0&&(s=m0,i=Math.trunc(s*r/n)),i>m0&&(i=m0,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");(!ta||ta.width!==s||ta.height!==i)&&(ta=Mn(s,i));let o=ta.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,ta.width,ta.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,ta.width,ta.height),(!aa||ta.width!==aa.width||ta.height!==aa.height)&&(aa=Mn(ta.width,ta.height)),t.filter.enabled&&ne.webgl.supported?(bt||(bt=ne.browser?new t9:null),ne.filter=!!bt,bt!=null&&bt.add?(bt.reset(),t.filter.brightness!==0&&bt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&bt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&bt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&bt.add("blur",t.filter.blur),t.filter.saturation!==0&&bt.add("saturation",t.filter.saturation),t.filter.hue!==0&&bt.add("hue",t.filter.hue),t.filter.negative&&bt.add("negative"),t.filter.sepia&&bt.add("sepia"),t.filter.vintage&&bt.add("brownie"),t.filter.sepia&&bt.add("sepia"),t.filter.kodachrome&&bt.add("kodachrome"),t.filter.technicolor&&bt.add("technicolor"),t.filter.polaroid&&bt.add("polaroid"),t.filter.pixelate!==0&&bt.add("pixelate",t.filter.pixelate),((m=bt.get())==null?void 0:m.length)>1?aa=bt.apply(ta):aa=bt.draw(ta)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,f0(ta,aa))):(f0(ta,aa),bt&&(bt=null),ne.filter=!!bt),!a)return{tensor:null,canvas:aa};if(!aa)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((!ed||aa.width!==ed.width||aa.height!==ed.height)&&(ed=Mn(aa.width,aa.height)),Er&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Er.fromPixels(aa):(ed=f0(aa),l=Er.fromPixels(ed));else{let y=f0(aa).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=Hp(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 h0(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?aa:null}}async function a9(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(!An.inputTensor)An.inputTensor=Ia(t);else if(An.inputTensor.shape[1]!==t.shape[1]||An.inputTensor.shape[2]!==t.shape[2])J(An.inputTensor),An.inputTensor=Ia(t);else{let n={};n.diff=xe(t,An.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([An.inputTensor,n.diff,n.squared,n.sum]),An.inputTensor=Ia(t),a=s<=(e.cacheSensitivity||0)}return a}async function n9(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 ac,nc,rc,tc=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",[]);jn(this,ac,void 0);jn(this,nc,void 0);jn(this,rc,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:ec["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,ac)}set Canvas(t){xr(this,ac,t),globalThis.Canvas=t}get Image(){return qa(this,nc)}set Image(t){xr(this,nc,t),globalThis.Image=t}get ImageData(){return qa(this,rc)}set ImageData(t){xr(this,rc,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(It().registryFactory);try{this.tensorflow={version:nr().binding?nr().binding.TF_Version:void 0,gpu:nr().binding?nr().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=Zn(ca()).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})}};ac=new WeakMap,nc=new WeakMap,rc=new WeakMap;var ne=new tc;var x0=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 ny={};yr(ny,{"affectnet-mobilenet":()=>n1e,age:()=>r1e,"anti-spoofing":()=>D1e,antispoof:()=>H2e,blazeface:()=>j2e,"blazeface-back":()=>s1e,"blazeface-front":()=>i1e,"blazepose-detector":()=>o1e,"blazepose-full":()=>l1e,"blazepose-heavy":()=>u1e,"blazepose-lite":()=>d1e,centernet:()=>q2e,default:()=>K1e,efficientpose:()=>p1e,"efficientpose-i-lite":()=>O1e,"efficientpose-ii-lite":()=>z1e,"efficientpose-iv":()=>L1e,emotion:()=>X2e,faceboxes:()=>c1e,facemesh:()=>K2e,"facemesh-attention":()=>m1e,"facemesh-attention-pinto":()=>h1e,"facemesh-detection-full":()=>f1e,"facemesh-detection-short":()=>g1e,faceres:()=>Y2e,"faceres-deep":()=>y1e,gear:()=>b1e,"gear-e1":()=>x1e,"gear-e2":()=>A1e,gender:()=>w1e,"gender-ssrnet-imdb":()=>v1e,handdetect:()=>k1e,"handlandmark-full":()=>I1e,"handlandmark-lite":()=>Z2e,"handlandmark-sparse":()=>S1e,handskeleton:()=>C1e,handtrack:()=>J2e,"insightface-efficientnet-b0":()=>W1e,"insightface-ghostnet-strides1":()=>B1e,"insightface-ghostnet-strides2":()=>V1e,"insightface-mobilenet-emore":()=>U1e,"insightface-mobilenet-swish":()=>G1e,iris:()=>Q2e,liveness:()=>e1e,meet:()=>T1e,mobileface:()=>N1e,mobilefacenet:()=>R1e,models:()=>t1e,"movenet-lightning":()=>a1e,"movenet-multipose":()=>E1e,"movenet-thunder":()=>M1e,nanodet:()=>P1e,"nanodet-e":()=>H1e,"nanodet-g":()=>j1e,"nanodet-m":()=>q1e,"nanodet-t":()=>X1e,posenet:()=>_1e,rvm:()=>$1e,selfie:()=>F1e});var H2e=853098,j2e=538928,q2e=4030290,X2e=820516,K2e=1477958,Y2e=6978814,Z2e=2023432,J2e=2964837,Q2e=2599092,e1e=592976,t1e=0,a1e=4650216,n1e=6920630,r1e=161240,s1e=538928,i1e=402048,o1e=5928856,l1e=6339202,u1e=27502466,d1e=2726402,p1e=5651240,c1e=2013002,h1e=2387598,m1e=2382414,f1e=1026192,g1e=201268,y1e=13957620,x1e=112438,A1e=112438,b1e=1498916,v1e=161236,w1e=201808,k1e=3515612,I1e=5431368,S1e=5286322,C1e=5502280,T1e=372228,N1e=2183192,R1e=5171976,E1e=9448838,M1e=12477112,P1e=7574558,_1e=5032780,$1e=3739355,F1e=212886,D1e=853098,O1e=2269064,z1e=5651240,L1e=25643252,W1e=13013224,B1e=8093408,V1e=8049584,U1e=6938536,G1e=12168584,H1e=12319156,j1e=7574558,q1e=1887474,X1e=5294216,K1e={antispoof:H2e,blazeface:j2e,centernet:q2e,emotion:X2e,facemesh:K2e,faceres:Y2e,"handlandmark-lite":Z2e,handtrack:J2e,iris:Q2e,liveness:e1e,models:t1e,"movenet-lightning":a1e,"affectnet-mobilenet":n1e,age:r1e,"blazeface-back":s1e,"blazeface-front":i1e,"blazepose-detector":o1e,"blazepose-full":l1e,"blazepose-heavy":u1e,"blazepose-lite":d1e,efficientpose:p1e,faceboxes:c1e,"facemesh-attention-pinto":h1e,"facemesh-attention":m1e,"facemesh-detection-full":f1e,"facemesh-detection-short":g1e,"faceres-deep":y1e,"gear-e1":x1e,"gear-e2":A1e,gear:b1e,"gender-ssrnet-imdb":v1e,gender:w1e,handdetect:k1e,"handlandmark-full":I1e,"handlandmark-sparse":S1e,handskeleton:C1e,meet:T1e,mobileface:N1e,mobilefacenet:R1e,"movenet-multipose":E1e,"movenet-thunder":M1e,nanodet:P1e,posenet:_1e,rvm:$1e,selfie:F1e,"anti-spoofing":D1e,"efficientpose-i-lite":O1e,"efficientpose-ii-lite":z1e,"efficientpose-iv":L1e,"insightface-efficientnet-b0":W1e,"insightface-ghostnet-strides1":B1e,"insightface-ghostnet-strides2":V1e,"insightface-mobilenet-emore":U1e,"insightface-mobilenet-swish":G1e,"nanodet-e":H1e,"nanodet-g":j1e,"nanodet-m":q1e,"nanodet-t":X1e};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ya={};async function Y1e(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function r9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function Pe(e){var u,p,c,d;let t=Xk(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:ny[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Xn.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)=>Y1e(h,m)},o=new jp(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 u3(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 ry="3.2.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 Q1e(){let e=St.gl;e&&(St.extensions=e.getSupportedExtensions())}function s9(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()),!dg(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{a0(2,St.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Vl(St.gl);Qo(St.name,()=>new Yp(r),St.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Zn("webgl").forEach(s=>{let i={...s,backendName:St.name};yn(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}Q1e();let a=nr(),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 i9(){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 age(){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 nge(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:ca(),kernelFunc:n=>De(()=>xe(n.inputs.a,te(ve(n.inputs.a,n.inputs.b),n.inputs.b)))};yn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:ca(),kernelFunc:n=>De(()=>we(te(Dp(n.inputs.a,n.inputs.b),n.inputs.b),Bu(n.inputs.a,n.inputs.b)))};yn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:ca(),kernelFunc:n=>De(()=>{let r=ca();$p("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return $p(r),s})};yn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var o9={};async function sc(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await age()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&ca()!==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")&&(s9(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 l0!="undefined")l0(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 $p(e.config.backend),await Fp()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(o9=JSON.parse(JSON.stringify(B().flags)))}if((ca()==="humangl"||ca()==="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))),ca(),e.config.debug){let s=B().flags,i={};for(let o of Object.keys(s))o9[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",ca(),"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)}lg(),i9(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=ca(),await ne.updateBackend(),nge(e.config)}return!0}function A0(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}};yn(n)}ne.kernels=Zn(ca()).map(a=>a.kernelName.toLowerCase())}var S0={};yr(S0,{all:()=>$ge,body:()=>v0,canvas:()=>_ge,face:()=>b0,gesture:()=>I0,hand:()=>w0,init:()=>py,object:()=>k0,options:()=>Ft,person:()=>Pge});var bn=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},ul=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),dl=(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 vn(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=dl(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 sy(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=dl(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function u9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){sy(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nic[e]),Fbe=sge.map(e=>ic[e]),Dbe=ige.map(e=>ic[e]);function ys(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var oge=[[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]],lge=[[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]],uge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],dge=[[474,475],[475,476],[476,477],[477,474]],pge=[[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]],hge=[[469,470],[470,471],[471,472],[472,469]],mge=[[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]],Obe={lips:ys(oge),leftEye:ys(lge),leftEyebrow:ys(uge),leftIris:ys(dge),rightEye:ys(pge),rightEyebrow:ys(cge),rightIris:ys(hge),faceOval:ys(mge)};var fge=[[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]],gge=[[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]],yge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],xge=[[474,475],[475,476],[476,477],[477,474]],Age=[[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]],bge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],vge=[[469,470],[470,471],[471,472],[472,469]],wge=[[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 xs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var kge={lips:xs(fge),leftEye:xs(gge),leftEyebrow:xs(yge),leftIris:xs(xge),rightEye:xs(Age),rightEyebrow:xs(bge),rightIris:xs(vge),faceOval:xs(wge)},Ige=Object.entries(kge).map(([e,t])=>t.map(a=>[a,e])).flat(),zbe=new Map(Ige),oc=[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],hl=[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],ml=[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 Sge(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]",ul(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",ul(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",ul(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",ul(e.rotation.gaze.bearing))),vn(t,a,e.box[0],e.box[1],rt)}function Cge(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 Tge(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]*ul(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*ul(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;`,lJ=` ${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 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]];ty(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]];ty(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function gge(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);ey(t,n,rt)}hge(e,t)}}function yge(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(yge(r,n),gge(r,n),mge(r,n),fge(r,n))}}function w0(e,t,a){var s,i;let n=Et(Dt,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)Yk(r,u,n)}}}function k0(e,t,a){var s,i;let n=Et(Dt,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,dr(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=ul(l[2],n),ur(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(Dt,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,dr(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(Dt,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 ys={face:`face + `);t.stroke(i),t.stroke(s)}}function Nge(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]];iy(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]];iy(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Rge(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);sy(t,n,rt)}Cge(e,t)}}function Ege(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(Ege(r,n),Rge(r,n),Tge(r,n),Nge(r,n))}}function v0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=bn(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),vn(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),vn(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)u9(r,u,n)}}}function w0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=bn(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),vn(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=dl(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),vn(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 k0(e,t,a){var s;let n=Et(Ft,a);if(!t||!e)return;let r=bn(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),vn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function I0(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=bn(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]),vn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var As={face:`face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -8637,7 +8637,7 @@ return a / b;`,lJ=` 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 sy=0;function Age(e,t,a){let n=Et(Dt,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;sly,kpt:()=>oy});var oy=["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"],ly={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,ml=224,Qk,wge=5,N0=[8,16,32,32,32];function kge(){let e=[],t=0;for(;ta.x)),y:Vt(e.map(a=>a.y))}}async function e9(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;ml=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&kn&&K("cached model:",kn.modelUrl);return kge(),kn}var Jk=[5,5];function Ige(e,t){return De(()=>{let a=Ca(e,12,1),n=Oe(a[0]),r=Oe(a[1]),s=Oe(a[2]),i=Oe(a[3]);n=we(ve(n,ml),t.x),r=we(ve(r,ml),t.y),s=te(ve(s,ml),Jk[0]),i=te(ve(i,ml),Jk[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 Sge(e,t,a,n){var u,p;let r=[],s={};s.boxes=Ige(e,Qk),s.scores=Wa(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 t9(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 Sge(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function xs(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 Ha,dy=256,uy=Number.MAX_SAFE_INTEGER,Cge={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},M0=[],As=[[0,0],[0,0],[0,0],[0,0]],n9=0,r9=e=>1-1/(1+Math.exp(e)),i9=e=>e9(e);async function o9(e){if(ne.initial&&(Ha=null),Ha)e.debug&&K("cached model:",Ha.modelUrl);else{Ha=await _e(e.body.modelPath);let t=Ha!=null&&Ha.executor?Object.values(Ha.modelSignature.inputs):void 0;dy=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ha}function s9(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];As=[[0,0],o,l,[0,0]],n.pad=or(n.cropped||e,As),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 Tge(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+As[2][0]+As[2][1])/t[0]-As[2][0]),Math.trunc(n.position[1]*(t[1]+As[1][0]+As[1][1])/t[1]-As[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 Nge(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 Rge(e,t,a){if(!(Ha!=null&&Ha.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ha==null?void 0:Ha.execute(e,Cge.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=xs(p,[a[0],a[1]]),d={};for(let[m,f]of Object.entries(ly)){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 py(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-n9,r=uy<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&M0!==null)uy++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=s9(e,224);l=await t9(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 my(e,t){if(!(ja!=null&&ja.executor))return[];let a=(t.object.skipTime||0)>ae()-u9,n=hy<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&cy.length>0?(hy++,cy):(hy=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[fl,fl]),o=t.object.enabled?ja==null?void 0:ja.execute(i,["tower_0/detections"]):null;u9=ae(),J(i);let l=await Ege(o,s,t);cy=l,r(l)}))}var _0={};xr(_0,{connected:()=>gy,kpt:()=>fy});var fy=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],gy={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,c9=0,_a={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},yy=Number.MAX_SAFE_INTEGER;async function h9(e){return ne.initial&&(Mt=null),Mt?e.debug&&K("cached model:",Mt.modelUrl):Mt=await _e(e.body.modelPath),Mt}async function Mge(e,t){let[a,n]=e.shape,r=Q(e,[n*a]),s=ga(r,0),i=(await s.data())[0];if(i>t){let o=sr(r,0),l=Bu(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 xy(e,t){if(!(Mt!=null&&Mt.executor)||!(Mt!=null&&Mt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-c9,n=yy<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(_a.keypoints).length>0?(yy++,[_a]):(yy=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)),c9=ae(),J(s),i){_a.keypoints.length=0;let c=Oe(i);J(i);let d=Ra(c,2);J(c);for(let h=0;h(t.body.minConfidence||0)&&_a.keypoints.push({score:Math.round(100*g)/100,part:fy[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))}_a.score=_a.keypoints.reduce((c,d)=>d.score>c?d.score:c,0);let o=_a.keypoints.map(c=>c.position[0]),l=_a.keypoints.map(c=>c.position[1]);_a.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=_a.keypoints.map(c=>c.positionRaw[0]),p=_a.keypoints.map(c=>c.positionRaw[1]);_a.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(gy)){let h=[];for(let m=0;my.part===d[m]),g=_a.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])}_a.annotations[c]=h}r([_a])}))}var nd=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],y9=(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}},Ay=(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=nd(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=nd(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])]}},x9=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}},by=[[1,0,0],[0,1,0],[0,0,1]],_ge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Pge=(e,t)=>_ge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var f9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],gl=(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=f9(t[0],t[1]),i=g9(s,r),o=f9(-t[0],-t[1]);return g9(i,o)},Fge=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-gl(t[0],a),-gl(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},Dge=(e,t)=>[gl(e,t[0]),gl(e,t[1])];function b9(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?A9(a,[0,0]):by,u=o?i.map(h=>[...Dge(h,l),h[2]]):i,p=o?Fge(n):by,c=P0(t),d=[gl(c,p[0]),gl(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 w9(e,t,a,n){let r=t.landmarks.length>=ay.count?ay.symmetryLine:dl.symmetryLine,s=0,i=by,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=Pge(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=A9(-s,u),o=Ay(t,c,[n,n]),J(c)}else o=Ay(t,a,[n,n]);else o=Ay(t,a,[n,n]);return[s,i,o]}var Oge=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]},k9=(e,t)=>{let a=Oge(e),n=nd(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 I9=6,zge=1.4,Bn,z0=null,bs=0,rd=null,S9=()=>bs;async function C9(e){var t;return ne.initial&&(Bn=null),Bn?e.debug&&K("cached model:",Bn.modelUrl):Bn=await _e((t=e.face.detector)==null?void 0:t.modelPath),bs=Bn.executor&&Bn.inputs[0].shape?Bn.inputs[0].shape[2]:256,rd=Ge(bs,"int32"),z0=Yn(b9(bs)),Bn}function Lge(e){if(!z0||!rd)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,rd),t.centersNormalized=ve(t.centers,rd),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,rd),t.endNormalized=te(t.ends,rd);let a=Wu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function T9(e,t){var o,l,u,p,c,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[bs,bs]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf05);let n=Bn==null?void 0:Bn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let h=n.sort((m,f)=>m.size-f.size);a.concat384=lt([h[0],h[2]],2),a.concat512=lt([h[1],h[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=Lge(a.batch),a.logits=Fe(a.batch,[0,0],[-1,1]),a.sigmoid=Wa(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 h=0;h(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let f={};f.bbox=Fe(a.boxes,[r[h],0],[1,-1]),f.slice=Fe(a.batch,[r[h],I9-1],[1,-1]),f.squeeze=Oe(f.slice),f.landmarks=Q(f.squeeze,[I9,-1]);let g=await f.bbox.data(),y={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await f.landmarks.array(),confidence:m};f.anchor=Fe(z0,[r[h],0],[1,2]);let x=await f.anchor.data(),A=y9(y,[(e.shape[2]||0)/bs,(e.shape[1]||0)/bs],x),b=D0(A,t.face.scale||zge),w=O0(b);w.size[0]>(((c=t.face.detector)==null?void 0:c.minSize)||0)&&w.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(w),Object.keys(f).forEach(I=>J(f[I]))}}return Object.keys(a).forEach(h=>J(a[h])),s}var rn,vs=0,Wge=2.3,wy=Pn.leftEyeLower0,ky=Pn.rightEyeLower0,sd={leftBounds:[wy[0],wy[wy.length-1]],rightBounds:[ky[0],ky[ky.length-1]]},id={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function _9(e){var t,a;return ne.initial&&(rn=null),rn?e.debug&&K("cached model:",rn.modelUrl):rn=await _e((t=e.face.iris)==null?void 0:t.modelPath),vs=rn!=null&&rn.executor&&((a=rn.inputs)!=null&&a[0].shape)?rn.inputs[0].shape[2]:0,vs===-1&&(vs=64),rn}function L0(e,t,a,n){for(let r=0;r{let t=e[sd.leftBounds[0]][2],a=e[sd.rightBounds[0]][2];return t-a},R9=(e,t,a,n,r,s=!1)=>{let i=O0(D0(x9([e[a],e[n]]),Wge)),o=nd(i),l=fe.cropAndResize(t,[[i.startPoint[1]/r,i.startPoint[0]/r,i.endPoint[1]/r,i.endPoint[0]/r]],[0],[vs,vs]);if(s&&ne.kernels.includes("flipleftright")){let u=fe.flipLeftRight(l);J(l),l=u}return{box:i,boxSize:o,crop:l}},E9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[Pn[`${a}EyeUpper0`][id.upperCenter]][2],r=e[Pn[`${a}EyeLower0`][id.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 P9(e,t,a){if(!(rn!=null&&rn.executor))return e;let{box:n,boxSize:r,crop:s}=R9(e,t,sd.leftBounds[0],sd.leftBounds[1],a,!0),{box:i,boxSize:o,crop:l}=R9(e,t,sd.rightBounds[0],sd.rightBounds[1],a,!0),u=lt([s,l]);J(s),J(l);let p=rn.execute(u);J(u);let c=await p.data();J(p);let d=c.slice(0,id.numCoordinates*3),{rawCoords:h,iris:m}=E9(d,n,r,!0),f=c.slice(id.numCoordinates*3),{rawCoords:g,iris:y}=E9(f,i,o,!1),x=Bge(e);Math.abs(x)<30?(L0(e,h,"left",null),L0(e,g,"right",null)):x<1?L0(e,h,"left",["EyeUpper0","EyeLower0"]):L0(e,g,"right",["EyeUpper0","EyeLower0"]);let A=M9(e,m,"left"),b=M9(e,y,"right");return e.concat(A).concat(b)}async function F9(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=cl.reduce((f,g)=>f+=e[g][2],0)/cl.length;for(let f=0;ff+=e[g][2],0)/hl.length;for(let f=0;fae()-pr.timestamp,n=pr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||pr.boxes.length===0?(pr.boxes=await T9(e,t),pr.timestamp=ae(),pr.skipped=0):pr.skipped++;let r=[],s=[],i=0,o=uc;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(dl))I.annotations[T]=[I.mesh[dl[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(P=>P.shape[P.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(P=>[P[0]/(e.shape[2]||1),P[1]/(e.shape[1]||1),(P[2]||0)/o]);for(let P of Object.keys(dl))I.annotations[P]=[I.mesh[dl[P]]]}}else{let P=T.find(O=>O.shape[O.shape.length-1]===1404),E=Q(P,[-1,3]),C=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?C=await F9(C,T):(g=t.face.iris)!=null&&g.enabled&&(C=await P9(C,I.tensor,uc)),I.mesh=v9(C,A,b,w,uc),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(Pn))I.annotations[O]=Pn[O].map(B=>I.mesh[B]);I.score=I.faceScore;let _={...k9(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 pr.boxes=s,r}async function O9(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),uc=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 z9=pl,L9=oc;var Cy=[],ra,W0=[],W9=0,B9=0,Sy=Number.MAX_SAFE_INTEGER,Ty=!1;async function V9(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),Ty=((n=(a=ra==null?void 0:ra.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Ty?Cy=["angry","disgust","fear","happy","neutral","sad","surprise"]:Cy=["angry","disgust","fear","happy","sad","surprise","neutral"]),ra}async function Ny(e,t,a,n){var i,o;if(!ra)return[];let r=Sy<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-B9;return t.skipAllowed&&s&&r&&W9===n&&W0[a]&&W0[a].length>0?(Sy++,W0[a]):(Sy=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);Ty?(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)),B9=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:Cy[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}W0[a]=u,W9=n,l(u)}))}var sa,ws=[],G9=0,H9=0,Ry=Number.MAX_SAFE_INTEGER;async function j9(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 Uge(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 Ey(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=Ry<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-G9;return t.skipAllowed&&s&&i&&H9===n&&((u=ws==null?void 0:ws[a])==null?void 0:u.age)>0&&((p=ws==null?void 0:ws[a])==null?void 0:p.genderScore)>0?(Ry++,ws[a]):(Ry=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=Uge(e,t),m=sa==null?void 0:sa.execute(h);G9=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=sr(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))}ws[a]=r,H9=n,c(r)}))}var od=.1,My=.5;function Gge(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 X9(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 Pn.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]});od&&od>0&&(r=r.map(i=>({x:i.x>.5?i.x+od:i.x-od,y:i.y>.5?i.y+od:i.y-od})));for(let i=0;iae()-Y9,s=_y<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&K9===n&&B0[a]?(_y++,B0[a]):(_y=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,K9=n,Y9=ae(),J([u,p]),l(B0[a])}))}var oa,V0=[],$y=Number.MAX_SAFE_INTEGER,Q9=0,eI=0;async function tI(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 Fy(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()-eI,s=$y<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&Q9===n&&V0[a]?($y++,V0[a]):($y=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,Q9=n,eI=ae(),J([u,p]),l(V0[a])}))}var $n,Dy=[],jge=["white","black","asian","indian","other"],qge=[15,23,28,35.5,45.5,55.5,65],nI=0,rI=0,Oy=Number.MAX_SAFE_INTEGER;async function sI(e){var t;return ne.initial&&($n=null),$n?e.debug&&K("cached model:",$n.modelUrl):$n=await _e((t=e.face.gear)==null?void 0:t.modelPath),$n}async function zy(e,t,a,n){var i,o;if(!$n)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Oy<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-rI;return t.skipAllowed&&s&&r&&nI===n&&Dy[a]?(Oy++,Dy[a]):(Oy=0,new Promise(async l=>{var y,x,A,b;if(!($n!=null&&$n.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],[$n.inputs[0].shape[2],$n.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]=$n.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:jge[w]});c.race.sort((w,I)=>I.score-w.score);let f=Array.from(await u.age.data()).map((w,I)=>[qge[I],w]).sort((w,I)=>I[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),Dy[a]=c,nI=n,rI=ae(),l(c)}))}var Pa,U0=[],oI=0,lI=0,Ly=Number.MAX_SAFE_INTEGER;async function uI(e){return ne.initial&&(Pa=null),Pa?e.debug&&K("cached model:",Pa.modelUrl):Pa=await _e(e.face.ssrnet.modelPathAge),Pa}async function Wy(e,t,a,n){var i,o,l,u;if(!Pa)return{age:0};let r=Ly<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-lI;return t.skipAllowed&&r&&s&&oI===n&&((l=U0[a])!=null&&l.age)&&((u=U0[a])==null?void 0:u.age)>0?(Ly++,U0[a]):(Ly=0,new Promise(async p=>{var h,m,f;if(!(Pa!=null&&Pa.inputs)||!Pa.inputs[0]||!Pa.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],[Pa.inputs[0].shape[2],Pa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[Pa.inputs[0].shape[2],Pa.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=Pa.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,oI=n,lI=ae(),p(d)}))}var Aa,G0=[],pI=0,cI=0,By=Number.MAX_SAFE_INTEGER,Vy=[.2989,.587,.114];async function hI(e){var t;return ne.initial&&(Aa=null),Aa?e.debug&&K("cached model:",Aa.modelUrl):Aa=await _e((t=e.face.ssrnet)==null?void 0:t.modelPathGender),Aa}async function Uy(e,t,a,n){var i,o,l,u;if(!Aa)return{gender:"unknown",genderScore:0};let r=By<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-cI;return t.skipAllowed&&r&&s&&pI===n&&((l=G0[a])!=null&&l.gender)&&((u=G0[a])==null?void 0:u.genderScore)>0?(By++,G0[a]):(By=0,new Promise(async p=>{var m,f,g;if(!(Aa!=null&&Aa.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],[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[Aa.inputs[0].shape[2],Aa.inputs[0].shape[1]],!1);c.enhance=De(()=>{var x,A;let y;if(((A=(x=Aa==null?void 0:Aa.inputs)==null?void 0:x[0].shape)==null?void 0:A[3])===1){let[b,w,I]=Ca(c.resize,3,3),T=te(b,Vy[0]),N=te(w,Vy[1]),M=te(I,Vy[2]),P=Fh([T,N,M]);y=te(xe(P,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=Aa.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,pI=n,cI=ae(),p(d)}))}var sn,Gy=[],fI=0,gI=0,yI=Number.MAX_SAFE_INTEGER;async function xI(e){var t;return ne.initial&&(sn=null),sn?e.debug&&K("cached model:",sn.modelUrl):sn=await _e((t=e.face.mobilefacenet)==null?void 0:t.modelPath),sn}async function Hy(e,t,a,n){var i,o;if(!(sn!=null&&sn.executor))return[];let r=yI<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-gI;return t.skipAllowed&&s&&r&&fI===n&&Gy[a]?(yI++,Gy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.mobilefacenet)!=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]))}Gy[a]=u,fI=n,gI=ae(),l(u)})}var on,jy=[],bI=0,vI=0,wI=Number.MAX_SAFE_INTEGER;async function kI(e){return ne.initial&&(on=null),on?e.debug&&K("cached model:",on.modelUrl):on=await _e(e.face.insightface.modelPath),on}async function qy(e,t,a,n){var i,o;if(!(on!=null&&on.executor))return[];let r=wI<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-vI;return t.skipAllowed&&s&&r&&bI===n&&jy[a]?(wI++,jy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.insightface)!=null&&p.enabled&&(on!=null&&on.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[on.inputs[0].shape[2],on.inputs[0].shape[1]],!1),c.data=on.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}jy[a]=u,bI=n,vI=ae(),l(u)})}var Xge=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}},SI=(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,P,E;return A<1?A>-1?(E=Math.asin(A),P=Math.atan2(-I,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,P=-Math.atan2(T,N),M=0):(E=Math.PI/2,P=Math.atan2(T,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN(P)&&(P=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-P,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?Xge(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:m}};function CI(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 Xy=async(e,t)=>{var m,f,g,y,x,A,b,w,I,T,N,M,P,E,C,_,O,B,F,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await D9(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?SI(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?Ny(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 Ny(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?Py(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 Py(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?Fy(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 Fy(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?zy(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 zy(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?Wy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Uy(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 Wy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(P=e.config.face.ssrnet)!=null&&P.enabled?await Uy(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?Hy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),o=(C=e.config.face.mobilefacenet)!=null&&C.enabled?await Hy(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=Ey(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Ey(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:"),(B=e.config.face.ssrnet)!=null&&B.enabled&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),(F=e.config.face.gear)!=null&&F.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?CI(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 $a={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=>$a.nameMapping[e],getPoints:e=>$a.pointsMapping[e]},Is={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Is.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]},ks=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:Vn,index:Pr,middle:$r,ring:yl,pinky:xl}=$a,{none:Un,half:Yge,full:Gn}=Is,{verticalUp:ld,verticalDown:B7e,horizontalLeft:Ky,horizontalRight:Zge,diagonalUpRight:Jge,diagonalUpLeft:ud,diagonalDownRight:V7e,diagonalDownLeft:U7e}=_t,Ss=new ks("thumbs up");Ss.curl(Vn,Un,1);Ss.direction(Vn,ld,1);Ss.direction(Vn,ud,.25);Ss.direction(Vn,Jge,.25);for(let e of[$a.index,$a.middle,$a.ring,$a.pinky])Ss.curl(e,Gn,1),Ss.direction(e,Ky,1),Ss.direction(e,Zge,1);var jt=new ks("victory");jt.curl(Vn,Yge,.5);jt.curl(Vn,Un,.5);jt.direction(Vn,ld,1);jt.direction(Vn,ud,1);jt.curl(Pr,Un,1);jt.direction(Pr,ld,.75);jt.direction(Pr,ud,1);jt.curl($r,Un,1);jt.direction($r,ld,1);jt.direction($r,ud,.75);jt.curl(yl,Gn,1);jt.direction(yl,ld,.2);jt.direction(yl,ud,1);jt.direction(yl,Ky,.2);jt.curl(xl,Gn,1);jt.direction(xl,ld,.2);jt.direction(xl,ud,1);jt.direction(xl,Ky,.2);jt.weight(Pr,2);jt.weight($r,2);var Cs=new ks("point");Cs.curl(Vn,Gn,1);Cs.curl(Pr,Un,.5);Cs.curl($r,Gn,.5);Cs.curl(yl,Gn,.5);Cs.curl(xl,Gn,.5);Cs.weight(Pr,2);Cs.weight($r,2);var Ts=new ks("middle finger");Ts.curl(Vn,Un,1);Ts.curl(Pr,Gn,.5);Ts.curl($r,Gn,.5);Ts.curl(yl,Gn,.5);Ts.curl(xl,Gn,.5);Ts.weight(Pr,2);Ts.weight($r,2);var dd=new ks("open palm");dd.curl(Vn,Un,.75);dd.curl(Pr,Un,.75);dd.curl($r,Un,.75);dd.curl(yl,Un,.75);dd.curl(xl,Un,.75);var TI=[Ss,jt,Cs,Ts,dd];var Qge=.7,Al={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 NI(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 EI(e,t){if(!e||!t)return[0,0];let a=NI(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=NI(e[1],e[2],t[1],t[2]);return[a,n]}function RI(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 e3e(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>Al.NO_CURL_START_LIMIT?y=Is.none:g>Al.HALF_CURL_START_LIMIT?y=Is.half:y=Is.full,y}function MI(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 _I(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 t3e(e,t,a,n,r,s,i,o){let l,u=_I(e,t,a,n),p=MI(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+=Al.DISTANCE_VOTE_POWER:f>.66?h+=Al.DISTANCE_VOTE_POWER:m+=Al.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 P=EI([b,w],[I,T]),E=RI(P,Al.TOTAL_ANGLE_VOTE_POWER);d+=E[0],h+=E[1],m+=E[2];for(let _ of n){let O=RI(_,Al.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],m+=O[2]}let C;return d===Math.max(d,h,m)?C=_I(l,o,u,c):m===Math.max(h,m)?C=MI(s,r,i,p):C=t3e(l,o,u,c,s,r,i,p),C}function PI(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of $a.all){let i=$a.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=EI(p,c),h=d[0],m=d[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of $a.all){let i=s===$a.thumb?1:0,o=$a.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=e3e(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=PI(e),a={};for(let n of $a.all)a[$a.getName(n)]={curl:Is.getName(t.curls[n]),direction:_t.getName(t.directions[n])};return a}function $I(e){let t=[];if(!e||e.length===0)return t;let a=PI(e);for(let n of TI){let r=n.matchAgainst(a.curls,a.directions);r>=Qge&&t.push({name:n.name,confidence:r})}return t}var FI=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},DI=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},OI=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},zI=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=dc(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=dc(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 r3e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function UI(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return r3e(a)}var LI=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ns(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Yn(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=Vt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Vt([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=Wu([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=Wa(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=VI(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 l3e=5,qI=1.65,XI=[0,5,9,13,17,1,2],u3e=0,d3e=2,KI=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=>Jy([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return q0(X0(r),l3e)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=q0(X0(a),qI);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=Zy(n,[0,0]),u=o.map(h=>[...Jy(h,l),h[2]]),p=GI(r),c=[...dc(a),1],d=[Ns(c,p[0]),Ns(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()-KI,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),qI),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 YI={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]},bl,vl,Qy;function c3e(){let e=bl?new K0(bl):void 0;e&&vl&&(Qy=new Y0(e,vl))}async function ex(e,t){Qy||c3e();let a=await Qy.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 ZI(e){var t;return ne.initial&&(bl=null),bl?e.debug&&K("cached model:",bl.modelUrl):bl=await _e((t=e.hand.detector)==null?void 0:t.modelPath),bl}async function JI(e){var t;return ne.initial&&(vl=null),vl?e.debug&&K("cached model:",vl.modelUrl):vl=await _e((t=e.hand.skeleton)==null?void 0:t.modelPath),vl}var zt=[null,null],h3e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Rs=[[0,0],[0,0]],m3e=["hand","fist","pinch","point","face","tip","pinchtip"],eS=4,tS=1.6,f3e=512,g3e=1.4,Z0=Number.MAX_SAFE_INTEGER,tx=0,Fr=[0,0],Ot={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 nS(e){var t;if(ne.initial&&(zt[0]=null),zt[0])e.debug&&K("cached model:",zt[0].modelUrl);else{b0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),zt[0]=await _e((t=e.hand.detector)==null?void 0:t.modelPath);let a=zt[0].executor?Object.values(zt[0].modelSignature.inputs):void 0;Rs[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Rs[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return zt[0]}async function rS(e){var t;if(ne.initial&&(zt[1]=null),zt[1])e.debug&&K("cached model:",zt[1].modelUrl);else{zt[1]=await _e((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=zt[1].executor?Object.values(zt[1].modelSignature.inputs):void 0;Rs[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Rs[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return zt[1]}async function y3e(e,t){let a=[];if(!e||!zt[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,f3e),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 zt[0].executeAsync(n.cast,h3e),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Ra(n.scores,1);J(o[eS]),o.splice(eS,1),n.filtered=ca(o,1),J(o),n.max=ga(n.filtered,1),n.argmax=sr(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,g3e),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 ax(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&&zt[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],[Rs[1][0],Rs[1][1]],"bilinear"),r.div=ve(r.crop,ze.tf255),[r.score,r.keypoints]=zt[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]/Rs[1][1],c[1]/Rs[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 nx(e,t){var r,s;if(!((r=zt[0])!=null&&r.executor)||!((s=zt[1])!=null&&s.executor)||!zt[0].inputs[0].shape||!zt[1].inputs[0].shape)return[];Fr=[e.shape[2]||0,e.shape[1]||0],Z0++;let a=(t.hand.skipTime||0)>ae()-tx,n=Z0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Ot.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-tx,l=Z0<3*(t.hand.skipFrames||0);t.skipAllowed&&Ot.hands.length===t.hand.maxDetected?Ot.hands=await Promise.all(Ot.boxes.map(p=>ax(e,p,t))):t.skipAllowed&&o&&l&&Ot.hands.length>0?Ot.hands=await Promise.all(Ot.boxes.map(p=>ax(e,p,t))):(Ot.boxes=await y3e(e,t),tx=ae(),Ot.hands=await Promise.all(Ot.boxes.map(p=>ax(e,p,t))),Z0=0);let u=[...Ot.boxes];if(Ot.boxes.length=0,t.cacheSensitivity>0)for(let p=0;p.05&&c.box[3]/(e.shape[1]||1)>.05&&Ot.hands[p].fingerScore&&Ot.hands[p].fingerScore>(t.hand.minConfidence||0)){let d=R0(c.box,tS),h=R0(c.boxRaw,tS);Ot.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 pc={};xr(pc,{connected:()=>Q0,horizontal:()=>rx,kpt:()=>J0,relative:()=>ix,vertical:()=>sx});var J0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],rx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],sx=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],ix=[[["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=cr(),ox=0;function iS(e,t){var i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,P,E,C,_,O,B;let a=ae();if(!e)return cr();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 F=0;F((r-1)*Ae.body[F].box[X]+Z)/r),G=e.body[F].boxRaw.map((Z,X)=>((r-1)*Ae.body[F].boxRaw[X]+Z)/r),q=e.body[F].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Re,Le,Xe;return{score:Z.score,part:Z.part,position:[Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[F].keypoints[X]?((r-1)*(Ae.body[F].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[F].keypoints[X]?((r-1)*(((re=Ae.body[F].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[F].keypoints[X]?((r-1)*(((ie=Ae.body[F].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[F].keypoints[X]?((r-1)*(((Re=Ae.body[F].keypoints[X].distance)==null?void 0:Re[2])||0)+(((Le=Z.distance)==null?void 0:Le[2])||0))/r:(Xe=Z.distance)==null?void 0:Xe[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=pc);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[F]={...e.body[F],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 F=0;F((r-1)*Ae.hand[F].box[Z]+V)/r),G=e.hand[F].boxRaw.map((V,Z)=>((r-1)*Ae.hand[F].boxRaw[Z]+V)/r);Ae.hand[F].keypoints.length!==e.hand[F].keypoints.length&&(Ae.hand[F].keypoints=e.hand[F].keypoints);let q=e.hand[F].keypoints&&e.hand[F].keypoints.length>0?e.hand[F].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[F].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[F].annotations).length!==Object.keys(e.hand[F].annotations).length)Ae.hand[F].annotations=e.hand[F].annotations,H=Ae.hand[F].annotations;else if(e.hand[F].annotations)for(let V of Object.keys(e.hand[F].annotations))H[V]=(c=(p=(u=e.hand[F])==null?void 0:u.annotations)==null?void 0:p[V])!=null&&c[0]?e.hand[F].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[F].annotations[V][X][ee]+re)/r)):null;Ae.hand[F]={...e.hand[F],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 F=0;F((r-1)*Ae.face[F].box[V]+H)/r),G=e.face[F].boxRaw.map((H,V)=>((r-1)*Ae.face[F].boxRaw[V]+H)/r),q=e.face[F].annotations;if(Object.keys(Ae.face[F].annotations).length!==Object.keys(e.face[F].annotations).length)Ae.face[F].annotations=e.face[F].annotations,q=Ae.face[F].annotations;else if(e.face[F].annotations)for(let H of Object.keys(e.face[F].annotations))q[H]=(m=(h=(d=e.face[F])==null?void 0:d.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[F].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[F].annotations[H][Z][re]+X)/r)):null;if(e.face[F].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[F].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[F].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[F].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[F].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((T=(I=e.face[F].rotation)==null?void 0:I.angle)==null?void 0:T.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[F].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=(P=e.face[F].rotation)==null?void 0:P.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((C=Ae.face[F].rotation)==null?void 0:C.gaze.bearing)||0)+(((_=e.face[F].rotation)==null?void 0:_.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[F].rotation)==null?void 0:O.gaze.strength)||0)+(((B=e.face[F].rotation)==null?void 0:B.gaze.strength)||0))/r},Ae.face[F]={...e.face[F],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[F]={...e.face[F],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 F=0;F((r-1)*Ae.object[F].box[H]+q)/r),G=e.object[F].boxRaw.map((q,H)=>((r-1)*Ae.object[F].boxRaw[H]+q)/r);Ae.object[F]={...e.object[F],box:U,boxRaw:G}}if(e.persons){let F=e.persons;if(!Ae.persons||F.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify(F));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 ox=ne.perfadd?ox+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:ox}),Ae}var ba;async function lx(e){return!ba||ne.initial?ba=await _e(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function oS(e,t){var r;if(ba||(ba=await lx(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.bgRaw,a.fgRaw]=Ra(a.squeeze,2),a.fg=Vh(a.fgRaw),a.mul=te(a.fg,ze.tf255),a.expand=Bt(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={};xr(em,{distance:()=>ux,find:()=>b3e,similarity:()=>A3e});function ux(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 A3e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=ux(e,t,a);return uS(n,a.order||2,a.min||0,a.max||1)}function b3e(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;imc,validateModel:()=>om});var dS=.005,ln={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function dx(e){for(let t of rx){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 pS(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=or(e,ln.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 hS(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]+ln.padding[2][0]+ln.padding[2][1])/t[0]-ln.padding[2][0],n.position[1]*(t[1]+ln.padding[1][0]+ln.padding[1][1])/t[1]-ln.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=xs(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var qt,tm=0,px=Number.MAX_SAFE_INTEGER,wl={boxes:[],bodies:[],last:0};async function mS(e){var t;return ne.initial&&(qt=null),qt?e.debug&&K("cached model:",qt.modelUrl):(b0(["size"],e),qt=await _e(e.body.modelPath)),tm=qt!=null&&qt.executor&&((t=qt==null?void 0:qt.inputs)!=null&&t[0].shape)?qt.inputs[0].shape[2]:0,tm<64&&(tm=256),W().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&W().set("WEBGL_USE_SHAPES_UNIFORMS",!1),qt}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=xs(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 dx(u),i.push(u),i}function k3e(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[51+1],s[51+0],s[51+3]-s[51+1],s[51+2]-s[51+0]],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};dx(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 cx(e,t){var r;if(!(qt!=null&&qt.executor)||!((r=qt==null?void 0:qt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(wl.boxes.length=0),px++;let a=(t.body.skipTime||0)>ae()-wl.last,n=px<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?wl.bodies:new Promise(async s=>{let i={};px=0,i.input=cS(e,tm),i.res=qt==null?void 0:qt.execute(i.input),wl.last=ae();let o=await i.res.array();wl.bodies=i.res.shape[2]===17?w3e(o,t,e):k3e(o,t,e);for(let l of wl.bodies)hS(l,[e.shape[2]||1,e.shape[1]||1]),pS(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(wl.bodies)})}var Fn,am=[],gS=0,hx=Number.MAX_SAFE_INTEGER,rm=0,nm=2.5;async function yS(e){if(!Fn||ne.initial){Fn=await _e(e.object.modelPath);let t=Fn!=null&&Fn.executor?Object.values(Fn.modelSignature.inputs):void 0;rm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",Fn.modelUrl);return Fn}async function I3e(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)===ad.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(F=>F*(d/c/s)),[M,P]=[I-nm/c*N[0],T-nm/c*N[1]],[E,C]=[I+nm/c*N[2]-M,T+nm/c*N[3]-P],_=[M,P,E,C];_=_.map(F=>Math.max(0,Math.min(F,1)));let O=[_[0]*t[0],_[1]*t[1],_[2]*t[0],_[3]*t[1]],B={id:n++,score:Math.round(100*w)/100,class:b+1,label:ad[b].label,box:O.map(F=>Math.trunc(F)),boxRaw:_};r.push(B)}}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 mx(e,t){if(!(Fn!=null&&Fn.executor))return[];let a=(t.object.skipTime||0)>ae()-gS,n=hx<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&am.length>0?(hx++,am):(hx=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=Ys(o,[0,3,1,2]),u;t.object.enabled&&(u=Fn.execute(l)),gS=ae();let p=await I3e(u,s,t);am=p,J([i,o,l,...u]),r(p)}))}var hc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],S3e=hc.length,cc=hc.reduce((e,t,a)=>(e[t]=a,e),{}),C3e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],F6e=C3e.map(([e,t])=>[cc[e],cc[t]]),AS=[["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 bS(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 vS(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 wS(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function xx(e,t){return{x:e.x+t.x,y:e.y+t.y}}var un,N3e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],im=1,pd=16,R3e=50**2;function kS(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:yx(Math.round(y.y/pd),0,x-1),x:yx(Math.round(y.x/pd),0,A-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),m=xx(t.position,d);for(let y=0;y[cc[d],cc[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=gx(e.part,pd,a);p[e.part.id]={score:e.score,part:hc[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]=kS(d,p[h],m,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function _3e(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?wS(a,t,s.y,s.x)<=R3e:!1})}function P3e(e,t){return t.reduce((n,{position:r,score:s},i)=>(IS(e,r,i)||(n+=s),n),0)/t.length}function $3e(e,t,a,n,r,s){let i=[],o=_3e(s,t);for(;i.lengthh.score>s);let c=P3e(i,p),d=bS(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function Ax(e,t){if(!(un!=null&&un.executor))return[];let a=De(()=>{if(!un.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[un.inputs[0].shape[2],un.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=un.execute(o,N3e).map(p=>Oe(p,[0]));return u[1]=Wa(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)J(i);let r=$3e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return un.inputs[0].shape?vS(r,[e.shape[1],e.shape[2]],[un.inputs[0].shape[2],un.inputs[0].shape[1]]):[]}async function SS(e){return!un||ne.initial?un=await _e(e.body.modelPath):e.debug&&K("cached model:",un.modelUrl),un}var hr,F3e=["fgr","pha","r1o","r2o","r3o","r4o"],Xt={},vx=0;function NS(e){J([Xt.r1i,Xt.r2i,Xt.r3i,Xt.r4i,Xt.downsample_ratio]),Xt.r1i=Ve(0),Xt.r2i=Ve(0),Xt.r3i=Ve(0),Xt.r4i=Ve(0),vx=e.segmentation.ratio||.5,Xt.downsample_ratio=Ve(vx)}async function wx(e){return!hr||ne.initial?hr=await _e(e.segmentation.modelPath):e.debug&&K("cached model:",hr.modelUrl),NS(e),hr}var TS=e=>De(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function bx(e,t){let a=e?TS(e):ir([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?TS(t):ir([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function D3e(e){return De(()=>{let t={};return t.unstack=Ra(e,-1),t.concat=lt(t.unstack,1),t.split=Ca(t.concat,4,1),t.stack=lt(t.split,2),t.squeeze=Oe(t.stack,[0]),t.expand=Bt(t.squeeze,-1),t.add=we(t.expand,1),t.mul=te(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=qr(t.cast,[1,1,3]),t.alpha=ir([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),lt([t.tile,t.alpha],-1)})}async function RS(e,t){if(hr||(hr=await wx(t)),!(hr!=null&&hr.executor))return null;Xt.src=ve(e,255),vx!==t.segmentation.ratio&&NS(t);let[a,n,r,s,i,o]=await hr.executeAsync(Xt,F3e),l;switch(t.segmentation.mode||"default"){case"default":l=bx(a,n);break;case"alpha":l=bx(null,n);break;case"foreground":l=bx(a,null);break;case"state":l=D3e(r);break;default:l=Ve(0)}return J([Xt.src,a,n,Xt.r1i,Xt.r2i,Xt.r3i,Xt.r4i]),[Xt.r1i,Xt.r2i,Xt.r3i,Xt.r4i]=[r,s,i,o],l}var va;async function kx(e){return!va||ne.initial?va=await _e(e.segmentation.modelPath):e.debug&&K("cached model:",va.modelUrl),va}async function MS(e,t){var r;if(va||(va=await kx(t)),!(va!=null&&va.executor)||!((r=va==null?void 0:va.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[va.inputs[0].shape?va.inputs[0].shape[1]:0,va.inputs[0].shape?va.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=va.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 mc=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(xa))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(xa).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(xa)}}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,P,E,C,_;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?C9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?Z9(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tI(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?j9(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?V9(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?_9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?O9(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)!=null&&p.enabled)&&!this.models.gear?sI(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?uI(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)!=null&&d.enabled)&&!this.models.ssrnetgender?hI(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?xI(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?kI(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?o9(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?i9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?h9(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"))?SS(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"))?nS(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"))?rS(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=ZI(this.instance.config),a.handskeleton=JI(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?d9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((P=this.instance.config.object.modelPath)!=null&&P.includes("nanodet"))?yS(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?kx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((C=this.instance.config.segmentation.modelPath)!=null&&C.includes("meet"))?lx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((_=this.instance.config.segmentation.modelPath)!=null&&_.includes("rvm"))?wx(this.instance.config):null;for(let[O,B]of Object.entries(a))B!=null&&B.then&&B.then(F=>this.models[O]=F);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(xa).find(r=>r.startsWith(a.name));n&&(a.size=xa[n].sizeLoadedWeights,a.url=xa[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 PS(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 dy=0;function Pge(e,t,a){let n=Et(Ft,a);if(!t||!e)return;let r=bn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;shy,kpt:()=>cy});var cy=["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"],hy={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 wn,fl=224,c9,Fge=5,T0=[8,16,32,32,32];function Dge(){let e=[],t=0;for(;ta.x)),y:Bt(e.map(a=>a.y))}}async function h9(e){if(ne.initial&&(wn=null),!wn&&e.body.detector&&e.body.detector.modelPath){wn=await Pe(e.body.detector.modelPath);let t=wn!=null&&wn.executor?Object.values(wn.modelSignature.inputs):void 0;fl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&wn&&K("cached model:",wn.modelUrl);return Dge(),wn}var p9=[5,5];function Oge(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,fl),t.x),r=we(ve(r,fl),t.y),s=te(ve(s,fl),p9[0]),i=te(ve(i,fl),p9[1]);let o=xe(n,ve(s,2)),l=xe(r,ve(i,2)),u=we(o,s),p=we(l,i);return pa([o,l,u,p],1)})}async function zge(e,t,a,n){var u,p;let r=[],s={};s.boxes=Oge(e,c9),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 m9(e,t,a){let n={};n.res=wn==null?void 0:wn.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 zge(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function bs(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 f9(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 N0(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,fy=256,my=Number.MAX_SAFE_INTEGER,Lge={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},E0=[],vs=[[0,0],[0,0],[0,0],[0,0]],g9=0,y9=e=>1-1/(1+Math.exp(e)),A9=e=>h9(e);async function b9(e){if(ne.initial&&(Ua=null),Ua)e.debug&&K("cached model:",Ua.modelUrl);else{Ua=await Pe(e.body.modelPath);let t=Ua!=null&&Ua.executor?Object.values(Ua.modelSignature.inputs):void 0;fy=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ua}function x9(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];vs=[[0,0],o,l,[0,0]],n.pad=ir(n.cropped||e,vs),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 Wge(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+vs[2][0]+vs[2][1])/t[0]-vs[2][0]),Math.trunc(n.position[1]*(t[1]+vs[1][0]+vs[1][1])/t[1]-vs[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 Bge(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 Vge(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,Lge.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=bs(p,[a[0],a[1]]),d={};for(let[m,f]of Object.entries(hy)){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 gy(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-g9,r=my<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&E0!==null)my++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=x9(e,224);l=await m9(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 Ay(e,t){if(!(Ga!=null&&Ga.executor))return[];let a=(t.object.skipTime||0)>ae()-w9,n=xy<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&yy.length>0?(xy++,yy):(xy=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[gl,gl]),o=t.object.enabled?Ga==null?void 0:Ga.execute(i,["tower_0/detections"]):null;w9=ae(),J(i);let l=await Uge(o,s,t);yy=l,r(l)}))}var M0={};yr(M0,{connected:()=>vy,kpt:()=>by});var by=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],vy={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,S9=0,Ma={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},wy=Number.MAX_SAFE_INTEGER;async function C9(e){return ne.initial&&(Mt=null),Mt?e.debug&&K("cached model:",Mt.modelUrl):Mt=await Pe(e.body.modelPath),Mt}async function Gge(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=Bu(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 ky(e,t){if(!(Mt!=null&&Mt.executor)||!(Mt!=null&&Mt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-S9,n=wy<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ma.keypoints).length>0?(wy++,[Ma]):(wy=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)),S9=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:by[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(vy)){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 ad=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],$0=(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],E9=(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}},Iy=(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},F0=(e,t)=>{let a=P0(e),n=ad(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}},D0=e=>{let t=P0(e),a=ad(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])]}},M9=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}},Sy=[[1,0,0],[0,1,0],[0,0,1]],Hge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),jge=(e,t)=>Hge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var N9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],yl=(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=N9(t[0],t[1]),i=R9(s,r),o=N9(-t[0],-t[1]);return R9(i,o)},Xge=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-yl(t[0],a),-yl(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},Kge=(e,t)=>[yl(e,t[0]),yl(e,t[1])];function _9(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},a=[];for(let n=0;n[s[0]/r*(h[0]-r/2),s[1]/r*(h[1]-r/2),h[2]||0]),o=a&&a!==0&&Math.abs(a)>.2,l=o?P9(a,[0,0]):Sy,u=o?i.map(h=>[...Kge(h,l),h[2]]):i,p=o?Xge(n):Sy,c=P0(t),d=[yl(c,p[0]),yl(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 F9(e,t,a,n){let r=t.landmarks.length>=oy.count?oy.symmetryLine:pl.symmetryLine,s=0,i=Sy,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=P9(-s,u),o=Iy(t,c,[n,n]),J(c)}else o=Iy(t,a,[n,n]);else o=Iy(t,a,[n,n]);return[s,i,o]}var Yge=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]},D9=(e,t)=>{let a=Yge(e),n=ad(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 O9=6,Zge=1.4,Bn,O0=null,ws=0,nd=null,z9=()=>ws;async function L9(e){var t;return ne.initial&&(Bn=null),Bn?e.debug&&K("cached model:",Bn.modelUrl):Bn=await Pe((t=e.face.detector)==null?void 0:t.modelPath),ws=Bn.executor&&Bn.inputs[0].shape?Bn.inputs[0].shape[2]:256,nd=Ge(ws,"int32"),O0=Yn(_9(ws)),Bn}function Jge(e){if(!O0||!nd)return gn([0,0]);let t={};t.boxStarts=Fe(e,[0,1],[-1,2]),t.centers=we(t.boxStarts,O0),t.boxSizes=Fe(e,[0,3],[-1,2]),t.boxSizesNormalized=ve(t.boxSizes,nd),t.centersNormalized=ve(t.centers,nd),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,nd),t.endNormalized=te(t.ends,nd);let a=Wu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function W9(e,t){var o,l,u,p,c,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[ws,ws]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf05);let n=Bn==null?void 0:Bn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let h=n.sort((m,f)=>m.size-f.size);a.concat384=lt([h[0],h[2]],2),a.concat512=lt([h[1],h[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=Jge(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 h=0;h(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let f={};f.bbox=Fe(a.boxes,[r[h],0],[1,-1]),f.slice=Fe(a.batch,[r[h],O9-1],[1,-1]),f.squeeze=Oe(f.slice),f.landmarks=Q(f.squeeze,[O9,-1]);let g=await f.bbox.data(),y={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await f.landmarks.array(),confidence:m};f.anchor=Fe(O0,[r[h],0],[1,2]);let x=await f.anchor.data(),A=E9(y,[(e.shape[2]||0)/ws,(e.shape[1]||0)/ws],x),b=F0(A,t.face.scale||Zge),w=D0(b);w.size[0]>(((c=t.face.detector)==null?void 0:c.minSize)||0)&&w.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(w),Object.keys(f).forEach(I=>J(f[I]))}}return Object.keys(a).forEach(h=>J(a[h])),s}var an,ks=0,Qge=2.3,Ty=Pn.leftEyeLower0,Ny=Pn.rightEyeLower0,rd={leftBounds:[Ty[0],Ty[Ty.length-1]],rightBounds:[Ny[0],Ny[Ny.length-1]]},sd={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function H9(e){var t,a;return ne.initial&&(an=null),an?e.debug&&K("cached model:",an.modelUrl):an=await Pe((t=e.face.iris)==null?void 0:t.modelPath),ks=an!=null&&an.executor&&((a=an.inputs)!=null&&a[0].shape)?an.inputs[0].shape[2]:0,ks===-1&&(ks=64),an}function z0(e,t,a,n){for(let r=0;r{let t=e[rd.leftBounds[0]][2],a=e[rd.rightBounds[0]][2];return t-a},V9=(e,t,a,n,r,s=!1)=>{let i=D0(F0(M9([e[a],e[n]]),Qge)),o=ad(i),l=fe.cropAndResize(t,[[i.startPoint[1]/r,i.startPoint[0]/r,i.endPoint[1]/r,i.endPoint[0]/r]],[0],[ks,ks]);if(s&&ne.kernels.includes("flipleftright")){let u=fe.flipLeftRight(l);J(l),l=u}return{box:i,boxSize:o,crop:l}},U9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[Pn[`${a}EyeUpper0`][sd.upperCenter]][2],r=e[Pn[`${a}EyeLower0`][sd.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 j9(e,t,a){if(!(an!=null&&an.executor))return e;let{box:n,boxSize:r,crop:s}=V9(e,t,rd.leftBounds[0],rd.leftBounds[1],a,!0),{box:i,boxSize:o,crop:l}=V9(e,t,rd.rightBounds[0],rd.rightBounds[1],a,!0),u=lt([s,l]);J(s),J(l);let p=an.execute(u);J(u);let c=await p.data();J(p);let d=c.slice(0,sd.numCoordinates*3),{rawCoords:h,iris:m}=U9(d,n,r,!0),f=c.slice(sd.numCoordinates*3),{rawCoords:g,iris:y}=U9(f,i,o,!1),x=e3e(e);Math.abs(x)<30?(z0(e,h,"left",null),z0(e,g,"right",null)):x<1?z0(e,h,"left",["EyeUpper0","EyeLower0"]):z0(e,g,"right",["EyeUpper0","EyeLower0"]);let A=G9(e,m,"left"),b=G9(e,y,"right");return e.concat(A).concat(b)}async function X9(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=hl.reduce((f,g)=>f+=e[g][2],0)/hl.length;for(let f=0;ff+=e[g][2],0)/ml.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 W9(e,t),dr.timestamp=ae(),dr.skipped=0):dr.skipped++;let r=[],s=[],i=0,o=lc;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(pl))I.annotations[T]=[I.mesh[pl[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(P=>P.shape[P.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=$0(A,e),I.size=A.size,I.score=I.boxScore,I.mesh=A.landmarks,I.meshRaw=I.mesh.map(P=>[P[0]/(e.shape[2]||1),P[1]/(e.shape[1]||1),(P[2]||0)/o]);for(let P of Object.keys(pl))I.annotations[P]=[I.mesh[pl[P]]]}}else{let P=T.find(O=>O.shape[O.shape.length-1]===1404),E=Q(P,[-1,3]),S=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?S=await X9(S,T):(g=t.face.iris)!=null&&g.enabled&&(S=await j9(S,I.tensor,lc)),I.mesh=$9(S,A,b,w,lc),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(Pn))I.annotations[O]=Pn[O].map(W=>I.mesh[W]);I.score=I.faceScore;let _={...D9(I.mesh,A),confidence:A.confidence,landmarks:A.landmarks,size:A.size};I.box=_0(_,e),I.boxRaw=$0(_,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 Y9(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 Pe(e.face.attention.modelPath):Ct=await Pe((r=e.face.mesh)==null?void 0:r.modelPath),lc=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 Z9=cl,J9=ic;var My=[],na,L0=[],Q9=0,eI=0,Ey=Number.MAX_SAFE_INTEGER,Py=!1;async function tI(e){var t,a,n;return ne.initial&&(na=null),na?e.debug&&K("cached model:",na.modelUrl):(na=await Pe((t=e.face.emotion)==null?void 0:t.modelPath),Py=((n=(a=na==null?void 0:na.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Py?My=["angry","disgust","fear","happy","neutral","sad","surprise"]:My=["angry","disgust","fear","happy","sad","surprise","neutral"]),na}async function _y(e,t,a,n){var i,o;if(!na)return[];let r=Ey<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-eI;return t.skipAllowed&&s&&r&&Q9===n&&L0[a]&&L0[a].length>0?(Ey++,L0[a]):(Ey=0,new Promise(async l=>{var p,c,d;let u=[];if((p=t.face.emotion)!=null&&p.enabled){let h={},m=na!=null&&na.inputs[0].shape?na.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=na==null?void 0:na.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=na==null?void 0:na.execute(h.grayscaleMul)),eI=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:My[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}L0[a]=u,Q9=n,l(u)}))}var ra,Is=[],nI=0,rI=0,$y=Number.MAX_SAFE_INTEGER;async function sI(e){var t;return ne.initial&&(ra=null),ra?e.debug&&K("cached model:",ra.modelUrl):ra=await Pe((t=e.face.description)==null?void 0:t.modelPath),ra}function a3e(e,t){var s,i;let a=e.image||e.tensor||e;if(!(ra!=null&&ra.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],[ra.inputs[0].shape[2],ra.inputs[0].shape[1]])}else n=fe.resizeBilinear(a,[ra.inputs[0].shape[2],ra.inputs[0].shape[1]],!1);let r=te(n,ze.tf255);return J(n),r}async function Fy(e,t,a,n){var o,l,u,p;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(ra!=null&&ra.executor))return r;let s=$y<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-nI;return t.skipAllowed&&s&&i&&rI===n&&((u=Is==null?void 0:Is[a])==null?void 0:u.age)>0&&((p=Is==null?void 0:Is[a])==null?void 0:p.genderScore)>0?($y++,Is[a]):($y=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=a3e(e,t),m=ra==null?void 0:ra.execute(h);nI=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:ra,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))}Is[a]=r,rI=n,c(r)}))}var id=.1,Dy=.5;function n3e(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 oI(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 Pn.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]});id&&id>0&&(r=r.map(i=>({x:i.x>.5?i.x+id:i.x-id,y:i.y>.5?i.y+id:i.y-id})));for(let i=0;iae()-uI,s=Oy<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&lI===n&&W0[a]?(Oy++,W0[a]):(Oy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[sa!=null&&sa.inputs[0].shape?sa.inputs[0].shape[2]:0,sa!=null&&sa.inputs[0].shape?sa.inputs[0].shape[1]:0],!1),p=sa==null?void 0:sa.execute(u),c=(await p.data())[0];W0[a]=Math.round(100*c)/100,lI=n,uI=ae(),J([u,p]),l(W0[a])}))}var ia,B0=[],Ly=Number.MAX_SAFE_INTEGER,cI=0,hI=0;async function mI(e){var t;return ne.initial&&(ia=null),ia?e.debug&&K("cached model:",ia.modelUrl):ia=await Pe((t=e.face.liveness)==null?void 0:t.modelPath),ia}async function Wy(e,t,a,n){var i,o;if(!(ia!=null&&ia.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>ae()-hI,s=Ly<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&cI===n&&B0[a]?(Ly++,B0[a]):(Ly=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 _n,By=[],s3e=["white","black","asian","indian","other"],i3e=[15,23,28,35.5,45.5,55.5,65],gI=0,yI=0,Vy=Number.MAX_SAFE_INTEGER;async function xI(e){var t;return ne.initial&&(_n=null),_n?e.debug&&K("cached model:",_n.modelUrl):_n=await Pe((t=e.face.gear)==null?void 0:t.modelPath),_n}async function Uy(e,t,a,n){var i,o;if(!_n)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Vy<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-yI;return t.skipAllowed&&s&&r&&gI===n&&By[a]?(Vy++,By[a]):(Vy=0,new Promise(async l=>{var y,x,A,b;if(!(_n!=null&&_n.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],[_n.inputs[0].shape[2],_n.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]=_n.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:s3e[w]});c.race.sort((w,I)=>I.score-w.score);let f=Array.from(await u.age.data()).map((w,I)=>[i3e[I],w]).sort((w,I)=>I[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),By[a]=c,gI=n,yI=ae(),l(c)}))}var Pa,V0=[],bI=0,vI=0,Gy=Number.MAX_SAFE_INTEGER;async function wI(e){return ne.initial&&(Pa=null),Pa?e.debug&&K("cached model:",Pa.modelUrl):Pa=await Pe(e.face.ssrnet.modelPathAge),Pa}async function Hy(e,t,a,n){var i,o,l,u;if(!Pa)return{age:0};let r=Gy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-vI;return t.skipAllowed&&r&&s&&bI===n&&((l=V0[a])!=null&&l.age)&&((u=V0[a])==null?void 0:u.age)>0?(Gy++,V0[a]):(Gy=0,new Promise(async p=>{var h,m,f;if(!(Pa!=null&&Pa.inputs)||!Pa.inputs[0]||!Pa.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],[Pa.inputs[0].shape[2],Pa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[Pa.inputs[0].shape[2],Pa.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=Pa.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])),V0[a]=d,bI=n,vI=ae(),p(d)}))}var xa,U0=[],II=0,SI=0,jy=Number.MAX_SAFE_INTEGER,qy=[.2989,.587,.114];async function CI(e){var t;return ne.initial&&(xa=null),xa?e.debug&&K("cached model:",xa.modelUrl):xa=await Pe((t=e.face.ssrnet)==null?void 0:t.modelPathGender),xa}async function Xy(e,t,a,n){var i,o,l,u;if(!xa)return{gender:"unknown",genderScore:0};let r=jy<(((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.gender)&&((u=U0[a])==null?void 0:u.genderScore)>0?(jy++,U0[a]):(jy=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,qy[0]),N=te(w,qy[1]),M=te(I,qy[2]),P=Fh([T,N,M]);y=te(xe(P,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])),U0[a]=d,II=n,SI=ae(),p(d)}))}var nn,Ky=[],NI=0,RI=0,EI=Number.MAX_SAFE_INTEGER;async function MI(e){var t;return ne.initial&&(nn=null),nn?e.debug&&K("cached model:",nn.modelUrl):nn=await Pe((t=e.face.mobilefacenet)==null?void 0:t.modelPath),nn}async function Yy(e,t,a,n){var i,o;if(!(nn!=null&&nn.executor))return[];let r=EI<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-RI;return t.skipAllowed&&s&&r&&NI===n&&Ky[a]?(EI++,Ky[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.mobilefacenet)!=null&&p.enabled&&(nn!=null&&nn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[nn.inputs[0].shape[2],nn.inputs[0].shape[1]],!1),c.data=nn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Ky[a]=u,NI=n,RI=ae(),l(u)})}var rn,Zy=[],_I=0,$I=0,FI=Number.MAX_SAFE_INTEGER;async function DI(e){return ne.initial&&(rn=null),rn?e.debug&&K("cached model:",rn.modelUrl):rn=await Pe(e.face.insightface.modelPath),rn}async function Jy(e,t,a,n){var i,o;if(!(rn!=null&&rn.executor))return[];let r=FI<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-$I;return t.skipAllowed&&s&&r&&_I===n&&Zy[a]?(FI++,Zy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.insightface)!=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]))}Zy[a]=u,_I=n,$I=ae(),l(u)})}var o3e=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}},zI=(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,P,E;return A<1?A>-1?(E=Math.asin(A),P=Math.atan2(-I,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,P=-Math.atan2(T,N),M=0):(E=Math.PI/2,P=Math.atan2(T,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN(P)&&(P=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-P,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?o3e(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:m}};function LI(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 Qy=async(e,t)=>{var m,f,g,y,x,A,b,w,I,T,N,M,P,E,S,_,O,W,$,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await K9(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?zI(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?zy(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 zy(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?Wy(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 Wy(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?Uy(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 Uy(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?Hy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Xy(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 Hy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(P=e.config.face.ssrnet)!=null&&P.enabled?await Xy(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?Yy(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 Yy(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?Jy(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 Jy(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=Fy(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Fy(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}),($=e.config.face.gear)!=null&&$.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?LI(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 _a={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=>_a.nameMapping[e],getPoints:e=>_a.pointsMapping[e]},Cs={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Cs.nameMapping[e]},Pt={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=>Pt.nameMapping[e]},Ss=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:Vn,index:_r,middle:$r,ring:xl,pinky:Al}=_a,{none:Un,half:u3e,full:Gn}=Cs,{verticalUp:od,verticalDown:V7e,horizontalLeft:ex,horizontalRight:d3e,diagonalUpRight:p3e,diagonalUpLeft:ld,diagonalDownRight:U7e,diagonalDownLeft:G7e}=Pt,Ts=new Ss("thumbs up");Ts.curl(Vn,Un,1);Ts.direction(Vn,od,1);Ts.direction(Vn,ld,.25);Ts.direction(Vn,p3e,.25);for(let e of[_a.index,_a.middle,_a.ring,_a.pinky])Ts.curl(e,Gn,1),Ts.direction(e,ex,1),Ts.direction(e,d3e,1);var Ht=new Ss("victory");Ht.curl(Vn,u3e,.5);Ht.curl(Vn,Un,.5);Ht.direction(Vn,od,1);Ht.direction(Vn,ld,1);Ht.curl(_r,Un,1);Ht.direction(_r,od,.75);Ht.direction(_r,ld,1);Ht.curl($r,Un,1);Ht.direction($r,od,1);Ht.direction($r,ld,.75);Ht.curl(xl,Gn,1);Ht.direction(xl,od,.2);Ht.direction(xl,ld,1);Ht.direction(xl,ex,.2);Ht.curl(Al,Gn,1);Ht.direction(Al,od,.2);Ht.direction(Al,ld,1);Ht.direction(Al,ex,.2);Ht.weight(_r,2);Ht.weight($r,2);var Ns=new Ss("point");Ns.curl(Vn,Gn,1);Ns.curl(_r,Un,.5);Ns.curl($r,Gn,.5);Ns.curl(xl,Gn,.5);Ns.curl(Al,Gn,.5);Ns.weight(_r,2);Ns.weight($r,2);var Rs=new Ss("middle finger");Rs.curl(Vn,Un,1);Rs.curl(_r,Gn,.5);Rs.curl($r,Gn,.5);Rs.curl(xl,Gn,.5);Rs.curl(Al,Gn,.5);Rs.weight(_r,2);Rs.weight($r,2);var ud=new Ss("open palm");ud.curl(Vn,Un,.75);ud.curl(_r,Un,.75);ud.curl($r,Un,.75);ud.curl(xl,Un,.75);ud.curl(Al,Un,.75);var WI=[Ts,Ht,Ns,Rs,ud];var c3e=.7,bl={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 BI(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 UI(e,t){if(!e||!t)return[0,0];let a=BI(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=BI(e[1],e[2],t[1],t[2]);return[a,n]}function VI(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 h3e(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>bl.NO_CURL_START_LIMIT?y=Cs.none:g>bl.HALF_CURL_START_LIMIT?y=Cs.half:y=Cs.full,y}function GI(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=Pt.horizontalLeft:r=Pt.horizontalRight:n===Math.abs(t)?t>0?r=Pt.horizontalLeft:r=Pt.horizontalRight:a>0?r=Pt.horizontalLeft:r=Pt.horizontalRight,r}function HI(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=Pt.verticalDown:r=Pt.verticalUp:n===Math.abs(t)?t<0?r=Pt.verticalDown:r=Pt.verticalUp:a<0?r=Pt.verticalDown:r=Pt.verticalUp,r}function m3e(e,t,a,n,r,s,i,o){let l,u=HI(e,t,a,n),p=GI(r,s,i,o);return u===Pt.verticalUp?p===Pt.horizontalLeft?l=Pt.diagonalUpLeft:l=Pt.diagonalUpRight:p===Pt.horizontalLeft?l=Pt.diagonalDownLeft:l=Pt.diagonalDownRight,l}function f3e(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+=bl.DISTANCE_VOTE_POWER:f>.66?h+=bl.DISTANCE_VOTE_POWER:m+=bl.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 P=UI([b,w],[I,T]),E=VI(P,bl.TOTAL_ANGLE_VOTE_POWER);d+=E[0],h+=E[1],m+=E[2];for(let _ of n){let O=VI(_,bl.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],m+=O[2]}let S;return d===Math.max(d,h,m)?S=HI(l,o,u,c):m===Math.max(h,m)?S=GI(s,r,i,p):S=m3e(l,o,u,c,s,r,i,p),S}function jI(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of _a.all){let i=_a.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=UI(p,c),h=d[0],m=d[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of _a.all){let i=s===_a.thumb?1:0,o=_a.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=h3e(l,u,p),d=f3e(l,u,p,t[s].slice(i));n[s]=c,r[s]=d}return{curls:n,directions:r}}function G0(e){if(!e||e.length===0)return null;let t=jI(e),a={};for(let n of _a.all)a[_a.getName(n)]={curl:Cs.getName(t.curls[n]),direction:Pt.getName(t.directions[n])};return a}function qI(e){let t=[];if(!e||e.length===0)return t;let a=jI(e);for(let n of WI){let r=n.matchAgainst(a.curls,a.directions);r>=c3e&&t.push({name:n.name,confidence:r})}return t}var XI=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},KI=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},YI=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},ZI=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 j0(e,t=1.5){let a=uc(e),n=H0(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 q0(e){let t=uc(e),a=H0(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 y3e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function aS(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return y3e(a)}var JI=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Es(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Yn(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=Wu([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=tS(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 v3e=5,iS=1.65,oS=[0,5,9,13,17,1,2],w3e=0,k3e=2,lS=0,K0=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=>nx([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return j0(q0(r),v3e)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=j0(q0(a),iS);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=ax(n,[0,0]),u=o.map(h=>[...nx(h,l),h[2]]),p=nS(r),c=[...uc(a),1],d=[Es(c,p[0]),Es(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()-lS,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=j0(q0(u),iS),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 uS={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]},vl,wl,rx;function S3e(){let e=vl?new X0(vl):void 0;e&&wl&&(rx=new K0(e,wl))}async function sx(e,t){rx||S3e();let a=await rx.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=G0(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 dS(e){var t;return ne.initial&&(vl=null),vl?e.debug&&K("cached model:",vl.modelUrl):vl=await Pe((t=e.hand.detector)==null?void 0:t.modelPath),vl}async function pS(e){var t;return ne.initial&&(wl=null),wl?e.debug&&K("cached model:",wl.modelUrl):wl=await Pe((t=e.hand.skeleton)==null?void 0:t.modelPath),wl}var Ot=[null,null],C3e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Ms=[[0,0],[0,0]],T3e=["hand","fist","pinch","point","face","tip","pinchtip"],hS=4,mS=1.6,N3e=512,R3e=1.4,Y0=Number.MAX_SAFE_INTEGER,ix=0,Fr=[0,0],Dt={boxes:[],hands:[]},fS={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 gS(e){var t;if(ne.initial&&(Ot[0]=null),Ot[0])e.debug&&K("cached model:",Ot[0].modelUrl);else{A0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Ot[0]=await Pe((t=e.hand.detector)==null?void 0:t.modelPath);let a=Ot[0].executor?Object.values(Ot[0].modelSignature.inputs):void 0;Ms[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Ms[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[0]}async function yS(e){var t;if(ne.initial&&(Ot[1]=null),Ot[1])e.debug&&K("cached model:",Ot[1].modelUrl);else{Ot[1]=await Pe((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Ot[1].executor?Object.values(Ot[1].modelSignature.inputs):void 0;Ms[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,Ms[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[1]}async function E3e(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,N3e),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,C3e),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Na(n.scores,1);J(o[hS]),o.splice(hS,1),n.filtered=pa(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=N0(f,R3e),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=T3e[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 ox(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],[Ms[1][0],Ms[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]/Ms[1][1],c[1]/Ms[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=G0(n.keypoints);for(let c of Object.keys(fS))n.annotations[c]=fS[c].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>J(r[l]))}return n}async function lx(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],Y0++;let a=(t.hand.skipTime||0)>ae()-ix,n=Y0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Dt.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-ix,l=Y0<3*(t.hand.skipFrames||0);t.skipAllowed&&Dt.hands.length===t.hand.maxDetected?Dt.hands=await Promise.all(Dt.boxes.map(p=>ox(e,p,t))):t.skipAllowed&&o&&l&&Dt.hands.length>0?Dt.hands=await Promise.all(Dt.boxes.map(p=>ox(e,p,t))):(Dt.boxes=await E3e(e,t),ix=ae(),Dt.hands=await Promise.all(Dt.boxes.map(p=>ox(e,p,t))),Y0=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=N0(c.box,mS),h=N0(c.boxRaw,mS);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 dc={};yr(dc,{connected:()=>J0,horizontal:()=>ux,kpt:()=>Z0,relative:()=>px,vertical:()=>dx});var Z0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ux=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],dx=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],px=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],J0={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(),cx=0;function AS(e,t){var i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,P,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 $=0;$((r-1)*Ae.body[$].box[X]+Z)/r),G=e.body[$].boxRaw.map((Z,X)=>((r-1)*Ae.body[$].boxRaw[X]+Z)/r),q=e.body[$].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Re,Le,qe;return{score:Z.score,part:Z.part,position:[Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[$].keypoints[X]?((r-1)*(((re=Ae.body[$].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[$].keypoints[X]?((r-1)*(((ie=Ae.body[$].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[$].keypoints[X]?((r-1)*(((Re=Ae.body[$].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=M0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?V=C0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(V=dc);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[$]={...e.body[$],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 $=0;$((r-1)*Ae.hand[$].box[Z]+V)/r),G=e.hand[$].boxRaw.map((V,Z)=>((r-1)*Ae.hand[$].boxRaw[Z]+V)/r);Ae.hand[$].keypoints.length!==e.hand[$].keypoints.length&&(Ae.hand[$].keypoints=e.hand[$].keypoints);let q=e.hand[$].keypoints&&e.hand[$].keypoints.length>0?e.hand[$].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[$].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[$].annotations).length!==Object.keys(e.hand[$].annotations).length)Ae.hand[$].annotations=e.hand[$].annotations,H=Ae.hand[$].annotations;else if(e.hand[$].annotations)for(let V of Object.keys(e.hand[$].annotations))H[V]=(c=(p=(u=e.hand[$])==null?void 0:u.annotations)==null?void 0:p[V])!=null&&c[0]?e.hand[$].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[$].annotations[V][X][ee]+re)/r)):null;Ae.hand[$]={...e.hand[$],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 $=0;$((r-1)*Ae.face[$].box[V]+H)/r),G=e.face[$].boxRaw.map((H,V)=>((r-1)*Ae.face[$].boxRaw[V]+H)/r),q=e.face[$].annotations;if(Object.keys(Ae.face[$].annotations).length!==Object.keys(e.face[$].annotations).length)Ae.face[$].annotations=e.face[$].annotations,q=Ae.face[$].annotations;else if(e.face[$].annotations)for(let H of Object.keys(e.face[$].annotations))q[H]=(m=(h=(d=e.face[$])==null?void 0:d.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[$].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[$].annotations[H][Z][re]+X)/r)):null;if(e.face[$].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[$].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[$].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[$].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[$].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((T=(I=e.face[$].rotation)==null?void 0:I.angle)==null?void 0:T.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[$].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=(P=e.face[$].rotation)==null?void 0:P.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((S=Ae.face[$].rotation)==null?void 0:S.gaze.bearing)||0)+(((_=e.face[$].rotation)==null?void 0:_.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[$].rotation)==null?void 0:O.gaze.strength)||0)+(((W=e.face[$].rotation)==null?void 0:W.gaze.strength)||0))/r},Ae.face[$]={...e.face[$],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[$]={...e.face[$],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 $=0;$((r-1)*Ae.object[$].box[H]+q)/r),G=e.object[$].boxRaw.map((q,H)=>((r-1)*Ae.object[$].boxRaw[H]+q)/r);Ae.object[$]={...e.object[$],box:U,boxRaw:G}}if(e.persons){let $=e.persons;if(!Ae.persons||$.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify($));else for(let U=0;U<$.length;U++)Ae.persons[U].box=$[U].box.map((G,q)=>((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 cx=ne.perfadd?cx+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:cx}),Ae}var Aa;async function hx(e){return!Aa||ne.initial?Aa=await Pe(e.segmentation.modelPath):e.debug&&K("cached model:",Aa.modelUrl),Aa}async function bS(e,t){var r;if(Aa||(Aa=await hx(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=Vh(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 Q0={};yr(Q0,{distance:()=>mx,find:()=>_3e,similarity:()=>P3e});function mx(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 P3e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=mx(e,t,a);return wS(n,a.order||2,a.min||0,a.max||1)}function _3e(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;ihc,validateModel:()=>im});var kS=.005,sn={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function fx(e){for(let t of ux){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 IS(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,sn.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 CS(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]+sn.padding[2][0]+sn.padding[2][1])/t[0]-sn.padding[2][0],n.position[1]*(t[1]+sn.padding[1][0]+sn.padding[1][1])/t[1]-sn.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=bs(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var jt,em=0,gx=Number.MAX_SAFE_INTEGER,kl={boxes:[],bodies:[],last:0};async function TS(e){var t;return ne.initial&&(jt=null),jt?e.debug&&K("cached model:",jt.modelUrl):(A0(["size"],e),jt=await Pe(e.body.modelPath)),em=jt!=null&&jt.executor&&((t=jt==null?void 0:jt.inputs)!=null&&t[0].shape)?jt.inputs[0].shape[2]:0,em<64&&(em=256),B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!1),jt}function F3e(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:Z0[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=bs(r.map(p=>p.position),[a.shape[2],a.shape[1]]),l={};for(let[p,c]of Object.entries(J0)){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 fx(u),i.push(u),i}function D3e(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:Z0[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(J0)){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};fx(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 yx(e,t){var r;if(!(jt!=null&&jt.executor)||!((r=jt==null?void 0:jt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(kl.boxes.length=0),gx++;let a=(t.body.skipTime||0)>ae()-kl.last,n=gx<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?kl.bodies:new Promise(async s=>{let i={};gx=0,i.input=SS(e,em),i.res=jt==null?void 0:jt.execute(i.input),kl.last=ae();let o=await i.res.array();kl.bodies=i.res.shape[2]===17?F3e(o,t,e):D3e(o,t,e);for(let l of kl.bodies)CS(l,[e.shape[2]||1,e.shape[1]||1]),IS(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(kl.bodies)})}var $n,tm=[],RS=0,xx=Number.MAX_SAFE_INTEGER,nm=0,am=2.5;async function ES(e){if(!$n||ne.initial){$n=await Pe(e.object.modelPath);let t=$n!=null&&$n.executor?Object.values($n.modelSignature.inputs):void 0;nm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",$n.modelUrl);return $n}async function O3e(e,t,a){var u,p;let n=0,r=[],s=nm;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)===td.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($=>$*(d/c/s)),[M,P]=[I-am/c*N[0],T-am/c*N[1]],[E,S]=[I+am/c*N[2]-M,T+am/c*N[3]-P],_=[M,P,E,S];_=_.map($=>Math.max(0,Math.min($,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:td[b].label,box:O.map($=>Math.trunc($)),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 Ax(e,t){if(!($n!=null&&$n.executor))return[];let a=(t.object.skipTime||0)>ae()-RS,n=xx<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&tm.length>0?(xx++,tm):(xx=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?tm:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[nm,nm],!1),o=ve(i,ze.tf255),l=Zs(o,[0,3,1,2]),u;t.object.enabled&&(u=$n.execute(l)),RS=ae();let p=await O3e(u,s,t);tm=p,J([i,o,l,...u]),r(p)}))}var cc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],z3e=cc.length,pc=cc.reduce((e,t,a)=>(e[t]=a,e),{}),L3e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],D6e=L3e.map(([e,t])=>[pc[e],pc[t]]),PS=[["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 _S(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 $S(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 rm=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 FS(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function kx(e,t){return{x:e.x+t.x,y:e.y+t.y}}var on,B3e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],sm=1,dd=16,V3e=50**2;function DS(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:wx(Math.round(y.y/dd),0,x-1),x:wx(Math.round(y.x/dd),0,A-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),m=kx(t.position,d);for(let y=0;y[pc[d],pc[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=vx(e.part,dd,a);p[e.part.id]={score:e.score,part:cc[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]=DS(d,p[h],m,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function H3e(e,t){let[a,n,r]=t.shape,s=new rm(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?FS(a,t,s.y,s.x)<=V3e:!1})}function j3e(e,t){return t.reduce((n,{position:r,score:s},i)=>(OS(e,r,i)||(n+=s),n),0)/t.length}function q3e(e,t,a,n,r,s){let i=[],o=H3e(s,t);for(;i.lengthh.score>s);let c=j3e(i,p),d=_S(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function Ix(e,t){if(!(on!=null&&on.executor))return[];let a=De(()=>{if(!on.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[on.inputs[0].shape[2],on.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=on.execute(o,B3e).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=q3e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return on.inputs[0].shape?$S(r,[e.shape[1],e.shape[2]],[on.inputs[0].shape[2],on.inputs[0].shape[1]]):[]}async function zS(e){return!on||ne.initial?on=await Pe(e.body.modelPath):e.debug&&K("cached model:",on.modelUrl),on}var cr,X3e=["fgr","pha","r1o","r2o","r3o","r4o"],qt={},Cx=0;function BS(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),Cx=e.segmentation.ratio||.5,qt.downsample_ratio=Ve(Cx)}async function Tx(e){return!cr||ne.initial?cr=await Pe(e.segmentation.modelPath):e.debug&&K("cached model:",cr.modelUrl),BS(e),cr}var WS=e=>De(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function Sx(e,t){let a=e?WS(e):sr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?WS(t):sr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function K3e(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 VS(e,t){if(cr||(cr=await Tx(t)),!(cr!=null&&cr.executor))return null;qt.src=ve(e,255),Cx!==t.segmentation.ratio&&BS(t);let[a,n,r,s,i,o]=await cr.executeAsync(qt,X3e),l;switch(t.segmentation.mode||"default"){case"default":l=Sx(a,n);break;case"alpha":l=Sx(null,n);break;case"foreground":l=Sx(a,null);break;case"state":l=K3e(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 Nx(e){return!ba||ne.initial?ba=await Pe(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function GS(e,t){var r;if(ba||(ba=await Nx(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 im(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 hc=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,P,E,S,_;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?L9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?dI(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?mI(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?sI(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?tI(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?H9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?Y9(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)!=null&&p.enabled)&&!this.models.gear?xI(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?wI(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)!=null&&d.enabled)&&!this.models.ssrnetgender?CI(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?MI(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?DI(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?b9(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?A9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?C9(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((y=this.instance.config.body.modelPath)!=null&&y.includes("movenet"))?TS(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((x=this.instance.config.body.modelPath)!=null&&x.includes("posenet"))?zS(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"))?gS(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"))?yS(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=dS(this.instance.config),a.handskeleton=pS(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?k9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((P=this.instance.config.object.modelPath)!=null&&P.includes("nanodet"))?ES(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?Nx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((S=this.instance.config.segmentation.modelPath)!=null&&S.includes("meet"))?hx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((_=this.instance.config.segmentation.modelPath)!=null&&_.includes("rvm"))?Tx(this.instance.config):null;for(let[O,W]of Object.entries(a))W!=null&&W.then&&W.then($=>this.models[O]=$);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=im(this.instance,n,a);r&&t.push(r)}return t}};function jS(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 om=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -8788,7 +8788,7 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,um=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,lm=` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -9356,4 +9356,4 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function L3e(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 W3e(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=_n(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 B3e(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(lm):a=t(um);let n;if("node"in qe&&ha()==="tensorflow"){let r=(void 0).decodeJpeg(a),s=Bt(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 V3e(e){let t;return typeof createImageBitmap=="function"?t=await L3e(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await W3e(e):t=await B3e(e),t}async function U3e(e){var o,l,u,p;if(!W().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=ha(),a=rr();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;W().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}),W().set("ENGINE_COMPILE_ONLY",!1);let i=It().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function $S(e,t){await ic(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"?cr():new Promise(async n=>{await e.models.load(),await U3e(e);let r=await V3e(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var cd,fc,gc,dm,Es,Sx=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");jn(this,cd,void 0);jn(this,fc,void 0);jn(this,gc,void 0);he(this,"analyze",(...t)=>{if(!Ka(this,fc))return;let a=this.tf.engine().state.numTensors,n=Ka(this,cd);Ar(this,cd,a);let r=a-n;r!==0&&K(...t,r)});jn(this,dm,t=>{if(!Ka(this,gc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof mt))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))});jn(this,Es,{});let a=(tc.tfjs||n3).replace(/-(.*)/,"");ol.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,ol.modelBasePath=ne.browser?"../models/":"file://models/",this.version=Q3,Object.defineProperty(this,"version",{value:Q3}),this.config=JSON.parse(JSON.stringify(ol)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Et(this.config,t)),Hk(this.config),this.tf=qe,this.state="idle",Ar(this,cd,0),Ar(this,fc,!1),Ar(this,gc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new mc(this),iy(),this.result=cr(),this.process={tensor:null,canvas:null},this.faceTriangulation=z9,this.faceUVMap=L9,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(ol)),this.config.backend=t,Z3(),ne.initial=!0}validate(t){let a=X3(ol,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 RS(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await oS(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await MS(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return Gk(this.config,t,a)}async init(){await ic(this,!0),await this.tf.ready(),Z3()}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 ic(this,!1)||K("error: backend check failed"),await Op(),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 iS(t,this.config)}async warmup(t){let a=ae(),n=await $S(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,P,E,C,_,O,B,F,U,G,q,H;this.state="config";let r;this.config=Et(this.config,a),this.state="check";let s=Ka(this,dm).call(this,t);s&&(K(s,t),this.emit("error"),n(cr(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(cr("could not convert input to tensor"));return}this.emit("image"),r=ae(),this.config.skipAllowed=await Uk(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?Xy(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await Xy(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?Ax(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?py(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?xy(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?cx(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 Ax(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await py(o.tensor,d):[]:(I=this.config.body.modelPath)!=null&&I.includes("efficientpose")?u=this.config.body.enabled?await xy(o.tensor,d):[]:(T=this.config.body.modelPath)!=null&&T.includes("movenet")&&(u=this.config.body.enabled?await cx(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?ex(o.tensor,h):[]:(E=(P=this.config.hand.detector)==null?void 0:P.modelPath)!=null&&E.includes("handtrack")&&(p=this.config.hand.enabled?nx(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=ae(),(_=(C=this.config.hand.detector)==null?void 0:C.modelPath)!=null&&_.includes("handdetect")?p=this.config.hand.enabled?await ex(o.tensor,h):[]:(B=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&B.includes("handtrack")&&(p=this.config.hand.enabled?await nx(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?((F=this.config.object.modelPath)!=null&&F.includes("nanodet")?c=this.config.object.enabled?mx(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?my(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 mx(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await my(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=[...DI(l),...FI(u),...zI(p),...OI(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 PS(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?(Ka(this,Es)[t.id]||(this.config.debug&&K("video start",t.id),Ka(this,Es)[t.id]=!0),!t.paused&&Ka(this,Es)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),Ka(this,Es)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),Ka(this,Es)[t.id]=!1)}};cd=new WeakMap,fc=new WeakMap,gc=new WeakMap,dm=new WeakMap,Es=new WeakMap;return AC(H3e);})(); +2Q==`;async function J3e(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(om);break;case"body":case"full":a=await t(lm);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function Q3e(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+om;break;case"full":case"body":a="data:image/jpeg;base64,"+lm;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 eye(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(om):a=t(lm);let n;if("node"in Ke&&ca()==="tensorflow"){let r=J3.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 tye(e){let t;return typeof createImageBitmap=="function"?t=await J3e(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await Q3e(e):t=await eye(e),t}async function aye(e){var o,l,u,p;if(!B().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=ca(),a=nr();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 qS(e,t){await sc(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 aye(e);let r=await tye(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var pd,mc,fc,um,Ps,Ex=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",S0);he(this,"match",Q0);he(this,"models");he(this,"events");he(this,"faceTriangulation");he(this,"faceUVMap");he(this,"performance");jn(this,pd,void 0);jn(this,mc,void 0);jn(this,fc,void 0);he(this,"analyze",(...t)=>{if(!qa(this,mc))return;let a=this.tf.engine().state.numTensors,n=qa(this,pd);xr(this,pd,a);let r=a-n;r!==0&&K(...t,r)});jn(this,um,t=>{if(!qa(this,fc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof gt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});he(this,"webcam",new x0);he(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});jn(this,Ps,{});let a=(ec.tfjs||s3).replace(/-(.*)/,"");ll.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,ll.modelBasePath=ne.browser?"../models/":"file://models/",this.version=ry,Object.defineProperty(this,"version",{value:ry}),this.config=JSON.parse(JSON.stringify(ll)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Et(this.config,t)),r9(this.config),this.tf=Ke,this.state="idle",xr(this,pd,0),xr(this,mc,!1),xr(this,fc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new hc(this),py(),this.result=pr(),this.process={tensor:null,canvas:null},this.faceTriangulation=Z9,this.faceUVMap=J9,im(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(ll)),this.config.backend=t,ay(),ne.initial=!0}validate(t){let a=Q3(ll,t||this.config);return a.length===0&&(this.config=Et(this.config,t)),a}now(){return ae()}image(t,a=!1){return g0(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 g0(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await VS(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await bS(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await GS(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return n9(this.config,t,a)}async init(){await sc(this,!0),await this.tf.ready(),ay()}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 sc(this,!1)||K("error: backend check failed"),await Fp(),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 AS(t,this.config)}async warmup(t){let a=ae(),n=await qS(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,P,E,S,_,O,W,$,U,G,q,H;this.state="config";let r;this.config=Et(this.config,a),this.state="check";let s=qa(this,um).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 g0(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 a9(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?Qy(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await Qy(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?Ix(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?gy(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?ky(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?yx(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 Ix(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await gy(o.tensor,d):[]:(I=this.config.body.modelPath)!=null&&I.includes("efficientpose")?u=this.config.body.enabled?await ky(o.tensor,d):[]:(T=this.config.body.modelPath)!=null&&T.includes("movenet")&&(u=this.config.body.enabled?await yx(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?sx(o.tensor,h):[]:(E=(P=this.config.hand.detector)==null?void 0:P.modelPath)!=null&&E.includes("handtrack")&&(p=this.config.hand.enabled?lx(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 sx(o.tensor,h):[]:(W=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&W.includes("handtrack")&&(p=this.config.hand.enabled?await lx(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?(($=this.config.object.modelPath)!=null&&$.includes("nanodet")?c=this.config.object.enabled?Ax(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?Ay(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 Ax(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await Ay(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=[...KI(l),...XI(u),...ZI(p),...YI(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 jS(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)}};pd=new WeakMap,mc=new WeakMap,fc=new WeakMap,um=new WeakMap,Ps=new WeakMap;return PC(rye);})(); diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 3a0ebf8f..890e56da 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -4,7 +4,7 @@ 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 G=(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 H=Zo((va,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.11.0",_o="4.11.0",$o="4.11.0",er="4.11.0",tr="4.11.0",nr="4.11.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 ga={};ze(ga,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var C1=` +"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 G=(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 H=Zo((va,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.14.0",_o="4.14.0",$o="4.14.0",er="4.14.0",tr="4.14.0",nr="4.14.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 ga={};ze(ga,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var C1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ 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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=q2(M0),l=I.browser.fromPixels(y2));else{let T=q2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await Z2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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",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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.1.2";var S=G(H());var u0=G(H());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=G(H()),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(` +`;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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=q2(M0),l=I.browser.fromPixels(y2));else{let T=q2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await Z2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.0";var S=G(H());var u0=G(H());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=G(H()),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]),Za=Ts.map(e=>N2[e]),Xa=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]],qa={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(),Ua=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 f=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);f.length>3&&(f.length=3),n=Y(n,"[emotions]",f.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]} C @@ -118,7 +118,7 @@ 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(c5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(h5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var O=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=O.concat([d[0],d[2]],2),n.concat512=O.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=O.slice(n.boxes,[r[d],0],[1,-1]),y.slice=O.slice(n.batch,[r[d],M3-1],[1,-1]),y.squeeze=O.squeeze(y.slice),y.landmarks=O.reshape(y.squeeze,[M3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=O.slice(ft,[r[d],0],[1,2]);let g=await y.anchor.data(),p=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=xt(p,t.face.scale||yA),k=yt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>O.dispose(y[P]))}}return Object.keys(n).forEach(d=>O.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=yt(xt(h3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=S3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=S3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(mt(e,d,"left",null),mt(e,u,"right",null)):g<1?mt(e,d,"left",["EyeUpper0","EyeLower0"]):mt(e,u,"right",["EyeUpper0","EyeLower0"]);let p=j3(e,m,"left"),b=j3(e,T,"right");return e.concat(p).concat(b)}async function O3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await O3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:E5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function bA(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=G(H());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=G(H());var le,D5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=f,an=o,ln=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,Z5[0]),V=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Rt[n]=f,xn=o,yn=v(),x(f)}))}var Mt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:Q5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,N]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=SA(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]],f=jn(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,ZA=512,XA=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 qA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(y,XA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 qA(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 f=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,X)=>((r-1)*z.body[M].boxRaw[X]+B)/r),x0=e.body[M].keypoints.map((B,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(E1=B.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=B.distance)==null?void 0:S1[2])||0))/r:(j1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,X)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Nt[f],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[51+1],s[51+0],s[51+3]-s[51+1],s[51+2]-s[51+0]],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[f,d]of Object.entries(Lt)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Dt/i*V[0],N-Dt/i*V[1]],[$,A0]=[P+Dt/i*V[2]-_,N+Dt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],X7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,ra=50**2;function ko(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:b1(Math.round(T.y/M2),0,g-1),x:b1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=g1(t.position,f);for(let T=0;T[F2[f],F2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=ko(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Ro(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var Vt=` + 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(c5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(h5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var O=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=O.concat([d[0],d[2]],2),n.concat512=O.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=O.slice(n.boxes,[r[d],0],[1,-1]),y.slice=O.slice(n.batch,[r[d],M3-1],[1,-1]),y.squeeze=O.squeeze(y.slice),y.landmarks=O.reshape(y.squeeze,[M3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=O.slice(ft,[r[d],0],[1,2]);let g=await y.anchor.data(),p=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=xt(p,t.face.scale||yA),k=yt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>O.dispose(y[P]))}}return Object.keys(n).forEach(d=>O.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=yt(xt(h3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=S3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=S3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(mt(e,d,"left",null),mt(e,u,"right",null)):g<1?mt(e,d,"left",["EyeUpper0","EyeLower0"]):mt(e,u,"right",["EyeUpper0","EyeLower0"]);let p=j3(e,m,"left"),b=j3(e,T,"right");return e.concat(p).concat(b)}async function O3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await O3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:E5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function bA(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=G(H());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=G(H());var le,D5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=f,an=o,ln=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,Z5[0]),V=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Rt[n]=f,xn=o,yn=v(),x(f)}))}var Mt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:Q5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,N]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=SA(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]],f=jn(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,ZA=512,XA=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 qA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(y,XA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 qA(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 f=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,X)=>((r-1)*z.body[M].boxRaw[X]+B)/r),x0=e.body[M].keypoints.map((B,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(E1=B.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=B.distance)==null?void 0:S1[2])||0))/r:(j1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,X)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Nt[f],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[f,d]of Object.entries(Lt)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Dt/i*V[0],N-Dt/i*V[1]],[$,A0]=[P+Dt/i*V[2]-_,N+Dt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],X7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,ra=50**2;function ko(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:b1(Math.round(T.y/M2),0,g-1),x:b1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=g1(t.position,f);for(let T=0;T[F2[f],F2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=ko(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Ro(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var Vt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index 2a1aa3d8..11c37f1d 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -4,7 +4,7 @@ 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 G=(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 H=qo((va,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.11.0",_o="4.11.0",$o="4.11.0",er="4.11.0",tr="4.11.0",nr="4.11.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 ga={};ze(ga,{Env:()=>S2,Human:()=>E1,default:()=>E1,defaults:()=>Ke,draw:()=>rt,empty:()=>Te,env:()=>R,match:()=>Wt,models:()=>w1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var W1=` +"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 G=(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 H=qo((va,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.14.0",_o="4.14.0",$o="4.14.0",er="4.14.0",tr="4.14.0",nr="4.14.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 ga={};ze(ga,{Env:()=>S2,Human:()=>E1,default:()=>E1,defaults:()=>Ke,draw:()=>rt,empty:()=>Te,env:()=>R,match:()=>Wt,models:()=>w1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var W1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ 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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new $t(i,W1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(H1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=Y2(M0),l=I.browser.fromPixels(y2));else{let T=Y2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await X2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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",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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.1.2";var S=G(H());var u0=G(H());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=G(H()),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(` +`;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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new $t(i,W1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(H1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=Y2(M0),l=I.browser.fromPixels(y2));else{let T=Y2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await X2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.0";var S=G(H());var u0=G(H());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=G(H()),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]),Za=Ts.map(e=>L2[e]),qa=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]],Xa={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(),Ua=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 f=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);f.length>3&&(f.length=3),n=Y(n,"[emotions]",f.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]} C @@ -118,7 +118,7 @@ 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(d5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(b5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var L=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=L.concat([d[0],d[2]],2),n.concat512=L.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=L.slice(n.boxes,[r[d],0],[1,-1]),y.slice=L.slice(n.batch,[r[d],P3-1],[1,-1]),y.squeeze=L.squeeze(y.slice),y.landmarks=L.reshape(y.squeeze,[P3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=L.slice(pt,[r[d],0],[1,2]);let g=await y.anchor.data(),p=h3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=ft(p,t.face.scale||yA),k=mt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>L.dispose(y[P]))}}return Object.keys(n).forEach(d=>L.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=mt(ft(b3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=S3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=S3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=j3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=j3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(ut(e,d,"left",null),ut(e,u,"right",null)):g<1?ut(e,d,"left",["EyeUpper0","EyeLower0"]):ut(e,u,"right",["EyeUpper0","EyeLower0"]);let p=I3(e,m,"left"),b=I3(e,T,"right");return e.concat(p).concat(b)}async function C3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await C3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await O3(A0,P.tensor,W2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:z5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}ht[n]=c,H3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);q3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,O5=.5;function bA(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=G(H());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=G(H());var le,F5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kRt.dispose(c[k])),F5[n]=i,rn=o,sn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),Mt[n]=f,ln=o,cn=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,q5[0]),V=v0.mul(k,q5[1]),_=v0.mul(P,q5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Pt[n]=f,yn=o,fn=v(),x(f)}))}var kt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>kt.dispose(i[d]))}U5[n]=c,un=o,hn=v(),l(c)})}var wt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>wt.dispose(i[d]))}K5[n]=c,vn=o,Rn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:_5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=In([b,k],[P,N]),$=jn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=jn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=On(l,a,c,i):m===Math.max(d,m)?A0=Nn(s,r,A,x):A0=SA(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]],f=In(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=qn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Jn=1.65,Qn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[qe(i,x[0]),qe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new It(l2):void 0;e&&c2&&(n1=new Nt(e,c2))}async function o1(e,t){n1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Xe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],oo=4,ro=1.6,ZA=512,qA=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 XA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=at(y,qA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 XA(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 f=at(i.box,ro),d=at(i.boxRaw,ro);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,q)=>((r-1)*z.body[M].boxRaw[q]+B)/r),x0=e.body[M].keypoints.map((B,q)=>{var U0,y0,Ee,k2,x2,z1,S1,j1,I1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[q]?((r-1)*(((U0=z.body[M].keypoints[q].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(z1=B.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=B.distance)==null?void 0:j1[2])||0))/r:(I1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((q,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,q)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((q,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return y1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Lt[f],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[51+1],s[51+0],s[51+3]-s[51+1],s[51+2]-s[51+0]],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[f,d]of Object.entries(Ct)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ht;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Bt/i*V[0],N-Bt/i*V[1]],[$,A0]=[P+Bt/i*V[2]-_,N+Bt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Ft=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var G2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=G2.length,H2=G2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],q7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Vt=1,M2=16,ra=50**2;function wo(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:g1(Math.round(T.y/M2),0,g-1),x:g1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=T1(t.position,f);for(let T=0;T[H2[f],H2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=wo(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(Eo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Mo(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?ho(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var qt=` + 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(d5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(b5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var L=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=L.concat([d[0],d[2]],2),n.concat512=L.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=L.slice(n.boxes,[r[d],0],[1,-1]),y.slice=L.slice(n.batch,[r[d],P3-1],[1,-1]),y.squeeze=L.squeeze(y.slice),y.landmarks=L.reshape(y.squeeze,[P3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=L.slice(pt,[r[d],0],[1,2]);let g=await y.anchor.data(),p=h3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=ft(p,t.face.scale||yA),k=mt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>L.dispose(y[P]))}}return Object.keys(n).forEach(d=>L.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=mt(ft(b3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=S3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=S3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=j3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=j3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(ut(e,d,"left",null),ut(e,u,"right",null)):g<1?ut(e,d,"left",["EyeUpper0","EyeLower0"]):ut(e,u,"right",["EyeUpper0","EyeLower0"]);let p=I3(e,m,"left"),b=I3(e,T,"right");return e.concat(p).concat(b)}async function C3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await C3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await O3(A0,P.tensor,W2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:z5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}ht[n]=c,H3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);q3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,O5=.5;function bA(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=G(H());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=G(H());var le,F5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kRt.dispose(c[k])),F5[n]=i,rn=o,sn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),Mt[n]=f,ln=o,cn=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,q5[0]),V=v0.mul(k,q5[1]),_=v0.mul(P,q5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Pt[n]=f,yn=o,fn=v(),x(f)}))}var kt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>kt.dispose(i[d]))}U5[n]=c,un=o,hn=v(),l(c)})}var wt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>wt.dispose(i[d]))}K5[n]=c,vn=o,Rn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:_5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=In([b,k],[P,N]),$=jn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=jn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=On(l,a,c,i):m===Math.max(d,m)?A0=Nn(s,r,A,x):A0=SA(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]],f=In(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=qn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Jn=1.65,Qn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[qe(i,x[0]),qe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new It(l2):void 0;e&&c2&&(n1=new Nt(e,c2))}async function o1(e,t){n1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Xe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],oo=4,ro=1.6,ZA=512,qA=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 XA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=at(y,qA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 XA(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 f=at(i.box,ro),d=at(i.boxRaw,ro);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,q)=>((r-1)*z.body[M].boxRaw[q]+B)/r),x0=e.body[M].keypoints.map((B,q)=>{var U0,y0,Ee,k2,x2,z1,S1,j1,I1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[q]?((r-1)*(((U0=z.body[M].keypoints[q].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(z1=B.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=B.distance)==null?void 0:j1[2])||0))/r:(I1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((q,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,q)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((q,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return y1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Lt[f],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[f,d]of Object.entries(Ct)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ht;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Bt/i*V[0],N-Bt/i*V[1]],[$,A0]=[P+Bt/i*V[2]-_,N+Bt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Ft=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var G2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=G2.length,H2=G2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],q7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Vt=1,M2=16,ra=50**2;function wo(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:g1(Math.round(T.y/M2),0,g-1),x:g1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=T1(t.position,f);for(let T=0;T[H2[f],H2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=wo(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(Eo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Mo(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?ho(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var qt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/human.node.js b/dist/human.node.js index d8192ca1..a82d25b8 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -4,7 +4,7 @@ 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 G=(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 H=Zo((va,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.11.0",_o="4.11.0",$o="4.11.0",er="4.11.0",tr="4.11.0",nr="4.11.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 ga={};ze(ga,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var C1=` +"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 G=(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 H=Zo((va,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.14.0",_o="4.14.0",$o="4.14.0",er="4.14.0",tr="4.14.0",nr="4.14.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 ga={};ze(ga,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ga);var de=G(H());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,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-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=G(H());var I=G(H());var C1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ 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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=q2(M0),l=I.browser.fromPixels(y2));else{let T=q2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await Z2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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",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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.1.2";var S=G(H());var u0=G(H());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=G(H()),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(` +`;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 f(g,p){if(!(g===l.width&&p===l.height)){if(l.width=g,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(g,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,g,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(g){return r[g]=r[g]||d(l.width,l.height),r[g]}function y(g=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(g&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(g){if(c[g])return a=c[g],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,g),!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[g]=a,a}let T={colorMatrix:g=>{let p=new Float32Array(g);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),y())},brightness:g=>{let p=(g||0)+1;T.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:g=>{let p=(g||0)*2/3+1,b=(p-1)*-.5;T.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:g=>{let p=(g||0)+1,b=-128*(p-1);T.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:g=>{g=(g||0)/180*Math.PI;let p=Math.cos(g),b=Math.sin(g),k=.213,P=.715,N=.072;T.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,N+p*-N+b*(1-N),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,N+p*-N+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,N+p*(1-N)+b*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:g=>{let p=new Float32Array(g),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),y())},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:g=>{let p=g||1;T.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:g=>{let p=g||1;T.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:g=>{let p=g/7/l.width,b=g/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),y(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),y())},pixelate:g=>{let p=g/l.width,b=g/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),y())}};this.add=function(g){let p=Array.prototype.slice.call(arguments,1),b=T[g];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(g){f(g.width,g.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,g);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])],f=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([f[0],f[1],f[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...f,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 f,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof I.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 I.Tensor){let y=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)y=I.expandDims(e,0);else if(e.shape[2]===4){let u=I.slice3d(e,[0,0,0],[-1,-1,3]);y=I.expandDims(u,0),I.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?y=I.clone(e):e.shape[3]===4&&(y=I.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(y==null||y.shape.length!==4||y.shape[0]!==1||y.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(y.dtype==="int32"){let u=I.cast(y,"float32");I.dispose(y),y=u}return{tensor:y,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)),(((f=t.filter)==null?void 0:f.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&&I.browser)l=I.browser?I.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let y=new Uint8Array(e.data.buffer);l=I.tensor(y,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),I.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=I.browser.fromPixels(M0):(y2=q2(M0),l=I.browser.fromPixels(y2));else{let T=q2(M0).getContext("2d").getImageData(0,0,s,A);c=T.data.length/s/A;let g=new Uint8Array(T.data.buffer);l=I.tensor(g,[s,A,c])}if(c===4){let y=I.slice3d(l,[0,0,0],[-1,-1,3]);I.dispose(l),l=y}if(!l)throw new Error("input error: cannot create tensor");let x=I.cast(l,"float32"),i=t.filter.equalization?await Z2(x):I.expandDims(x,0);if(I.dispose([l,x]),t.filter.autoBrightness){let y=I.max(i),u=await y.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],I.dispose(y)}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=I.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])I.dispose(ne.inputTensor),ne.inputTensor=I.clone(t);else{let o={};o.diff=I.sub(t,ne.inputTensor),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;I.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=I.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=I.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?I.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):I.clone(n),o.diff=I.sub(o.input1,o.input2),o.squared=I.mul(o.diff,o.diff),o.sum=I.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return I.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=G(H());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,f;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=((f=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:f.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.0";var S=G(H());var u0=G(H());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=G(H()),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]),Za=Ts.map(e=>N2[e]),Xa=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]],qa={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(),Ua=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 f=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);f.length>3&&(f.length=3),n=Y(n,"[emotions]",f.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]} C @@ -118,7 +118,7 @@ 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(c5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(h5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var O=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=O.concat([d[0],d[2]],2),n.concat512=O.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=O.slice(n.boxes,[r[d],0],[1,-1]),y.slice=O.slice(n.batch,[r[d],M3-1],[1,-1]),y.squeeze=O.squeeze(y.slice),y.landmarks=O.reshape(y.squeeze,[M3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=O.slice(ft,[r[d],0],[1,2]);let g=await y.anchor.data(),p=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=xt(p,t.face.scale||yA),k=yt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>O.dispose(y[P]))}}return Object.keys(n).forEach(d=>O.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=yt(xt(h3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=S3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=S3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(mt(e,d,"left",null),mt(e,u,"right",null)):g<1?mt(e,d,"left",["EyeUpper0","EyeLower0"]):mt(e,u,"right",["EyeUpper0","EyeLower0"]);let p=j3(e,m,"left"),b=j3(e,T,"right");return e.concat(p).concat(b)}async function O3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await O3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:E5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function bA(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=G(H());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=G(H());var le,D5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=f,an=o,ln=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,Z5[0]),V=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Rt[n]=f,xn=o,yn=v(),x(f)}))}var Mt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:Q5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,N]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=SA(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]],f=jn(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,ZA=512,XA=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 qA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(y,XA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 qA(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 f=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,X)=>((r-1)*z.body[M].boxRaw[X]+B)/r),x0=e.body[M].keypoints.map((B,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(E1=B.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=B.distance)==null?void 0:S1[2])||0))/r:(j1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,X)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Nt[f],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[51+1],s[51+0],s[51+3]-s[51+1],s[51+2]-s[51+0]],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[f,d]of Object.entries(Lt)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Dt/i*V[0],N-Dt/i*V[1]],[$,A0]=[P+Dt/i*V[2]-_,N+Dt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],X7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,ra=50**2;function ko(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:b1(Math.round(T.y/M2),0,g-1),x:b1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=g1(t.position,f);for(let T=0;T[F2[f],F2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=ko(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Ro(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var Vt=` + 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=G(H());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 f=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])],y={score:f,boxRaw:d,box:m};r.push(y)}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]]),f={};for(let[m,y]of Object.entries(c5)){let u=[];for(let T=0;Tb.part===y[T]),p=c.find(b=>b.part===y[T+1]);g&&p&&u.push([g.position,p.position])}f[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:f}}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=G(H());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,y;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((y=i0==null?void 0:i0.inputs[0].shape)==null?void 0:y[1])||0],!1),f=J.mul(i,C.tf2);return J.sub(f,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 f=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],y/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*y/i0.inputs[0].shape[1])]})}f.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,f)=>f.score>i?f.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,f]of Object.entries(h5)){let d=[];for(let m=0;mT.part===f[m]),u=B0.keypoints.find(T=>T.part===f[m+1]);y&&u&&y.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([y.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=G(H());var De=G(H());var O=G(H());var Me=G(H());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),f=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[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,yA=1.4,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 fA(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,f;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.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let d=o.sort((m,y)=>m.size-y.size);n.concat384=O.concat([d[0],d[2]],2),n.concat512=O.concat([d[1],d[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=fA(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 d=0;d(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let y={};y.bbox=O.slice(n.boxes,[r[d],0],[1,-1]),y.slice=O.slice(n.batch,[r[d],M3-1],[1,-1]),y.squeeze=O.squeeze(y.slice),y.landmarks=O.reshape(y.squeeze,[M3,-1]);let u=await y.bbox.data(),T={startPoint:[u[0],u[1]],endPoint:[u[2],u[3]],landmarks:await y.landmarks.array(),confidence:m};y.anchor=O.slice(ft,[r[d],0],[1,2]);let g=await y.anchor.data(),p=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],g),b=xt(p,t.face.scale||yA),k=yt(b);k.size[0]>(((i=t.face.detector)==null?void 0:i.minSize)||0)&&k.size[1]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&s.push(k),Object.keys(y).forEach(P=>O.dispose(y[P]))}}return Object.keys(n).forEach(d=>O.dispose(n[d])),s}var ye=G(H());var K0,We=0,mA=2.3,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)=>{let A=yt(xt(h3([e[n],e[o]]),mA)),a=p2(A),l=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 c=ye.image.flipLeftRight(l);ye.dispose(l),l=c}return{box:A,boxSize:a,crop:l}},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){if(!(K0!=null&&K0.executor))return e;let{box:o,boxSize:r,crop:s}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0),{box:A,boxSize:a,crop:l}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0),c=ye.concat([s,l]);ye.dispose(s),ye.dispose(l);let x=K0.execute(c);ye.dispose(c);let i=await x.data();ye.dispose(x);let f=i.slice(0,b2.numCoordinates*3),{rawCoords:d,iris:m}=S3(f,o,r,!0),y=i.slice(b2.numCoordinates*3),{rawCoords:u,iris:T}=S3(y,A,a,!1),g=pA(e);Math.abs(g)<30?(mt(e,d,"left",null),mt(e,u,"right",null)):g<1?mt(e,d,"left",["EyeUpper0","EyeLower0"]):mt(e,u,"right",["EyeUpper0","EyeLower0"]);let p=j3(e,m,"left"),b=j3(e,T,"right");return e.concat(p).concat(b)}async function O3(e,t){var s,A,a,l,c,x,i,f,d,m;let n={lips:await((A=(s=t.filter(y=>y.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(y=>y.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(y=>y.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((f=(i=t.filter(y=>y.size===10))==null?void 0:i[1])==null?void 0:f.data()),eyeR:await((m=(d=t.filter(y=>y.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let y of Object.values(n))if(!y)return e;let o=e2.reduce((y,u)=>y+=e[u][2],0)/e2.length;for(let y=0;yy+=e[u][2],0)/t2.length;for(let y=0;yv()-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 g=0;g[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/a]);for(let N of Object.keys(_e))P.annotations[N]=[P.mesh[_e[N]]]}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 N=r0.execute(P.tensor),_=await N.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=N.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(y=t.face.attention)!=null&&y.enabled?A0=await O3(A0,N):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2)),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(N)}P.score>(((T=t.face.detector)==null?void 0:T.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=G(H());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,f;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=(f=t.face.emotion)==null?void 0:f.crop,T=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,T,[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 y=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*y[u])/100),emotion:E5[u]});c.sort((u,T)=>T.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=G(H());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 hA(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 f;if((f=t.face.description)!=null&&f.enabled){let d=hA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(V=>V.shape[1]===1).data(),T=Math.trunc(200*Math.abs(u[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,T));let g=ie.argMax(m.find(V=>V.shape[1]===100),1),p=(await g.data())[0];ie.dispose(g);let k=await m.find(V=>V.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(V=>V.shape[1]===1024),N=P?await P.data():[];r.descriptor=Array.from(N),m.forEach(V=>ie.dispose(V))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function bA(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=G(H());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=G(H());var le,D5=[],TA=["white","black","asian","indian","other"],vA=[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 T,g,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let k=(g=t.face.gear)==null?void 0:g.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 f=await c.gender.data();i.gender=f[0]>f[1]?"male":"female",i.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[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:TA[k]});i.race.sort((k,P)=>P.score-k.score);let y=Array.from(await c.age.data()).map((k,P)=>[vA[P],k]).sort((k,P)=>P[1]-k[1]),u=y[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=G(H());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,y;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,T=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,T,[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 f={age:0};if((y=t.face.ssrnet)!=null&&y.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();f.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=f,an=o,ln=v(),x(f)}))}var v0=G(H());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,y,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let T=(y=t.face.ssrnet)==null?void 0:y.crop,g=[[T,T,1-T,1-T]];i.resize=v0.image.cropAndResize(e,g,[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 g,p;let T;if(((p=(g=N0==null?void 0:N0.inputs)==null?void 0:g[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),N=v0.mul(b,Z5[0]),V=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([N,V,_]);T=v0.mul(v0.sub(Z,C.tf05),2)}else T=v0.mul(v0.sub(i.resize,C.tf05),2);return T});let f={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();f.gender=d[0]>d[1]?"female":"male",f.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(T=>v0.dispose(i[T])),Rt[n]=f,xn=o,yn=v(),x(f)}))}var Mt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=G(H());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 f=await i.data.data();c=Array.from(f),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var RA=e=>{let t=(i,f)=>Math.atan2(i[1]-f[1],i[0]-f[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=y=>{let u=Math.sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]);return y[0]/=u,y[1]/=u,y[2]/=u,y},o=(y,u)=>{let T=y[0]-u[0],g=y[1]-u[1],p=y[2]-u[2];return[T,g,p]},r=(y,u)=>{let T=y[1]*u[2]-y[2]*u[1],g=y[2]*u[0]-y[0]*u[2],p=y[0]*u[1]-y[1]*u[0];return[T,g,p]},s=y=>{let[u,T,g,p,b,k,P,N,V]=y,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(N,V),_=0):($=Math.PI/2,Z=Math.atan2(N,V),_=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(y=>[y[0]*t[0]/a,y[1]*t[1]/a,y[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 f=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(f),m=A.length===478?RA(e):{bearing:0,strength:0};return{angle:d,matrix:f,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,y,u,T,g,p,b,k,P,N,V,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,f=[];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=(y=e.config.face.emotion)!=null&&y.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=(T=e.config.face.antispoof)!=null&&T.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(g=e.config.face.antispoof)!=null&&g.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=(N=e.config.face.ssrnet)!=null&&N.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(V=e.config.face.ssrnet)!=null&&V.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),B&&(y0.rotation=B),U0&&(y0.tensor=U0),f.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),f};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:PA,full:pe}=He,{verticalUp:T2,verticalDown:Qi,horizontalLeft:Q5,horizontalRight:kA,diagonalUpRight:wA,diagonalUpLeft:v2,diagonalDownRight:_i,diagonalDownLeft:$i}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,wA,.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,kA,1);var h0=new Be("victory");h0.curl(fe,PA,.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 EA=.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 zA(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],f=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),y=(m*m+f*f-d*d)/(2*m*f);y>1?y=1:y<-1&&(y=-1);let u=Math.acos(y);u=57.2958*u%180;let T;return u>i2.NO_CURL_START_LIMIT?T=He.none:u>i2.HALF_CURL_START_LIMIT?T=He.half:T=He.full,T}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 SA(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 jA(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)),f=0,d=0,m=0,y=i/(x+1e-5);y>1.5?f+=i2.DISTANCE_VOTE_POWER:y>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),T=Math.sqrt(s*s+l*l),g=Math.sqrt(A*A+c*c),p=Math.max(u,T,g),b=e[0],k=e[1],P=n[0],N=n[1];p===u?(P=n[0],N=n[1]):p===g&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,N]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);f+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);f+=n0[0],d+=n0[1],m+=n0[2]}let A0;return f===Math.max(f,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=SA(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]],f=jn(x,i),d=f[0],m=f[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=zA(l,c,x),f=jA(l,c,x,t[s].slice(A));o[s]=i,r[s]=f}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>=EA&&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),y>u?u>.04&&t.push({iris:A,gesture:"looking right"}):y>.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],g=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(g<.01||T<.01||g>.022||T>.022)&&(d=!1),(g<.01||T<.01)&&t.push({iris:A,gesture:"looking down"}),(g>.022||T>.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 NA(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 NA(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),f=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:f,palmLandmarks:d,confidence:r[l]},y=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(y),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=G(H());var WA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],DA=0,FA=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),WA)}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],f=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+f[0]),Math.trunc(d[1]+f[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,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 N=this.transformRawCoords(P,y,x,m),V=this.getBoxForHandLandmarks(N);this.storedBoxes[l]={...V,confidence:b};let _={landmarks:N,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:V.startPoint,bottomRight:V.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 HA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||HA();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=G(H());var p0=[null,null],GA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],VA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,ZA=512,XA=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 qA(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,ZA),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,GA),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 f of Array.from(c)){let d=Q.slice(o.boxes,f,1),m=await d.data();Q.dispose(d);let y=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(y,XA),T=[Math.trunc(y[0]*we[0]),Math.trunc(y[1]*we[1]),Math.trunc(y[2]*we[0]),Math.trunc(y[3]*we[1])],g=x[f],p=VA[i[f]],b={id:l++,score:g,box:T,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(f=>Q.dispose(o[f])),n.sort((f,d)=>d.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function 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(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]: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 qA(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 f=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:f,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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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]+B)/r),C0=e.body[M].boxRaw.map((B,X)=>((r-1)*z.body[M].boxRaw[X]+B)/r),x0=e.body[M].keypoints.map((B,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:B.score,part:B.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(B.position[0]||0))/r:B.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(B.position[1]||0))/r:B.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(B.position[2]||0))/r:B.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(B.positionRaw[0]||0))/r:B.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(B.positionRaw[1]||0))/r:B.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(B.positionRaw[2]||0))/r:B.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=B.distance)==null?void 0:y0[0])||0))/r:(Ee=B.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=B.distance)==null?void 0:x2[1])||0))/r:(E1=B.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=B.distance)==null?void 0:S1[2])||0))/r:(j1=B.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[B,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[B]=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[B]+E)/r),C0=e.hand[M].boxRaw.map((E,B)=>((r-1)*z.hand[M].boxRaw[B]+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,B)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[B][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((B,X)=>B.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=(f=e.face[M])==null?void 0:f.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,B)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][B][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=(y=e.face[M].rotation)==null?void 0:y.matrix,K.angle={roll:((r-1)*(((T=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:T.roll)||0)+(((p=(g=e.face[M].rotation)==null?void 0:g.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)+(((N=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:N.yaw)||0))/r,pitch:((r-1)*(((_=(V=z.face[M].rotation)==null?void 0:V.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=G(H());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:()=>KA,similarity:()=>YA});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 YA(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 KA(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=G(H());var Ue=G(H());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 QA(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 f=[];for(let d=0;du.part===i[d]),y=r.find(u=>u.part===i[d+1]);m&&y&&m.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&f.push([m.position,y.position])}l[x]=f}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function _A(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let f=0;f<17;f++){let d=s[3*f+2];if(d>t.body.minConfidence){let m=[s[3*f+1],s[3*f+0]];a.push({part:Nt[f],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[f,d]of Object.entries(Lt)){let m=[];for(let y=0;yg.part===d[y]),T=a.find(g=>g.part===d[y+1]);u&&T&&u.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&m.push([u.position,T.position])}x[f]=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?QA(a,t,e):_A(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=G(H());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 $A(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let f=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),y=S0.squeeze(e.find(p=>p.shape[1]===f**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%f))/f,N=(.5+Math.trunc(p/f))/f,V=g[p].map(M=>M*(f/i/s)),[_,Z]=[P-Dt/i*V[0],N-Dt/i*V[1]],[$,A0]=[P+Dt/i*V[2]-_,N+Dt/i*V[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,y,u,T])}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,f)=>l.includes(f)).sort((i,f)=>f.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 $A(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=G(H());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],ea=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),ta=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],X7=ta.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:f,position:d})=>({score:i,part:f,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,oa=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,ra=50**2;function ko(e,t,n,o,r,s,A=2){let a=T=>({y:s.get(T.y,T.x,e),x:s.get(T.y,T.x,s.shape[2]/2+e)}),l=(T,g,p)=>({y:b1(Math.round(T.y/M2),0,g-1),x:b1(Math.round(T.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),f=a(i),m=g1(t.position,f);for(let T=0;T[F2[f],F2[d]]),A=s.map(([,f])=>f),a=s.map(([f])=>f),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 f=c-1;f>=0;--f){let d=A[f],m=a[f];x[d]&&!x[m]&&(x[m]=ko(f,x[d],m,t,n,r))}for(let f=0;ft){a=!1;break}if(!a)break}return a}function aa(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)<=ra:!1})}function ia(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function la(e,t,n,o,r,s){let A=[],a=aa(s,t);for(;A.lengthd.score>s);let i=ia(A,x),f=Ro(x);i>s&&A.push({keypoints:x,box:f,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,oa).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=la(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=G(H());var ve,ca=["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 da(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,ca),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=da(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=G(H());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 f=i.op.toLowerCase();s.includes(f)||s.push(f)}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,f,d,m,y,u,T,g,p,b,k,P,N,V,_,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&&((f=this.instance.config.face.ssrnet)!=null&&f.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&&((y=this.instance.config.body.modelPath)!=null&&y.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&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((g=this.instance.config.body.modelPath)!=null&&g.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&&((V=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&V.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,f;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&&(y.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};T(m.face.box),T((x=m.body)==null?void 0:x.box),T((i=m.hands.left)==null?void 0:i.box),T((f=m.hands.right)==null?void 0:f.box);let g=Math.min(...y),p=Math.min(...u);m.box=[g,p,Math.max(...y)-g,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=G(H());var Vt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/tfjs.esm.js b/dist/tfjs.esm.js index e67b8920..6c6c2051 100644 --- a/dist/tfjs.esm.js +++ b/dist/tfjs.esm.js @@ -4,57 +4,57 @@ author: ' */ -var wG=Object.create;var QC=Object.defineProperty;var SG=Object.getOwnPropertyDescriptor;var IG=Object.getOwnPropertyNames;var vG=Object.getPrototypeOf,kG=Object.prototype.hasOwnProperty;var qt=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),qe=(r,t)=>{for(var e in t)QC(r,e,{get:t[e],enumerable:!0})},NG=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of IG(t))!kG.call(r,n)&&n!==e&&QC(r,n,{get:()=>t[n],enumerable:!(o=SG(t,n))||o.enumerable});return r};var Kp=(r,t,e)=>(e=r!=null?wG(vG(r)):{},NG(t||!r||!r.__esModule?QC(e,"default",{value:r,enumerable:!0}):e,r));var V0=qt((tle,z0)=>{z0.exports=Nt;var No=null;try{No=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 Nt(r,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}Nt.prototype.__isLong__;Object.defineProperty(Nt.prototype,"__isLong__",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}Nt.isLong=Wr;var R0={},D0={};function Bu(r,t){var e,o,n;return t?(r>>>=0,(n=0<=r&&r<256)&&(o=D0[r],o)?o:(e=Tt(r,(r|0)<0?-1:0,!0),n&&(D0[r]=e),e)):(r|=0,(n=-128<=r&&r<128)&&(o=R0[r],o)?o:(e=Tt(r,r<0?-1:0,!1),n&&(R0[r]=e),e))}Nt.fromInt=Bu;function To(r,t){if(isNaN(r))return t?Lu:_o;if(t){if(r<0)return Lu;if(r>=O0)return B0}else{if(r<=-F0)return Vr;if(r+1>=F0)return L0}return r<0?To(-r,t).neg():Tt(r%oc|0,r/oc|0,t)}Nt.fromNumber=To;function Tt(r,t,e){return new Nt(r,t,e)}Nt.fromBits=Tt;var Zm=Math.pow;function cw(r,t,e){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return _o;if(typeof t=="number"?(e=t,t=!1):t=!!t,e=e||10,e<2||360)throw Error("interior hyphen");if(o===0)return cw(r.substring(1),t,e).neg();for(var n=To(Zm(e,8)),s=_o,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*oc+(this.low>>>0):this.high*oc+(this.low>>>0)};de.toString=function(t){if(t=t||10,t<2||36>>0,c=u.toString(t);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 t=this.high!=0?this.high:this.low,e=31;e>0&&!(t&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(t){return Wr(t)||(t=Fs(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};de.eq=de.equals;de.notEquals=function(t){return!this.eq(t)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(t){return this.comp(t)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(t){return this.comp(t)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(t){return this.comp(t)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(t){return this.comp(t)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(t){if(Wr(t)||(t=Fs(t)),this.eq(t))return 0;var e=this.isNegative(),o=t.isNegative();return e&&!o?-1:!e&&o?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(rc)};de.neg=de.negate;de.add=function(t){Wr(t)||(t=Fs(t));var e=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=t.high>>>16,i=t.high&65535,p=t.low>>>16,u=t.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+=e+a,c&=65535,Tt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(t){return Wr(t)||(t=Fs(t)),this.add(t.neg())};de.sub=de.subtract;de.multiply=function(t){if(this.isZero())return _o;if(Wr(t)||(t=Fs(t)),No){var e=No.mul(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}if(t.isZero())return _o;if(this.eq(Vr))return t.isOdd()?Vr:_o;if(t.eq(Vr))return this.isOdd()?Vr:_o;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(P0)&&t.lt(P0))return To(this.toNumber()*t.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=t.high>>>16,p=t.high&65535,u=t.low>>>16,c=t.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,Tt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(t){if(Wr(t)||(t=Fs(t)),t.isZero())throw Error("division by zero");if(No){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?No.div_u:No.div_s)(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Lu:_o;var o,n,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Lu;if(t.gt(this.shru(1)))return M0;s=Lu}else{if(this.eq(Vr)){if(t.eq(rc)||t.eq(pw))return Vr;if(t.eq(Vr))return rc;var a=this.shr(1);return o=a.div(t).shl(1),o.eq(_o)?t.isNegative()?rc:pw:(n=this.sub(t.mul(o)),s=o.add(n.div(t)),s)}else if(t.eq(Vr))return this.unsigned?Lu:_o;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();s=_o}for(n=this;n.gte(t);){o=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Zm(2,i-48),u=To(o),c=u.mul(t);c.isNegative()||c.gt(n);)o-=p,u=To(o,this.unsigned),c=u.mul(t);u.isZero()&&(u=rc),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(t){if(Wr(t)||(t=Fs(t)),No){var e=(this.unsigned?No.rem_u:No.rem_s)(this.low,this.high,t.low,t.high);return Tt(e,No.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Tt(~this.low,~this.high,this.unsigned)};de.and=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low&t.low,this.high&t.high,this.unsigned)};de.or=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low|t.low,this.high|t.high,this.unsigned)};de.xor=function(t){return Wr(t)||(t=Fs(t)),Tt(this.low^t.low,this.high^t.high,this.unsigned)};de.shiftLeft=function(t){return Wr(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Tt(this.low<>>32-t,this.unsigned):Tt(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Tt(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(t){if(Wr(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var o=this.low;return Tt(o>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Tt(e,0,this.unsigned):Tt(e>>>t-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Tt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Tt(this.low,this.high,!0)};de.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};de.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};Nt.fromBytes=function(t,e,o){return o?Nt.fromBytesLE(t,e):Nt.fromBytesBE(t,e)};Nt.fromBytesLE=function(t,e){return new Nt(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};Nt.fromBytesBE=function(t,e){return new Nt(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var Ik=qt(()=>{});var vk=qt(()=>{});var Q2=qt((Y2,Vw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(Y2,typeof Vw=="object"&&Vw,typeof define=="function"&&define)});var J2=qt((Z2,Ww)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(Z2,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var t1=qt((e1,Uw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(e1,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var o1=qt((r1,Gw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(r1,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var s1=qt((n1,Hw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(n1,typeof Hw=="object"&&Hw,typeof define=="function"&&define)});var i1=qt((a1,Kw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(a1,typeof Kw=="object"&&Kw,typeof define=="function"&&define)});var u1=qt(()=>{});var c1=qt((p1,Ld)=>{(function(r,t,e){var o=256,n=6,s=52,a="random",i=e.pow(o,n),p=e.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[C,b(t)]: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),t),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(e[a]=P,O):P})(D,E,"global"in S?S.global:this==e,S.state)}function d(C){var S,k=C.length,_=this,E=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);E{var vq=Q2(),kq=J2(),Nq=t1(),Tq=o1(),_q=s1(),$q=i1(),Qu=c1();Qu.alea=vq;Qu.xor128=kq;Qu.xorwow=Nq;Qu.xorshift7=Tq;Qu.xor4096=_q;Qu.tychei=$q;l1.exports=Qu});var Bv=qt(()=>{});var zv=qt(()=>{});var RB=qt(()=>{});var DB=qt(()=>{});var AB=qt(()=>{});var FB=qt((Wg,Wv)=>{var Vv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};function e(){return oe.buffer!=Ge&&_t(oe.buffer),mt}function o(){return oe.buffer!=Ge&&_t(oe.buffer),it}function n(){return oe.buffer!=Ge&&_t(oe.buffer),gt}function s(){return oe.buffer!=Ge&&_t(oe.buffer),Lr}function a(){return oe.buffer!=Ge&&_t(oe.buffer),Lt}function i(){return oe.buffer!=Ge&&_t(oe.buffer),to}function p(){return oe.buffer!=Ge&&_t(oe.buffer),nr}var u=typeof t!="undefined"?t:{},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 E,R,D,P;function O(F){if(F instanceof Eu)return;j("exiting due to exception: "+F)}if(C){var M=Bv(),L=zv();b?k=L.dirname(k)+"/":k=__dirname+"/",E=(V,ue)=>(V=zp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:"utf8")),D=V=>{var ue=E(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,Ee)=>{V=zp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?Ee(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 Eu))throw V}),process.on("unhandledRejection",function(V){throw V}),g=(V,ue)=>{if(Bo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=RB()}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||(E=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 Ee=new XMLHttpRequest;Ee.open("GET",F,!0),Ee.responseType="arraybuffer",Ee.onload=()=>{if(Ee.status==200||Ee.status==0&&Ee.response){V(Ee.response);return}ue()},Ee.onerror=ue,Ee.send(null)}),P=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=DB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+` +var SG=Object.create;var YC=Object.defineProperty;var IG=Object.getOwnPropertyDescriptor;var vG=Object.getOwnPropertyNames;var kG=Object.getPrototypeOf,NG=Object.prototype.hasOwnProperty;var Kt=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),qe=(r,t)=>{for(var e in t)YC(r,e,{get:t[e],enumerable:!0})},TG=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vG(t))!NG.call(r,n)&&n!==e&&YC(r,n,{get:()=>t[n],enumerable:!(o=IG(t,n))||o.enumerable});return r};var Lp=(r,t,e)=>(e=r!=null?SG(kG(r)):{},TG(t||!r||!r.__esModule?YC(e,"default",{value:r,enumerable:!0}):e,r));var W0=Kt((tle,V0)=>{V0.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,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,"__isLong__",{value:!0});function Vr(r){return(r&&r.__isLong__)===!0}kt.isLong=Vr;var D0={},A0={};function Du(r,t){var e,o,n;return t?(r>>>=0,(n=0<=r&&r<256)&&(o=A0[r],o)?o:(e=Nt(r,(r|0)<0?-1:0,!0),n&&(A0[r]=e),e)):(r|=0,(n=-128<=r&&r<128)&&(o=D0[r],o)?o:(e=Nt(r,r<0?-1:0,!1),n&&(D0[r]=e),e))}kt.fromInt=Du;function No(r,t){if(isNaN(r))return t?Ru:To;if(t){if(r<0)return Ru;if(r>=M0)return z0}else{if(r<=-P0)return zr;if(r+1>=P0)return B0}return r<0?No(-r,t).neg():Nt(r%Xp|0,r/Xp|0,t)}kt.fromNumber=No;function Nt(r,t,e){return new kt(r,t,e)}kt.fromBits=Nt;var Ym=Math.pow;function pw(r,t,e){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return To;if(typeof t=="number"?(e=t,t=!1):t=!!t,e=e||10,e<2||360)throw Error("interior hyphen");if(o===0)return pw(r.substring(1),t,e).neg();for(var n=No(Ym(e,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Xp+(this.low>>>0):this.high*Xp+(this.low>>>0)};de.toString=function(t){if(t=t||10,t<2||36>>0,c=u.toString(t);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(zr)?64:this.neg().getNumBitsAbs();for(var t=this.high!=0?this.high:this.low,e=31;e>0&&!(t&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(t){return Vr(t)||(t=As(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};de.eq=de.equals;de.notEquals=function(t){return!this.eq(t)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(t){return this.comp(t)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(t){return this.comp(t)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(t){return this.comp(t)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(t){return this.comp(t)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(t){if(Vr(t)||(t=As(t)),this.eq(t))return 0;var e=this.isNegative(),o=t.isNegative();return e&&!o?-1:!e&&o?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(zr)?zr:this.not().add(jp)};de.neg=de.negate;de.add=function(t){Vr(t)||(t=As(t));var e=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=t.high>>>16,i=t.high&65535,p=t.low>>>16,u=t.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+=e+a,c&=65535,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(t){return Vr(t)||(t=As(t)),this.add(t.neg())};de.sub=de.subtract;de.multiply=function(t){if(this.isZero())return To;if(Vr(t)||(t=As(t)),ko){var e=ko.mul(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}if(t.isZero())return To;if(this.eq(zr))return t.isOdd()?zr:To;if(t.eq(zr))return this.isOdd()?zr:To;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(O0)&&t.lt(O0))return No(this.toNumber()*t.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=t.high>>>16,p=t.high&65535,u=t.low>>>16,c=t.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(t){if(Vr(t)||(t=As(t)),t.isZero())throw Error("division by zero");if(ko){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Ru:To;var o,n,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Ru;if(t.gt(this.shru(1)))return L0;s=Ru}else{if(this.eq(zr)){if(t.eq(jp)||t.eq(uw))return zr;if(t.eq(zr))return jp;var a=this.shr(1);return o=a.div(t).shl(1),o.eq(To)?t.isNegative()?jp:uw:(n=this.sub(t.mul(o)),s=o.add(n.div(t)),s)}else if(t.eq(zr))return this.unsigned?Ru:To;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();s=To}for(n=this;n.gte(t);){o=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Ym(2,i-48),u=No(o),c=u.mul(t);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(t);u.isZero()&&(u=jp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(t){if(Vr(t)||(t=As(t)),ko){var e=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,t.low,t.high);return Nt(e,ko.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(t){return Vr(t)||(t=As(t)),Nt(this.low&t.low,this.high&t.high,this.unsigned)};de.or=function(t){return Vr(t)||(t=As(t)),Nt(this.low|t.low,this.high|t.high,this.unsigned)};de.xor=function(t){return Vr(t)||(t=As(t)),Nt(this.low^t.low,this.high^t.high,this.unsigned)};de.shiftLeft=function(t){return Vr(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Nt(this.low<>>32-t,this.unsigned):Nt(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):Nt(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(t){if(Vr(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var o=this.low;return Nt(o>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Nt(e,0,this.unsigned):Nt(e>>>t-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(t){return t?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};de.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};kt.fromBytes=function(t,e,o){return o?kt.fromBytesLE(t,e):kt.fromBytesBE(t,e)};kt.fromBytesLE=function(t,e){return new kt(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};kt.fromBytesBE=function(t,e){return new kt(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var vk=Kt(()=>{});var kk=Kt(()=>{});var Z2=Kt((Q2,Vw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(Q2,typeof Vw=="object"&&Vw,typeof define=="function"&&define)});var e1=Kt((J2,Ww)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(J2,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var r1=Kt((t1,Uw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(t1,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var n1=Kt((o1,Gw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(o1,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var a1=Kt((s1,Hw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(s1,typeof Hw=="object"&&Hw,typeof define=="function"&&define)});var u1=Kt((i1,Kw)=>{(function(r,t,e){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}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(i1,typeof Kw=="object"&&Kw,typeof define=="function"&&define)});var p1=Kt(()=>{});var l1=Kt((c1,Od)=>{(function(r,t,e){var o=256,n=6,s=52,a="random",i=e.pow(o,n),p=e.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[C,b(t)]: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),t),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(e[a]=P,O):P})(D,E,"global"in S?S.global:this==e,S.state)}function d(C){var S,k=C.length,_=this,E=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);E{var vq=Z2(),kq=e1(),Nq=r1(),Tq=n1(),_q=a1(),$q=u1(),Gu=l1();Gu.alea=vq;Gu.xor128=kq;Gu.xorwow=Nq;Gu.xorshift7=Tq;Gu.xor4096=_q;Gu.tychei=$q;m1.exports=Gu});var zv=Kt(()=>{});var Vv=Kt(()=>{});var DB=Kt(()=>{});var AB=Kt(()=>{});var FB=Kt(()=>{});var PB=Kt((Vg,Uv)=>{var Wv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};function e(){return oe.buffer!=Ge&&Tt(oe.buffer),lt}function o(){return oe.buffer!=Ge&&Tt(oe.buffer),it}function n(){return oe.buffer!=Ge&&Tt(oe.buffer),ht}function s(){return oe.buffer!=Ge&&Tt(oe.buffer),Mr}function a(){return oe.buffer!=Ge&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=Ge&&Tt(oe.buffer),eo}function p(){return oe.buffer!=Ge&&Tt(oe.buffer),rr}var u=typeof t!="undefined"?t:{},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 E,R,D,P;function O(F){if(F instanceof Iu)return;j("exiting due to exception: "+F)}if(C){var M=zv(),L=Vv();b?k=L.dirname(k)+"/":k=__dirname+"/",E=(V,ue)=>(V=Dp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:"utf8")),D=V=>{var ue=E(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,Ee)=>{V=Dp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?Ee(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 Iu))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=DB()}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||(E=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 Ee=new XMLHttpRequest;Ee.open("GET",F,!0),Ee.responseType="arraybuffer",Ee.onload=()=>{if(Ee.status==200||Ee.status==0&&Ee.response){V(Ee.response);return}ue()},Ee.onerror=ue,Ee.send(null)}),P=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=AB().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"&&$u("no native wasm support detected");var oe,ie,le=!1,be;function _e(F,V){F||$u(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(F,V,ue){V>>>=0;for(var Ee=V+ue,Be=V;F[Be]&&!(Be>=Ee);)++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,Ee){if(ue>>>=0,!(Ee>0))return 0;for(var Be=ue,Le=ue+Ee-1,ge=0;ge=55296&&Ne<=57343){var Pt=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Pt&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 lt(F,V,ue){return st(F,o(),V,ue)}var Ge,mt,it,gt,xt,Lr,Lt,to,nr;S&&(Ge=u.buffer);function _t(F){Ge=F,u.HEAP8=mt=new Int8Array(F),u.HEAP16=gt=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=xt=new Uint16Array(F),u.HEAPU32=Lt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=nr=new Float64Array(F)}var sr=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ge=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:sr/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&&(Ge=oe.buffer),sr=Ge.byteLength,_t(Ge);var ar,ro=[],oo=[],hr=[],Wa=!1;function Bo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)sl(u.preRun.shift());ul(ro)}function Yt(){Wa=!0,!S&&ul(oo)}function Ua(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)l0(u.postRun.shift());ul(hr)}}function sl(F){ro.unshift(F)}function al(F){oo.unshift(F)}function l0(F){hr.unshift(F)}var Ti=0,Bp=null,Ga=null;function Cy(F){Ti++,u.monitorRunDependencies&&u.monitorRunDependencies(Ti)}function wm(F){if(Ti--,u.monitorRunDependencies&&u.monitorRunDependencies(Ti),Ti==0&&(Bp!==null&&(clearInterval(Bp),Bp=null),Ga)){var V=Ga;Ga=null,V()}}function $u(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 zp(F){return F.startsWith("file://")}var gr;gr="tfjs-backend-wasm-threaded-simd.wasm",Sm(gr)||(gr=_(gr));function Im(F){try{if(F==gr&&ne)return new Uint8Array(ne);if(D)return D(F);throw"both async and sync fetching of the wasm failed"}catch(V){$u(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!zp(gr))return fetch(gr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+gr+"'";return F.arrayBuffer()}).catch(function(){return Im(gr)});if(R)return new Promise(function(F,V){R(gr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(gr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Pt=ge.exports;if(u.asm=Pt,Dy(u.asm._emscripten_tls_init),ar=u.asm.__indirect_function_table,al(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ka){Me.loadWasmModuleToWorker(Ka,function(){--so||wm("wasm-instantiate")})})}}S||Cy("wasm-instantiate");function ue(ge){V(ge.instance,ge.module)}function Ee(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),$u(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Sm(gr)&&!zp(gr)&&!C&&typeof fetch=="function"?fetch(gr,{credentials:"same-origin"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Pt){return j("wasm streaming compile failed: "+Pt),j("falling back to ArrayBuffer instantiation"),Ee(ue)})}):Ee(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 m0,d0,vm={};function Eu(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 il(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 _i(1,1,F);be=F,Bo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new Eu(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 Eu||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 Pt=Me.pthreads[ge.targetThread];Pt?Pt.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"?pl(ge.queue):Ne==="spawnThread"?Ny(ge):Ne==="cleanupThread"?il(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=[],Ee=["onExit","onAbort","print","printErr"];for(var Be of Ee)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 ul(F){for(;F.length>0;)F.shift()(u)}function $y(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],Ee=V-ue;b0(V,Ee),Um(V)}u.establishStackSpace=$y;function _m(F){if(S)return _i(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Vp=[];function Ey(F){var V=Vp[F];return V||(F>=Vp.length&&(Vp.length=F+1),Vp[F]=V=ar.get(F)),V}function Ry(F,V){var ue=Ey(F)(V);Bo()?Me.setExitStatus(ue):y0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){h0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:"cleanupThread",thread:F}):il(F)}function $m(F,V,ue,Ee){return S?_i(3,1,F,V,ue,Ee):Em(F,V,ue,Ee)}function Em(F,V,ue,Ee){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 $m(F,V,ue,Ee);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:Ee,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 pl(F){Atomics.store(s(),F>>2,1),Wm()&&x0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=pl;function Ly(F,V,ue,Ee){if(F==V)setTimeout(()=>pl(Ee));else if(S)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:Ee});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:Ee})}return 1}function By(F,V,ue){return-1}function zy(){$u("")}function Ru(F){Ru.shown||(Ru.shown={}),Ru.shown[F]||(Ru.shown[F]=1,C&&(F="warning: "+F),j(F))}function Vy(){C||b||Ru("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 cl;C?cl=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:cl=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?AB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function _i(F,V){var ue=arguments.length-2,Ee=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Pt}return g0(F,Be,Le,V)})}var ll=[];function qy(F,V,ue){ll.length=V;for(var Ee=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,ll)}function jy(F){try{return oe.grow(F-Ge.byteLength+65535>>>16),_t(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 Ee=(Pt,so)=>Pt+(so-Pt%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,Ee(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw"unwind"}function Dm(F){return S?_i(4,1,F):52}function Am(F,V,ue,Ee,Be){return S?_i(5,1,F,V,ue,Ee,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,Ee){if(S)return _i(6,1,F,V,ue,Ee);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Pt=0;Pt>>0]);Be+=Ne}return a()[Ee>>>2]=Be,0}function Pm(F){var V=u["_"+F];return V}function Jy(F,V){e().set(F,V>>>0)}function eb(F,V,ue,Ee,Be){var Le={string:Br=>{var Hp=0;if(Br!=null&&Br!==0){var S0=(Br.length<<2)+1;Hp=Gm(S0),lt(Br,Hp,S0)}return Hp},array:Br=>{var Hp=Gm(Br.length);return Jy(Br,Hp),Hp}};function ge(Br){return V==="string"?Pe(Br):V==="boolean"?!!Br:Br}var Ne=Pm(F),Pt=[],so=0;if(Ee)for(var Ka=0;Kage==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!Ee?Pm(F):function(){return eb(F,V,ue,arguments,Ee)}}Me.init();var rb=[null,Nm,_m,$m,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:Em,_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:cl,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},f0=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)},$b=u._Bincount=function(){return($b=u._Bincount=u.asm.Bincount).apply(null,arguments)},Eb=u._BitwiseAnd=function(){return(Eb=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)},$C=u._MaxPool3D=function(){return($C=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},EC=u._MaxPool3DGrad=function(){return(EC=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)},ml=u._OneHot=function(){return(ml=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)},Wp=u._Prelu=function(){return(Wp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Up=u._RealDiv=function(){return(Up=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Gp=u._Reciprocal=function(){return(Gp=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)},$e=u._ResizeBilinearGrad=function(){return($e=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)},Gt=u._Rsqrt=function(){return(Gt=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ha=u._SearchSorted=function(){return(Ha=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},dl=u._Selu=function(){return(dl=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},br=u._Sign=function(){return(br=u._Sign=u.asm.Sign).apply(null,arguments)},$i=u._Sin=function(){return($i=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},WU=u._Softmax=function(){return(WU=u._Softmax=u.asm.Softmax).apply(null,arguments)},UU=u._Softplus=function(){return(UU=u._Softplus=u.asm.Softplus).apply(null,arguments)},GU=u._SparseFillEmptyRows=function(){return(GU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},HU=u._SparseReshape=function(){return(HU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},KU=u._SparseSegmentReduction=function(){return(KU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},qU=u._SparseToDense=function(){return(qU=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},jU=u._Sqrt=function(){return(jU=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},XU=u._Square=function(){return(XU=u._Square=u.asm.Square).apply(null,arguments)},YU=u._SquaredDifference=function(){return(YU=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},QU=u._Step=function(){return(QU=u._Step=u.asm.Step).apply(null,arguments)},ZU=u._StridedSlice=function(){return(ZU=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},JU=u._Sub=function(){return(JU=u._Sub=u.asm.Sub).apply(null,arguments)},eG=u._Sum=function(){return(eG=u._Sum=u.asm.Sum).apply(null,arguments)},tG=u._Tan=function(){return(tG=u._Tan=u.asm.Tan).apply(null,arguments)},rG=u._Tanh=function(){return(rG=u._Tanh=u.asm.Tanh).apply(null,arguments)},oG=u._TensorScatterUpdate=function(){return(oG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},nG=u._Tile=function(){return(nG=u._Tile=u.asm.Tile).apply(null,arguments)},sG=u._TopK=function(){return(sG=u._TopK=u.asm.TopK).apply(null,arguments)},aG=u._Transform=function(){return(aG=u._Transform=u.asm.Transform).apply(null,arguments)},iG=u._Transpose=function(){return(iG=u._Transpose=u.asm.Transpose).apply(null,arguments)},uG=u.__FusedMatMul=function(){return(uG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},pG=u._malloc=function(){return(pG=u._malloc=u.asm.malloc).apply(null,arguments)},cG=u._free=function(){return(cG=u._free=u.asm.free).apply(null,arguments)},lG=u.__emscripten_tls_init=function(){return(lG=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)},mG=u.___errno_location=function(){return(mG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},h0=u.__emscripten_thread_init=function(){return(h0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},dG=u.__emscripten_thread_crashed=function(){return(dG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},fG=u._emscripten_main_thread_process_queued_calls=function(){return(fG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},hG=u._emscripten_main_browser_thread_id=function(){return(hG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},g0=u._emscripten_run_in_main_runtime_thread_js=function(){return(g0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},gG=u._emscripten_dispatch_to_thread_=function(){return(gG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},x0=u.__emscripten_proxy_execute_task_queue=function(){return(x0=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)},y0=u.__emscripten_thread_exit=function(){return(y0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},b0=u._emscripten_stack_set_limits=function(){return(b0=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)},xG=u.dynCall_iijjiiii=function(){return(xG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},yG=u.dynCall_jiji=function(){return(yG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Bo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=Eu,u.PThread=Me;var Hm;Ga=function F(){Hm||C0(),Hm||(Ga=F)};function C0(F){if(F=F||f,Ti>0)return;if(S){c(u),Yt(),startWorker(u);return}if(Ks(),Ti>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Yt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Ua()))}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()();C0();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 t!="undefined")qm=t;else throw new Error("Could not find wasm module in post.js");if(Km){var bG=qm._dispose;qm._dispose=function(){bG(),Km.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return t.ready}})();typeof Wg=="object"&&typeof Wv=="object"?Wv.exports=Vv:typeof define=="function"&&define.amd?define([],function(){return Vv}):typeof Wg=="object"&&(Wg.WasmBackendModuleThreadedSimd=Vv)});var OB=qt((UFt,PB)=>{PB.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 MB=qt((Ug,Gv)=>{var Uv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!="undefined"?t:{},o,n;e.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({},e),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 e.locateFile?e.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Bp)return;E("exiting due to exception: "+K)}if(m){var S=Bv(),k=zv();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,$e)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,$t){at?$e(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 Bp))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},e.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,$e)=>{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}$e()},at.onerror=$e,at.send(null)},b=K=>document.title=K);var _=e.print||console.log.bind(console),E=e.printErr||console.warn.bind(console);Object.assign(e,a),a=null,e.arguments&&(i=e.arguments),e.thisProgram&&(p=e.thisProgram),e.quit&&(u=e.quit);var R=4,D;e.wasmBinary&&(D=e.wasmBinary);var P=e.noExitRuntime||!0;typeof WebAssembly!="object"&&hr("no native wasm support detected");var O,M=!1,L;function B(K,ae){K||hr(ae)}var z=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(K,ae,$e){ae>>>=0;for(var at=ae+$e,$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 Gt=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Gt:Qe=(Qe&7)<<18|Ke<<12|Gt<<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,$e,at){if($e>>>=0,!(at>0))return 0;for(var $t=$e,Et=$e+at-1,Qe=0;Qe=55296&&Ke<=57343){var Gt=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Gt&1023}if(Ke<=127){if($e>=Et)break;ae[$e++>>>0]=Ke}else if(Ke<=2047){if($e+1>=Et)break;ae[$e++>>>0]=192|Ke>>6,ae[$e++>>>0]=128|Ke&63}else if(Ke<=65535){if($e+2>=Et)break;ae[$e++>>>0]=224|Ke>>12,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}else{if($e+3>=Et)break;ae[$e++>>>0]=240|Ke>>18,ae[$e++>>>0]=128|Ke>>12&63,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}}return ae[$e>>>0]=0,$e-$t}function Y(K,ae,$e){return q(K,ne,ae,$e)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,e.HEAP8=re=new Int8Array(K),e.HEAP16=ee=new Int16Array(K),e.HEAP32=ie=new Int32Array(K),e.HEAPU8=ne=new Uint8Array(K),e.HEAPU16=oe=new Uint16Array(K),e.HEAPU32=le=new Uint32Array(K),e.HEAPF32=be=new Float32Array(K),e.HEAPF64=_e=new Float64Array(K)}var Fe=e.INITIAL_MEMORY||16777216,Pe,st=[],lt=[],Ge=[],mt=!1;function it(){return P}function gt(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Lt(e.preRun.shift());Ga(st)}function xt(){mt=!0,Ga(lt)}function Lr(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)nr(e.postRun.shift());Ga(Ge)}function Lt(K){st.unshift(K)}function to(K){lt.unshift(K)}function nr(K){Ge.unshift(K)}var _t=0,sr=null,ar=null;function ro(K){_t++,e.monitorRunDependencies&&e.monitorRunDependencies(_t)}function oo(K){if(_t--,e.monitorRunDependencies&&e.monitorRunDependencies(_t),_t==0&&(sr!==null&&(clearInterval(sr),sr=null),ar)){var ae=ar;ar=null,ae()}}function hr(K){e.onAbort&&e.onAbort(K),K="Aborted("+K+")",E(K),M=!0,L=1,K+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Wa="data:application/octet-stream;base64,";function Bo(K){return K.startsWith(Wa)}function Ks(K){return K.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",Bo(Yt)||(Yt=f(Yt));function Ua(K){try{if(K==Yt&&D)return new Uint8Array(D);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(ae){hr(ae)}}function sl(){if(!D&&(c||l)){if(typeof fetch=="function"&&!Ks(Yt))return fetch(Yt,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Yt+"'";return K.arrayBuffer()}).catch(function(){return Ua(Yt)});if(g)return new Promise(function(K,ae){g(Yt,function($e){K(new Uint8Array($e))},ae)})}return Promise.resolve().then(function(){return Ua(Yt)})}function al(){var K={env:il,wasi_snapshot_preview1:il};function ae(Qe,Ke){var Gt=Qe.exports;e.asm=Gt,O=e.asm.memory,ve(O.buffer),Pe=e.asm.__indirect_function_table,to(e.asm.__wasm_call_ctors),oo("wasm-instantiate")}ro("wasm-instantiate");function $e(Qe){ae(Qe.instance)}function at(Qe){return sl().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){E("failed to asynchronously prepare wasm: "+Ke),hr(Ke)})}function $t(){return!D&&typeof WebAssembly.instantiateStreaming=="function"&&!Bo(Yt)&&!Ks(Yt)&&!m&&typeof fetch=="function"?fetch(Yt,{credentials:"same-origin"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then($e,function(Gt){return E("wasm streaming compile failed: "+Gt),E("falling back to ArrayBuffer instantiation"),at($e)})}):at($e)}if(e.instantiateWasm)try{var Et=e.instantiateWasm(K,ae);return Et}catch(Qe){E("Module.instantiateWasm callback failed with error: "+Qe),n(Qe)}return $t().catch(n),{}}var l0,Ti;function Bp(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ga(K){for(;K.length>0;)K.shift()(e)}function Cy(){hr("")}function wm(){return 4294901760}function $u(){return wm()}function wy(K,ae,$e){ne.copyWithin(K>>>0,ae>>>0,ae+$e>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function zp(K){var ae=ne.length;K=K>>>0;var $e=wm();if(K>$e)return!1;let at=(Gt,no)=>Gt+(no-Gt%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($e,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var gr={varargs:void 0,get:function(){gr.varargs+=4;var K=ie[gr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,$e,at,$t){return 70}var Iy=[null,[],[]];function m0(K,ae){var $e=Iy[K];ae===0||ae===10?((K===1?_:E)(U($e,0)),$e.length=0):$e.push(ae)}function d0(K,ae,$e,at){for(var $t=0,Et=0;Et<$e;Et++){var Qe=le[ae>>>2],Ke=le[ae+4>>>2];ae+=8;for(var Gt=0;Gt>>0]);$t+=Ke}return le[at>>>2]=$t,0}function vm(K){var ae=e["_"+K];return ae}function Eu(K,ae){re.set(K,ae>>>0)}function vy(K,ae,$e,at,$t){var Et={string:br=>{var $i=0;if(br!=null&&br!==0){var Vm=(br.length<<2)+1;$i=ml(Vm),Y(br,$i,Vm)}return $i},array:br=>{var $i=ml(br.length);return Eu(br,$i),$i}};function Qe(br){return ae==="string"?j(br):ae==="boolean"?!!br:br}var Ke=vm(K),Gt=[],no=0;if(at)for(var Ha=0;HaQe==="number"||Qe==="boolean"),Et=ae!=="string";return Et&&$t&&!at?vm(K):function(){return vy(K,ae,$e,arguments,at)}}var il={abort:Cy,emscripten_get_heap_max:$u,emscripten_memcpy_big:wy,emscripten_resize_heap:zp,fd_close:Im,fd_seek:Sy,fd_write:d0},Ny=al(),km=e.___wasm_call_ctors=function(){return(km=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},Nm=e._init=function(){return(Nm=e._init=e.asm.init).apply(null,arguments)},Ty=e._init_with_threads_count=function(){return(Ty=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},Tm=e._get_threads_count=function(){return(Tm=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},_y=e._register_tensor=function(){return(_y=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},Me=e._dispose_data=function(){return(Me=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},ul=e._dispose=function(){return(ul=e._dispose=e.asm.dispose).apply(null,arguments)},$y=e._Abs=function(){return($y=e._Abs=e.asm.Abs).apply(null,arguments)},_m=e._Acos=function(){return(_m=e._Acos=e.asm.Acos).apply(null,arguments)},Vp=e._Acosh=function(){return(Vp=e._Acosh=e.asm.Acosh).apply(null,arguments)},Ey=e._Add=function(){return(Ey=e._Add=e.asm.Add).apply(null,arguments)},Ry=e._AddN=function(){return(Ry=e._AddN=e.asm.AddN).apply(null,arguments)},Dy=e._All=function(){return(Dy=e._All=e.asm.All).apply(null,arguments)},Ay=e._Any=function(){return(Ay=e._Any=e.asm.Any).apply(null,arguments)},Fy=e._ArgMax=function(){return(Fy=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},$m=e._ArgMin=function(){return($m=e._ArgMin=e.asm.ArgMin).apply(null,arguments)},Em=e._Asin=function(){return(Em=e._Asin=e.asm.Asin).apply(null,arguments)},Py=e._Asinh=function(){return(Py=e._Asinh=e.asm.Asinh).apply(null,arguments)},Oy=e._Atan=function(){return(Oy=e._Atan=e.asm.Atan).apply(null,arguments)},My=e._Atan2=function(){return(My=e._Atan2=e.asm.Atan2).apply(null,arguments)},pl=e._Atanh=function(){return(pl=e._Atanh=e.asm.Atanh).apply(null,arguments)},Ly=e._AvgPool=function(){return(Ly=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},By=e._AvgPool3D=function(){return(By=e._AvgPool3D=e.asm.AvgPool3D).apply(null,arguments)},zy=e._AvgPool3DGrad=function(){return(zy=e._AvgPool3DGrad=e.asm.AvgPool3DGrad).apply(null,arguments)},Ru=e._AvgPoolGrad=function(){return(Ru=e._AvgPoolGrad=e.asm.AvgPoolGrad).apply(null,arguments)},Vy=e._BatchMatMul=function(){return(Vy=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},Wy=e._Bincount=function(){return(Wy=e._Bincount=e.asm.Bincount).apply(null,arguments)},Rm=e._BitwiseAnd=function(){return(Rm=e._BitwiseAnd=e.asm.BitwiseAnd).apply(null,arguments)},Uy=e._Ceil=function(){return(Uy=e._Ceil=e.asm.Ceil).apply(null,arguments)},cl=e._ClipByValue=function(){return(cl=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},Gy=e._Conv2D=function(){return(Gy=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},Hy=e._Conv2DBackpropInput=function(){return(Hy=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=e._Conv3D=function(){return(Ky=e._Conv3D=e.asm.Conv3D).apply(null,arguments)},_i=e._Conv3DBackpropFilterV2=function(){return(_i=e._Conv3DBackpropFilterV2=e.asm.Conv3DBackpropFilterV2).apply(null,arguments)},ll=e._Conv3DBackpropInputV2=function(){return(ll=e._Conv3DBackpropInputV2=e.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=e._Cos=function(){return(qy=e._Cos=e.asm.Cos).apply(null,arguments)},jy=e._Cosh=function(){return(jy=e._Cosh=e.asm.Cosh).apply(null,arguments)},Xy=e._CropAndResize=function(){return(Xy=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},Yy=e._Cumprod=function(){return(Yy=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},Dm=e._Cumsum=function(){return(Dm=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},Am=e._DenseBincount=function(){return(Am=e._DenseBincount=e.asm.DenseBincount).apply(null,arguments)},Qy=e._DepthToSpace=function(){return(Qy=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},Zy=e._DepthwiseConv2dNative=function(){return(Zy=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=e._Diag=function(){return(Fm=e._Diag=e.asm.Diag).apply(null,arguments)},Pm=e._Dilation2D=function(){return(Pm=e._Dilation2D=e.asm.Dilation2D).apply(null,arguments)},Jy=e._Dilation2DBackpropFilter=function(){return(Jy=e._Dilation2DBackpropFilter=e.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=e._Dilation2DBackpropInput=function(){return(eb=e._Dilation2DBackpropInput=e.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=e._Elu=function(){return(tb=e._Elu=e.asm.Elu).apply(null,arguments)},rb=e._EluGrad=function(){return(rb=e._EluGrad=e.asm.EluGrad).apply(null,arguments)},Om=e._Equal=function(){return(Om=e._Equal=e.asm.Equal).apply(null,arguments)},f0=e._Erf=function(){return(f0=e._Erf=e.asm.Erf).apply(null,arguments)},ob=e._Exp=function(){return(ob=e._Exp=e.asm.Exp).apply(null,arguments)},nb=e._Expm1=function(){return(nb=e._Expm1=e.asm.Expm1).apply(null,arguments)},sb=e._FlipLeftRight=function(){return(sb=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},ab=e._Floor=function(){return(ab=e._Floor=e.asm.Floor).apply(null,arguments)},ib=e._FloorDiv=function(){return(ib=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},ub=e._FusedBatchNorm=function(){return(ub=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},pb=e._FusedConv2D=function(){return(pb=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},cb=e._FusedDepthwiseConv2D=function(){return(cb=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=e._Gather=function(){return(lb=e._Gather=e.asm.Gather).apply(null,arguments)},mb=e._GatherNd=function(){return(mb=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},db=e._Greater=function(){return(db=e._Greater=e.asm.Greater).apply(null,arguments)},fb=e._GreaterEqual=function(){return(fb=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},hb=e._IsFinite=function(){return(hb=e._IsFinite=e.asm.IsFinite).apply(null,arguments)},gb=e._IsInf=function(){return(gb=e._IsInf=e.asm.IsInf).apply(null,arguments)},xb=e._IsNan=function(){return(xb=e._IsNan=e.asm.IsNan).apply(null,arguments)},yb=e._LRN=function(){return(yb=e._LRN=e.asm.LRN).apply(null,arguments)},bb=e._LRNGrad=function(){return(bb=e._LRNGrad=e.asm.LRNGrad).apply(null,arguments)},Cb=e._LeakyRelu=function(){return(Cb=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},wb=e._Less=function(){return(wb=e._Less=e.asm.Less).apply(null,arguments)},Sb=e._LessEqual=function(){return(Sb=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},Ib=e._LinSpace=function(){return(Ib=e._LinSpace=e.asm.LinSpace).apply(null,arguments)},vb=e._Log=function(){return(vb=e._Log=e.asm.Log).apply(null,arguments)},kb=e._Log1p=function(){return(kb=e._Log1p=e.asm.Log1p).apply(null,arguments)},Nb=e._LogicalAnd=function(){return(Nb=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},Tb=e._LogicalNot=function(){return(Tb=e._LogicalNot=e.asm.LogicalNot).apply(null,arguments)},_b=e._LogicalOr=function(){return(_b=e._LogicalOr=e.asm.LogicalOr).apply(null,arguments)},$b=e._LogicalXor=function(){return($b=e._LogicalXor=e.asm.LogicalXor).apply(null,arguments)},Eb=e._Max=function(){return(Eb=e._Max=e.asm.Max).apply(null,arguments)},Rb=e._MaxPool=function(){return(Rb=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},Db=e._MaxPool3D=function(){return(Db=e._MaxPool3D=e.asm.MaxPool3D).apply(null,arguments)},Ab=e._MaxPool3DGrad=function(){return(Ab=e._MaxPool3DGrad=e.asm.MaxPool3DGrad).apply(null,arguments)},Fb=e._MaxPoolGrad=function(){return(Fb=e._MaxPoolGrad=e.asm.MaxPoolGrad).apply(null,arguments)},Pb=e._MaxPoolWithArgmax=function(){return(Pb=e._MaxPoolWithArgmax=e.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=e._Maximum=function(){return(Ob=e._Maximum=e.asm.Maximum).apply(null,arguments)},Mb=e._Mean=function(){return(Mb=e._Mean=e.asm.Mean).apply(null,arguments)},Lb=e._Min=function(){return(Lb=e._Min=e.asm.Min).apply(null,arguments)},Bb=e._Minimum=function(){return(Bb=e._Minimum=e.asm.Minimum).apply(null,arguments)},zb=e._MirrorPad=function(){return(zb=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},Vb=e._Mod=function(){return(Vb=e._Mod=e.asm.Mod).apply(null,arguments)},Wb=e._Multinomial=function(){return(Wb=e._Multinomial=e.asm.Multinomial).apply(null,arguments)},Ub=e._Multiply=function(){return(Ub=e._Multiply=e.asm.Multiply).apply(null,arguments)},Gb=e._Neg=function(){return(Gb=e._Neg=e.asm.Neg).apply(null,arguments)},Hb=e._NonMaxSuppressionV3=function(){return(Hb=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=e._NonMaxSuppressionV4=function(){return(Kb=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=e._NonMaxSuppressionV5=function(){return(qb=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=e._NotEqual=function(){return(jb=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},Xb=e._OneHot=function(){return(Xb=e._OneHot=e.asm.OneHot).apply(null,arguments)},Yb=e._PadV2=function(){return(Yb=e._PadV2=e.asm.PadV2).apply(null,arguments)},Qb=e._Pow=function(){return(Qb=e._Pow=e.asm.Pow).apply(null,arguments)},Zb=e._Prelu=function(){return(Zb=e._Prelu=e.asm.Prelu).apply(null,arguments)},Jb=e._Prod=function(){return(Jb=e._Prod=e.asm.Prod).apply(null,arguments)},eC=e._RealDiv=function(){return(eC=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},tC=e._Reciprocal=function(){return(tC=e._Reciprocal=e.asm.Reciprocal).apply(null,arguments)},rC=e._Relu=function(){return(rC=e._Relu=e.asm.Relu).apply(null,arguments)},oC=e._Relu6=function(){return(oC=e._Relu6=e.asm.Relu6).apply(null,arguments)},nC=e._ResizeBilinear=function(){return(nC=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},sC=e._ResizeBilinearGrad=function(){return(sC=e._ResizeBilinearGrad=e.asm.ResizeBilinearGrad).apply(null,arguments)},aC=e._ResizeNearestNeighbor=function(){return(aC=e._ResizeNearestNeighbor=e.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=e._ResizeNearestNeighborGrad=function(){return(iC=e._ResizeNearestNeighborGrad=e.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=e._Reverse=function(){return(uC=e._Reverse=e.asm.Reverse).apply(null,arguments)},pC=e._RotateWithOffset=function(){return(pC=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},cC=e._Round=function(){return(cC=e._Round=e.asm.Round).apply(null,arguments)},lC=e._Rsqrt=function(){return(lC=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},mC=e._ScatterNd=function(){return(mC=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},dC=e._SearchSorted=function(){return(dC=e._SearchSorted=e.asm.SearchSorted).apply(null,arguments)},fC=e._SelectV2=function(){return(fC=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},hC=e._Selu=function(){return(hC=e._Selu=e.asm.Selu).apply(null,arguments)},gC=e._Sigmoid=function(){return(gC=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},xC=e._Sign=function(){return(xC=e._Sign=e.asm.Sign).apply(null,arguments)},yC=e._Sin=function(){return(yC=e._Sin=e.asm.Sin).apply(null,arguments)},bC=e._Sinh=function(){return(bC=e._Sinh=e.asm.Sinh).apply(null,arguments)},CC=e._Softmax=function(){return(CC=e._Softmax=e.asm.Softmax).apply(null,arguments)},wC=e._Softplus=function(){return(wC=e._Softplus=e.asm.Softplus).apply(null,arguments)},SC=e._SparseFillEmptyRows=function(){return(SC=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},IC=e._SparseReshape=function(){return(IC=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},vC=e._SparseSegmentReduction=function(){return(vC=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},kC=e._SparseToDense=function(){return(kC=e._SparseToDense=e.asm.SparseToDense).apply(null,arguments)},NC=e._Sqrt=function(){return(NC=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},TC=e._Square=function(){return(TC=e._Square=e.asm.Square).apply(null,arguments)},_C=e._SquaredDifference=function(){return(_C=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},$C=e._Step=function(){return($C=e._Step=e.asm.Step).apply(null,arguments)},EC=e._StridedSlice=function(){return(EC=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},RC=e._Sub=function(){return(RC=e._Sub=e.asm.Sub).apply(null,arguments)},DC=e._Sum=function(){return(DC=e._Sum=e.asm.Sum).apply(null,arguments)},AC=e._Tan=function(){return(AC=e._Tan=e.asm.Tan).apply(null,arguments)},FC=e._Tanh=function(){return(FC=e._Tanh=e.asm.Tanh).apply(null,arguments)},PC=e._TensorScatterUpdate=function(){return(PC=e._TensorScatterUpdate=e.asm.TensorScatterUpdate).apply(null,arguments)},OC=e._Tile=function(){return(OC=e._Tile=e.asm.Tile).apply(null,arguments)},MC=e._TopK=function(){return(MC=e._TopK=e.asm.TopK).apply(null,arguments)},LC=e._Transform=function(){return(LC=e._Transform=e.asm.Transform).apply(null,arguments)},BC=e._Transpose=function(){return(BC=e._Transpose=e.asm.Transpose).apply(null,arguments)},zC=e.__FusedMatMul=function(){return(zC=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},VC=e._malloc=function(){return(VC=e._malloc=e.asm.malloc).apply(null,arguments)},WC=e._free=function(){return(WC=e._free=e.asm.free).apply(null,arguments)},UC=e.___errno_location=function(){return(UC=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},Mm=e.stackSave=function(){return(Mm=e.stackSave=e.asm.stackSave).apply(null,arguments)},Lm=e.stackRestore=function(){return(Lm=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},ml=e.stackAlloc=function(){return(ml=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},GC=e.dynCall_iijjiiii=function(){return(GC=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},HC=e.dynCall_jiji=function(){return(HC=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=ky;var Wp;ar=function K(){Wp||Bm(),Wp||(ar=K)};function Bm(K){if(K=K||i,_t>0||(gt(),_t>0))return;function ae(){Wp||(Wp=!0,e.calledRun=!0,!M&&(xt(),o(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),Lr()))}e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1),ae()},1)):ae()}if(e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();Bm();var Up;s&&(Up={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 Gp;if(typeof t!="undefined")Gp=t;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Gp=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Up){var KC=Gp._dispose;Gp._dispose=function(){KC(),Up.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Up.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return t.ready}})();typeof Ug=="object"&&typeof Gv=="object"?Gv.exports=Uv:typeof define=="function"&&define.amd?define([],function(){return Uv}):typeof Ug=="object"&&(Ug.WasmBackendModule=Uv)});var zo=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},ao=class{refCount(t){return zr("refCount")}incRef(t){return zr("incRef")}timerAvailable(){return!0}time(t){return zr("time")}read(t){return zr("read")}readSync(t){return zr("readSync")}readToGPU(t,e){return zr("readToGPU")}numDataIds(){return zr("numDataIds")}disposeData(t,e){return zr("disposeData")}write(t,e,o){return zr("write")}move(t,e,o,n,s){return zr("move")}createTensorFromGPUData(t,e,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 I0(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,jm(r,t,e)}function TG(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,o=0;for(;e>0;)o=Math.random()*e|0,e--,jm(r,e,o),jm(t,e,o)}function qp(r,t,e){return Math.max(r,Math.min(t,e))}function _G(r){return r%2===0?r:r+1}function jm(r,t,e){let o=r[t];r[t]=r[e],r[e]=o}function $G(r){let t=0;for(let e=0;ee+` Shapes ${r} and ${t} must match`)}function io(r){$(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function He(r){if(r.length===0)return 1;let t=r[0];for(let e=1;e0,e,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=t(a);if(e!=null&&a>=e){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function MG(r,t){let e=1,o=-1;for(let s=0;s=0)e*=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(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let n=r.slice();return n[o]=t/e,n}function Ei(r,t){let e=t.length;return r=r==null?t.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-e&&o`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),$(r.every(o=>qa(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?e+o:o)}function JC(r,t){let e=[],o=[],n=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||n?null:Ei(t,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(e.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(e.push(r[i]),o.push(i))}return{newShape:e,keptDims:o}}function ew(r,t){return Xm(r,t)}function Xm(r,t){let e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else if(r==="bool")e=new Uint8Array(t);else if(r==="string")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function tw(r,t){for(let e=0;et+=e.length),t}function Vo(r){return typeof r=="string"||r instanceof String}function v0(r){return typeof r=="boolean"}function k0(r){return typeof r=="number"}function Ri(r){return Array.isArray(r)?Ri(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":k0(r)?"float32":Vo(r)?"string":v0(r)?"bool":"float32"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Xp(r,t){for(let e=t;e=0;--o)e[o]=e[o+1]*r[o+1];return e}function N0(r,t,e,o=!1){let n=new Array;if(t.length===1){let s=t[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(e?2:1);if(o===0)return[];if(o!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?" for a complex tensor":""}.`);return N0(0,r,t,e)}function BG(r,t){if(Array.isArray(r))return r;if(t==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(t==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${t}`)}function fl(r,t){let e=Yp(r,t);for(let o=0;oo*n,1);if(t==null||t==="float32")return Du(r,new Float32Array(e));if(t==="int32")return Du(r,new Int32Array(e));if(t==="bool")return Du(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function wt(r){r.forEach(t=>{$(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function VG(r,t,e){if(t===0)return 0;if(t===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=KG(n,s)})}};function GG(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...o)=>(HG(t,o[0],o[1]),o.join("="))),t}function HG(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||"")}function KG(r,t){let e=t.toLowerCase();return e==="true"||e==="false"?e==="true":`${+e}`===e?+e:t}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 qG(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function gl(r,t){let e=qG();if(e.has(r))return e.get(r);{let o=t();return e.set(r,o),e.get(r)}}var Xs="Abs",Wo="Acos",Uo="Acosh",uo="Add",Go="AddN",Ho="All",Ko="Any",Ys="ArgMax",Qs="ArgMin",qo="Asin",jo="Asinh",Xo="Atan",Yo="Atanh",Qo="Atan2",Zo="AvgPool",Di="AvgPoolGrad",Zs="AvgPool3D",Ai="AvgPool3DGrad",Jo="BatchMatMul",Js="BatchToSpaceND",en="Bincount",ja="BitwiseAnd",Bce="BroadcastTo",ea="BroadcastArgs",bo="Cast",tn="Ceil",Co="ClipByValue",Fi="Complex",Pi="ComplexAbs",ta="Concat",rn="Conv2D",Oi="Conv2DBackpropFilter",on="Conv2DBackpropInput",nn="Conv3D",Xa="Conv3DBackpropFilterV2",sn="Conv3DBackpropInputV2",an="Cos",un="Cosh",pn="Cumprod",cn="Cumsum",ln="CropAndResize",ra="DenseBincount",mn="DepthToSpace",dn="DepthwiseConv2dNative",Mi="DepthwiseConv2dNativeBackpropFilter",Li="DepthwiseConv2dNativeBackpropInput",oa="Diag",fn="Dilation2D",Bi="Dilation2DBackpropInput",zi="Dilation2DBackpropFilter",Pu="Draw",hn="RealDiv",Vi="Einsum",gn="Elu",Ya="EluGrad",xn="Erf",yn="Equal",bn="Exp",na="ExpandDims",Cn="Expm1",Wi="FFT",sa="Fill",wn="FlipLeftRight",Sn="Floor",In="FloorDiv",vn="FusedBatchNorm",aa="GatherV2",kn="GatherNd",Nn="Greater",Tn="GreaterEqual",wo="Identity",Ui="IFFT",Gi="Imag",_n="IsFinite",$n="IsInf",En="IsNan",Rn="LeakyRelu",Dn="Less",An="LessEqual",Fn="LinSpace",Pn="Log",On="Log1p",Mn="LogicalAnd",Ln="LogicalNot",Bn="LogicalOr",$0="LogicalXor",zce="LogSoftmax",Vce="LowerBound",zn="LRN",Qa="LRNGrad",Wce="MatrixBandPart",Vn="Max",Wn="Maximum",Un="MaxPool",Hi="MaxPoolGrad",ia="MaxPool3D",Ki="MaxPool3DGrad",ua="MaxPoolWithArgmax",Gn="Mean",Hn="Min",Kn="Minimum",qn="MirrorPad",jn="Mod",Xn="Multinomial",Yn="Multiply",pa="Neg",Qn="NotEqual",Zn="NonMaxSuppressionV3",Za="NonMaxSuppressionV4",Jn="NonMaxSuppressionV5",ca="OnesLike",es="OneHot",la="Pack",ts="PadV2",Uce="Pool",rs="Pow",os="Prelu",ns="Prod",Qp="RaggedGather",Zp="RaggedRange",Jp="RaggedTensorToTensor",ma="Range",qi="Real",ss="Reciprocal",as="Relu",da="Reshape",is="ResizeNearestNeighbor",Ja="ResizeNearestNeighborGrad",us="ResizeBilinear",ei="ResizeBilinearGrad",ps="Relu6",cs="Reverse",ls="Round",ms="Rsqrt",ds="ScatterNd",fs="TensorScatterUpdate",hs="SearchSorted",fa="Select",gs="Selu",ha="Slice",xs="Sin",ys="Sinh",bs="Sign",Cs="Sigmoid",ws="Softplus",Ss="Sqrt",Is="Sum",ga="SpaceToBatchND",xa="SplitV",vs="Softmax",ji="SparseFillEmptyRows",ti="SparseReshape",ya="SparseSegmentMean",ba="SparseSegmentSum",ks="SparseToDense",Ns="SquaredDifference",Xi="Square",Ou="StaticRegexReplace",Ts="StridedSlice",Ca="StringNGrams",Yi="StringSplit",Qi="StringToHashBucketFast",_s="Sub",$s="Tan",Es="Tanh",po="Tile",Rs="TopK",Ds="Transform",co="Transpose",Zi="Unique",wa="Unpack",Ji="UnsortedSegmentSum",Gce="UpperBound",Sa="ZerosLike",So="Step",Mu="FromPixels",As="RotateWithOffset",Io="_FusedMatMul",vo="FusedConv2D",ko="FusedDepthwiseConv2D";function Ia(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function jG(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var ec=gl("kernelRegistry",()=>new Map),xl=gl("gradRegistry",()=>new Map);function tc(r,t){let e=uw(r,t);return ec.get(e)}function iw(r){return xl.get(r)}function Ym(r){let t=ec.entries(),e=[];for(;;){let{done:o,value:n}=t.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&e.push(a)}return e}function ri(r){let{kernelName:t,backendName:e}=r,o=uw(t,e);ec.has(o)&&Ia(`The kernel '${t}' for backend '${e}' is already registered`),ec.set(o,r)}function Xce(r){let{kernelName:t}=r;xl.has(t)&&A().getBool("DEBUG")&&Ia(`Overriding the gradient for '${t}'`),xl.set(t,r)}function Yce(r,t){let e=uw(r,t);if(!ec.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);ec.delete(e)}function Qce(r){if(!xl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);xl.delete(r)}function Zce(r,t){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:t});ri(n)})}function uw(r,t){return`${t}_${r}`}var y={};qe(y,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>ZC,assert:()=>$,assertNonNegativeIntegerDimensions:()=>wt,assertNonNull:()=>io,assertShapesMatch:()=>yt,bytesFromStringArray:()=>ow,bytesPerElement:()=>jp,checkConversionForErrors:()=>tw,clamp:()=>qp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>BG,createScalarValue:()=>t4,createShuffledIndices:()=>PG,decodeString:()=>sc,distSquared:()=>RG,encodeString:()=>tu,fetch:()=>o4,fingerPrint64:()=>e4,flatten:()=>Ps,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>LG,hexToLong:()=>yl,indexToLoc:()=>WG,inferDtype:()=>Ri,inferFromImplicitShape:()=>MG,isBoolean:()=>v0,isFunction:()=>qs,isInt:()=>qa,isNumber:()=>k0,isPromise:()=>Fu,isScalarShape:()=>DG,isString:()=>Vo,isTypedArray:()=>Ot,isValidDtype:()=>rw,locToIndex:()=>VG,makeOnesTypedArray:()=>fl,makeZerosNestedTypedArray:()=>zG,makeZerosTypedArray:()=>Yp,nearestDivisor:()=>Xp,nearestLargerEven:()=>_G,now:()=>Wu,parseAxisParam:()=>Ei,randUniform:()=>EG,repeatedTry:()=>OG,rightPad:()=>Au,shuffle:()=>I0,shuffleCombo:()=>TG,sizeFromShape:()=>He,sizeToSquarishShape:()=>FG,squeezeShape:()=>JC,sum:()=>$G,swap:()=>jm,tanh:()=>AG,toNestedArray:()=>Du,toTypedArray:()=>nc});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=Kp(V0());var Vu=mw.default||mw;function yl(r){return Vu.fromString(r,!0,16)}var U0=yl("c3a5c85c97cb3127"),zu=yl("b492b66fbe98f273"),wr=yl("9ae16a3b2f90404f");function lw(r){return r.xor(r.shru(47))}function G0(r,t,e){let o=r.slice(t,t+e);return Vu.fromBytes(Array.from(o),!0,!0)}function St(r,t){return G0(r,t,8)}function W0(r,t){return G0(r,t,4)}function Qt(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function eu(r,t,e=yl("9ddfea08eb382d69")){let o=r.xor(t).mul(e);o=o.xor(o.shru(47));let n=t.xor(o).mul(e);return n=n.xor(n.shru(47)),n=n.mul(e),n}function YG(r,t,e,o,n,s){n=n.add(r),s=Qt(s.add(n).add(o),21);let a=n;return n=n.add(t),n=n.add(e),s=s.add(Qt(n,44)),[n.add(o),s.add(a)]}function Jm(r,t,e,o){return YG(St(r,t),St(r,t+8),St(r,t+16),St(r,t+24),e,o)}function QG(r,t=r.length){if(t>=8){let e=wr.add(t*2),o=St(r,0).add(wr),n=St(r,t-8),s=Qt(n,37).mul(e).add(o),a=Qt(o,25).add(n).mul(e);return eu(s,a,e)}if(t>=4){let e=wr.add(t*2),o=W0(r,0);return eu(o.shl(3).add(t),W0(r,t-4),e)}if(t>0){let e=r[0],o=r[t>>1],n=r[t-1],s=e+(o<<8),a=t+(n<<2);return lw(wr.mul(s).xor(U0.mul(a))).mul(wr)}return wr}function ZG(r,t=r.length){let e=wr.add(t*2),o=St(r,0).mul(zu),n=St(r,8),s=St(r,t-8).mul(e),a=St(r,t-16).mul(wr);return eu(Qt(o.add(n),43).add(Qt(s,30)).add(a),o.add(Qt(n.add(wr),18)).add(s),e)}function JG(r,t=r.length){let e=wr.add(t*2),o=St(r,0).mul(wr),n=St(r,8),s=St(r,t-8).mul(e),a=St(r,t-16).mul(wr),i=Qt(o.add(n),43).add(Qt(s,30)).add(a),p=eu(i,o.add(Qt(n.add(wr),18)).add(s),e),u=St(r,16).mul(e),c=St(r,24),l=i.add(St(r,t-32)).mul(e),m=p.add(St(r,t-24)).mul(e);return eu(Qt(u.add(c),43).add(Qt(l,30)).add(m),u.add(Qt(c.add(o),18)).add(l),e)}function e4(r,t=r.length){let e=Vu.fromNumber(81,!0);if(t<=32)return t<=16?QG(r,t):ZG(r,t);if(t<=64)return JG(r,t);let o=e,n=e.mul(zu).add(113),s=lw(n.mul(wr).add(113)).mul(wr),a=[Vu.UZERO,Vu.UZERO],i=[Vu.UZERO,Vu.UZERO];o=o.mul(wr).add(St(r,0));let p=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do o=Qt(o.add(n).add(a[0]).add(St(r,p+8)),37).mul(zu),n=Qt(n.add(a[1]).add(St(r,p+48)),42).mul(zu),o=o.xor(i[1]),n=n.add(a[0]).add(St(r,p+40)),s=Qt(s.add(i[0]),33).mul(zu),a=Jm(r,p,a[1].mul(zu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(St(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=zu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(t-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Qt(o.add(n).add(a[0]).add(St(r,p+8)),37).mul(l),n=Qt(n.add(a[1]).add(St(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(St(r,p+40))),s=Qt(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(St(r,p+16))),[s,o]=[o,s],eu(eu(a[0],i[0],l).add(lw(n).mul(U0)).add(s),eu(a[1],i[1],l).add(o),l)}function t4(r,t){return t==="string"?tu(r):nc([r],t)}function r4(r,t){return r instanceof Float32Array&&t==="float32"||r instanceof Int32Array&&t==="int32"||r instanceof Uint8Array&&t==="bool"}function nc(r,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Ps(r)),A().getBool("DEBUG")&&tw(r,t),r4(r,t))return r;if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool"){let e=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Wu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Wu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{n4(l,c.dtype,t)})}return{kernelName:t,outputs:n,inputs:e,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(t){let{kernelName:e,outputs:o,timeMs:n,inputs:s,extraInfo:a}=t;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(e,i,p[0],p[1],s,p[2])})})}};function n4(r,t,e){if(t!=="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 H0(r,t,e){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[e.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=t[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=e(()=>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(!Cr(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 q0=20,bl=3,fw=7;function j0(r,t,e,o){let n=js(t),s=s4(r,t,e,n),a=t.length,i=td(r,t,e,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${e}`),p.push(` rank: ${a}`),p.push(` shape: [${t}]`),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"&&Su("no native wasm support detected");var oe,ie,le=!1,be;function _e(F,V){F||Su(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(F,V,ue){V>>>=0;for(var Ee=V+ue,Be=V;F[Be]&&!(Be>=Ee);)++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|no&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):""}function st(F,V,ue,Ee){if(ue>>>=0,!(Ee>0))return 0;for(var Be=ue,Le=ue+Ee-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 Ge,lt,it,ht,gt,Mr,Mt,eo,rr;S&&(Ge=u.buffer);function Tt(F){Ge=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Mr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=eo=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ge=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&&(Ge=oe.buffer),or=Ge.byteLength,Tt(Ge);var nr,to=[],ro=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)tl(u.preRun.shift());nl(to)}function Xt(){Va=!0,!S&&nl(ro)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)m0(u.postRun.shift());nl(fr)}}function tl(F){to.unshift(F)}function rl(F){ro.unshift(F)}function m0(F){fr.unshift(F)}var vi=0,Rp=null,Ua=null;function by(F){vi++,u.monitorRunDependencies&&u.monitorRunDependencies(vi)}function bm(F){if(vi--,u.monitorRunDependencies&&u.monitorRunDependencies(vi),vi==0&&(Rp!==null&&(clearInterval(Rp),Rp=null),Ua)){var V=Ua;Ua=null,V()}}function Su(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 Cy="data:application/octet-stream;base64,";function Cm(F){return F.startsWith(Cy)}function Dp(F){return F.startsWith("file://")}var hr;hr="tfjs-backend-wasm-threaded-simd.wasm",Cm(hr)||(hr=_(hr));function wm(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){Su(V)}}function wy(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!Dp(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 wm(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return wm(hr)})}function Sy(){var F={env:Fm,wasi_snapshot_preview1:Fm};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Ry(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,rl(u.asm.__wasm_call_ctors),ie=Ne,!S){var no=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--no||bm("wasm-instantiate")})})}}S||by("wasm-instantiate");function ue(ge){V(ge.instance,ge.module)}function Ee(ge){return wy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j("failed to asynchronously prepare wasm: "+Ne),Su(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Cm(hr)&&!Dp(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"),Ee(ue)})}):Ee(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 d0,f0,Sm={};function Iu(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function Iy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),qC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function vy(F){var V=Me.pthreads[F];V.postMessage({cmd:"cancel"})}function ol(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function ky(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 Im={varargs:void 0,get:function(){Im.varargs+=4;var F=s()[Im.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function vm(F){if(S)return ki(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new Iu(F))}function Ny(F,V){if(be=F,!V&&S)throw Nm(F),"unwind";vm(F)}var km=Ny;function Ty(F){if(F instanceof Iu||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(),qC(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!=zm()){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"?sl(ge.queue):Ne==="spawnThread"?ky(ge):Ne==="cleanupThread"?ol(ge.thread):Ne==="killThread"?Iy(ge.thread):Ne==="cancelThread"?vy(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=[],Ee=["onExit","onAbort","print","printErr"];for(var Be of Ee)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 nl(F){for(;F.length>0;)F.shift()(u)}function _y(){var F=zm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],Ee=V-ue;C0(V,Ee),Vm(V)}u.establishStackSpace=_y;function Nm(F){if(S)return ki(2,0,F);try{km(F)}catch(V){Ty(V)}}var Ap=[];function $y(F){var V=Ap[F];return V||(F>=Ap.length&&(Ap.length=F+1),Ap[F]=V=nr.get(F)),V}function Ey(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):b0(ue)}u.invokeEntryPoint=Ey;function Ry(F){Me.tlsInitFunctions.push(F)}function Dy(F){g0(F,!b,1,!x),Me.threadInitTLS()}function Ay(F){S?postMessage({cmd:"cleanupThread",thread:F}):ol(F)}function Tm(F,V,ue,Ee){return S?ki(3,1,F,V,ue,Ee):_m(F,V,ue,Ee)}function _m(F,V,ue,Ee){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 Tm(F,V,ue,Ee);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:Ee,transferList:Be};return S?(ge.cmd="spawnThread",postMessage(ge,Be),0):ky(ge)}function Fy(){return 65536}var Py=!0;function Oy(){return Py}function sl(F){Atomics.store(s(),F>>2,1),zm()&&y0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=sl;function My(F,V,ue,Ee){if(F==V)setTimeout(()=>sl(Ee));else if(S)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:Ee});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:Ee})}return 1}function Ly(F,V,ue){return-1}function By(){Su("")}function vu(F){vu.shown||(vu.shown={}),vu.shown[F]||(vu.shown[F]=1,C&&(F="warning: "+F),j(F))}function zy(){C||b||vu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Vy(){return Date.now()}function $m(){return 4294901760}function Wy(){return $m()}var al;C?al=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:al=()=>performance.timeOrigin+performance.now();function Uy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Gy(){return C?FB().cpus().length:navigator.hardwareConcurrency}function Hy(F){var V=jC(),ue=F();return Vm(V),ue}function ki(F,V){var ue=arguments.length-2,Ee=arguments;return Hy(()=>{for(var Be=ue,Le=Wm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return x0(F,Be,Le,V)})}var il=[];function Ky(F,V,ue){il.length=V;for(var Ee=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?Sm[-F-1]:tb[F];return ge.apply(null,il)}function qy(F){try{return oe.grow(F-Ge.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function jy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=$m();if(F>ue)return!1;let Ee=(Ft,no)=>Ft+(no-Ft%no)%no;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,Ee(Math.max(F,Le),65536)),Ne=qy(ge);if(Ne)return!0}return!1}function Xy(){throw"unwind"}function Em(F){return S?ki(4,1,F):52}function Rm(F,V,ue,Ee,Be){return S?ki(5,1,F,V,ue,Ee,Be):70}var Yy=[null,[],[]];function Qy(F,V){var ue=Yy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Dm(F,V,ue,Ee){if(S)return ki(6,1,F,V,ue,Ee);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()[Ee>>>2]=Be,0}function Am(F){var V=u["_"+F];return V}function Zy(F,V){e().set(F,V>>>0)}function Jy(F,V,ue,Ee,Be){var Le={string:Lr=>{var Mp=0;if(Lr!=null&&Lr!==0){var I0=(Lr.length<<2)+1;Mp=Wm(I0),ct(Lr,Mp,I0)}return Mp},array:Lr=>{var Mp=Wm(Lr.length);return Zy(Lr,Mp),Mp}};function ge(Lr){return V==="string"?Pe(Lr):V==="boolean"?!!Lr:Lr}var Ne=Am(F),Ft=[],no=0;if(Ee)for(var Ha=0;Hage==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!Ee?Am(F):function(){return Jy(F,V,ue,arguments,Ee)}}Me.init();var tb=[null,vm,Nm,Tm,Em,Rm,Dm],Fm={__emscripten_init_main_thread_js:Dy,__emscripten_thread_cleanup:Ay,__pthread_create_js:_m,_emscripten_default_pthread_stack_size:Fy,_emscripten_get_now_is_monotonic:Oy,_emscripten_notify_task_queue:My,_emscripten_set_offscreencanvas_size:Ly,abort:By,emscripten_check_blocking_allowed:zy,emscripten_date_now:Vy,emscripten_get_heap_max:Wy,emscripten_get_now:al,emscripten_memcpy_big:Uy,emscripten_num_logical_cores:Gy,emscripten_receive_on_main_thread_js:Ky,emscripten_resize_heap:jy,emscripten_unwind_to_js_event_loop:Xy,exit:km,fd_close:Em,fd_seek:Rm,fd_write:Dm,memory:oe||u.wasmMemory},h0=Sy(),rb=u.___wasm_call_ctors=function(){return(rb=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},ob=u._init=function(){return(ob=u._init=u.asm.init).apply(null,arguments)},nb=u._init_with_threads_count=function(){return(nb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},sb=u._get_threads_count=function(){return(sb=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ab=u._register_tensor=function(){return(ab=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ib=u._dispose_data=function(){return(ib=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},ub=u._dispose=function(){return(ub=u._dispose=u.asm.dispose).apply(null,arguments)},pb=u._Abs=function(){return(pb=u._Abs=u.asm.Abs).apply(null,arguments)},cb=u._Acos=function(){return(cb=u._Acos=u.asm.Acos).apply(null,arguments)},lb=u._Acosh=function(){return(lb=u._Acosh=u.asm.Acosh).apply(null,arguments)},mb=u._Add=function(){return(mb=u._Add=u.asm.Add).apply(null,arguments)},db=u._AddN=function(){return(db=u._AddN=u.asm.AddN).apply(null,arguments)},fb=u._All=function(){return(fb=u._All=u.asm.All).apply(null,arguments)},hb=u._Any=function(){return(hb=u._Any=u.asm.Any).apply(null,arguments)},gb=u._ArgMax=function(){return(gb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},xb=u._ArgMin=function(){return(xb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},yb=u._Asin=function(){return(yb=u._Asin=u.asm.Asin).apply(null,arguments)},bb=u._Asinh=function(){return(bb=u._Asinh=u.asm.Asinh).apply(null,arguments)},Cb=u._Atan=function(){return(Cb=u._Atan=u.asm.Atan).apply(null,arguments)},wb=u._Atan2=function(){return(wb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Sb=u._Atanh=function(){return(Sb=u._Atanh=u.asm.Atanh).apply(null,arguments)},Ib=u._AvgPool=function(){return(Ib=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},vb=u._AvgPool3D=function(){return(vb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},kb=u._AvgPool3DGrad=function(){return(kb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Nb=u._AvgPoolGrad=function(){return(Nb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},Tb=u._BatchMatMul=function(){return(Tb=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},_b=u._Bincount=function(){return(_b=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Eb=u._Ceil=function(){return(Eb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Rb=u._ClipByValue=function(){return(Rb=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Db=u._Conv2D=function(){return(Db=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Ab=u._Conv2DBackpropInput=function(){return(Ab=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Fb=u._Conv3D=function(){return(Fb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Pb=u._Conv3DBackpropFilterV2=function(){return(Pb=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ob=u._Conv3DBackpropInputV2=function(){return(Ob=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Mb=u._Cos=function(){return(Mb=u._Cos=u.asm.Cos).apply(null,arguments)},Lb=u._Cosh=function(){return(Lb=u._Cosh=u.asm.Cosh).apply(null,arguments)},Bb=u._CropAndResize=function(){return(Bb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},zb=u._Cumprod=function(){return(zb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Vb=u._Cumsum=function(){return(Vb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Wb=u._DenseBincount=function(){return(Wb=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Ub=u._DepthToSpace=function(){return(Ub=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Gb=u._DepthwiseConv2dNative=function(){return(Gb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Hb=u._Diag=function(){return(Hb=u._Diag=u.asm.Diag).apply(null,arguments)},Kb=u._Dilation2D=function(){return(Kb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},qb=u._Dilation2DBackpropFilter=function(){return(qb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},jb=u._Dilation2DBackpropInput=function(){return(jb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Xb=u._Elu=function(){return(Xb=u._Elu=u.asm.Elu).apply(null,arguments)},Yb=u._EluGrad=function(){return(Yb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Qb=u._Equal=function(){return(Qb=u._Equal=u.asm.Equal).apply(null,arguments)},Zb=u._Erf=function(){return(Zb=u._Erf=u.asm.Erf).apply(null,arguments)},Jb=u._Exp=function(){return(Jb=u._Exp=u.asm.Exp).apply(null,arguments)},eC=u._Expm1=function(){return(eC=u._Expm1=u.asm.Expm1).apply(null,arguments)},tC=u._FlipLeftRight=function(){return(tC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},rC=u._Floor=function(){return(rC=u._Floor=u.asm.Floor).apply(null,arguments)},oC=u._FloorDiv=function(){return(oC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},nC=u._FusedBatchNorm=function(){return(nC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},sC=u._FusedConv2D=function(){return(sC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},aC=u._FusedDepthwiseConv2D=function(){return(aC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},iC=u._Gather=function(){return(iC=u._Gather=u.asm.Gather).apply(null,arguments)},uC=u._GatherNd=function(){return(uC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},pC=u._Greater=function(){return(pC=u._Greater=u.asm.Greater).apply(null,arguments)},cC=u._GreaterEqual=function(){return(cC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},lC=u._IsFinite=function(){return(lC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},mC=u._IsInf=function(){return(mC=u._IsInf=u.asm.IsInf).apply(null,arguments)},dC=u._IsNan=function(){return(dC=u._IsNan=u.asm.IsNan).apply(null,arguments)},fC=u._LRN=function(){return(fC=u._LRN=u.asm.LRN).apply(null,arguments)},hC=u._LRNGrad=function(){return(hC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},gC=u._LeakyRelu=function(){return(gC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},xC=u._Less=function(){return(xC=u._Less=u.asm.Less).apply(null,arguments)},yC=u._LessEqual=function(){return(yC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},bC=u._LinSpace=function(){return(bC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},CC=u._Log=function(){return(CC=u._Log=u.asm.Log).apply(null,arguments)},wC=u._Log1p=function(){return(wC=u._Log1p=u.asm.Log1p).apply(null,arguments)},SC=u._LogicalAnd=function(){return(SC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},IC=u._LogicalNot=function(){return(IC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},vC=u._LogicalOr=function(){return(vC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},kC=u._LogicalXor=function(){return(kC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},NC=u._Max=function(){return(NC=u._Max=u.asm.Max).apply(null,arguments)},TC=u._MaxPool=function(){return(TC=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},_C=u._MaxPool3D=function(){return(_C=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},EC=u._MaxPoolGrad=function(){return(EC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},RC=u._MaxPoolWithArgmax=function(){return(RC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},DC=u._Maximum=function(){return(DC=u._Maximum=u.asm.Maximum).apply(null,arguments)},AC=u._Mean=function(){return(AC=u._Mean=u.asm.Mean).apply(null,arguments)},FC=u._Min=function(){return(FC=u._Min=u.asm.Min).apply(null,arguments)},PC=u._Minimum=function(){return(PC=u._Minimum=u.asm.Minimum).apply(null,arguments)},OC=u._MirrorPad=function(){return(OC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},MC=u._Mod=function(){return(MC=u._Mod=u.asm.Mod).apply(null,arguments)},LC=u._Multinomial=function(){return(LC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},BC=u._Multiply=function(){return(BC=u._Multiply=u.asm.Multiply).apply(null,arguments)},zC=u._Neg=function(){return(zC=u._Neg=u.asm.Neg).apply(null,arguments)},VC=u._NonMaxSuppressionV3=function(){return(VC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},WC=u._NonMaxSuppressionV4=function(){return(WC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Pm=u._NonMaxSuppressionV5=function(){return(Pm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Om=u._NotEqual=function(){return(Om=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},ul=u._OneHot=function(){return(ul=u._OneHot=u.asm.OneHot).apply(null,arguments)},UC=u._PadV2=function(){return(UC=u._PadV2=u.asm.PadV2).apply(null,arguments)},GC=u._Pow=function(){return(GC=u._Pow=u.asm.Pow).apply(null,arguments)},Fp=u._Prelu=function(){return(Fp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Mm=u._Prod=function(){return(Mm=u._Prod=u.asm.Prod).apply(null,arguments)},Pp=u._RealDiv=function(){return(Pp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Op=u._Reciprocal=function(){return(Op=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},HC=u._Relu=function(){return(HC=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)},$e=u._ResizeBilinearGrad=function(){return($e=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)},$t=u._Reverse=function(){return($t=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)},oo=u._ScatterNd=function(){return(oo=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},Lm=u._SelectV2=function(){return(Lm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},pl=u._Selu=function(){return(pl=u._Selu=u.asm.Selu).apply(null,arguments)},KC=u._Sigmoid=function(){return(KC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ni=u._Sin=function(){return(Ni=u._Sin=u.asm.Sin).apply(null,arguments)},Bm=u._Sinh=function(){return(Bm=u._Sinh=u.asm.Sinh).apply(null,arguments)},UU=u._Softmax=function(){return(UU=u._Softmax=u.asm.Softmax).apply(null,arguments)},GU=u._Softplus=function(){return(GU=u._Softplus=u.asm.Softplus).apply(null,arguments)},HU=u._SparseFillEmptyRows=function(){return(HU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},KU=u._SparseReshape=function(){return(KU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},qU=u._SparseSegmentReduction=function(){return(qU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},jU=u._SparseToDense=function(){return(jU=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},XU=u._Sqrt=function(){return(XU=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},YU=u._Square=function(){return(YU=u._Square=u.asm.Square).apply(null,arguments)},QU=u._SquaredDifference=function(){return(QU=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},ZU=u._Step=function(){return(ZU=u._Step=u.asm.Step).apply(null,arguments)},JU=u._StridedSlice=function(){return(JU=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},eG=u._Sub=function(){return(eG=u._Sub=u.asm.Sub).apply(null,arguments)},tG=u._Sum=function(){return(tG=u._Sum=u.asm.Sum).apply(null,arguments)},rG=u._Tan=function(){return(rG=u._Tan=u.asm.Tan).apply(null,arguments)},oG=u._Tanh=function(){return(oG=u._Tanh=u.asm.Tanh).apply(null,arguments)},nG=u._TensorScatterUpdate=function(){return(nG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},sG=u._Tile=function(){return(sG=u._Tile=u.asm.Tile).apply(null,arguments)},aG=u._TopK=function(){return(aG=u._TopK=u.asm.TopK).apply(null,arguments)},iG=u._Transform=function(){return(iG=u._Transform=u.asm.Transform).apply(null,arguments)},uG=u._Transpose=function(){return(uG=u._Transpose=u.asm.Transpose).apply(null,arguments)},pG=u.__FusedMatMul=function(){return(pG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},cG=u._malloc=function(){return(cG=u._malloc=u.asm.malloc).apply(null,arguments)},lG=u._free=function(){return(lG=u._free=u.asm.free).apply(null,arguments)},mG=u.__emscripten_tls_init=function(){return(mG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},zm=u._pthread_self=function(){return(zm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},dG=u.___errno_location=function(){return(dG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},g0=u.__emscripten_thread_init=function(){return(g0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},fG=u.__emscripten_thread_crashed=function(){return(fG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},hG=u._emscripten_main_thread_process_queued_calls=function(){return(hG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},gG=u._emscripten_main_browser_thread_id=function(){return(gG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},x0=u._emscripten_run_in_main_runtime_thread_js=function(){return(x0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},xG=u._emscripten_dispatch_to_thread_=function(){return(xG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},y0=u.__emscripten_proxy_execute_task_queue=function(){return(y0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},qC=u.__emscripten_thread_free_data=function(){return(qC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},b0=u.__emscripten_thread_exit=function(){return(b0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},C0=u._emscripten_stack_set_limits=function(){return(C0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},jC=u.stackSave=function(){return(jC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Vm=u.stackRestore=function(){return(Vm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Wm=u.stackAlloc=function(){return(Wm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},yG=u.dynCall_iijjiiii=function(){return(yG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},bG=u.dynCall_jiji=function(){return(bG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=eb,u.ExitStatus=Iu,u.PThread=Me;var Um;Ua=function F(){Um||w0(),Um||(Ua=F)};function w0(F){if(F=F||f,vi>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),vi>0)return;function V(){Um||(Um=!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()();w0();var Gm;m&&(Gm={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 Hm;if(typeof WasmBackendModule!="undefined")Hm=WasmBackendModule;else if(typeof t!="undefined")Hm=t;else throw new Error("Could not find wasm module in post.js");if(Gm){var CG=Hm._dispose;Hm._dispose=function(){CG(),Gm.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Gm.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return t.ready}})();typeof Vg=="object"&&typeof Uv=="object"?Uv.exports=Wv:typeof define=="function"&&define.amd?define([],function(){return Wv}):typeof Vg=="object"&&(Vg.WasmBackendModuleThreadedSimd=Wv)});var MB=Kt((GFt,OB)=>{OB.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 LB=Kt((Wg,Hv)=>{var Gv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!="undefined"?t:{},o,n;e.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({},e),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 e.locateFile?e.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Rp)return;E("exiting due to exception: "+K)}if(m){var S=zv(),k=Vv();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,$e)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?$e(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 Rp))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},e.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,$e)=>{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}$e()},at.onerror=$e,at.send(null)},b=K=>document.title=K);var _=e.print||console.log.bind(console),E=e.printErr||console.warn.bind(console);Object.assign(e,a),a=null,e.arguments&&(i=e.arguments),e.thisProgram&&(p=e.thisProgram),e.quit&&(u=e.quit);var R=4,D;e.wasmBinary&&(D=e.wasmBinary);var P=e.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,$e){ae>>>=0;for(var at=ae+$e,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var $t="";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){$t+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){$t+=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)$t+=String.fromCharCode(Qe);else{var oo=Qe-65536;$t+=String.fromCharCode(55296|oo>>10,56320|oo&1023)}}return $t}function j(K,ae){return K>>>=0,K?U(ne,K,ae):""}function q(K,ae,$e,at){if($e>>>=0,!(at>0))return 0;for(var _t=$e,$t=$e+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if($e>=$t)break;ae[$e++>>>0]=Ke}else if(Ke<=2047){if($e+1>=$t)break;ae[$e++>>>0]=192|Ke>>6,ae[$e++>>>0]=128|Ke&63}else if(Ke<=65535){if($e+2>=$t)break;ae[$e++>>>0]=224|Ke>>12,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}else{if($e+3>=$t)break;ae[$e++>>>0]=240|Ke>>18,ae[$e++>>>0]=128|Ke>>12&63,ae[$e++>>>0]=128|Ke>>6&63,ae[$e++>>>0]=128|Ke&63}}return ae[$e>>>0]=0,$e-_t}function Y(K,ae,$e){return q(K,ne,ae,$e)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,e.HEAP8=re=new Int8Array(K),e.HEAP16=ee=new Int16Array(K),e.HEAP32=ie=new Int32Array(K),e.HEAPU8=ne=new Uint8Array(K),e.HEAPU16=oe=new Uint16Array(K),e.HEAPU32=le=new Uint32Array(K),e.HEAPF32=be=new Float32Array(K),e.HEAPF64=_e=new Float64Array(K)}var Fe=e.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],Ge=[],lt=!1;function it(){return P}function ht(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Mt(e.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Mr(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)rr(e.postRun.shift());Ua(Ge)}function Mt(K){st.unshift(K)}function eo(K){ct.unshift(K)}function rr(K){Ge.unshift(K)}var Tt=0,or=null,nr=null;function to(K){Tt++,e.monitorRunDependencies&&e.monitorRunDependencies(Tt)}function ro(K){if(Tt--,e.monitorRunDependencies&&e.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){e.onAbort&&e.onAbort(K),K="Aborted("+K+")",E(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 tl(){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($e){K(new Uint8Array($e))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function rl(){var K={env:ol,wasi_snapshot_preview1:ol};function ae(Qe,Ke){var Ut=Qe.exports;e.asm=Ut,O=e.asm.memory,ve(O.buffer),Pe=e.asm.__indirect_function_table,eo(e.asm.__wasm_call_ctors),ro("wasm-instantiate")}to("wasm-instantiate");function $e(Qe){ae(Qe.instance)}function at(Qe){return tl().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){E("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($e,function(Ut){return E("wasm streaming compile failed: "+Ut),E("falling back to ArrayBuffer instantiation"),at($e)})}):at($e)}if(e.instantiateWasm)try{var $t=e.instantiateWasm(K,ae);return $t}catch(Qe){E("Module.instantiateWasm callback failed with error: "+Qe),n(Qe)}return _t().catch(n),{}}var m0,vi;function Rp(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(e)}function by(){fr("")}function bm(){return 4294901760}function Su(){return bm()}function Cy(K,ae,$e){ne.copyWithin(K>>>0,ae>>>0,ae+$e>>>0)}function Cm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Dp(K){var ae=ne.length;K=K>>>0;var $e=bm();if(K>$e)return!1;let at=(Ut,oo)=>Ut+(oo-Ut%oo)%oo;for(var _t=1;_t<=4;_t*=2){var $t=ae*(1+.2/_t);$t=Math.min($t,K+100663296);var Qe=Math.min($e,at(Math.max(K,$t),65536)),Ke=Cm(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 wm(K){return 52}function wy(K,ae,$e,at,_t){return 70}var Sy=[null,[],[]];function d0(K,ae){var $e=Sy[K];ae===0||ae===10?((K===1?_:E)(U($e,0)),$e.length=0):$e.push(ae)}function f0(K,ae,$e,at){for(var _t=0,$t=0;$t<$e;$t++){var Qe=le[ae>>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function Sm(K){var ae=e["_"+K];return ae}function Iu(K,ae){re.set(K,ae>>>0)}function Iy(K,ae,$e,at,_t){var $t={string:yr=>{var Ni=0;if(yr!=null&&yr!==0){var Bm=(yr.length<<2)+1;Ni=ul(Bm),Y(yr,Ni,Bm)}return Ni},array:yr=>{var Ni=ul(yr.length);return Iu(yr,Ni),Ni}};function Qe(yr){return ae==="string"?j(yr):ae==="boolean"?!!yr:yr}var Ke=Sm(K),Ut=[],oo=0;if(at)for(var Ga=0;GaQe==="number"||Qe==="boolean"),$t=ae!=="string";return $t&&_t&&!at?Sm(K):function(){return Iy(K,ae,$e,arguments,at)}}var ol={abort:by,emscripten_get_heap_max:Su,emscripten_memcpy_big:Cy,emscripten_resize_heap:Dp,fd_close:wm,fd_seek:wy,fd_write:f0},ky=rl(),Im=e.___wasm_call_ctors=function(){return(Im=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},vm=e._init=function(){return(vm=e._init=e.asm.init).apply(null,arguments)},Ny=e._init_with_threads_count=function(){return(Ny=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},km=e._get_threads_count=function(){return(km=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},Ty=e._register_tensor=function(){return(Ty=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},Me=e._dispose_data=function(){return(Me=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},nl=e._dispose=function(){return(nl=e._dispose=e.asm.dispose).apply(null,arguments)},_y=e._Abs=function(){return(_y=e._Abs=e.asm.Abs).apply(null,arguments)},Nm=e._Acos=function(){return(Nm=e._Acos=e.asm.Acos).apply(null,arguments)},Ap=e._Acosh=function(){return(Ap=e._Acosh=e.asm.Acosh).apply(null,arguments)},$y=e._Add=function(){return($y=e._Add=e.asm.Add).apply(null,arguments)},Ey=e._AddN=function(){return(Ey=e._AddN=e.asm.AddN).apply(null,arguments)},Ry=e._All=function(){return(Ry=e._All=e.asm.All).apply(null,arguments)},Dy=e._Any=function(){return(Dy=e._Any=e.asm.Any).apply(null,arguments)},Ay=e._ArgMax=function(){return(Ay=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},Tm=e._ArgMin=function(){return(Tm=e._ArgMin=e.asm.ArgMin).apply(null,arguments)},_m=e._Asin=function(){return(_m=e._Asin=e.asm.Asin).apply(null,arguments)},Fy=e._Asinh=function(){return(Fy=e._Asinh=e.asm.Asinh).apply(null,arguments)},Py=e._Atan=function(){return(Py=e._Atan=e.asm.Atan).apply(null,arguments)},Oy=e._Atan2=function(){return(Oy=e._Atan2=e.asm.Atan2).apply(null,arguments)},sl=e._Atanh=function(){return(sl=e._Atanh=e.asm.Atanh).apply(null,arguments)},My=e._AvgPool=function(){return(My=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},Ly=e._AvgPool3D=function(){return(Ly=e._AvgPool3D=e.asm.AvgPool3D).apply(null,arguments)},By=e._AvgPool3DGrad=function(){return(By=e._AvgPool3DGrad=e.asm.AvgPool3DGrad).apply(null,arguments)},vu=e._AvgPoolGrad=function(){return(vu=e._AvgPoolGrad=e.asm.AvgPoolGrad).apply(null,arguments)},zy=e._BatchMatMul=function(){return(zy=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},Vy=e._Bincount=function(){return(Vy=e._Bincount=e.asm.Bincount).apply(null,arguments)},$m=e._BitwiseAnd=function(){return($m=e._BitwiseAnd=e.asm.BitwiseAnd).apply(null,arguments)},Wy=e._Ceil=function(){return(Wy=e._Ceil=e.asm.Ceil).apply(null,arguments)},al=e._ClipByValue=function(){return(al=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},Uy=e._Conv2D=function(){return(Uy=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},Gy=e._Conv2DBackpropInput=function(){return(Gy=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},Hy=e._Conv3D=function(){return(Hy=e._Conv3D=e.asm.Conv3D).apply(null,arguments)},ki=e._Conv3DBackpropFilterV2=function(){return(ki=e._Conv3DBackpropFilterV2=e.asm.Conv3DBackpropFilterV2).apply(null,arguments)},il=e._Conv3DBackpropInputV2=function(){return(il=e._Conv3DBackpropInputV2=e.asm.Conv3DBackpropInputV2).apply(null,arguments)},Ky=e._Cos=function(){return(Ky=e._Cos=e.asm.Cos).apply(null,arguments)},qy=e._Cosh=function(){return(qy=e._Cosh=e.asm.Cosh).apply(null,arguments)},jy=e._CropAndResize=function(){return(jy=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},Xy=e._Cumprod=function(){return(Xy=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},Em=e._Cumsum=function(){return(Em=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},Rm=e._DenseBincount=function(){return(Rm=e._DenseBincount=e.asm.DenseBincount).apply(null,arguments)},Yy=e._DepthToSpace=function(){return(Yy=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},Qy=e._DepthwiseConv2dNative=function(){return(Qy=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},Dm=e._Diag=function(){return(Dm=e._Diag=e.asm.Diag).apply(null,arguments)},Am=e._Dilation2D=function(){return(Am=e._Dilation2D=e.asm.Dilation2D).apply(null,arguments)},Zy=e._Dilation2DBackpropFilter=function(){return(Zy=e._Dilation2DBackpropFilter=e.asm.Dilation2DBackpropFilter).apply(null,arguments)},Jy=e._Dilation2DBackpropInput=function(){return(Jy=e._Dilation2DBackpropInput=e.asm.Dilation2DBackpropInput).apply(null,arguments)},eb=e._Elu=function(){return(eb=e._Elu=e.asm.Elu).apply(null,arguments)},tb=e._EluGrad=function(){return(tb=e._EluGrad=e.asm.EluGrad).apply(null,arguments)},Fm=e._Equal=function(){return(Fm=e._Equal=e.asm.Equal).apply(null,arguments)},h0=e._Erf=function(){return(h0=e._Erf=e.asm.Erf).apply(null,arguments)},rb=e._Exp=function(){return(rb=e._Exp=e.asm.Exp).apply(null,arguments)},ob=e._Expm1=function(){return(ob=e._Expm1=e.asm.Expm1).apply(null,arguments)},nb=e._FlipLeftRight=function(){return(nb=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},sb=e._Floor=function(){return(sb=e._Floor=e.asm.Floor).apply(null,arguments)},ab=e._FloorDiv=function(){return(ab=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},ib=e._FusedBatchNorm=function(){return(ib=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},ub=e._FusedConv2D=function(){return(ub=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},pb=e._FusedDepthwiseConv2D=function(){return(pb=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},cb=e._Gather=function(){return(cb=e._Gather=e.asm.Gather).apply(null,arguments)},lb=e._GatherNd=function(){return(lb=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},mb=e._Greater=function(){return(mb=e._Greater=e.asm.Greater).apply(null,arguments)},db=e._GreaterEqual=function(){return(db=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},fb=e._IsFinite=function(){return(fb=e._IsFinite=e.asm.IsFinite).apply(null,arguments)},hb=e._IsInf=function(){return(hb=e._IsInf=e.asm.IsInf).apply(null,arguments)},gb=e._IsNan=function(){return(gb=e._IsNan=e.asm.IsNan).apply(null,arguments)},xb=e._LRN=function(){return(xb=e._LRN=e.asm.LRN).apply(null,arguments)},yb=e._LRNGrad=function(){return(yb=e._LRNGrad=e.asm.LRNGrad).apply(null,arguments)},bb=e._LeakyRelu=function(){return(bb=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},Cb=e._Less=function(){return(Cb=e._Less=e.asm.Less).apply(null,arguments)},wb=e._LessEqual=function(){return(wb=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},Sb=e._LinSpace=function(){return(Sb=e._LinSpace=e.asm.LinSpace).apply(null,arguments)},Ib=e._Log=function(){return(Ib=e._Log=e.asm.Log).apply(null,arguments)},vb=e._Log1p=function(){return(vb=e._Log1p=e.asm.Log1p).apply(null,arguments)},kb=e._LogicalAnd=function(){return(kb=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},Nb=e._LogicalNot=function(){return(Nb=e._LogicalNot=e.asm.LogicalNot).apply(null,arguments)},Tb=e._LogicalOr=function(){return(Tb=e._LogicalOr=e.asm.LogicalOr).apply(null,arguments)},_b=e._LogicalXor=function(){return(_b=e._LogicalXor=e.asm.LogicalXor).apply(null,arguments)},$b=e._Max=function(){return($b=e._Max=e.asm.Max).apply(null,arguments)},Eb=e._MaxPool=function(){return(Eb=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},Rb=e._MaxPool3D=function(){return(Rb=e._MaxPool3D=e.asm.MaxPool3D).apply(null,arguments)},Db=e._MaxPool3DGrad=function(){return(Db=e._MaxPool3DGrad=e.asm.MaxPool3DGrad).apply(null,arguments)},Ab=e._MaxPoolGrad=function(){return(Ab=e._MaxPoolGrad=e.asm.MaxPoolGrad).apply(null,arguments)},Fb=e._MaxPoolWithArgmax=function(){return(Fb=e._MaxPoolWithArgmax=e.asm.MaxPoolWithArgmax).apply(null,arguments)},Pb=e._Maximum=function(){return(Pb=e._Maximum=e.asm.Maximum).apply(null,arguments)},Ob=e._Mean=function(){return(Ob=e._Mean=e.asm.Mean).apply(null,arguments)},Mb=e._Min=function(){return(Mb=e._Min=e.asm.Min).apply(null,arguments)},Lb=e._Minimum=function(){return(Lb=e._Minimum=e.asm.Minimum).apply(null,arguments)},Bb=e._MirrorPad=function(){return(Bb=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},zb=e._Mod=function(){return(zb=e._Mod=e.asm.Mod).apply(null,arguments)},Vb=e._Multinomial=function(){return(Vb=e._Multinomial=e.asm.Multinomial).apply(null,arguments)},Wb=e._Multiply=function(){return(Wb=e._Multiply=e.asm.Multiply).apply(null,arguments)},Ub=e._Neg=function(){return(Ub=e._Neg=e.asm.Neg).apply(null,arguments)},Gb=e._NonMaxSuppressionV3=function(){return(Gb=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},Hb=e._NonMaxSuppressionV4=function(){return(Hb=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},Kb=e._NonMaxSuppressionV5=function(){return(Kb=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},qb=e._NotEqual=function(){return(qb=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},jb=e._OneHot=function(){return(jb=e._OneHot=e.asm.OneHot).apply(null,arguments)},Xb=e._PadV2=function(){return(Xb=e._PadV2=e.asm.PadV2).apply(null,arguments)},Yb=e._Pow=function(){return(Yb=e._Pow=e.asm.Pow).apply(null,arguments)},Qb=e._Prelu=function(){return(Qb=e._Prelu=e.asm.Prelu).apply(null,arguments)},Zb=e._Prod=function(){return(Zb=e._Prod=e.asm.Prod).apply(null,arguments)},Jb=e._RealDiv=function(){return(Jb=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},eC=e._Reciprocal=function(){return(eC=e._Reciprocal=e.asm.Reciprocal).apply(null,arguments)},tC=e._Relu=function(){return(tC=e._Relu=e.asm.Relu).apply(null,arguments)},rC=e._Relu6=function(){return(rC=e._Relu6=e.asm.Relu6).apply(null,arguments)},oC=e._ResizeBilinear=function(){return(oC=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},nC=e._ResizeBilinearGrad=function(){return(nC=e._ResizeBilinearGrad=e.asm.ResizeBilinearGrad).apply(null,arguments)},sC=e._ResizeNearestNeighbor=function(){return(sC=e._ResizeNearestNeighbor=e.asm.ResizeNearestNeighbor).apply(null,arguments)},aC=e._ResizeNearestNeighborGrad=function(){return(aC=e._ResizeNearestNeighborGrad=e.asm.ResizeNearestNeighborGrad).apply(null,arguments)},iC=e._Reverse=function(){return(iC=e._Reverse=e.asm.Reverse).apply(null,arguments)},uC=e._RotateWithOffset=function(){return(uC=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},pC=e._Round=function(){return(pC=e._Round=e.asm.Round).apply(null,arguments)},cC=e._Rsqrt=function(){return(cC=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},lC=e._ScatterNd=function(){return(lC=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},mC=e._SearchSorted=function(){return(mC=e._SearchSorted=e.asm.SearchSorted).apply(null,arguments)},dC=e._SelectV2=function(){return(dC=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},fC=e._Selu=function(){return(fC=e._Selu=e.asm.Selu).apply(null,arguments)},hC=e._Sigmoid=function(){return(hC=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},gC=e._Sign=function(){return(gC=e._Sign=e.asm.Sign).apply(null,arguments)},xC=e._Sin=function(){return(xC=e._Sin=e.asm.Sin).apply(null,arguments)},yC=e._Sinh=function(){return(yC=e._Sinh=e.asm.Sinh).apply(null,arguments)},bC=e._Softmax=function(){return(bC=e._Softmax=e.asm.Softmax).apply(null,arguments)},CC=e._Softplus=function(){return(CC=e._Softplus=e.asm.Softplus).apply(null,arguments)},wC=e._SparseFillEmptyRows=function(){return(wC=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},SC=e._SparseReshape=function(){return(SC=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},IC=e._SparseSegmentReduction=function(){return(IC=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},vC=e._SparseToDense=function(){return(vC=e._SparseToDense=e.asm.SparseToDense).apply(null,arguments)},kC=e._Sqrt=function(){return(kC=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},NC=e._Square=function(){return(NC=e._Square=e.asm.Square).apply(null,arguments)},TC=e._SquaredDifference=function(){return(TC=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},_C=e._Step=function(){return(_C=e._Step=e.asm.Step).apply(null,arguments)},$C=e._StridedSlice=function(){return($C=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},EC=e._Sub=function(){return(EC=e._Sub=e.asm.Sub).apply(null,arguments)},RC=e._Sum=function(){return(RC=e._Sum=e.asm.Sum).apply(null,arguments)},DC=e._Tan=function(){return(DC=e._Tan=e.asm.Tan).apply(null,arguments)},AC=e._Tanh=function(){return(AC=e._Tanh=e.asm.Tanh).apply(null,arguments)},FC=e._TensorScatterUpdate=function(){return(FC=e._TensorScatterUpdate=e.asm.TensorScatterUpdate).apply(null,arguments)},PC=e._Tile=function(){return(PC=e._Tile=e.asm.Tile).apply(null,arguments)},OC=e._TopK=function(){return(OC=e._TopK=e.asm.TopK).apply(null,arguments)},MC=e._Transform=function(){return(MC=e._Transform=e.asm.Transform).apply(null,arguments)},LC=e._Transpose=function(){return(LC=e._Transpose=e.asm.Transpose).apply(null,arguments)},BC=e.__FusedMatMul=function(){return(BC=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},zC=e._malloc=function(){return(zC=e._malloc=e.asm.malloc).apply(null,arguments)},VC=e._free=function(){return(VC=e._free=e.asm.free).apply(null,arguments)},WC=e.___errno_location=function(){return(WC=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},Pm=e.stackSave=function(){return(Pm=e.stackSave=e.asm.stackSave).apply(null,arguments)},Om=e.stackRestore=function(){return(Om=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},ul=e.stackAlloc=function(){return(ul=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},UC=e.dynCall_iijjiiii=function(){return(UC=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},GC=e.dynCall_jiji=function(){return(GC=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=vy;var Fp;nr=function K(){Fp||Mm(),Fp||(nr=K)};function Mm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Fp||(Fp=!0,e.calledRun=!0,!M&&(gt(),o(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),Mr()))}e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1),ae()},1)):ae()}if(e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();Mm();var Pp;s&&(Pp={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 Op;if(typeof t!="undefined")Op=t;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Op=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Pp){var HC=Op._dispose;Op._dispose=function(){HC(),Pp.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Pp.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return t.ready}})();typeof Wg=="object"&&typeof Hv=="object"?Hv.exports=Gv:typeof define=="function"&&define.amd?define([],function(){return Gv}):typeof Wg=="object"&&(Wg.WasmBackendModule=Gv)});var Bo=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},so=class{refCount(t){return Br("refCount")}incRef(t){return Br("incRef")}timerAvailable(){return!0}time(t){return Br("time")}read(t){return Br("read")}readSync(t){return Br("readSync")}readToGPU(t,e){return Br("readToGPU")}numDataIds(){return Br("numDataIds")}disposeData(t,e){return Br("disposeData")}write(t,e,o){return Br("write")}move(t,e,o,n,s){return Br("move")}createTensorFromGPUData(t,e,o){return Br("createTensorFromGPUData")}memory(){return Br("memory")}floatPrecision(){return Br("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Br("dispose")}};function Br(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 v0(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,Km(r,t,e)}function _G(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,o=0;for(;e>0;)o=Math.random()*e|0,e--,Km(r,e,o),Km(t,e,o)}function Bp(r,t,e){return Math.max(r,Math.min(t,e))}function $G(r){return r%2===0?r:r+1}function Km(r,t,e){let o=r[t];r[t]=r[e],r[e]=o}function EG(r){let t=0;for(let e=0;ee+` Shapes ${r} and ${t} must match`)}function ao(r){$(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function He(r){if(r.length===0)return 1;let t=r[0];for(let e=1;e0,e,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=t(a);if(e!=null&&a>=e){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function LG(r,t){let e=1,o=-1;for(let s=0;s=0)e*=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(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let n=r.slice();return n[o]=t/e,n}function Ti(r,t){let e=t.length;return r=r==null?t.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-e&&o`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),$(r.every(o=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?e+o:o)}function ZC(r,t){let e=[],o=[],n=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||n?null:Ti(t,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(e.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(e.push(r[i]),o.push(i))}return{newShape:e,keptDims:o}}function JC(r,t){return qm(r,t)}function qm(r,t){let e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else if(r==="bool")e=new Uint8Array(t);else if(r==="string")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function ew(r,t){for(let e=0;et+=e.length),t}function zo(r){return typeof r=="string"||r instanceof String}function k0(r){return typeof r=="boolean"}function N0(r){return typeof r=="number"}function _i(r){return Array.isArray(r)?_i(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":N0(r)?"float32":zo(r)?"string":k0(r)?"bool":"float32"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Vp(r,t){for(let e=t;e=0;--o)e[o]=e[o+1]*r[o+1];return e}function T0(r,t,e,o=!1){let n=new Array;if(t.length===1){let s=t[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(e?2:1);if(o===0)return[];if(o!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?" for a complex tensor":""}.`);return T0(0,r,t,e)}function zG(r,t){if(Array.isArray(r))return r;if(t==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(t==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${t}`)}function cl(r,t){let e=Wp(r,t);for(let o=0;oo*n,1);if(t==null||t==="float32")return ku(r,new Float32Array(e));if(t==="int32")return ku(r,new Int32Array(e));if(t==="bool")return ku(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function Ct(r){r.forEach(t=>{$(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function WG(r,t,e){if(t===0)return 0;if(t===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=qG(n,s)})}};function HG(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...o)=>(KG(t,o[0],o[1]),o.join("="))),t}function KG(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||"")}function qG(r,t){let e=t.toLowerCase();return e==="true"||e==="false"?e==="true":`${+e}`===e?+e:t}function A(){return ow}var ow=null;function $0(r){ow=r}var nw;function sw(){if(nw==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");nw=r}return nw}function jG(){let r=sw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function ml(r,t){let e=jG();if(e.has(r))return e.get(r);{let o=t();return e.set(r,o),e.get(r)}}var Xs="Abs",Vo="Acos",Wo="Acosh",io="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",Ei="AvgPool3DGrad",Zo="BatchMatMul",Js="BatchToSpaceND",Jo="Bincount",qa="BitwiseAnd",Bce="BroadcastTo",ea="BroadcastArgs",yo="Cast",en="Ceil",bo="ClipByValue",Ri="Complex",Di="ComplexAbs",ta="Concat",tn="Conv2D",Ai="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",Fi="DepthwiseConv2dNativeBackpropFilter",Pi="DepthwiseConv2dNativeBackpropInput",oa="Diag",dn="Dilation2D",Oi="Dilation2DBackpropInput",Mi="Dilation2DBackpropFilter",_u="Draw",fn="RealDiv",Li="Einsum",hn="Elu",Xa="EluGrad",gn="Erf",xn="Equal",yn="Exp",na="ExpandDims",bn="Expm1",Bi="FFT",sa="Fill",Cn="FlipLeftRight",wn="Floor",Sn="FloorDiv",In="FusedBatchNorm",aa="GatherV2",vn="GatherNd",kn="Greater",Nn="GreaterEqual",Co="Identity",zi="IFFT",Vi="Imag",Tn="IsFinite",_n="IsInf",$n="IsNan",En="LeakyRelu",Rn="Less",Dn="LessEqual",An="LinSpace",Fn="Log",Pn="Log1p",On="LogicalAnd",Mn="LogicalNot",Ln="LogicalOr",E0="LogicalXor",zce="LogSoftmax",Vce="LowerBound",Bn="LRN",Ya="LRNGrad",Wce="MatrixBandPart",zn="Max",Vn="Maximum",Wn="MaxPool",Wi="MaxPoolGrad",ia="MaxPool3D",Ui="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",Uce="Pool",ts="Pow",rs="Prelu",os="Prod",Up="RaggedGather",Gp="RaggedRange",Hp="RaggedTensorToTensor",ma="Range",Gi="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",Hi="SparseFillEmptyRows",ei="SparseReshape",ya="SparseSegmentMean",ba="SparseSegmentSum",vs="SparseToDense",ks="SquaredDifference",Ki="Square",$u="StaticRegexReplace",Ns="StridedSlice",Ca="StringNGrams",qi="StringSplit",ji="StringToHashBucketFast",Ts="Sub",_s="Tan",$s="Tanh",uo="Tile",Es="TopK",Rs="Transform",po="Transpose",Xi="Unique",wa="Unpack",Yi="UnsortedSegmentSum",Gce="UpperBound",Sa="ZerosLike",wo="Step",Eu="FromPixels",Ds="RotateWithOffset",So="_FusedMatMul",Io="FusedConv2D",vo="FusedDepthwiseConv2D";function Ia(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function XG(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var Kp=ml("kernelRegistry",()=>new Map),dl=ml("gradRegistry",()=>new Map);function qp(r,t){let e=iw(r,t);return Kp.get(e)}function aw(r){return dl.get(r)}function jm(r){let t=Kp.entries(),e=[];for(;;){let{done:o,value:n}=t.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&e.push(a)}return e}function ti(r){let{kernelName:t,backendName:e}=r,o=iw(t,e);Kp.has(o)&&Ia(`The kernel '${t}' for backend '${e}' is already registered`),Kp.set(o,r)}function Xce(r){let{kernelName:t}=r;dl.has(t)&&A().getBool("DEBUG")&&Ia(`Overriding the gradient for '${t}'`),dl.set(t,r)}function Yce(r,t){let e=iw(r,t);if(!Kp.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);Kp.delete(e)}function Qce(r){if(!dl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);dl.delete(r)}function Zce(r,t){jm(r).forEach(o=>{let n=Object.assign({},o,{backendName:t});ti(n)})}function iw(r,t){return`${t}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>QC,assert:()=>$,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>ao,assertShapesMatch:()=>xt,bytesFromStringArray:()=>rw,bytesPerElement:()=>zp,checkConversionForErrors:()=>ew,clamp:()=>Bp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>zG,createScalarValue:()=>r4,createShuffledIndices:()=>OG,decodeString:()=>Qp,distSquared:()=>DG,encodeString:()=>Zi,fetch:()=>n4,fingerPrint64:()=>t4,flatten:()=>Fs,getArrayFromDType:()=>qm,getTypedArrayFromDType:()=>JC,hasEncodingLoss:()=>BG,hexToLong:()=>fl,indexToLoc:()=>UG,inferDtype:()=>_i,inferFromImplicitShape:()=>LG,isBoolean:()=>k0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>N0,isPromise:()=>Tu,isScalarShape:()=>AG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>tw,locToIndex:()=>WG,makeOnesTypedArray:()=>cl,makeZerosNestedTypedArray:()=>VG,makeZerosTypedArray:()=>Wp,nearestDivisor:()=>Vp,nearestLargerEven:()=>$G,now:()=>Pu,parseAxisParam:()=>Ti,randUniform:()=>RG,repeatedTry:()=>MG,rightPad:()=>Nu,shuffle:()=>v0,shuffleCombo:()=>_G,sizeFromShape:()=>He,sizeToSquarishShape:()=>PG,squeezeShape:()=>ZC,sum:()=>EG,swap:()=>Km,tanh:()=>FG,toNestedArray:()=>ku,toTypedArray:()=>Yp});function Xm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var lw=Lp(W0());var Fu=lw.default||lw;function fl(r){return Fu.fromString(r,!0,16)}var G0=fl("c3a5c85c97cb3127"),Au=fl("b492b66fbe98f273"),Cr=fl("9ae16a3b2f90404f");function cw(r){return r.xor(r.shru(47))}function H0(r,t,e){let o=r.slice(t,t+e);return Fu.fromBytes(Array.from(o),!0,!0)}function wt(r,t){return H0(r,t,8)}function U0(r,t){return H0(r,t,4)}function Yt(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function Qi(r,t,e=fl("9ddfea08eb382d69")){let o=r.xor(t).mul(e);o=o.xor(o.shru(47));let n=t.xor(o).mul(e);return n=n.xor(n.shru(47)),n=n.mul(e),n}function QG(r,t,e,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(t),n=n.add(e),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Qm(r,t,e,o){return QG(wt(r,t),wt(r,t+8),wt(r,t+16),wt(r,t+24),e,o)}function ZG(r,t=r.length){if(t>=8){let e=Cr.add(t*2),o=wt(r,0).add(Cr),n=wt(r,t-8),s=Yt(n,37).mul(e).add(o),a=Yt(o,25).add(n).mul(e);return Qi(s,a,e)}if(t>=4){let e=Cr.add(t*2),o=U0(r,0);return Qi(o.shl(3).add(t),U0(r,t-4),e)}if(t>0){let e=r[0],o=r[t>>1],n=r[t-1],s=e+(o<<8),a=t+(n<<2);return cw(Cr.mul(s).xor(G0.mul(a))).mul(Cr)}return Cr}function JG(r,t=r.length){let e=Cr.add(t*2),o=wt(r,0).mul(Au),n=wt(r,8),s=wt(r,t-8).mul(e),a=wt(r,t-16).mul(Cr);return Qi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),e)}function e4(r,t=r.length){let e=Cr.add(t*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,t-8).mul(e),a=wt(r,t-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Qi(i,o.add(Yt(n.add(Cr),18)).add(s),e),u=wt(r,16).mul(e),c=wt(r,24),l=i.add(wt(r,t-32)).mul(e),m=p.add(wt(r,t-24)).mul(e);return Qi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),e)}function t4(r,t=r.length){let e=Fu.fromNumber(81,!0);if(t<=32)return t<=16?ZG(r,t):JG(r,t);if(t<=64)return e4(r,t);let o=e,n=e.mul(Au).add(113),s=cw(n.mul(Cr).add(113)).mul(Cr),a=[Fu.UZERO,Fu.UZERO],i=[Fu.UZERO,Fu.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(t-1>>6)*64,c=u+(t-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Au),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Au),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Au),a=Qm(r,p,a[1].mul(Au),o.add(i[0])),i=Qm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Au.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(t-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=Qm(r,p,a[1].mul(l),o.add(i[0])),i=Qm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Qi(Qi(a[0],i[0],l).add(cw(n).mul(G0)).add(s),Qi(a[1],i[1],l).add(o),l)}function r4(r,t){return t==="string"?Zi(r):Yp([r],t)}function o4(r,t){return r instanceof Float32Array&&t==="float32"||r instanceof Int32Array&&t==="int32"||r instanceof Uint8Array&&t==="bool"}function Yp(r,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Fs(r)),A().getBool("DEBUG")&&ew(r,t),o4(r,t))return r;if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool"){let e=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Pu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Pu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{s4(l,c.dtype,t)})}return{kernelName:t,outputs:n,inputs:e,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(t){let{kernelName:e,outputs:o,timeMs:n,inputs:s,extraInfo:a}=t;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(e,i,p[0],p[1],s,p[2])})})}};function s4(r,t,e){if(t!=="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 K0(r,t,e){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[e.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=t[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=e(()=>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 j0=20,hl=3,dw=7;function X0(r,t,e,o){let n=js(t),s=a4(r,t,e,n),a=t.length,i=Jm(r,t,e,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${e}`),p.push(` rank: ${a}`),p.push(` shape: [${t}]`),p.push(" values:")),p.push(i.map(u=>" "+u).join(` `)),p.join(` -`)}function s4(r,t,e,o){let n=He(t),s=o[o.length-1],a=new Array(s).fill(0),i=t.length,p=e==="complex64"?wl(r):r;if(i>1)for(let u=0;uq0){let g=bl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-bl)*a,i*a));return e==="complex64"&&(x=wl(x),b=wl(b)),["["+x.map((C,S)=>Cl(C,n[S],e)).join(", ")+", ..., "+b.map((C,S)=>Cl(C,n[i-bl+S],e)).join(", ")+"]"]}return["["+(e==="complex64"?wl(r):Array.from(r)).map((g,x)=>Cl(g,n[x],e)).join(", ")+"]"]}let u=t.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>q0){for(let h=0;h0?m[0]+d:"");for(let h=1;h1)for(let u=0;uj0){let g=hl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-hl)*a,i*a));return e==="complex64"&&(x=xl(x),b=xl(b)),["["+x.map((C,S)=>gl(C,n[S],e)).join(", ")+", ..., "+b.map((C,S)=>gl(C,n[i-hl+S],e)).join(", ")+"]"]}return["["+(e==="complex64"?xl(r):Array.from(r)).map((g,x)=>gl(g,n[x],e)).join(", ")+"]"]}let u=t.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>j0){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(e==="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(e,this.size),this.strides=js(t)}set(t,...e){e.length===0&&(e=[0]),$(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let o=this.locToIndex(e);this.values[o]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let n of t){if(n<0||n>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let o=t[t.length-1];for(let n=0;nsc(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return t}dataToGPU(t){return this.throwIfDisposed(),Os().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Os().readSync(this.dataId);if(this.dtype==="string")try{return t.map(e=>sc(e))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t}async bytes(){this.throwIfDisposed();let t=await Os().read(this.dataId);return this.dtype==="string"?t:new Uint8Array(t.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Os().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(t=!1){return ac.print(this,t)}clone(){return this.throwIfDisposed(),ac.clone(this)}toString(t=!1){let e=this.dataSync();return j0(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),ac.cast(this,t)}variable(t=!0,e,o){return this.throwIfDisposed(),Os().makeVariable(this,t,e,o)}};Object.defineProperty(ut,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function i4(){return gl("Tensor",()=>ut)}i4();var oi=class extends ut{constructor(t,e,o,n){super(t.shape,t.dtype,t.dataId,n),this.trainable=e,this.name=o}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!Cr(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Os().disposeTensor(this),this.dataId=t.dataId,Os().incRef(this,null)}dispose(){Os().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(oi,Symbol.hasInstance,{value:r=>r instanceof ut&&r.assign!=null&&r.assign instanceof Function});var ek={};qe(ek,{assertTypesMatch:()=>Cw,getTensorsInContainer:()=>Sl,isTensorInList:()=>p4,makeTypesMatch:()=>Oe});var hw;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(hw||(hw={}));var gw;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(gw||(gw={}));var xw;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(xw||(xw={}));var yw;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(yw||(yw={}));var bw;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(bw||(bw={}));var u4={float32:yw,int32:gw,bool:xw,complex64:bw};function dt(r,t){if(r==="string"||t==="string"){if(r==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${r} with ${t}`)}return u4[r][t]}function ni(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,t){if(r.dtype===t.dtype)return[r,t];let e=dt(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function Cw(r,t){$(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function p4(r,t){return t.some(e=>e.id===r.id)}function Sl(r){let t=[];return J0(r,t,new Set),t}function J0(r,t,e){if(r==null)return;if(r instanceof ut){t.push(r);return}if(!c4(r))return;let o=r;for(let n in o){let s=o[n];e.has(s)||(e.add(s),J0(s,t,e))}}function c4(r){return Array.isArray(r)||typeof r=="object"}function ww(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(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},ru=class{constructor(t){this.ENV=t,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 t=this.getSortedBackends();for(let e=0;e{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Ym(t).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let o=e.factory();if(o&&!(o instanceof ao)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;ethis.startScope(o),()=>this.endScope(n),()=>(n=e(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(t,e,o){t();try{let n=o();return e(),n}catch(n){throw e(),n}}nextTensorId(){return ru.nextTensorId++}nextVariableId(){return ru.nextVariableId++}clone(t){let e=T.runKernel(wo,{x:t}),o={x:t},n=a=>({x:()=>{let i="float32",p={x:a},u={dtype:i};return T.runKernel(bo,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[e],n,s,{}),e}runKernel(t,e,o){if(this.backendName==null&&this.backend,!(tc(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,e,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-e-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let e,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=ww(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(ww(t)){let{kernelName:f,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let x=tc(f,this.backendName);$(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}=t,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}=t,m=ww(t)?null:t.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?e=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),e=d.outputs)}),n&&this.addTapeNode(u,c,e,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:e.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(t,e,o){let n=iw(t);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(e),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(e).map(u=>e[u])):i=s.map(u=>e[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(t,e,o,n){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=t;o==="string"&&Vo(t[0])&&(s=t.map(p=>tu(p)));let a=n.write(s,e,o),i=new ut(e,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(t,e,o,n){o=o||"float32";let s={dataId:t,shape:e,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(t,e){let{dataId:o,shape:n,dtype:s}=t,a=new ut(n,s,o,this.nextTensorId());return this.trackTensor(a,e),a}makeVariable(t,e=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==t.dtype&&(t=t.cast(n));let s=new oi(t,e,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(t,e){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let o=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(o=t.size*jp(t.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:o})),t instanceof oi||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let o=t.size*jp(t.dtype);this.state.numBytes-=o}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}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 e=this.state.numBytes,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,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(t,e,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:o,saved:s},p=iw(t);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Yp(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(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=Sl(t),o=new Set(e.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(t,e,o,n=!1){if($(e.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",t));$(s instanceof ut,()=>"The result y returned by f() must be a tensor.");let a=H0(this.state.activeTape,e,s);if(!n&&a.length===0&&e.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?l4(s.shape):o,K0(i,a,u=>this.tidy(u),m4);let p=e.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(t){return $(qs(t),()=>"The f passed in customGrad(f) must be a function."),(...e)=>{$(e.every(i=>i instanceof ut),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};e.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=t(...e,p),$(o.value instanceof ut,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),$(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];$(c.length===e.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),$(c.every(m=>m instanceof ut),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=Wu(),o=await this.backend.time(t);return o.wallMs=Wu()-e,o}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 nd;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}};ru.nextTensorId=0;ru.nextVariableId=0;function l4(r){let t=fl(He(r),"float32");return T.makeTensor(t,r,"float32")}function Sw(){let r=aw();if(r._tfengine==null){let t=new hl(r);r._tfengine=new ru(t)}return _0(r._tfengine.ENV),Y0(()=>r._tfengine),r._tfengine}var T=Sw();function m4(r,t){let e={a:r,b:t};return T.runKernel(uo,e)}var ou={};qe(ou,{isBrowser:()=>vw,isMobile:()=>h4,mockIsMobile:()=>f4});function d4(){return typeof navigator!="undefined"&&navigator!=null}var Iw;function f4(r){Iw=r}function h4(r){if(Iw!==void 0)return Iw;if(r||d4()){if(r||(r=navigator),r.product==="ReactNative")return!0;let t=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let e=r;return e.userAgentData&&e.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 vw(){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",()=>vw());$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 ir(r,t){let e=r;if(Ot(r))return t==="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/(t==null?4:jp(t))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(e)||Ot(e)&&t!=="string";)o.push(e.length),e=e[0];return Array.isArray(r)&&A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&rk(r,o,[]),o}function rk(r,t,e){if(e=e||[],!Array.isArray(r)&&!Ot(r)){$(t.length===0,()=>`Element arr[${e.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}$(t.length>0,()=>`Element arr[${e.join("][")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===t[0],()=>`Element arr[${e.join("][")}] should have ${t[0]} elements, but has ${r.length} elements`);let o=t.slice(1);for(let n=0;n=0&&(n=o),tk(o,n,t,e),r==null||!Ot(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 '${t}' passed to '${e}' must be a Tensor or TensorLike, but got '${p}'`)}let s=ir(r,n);!Ot(r)&&!Array.isArray(r)&&(r=[r]);let i=n!=="string"?nc(r,n):Ps(r,[],!0);return T.makeTensor(i,s,n)}function si(r,t,e,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${t}[${a}]`,e,o))}var kw="__op";function N(r){let t=Object.keys(r);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 e=t[0],o=r[e];e.endsWith("_")&&(e=e.substring(0,e.length-1)),e=e+kw;let n=(...s)=>{T.startScope(e);try{let a=o(...s);return Fu(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:e,configurable:!0}),n}function g4(r,t){let e=v(r,"real","complex"),o=v(t,"imag","complex");yt(e.shape,o.shape,`real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:e,imag:o};return T.runKernel(Fi,n)}var Er=N({complex_:g4});function Sr(r,t,e,o){if(o==null)o=Ri(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,t||e,o)}if(!Ot(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(t!=null){wt(t);let n=He(t),s=He(e);$(n===s,()=>`Based on the provided shape, [${t}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!Ot(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=o!=="string"?nc(r,o):Ps(r,[],!0),T.makeTensor(r,t,o)}function ur(r,t,e){let o=ir(r,e);return Sr(r,t,o,e)}var Il={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var jt=class{static join(t){return new jt(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(o=>Ot(o)?o.buffer:o),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let e=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function e(n){return t=n.end?1:0}if(e(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=x4(this.shards,e);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function x4(r,t){let e=0,o=r.length;for(;e<=o;){let n=Math.floor((o-e)/2)+e,s=t(r[n]);if(s===0)return n;s<0?o=n:e=n+1}return-1}var sd=4;async function nk(r,t){let e=[],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)+sd*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(t+=s.byteLength,e.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(t),n=0;return e.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Nw=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function ok(r){return Nw?Buffer.byteLength(r,"utf8"):new Blob([r]).size}function sk(r){if(Nw)return Buffer.from(r).toString("base64");let t=new Uint8Array(r),e="";for(let o=0,n=t.length;o{let o=e<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function C4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function w4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function S4(){let r=b4(),t=C4(),e=w4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+t[i>>10];s[a]=p}return new Float32Array(n)}}var ft=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return ft.instance==null&&(ft.instance=new ft),ft.instance}static registerSaveRouter(t){ft.getInstance().saveRouters.push(t)}static registerLoadRouter(t){ft.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return ft.getHandlers(t,"save")}static getLoadHandlers(t,e){return ft.getHandlers(t,"load",e)}static getHandlers(t,e,o){let n=[];return(e==="load"?ft.getInstance().loadRouters:ft.getInstance().saveRouters).forEach(a=>{let i=a(t,o);i!==null&&n.push(i)}),n}},uk=r=>ft.registerSaveRouter(r),pk=r=>ft.registerLoadRouter(r),ck=r=>ft.getSaveHandlers(r),lk=(r,t)=>ft.getLoadHandlers(r,t);var $w="tensorflowjs",Ew=1,Uu="models_store",nu="model_info_store";function mk(){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,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Rw(r){let t=r.result;t.createObjectStore(Uu,{keyPath:"modelPath"}),t.createObjectStore(nu,{keyPath:"modelPath"})}var ka=class{constructor(t){if(this.indexedDB=mk(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((o,n)=>{let s=this.indexedDB.open($w,Ew);s.onupgradeneeded=()=>Rw(s),s.onsuccess=()=>{let a=s.result;if(e==null){let i=a.transaction(Uu,"readonly"),u=i.objectStore(Uu).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{e.weightData=jt.join(e.weightData);let i=va(e),p=a.transaction(nu,"readwrite"),u=p.objectStore(nu),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Uu,"readwrite");let m=l.objectStore(Uu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(nu);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 dk=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?I4(r.slice(ka.URL_SCHEME.length)):null;ft.registerSaveRouter(dk);ft.registerLoadRouter(dk);function I4(r){return new ka(r)}function v4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var pd=class{constructor(){this.indexedDB=mk()}async listModels(){return new Promise((t,e)=>{let o=this.indexedDB.open($w,Ew);o.onupgradeneeded=()=>Rw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(nu,"readonly"),i=s.objectStore(nu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;t(p)},i.onerror=p=>(n.close(),e(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>e(o.error)})}async removeModel(t){return t=v4(t),new Promise((e,o)=>{let n=this.indexedDB.open($w,Ew);n.onupgradeneeded=()=>Rw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(nu,"readwrite"),i=a.objectStore(nu),p=i.get(t),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=i.delete(t),l=()=>{u=s.transaction(Uu,"readwrite");let d=u.objectStore(Uu).delete(t);d.onsuccess=()=>e(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="/",uc="tensorflowjs_models",fk="info",k4="model_topology",N4="weight_specs",T4="weight_data",_4="model_metadata";function hk(r){return{info:[uc,r,fk].join(ai),topology:[uc,r,k4].join(ai),weightSpecs:[uc,r,N4].join(ai),weightData:[uc,r,T4].join(ai),modelMetadata:[uc,r,_4].join(ai)}}function gk(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function $4(r){let t=r.split(ai);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(ai)}function E4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(t){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,t==null||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=hk(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let e=JSON.stringify(t.modelTopology),o=JSON.stringify(t.weightSpecs),n=va(t),s=jt.join(t.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,sk(s));let a={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,initializerSignature:t.initializerSignature!=null?t.initializerSignature:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw gk(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 t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let e={},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.`);e.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.`);e.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);e.format=i.format,e.generatedBy=i.generatedBy,e.convertedBy=i.convertedBy,i.signature!=null&&(e.signature=i.signature),i.userDefinedMetadata!=null&&(e.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(e.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(e.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(e.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 e.weightData=ak(a),e}};Na.URL_SCHEME="localstorage://";var xk=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?R4(r.slice(Na.URL_SCHEME.length)):null;ft.registerSaveRouter(xk);ft.registerLoadRouter(xk);function R4(r){return new Na(r)}var cd=class{constructor(){$(A().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),$(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let t={},e=uc+ai,o=ai+fk;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(pc)&&(t=t.slice(0,t.indexOf(pc))),$(t.length>0,()=>"scheme must not be an empty string.");let o=Zt.getInstance();$(o.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),o.managers[t]=e}static getManager(t){let e=Zt.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(Zt.getInstance().managers)}};function ld(r){if(r.indexOf(pc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Zt.getSchemes().join(",")}`);return{scheme:r.split(pc)[0],path:r.split(pc)[1]}}async function yk(r,t,e=!1){$(r!==t,()=>`Old path and new path are the same: '${r}'`);let o=ft.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=ft.getSaveHandlers(t);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${t}.`);let a=s[0],i=ld(r).scheme,p=ld(r).path,u=i===ld(r).scheme,c=await n.load();e&&u&&await Zt.getManager(i).removeModel(p);let l=await a.save(c);return e&&!u&&await Zt.getManager(i).removeModel(p),l.modelArtifactsInfo}async function bk(){let r=Zt.getSchemes(),t={};for(let e of r){let o=await Zt.getManager(e).listModels();for(let n in o){let s=e+pc+n;t[s]=o[n]}}return t}async function Ck(r){let t=ld(r);return Zt.getManager(t.scheme).removeModel(t.path)}async function wk(r,t){return yk(r,t,!1)}async function Sk(r,t){return yk(r,t,!0)}var Dw=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}setTimeoutCustom(t,e){if(typeof window=="undefined"||!A().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(t,e);return}this.functionRefs.push(t),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},e),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(t){return Qm(t)}};if(A().get("IS_BROWSER")){A().setPlatform("browser",new Dw);try{Zt.registerManager(Na.URL_SCHEME,new cd)}catch(r){}try{Zt.registerManager(ka.URL_SCHEME,new pd)}catch(r){}}var D4={importFetch:()=>Ik()},Aw;var Fw=class{constructor(){this.util=vk(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return A().global.fetch!=null?A().global.fetch(t,e):(Aw==null&&(Aw=D4.importFetch()),Aw(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?"":new this.util.TextDecoder(e).decode(t)}isTypedArray(t){return this.util.types.isFloat32Array(t)||this.util.types.isInt32Array(t)||this.util.types.isUint8Array(t)||this.util.types.isUint8ClampedArray(t)}};A().get("IS_NODE")&&!A().get("IS_BROWSER")&&A().setPlatform("node",new Fw);function me(r,t="float32",e){return t=t||"float32",wt(r),new tt(r,t,e)}function A4(r,t){let e=v(r,"x","cast");if(!rw(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&e.dtype!=="string"||t!=="string"&&e.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:e},n={dtype:t};return T.runKernel(bo,o,n)}var We=N({cast_:A4});function F4(r){let e={x:v(r,"x","clone","string_or_numeric")};return T.runKernel(wo,e)}var Ur=N({clone_:F4});function md(r,t=!1){console.log(r.toString(t))}Sw();var P4={buffer:me,cast:We,clone:Ur,print:md};Q0(P4);function lde(){A().set("PROD",!0)}function mde(){A().set("DEBUG",!0)}function dde(){A().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Pw(r){A().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}Z0(Pw);function fde(){T.disposeVariables()}function pr(){return T}function hde(){return T.memory()}function gde(r){return T.profile(r)}function De(r,t){return T.tidy(r,t)}function Mt(r){Sl(r).forEach(e=>e.dispose())}function Rr(r){return T.keep(r)}function xde(r){return T.time(r)}function yde(r){return T.setBackend(r)}function bde(){return T.ready()}function Cde(){return T.backendName}function wde(r){T.removeBackend(r)}function Sde(r){return T.findBackend(r)}function Ide(r){return T.findBackendFactory(r)}function su(r,t,e=1){return T.registerBackend(r,t,e)}function vde(){return T.backend}function kde(r,t){A().setPlatform(r,t)}function O4(r,t){let e=v(r,"a","add"),o=v(t,"b","add");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(uo,n)}var Ce=N({add_:O4});function M4(r,t){let e=v(r,"a","floorDiv"),o=v(t,"b","floorDiv");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(In,n)}var dd=N({floorDiv_:M4});function L4(r,t){let e=v(r,"a","div"),o=v(t,"b","div");if([e,o]=Oe(e,o),e.dtype==="int32"&&o.dtype==="int32")return dd(e,o);let n={a:e,b:o},s={};return T.runKernel(hn,n,s)}var je=N({div_:L4});function B4(r,t){let e=v(r,"a","mul"),o=v(t,"b","mul");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Yn,n)}var se=N({mul_:B4});function z4(r){let t=v(r,"x","abs");if(t.dtype==="complex64"){let e={x:t};return T.runKernel(Pi,e)}else{let e={x:t};return T.runKernel(Xs,e)}}var Jt=N({abs_:z4});function V4(r){let e={x:v(r,"x","acos")};return T.runKernel(Wo,e)}var kk=N({acos_:V4});function W4(r){let e={x:v(r,"x","acosh")};return T.runKernel(Uo,e)}var Nk=N({acosh_:W4});function U4(r){$(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let t=r.map((n,s)=>v(n,`tensors${s}`,"addN")),e=t[0];t.forEach(n=>{if(n.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(n=>{if(!Cr(n.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=t;return T.runKernel(Go,o)}var Tk=N({addN_:U4});function G4(r,t=null,e=!1){let n={x:v(r,"x","all","bool")},s={axis:t,keepDims:e};return T.runKernel(Ho,n,s)}var _k=N({all_:G4});function H4(r,t=null,e=!1){let n={x:v(r,"x","any","bool")},s={axis:t,keepDims:e};return T.runKernel(Ko,n,s)}var $k=N({any_:H4});function K4(r,t=0){let o={x:v(r,"x","argMax")},n={axis:t};return T.runKernel(Ys,o,n)}var Ek=N({argMax_:K4});function q4(r,t=0){let o={x:v(r,"x","argMin")},n={axis:t};return T.runKernel(Qs,o,n)}var Rk=N({argMin_:q4});function j4(r){let e={x:v(r,"x","asin")};return T.runKernel(qo,e)}var Dk=N({asin_:j4});function X4(r){let e={x:v(r,"x","asinh")};return T.runKernel(jo,e)}var Ak=N({asinh_:X4});function Y4(r){let e={x:v(r,"x","atan")};return T.runKernel(Xo,e)}var Fk=N({atan_:Y4});function Q4(r,t){let e=v(r,"a","atan2"),o=v(t,"b","atan2");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Qo,n)}var Pk=N({atan2_:Q4});function Z4(r){let e={x:v(r,"x","atanh")};return T.runKernel(Yo,e)}var Ok=N({atanh_:Z4});function J4(r,t,e,o,n="NHWC",s){let a=r[3],i=[...t,a],p=Lk(n);return Hu(r,i,e,s,o,null,null,p)}function Mw(r,t,e,o,n,s,a="channelsLast"){let[i,p]=vl(t),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 Hu(r,u,e,o,n,s,!1,a)}function eH(r,t,e,o,n,s,a="NDHWC"){let[i,p,u]=Ow(t),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 Mk(r,c,e,o,n,!1,l,s)}function Hu(r,t,e,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]=t,[h,g]=vl(e),[x,b]=vl(o),C=cc(m,x),S=cc(d,b),{padInfo:k,outHeight:_,outWidth:E}=oH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i==="channelsFirst"?D=[p,R,_,E]:i==="channelsLast"&&(D=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:t}}function Mk(r,t,e,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]=t,[x,b,C]=Ow(e),[S,k,_]=Ow(o),E=cc(d,S),R=cc(f,k),D=cc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=nH(n,u,c,l,x,b,C,E,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:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:t}}function tH(r,t,e,o,n){o==null&&(o=Lw(r,t,e));let s=r[0],a=r[1],i=kl((s-t+2*o)/e+1,n),p=kl((a-t+2*o)/e+1,n);return[i,p]}function rH(r,t,e,o,n,s){n==null&&(n=Lw(r,t[0],o[0]));let a=[0,0,0,e];for(let i=0;i<3;i++)r[i]+2*n>=t[i]&&(a[i]=kl((r[i]-t[i]+2*n)/o[i]+1,s));return a}function Lw(r,t,e,o=1){let n=cc(t,o);return Math.floor((r[0]*(e-1)-e+n)/2)}function vl(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Ow(r){return typeof r=="number"?[r,r,r]:r}function cc(r,t){return t<=1?r:r+(r-1)*(t-1)}function oH(r,t,e,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=tH([t,e],s,o,r,i);c=d[0],l=d[1]}else if(r==="same"){c=Math.ceil(t/o),l=Math.ceil(e/n);let m=Math.max(0,(c-1)*o+s-t),d=Math.max(0,(l-1)*n+a-e),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((t-s+1)/o),l=Math.ceil((e-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=kl((t-s+m+d)/o+1,i),l=kl((e-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function nH(r,t,e,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=rH([t,e,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(t/n),d=Math.ceil(e/s),f=Math.ceil(o/a);let h=(m-1)*n+i-t,g=(d-1)*s+p-e,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),E=x-_;l={top:S,bottom:k,left:_,right:E,front:b,back:C,type:"SAME"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function kl(r,t){if(!t)return Math.trunc(r);switch(t){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${t}`)}}function Gu(r){let[t,e,o]=vl(r);return t===1&&e===1&&o===1}function xr(r,t){return Gu(r)||Gu(t)}function Ta(r){return vl(r).every(t=>t>0)}function Lk(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Bt(r,t,e){if(e!=null){if(typeof t=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);if(typeof t=="number")$(qa(t),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);else if(typeof t=="object")t.forEach(o=>{o.forEach(n=>{$(qa(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${t}`)}}function sH(r,t){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:t};return T.runKernel(da,o,n)}var W=N({reshape_:sH});function aH(r,t,e,o,n){let s=v(r,"x","avgPool","float32"),a=1;$(xr(e,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${e} 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]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Bt("avgPool",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Zo,u,c);return l=We(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var fd=N({avgPool_:aH});function iH(r,t,e,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]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof e=="number"&&e>0||Array.isArray(e)&&e[0]>0&&e[1]>0&&e[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${e}'`),Bt("avgPool3d",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=We(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Bk=N({avgPool3d_:iH});function uH(r,t=0){$(r.length>=1,()=>"Pass at least one tensor to concat");let e=si(r,"tensors","concat","string_or_numeric");if(e[0].dtype==="complex64"&&e.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${s.dtype}. `)}),e.length===1)return Ur(e[0]);let o=e,n={axis:t};return T.runKernel(ta,o,n)}var bt=N({concat_:uH});function pH(r,t,e=!1,o=!1){let n=v(r,"a","matMul"),s=v(t,"b","matMul");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:e,transposeB:o};return T.runKernel(Jo,a,i)}var Ze=N({matMul_:pH});function cH(r){let e={x:v(r,"x","sigmoid","float32")};return T.runKernel(Cs,e)}var $a=N({sigmoid_:cH});function lH(r,t,e){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:t,size:e};return T.runKernel(ha,n,s)}var Xe=N({slice_:lH});function mH(r){let e={x:v(r,"x","tanh","float32")};return T.runKernel(Es,e)}var Nl=N({tanh_:mH});function dH(r,t,e,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(t,"lstmKernel","basicLSTMCell"),p=v(e,"lstmBias","basicLSTMCell"),u=v(o,"data","basicLSTMCell"),c=v(n,"c","basicLSTMCell"),l=v(s,"h","basicLSTMCell"),m=bt([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($a(b),Nl(C)),se(c,$a(Ce(a,S)))),E=se(Nl(_),$a(k));return[_,E]}var zk=N({basicLSTMCell_:dH});function fH(r,t,e){let o=v(r,"x","batchToSpaceND"),n=t.reduce((i,p)=>i*p);$(o.rank>=1+t.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${t.length}`),$(e.length===t.length,()=>`crops.length is ${e.length} but should be equal to blockShape.length ${t.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${n}`);let s={x:o},a={blockShape:t,crops:e};return T.runKernel(Js,s,a)}var hd=N({batchToSpaceND_:fH});function Vk(r){let t;return r.rank===0||r.rank===1?t=W(r,[1,1,1,r.size]):r.rank===2?t=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?t=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):t=r,t}function hH(r,t,e,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;o!=null&&(c=v(o,"offset","batchNorm")),$(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),$(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),$(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:Vk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(vn,m,d);return W(f,a.shape)}var au=N({batchNorm_:hH});function gH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Wk=N({batchNorm2d_:gH});function xH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Uk=N({batchNorm3d_:xH});function yH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),au(a,i,p,c,u,s)}var Gk=N({batchNorm4d_:yH});function bH(r,t,e){let o=v(r,"x","bincount"),n=v(t,"weights","bincount");$(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(e>=0,()=>`size must be non-negative, but got ${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:e};return T.runKernel(en,s,a)}var gd=N({bincount_:bH});function CH(r,t){let e=v(r,"x","bitwiseAnd"),o=v(t,"y","bitwiseAnd");if(!Cr(e.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${e.shape}, y: ${o.shape}`);if(e.dtype!=="int32"||o.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${e.dtype} and type of y: ${o.dtype}`);let n={a:e,b:o};return T.runKernel(ja,n)}var Hk=N({bitwiseAnd_:CH});function wH(r,t){let e=v(r,"s0","broadcastArgs","int32"),o=v(t,"s1","broadcastArgs","int32");if(e.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:e,s1:o};return T.runKernel(ea,n)}var Kk=N({broadcastArgs_:wH});function SH(r,t){let e=v(r,"broadcastTo","x"),o=e.shape;if(wt(t),t.lengthe.rank){let u=e.shape.slice();for(;u.length=0;u--)if(n[u]===t[u])s[u]=1;else if(e.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${t}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Ur(e);let i={x:e},p={reps:s};return T.runKernel(po,i,p)}var iu=N({broadcastTo_:SH});function IH(r){let e={x:v(r,"x","ceil","float32")};return T.runKernel(tn,e)}var qk=N({ceil_:IH});function Ea(r,t,e){wt(r),e=e||Ri(t);let o={shape:r,value:t,dtype:e};return T.runKernel(sa,{},o)}function vH(r,t,e){let o=v(r,"x","clipByValue");if($(t<=e,()=>`Error in clip: min (${t}) must be less than or equal to max (${e}).`),t===e)return Ea(o.shape,t,o.dtype);let n={x:o},s={clipValueMin:t,clipValueMax:e};return T.runKernel(Co,n,s)}var jk=N({clipByValue_:vH});function kH(r){return bt(r,0)}var Xk=N({concat1d_:kH});function NH(r,t){return bt(r,t)}var Yk=N({concat2d_:NH});function TH(r,t){return bt(r,t)}var Qk=N({concat3d_:TH});function _H(r,t){return bt(r,t)}var Zk=N({concat4d_:_H});function $H(r,t,e,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(t,"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]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Bt("conv2d",o,a);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(xr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(Ta(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv2D: Strides should be larger than 0.");let m={x:u,filter:p},d={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(rn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var uu=N({conv2d_:$H});function EH(r,t,e,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(t,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Bt("conv1d",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(xr(e,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`),$(Ta(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv1D: Stride should be larger than 0."),$(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=uu(m,l,[1,e],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 Jk=N({conv1d_:EH});function RH(r,t,e,o,n,s="NHWC",a){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let i=r,p=t,u=!1;t.rank===3&&(u=!0,p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(e.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`);let c=s==="NHWC"?i[3]:i[1],l=s==="NHWC"?p.shape[3]:p.shape[1];$(c===e.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`),$(l===e.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`),Bt("conv2dDerInput",n,a);let m={dy:p,filter:e},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(on,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var xd=N({conv2DBackpropInput_:RH});function DH(r,t,e,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(t,"filter","conv2dTranspose");return xd(e,a,i,o,n,"NHWC",s)}var e2=N({conv2dTranspose_:DH});function AH(r,t,e,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(t,"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]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(xr(e,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Ta(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv3D: Strides should be larger than 0.");let c={x:p,filter:i},l={strides:e,pad:o,dataFormat:n,dilations:s},m=T.runKernel(nn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var t2=N({conv3d_:AH});function FH(r,t,e,o,n){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let s=r,a=t,i=!1;t.rank===4&&(i=!0,a=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(e.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`),$(p===e.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${e.shape[3]}.`),$(u===e.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${e.shape[4]}.`);let c={dy:a,filter:e},l={pad:n,strides:o,inputShape:s},m=T.runKernel(sn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var r2=N({conv3DBackpropInput_:FH});function PH(r,t,e,o,n){let s=v(r,"x","conv3dTranspose"),a=v(t,"filter","conv3dTranspose");return r2(e,s,a,o,n)}var o2=N({conv3dTranspose_:PH});function OH(r){let e={x:v(r,"x","cos","float32")};return T.runKernel(an,e)}var n2=N({cos_:OH});function MH(r){let e={x:v(r,"x","cosh","float32")};return T.runKernel(un,e)}var s2=N({cosh_:MH});function LH(r,t=0,e=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(pn,s,a)}var a2=N({cumprod_:LH});function BH(r,t=0,e=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(cn,s,a)}var i2=N({cumsum_:BH});function zH(r,t,e,o=!1){let n=v(r,"x","denseBincount"),s=v(t,"weights","denseBincount");$(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(e>=0,()=>`size must be non-negative, but got ${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:e,binaryOutput:o};return T.runKernel(ra,a,i)}var u2=N({denseBincount_:zH});function VH(r,t,e="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=e==="NHWC"?o.shape[1]:o.shape[2],s=e==="NHWC"?o.shape[2]:o.shape[3],a=e==="NHWC"?o.shape[3]:o.shape[1];$(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),$(n*t>=0,()=>`Negative dimension size caused by overflow when multiplying +`;return m[m.length-1]=" "+m[m.length-1]+"]"+(s?"":f),m}function xl(r){let t=[];for(let e=0;e`Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`)}if(e==="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||qm(e,this.size),this.strides=js(t)}set(t,...e){e.length===0&&(e=[0]),$(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let o=this.locToIndex(e);this.values[o]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let n of t){if(n<0||n>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let o=t[t.length-1];for(let n=0;nQp(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return t}dataToGPU(t){return this.throwIfDisposed(),Ps().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Ps().readSync(this.dataId);if(this.dtype==="string")try{return t.map(e=>Qp(e))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t}async bytes(){this.throwIfDisposed();let t=await Ps().read(this.dataId);return this.dtype==="string"?t:new Uint8Array(t.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(t=!1){return Zp.print(this,t)}clone(){return this.throwIfDisposed(),Zp.clone(this)}toString(t=!1){let e=this.dataSync();return X0(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),Zp.cast(this,t)}variable(t=!0,e,o){return this.throwIfDisposed(),Ps().makeVariable(this,t,e,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function fw(){return ml("Tensor",()=>mt)}fw();var ri=class extends mt{constructor(t,e,o,n){super(t.shape,t.dtype,t.dataId,n),this.trainable=e,this.name=o}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!br(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=t.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 tk={};qe(tk,{assertTypesMatch:()=>Cw,getTensorsInContainer:()=>yl,isTensorInList:()=>p4,makeTypesMatch:()=>Oe});var hw;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(hw||(hw={}));var gw;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(gw||(gw={}));var xw;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(xw||(xw={}));var yw;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(yw||(yw={}));var bw;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(bw||(bw={}));var u4={float32:yw,int32:gw,bool:xw,complex64:bw};function dt(r,t){if(r==="string"||t==="string"){if(r==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${r} with ${t}`)}return u4[r][t]}function oi(r){return dt(r,"int32")}function ed(r){return r!=null&&typeof r=="object"&&"texture"in r&&r.texture instanceof WebGLTexture}function td(r){return typeof GPUBuffer!="undefined"&&r!=null&&typeof r=="object"&&"buffer"in r&&r.buffer instanceof GPUBuffer}function Oe(r,t){if(r.dtype===t.dtype)return[r,t];let e=dt(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function Cw(r,t){$(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function p4(r,t){return t.some(e=>e.id===r.id)}function yl(r){let t=[];return ek(r,t,new Set),t}function ek(r,t,e){if(r==null)return;if(r instanceof mt){t.push(r);return}if(!c4(r))return;let o=r;for(let n in o){let s=o[n];e.has(s)||(e.add(s),ek(s,t,e))}}function c4(r){return Array.isArray(r)||typeof r=="object"}function ww(r){return r.kernelName!=null}var rd=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(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},bl=class r{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new rd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let e=0;e{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){jm(t).forEach(o=>{o.disposeFunc!=null&&o.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let o=e.factory();if(o&&!(o instanceof so)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;ethis.startScope(o),()=>this.endScope(n),()=>(n=e(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(t,e,o){t();try{let n=o();return e(),n}catch(n){throw e(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(t){let e=T.runKernel(Co,{x:t}),o={x:t},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,[e],n,s,{}),e}runKernel(t,e,o){if(this.backendName==null&&this.backend,!(qp(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,e,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-e-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let e,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=ww(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(ww(t)){let{kernelName:f,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let x=qp(f,this.backendName);$(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}=t,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}=t,m=ww(t)?null:t.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?e=i():(d=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),e=d.outputs)}),n&&this.addTapeNode(u,c,e,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:e.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(t,e,o){let n=aw(t);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(e),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(e).map(u=>e[u])):i=s.map(u=>e[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(t,e,o,n){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=t;o==="string"&&zo(t[0])&&(s=t.map(p=>Zi(p)));let a=n.write(s,e,o),i=new mt(e,o,a,this.nextTensorId());if(this.trackTensor(i,n),o==="string"){let p=this.state.tensorInfo.get(a),u=rw(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(t,e,o,n){o=o||"float32";let s={dataId:t,shape:e,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(t,e){let{dataId:o,shape:n,dtype:s}=t,a=new mt(n,s,o,this.nextTensorId());return this.trackTensor(a,e),a}makeVariable(t,e=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==t.dtype&&(t=t.cast(n));let s=new ri(t,e,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(t,e){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let o=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(o=t.size*zp(t.dtype)),this.state.numBytes+=o,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:o})),t instanceof ri||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let o=t.size*zp(t.dtype);this.state.numBytes-=o}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}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 e=this.state.numBytes,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,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(t,e,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:o,saved:s},p=aw(t);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Wp(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(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=yl(t),o=new Set(e.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(t,e,o,n=!1){if($(e.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",t));$(s instanceof mt,()=>"The result y returned by f() must be a tensor.");let a=K0(this.state.activeTape,e,s);if(!n&&a.length===0&&e.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?l4(s.shape):o,q0(i,a,u=>this.tidy(u),m4);let p=e.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(t){return $(qs(t),()=>"The f passed in customGrad(f) must be a function."),(...e)=>{$(e.every(i=>i instanceof mt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};e.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=t(...e,p),$(o.value instanceof mt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),$(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];$(c.length===e.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),$(c.every(m=>m instanceof 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(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=Pu(),o=await this.backend.time(t);return o.wallMs=Pu()-e,o}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 rd;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}};bl.nextTensorId=0;bl.nextVariableId=0;function l4(r){let t=cl(He(r),"float32");return T.makeTensor(t,r,"float32")}function Sw(){let r=sw();if(r._tfengine==null){let t=new ll(r);r._tfengine=new bl(t)}return $0(r._tfengine.ENV),Q0(()=>r._tfengine),r._tfengine}var T=Sw();function m4(r,t){let e={a:r,b:t};return T.runKernel(io,e)}var Ji={};qe(Ji,{isBrowser:()=>vw,isMobile:()=>h4,mockIsMobile:()=>f4});function d4(){return typeof navigator!="undefined"&&navigator!=null}var Iw;function f4(r){Iw=r}function h4(r){if(Iw!==void 0)return Iw;if(r||d4()){if(r||(r=navigator),r.product==="ReactNative")return!0;let t=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let e=r;return e.userAgentData&&e.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 vw(){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",()=>vw());_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,t){let e=r;if(Pt(r))return t==="string"?[]:[r.length];if(ed(r)){let n=r.channels||"RGBA";return[r.height,r.width*n.length]}else if(td(r))return[r.buffer.size/(t==null?4:zp(t))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(e)||Pt(e)&&t!=="string";)o.push(e.length),e=e[0];return Array.isArray(r)&&A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&ok(r,o,[]),o}function ok(r,t,e){if(e=e||[],!Array.isArray(r)&&!Pt(r)){$(t.length===0,()=>`Element arr[${e.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}$(t.length>0,()=>`Element arr[${e.join("][")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===t[0],()=>`Element arr[${e.join("][")}] should have ${t[0]} elements, but has ${r.length} elements`);let o=t.slice(1);for(let n=0;n=0&&(n=o),rk(o,n,t,e),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 '${t}' passed to '${e}' 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"?Yp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(r,t,e,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${t}[${a}]`,e,o))}var kw="__op";function N(r){let t=Object.keys(r);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 e=t[0],o=r[e];e.endsWith("_")&&(e=e.substring(0,e.length-1)),e=e+kw;let n=(...s)=>{T.startScope(e);try{let a=o(...s);return Tu(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:e,configurable:!0}),n}function g4(r,t){let e=v(r,"real","complex"),o=v(t,"imag","complex");xt(e.shape,o.shape,`real and imag shapes, ${e.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:e,imag:o};return T.runKernel(Ri,n)}var $r=N({complex_:g4});function wr(r,t,e,o){if(o==null)o=_i(r);else if(o==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(td(r)||ed(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,t||e,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(t!=null){Ct(t);let n=He(t),s=He(e);$(n===s,()=>`Based on the provided shape, [${t}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!Pt(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=o!=="string"?Yp(r,o):Fs(r,[],!0),T.makeTensor(r,t,o)}function ar(r,t,e){let o=sr(r,e);return wr(r,t,o,e)}var Cl={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(t){return new r(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(o=>Pt(o)?o.buffer:o),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let e=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function e(n){return t=n.end?1:0}if(e(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=x4(this.shards,e);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function x4(r,t){let e=0,o=r.length;for(;e<=o;){let n=Math.floor((o-e)/2)+e,s=t(r[n]);if(s===0)return n;s<0?o=n:e=n+1}return-1}var od=4;async function sk(r,t){let e=[],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)+od*m.length,f=new Uint8Array(d),h=0;for(let g=0;g{if(t+=s.byteLength,e.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(t),n=0;return e.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Nw=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function nk(r){return Nw?Buffer.byteLength(r,"utf8"):new Blob([r]).size}function ak(r){if(Nw)return Buffer.from(r).toString("base64");let t=new Uint8Array(r),e="";for(let o=0,n=t.length;o{let o=e<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function C4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function w4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function S4(){let r=b4(),t=C4(),e=w4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+t[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(t){r.getInstance().saveRouters.push(t)}static registerLoadRouter(t){r.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return r.getHandlers(t,"save")}static getLoadHandlers(t,e){return r.getHandlers(t,"load",e)}static getHandlers(t,e,o){let n=[];return(e==="load"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(t,o);i!==null&&n.push(i)}),n}},pk=r=>qt.registerSaveRouter(r),ck=r=>qt.registerLoadRouter(r),lk=r=>qt.getSaveHandlers(r),mk=(r,t)=>qt.getLoadHandlers(r,t);var $w="tensorflowjs",Ew=1,Ou="models_store",eu="model_info_store";function dk(){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,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Rw(r){let t=r.result;t.createObjectStore(Ou,{keyPath:"modelPath"}),t.createObjectStore(eu,{keyPath:"modelPath"})}var ka=class{constructor(t){if(this.indexedDB=dk(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((o,n)=>{let s=this.indexedDB.open($w,Ew);s.onupgradeneeded=()=>Rw(s),s.onsuccess=()=>{let a=s.result;if(e==null){let i=a.transaction(Ou,"readonly"),u=i.objectStore(Ou).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{e.weightData=ir.join(e.weightData);let i=va(e),p=a.transaction(eu,"readwrite"),u=p.objectStore(eu),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Ou,"readwrite");let m=l.objectStore(Ou),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(eu);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 fk=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?I4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(fk);qt.registerLoadRouter(fk);function I4(r){return new ka(r)}function v4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var id=class{constructor(){this.indexedDB=dk()}async listModels(){return new Promise((t,e)=>{let o=this.indexedDB.open($w,Ew);o.onupgradeneeded=()=>Rw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(eu,"readonly"),i=s.objectStore(eu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;t(p)},i.onerror=p=>(n.close(),e(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>e(o.error)})}async removeModel(t){return t=v4(t),new Promise((e,o)=>{let n=this.indexedDB.open($w,Ew);n.onupgradeneeded=()=>Rw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(eu,"readwrite"),i=a.objectStore(eu),p=i.get(t),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=i.delete(t),l=()=>{u=s.transaction(Ou,"readwrite");let d=u.objectStore(Ou).delete(t);d.onsuccess=()=>e(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 si="/",ec="tensorflowjs_models",hk="info",k4="model_topology",N4="weight_specs",T4="weight_data",_4="model_metadata";function gk(r){return{info:[ec,r,hk].join(si),topology:[ec,r,k4].join(si),weightSpecs:[ec,r,N4].join(si),weightData:[ec,r,T4].join(si),modelMetadata:[ec,r,_4].join(si)}}function xk(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function $4(r){let t=r.split(si);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(si)}function E4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(t){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,t==null||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=gk(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let e=JSON.stringify(t.modelTopology),o=JSON.stringify(t.weightSpecs),n=va(t),s=ir.join(t.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,ak(s));let a={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,initializerSignature:t.initializerSignature!=null?t.initializerSignature:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw xk(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 t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let e={},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.`);e.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.`);e.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);e.format=i.format,e.generatedBy=i.generatedBy,e.convertedBy=i.convertedBy,i.signature!=null&&(e.signature=i.signature),i.userDefinedMetadata!=null&&(e.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(e.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(e.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(e.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 e.weightData=ik(a),e}};Na.URL_SCHEME="localstorage://";var yk=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?R4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(yk);qt.registerLoadRouter(yk);function R4(r){return new Na(r)}var ud=class{constructor(){$(A().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),$(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let t={},e=ec+si,o=si+hk;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(tc)&&(t=t.slice(0,t.indexOf(tc))),$(t.length>0,()=>"scheme must not be an empty string.");let o=r.getInstance();$(o.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),o.managers[t]=e}static getManager(t){let e=r.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(r.getInstance().managers)}};function pd(r){if(r.indexOf(tc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`);return{scheme:r.split(tc)[0],path:r.split(tc)[1]}}async function bk(r,t,e=!1){$(r!==t,()=>`Old path and new path are the same: '${r}'`);let o=qt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=qt.getSaveHandlers(t);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${t}.`);let a=s[0],i=pd(r).scheme,p=pd(r).path,u=i===pd(r).scheme,c=await n.load();e&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return e&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function Ck(){let r=Os.getSchemes(),t={};for(let e of r){let o=await Os.getManager(e).listModels();for(let n in o){let s=e+tc+n;t[s]=o[n]}}return t}async function wk(r){let t=pd(r);return Os.getManager(t.scheme).removeModel(t.path)}async function Sk(r,t){return bk(r,t,!1)}async function Ik(r,t){return bk(r,t,!0)}var Dw=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}setTimeoutCustom(t,e){if(typeof window=="undefined"||!A().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(t,e);return}this.functionRefs.push(t),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},e),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(t){return Xm(t)}};if(A().get("IS_BROWSER")){A().setPlatform("browser",new Dw);try{Os.registerManager(Na.URL_SCHEME,new ud)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new id)}catch(r){}}var D4={importFetch:()=>vk()},Aw;var Fw=class{constructor(){this.util=kk(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return A().global.fetch!=null?A().global.fetch(t,e):(Aw==null&&(Aw=D4.importFetch()),Aw(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?"":new this.util.TextDecoder(e).decode(t)}isTypedArray(t){return this.util.types.isFloat32Array(t)||this.util.types.isInt32Array(t)||this.util.types.isUint8Array(t)||this.util.types.isUint8ClampedArray(t)}};A().get("IS_NODE")&&!A().get("IS_BROWSER")&&A().setPlatform("node",new Fw);function me(r,t="float32",e){return t=t||"float32",Ct(r),new tt(r,t,e)}function A4(r,t){let e=v(r,"x","cast");if(!tw(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&e.dtype!=="string"||t!=="string"&&e.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:e},n={dtype:t};return T.runKernel(yo,o,n)}var We=N({cast_:A4});function F4(r){let e={x:v(r,"x","clone","string_or_numeric")};return T.runKernel(Co,e)}var Wr=N({clone_:F4});function cd(r,t=!1){console.log(r.toString(t))}Sw();var P4={buffer:me,cast:We,clone:Wr,print:cd};Z0(P4);function lde(){A().set("PROD",!0)}function mde(){A().set("DEBUG",!0)}function dde(){A().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Pw(r){A().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}J0(Pw);function fde(){T.disposeVariables()}function ur(){return T}function hde(){return T.memory()}function gde(r){return T.profile(r)}function De(r,t){return T.tidy(r,t)}function Ot(r){yl(r).forEach(e=>e.dispose())}function Er(r){return T.keep(r)}function xde(r){return T.time(r)}function yde(r){return T.setBackend(r)}function bde(){return T.ready()}function Cde(){return T.backendName}function wde(r){T.removeBackend(r)}function Sde(r){return T.findBackend(r)}function Ide(r){return T.findBackendFactory(r)}function tu(r,t,e=1){return T.registerBackend(r,t,e)}function vde(){return T.backend}function kde(r,t){A().setPlatform(r,t)}function O4(r,t){let e=v(r,"a","add"),o=v(t,"b","add");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(io,n)}var Ce=N({add_:O4});function M4(r,t){let e=v(r,"a","floorDiv"),o=v(t,"b","floorDiv");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Sn,n)}var ld=N({floorDiv_:M4});function L4(r,t){let e=v(r,"a","div"),o=v(t,"b","div");if([e,o]=Oe(e,o),e.dtype==="int32"&&o.dtype==="int32")return ld(e,o);let n={a:e,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:L4});function B4(r,t){let e=v(r,"a","mul"),o=v(t,"b","mul");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Xn,n)}var se=N({mul_:B4});function z4(r){let t=v(r,"x","abs");if(t.dtype==="complex64"){let e={x:t};return T.runKernel(Di,e)}else{let e={x:t};return T.runKernel(Xs,e)}}var Qt=N({abs_:z4});function V4(r){let e={x:v(r,"x","acos")};return T.runKernel(Vo,e)}var Nk=N({acos_:V4});function W4(r){let e={x:v(r,"x","acosh")};return T.runKernel(Wo,e)}var Tk=N({acosh_:W4});function U4(r){$(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let t=r.map((n,s)=>v(n,`tensors${s}`,"addN")),e=t[0];t.forEach(n=>{if(n.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(n=>{if(!br(n.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=t;return T.runKernel(Uo,o)}var _k=N({addN_:U4});function G4(r,t=null,e=!1){let n={x:v(r,"x","all","bool")},s={axis:t,keepDims:e};return T.runKernel(Go,n,s)}var $k=N({all_:G4});function H4(r,t=null,e=!1){let n={x:v(r,"x","any","bool")},s={axis:t,keepDims:e};return T.runKernel(Ho,n,s)}var Ek=N({any_:H4});function K4(r,t=0){let o={x:v(r,"x","argMax")},n={axis:t};return T.runKernel(Ys,o,n)}var Rk=N({argMax_:K4});function q4(r,t=0){let o={x:v(r,"x","argMin")},n={axis:t};return T.runKernel(Qs,o,n)}var Dk=N({argMin_:q4});function j4(r){let e={x:v(r,"x","asin")};return T.runKernel(Ko,e)}var Ak=N({asin_:j4});function X4(r){let e={x:v(r,"x","asinh")};return T.runKernel(qo,e)}var Fk=N({asinh_:X4});function Y4(r){let e={x:v(r,"x","atan")};return T.runKernel(jo,e)}var Pk=N({atan_:Y4});function Q4(r,t){let e=v(r,"a","atan2"),o=v(t,"b","atan2");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Yo,n)}var Ok=N({atan2_:Q4});function Z4(r){let e={x:v(r,"x","atanh")};return T.runKernel(Xo,e)}var Mk=N({atanh_:Z4});function J4(r,t,e,o,n="NHWC",s){let a=r[3],i=[...t,a],p=Bk(n);return Lu(r,i,e,s,o,null,null,p)}function Mw(r,t,e,o,n,s,a="channelsLast"){let[i,p]=wl(t),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 Lu(r,u,e,o,n,s,!1,a)}function eH(r,t,e,o,n,s,a="NDHWC"){let[i,p,u]=Ow(t),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 Lk(r,c,e,o,n,!1,l,s)}function Lu(r,t,e,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]=t,[h,g]=wl(e),[x,b]=wl(o),C=rc(m,x),S=rc(d,b),{padInfo:k,outHeight:_,outWidth:E}=oH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i==="channelsFirst"?D=[p,R,_,E]:i==="channelsLast"&&(D=[p,_,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:t}}function Lk(r,t,e,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]=t,[x,b,C]=Ow(e),[S,k,_]=Ow(o),E=rc(d,S),R=rc(f,k),D=rc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=nH(n,u,c,l,x,b,C,E,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:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:t}}function tH(r,t,e,o,n){o==null&&(o=Lw(r,t,e));let s=r[0],a=r[1],i=Sl((s-t+2*o)/e+1,n),p=Sl((a-t+2*o)/e+1,n);return[i,p]}function rH(r,t,e,o,n,s){n==null&&(n=Lw(r,t[0],o[0]));let a=[0,0,0,e];for(let i=0;i<3;i++)r[i]+2*n>=t[i]&&(a[i]=Sl((r[i]-t[i]+2*n)/o[i]+1,s));return a}function Lw(r,t,e,o=1){let n=rc(t,o);return Math.floor((r[0]*(e-1)-e+n)/2)}function wl(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Ow(r){return typeof r=="number"?[r,r,r]:r}function rc(r,t){return t<=1?r:r+(r-1)*(t-1)}function oH(r,t,e,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=tH([t,e],s,o,r,i);c=d[0],l=d[1]}else if(r==="same"){c=Math.ceil(t/o),l=Math.ceil(e/n);let m=Math.max(0,(c-1)*o+s-t),d=Math.max(0,(l-1)*n+a-e),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((t-s+1)/o),l=Math.ceil((e-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=Sl((t-s+m+d)/o+1,i),l=Sl((e-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function nH(r,t,e,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=rH([t,e,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(t/n),d=Math.ceil(e/s),f=Math.ceil(o/a);let h=(m-1)*n+i-t,g=(d-1)*s+p-e,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),E=x-_;l={top:S,bottom:k,left:_,right:E,front:b,back:C,type:"SAME"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function Sl(r,t){if(!t)return Math.trunc(r);switch(t){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${t}`)}}function Mu(r){let[t,e,o]=wl(r);return t===1&&e===1&&o===1}function gr(r,t){return Mu(r)||Mu(t)}function Ta(r){return wl(r).every(t=>t>0)}function Bk(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Lt(r,t,e){if(e!=null){if(typeof t=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);if(typeof t=="number")$(Ka(t),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);else if(typeof t=="object")t.forEach(o=>{o.forEach(n=>{$(Ka(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${t}`)}}function sH(r,t){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:t};return T.runKernel(da,o,n)}var W=N({reshape_:sH});function aH(r,t,e,o,n){let s=v(r,"x","avgPool","float32"),a=1;$(gr(e,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${e} 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]])),$(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:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=We(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var md=N({avgPool_:aH});function iH(r,t,e,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]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof e=="number"&&e>0||Array.isArray(e)&&e[0]>0&&e[1]>0&&e[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${e}'`),Lt("avgPool3d",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=We(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var zk=N({avgPool3d_:iH});function uH(r,t=0){$(r.length>=1,()=>"Pass at least one tensor to concat");let e=ni(r,"tensors","concat","string_or_numeric");if(e[0].dtype==="complex64"&&e.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${s.dtype}. `)}),e.length===1)return Wr(e[0]);let o=e,n={axis:t};return T.runKernel(ta,o,n)}var yt=N({concat_:uH});function pH(r,t,e=!1,o=!1){let n=v(r,"a","matMul"),s=v(t,"b","matMul");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:e,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:pH});function cH(r){let e={x:v(r,"x","sigmoid","float32")};return T.runKernel(bs,e)}var $a=N({sigmoid_:cH});function lH(r,t,e){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:t,size:e};return T.runKernel(ha,n,s)}var Xe=N({slice_:lH});function mH(r){let e={x:v(r,"x","tanh","float32")};return T.runKernel($s,e)}var Il=N({tanh_:mH});function dH(r,t,e,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(t,"lstmKernel","basicLSTMCell"),p=v(e,"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($a(b),Il(C)),se(c,$a(Ce(a,S)))),E=se(Il(_),$a(k));return[_,E]}var Vk=N({basicLSTMCell_:dH});function fH(r,t,e){let o=v(r,"x","batchToSpaceND"),n=t.reduce((i,p)=>i*p);$(o.rank>=1+t.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${t.length}`),$(e.length===t.length,()=>`crops.length is ${e.length} but should be equal to blockShape.length ${t.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${n}`);let s={x:o},a={blockShape:t,crops:e};return T.runKernel(Js,s,a)}var dd=N({batchToSpaceND_:fH});function Wk(r){let t;return r.rank===0||r.rank===1?t=W(r,[1,1,1,r.size]):r.rank===2?t=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?t=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):t=r,t}function hH(r,t,e,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;o!=null&&(c=v(o,"offset","batchNorm")),$(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),$(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),$(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:Wk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var ru=N({batchNorm_:hH});function gH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Uk=N({batchNorm2d_:gH});function xH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Gk=N({batchNorm3d_:xH});function yH(r,t,e,o,n,s){let a=v(r,"x","batchNorm"),i=v(t,"mean","batchNorm"),p=v(e,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&$(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),ru(a,i,p,c,u,s)}var Hk=N({batchNorm4d_:yH});function bH(r,t,e){let o=v(r,"x","bincount"),n=v(t,"weights","bincount");$(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(e>=0,()=>`size must be non-negative, but got ${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:e};return T.runKernel(Jo,s,a)}var fd=N({bincount_:bH});function CH(r,t){let e=v(r,"x","bitwiseAnd"),o=v(t,"y","bitwiseAnd");if(!br(e.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${e.shape}, y: ${o.shape}`);if(e.dtype!=="int32"||o.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${e.dtype} and type of y: ${o.dtype}`);let n={a:e,b:o};return T.runKernel(qa,n)}var Kk=N({bitwiseAnd_:CH});function wH(r,t){let e=v(r,"s0","broadcastArgs","int32"),o=v(t,"s1","broadcastArgs","int32");if(e.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:e,s1:o};return T.runKernel(ea,n)}var qk=N({broadcastArgs_:wH});function SH(r,t){let e=v(r,"broadcastTo","x"),o=e.shape;if(Ct(t),t.lengthe.rank){let u=e.shape.slice();for(;u.length=0;u--)if(n[u]===t[u])s[u]=1;else if(e.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${t}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Wr(e);let i={x:e},p={reps:s};return T.runKernel(uo,i,p)}var ou=N({broadcastTo_:SH});function IH(r){let e={x:v(r,"x","ceil","float32")};return T.runKernel(en,e)}var jk=N({ceil_:IH});function Ea(r,t,e){Ct(r),e=e||_i(t);let o={shape:r,value:t,dtype:e};return T.runKernel(sa,{},o)}function vH(r,t,e){let o=v(r,"x","clipByValue");if($(t<=e,()=>`Error in clip: min (${t}) must be less than or equal to max (${e}).`),t===e)return Ea(o.shape,t,o.dtype);let n={x:o},s={clipValueMin:t,clipValueMax:e};return T.runKernel(bo,n,s)}var Xk=N({clipByValue_:vH});function kH(r){return yt(r,0)}var Yk=N({concat1d_:kH});function NH(r,t){return yt(r,t)}var Qk=N({concat2d_:NH});function TH(r,t){return yt(r,t)}var Zk=N({concat3d_:TH});function _H(r,t){return yt(r,t)}var Jk=N({concat4d_:_H});function $H(r,t,e,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(t,"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]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Lt("conv2d",o,a);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),$(gr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(Ta(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv2D: Strides should be larger than 0.");let m={x:u,filter:p},d={strides:e,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 nu=N({conv2d_:$H});function EH(r,t,e,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(t,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Lt("conv1d",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(gr(e,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`),$(Ta(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv1D: Stride should be larger than 0."),$(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=nu(m,l,[1,e],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 e2=N({conv1d_:EH});function RH(r,t,e,o,n,s="NHWC",a){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let i=r,p=t,u=!1;t.rank===3&&(u=!0,p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(e.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`);let c=s==="NHWC"?i[3]:i[1],l=s==="NHWC"?p.shape[3]:p.shape[1];$(c===e.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`),$(l===e.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[3]}.`),Lt("conv2dDerInput",n,a);let m={dy:p,filter:e},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 hd=N({conv2DBackpropInput_:RH});function DH(r,t,e,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(t,"filter","conv2dTranspose");return hd(e,a,i,o,n,"NHWC",s)}var t2=N({conv2dTranspose_:DH});function AH(r,t,e,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(t,"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]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(gr(e,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),$(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Ta(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),$(Ta(e),()=>"Error in conv3D: Strides should be larger than 0.");let c={x:p,filter:i},l={strides:e,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 r2=N({conv3d_:AH});function FH(r,t,e,o,n){$(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let s=r,a=t,i=!1;t.rank===4&&(i=!0,a=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(e.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`),$(p===e.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${e.shape[3]}.`),$(u===e.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${e.shape[4]}.`);let c={dy:a,filter:e},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 o2=N({conv3DBackpropInput_:FH});function PH(r,t,e,o,n){let s=v(r,"x","conv3dTranspose"),a=v(t,"filter","conv3dTranspose");return o2(e,s,a,o,n)}var n2=N({conv3dTranspose_:PH});function OH(r){let e={x:v(r,"x","cos","float32")};return T.runKernel(sn,e)}var s2=N({cos_:OH});function MH(r){let e={x:v(r,"x","cosh","float32")};return T.runKernel(an,e)}var a2=N({cosh_:MH});function LH(r,t=0,e=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(un,s,a)}var i2=N({cumprod_:LH});function BH(r,t=0,e=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:t,exclusive:e,reverse:o};return T.runKernel(pn,s,a)}var u2=N({cumsum_:BH});function zH(r,t,e,o=!1){let n=v(r,"x","denseBincount"),s=v(t,"weights","denseBincount");$(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(e>=0,()=>`size must be non-negative, but got ${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:e,binaryOutput:o};return T.runKernel(ra,a,i)}var p2=N({denseBincount_:zH});function VH(r,t,e="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=e==="NHWC"?o.shape[1]:o.shape[2],s=e==="NHWC"?o.shape[2]:o.shape[3],a=e==="NHWC"?o.shape[3]:o.shape[1];$(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),$(n*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${n} and ${t} for depthToSpace with input shape ${o.shape}`),$(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape - ${o.shape}`),$(a%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:t,dataFormat:e};return T.runKernel(mn,i,p)}var p2=N({depthToSpace_:VH});function WH(r,t,e,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(t,"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]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Bt("depthwiseConv2d",o,a);let m={x:u,filter:p},d={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(dn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var lc=N({depthwiseConv2d_:WH});function UH(r){let e={x:v(r,"x","diag")};return T.runKernel(oa,e)}var c2=N({diag_:UH});function GH(r,t,e,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(t,"filter","dilation2d");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(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:e,pad:o,dilations:n},m=T.runKernel(fn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var l2=N({dilation2d_:GH});var Ir={};qe(Ir,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>m2,getReductionAxes:()=>yd});function m2(r,t){let e=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function yd(r,t){let e=[];for(let o=0;o1)&&e.unshift(s)}return e}function rt(r,t){let e=Math.max(r.length,t.length),o=new Array(e);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${o.rank}.`);let n=e.rank===1?e.size:e.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),e.rank===1&&o.rank===1){let a=W(e,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(e.rank===1&&o.rank===2){let a=W(e,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(e.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(e,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(e,a)}}var f2=N({dot_:XH});function YH(r,...t){let e=t.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return T.runKernel(Vi,e,o)}var pu=N({einsum_:YH});function QH(r){let e={x:v(r,"x","elu","float32")};return T.runKernel(gn,e)}var Cd=N({elu_:QH});function ZH(r,t){let e=v(r,"x","ensureShape","string_or_numeric");if(!ZC(e.shape,t))throw new Error(`EnsureShape: Shape of tensor ${e.shape} is not compatible with expected shape ${t}`);return r}var h2=N({ensureShape_:ZH});function JH(r){let t=v(r,"x","erf");$(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=We(t,"float32"));let e={x:t};return T.runKernel(xn,e)}var g2=N({erf_:JH});function Bw(r,t){for(let e=0;er[s]);return[e,n]}function ii(r,t){let e=t.map(o=>1);return x2(r,e,t)}function tK(r,t,e){$(Bw(t,e),()=>`${r} supports only inner-most axes for now. Got axes ${t} and rank-${e} input.`)}function rK(r,t){if(Bw(r,t))return null;let e=[];for(let o=0;oe.push(o)),e}function oK(r){return r.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]).map(t=>t[0])}function nK(r,t){let e=[];for(let o=t-r;o"Axis must be <= rank of the tensor");let o={input:e},n={dim:t};return T.runKernel(na,o,n)}var Ms=N({expandDims_:hK});function gK(r){let e={x:v(r,"x","expm1")};return T.runKernel(Cn,e)}var C2=N({expm1_:gK});function xK(r,t){let e=v(r,"x","tile","string_or_numeric");$(e.rank===t.length,()=>`Error in transpose: rank of input ${e.rank} must match length of reps ${t}.`);let o={x:e},n={reps:t};return T.runKernel(po,o,n)}var cu=N({tile_:xK});function yK(r,t,e,o="float32"){t==null&&(t=r);let n=me([r,t],o),s=r<=t?r:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`),$(qa(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);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:t,bias:e,alpha:o,beta:n},c=T.runKernel(zn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var k2=N({localResponseNormalization_:EK});function RK(r){let e={x:v(r,"x","log","float32")};return T.runKernel(Pn,e)}var pi=N({log_:RK});function DK(r){let e={x:v(r,"x","log1p")};return T.runKernel(On,e)}var Nd=N({log1p_:DK});function AK(r){return $(qs(r),()=>"The f passed in grad(f) must be a function"),(t,e)=>{let o=v(t,"x","tf.grad","string_or_numeric"),n=e!=null?v(e,"dy","tf.grad"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&yt(s.shape,n.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Td(a),a[0]})}}function FK(r){return $(qs(r),()=>"The f passed in grads(f) must be a function"),(t,e)=>{$(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=si(t,"args","tf.grads","string_or_numeric"),n=e!=null?v(e,"dy","tf.grads"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&yt(s.shape,n.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Td(a),a})}}function PK(r){return $(qs(r),()=>"The f passed in valueAndGrad(f) must be a function"),(t,e)=>{$(t instanceof ut,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),$(e==null||e instanceof ut,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=T.gradients(()=>r(t),[t],e);return Td(o),{grad:o[0],value:n}}}function OK(r){return $(qs(r),()=>"The f passed in valueAndGrads(f) must be a function"),(t,e)=>{$(Array.isArray(t)&&t.every(n=>n instanceof ut),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),$(e==null||e instanceof ut,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=T.gradients(()=>r(...t),t,e);return e!=null&&yt(o.value.shape,e.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Td(o.grads),o}}function zw(r,t){$(qs(r),()=>"The f passed in variableGrads(f) must be a function"),$(t==null||Array.isArray(t)&&t.every(u=>u instanceof oi),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let e=t!=null;if(!e){t=[];for(let u in T.registeredVariables)t.push(T.registeredVariables[u])}let o=e?t.filter(u=>!u.trainable):null,n=t.length;t=t.filter(u=>u.trainable),$(t.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,t,null,s);$(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return t.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 vr(r){return T.customGrad(r)}function Td(r){if(r.filter(e=>e==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 MK(r){let e={x:v(r,"x","neg")};return T.runKernel(pa,e)}var cr=N({neg_:MK});function LK(r){let e={x:v(r,"x","softplus")};return T.runKernel(ws,e)}var _d=N({softplus_:LK});function BK(r){let t=v(r,"x","logSigmoid");return vr(o=>({value:cr(_d(cr(o))),gradFunc:a=>se(a,$a(cr(o)))}))(t)}var N2=N({logSigmoid_:BK});function zK(r,t){let e=v(r,"a","sub"),o=v(t,"b","sub");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(_s,n)}var Te=N({sub_:zK});function VK(r,t=-1){let e=v(r,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t}`);return vr((n,s)=>{let i=Ra(n,t,!0),p=Te(n,i),u=Te(We(p,"float32"),pi(ot($o(p),t,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=$o(d);return Te(l,se(ot(l,t,f),h))}}})(e)}var T2=N({logSoftmax_:VK});function WK(r,t=null,e=!1){let o=v(r,"x","logSumExp"),n=Ei(t,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(e){let l=ii(c.shape,n);return W(c,l)}return c}var $d=N({logSumExp_:WK});function UK(r,t){let e=v(r,"a","logicalAnd","bool"),o=v(t,"b","logicalAnd","bool");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Mn,n)}var ju=N({logicalAnd_:UK});function GK(r){let e={x:v(r,"x","logicalNot","bool")};return T.runKernel(Ln,e)}var Ed=N({logicalNot_:GK});function HK(r,t){let e=v(r,"a","logicalOr","bool"),o=v(t,"b","logicalOr","bool");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Bn,n)}var Rd=N({logicalOr_:HK});function KK(r,t){let e=v(r,"a","logicalXor","bool"),o=v(t,"b","logicalXor","bool");return rt(e.shape,o.shape),ju(Rd(r,t),Ed(ju(r,t)))}var _2=N({logicalXor_:KK});var Dd=2147483648;function qK(r,t,e="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(t,"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(He(p.shape)>=Dd)throw new Error(`values tensor size must less than ${Dd}`);if(i.shape[1]>=Dd)throw new Error(`trailing dim_size must less than ${Dd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:e};return T.runKernel(hs,u,c)}var $l=N({searchSorted_:qK});function $2(r,t){return $l(r,t,"left")}function jK(r,t,e,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]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(xr(e,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`),Bt("maxPool",o,n);let u={x:i},c={filterSize:t,strides:e,pad:o,dimRoundingMode:n},l=T.runKernel(Un,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Ad=N({maxPool_:jK});function XK(r,t=[1,1,1],e,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]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Bt("maxPool3d",o,n);let u={x:i},c={filterSize:t,strides:e,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 E2=N({maxPool3d_:XK});function YK(r,t,e,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:t,strides:e,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var R2=N({maxPoolWithArgmax_:YK});function QK(r,t){let e=v(r,"a","maximum"),o=v(t,"b","maximum");[e,o]=Oe(e,o),e.dtype==="bool"&&(e=We(e,"int32"),o=We(o,"int32")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Wn,n)}var Fd=N({maximum_:QK});function ZK(r,t=null,e=!1){let n={x:v(r,"x","mean")},s={axis:t,keepDims:e};return T.runKernel(Gn,n,s)}var Xu=N({mean_:ZK});function Gr(r,t="float32"){if(wt(r),t==="complex64"){let o=Gr(r,"float32"),n=Gr(r,"float32");return Er(o,n)}let e=Yp(He(r),t);return T.makeTensor(e,r,t)}function Da(r,t="float32"){if(wt(r),t==="complex64"){let o=Da(r,"float32"),n=Gr(r,"float32");return Er(o,n)}let e=fl(He(r),t);return T.makeTensor(e,r,t)}function D2(r,t,{indexing:e="xy"}={}){if(e!=="xy"&&e!=="ij")throw new TypeError(`${e} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,"x","meshgrid",r instanceof ut?r.dtype:"float32");if(t===void 0)return[o];let n=v(t,"y","meshgrid",t instanceof ut?t.dtype:"float32"),s=He(o.shape),a=He(n.shape);return e==="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 JK(r,t){let e=v(r,"a","minimum"),o=v(t,"b","minimum");[e,o]=Oe(e,o),e.dtype==="bool"&&(e=We(e,"int32"),o=We(o,"int32")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Kn,n)}var Yu=N({minimum_:JK});function eq(r,t,e){$(e==="reflect"||e==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");$(t.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${t.length}.`);let n=e==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),$(t[i][0]>=0&&t[i][0]<=o.shape[i]-n&&t[i][1]>=0&&t[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:t,mode:e},a={x:o};return T.runKernel(qn,a,s)}var A2=N({mirrorPad_:eq});function tq(r,t){let e=v(r,"a","mod"),o=v(t,"b","mod");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(jn,n)}var F2=N({mod_:tq});function rq(r,t=null,e=!1){r=v(r,"x","moments");let o=Ei(t,r.shape),n=Xu(r,o,e),s=n.shape;e||(s=ii(n.shape,o));let a=er(Te(We(r,"float32"),W(n,s))),i=Xu(a,o,e);return{mean:n,variance:i}}var P2=N({moments_:rq});function oq(r,t,e,o){let n=v(t,"data","multiRNNCell"),s=si(e,"c","multiRNNCell"),a=si(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}`);e=e||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:t,seed:e,normalized:o},c=T.runKernel(Xn,p,u);return a===1?W(c,[c.size]):c}var M2=N({multinomial_:nq});function sq(r,t){let e=v(r,"a","notEqual","string_or_numeric"),o=v(t,"b","notEqual","string_or_numeric");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Qn,n)}var Pd=N({notEqual_:sq});function aq(r,t,e=1,o=0,n="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:t,onValue:e,offValue:o};return T.runKernel(es,a,i)}var El=N({oneHot_:aq});function iq(r){let e={x:v(r,"x","onesLike")};return T.runKernel(ca,e)}var L2=N({onesLike_:iq});function uq(r,t){let e=v(r,"v1","outerProduct"),o=v(t,"v2","outerProduct");$(e.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${o.rank}.`);let n=W(e,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var B2=N({outerProduct_:uq});function pq(r,t,e=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:t,constantValue:e},s={x:o};return T.runKernel(ts,s,n)}var Aa=N({pad_:pq});function cq(r,t,e=0){return $(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),Aa(r,[t],e)}var z2=N({pad1d_:cq});function lq(r,t,e=0){return $(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Aa(r,t,e)}var V2=N({pad2d_:lq});function mq(r,t,e=0){return $(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."),Aa(r,t,e)}var W2=N({pad3d_:mq});function dq(r,t,e=0){return $(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."),Aa(r,t,e)}var U2=N({pad4d_:dq});function fq(r,t,e){let o=v(r,"x","spaceToBatchND");$(o.rank>=1+t.length,()=>`input rank ${o.rank} should be > than [blockShape] ${t.length}`),$(e.length===t.length,()=>`paddings.shape[0] ${e.length} must be equal to [blockShape] ${t.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=t.length?a&&(i+e[p-1][0]+e[p-1][1])%t[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t.toString()}`);let n={x:o},s={blockShape:t,paddings:e};return T.runKernel(ga,n,s)}var Od=N({spaceToBatchND_:fq});function hq(r,t,e,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]])),$(xr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Mw(p.shape,t,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o==="same"?m=xq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=gq([c.inHeight,c.inWidth],l,m),g=d?o:"valid",x=d?p:Od(p,l,f),C=(e==="avg"?()=>fd(x,t,s,g,a):()=>Ad(x,t,s,g,a))(),S=d?C:hd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function gq(r,t,e){let o=e.map(c=>c[0]),n=e.map(c=>c[1]),s=r.concat(o,n),a=t.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=t.map((c,l)=>[o[l],i[l]]),u=t.map((c,l)=>[0,a[l]]);return[p,u]}function xq(r,t){let o=r.map((a,i)=>a+(a-1)*(t[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 G2=N({pool_:hq});function yq(r,t){let e=v(r,"x","prelu"),o=v(t,"alpha","prelu"),n={x:e,alpha:o};return T.runKernel(os,n)}var Md=N({prelu_:yq});function bq(r,t=null,e=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=We(o,"int32"));let n={x:o},s={axis:t,keepDims:e};return T.runKernel(ns,n,s)}var H2=N({prod_:bq});function Cq(r,t,e,o){let n=r.map((c,l)=>v(c,`tensors${l}`,"raggedGather","int32")),s=v(t,"paramsDenseValues","raggedGather"),a=v(e,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Qp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var K2=N({raggedGather_:Cq});function wq(r,t,e){let o=v(r,"starts","raggedRange"),n=v(t,"limits","raggedRange",o.dtype),s=v(e,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Zp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var q2=N({raggedRange_:wq});function Sq(r,t,e,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(t,"values","raggedTensorToTensor"),i=v(e,"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(Jp,u,c)}var j2=N({raggedTensorToTensor_:Sq});function Iq(r,t,e){wt(r);let o=He(r),n=null;if(e==null||e==="float32")n=new Float32Array(o);else if(e==="int32")n=new Int32Array(o);else if(e==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${e}`);for(let s=0;sm1,createVideoElement:()=>Oq,encodeStrings:()=>f1,expectArrayBuffersEqual:()=>Pq,expectArraysClose:()=>Rq,expectArraysEqual:()=>Aq,expectNumbersClose:()=>d1,expectPromiseToFail:()=>Dq,expectValuesInRange:()=>Fq,play:()=>Mq,testEpsilon:()=>Bd});var Eq=.001,m1=.1;function Rq(r,t,e){return e==null&&(e=Bd()),jw(r,t,(o,n)=>Xw(o,n,e))}function Bd(){return T.backend.floatPrecision()===32?Eq:m1}function jw(r,t,e){let o=!0;if((Ot(r)||Ot(t))&&(o=!1),Ot(r)&&Ot(t)&&(o=!0),o){let a=r.constructor.name,i=t.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(t)){let a=ir(r),i=ir(t);if(!Cr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Ot(r)?r:Ps(r),s=Ot(t)?t:Ps(t);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. + ${o.shape}`),$(a%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:t,dataFormat:e};return T.runKernel(ln,i,p)}var c2=N({depthToSpace_:VH});function WH(r,t,e,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(t,"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]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n==="NHWC"?u.shape[3]:u.shape[1];$(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Lt("depthwiseConv2d",o,a);let m={x:u,filter:p},d={strides:e,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 oc=N({depthwiseConv2d_:WH});function UH(r){let e={x:v(r,"x","diag")};return T.runKernel(oa,e)}var l2=N({diag_:UH});function GH(r,t,e,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(t,"filter","dilation2d");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(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:e,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 m2=N({dilation2d_:GH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>d2,getReductionAxes:()=>gd});function d2(r,t){let e=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function gd(r,t){let e=[];for(let o=0;o1)&&e.unshift(s)}return e}function rt(r,t){let e=Math.max(r.length,t.length),o=new Array(e);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${o.rank}.`);let n=e.rank===1?e.size:e.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),e.rank===1&&o.rank===1){let a=W(e,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(e.rank===1&&o.rank===2){let a=W(e,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(e.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(e,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(e,a)}}var h2=N({dot_:XH});function YH(r,...t){let e=t.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return T.runKernel(Li,e,o)}var su=N({einsum_:YH});function QH(r){let e={x:v(r,"x","elu","float32")};return T.runKernel(hn,e)}var yd=N({elu_:QH});function ZH(r,t){let e=v(r,"x","ensureShape","string_or_numeric");if(!QC(e.shape,t))throw new Error(`EnsureShape: Shape of tensor ${e.shape} is not compatible with expected shape ${t}`);return r}var g2=N({ensureShape_:ZH});function JH(r){let t=v(r,"x","erf");$(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=We(t,"float32"));let e={x:t};return T.runKernel(gn,e)}var x2=N({erf_:JH});function Bw(r,t){for(let e=0;er[s]);return[e,n]}function ai(r,t){let e=t.map(o=>1);return y2(r,e,t)}function tK(r,t,e){$(Bw(t,e),()=>`${r} supports only inner-most axes for now. Got axes ${t} and rank-${e} input.`)}function rK(r,t){if(Bw(r,t))return null;let e=[];for(let o=0;oe.push(o)),e}function oK(r){return r.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]).map(t=>t[0])}function nK(r,t){let e=[];for(let o=t-r;o"Axis must be <= rank of the tensor");let o={input:e},n={dim:t};return T.runKernel(na,o,n)}var Ms=N({expandDims_:hK});function gK(r){let e={x:v(r,"x","expm1")};return T.runKernel(bn,e)}var w2=N({expm1_:gK});function xK(r,t){let e=v(r,"x","tile","string_or_numeric");$(e.rank===t.length,()=>`Error in transpose: rank of input ${e.rank} must match length of reps ${t}.`);let o={x:e},n={reps:t};return T.runKernel(uo,o,n)}var au=N({tile_:xK});function yK(r,t,e,o="float32"){t==null&&(t=r);let n=me([r,t],o),s=r<=t?r:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`),$(Ka(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);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:t,bias:e,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 N2=N({localResponseNormalization_:EK});function RK(r){let e={x:v(r,"x","log","float32")};return T.runKernel(Fn,e)}var ui=N({log_:RK});function DK(r){let e={x:v(r,"x","log1p")};return T.runKernel(Pn,e)}var vd=N({log1p_:DK});function AK(r){return $(qs(r),()=>"The f passed in grad(f) must be a function"),(t,e)=>{let o=v(t,"x","tf.grad","string_or_numeric"),n=e!=null?v(e,"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)"),kd(a),a[0]})}}function FK(r){return $(qs(r),()=>"The f passed in grads(f) must be a function"),(t,e)=>{$(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=ni(t,"args","tf.grads","string_or_numeric"),n=e!=null?v(e,"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,...])"),kd(a),a})}}function PK(r){return $(qs(r),()=>"The f passed in valueAndGrad(f) must be a function"),(t,e)=>{$(t instanceof mt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),$(e==null||e instanceof mt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=T.gradients(()=>r(t),[t],e);return kd(o),{grad:o[0],value:n}}}function OK(r){return $(qs(r),()=>"The f passed in valueAndGrads(f) must be a function"),(t,e)=>{$(Array.isArray(t)&&t.every(n=>n instanceof mt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),$(e==null||e instanceof mt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=T.gradients(()=>r(...t),t,e);return e!=null&&xt(o.value.shape,e.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),kd(o.grads),o}}function zw(r,t){$(qs(r),()=>"The f passed in variableGrads(f) must be a function"),$(t==null||Array.isArray(t)&&t.every(u=>u instanceof ri),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let e=t!=null;if(!e){t=[];for(let u in T.registeredVariables)t.push(T.registeredVariables[u])}let o=e?t.filter(u=>!u.trainable):null,n=t.length;t=t.filter(u=>u.trainable),$(t.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,t,null,s);$(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return t.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 kd(r){if(r.filter(e=>e==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 MK(r){let e={x:v(r,"x","neg")};return T.runKernel(pa,e)}var pr=N({neg_:MK});function LK(r){let e={x:v(r,"x","softplus")};return T.runKernel(Cs,e)}var Nd=N({softplus_:LK});function BK(r){let t=v(r,"x","logSigmoid");return Ir(o=>({value:pr(Nd(pr(o))),gradFunc:a=>se(a,$a(pr(o)))}))(t)}var T2=N({logSigmoid_:BK});function zK(r,t){let e=v(r,"a","sub"),o=v(t,"b","sub");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:zK});function VK(r,t=-1){let e=v(r,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t}`);return Ir((n,s)=>{let i=Ra(n,t,!0),p=Te(n,i),u=Te(We(p,"float32"),ui(ot(_o(p),t,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,t,f),h))}}})(e)}var _2=N({logSoftmax_:VK});function WK(r,t=null,e=!1){let o=v(r,"x","logSumExp"),n=Ti(t,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=ui(p),c=Ce(W(s,u.shape),u);if(e){let l=ai(c.shape,n);return W(c,l)}return c}var Td=N({logSumExp_:WK});function UK(r,t){let e=v(r,"a","logicalAnd","bool"),o=v(t,"b","logicalAnd","bool");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(On,n)}var Vu=N({logicalAnd_:UK});function GK(r){let e={x:v(r,"x","logicalNot","bool")};return T.runKernel(Mn,e)}var _d=N({logicalNot_:GK});function HK(r,t){let e=v(r,"a","logicalOr","bool"),o=v(t,"b","logicalOr","bool");rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:HK});function KK(r,t){let e=v(r,"a","logicalXor","bool"),o=v(t,"b","logicalXor","bool");return rt(e.shape,o.shape),Vu($d(r,t),_d(Vu(r,t)))}var $2=N({logicalXor_:KK});var Ed=2147483648;function qK(r,t,e="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(t,"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(He(p.shape)>=Ed)throw new Error(`values tensor size must less than ${Ed}`);if(i.shape[1]>=Ed)throw new Error(`trailing dim_size must less than ${Ed} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:e};return T.runKernel(fs,u,c)}var Nl=N({searchSorted_:qK});function E2(r,t){return Nl(r,t,"left")}function jK(r,t,e,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]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(gr(e,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${a}'`),Lt("maxPool",o,n);let u={x:i},c={filterSize:t,strides:e,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 Rd=N({maxPool_:jK});function XK(r,t=[1,1,1],e,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]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Lt("maxPool3d",o,n);let u={x:i},c={filterSize:t,strides:e,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 R2=N({maxPool3d_:XK});function YK(r,t,e,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:t,strides:e,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var D2=N({maxPoolWithArgmax_:YK});function QK(r,t){let e=v(r,"a","maximum"),o=v(t,"b","maximum");[e,o]=Oe(e,o),e.dtype==="bool"&&(e=We(e,"int32"),o=We(o,"int32")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Vn,n)}var Dd=N({maximum_:QK});function ZK(r,t=null,e=!1){let n={x:v(r,"x","mean")},s={axis:t,keepDims:e};return T.runKernel(Un,n,s)}var Wu=N({mean_:ZK});function Ur(r,t="float32"){if(Ct(r),t==="complex64"){let o=Ur(r,"float32"),n=Ur(r,"float32");return $r(o,n)}let e=Wp(He(r),t);return T.makeTensor(e,r,t)}function Da(r,t="float32"){if(Ct(r),t==="complex64"){let o=Da(r,"float32"),n=Ur(r,"float32");return $r(o,n)}let e=cl(He(r),t);return T.makeTensor(e,r,t)}function A2(r,t,{indexing:e="xy"}={}){if(e!=="xy"&&e!=="ij")throw new TypeError(`${e} 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(t===void 0)return[o];let n=v(t,"y","meshgrid",t instanceof mt?t.dtype:"float32"),s=He(o.shape),a=He(n.shape);return e==="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 JK(r,t){let e=v(r,"a","minimum"),o=v(t,"b","minimum");[e,o]=Oe(e,o),e.dtype==="bool"&&(e=We(e,"int32"),o=We(o,"int32")),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Hn,n)}var Uu=N({minimum_:JK});function eq(r,t,e){$(e==="reflect"||e==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");$(t.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${t.length}.`);let n=e==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),$(t[i][0]>=0&&t[i][0]<=o.shape[i]-n&&t[i][1]>=0&&t[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:t,mode:e},a={x:o};return T.runKernel(Kn,a,s)}var F2=N({mirrorPad_:eq});function tq(r,t){let e=v(r,"a","mod"),o=v(t,"b","mod");[e,o]=Oe(e,o);let n={a:e,b:o};return T.runKernel(qn,n)}var P2=N({mod_:tq});function rq(r,t=null,e=!1){r=v(r,"x","moments");let o=Ti(t,r.shape),n=Wu(r,o,e),s=n.shape;e||(s=ai(n.shape,o));let a=Zt(Te(We(r,"float32"),W(n,s))),i=Wu(a,o,e);return{mean:n,variance:i}}var O2=N({moments_:rq});function oq(r,t,e,o){let n=v(t,"data","multiRNNCell"),s=ni(e,"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}`);e=e||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:t,seed:e,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var L2=N({multinomial_:nq});function sq(r,t){let e=v(r,"a","notEqual","string_or_numeric"),o=v(t,"b","notEqual","string_or_numeric");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o};return T.runKernel(Yn,n)}var Ad=N({notEqual_:sq});function aq(r,t,e=1,o=0,n="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:t,onValue:e,offValue:o};return T.runKernel(Jn,a,i)}var Tl=N({oneHot_:aq});function iq(r){let e={x:v(r,"x","onesLike")};return T.runKernel(ca,e)}var B2=N({onesLike_:iq});function uq(r,t){let e=v(r,"v1","outerProduct"),o=v(t,"v2","outerProduct");$(e.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${o.rank}.`);let n=W(e,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var z2=N({outerProduct_:uq});function pq(r,t,e=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:t,constantValue:e},s={x:o};return T.runKernel(es,s,n)}var Aa=N({pad_:pq});function cq(r,t,e=0){return $(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),Aa(r,[t],e)}var V2=N({pad1d_:cq});function lq(r,t,e=0){return $(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Aa(r,t,e)}var W2=N({pad2d_:lq});function mq(r,t,e=0){return $(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."),Aa(r,t,e)}var U2=N({pad3d_:mq});function dq(r,t,e=0){return $(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."),Aa(r,t,e)}var G2=N({pad4d_:dq});function fq(r,t,e){let o=v(r,"x","spaceToBatchND");$(o.rank>=1+t.length,()=>`input rank ${o.rank} should be > than [blockShape] ${t.length}`),$(e.length===t.length,()=>`paddings.shape[0] ${e.length} must be equal to [blockShape] ${t.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=t.length?a&&(i+e[p-1][0]+e[p-1][1])%t[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t.toString()}`);let n={x:o},s={blockShape:t,paddings:e};return T.runKernel(ga,n,s)}var Fd=N({spaceToBatchND_:fq});function hq(r,t,e,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]])),$(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Mw(p.shape,t,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o==="same"?m=xq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=gq([c.inHeight,c.inWidth],l,m),g=d?o:"valid",x=d?p:Fd(p,l,f),C=(e==="avg"?()=>md(x,t,s,g,a):()=>Rd(x,t,s,g,a))(),S=d?C:dd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function gq(r,t,e){let o=e.map(c=>c[0]),n=e.map(c=>c[1]),s=r.concat(o,n),a=t.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=t.map((c,l)=>[o[l],i[l]]),u=t.map((c,l)=>[0,a[l]]);return[p,u]}function xq(r,t){let o=r.map((a,i)=>a+(a-1)*(t[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 H2=N({pool_:hq});function yq(r,t){let e=v(r,"x","prelu"),o=v(t,"alpha","prelu"),n={x:e,alpha:o};return T.runKernel(rs,n)}var Pd=N({prelu_:yq});function bq(r,t=null,e=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=We(o,"int32"));let n={x:o},s={axis:t,keepDims:e};return T.runKernel(os,n,s)}var K2=N({prod_:bq});function Cq(r,t,e,o){let n=r.map((c,l)=>v(c,`tensors${l}`,"raggedGather","int32")),s=v(t,"paramsDenseValues","raggedGather"),a=v(e,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Up,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var q2=N({raggedGather_:Cq});function wq(r,t,e){let o=v(r,"starts","raggedRange"),n=v(t,"limits","raggedRange",o.dtype),s=v(e,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Gp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var j2=N({raggedRange_:wq});function Sq(r,t,e,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(t,"values","raggedTensorToTensor"),i=v(e,"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(Hp,u,c)}var X2=N({raggedTensorToTensor_:Sq});function Iq(r,t,e){Ct(r);let o=He(r),n=null;if(e==null||e==="float32")n=new Float32Array(o);else if(e==="int32")n=new Int32Array(o);else if(e==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${e}`);for(let s=0;sd1,createVideoElement:()=>Oq,encodeStrings:()=>h1,expectArrayBuffersEqual:()=>Pq,expectArraysClose:()=>Rq,expectArraysEqual:()=>Aq,expectNumbersClose:()=>f1,expectPromiseToFail:()=>Dq,expectValuesInRange:()=>Fq,play:()=>Mq,testEpsilon:()=>Md});var Eq=.001,d1=.1;function Rq(r,t,e){return e==null&&(e=Md()),jw(r,t,(o,n)=>Xw(o,n,e))}function Md(){return T.backend.floatPrecision()===32?Eq:d1}function jw(r,t,e){let o=!0;if((Pt(r)||Pt(t))&&(o=!1),Pt(r)&&Pt(t)&&(o=!0),o){let a=r.constructor.name,i=t.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(t)){let a=sr(r),i=sr(t);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(t)?t:Fs(t);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;at.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function Aq(r,t){let e=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Vo(r)||Vo(r[0])||Vo(t)||Vo(t[0])?jw(r,e,(o,n)=>o==n):jw(r,t,(o,n)=>Xw(o,n,0))}function d1(r,t,e){if(e==null&&(e=Bd()),!Xw(r,t,e))throw new Error(`Numbers differ: actual === ${r}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Xw(r,t,e){return!isFinite(r)&&!isFinite(t)?!0:!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}function Fq(r,t,e){for(let o=0;oe)throw new Error(`Value out of range:${r[o]} low: ${t}, high: ${e}`)}function Pq(r,t){let e=new Float32Array(r),o=new Float32Array(t);if(e.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${e.length}`);for(let n=0;n{t.addEventListener("loadeddata",o=>e(t)),t.load()})}async function Mq(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(t=>{r.requestVideoFrameCallback(t)})}var Zu=class{constructor(t,e,o,n,s){this.mean=t,this.stdDev=e,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=Wd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let t,e,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);t=this.mean+this.stdDev*n*i,e=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(t))&&(o=!0)}return(!this.truncated||this.isValidTruncated(e))&&(this.nextVal=this.convertValue(e)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}},zd=class{constructor(t,e,o,n){this.alpha=t,this.beta=1/e,this.dtype=o;let s=n||Math.random();this.randu=Wd.alea(s.toString()),this.randn=new Zu(0,1,o,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let t,e,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,t=n*n,e=1-.331*t*t,o=.5*t+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=t,this.range=e-t,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 ${t} - ${e} <= 1 and dtype is not float`);this.random=Wd.alea(n)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Lq(r,t,e=1,o="float32",n){if(wt(r),e==null&&(e=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new zd(t,e,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),mo(t,0)}var C1=N({reverse1d_:jq});function Xq(r,t){let e=v(r,"x","reverse");return $(e.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`),mo(e,t)}var w1=N({reverse2d_:Xq});function Yq(r,t){let e=v(r,"x","reverse");return $(e.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`),mo(e,t)}var S1=N({reverse3d_:Yq});function Qq(r,t){let e=v(r,"x","reverse");return $(e.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`),mo(e,t)}var I1=N({reverse4d_:Qq});function Zq(r){let e={x:v(r,"x","round")};return T.runKernel(ls,e)}var Hd=N({round_:Zq});function Jq(r){let e={x:v(r,"x","rsqrt","float32")};return T.runKernel(ms,e)}var v1=N({rsqrt_:Jq});function e6(r){let e={x:v(r,"x","selu")};return T.runKernel(gs,e)}var k1=N({selu_:e6});function t6(r,t,e,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(t,"depthwiseFilter","separableConv2d"),u=v(e,"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");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(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=lc(c,p,o,n,a,s),g=uu(f,u,1,"valid",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var N1=N({separableConv2d_:t6});async function r6(r,t){let e=v(r,"x","setdiff1d"),o=v(t,"y","setdiff1d");$(e.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${e.dtype}) and y (${o.dtype}).`),$(e.rank===1,()=>`x should be 1D tensor, but got x (${e.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await e.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,[t],[e])}var R1=N({slice1d_:a6});function i6(r,t,e){let o=v(r,"x","slice2d");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var D1=N({slice2d_:i6});function u6(r,t,e){let o=v(r,"x","slice3d");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var A1=N({slice3d_:u6});function p6(r,t,e){let o=v(r,"x","slice4d");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var F1=N({slice4d_:p6});function c6(r,t=-1){let e=v(r,"logits","softmax","float32");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t}`);let o={logits:e},n={dim:t};return T.runKernel(vs,o,n)}var P1=N({softmax_:c6});function l6(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Wi,t)}var fc=N({fft_:l6});function m6(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Ui,t)}var Ju=N({ifft_:m6});function d6(r){let t=r.shape[r.shape.length-1],e=r.size/t,o;if(t<=2){let n=W(r,[e,t]);o=Ju(n)}else{let n=[e,2*(t-1)],s=W(ci(r),[e,t]),a=W(lu(r),[e,t]),i=mo(Xe(s,[0,1],[e,t-2]),1),p=se(mo(Xe(a,[0,1],[e,t-2]),1),ke(-1)),u=bt([s,i],1),c=bt([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 Kd=N({irfft_:d6});function f6(r,t,e=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:t,axis:e};return T.runKernel(xa,n,s)}var li=N({split_:f6});function h6(r,t){$(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let e=r.shape[r.shape.length-1],o=r.size/e,n;if(t!=null&&t0),h=r.shape.map(g=>g);h[r.shape.length-1]=t,n=Xe(r,f,h),e=t}else if(t!=null&&t>e){let f=r.shape.map(h=>h);f[r.shape.length-1]=t-e,n=bt([r,Gr(f)],r.shape.length-1),e=t}else n=r;let s=Ht(n),a=W(Er(n,s),[o,e]),i=fc(a),p=Math.floor(e/2)+1,u=ci(i),c=lu(i),l=li(u,[p,e-p],u.shape.length-1),m=li(c,[p,e-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var hc=N({rfft_:h6});function g6(r,t){let e=v(r,"a","squaredDifference"),o=v(t,"b","squaredDifference");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o},s={};return T.runKernel(Ns,n,s)}var qd=N({squaredDifference_:g6});function x6(r,t){let e=v(r,"x","squeeze","string_or_numeric");return W(e,JC(e.shape,t).newShape)}var gc=N({squeeze_:x6});function y6(r,t=0){let e=si(r,"tensors","stack","string_or_numeric");$(e.length>=1,()=>"Pass at least one tensor to tf.stack"),e.length>0&&$(t<=e[0].rank,()=>"Axis must be <= rank of the tensor");let o=e,n={axis:t};return T.runKernel(la,o,n)}var kr=N({stack_:y6});function b6(r,t=0){let o={x:v(r,"x","step")},n={alpha:t};return T.runKernel(So,o,n)}var jd=N({step_:b6});function C6(r,t,e,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,"x","stridedSlice","string_or_numeric")},l={begin:t,end:e,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ts,c,l)}var O1=N({stridedSlice_:C6});function w6(r){let e={x:v(r,"x","tan","float32")};return T.runKernel($s,e)}var M1=N({tan_:w6});function tr(r,t){io(r);let e=ir(r,t);if(e.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Sr(r,null,e,t)}function fu(r,t,e){if(io(r),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=ir(r,e);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Sr(r,t,o,e)}function Xd(r,t,e){if(io(r),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=ir(r,e);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Sr(r,t,o,e)}function L1(r,t,e){if(io(r),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=ir(r,e);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Sr(r,t,o,e)}function B1(r,t,e){if(io(r),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=ir(r,e);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Sr(r,t,o,e)}function z1(r,t,e){if(io(r),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=ir(r,e);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||o,Sr(r,t,o,e)}var hu={};qe(hu,{calculateShapes:()=>V1,validateInput:()=>xc,validateUpdateShape:()=>Yw});function Yw(r,t,e){let o=t.rank>1?t.shape[t.rank-1]:1,n=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(e.rank1?t.shape[o-1]:1,s=e.length,a=1;for(let l=n;l= 0 but got ${t}`);if(t>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${t}`);let s={x:o},a={k:t,sorted:e},[i,p]=T.runKernel(Rs,s,a);return{values:i,indices:p}}var U1=N({topk_:I6});function v6(r,t=0,e=1,o,n){if(wt(r),o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Zu(t,e,o,!0,n),a=me(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:e},n={axis:t},[s,a]=T.runKernel(Zi,o,n);return{values:s,indices:a}}var H1=N({unique_:k6});function N6(r,t,e){let o=v(r,"x","unsortedSegmentSum"),n=v(t,"segmentIds","unsortedSegmentSum","int32");$(qa(e),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:e};return T.runKernel(Ji,s,a)}var K1=N({unsortedSegmentSum_:N6});function T6(r,t=0){let e=v(r,"x","unstack","string_or_numeric");$(t>=-e.shape.length&&t`Axis = ${t} is not in [-${e.shape.length}, ${e.shape.length})`);let o={value:e},n={axis:t};return T.runKernel(wa,o,n)}var fo=N({unstack_:T6});function q1(r,t){return $l(r,t,"right")}function j1(r,t=!0,e,o){return T.makeVariable(r,t,e,o)}function Yd(r,t){let e=[];for(let s=0;s0,()=>"mask cannot be scalar"),yt(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()),$(o.rank===t.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${t}.`),t.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${t}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:t};return o.dtype==="complex64"?De(()=>{let a=ci(o),i=lu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),e&&(i=cr(i)),Er(a,i)}):T.runKernel(co,n,s)}var yc=N({transpose_:R6});function D6(r,t,e,o,n=!0){let s=v(r,"v","movingAverage"),a=v(t,"x","movingAverage"),i=v(e,"decay","movingAverage");Cw(s,a),$(Cr(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){$(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 A6=N({movingAverage_:D6});function F6(r,t,e){wt(e);let o=v(r,"indices","scatterND","int32"),n=v(t,"updates","scatterND");xc(n,o,e);let s={indices:o,updates:n},a={shape:e};return T.runKernel(ds,s,a)}var P6=N({scatterND_:F6});function X1(r,t,e,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(e.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${n}]`);if(t.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function M6(r,t,e,o=0){wt(e);let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(t,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);X1(n,s,e,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:e};return T.runKernel(ks,i,p)}var L6=N({sparseToDense_:M6});function B6(r,t){let e=v(t,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:e};return T.runKernel(kn,n)}var z6=N({gatherND_:B6});function Y1(r,t){if(t==null)return r.shape.slice();if(Cr(r.shape,t))return t;if(r.shape.length===t.length){let e=[];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.`),$(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return r instanceof ut?n.clone():n;let s=Y1(n,e),a=1-t,i=je(Sd(Ce(dc(s,0,1,"float32",o),a)),a);return se(n,i)}var W6=N({dropout_:V6});function Qw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Rl(r,t,e){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),yt(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>0&&e<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`);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;hZ1,depthwiseConv2d:()=>tN,matMul:()=>rN});function H6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(e.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?p.shape[3]:p.shape[1];$(u===e[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`),$(c===e[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`),Bt("conv2dDerFilter",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:e};return T.runKernel(Oi,l,m)}var Q1=N({conv2DBackpropFilter_:H6});function ep(r,t,e){if(e==null||e==="linear")return r;if(e==="relu")return se(r,jd(t));throw new Error(`Cannot compute gradient for fused activation ${e}.`)}function tp(r,t){let e=t,o=yd(r.shape,t.shape);return o.length>0&&(e=ot(e,o)),W(e,r.shape)}function rp(r,t,e,o){if(t==="linear")return r;if(t==="relu")return du(r);if(t==="elu")return Cd(r);if(t==="relu6")return Gd(r);if(t==="prelu")return Md(r,e);if(t==="leakyrelu")return kd(r,o);if(t==="sigmoid")return $a(r);throw new Error(`Unknown fused activation ${t}.`)}var op=(r,t)=>!(r>0)||t==="linear";function K6({x:r,filter:t,strides:e,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||"linear",op(T.state.gradientDepth,p)===!1){$(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=uu(r,t,e,o,n,s,a);return i!=null&&(_=Ce(_,i)),rp(_,p,u,c)}let l=v(r,"x","conv2d","float32"),m=v(t,"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]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Bt("fused conv2d",o,a);let h=n==="NHWC"?d.shape[3]:d.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(xr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let g=Hu(d.shape,m.shape,e,s,o,a),x;i!=null&&(x=v(i,"bias","fused conv2d"),[x]=Oe(x,l),n==="NHWC"?rt(g.outShape,x.shape):($(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}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,"prelu weights","fused conv2d")}let C=(_,E)=>{$(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=E,M=ep(_,P,p);$(Gu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=xd(D.shape,M,R,e,o),B=Q1(D,M,R.shape,e,o),z=[L,B];if(O!=null){let U=tp(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?vr((E,R,D)=>{let P=T.runKernel(vo,S,k);return D([R,E,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):vr((E,R,D,P)=>{let O=T.runKernel(vo,S,k);return P([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var Z1=N({fusedConv2d_:K6});function q6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:e};return T.runKernel(Mi,u,c)}var J1=N({depthwiseConv2dNativeBackpropFilter_:q6});function j6(r,t,e,o,n,s=[1,1],a){let i=t,p=!1;t.rank===3&&(p=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:e},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Li,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var eN=N({depthwiseConv2dNativeBackpropInput_:j6});function X6({x:r,filter:t,strides:e,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(op(T.state.gradientDepth,p)===!1){let k=lc(r,t,e,o,n,s,a);return i!=null&&(k=Ce(k,i)),rp(k,p,u,c)}let l=v(r,"x","depthwiseConv2d","float32"),m=v(t,"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]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(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]),$(xr(e,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),Bt("fused depthwiseConv2d",o,a);let h=Hu(d.shape,m.shape,e,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,_)=>{$(Gu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,P]=_,O=ep(k,D,p),M=eN(R.shape,O,E,e,o,s,a),L=J1(R,O,E.shape,e,o,s,a);if(P!=null){let B=tp(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?vr((_,E,R)=>{let D=T.runKernel(ko,C,S);return R([E,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):vr((_,E,R,D)=>{let P=T.runKernel(ko,C,S);return D([E,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var tN=N({fusedDepthwiseConv2d_:X6});function Y6({a:r,b:t,transposeA:e=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(op(T.state.gradientDepth,s)===!1){let O=Ze(r,t,e,o);return n!=null&&(O=Ce(O,n)),rp(O,s,a,i)}let p=v(r,"a","fused matMul"),u=v(t,"b","fused matMul");[p,u]=Oe(p,u);let c=e?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=e?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=He(f),x=He(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${e} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=e?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 E;a!=null&&(E=v(a,"prelu weights","fused matMul"));let R=(O,M)=>{let[L,B,z,U]=M,j=ep(W(O,z.shape),z,s),q,Y;if(!e&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!e&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):e&&!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=tp(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:E},P={transposeA:e,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?vr((M,L,B)=>{let z=T.runKernel(Io,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):vr((M,L,B,z)=>{let U=T.runKernel(Io,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var rN=N({fusedMatMul_:Y6});function Q6(r){return Rl(r,.54,.46)}var oN=N({hammingWindow_:Q6});function Z6(r){return Rl(r,.5,.5)}var Zd=N({hannWindow_:Z6});function J6(r,t,e,o=!1,n=0){let s=0,a=[];for(;s+t<=r.size;)a.push(Xe(r,s,t)),s+=e;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(ln,c,l)}var sN=N({cropAndResize_:tj});function rj(r){let t=v(r,"image","flipLeftRight","float32");$(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let e={image:t};return T.runKernel(wn,e,{})}var aN=N({flipLeftRight_:rj});function oj(r){let t=v(r,"image","grayscaleToRGB"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(t.rank);return n.fill(1,0,e),n[e]=3,cu(t,n)}var iN=N({grayscaleToRGB_:oj});function nj(r){let t=v(r,"image","RGBToGrayscale"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=t.dtype,s=We(t,"float32"),a=tr([.2989,.587,.114]),i;switch(t.rank){case 2:i=pu("ij,j->i",s,a);break;case 3:i=pu("ijk,k->ij",s,a);break;case 4:i=pu("ijkl,l->ijk",s,a);break;case 5:i=pu("ijklm,m->ijkl",s,a);break;case 6:i=pu("ijklmn,n->ijklm",s,a);break;default:throw new Error("Not a valid tensor rank.")}return i=Ms(i,-1),We(i,n)}var uN=N({rgbToGrayscale_:nj});function sj(r,t,e=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:t,fillValue:e,center:o};return T.runKernel(As,s,a)}var pN=N({rotateWithOffset_:sj});function Eo(r,t,e,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return e=Math.min(e,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(t.rank===1,()=>"scores must be a 1D tensor"),$(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function aj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(t,"scores","nonMaxSuppression","float32"),i=Eo(s,a,e,o,n);e=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:e,iouThreshold:o,scoreThreshold:n};return T.runKernel(Zn,{boxes:s,scores:a},p)}var cN=N({nonMaxSuppression_:aj});function lN(r,t,e){let o=ij(r,t,e),n=o<0?-(o+1):o;r.splice(n,0,t)}function ij(r,t,e){return pj(r,t,e||uj)}function uj(r,t){return r>t?1:r>>1);let i=e(t,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function ef(r,t,e,o,n){return Jw(r,t,e,o,n,0)}function tf(r,t,e,o,n,s){return Jw(r,t,e,o,n,0,!1,s,!0)}function rf(r,t,e,o,n,s){return Jw(r,t,e,o,n,s,!0)}function Jw(r,t,e,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(mN);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 _=cj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*lj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&lN(u,g,mN))}let d=l.length,f=e-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 cj(r,t,e){let o=r.subarray(t*4,t*4+4),n=r.subarray(e*4,e*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 lj(r,t,e){let o=Math.exp(t*e*e);return e<=r?o:0}function mN(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}async function mj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(t,"scores","nonMaxSuppressionAsync"),i=Eo(s,a,e,o,n);e=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}=ef(u,c,e,o,n);return s!==r&&s.dispose(),a!==t&&a.dispose(),tr(l,"int32")}var dN=mj;function dj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(t,"scores","nonMaxSuppression"),p=Eo(a,i,e,o,n,s);e=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Jn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var fN=N({nonMaxSuppressionWithScore_:dj});async function fj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(t,"scores","nonMaxSuppressionAsync"),p=Eo(a,i,e,o,n,s);e=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}=rf(c,l,e,o,n,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:tr(m,"int32"),selectedScores:tr(d)}}var hN=fj;function hj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(t,"scores","nonMaxSuppression"),p=Eo(a,i,e,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(Za,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var gN=N({nonMaxSuppressionPadded_:hj});async function gj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(t,"scores","nonMaxSuppressionAsync"),p=Eo(a,i,e,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}=tf(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:tr(f,"int32"),validOutputs:ke(h,"int32")}}var xN=gj;function xj(r,t,e=!1,o=!1){let n=v(r,"images","resizeBilinear");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(us,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var yN=N({resizeBilinear_:xj});function yj(r,t,e=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),$(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var bN=N({resizeNearestNeighbor_:yj});function bj(r,t="binary",e=!1,o=.5){let n=v(r,"image","threshold"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(tr([o]),255),c,l,m,d;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),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(t==="otsu"){let g=gd(We(Hd(d),"int32"),ur([]),256);u=Cj(g,p)}let f=e?mc(d,u):qu(d,u);return We(se(f,255),"int32")}function Cj(r,t){let e=tr([-1]),o=tr([0]),n=tr([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:e,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Ds,p,u)}var wN=N({transform_:wj});function Sj(r,t,e){let o=v(r,"a","bandPart");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof t=="number"?($(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),$(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),i=v(t<0?s:t,"numLower","bandPart")):($(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),i=lo(_l(t,0),s,Yu(t,s))),typeof e=="number"?($(e%1===0,()=>`bandPart(): numUpper must be an integer, got ${e}.`),$(e<=a,()=>`bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`),p=v(e<0?a:e,"numUpper","bandPart")):($(e.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),p=lo(_l(e,0),a,Yu(e,a)));let u=W(mu(0,s,1,"int32"),[-1,1]),c=mu(0,a,1,"int32"),l=Te(u,c),m=ju(mc(l,i),vd(l,cr(p))),d=Gr([s,a],o.dtype);return W(kr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var SN=N({bandPart_:Sj});function Ij(r){let t;if(Array.isArray(r)){t=!1,$(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else t=!0,r=li(r,r.shape[0],0).map(n=>gc(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let e=[],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 vN(r,t);{let e=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=vN(p,t);n.push(u),s.push(c)});let a=W(kr(n,0),r.shape),i=W(kr(s,0),r.shape);return[a,i]}}function vN(r,t=!1){return T.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let e=r.shape[0],o=r.shape[1],n=wd(e),s=Ur(r),a=fu([[1]],[1,1]),i=Ur(a),p=e>=o?o:e;for(let u=0;u{let d=Xe(s,[u,u],[e-u,1]),f=Ku(d),h=Xe(s,[u,u],[1,1]),g=lo(qu(h,0),fu([[-1]]),fu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=bt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=cr(je(Ze(g,x),f)),S=Xe(s,[u,0],[e-u,o]),k=se(C,i),_=yc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=bt([Xe(s,[0,0],[u,o]),D],0)}let E=yc(k),R=Xe(n,[0,u],[e,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),E));else{let D=Te(R,Ze(Ze(R,i),E));n=bt([Xe(n,[0,0],[e,u]),D],1)}return[i,s,n]}),Mt([c,l,m])}return!t&&e>o&&(n=Xe(n,[0,0],[e,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var kN=N({qr_:vj});var Rt;(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"})(Rt||(Rt={}));function kj(r,t,e=Rt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;t!=null&&(n=v(t,"weights","computeWeightedLoss"));let s=n==null?o:se(o,n);if(e===Rt.NONE)return s;if(e===Rt.SUM)return ot(s);if(e===Rt.MEAN){if(n==null)return Xu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(e===Rt.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=We(ot(Pd(a,ke(0))),"float32");return je(ot(s),i)}}throw Error(`Unknown reduction: ${e}`)}var lr=N({computeWeightedLoss_:kj});function Nj(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(t,"predictions","absoluteDifference"),a=null;e!=null&&(a=v(e,"weights","absoluteDifference")),yt(n.shape,s.shape,"Error in absoluteDifference: ");let i=Jt(Te(n,s));return lr(i,a,o)}var NN=N({absoluteDifference_:Nj});function Tj(r,t,e,o,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(t,"predictions","cosineDistance"),i=null;o!=null&&(i=v(o,"weights","cosineDistance")),yt(s.shape,a.shape,"Error in cosineDistance: ");let p=ke(1),u=Te(p,ot(se(s,a),e,!0));return lr(u,i,n)}var TN=N({cosineDistance_:Tj});function _j(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(t,"predictions","hingeLoss"),a=null;e!=null&&(a=v(e,"weights","hingeLoss")),yt(n.shape,s.shape,"Error in hingeLoss: ");let i=ke(1);n=Te(se(ke(2),n),i);let p=du(Te(i,se(n,s)));return lr(p,a,o)}var _N=N({hingeLoss_:_j});function $j(r,t,e,o=1,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(t,"predictions","huberLoss"),i=null;e!=null&&(i=v(e,"weights","huberLoss")),yt(s.shape,a.shape,"Error in huberLoss: ");let p=ke(o),u=Jt(Te(a,s)),c=Yu(u,p),l=Te(u,c),m=Ce(se(ke(.5),er(c)),se(p,l));return lr(m,i,n)}var $N=N({huberLoss_:$j});function Ej(r,t,e,o=1e-7,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(t,"predictions","logLoss"),i=null;e!=null&&(i=v(e,"weights","logLoss")),yt(s.shape,a.shape,"Error in logLoss: ");let p=ke(1),u=ke(o),c=cr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return lr(m,i,n)}var EN=N({logLoss_:Ej});function Rj(r,t,e,o=Rt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(t,"predictions","meanSquaredError"),a=null;e!=null&&(a=v(e,"weights","meanSquaredError")),yt(n.shape,s.shape,"Error in meanSquaredError: ");let i=qd(n,s);return lr(i,a,o)}var RN=N({meanSquaredError_:Rj});function Dj(r,t){let e=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(t,"logits","sigmoidCrossEntropyWithLogits");yt(e.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=du(o),s=se(o,e),a=Nd($o(cr(Jt(o))));return Ce(Te(n,s),a)}function Aj(r,t,e,o=0,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(t,"logits","sigmoidCrossEntropy"),i=null;if(e!=null&&(i=v(e,"weights","sigmoidCrossEntropy")),yt(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=Dj(s,a);return lr(p,i,n)}var DN=N({sigmoidCrossEntropy_:Aj});function Fj(r,t,e=-1){if(e===-1&&(e=t.rank-1),e!==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 ${e}`);return vr((n,s,a)=>{let p=$d(s,[e],!0),u=Te(We(s,"float32"),p);a([n,u]);let c=cr(se(u,n));return{value:ot(c,[e]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[e]);return[se(W(d,x),Te(We(h,"float32"),$o(g))),se(W(d,x),Te($o(g),We(h,"float32")))]}}})(r,t)}function Pj(r,t,e,o=0,n=Rt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(t,"logits","softmaxCrossEntropy"),i=null;if(e!=null&&(i=v(e,"weights","softmaxCrossEntropy")),yt(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=Fj(s,a);return lr(p,i,n)}var AN=N({softmaxCrossEntropy_:Pj});function Oj(r,t,e,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(t,"values","sparseFillEmptyRows"),a=v(e,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape - ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(ji,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var FN=N({sparseFillEmptyRows_:Oj});function Mj(r,t,e){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(t,"inputShape","sparseReshape","int32"),s=v(e,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape - ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(ti,a);return{outputIndices:i[0],outputShape:i[1]}}var PN=N({sparseReshape_:Mj});function Lj(r,t,e){let o=v(r,"data","sparseSegmentMean"),n=v(t,"indices","sparseSegmentMean","int32"),s=v(e,"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 +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function Dq(r,t){r().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function Aq(r,t){let e=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return zo(r)||zo(r[0])||zo(t)||zo(t[0])?jw(r,e,(o,n)=>o==n):jw(r,t,(o,n)=>Xw(o,n,0))}function f1(r,t,e){if(e==null&&(e=Md()),!Xw(r,t,e))throw new Error(`Numbers differ: actual === ${r}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Xw(r,t,e){return!isFinite(r)&&!isFinite(t)?!0:!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}function Fq(r,t,e){for(let o=0;oe)throw new Error(`Value out of range:${r[o]} low: ${t}, high: ${e}`)}function Pq(r,t){let e=new Float32Array(r),o=new Float32Array(t);if(e.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${e.length}`);for(let n=0;n{t.addEventListener("loadeddata",o=>e(t)),t.load()})}async function Mq(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(t=>{r.requestVideoFrameCallback(t)})}var Hu=class{constructor(t,e,o,n,s){this.mean=t,this.stdDev=e,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=zd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let t,e,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);t=this.mean+this.stdDev*n*i,e=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(t))&&(o=!0)}return(!this.truncated||this.isValidTruncated(e))&&(this.nextVal=this.convertValue(e)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}},Ld=class{constructor(t,e,o,n){this.alpha=t,this.beta=1/e,this.dtype=o;let s=n||Math.random();this.randu=zd.alea(s.toString()),this.randn=new Hu(0,1,o,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let t,e,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,t=n*n,e=1-.331*t*t,o=.5*t+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=t,this.range=e-t,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 ${t} - ${e} <= 1 and dtype is not float`);this.random=zd.alea(n)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Lq(r,t,e=1,o="float32",n){if(Ct(r),e==null&&(e=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new Ld(t,e,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),lo(t,0)}var w1=N({reverse1d_:jq});function Xq(r,t){let e=v(r,"x","reverse");return $(e.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`),lo(e,t)}var S1=N({reverse2d_:Xq});function Yq(r,t){let e=v(r,"x","reverse");return $(e.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`),lo(e,t)}var I1=N({reverse3d_:Yq});function Qq(r,t){let e=v(r,"x","reverse");return $(e.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`),lo(e,t)}var v1=N({reverse4d_:Qq});function Zq(r){let e={x:v(r,"x","round")};return T.runKernel(cs,e)}var Ud=N({round_:Zq});function Jq(r){let e={x:v(r,"x","rsqrt","float32")};return T.runKernel(ls,e)}var k1=N({rsqrt_:Jq});function e6(r){let e={x:v(r,"x","selu")};return T.runKernel(hs,e)}var N1=N({selu_:e6});function t6(r,t,e,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(t,"depthwiseFilter","separableConv2d"),u=v(e,"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");$(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(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=oc(c,p,o,n,a,s),g=nu(f,u,1,"valid",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var T1=N({separableConv2d_:t6});async function r6(r,t){let e=v(r,"x","setdiff1d"),o=v(t,"y","setdiff1d");$(e.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${e.dtype}) and y (${o.dtype}).`),$(e.rank===1,()=>`x should be 1D tensor, but got x (${e.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await e.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,[t],[e])}var D1=N({slice1d_:a6});function i6(r,t,e){let o=v(r,"x","slice2d");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var A1=N({slice2d_:i6});function u6(r,t,e){let o=v(r,"x","slice3d");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var F1=N({slice3d_:u6});function p6(r,t,e){let o=v(r,"x","slice4d");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,t,e)}var P1=N({slice4d_:p6});function c6(r,t=-1){let e=v(r,"logits","softmax","float32");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t}`);let o={logits:e},n={dim:t};return T.runKernel(Is,o,n)}var O1=N({softmax_:c6});function l6(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Bi,t)}var ac=N({fft_:l6});function m6(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(zi,t)}var Ku=N({ifft_:m6});function d6(r){let t=r.shape[r.shape.length-1],e=r.size/t,o;if(t<=2){let n=W(r,[e,t]);o=Ku(n)}else{let n=[e,2*(t-1)],s=W(pi(r),[e,t]),a=W(iu(r),[e,t]),i=lo(Xe(s,[0,1],[e,t-2]),1),p=se(lo(Xe(a,[0,1],[e,t-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W($r(u,c),[n[0],n[1]]);o=Ku(l)}if(o=pi(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 Gd=N({irfft_:d6});function f6(r,t,e=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:t,axis:e};return T.runKernel(xa,n,s)}var ci=N({split_:f6});function h6(r,t){$(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let e=r.shape[r.shape.length-1],o=r.size/e,n;if(t!=null&&t0),h=r.shape.map(g=>g);h[r.shape.length-1]=t,n=Xe(r,f,h),e=t}else if(t!=null&&t>e){let f=r.shape.map(h=>h);f[r.shape.length-1]=t-e,n=yt([r,Ur(f)],r.shape.length-1),e=t}else n=r;let s=Gt(n),a=W($r(n,s),[o,e]),i=ac(a),p=Math.floor(e/2)+1,u=pi(i),c=iu(i),l=ci(u,[p,e-p],u.shape.length-1),m=ci(c,[p,e-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W($r(l[0],m[0]),d)}var ic=N({rfft_:h6});function g6(r,t){let e=v(r,"a","squaredDifference"),o=v(t,"b","squaredDifference");[e,o]=Oe(e,o),rt(e.shape,o.shape);let n={a:e,b:o},s={};return T.runKernel(ks,n,s)}var Hd=N({squaredDifference_:g6});function x6(r,t){let e=v(r,"x","squeeze","string_or_numeric");return W(e,ZC(e.shape,t).newShape)}var uc=N({squeeze_:x6});function y6(r,t=0){let e=ni(r,"tensors","stack","string_or_numeric");$(e.length>=1,()=>"Pass at least one tensor to tf.stack"),e.length>0&&$(t<=e[0].rank,()=>"Axis must be <= rank of the tensor");let o=e,n={axis:t};return T.runKernel(la,o,n)}var vr=N({stack_:y6});function b6(r,t=0){let o={x:v(r,"x","step")},n={alpha:t};return T.runKernel(wo,o,n)}var Kd=N({step_:b6});function C6(r,t,e,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,"x","stridedSlice","string_or_numeric")},l={begin:t,end:e,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ns,c,l)}var M1=N({stridedSlice_:C6});function w6(r){let e={x:v(r,"x","tan","float32")};return T.runKernel(_s,e)}var L1=N({tan_:w6});function Jt(r,t){ao(r);let e=sr(r,t);if(e.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return wr(r,null,e,t)}function cu(r,t,e){if(ao(r),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=sr(r,e);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return wr(r,t,o,e)}function qd(r,t,e){if(ao(r),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=sr(r,e);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return wr(r,t,o,e)}function B1(r,t,e){if(ao(r),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=sr(r,e);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return wr(r,t,o,e)}function z1(r,t,e){if(ao(r),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=sr(r,e);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return wr(r,t,o,e)}function V1(r,t,e){if(ao(r),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=sr(r,e);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||o,wr(r,t,o,e)}var lu={};qe(lu,{calculateShapes:()=>W1,validateInput:()=>pc,validateUpdateShape:()=>Yw});function Yw(r,t,e){let o=t.rank>1?t.shape[t.rank-1]:1,n=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(e.rank1?t.shape[o-1]:1,s=e.length,a=1;for(let l=n;l= 0 but got ${t}`);if(t>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${t}`);let s={x:o},a={k:t,sorted:e},[i,p]=T.runKernel(Es,s,a);return{values:i,indices:p}}var G1=N({topk_:I6});function v6(r,t=0,e=1,o,n){if(Ct(r),o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Hu(t,e,o,!0,n),a=me(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:e},n={axis:t},[s,a]=T.runKernel(Xi,o,n);return{values:s,indices:a}}var K1=N({unique_:k6});function N6(r,t,e){let o=v(r,"x","unsortedSegmentSum"),n=v(t,"segmentIds","unsortedSegmentSum","int32");$(Ka(e),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:e};return T.runKernel(Yi,s,a)}var q1=N({unsortedSegmentSum_:N6});function T6(r,t=0){let e=v(r,"x","unstack","string_or_numeric");$(t>=-e.shape.length&&t`Axis = ${t} is not in [-${e.shape.length}, ${e.shape.length})`);let o={value:e},n={axis:t};return T.runKernel(wa,o,n)}var mo=N({unstack_:T6});function j1(r,t){return Nl(r,t,"right")}function X1(r,t=!0,e,o){return T.makeVariable(r,t,e,o)}function jd(r,t){let e=[];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()),$(o.rank===t.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${t}.`),t.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${t}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:t};return o.dtype==="complex64"?De(()=>{let a=pi(o),i=iu(o);return a=T.runKernel(po,{x:a},s),i=T.runKernel(po,{x:i},s),e&&(i=pr(i)),$r(a,i)}):T.runKernel(po,n,s)}var cc=N({transpose_:R6});function D6(r,t,e,o,n=!0){let s=v(r,"v","movingAverage"),a=v(t,"x","movingAverage"),i=v(e,"decay","movingAverage");Cw(s,a),$(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){$(o!=null,()=>"When using zeroDebias: true, step is required.");let l=v(o,"step","movingAverage");c=je(c,Te(p,ii(i,l)))}return Ce(s,c)}var A6=N({movingAverage_:D6});function F6(r,t,e){Ct(e);let o=v(r,"indices","scatterND","int32"),n=v(t,"updates","scatterND");pc(n,o,e);let s={indices:o,updates:n},a={shape:e};return T.runKernel(ms,s,a)}var P6=N({scatterND_:F6});function Y1(r,t,e,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(e.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`);let a=t.size;if(!(t.rank===0||t.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${n}]`);if(t.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function M6(r,t,e,o=0){Ct(e);let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(t,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);Y1(n,s,e,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:e};return T.runKernel(vs,i,p)}var L6=N({sparseToDense_:M6});function B6(r,t){let e=v(t,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:e};return T.runKernel(vn,n)}var z6=N({gatherND_:B6});function Q1(r,t){if(t==null)return r.shape.slice();if(br(r.shape,t))return t;if(r.shape.length===t.length){let e=[];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.`),$(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return r instanceof mt?n.clone():n;let s=Q1(n,e),a=1-t,i=je(Cd(Ce(sc(s,0,1,"float32",o),a)),a);return se(n,i)}var W6=N({dropout_:V6});function Qw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function _l(r,t,e){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),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>0&&e<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=JC("bool",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hJ1,depthwiseConv2d:()=>rN,matMul:()=>oN});function H6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(e.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?p.shape[3]:p.shape[1];$(u===e[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${e[2]}.`),$(c===e[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`),Lt("conv2dDerFilter",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:e};return T.runKernel(Ai,l,m)}var Z1=N({conv2DBackpropFilter_:H6});function qu(r,t,e){if(e==null||e==="linear")return r;if(e==="relu")return se(r,Kd(t));throw new Error(`Cannot compute gradient for fused activation ${e}.`)}function ju(r,t){let e=t,o=gd(r.shape,t.shape);return o.length>0&&(e=ot(e,o)),W(e,r.shape)}function Xu(r,t,e,o){if(t==="linear")return r;if(t==="relu")return pu(r);if(t==="elu")return yd(r);if(t==="relu6")return Wd(r);if(t==="prelu")return Pd(r,e);if(t==="leakyrelu")return Id(r,o);if(t==="sigmoid")return $a(r);throw new Error(`Unknown fused activation ${t}.`)}var Yu=(r,t)=>!(r>0)||t==="linear";function K6({x:r,filter:t,strides:e,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||"linear",Yu(T.state.gradientDepth,p)===!1){$(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=nu(r,t,e,o,n,s,a);return i!=null&&(_=Ce(_,i)),Xu(_,p,u,c)}let l=v(r,"x","conv2d","float32"),m=v(t,"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]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(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];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(gr(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let g=Lu(d.shape,m.shape,e,s,o,a),x;i!=null&&(x=v(i,"bias","fused conv2d"),[x]=Oe(x,l),n==="NHWC"?rt(g.outShape,x.shape):($(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}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if($(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)$(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,"prelu weights","fused conv2d")}let C=(_,E)=>{$(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=E,M=qu(_,P,p);$(Mu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=hd(D.shape,M,R,e,o),B=Z1(D,M,R.shape,e,o),z=[L,B];if(O!=null){let U=ju(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((E,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,E,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir((E,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var J1=N({fusedConv2d_:K6});function q6(r,t,e,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=t;p.rank===3&&(p=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:e};return T.runKernel(Fi,u,c)}var eN=N({depthwiseConv2dNativeBackpropFilter_:q6});function j6(r,t,e,o,n,s=[1,1],a){let i=t,p=!1;t.rank===3&&(p=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:e},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Pi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var tN=N({depthwiseConv2dNativeBackpropInput_:j6});function X6({x:r,filter:t,strides:e,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(Yu(T.state.gradientDepth,p)===!1){let k=oc(r,t,e,o,n,s,a);return i!=null&&(k=Ce(k,i)),Xu(k,p,u,c)}let l=v(r,"x","depthwiseConv2d","float32"),m=v(t,"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]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(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]),$(gr(e,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),Lt("fused depthwiseConv2d",o,a);let h=Lu(d.shape,m.shape,e,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,_)=>{$(Mu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,P]=_,O=qu(k,D,p),M=tN(R.shape,O,E,e,o,s,a),L=eN(R,O,E.shape,e,o,s,a);if(P!=null){let B=ju(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:e,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,E,R)=>{let D=T.runKernel(vo,C,S);return R([E,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,E,R,D)=>{let P=T.runKernel(vo,C,S);return D([E,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var rN=N({fusedDepthwiseConv2d_:X6});function Y6({a:r,b:t,transposeA:e=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Yu(T.state.gradientDepth,s)===!1){let O=Ze(r,t,e,o);return n!=null&&(O=Ce(O,n)),Xu(O,s,a,i)}let p=v(r,"a","fused matMul"),u=v(t,"b","fused matMul");[p,u]=Oe(p,u);let c=e?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=e?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=He(f),x=He(h);$(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${e} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=e?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 E;a!=null&&(E=v(a,"prelu weights","fused matMul"));let R=(O,M)=>{let[L,B,z,U]=M,j=qu(W(O,z.shape),z,s),q,Y;if(!e&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!e&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):e&&!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=ju(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:E},P={transposeA:e,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 oN=N({fusedMatMul_:Y6});function Q6(r){return _l(r,.54,.46)}var nN=N({hammingWindow_:Q6});function Z6(r){return _l(r,.5,.5)}var Yd=N({hannWindow_:Z6});function J6(r,t,e,o=!1,n=0){let s=0,a=[];for(;s+t<=r.size;)a.push(Xe(r,s,t)),s+=e;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(cn,c,l)}var aN=N({cropAndResize_:tj});function rj(r){let t=v(r,"image","flipLeftRight","float32");$(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let e={image:t};return T.runKernel(Cn,e,{})}var iN=N({flipLeftRight_:rj});function oj(r){let t=v(r,"image","grayscaleToRGB"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(t.rank);return n.fill(1,0,e),n[e]=3,au(t,n)}var uN=N({grayscaleToRGB_:oj});function nj(r){let t=v(r,"image","RGBToGrayscale"),e=t.rank-1,o=t.shape[e];$(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=t.dtype,s=We(t,"float32"),a=Jt([.2989,.587,.114]),i;switch(t.rank){case 2:i=su("ij,j->i",s,a);break;case 3:i=su("ijk,k->ij",s,a);break;case 4:i=su("ijkl,l->ijk",s,a);break;case 5:i=su("ijklm,m->ijkl",s,a);break;case 6:i=su("ijklmn,n->ijklm",s,a);break;default:throw new Error("Not a valid tensor rank.")}return i=Ms(i,-1),We(i,n)}var pN=N({rgbToGrayscale_:nj});function sj(r,t,e=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:t,fillValue:e,center:o};return T.runKernel(Ds,s,a)}var cN=N({rotateWithOffset_:sj});function $o(r,t,e,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return e=Math.min(e,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(t.rank===1,()=>"scores must be a 1D tensor"),$(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function aj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(t,"scores","nonMaxSuppression","float32"),i=$o(s,a,e,o,n);e=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:e,iouThreshold:o,scoreThreshold:n};return T.runKernel(Qn,{boxes:s,scores:a},p)}var lN=N({nonMaxSuppression_:aj});function mN(r,t,e){let o=ij(r,t,e),n=o<0?-(o+1):o;r.splice(n,0,t)}function ij(r,t,e){return pj(r,t,e||uj)}function uj(r,t){return r>t?1:r>>1);let i=e(t,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Zd(r,t,e,o,n){return Jw(r,t,e,o,n,0)}function Jd(r,t,e,o,n,s){return Jw(r,t,e,o,n,0,!1,s,!0)}function ef(r,t,e,o,n,s){return Jw(r,t,e,o,n,s,!0)}function Jw(r,t,e,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(dN);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 _=cj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*lj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&mN(u,g,dN))}let d=l.length,f=e-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 cj(r,t,e){let o=r.subarray(t*4,t*4+4),n=r.subarray(e*4,e*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 lj(r,t,e){let o=Math.exp(t*e*e);return e<=r?o:0}function dN(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}async function mj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(t,"scores","nonMaxSuppressionAsync"),i=$o(s,a,e,o,n);e=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}=Zd(u,c,e,o,n);return s!==r&&s.dispose(),a!==t&&a.dispose(),Jt(l,"int32")}var fN=mj;function dj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(t,"scores","nonMaxSuppression"),p=$o(a,i,e,o,n,s);e=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:e,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var hN=N({nonMaxSuppressionWithScore_:dj});async function fj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(t,"scores","nonMaxSuppressionAsync"),p=$o(a,i,e,o,n,s);e=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}=ef(c,l,e,o,n,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Jt(m,"int32"),selectedScores:Jt(d)}}var gN=fj;function hj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(t,"scores","nonMaxSuppression"),p=$o(a,i,e,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 xN=N({nonMaxSuppressionPadded_:hj});async function gj(r,t,e,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(t,"scores","nonMaxSuppressionAsync"),p=$o(a,i,e,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}=Jd(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==t&&i.dispose(),{selectedIndices:Jt(f,"int32"),validOutputs:ke(h,"int32")}}var yN=gj;function xj(r,t,e=!1,o=!1){let n=v(r,"images","resizeBilinear");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var bN=N({resizeBilinear_:xj});function yj(r,t,e=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),$(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),$(o===!1||e===!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[]=t,i={images:s},p={alignCorners:e,halfPixelCenters:o,size:t},u=T.runKernel(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var CN=N({resizeNearestNeighbor_:yj});function bj(r,t="binary",e=!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($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),n.shape[2]===3){[c,l,m]=ci(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(t==="otsu"){let g=fd(We(Ud(d),"int32"),ar([]),256);u=Cj(g,p)}let f=e?nc(d,u):zu(d,u);return We(se(f,255),"int32")}function Cj(r,t){let e=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}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:e,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Rs,p,u)}var SN=N({transform_:wj});function Sj(r,t,e){let o=v(r,"a","bandPart");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof t=="number"?($(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),$(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),i=v(t<0?s:t,"numLower","bandPart")):($(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),i=co(kl(t,0),s,Uu(t,s))),typeof e=="number"?($(e%1===0,()=>`bandPart(): numUpper must be an integer, got ${e}.`),$(e<=a,()=>`bandPart(): numUpper (${e}) must not be greater than the number of columns (${a}).`),p=v(e<0?a:e,"numUpper","bandPart")):($(e.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),p=co(kl(e,0),a,Uu(e,a)));let u=W(uu(0,s,1,"int32"),[-1,1]),c=uu(0,a,1,"int32"),l=Te(u,c),m=Vu(nc(l,i),Sd(l,pr(p))),d=Ur([s,a],o.dtype);return W(vr(mo(W(o,[-1,s,a])).map(f=>co(m,f,d))),n)}var IN=N({bandPart_:Sj});function Ij(r){let t;if(Array.isArray(r)){t=!1,$(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else t=!0,r=ci(r,r.shape[0],0).map(n=>uc(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let e=[],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 kN(r,t);{let e=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=mo(W(r,[e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=kN(p,t);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 kN(r,t=!1){return T.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let e=r.shape[0],o=r.shape[1],n=bd(e),s=Wr(r),a=cu([[1]],[1,1]),i=Wr(a),p=e>=o?o:e;for(let u=0;u{let d=Xe(s,[u,u],[e-u,1]),f=Bu(d),h=Xe(s,[u,u],[1,1]),g=co(zu(h,0),cu([[-1]]),cu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Wr(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],[e-u,o]),k=se(C,i),_=cc(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 E=cc(k),R=Xe(n,[0,u],[e,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),E));else{let D=Te(R,Ze(Ze(R,i),E));n=yt([Xe(n,[0,0],[e,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!t&&e>o&&(n=Xe(n,[0,0],[e,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var NN=N({qr_:vj});var Et;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Et||(Et={}));function kj(r,t,e=Et.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;t!=null&&(n=v(t,"weights","computeWeightedLoss"));let s=n==null?o:se(o,n);if(e===Et.NONE)return s;if(e===Et.SUM)return ot(s);if(e===Et.MEAN){if(n==null)return Wu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(e===Et.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=We(ot(Ad(a,ke(0))),"float32");return je(ot(s),i)}}throw Error(`Unknown reduction: ${e}`)}var cr=N({computeWeightedLoss_:kj});function Nj(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(t,"predictions","absoluteDifference"),a=null;e!=null&&(a=v(e,"weights","absoluteDifference")),xt(n.shape,s.shape,"Error in absoluteDifference: ");let i=Qt(Te(n,s));return cr(i,a,o)}var TN=N({absoluteDifference_:Nj});function Tj(r,t,e,o,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(t,"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),e,!0));return cr(u,i,n)}var _N=N({cosineDistance_:Tj});function _j(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(t,"predictions","hingeLoss"),a=null;e!=null&&(a=v(e,"weights","hingeLoss")),xt(n.shape,s.shape,"Error in hingeLoss: ");let i=ke(1);n=Te(se(ke(2),n),i);let p=pu(Te(i,se(n,s)));return cr(p,a,o)}var $N=N({hingeLoss_:_j});function $j(r,t,e,o=1,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(t,"predictions","huberLoss"),i=null;e!=null&&(i=v(e,"weights","huberLoss")),xt(s.shape,a.shape,"Error in huberLoss: ");let p=ke(o),u=Qt(Te(a,s)),c=Uu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var EN=N({huberLoss_:$j});function Ej(r,t,e,o=1e-7,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(t,"predictions","logLoss"),i=null;e!=null&&(i=v(e,"weights","logLoss")),xt(s.shape,a.shape,"Error in logLoss: ");let p=ke(1),u=ke(o),c=pr(se(s,ui(Ce(a,u)))),l=se(Te(p,s),ui(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var RN=N({logLoss_:Ej});function Rj(r,t,e,o=Et.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(t,"predictions","meanSquaredError"),a=null;e!=null&&(a=v(e,"weights","meanSquaredError")),xt(n.shape,s.shape,"Error in meanSquaredError: ");let i=Hd(n,s);return cr(i,a,o)}var DN=N({meanSquaredError_:Rj});function Dj(r,t){let e=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(t,"logits","sigmoidCrossEntropyWithLogits");xt(e.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=pu(o),s=se(o,e),a=vd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Aj(r,t,e,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(t,"logits","sigmoidCrossEntropy"),i=null;if(e!=null&&(i=v(e,"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=Dj(s,a);return cr(p,i,n)}var AN=N({sigmoidCrossEntropy_:Aj});function Fj(r,t,e=-1){if(e===-1&&(e=t.rank-1),e!==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 ${e}`);return Ir((n,s,a)=>{let p=Td(s,[e],!0),u=Te(We(s,"float32"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[e]),gradFunc:(d,f)=>{let[h,g]=f,x=ai(d.shape,[e]);return[se(W(d,x),Te(We(h,"float32"),_o(g))),se(W(d,x),Te(_o(g),We(h,"float32")))]}}})(r,t)}function Pj(r,t,e,o=0,n=Et.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(t,"logits","softmaxCrossEntropy"),i=null;if(e!=null&&(i=v(e,"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=Fj(s,a);return cr(p,i,n)}var FN=N({softmaxCrossEntropy_:Pj});function Oj(r,t,e,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(t,"values","sparseFillEmptyRows"),a=v(e,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape + ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(Hi,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var PN=N({sparseFillEmptyRows_:Oj});function Mj(r,t,e){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(t,"inputShape","sparseReshape","int32"),s=v(e,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape + ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(ei,a);return{outputIndices:i[0],outputShape:i[1]}}var ON=N({sparseReshape_:Mj});function Lj(r,t,e){let o=v(r,"data","sparseSegmentMean"),n=v(t,"indices","sparseSegmentMean","int32"),s=v(e,"segmentIds","sparseSegmentMean","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ya,a)}var ON=N({sparseSegmentMean_:Lj});function Bj(r,t,e){let o=v(r,"data","sparseSegmentSum"),n=v(t,"indices","sparseSegmentSum","int32"),s=v(e,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ya,a)}var MN=N({sparseSegmentMean_:Lj});function Bj(r,t,e){let o=v(r,"data","sparseSegmentSum"),n=v(t,"indices","sparseSegmentSum","int32"),s=v(e,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ba,a)}var MN=N({sparseSegmentSum_:Bj});function zj(r,t,e,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(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:e,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 LN=N({stringNGrams_:zj});function Vj(r,t,e=!0){let o=v(r,"input","stringSplit","string"),n=v(t,"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:e},a={input:o,delimiter:n},i=T.runKernel(Yi,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var BN=N({stringSplit_:Vj});function Wj(r,t){let e=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let n={input:e};return T.runKernel(Qi,n,o)}var zN=N({stringToHashBucketFast_:Wj});function Uj(r,t,e,o=!0){let n=v(r,"input","staticRegexReplace","string"),s={pattern:t,rewrite:e,replaceGlobal:o};return T.runKernel(Ou,{x:n},s)}var VN=N({staticRegexReplace_:Uj});var Gj={fft:fc,ifft:Ju,rfft:hc,irfft:Kd},Hj={hammingWindow:oN,hannWindow:Zd,frame:Jd,stft:nN},Kj={flipLeftRight:aN,grayscaleToRGB:iN,resizeNearestNeighbor:bN,resizeBilinear:yN,rgbToGrayscale:uN,rotateWithOffset:pN,cropAndResize:sN,nonMaxSuppression:cN,nonMaxSuppressionAsync:dN,nonMaxSuppressionWithScore:fN,nonMaxSuppressionWithScoreAsync:hN,nonMaxSuppressionPadded:gN,nonMaxSuppressionPaddedAsync:xN,threshold:CN,transform:wN},qj={bandPart:SN,gramSchmidt:IN,qr:kN},jj={absoluteDifference:NN,computeWeightedLoss:lr,cosineDistance:TN,hingeLoss:_N,huberLoss:$N,logLoss:EN,meanSquaredError:RN,sigmoidCrossEntropy:DN,softmaxCrossEntropy:AN},Xj={sparseFillEmptyRows:FN,sparseReshape:PN,sparseSegmentMean:ON,sparseSegmentSum:MN},Yj={stringNGrams:LN,stringSplit:BN,stringToHashBucketFast:zN,staticRegexReplace:VN};var WN={};qe(WN,{Serializable:()=>Dl,SerializationMap:()=>Fa,getRegisteredName:()=>Zj,registerClass:()=>tS});var Qj=new Map,eS=new Map,Dl=class{getClassName(){return this.constructor.className}static fromConfig(t,e){return new t(e)}},Fa=class{constructor(){this.classNameMap={}}static getMap(){return Fa.instance==null&&(Fa.instance=new Fa),Fa.instance}static register(t){Fa.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function tS(r,t,e){$(r.className!=null,()=>"Class being registered does not have the static className property defined."),$(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),$(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof t=="undefined"&&(t="Custom"),typeof e=="undefined"&&(e=r.className);let o=e,n=t+">"+o;return Fa.register(r),Qj.set(n,r),eS.set(r,n),r}function Zj(r){return eS.has(r)?eS.get(r):r.className}var Nr=class extends Dl{minimize(t,e=!1,o){let{value:n,grads:s}=this.computeGradients(t,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Mt(s),e?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,e){return zw(t,e)}dispose(){this.iterations_!=null&&Mt(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(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(Nr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var np=class extends Nr{static get className(){return"Adadelta"}constructor(t,e,o=null){super(),this.learningRate=t,this.rho=e,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Ht(s).variable(a))});let i=Array.isArray(t)?t[n].tensor:t[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(er(i),1-this.rho)),l=se(je(Dr(Ce(u,this.epsilon)),Dr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(er(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&&(Mt(this.accumulatedGrads.map(t=>t.variable)),Mt(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=t.length/2,o=!1;this.accumulatedGrads=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.rho,e.epsilon)}};var sp=class extends Nr{static get className(){return"Adagrad"}constructor(t,e=.1){super(),this.learningRate=t,this.initialAccumulatorValue=e,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ea(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(t)?t[n].tensor:t[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,er(a));i.assign(p);let u=Ce(se(je(a,Dr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Mt(this.accumulatedGrads.map(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulatedGrads=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,e){return new t(e.learningRate,e.initialAccumulatorValue)}};var ap=class extends Nr{static get className(){return"Adam"}constructor(t,e,o,n=null){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(e).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);e.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Ht(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Ht(i).variable(p))});let u=Array.isArray(t)?t[a].tensor:t[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(er(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(Dr(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&&Mt(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedSecondMoment!=null&&Mt(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(this.beta2,this.iterations_+1))});let e=t.length/2,o=!1;this.accumulatedFirstMoment=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=t.slice(e,e*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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)}};var ip=class extends Nr{static get className(){return"Adamax"}constructor(t,e,o,n=null,s=0){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(e).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));e.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ht(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Ht(i).variable(p)});let u=Array.isArray(t)?t[a].tensor:t[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=Jt(u),h=Fd(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&&Mt(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&Mt(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(t){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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)}};var mi=class extends Nr{static get className(){return"SGD"}constructor(t){super(),this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=Array.isArray(t)?t[n].tensor:t[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(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=Rr(ke(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,e){return new t(e.learningRate)}};var up=class extends mi{static get className(){return"Momentum"}constructor(t,e,o=!1){super(t),this.learningRate=t,this.momentum=e,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Ht(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(t)?t[n].tensor:t[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&&Mt(this.accumulations.map(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulations=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)}};var pp=class extends Nr{static get className(){return"RMSProp"}constructor(t,e=.9,o=0,n=null,s=!1){if(super(),this.learningRate=t,this.decay=e,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),t==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Ht(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Ht(s).variable(a))});let i=Array.isArray(t)?t[n].tensor:t[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(er(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),Dr(Te(c,Ce(er(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(er(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Dr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Mt(this.accumulatedMeanSquares.map(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Mt(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&Mt(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=this.centered?t.length/3:t.length/2,o=!1;this.accumulatedMeanSquares=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=t.slice(e*2,e*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(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)}};var Jj=[np,sp,ap,ip,up,pp,mi];function UN(){for(let r of Jj)tS(r)}var fi={};qe(fi,{CompositeArrayBuffer:()=>jt,browserFiles:()=>HN,browserHTTPRequest:()=>jN,concatenateArrayBuffers:()=>ik,copyModel:()=>wk,decodeWeights:()=>ad,encodeWeights:()=>nk,fromMemory:()=>XN,fromMemorySync:()=>iS,getLoadHandlers:()=>lk,getModelArtifactsForJSON:()=>ic,getModelArtifactsForJSONSync:()=>_w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>ck,getWeightSpecs:()=>ud,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>bk,loadWeights:()=>KN,moveModel:()=>Sk,registerLoadRouter:()=>pk,registerSaveRouter:()=>uk,removeModel:()=>Ck,weightsLoaderFactory:()=>sS,withSaveHandler:()=>YN,withSaveHandlerSync:()=>QN});var eX="model",tX=".json",rX=".weights.bin";function GN(r){return new Promise(t=>setTimeout(t)).then(r)}var di=class{constructor(t){if(!A().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(di.URL_SCHEME)&&(t=t.slice(di.URL_SCHEME.length)),(t==null||t.length===0)&&(t=eX),this.modelJsonFileName=t+tX,this.weightDataFileName=t+rX}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let e=jt.join(t.weightData),o=window.URL.createObjectURL(new Blob([e],{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 n=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=id(t,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 GN(()=>i.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let p=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await GN(()=>p.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:va(t)}}}};di.URL_SCHEME="downloads://";var rS=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:a});return}let p=ic(s,u=>this.loadWeights(u));t(p)},o.onerror=n=>e(`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(t){let e=[],o=[];for(let a of t)e.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(t),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[e,a])}loadWeightsFile(t,e){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 '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],o=this.weightsFiles.map(s=>Tw(s.name)),n={};for(let s of t)s.paths.forEach(a=>{let i=Tw(a);if(e.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(e.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(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},oX=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(di.URL_SCHEME)?nX(r.slice(di.URL_SCHEME.length)):null;ft.registerSaveRouter(oX);function nX(r="model"){return new di(r)}function HN(r){return new rS(r)}function oS(r,t,e,o){a(r),e=e==null?0:e,o=o==null?1:o,i(e,o);let n=0,s=p=>(p.then(u=>{let c=e+ ++n/r.length*(o-e);return t(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function nS(r,t){t==null&&(t={});let e=t.fetchFunc==null?A().platform.fetch:t.fetchFunc,o=r.map(l=>e(l,t.requestInit,{isBinary:!0})),n=0,s=.5,i=(t.onProgress==null?await Promise.all(o):await oS(o,t.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return t.onProgress==null?await Promise.all(i):await oS(i,t.onProgress,p,u)}async function KN(r,t="",e,o){return sS(a=>nS(a,{requestInit:o}))(r,t,e)}function sS(r){return async(t,e="",o)=>{let n=t.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(t.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=Il[x]*He(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=>{t[d].paths.forEach(f=>{let h=e+(e.endsWith("/")?"":"/")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=t[d].paths.length,h=new jt(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=ad(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var sX="application/octet-stream",aX="application/json",Al=class{constructor(t,e){if(this.DEFAULT_METHOD="POST",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?($(typeof e.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=e.fetchFunc):this.fetch=A().platform.fetch,$(t!=null&&t.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(t)&&$(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let o=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],n=id(t,o);if(e.body.append("model.json",new Blob([JSON.stringify(n)],{type:aX}),"model.json"),t.weightData!=null){let a=jt.join(t.weightData);e.body.append("model.weights.bin",new Blob([a],{type:sX}),"model.weights.bin")}let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:va(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.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=e.modelTopology,n=e.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 ic(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=iX(e),s=this.weightPathPrefix||o,a=ud(t),i=[],p=[];for(let c of t)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await nS(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,u]}};Al.URL_SCHEME_REGEX=/^https?:\/\//;function iX(r){let t=r.lastIndexOf("/"),e=r.lastIndexOf("?"),o=r.substring(0,t),n=e>t?r.substring(e):"";return[o+"/",n]}function of(r){return r.match(Al.URL_SCHEME_REGEX)!=null}var qN=(r,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(o=>of(o)):e=of(r),e)return nf(r,t)}return null};ft.registerSaveRouter(qN);ft.registerLoadRouter(qN);function nf(r,t){return new Al(r,t)}function jN(r,t){return nf(r,t)}var Fl=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},sf=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},aS=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function XN(r,t,e,o){let n=arguments;return new aS(iS(...n))}function iS(r,t,e,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Fl(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 Fl({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 Fl({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:o}))}function YN(r){return new sf(r)}function QN(r){return new sf(r)}var JN={};qe(JN,{confusionMatrix:()=>ZN});function uX(r,t,e){let o=v(r,"labels","confusionMatrix"),n=v(t,"predictions","confusionMatrix");$(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=El(We(o,"int32"),e),a=El(We(n,"int32"),e),i=yc(s),p=Ze(i,a);return We(p,"int32")}var ZN=N({confusionMatrix_:uX});var oT={};qe(oT,{draw:()=>gX,fromPixels:()=>xX,fromPixelsAsync:()=>dX,toPixels:()=>hX});var cp,eT=!1;function tT(r,t=3){if(t>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 e=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)e=!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(tc(Mu,T.backendName)!=null){let f={pixels:r},h={numChannels:t};return T.runKernel(Mu,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||e)l=r.data;else if(s||n||i){if(cp==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")cp=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else cp=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});cp.canvas.width=u,cp.canvas.height=c,cp.drawImage(r,0,0,u,c),l=cp.getImageData(0,0,u,c).data}let m;if(t===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*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(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function fX(r){let t=(r==null?void 0:r.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function hX(r,t){let e=v(r,"img","toPixels");if(!(r instanceof ut)){let u=e;e=We(u,"int32"),u.dispose()}rT(e);let[o,n]=e.shape.slice(0,2),s=e.rank===2?1:e.shape[2],a=await e.data(),i=e.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(e.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(t!=null){eT||tc(Pu,T.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),eT=!0),t.width=n,t.height=o;let u=t.getContext("2d"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return e!==r&&e.dispose(),p}function gX(r,t,e){let o=v(r,"img","draw");if(!(r instanceof ut)){let a=o;o=We(a,"int32"),a.dispose()}rT(o),fX(e==null?void 0:e.imageOptions);let n={image:o},s={canvas:t,options:e};T.runKernel(Pu,n,s)}var xX=N({fromPixels_:tT});var af={};qe(af,{prepareAndValidate:()=>nT});function nT(r,t){let e=r.shape.length,o=t.shape.length;if(e<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);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[o-1]>e)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[o-1]} vs. ${e}`);if(He(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=t.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var ct={};qe(ct,{assertParamsValid:()=>bX,computeFlatOffset:()=>vX,computeOutShape:()=>wX,getNormalizedAxes:()=>SX,isSliceContinous:()=>IX,maskToAxes:()=>CX,parseSliceParams:()=>kX,sliceInfo:()=>NX,startForAxis:()=>mT,startIndicesWithElidedDims:()=>pT,stopForAxis:()=>dT,stopIndicesWithElidedDims:()=>cT,stridesForAxis:()=>lT,stridesWithElidedDims:()=>aT});var uS=-2,yX=-1;function bX(r,t,e){let o=r.shape.length;$(o===t.length,()=>`Error in slice${o}D: Length of begin ${t} must match the rank of the array (${o}).`),$(o===e.length,()=>`Error in slice${o}D: Length of size ${e} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${t[n]+e[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function CX(r){let t=[],e=0;for(;r>0;)r&1&&t.push(e),r/=2,e++;return t}function wX(r,t,e){let o=[];for(let n=0;n0){let d=t[0],f=e+1;c=pT(a,d,f,o,r),l=cT(i,d,f,n,r),m=aT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=iT(t,e,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=iT(t,e,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=qp(0,a,p-1),a}function dT(r,t,e,o,n,s){let a=t[n],i=e[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=qp(0,a,p):a=qp(-1,a,p-1),a}function IX(r,t,e){let o=e.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||e[n]!==r[n])return!1;return!0}function vX(r,t){let e=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return e==null?s=new Array(n).fill(-1):typeof e=="number"?s=[e,...new Array(n-1).fill(-1)]:e.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function NX(r,t,e,o,n,s,a,i,p){let u;if(o==null?(u=new Array(t.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:t.slice(),end:e.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]=sT(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=sT(m.end[C],1,m.strides[C],k,_,E);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===uS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==uS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function TX(r,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let e=0;t.beginValid=r.begin!=null,t.endValid=r.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 o=0;o0?s[t]:s[t+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var _X="4.11.0";var Pl=class{static sgd(t){return new mi(t)}static momentum(t,e,o=!1){return new up(t,e,o)}static rmsprop(t,e=.9,o=0,n=null,s=!1){return new pp(t,e,o,n,s)}static adam(t=.001,e=.9,o=.999,n=null){return new ap(t,e,o,n)}static adadelta(t=.001,e=.95,o=null){return new np(t,e,o)}static adamax(t=.002,e=.9,o=.999,n=null,s=0){return new ip(t,e,o,n,s)}static adagrad(t,e=.1){return new sp(t,e)}};var TGe=Pl;var $X=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r())();function pS(){return new Promise(r=>$X(()=>r()))}var w={};qe(w,{ERF_A1:()=>KX,ERF_A2:()=>qX,ERF_A3:()=>jX,ERF_A4:()=>XX,ERF_A5:()=>YX,ERF_P:()=>HX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Pa,SELU_SCALE:()=>GX,SELU_SCALEALPHA:()=>UX,applyActivation:()=>rp,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>tK,assertParamsConsistent:()=>EX,assignToTypedArray:()=>r5,axesAreInnerMostDims:()=>Bw,calculateShapes:()=>V1,checkEinsumDimSizes:()=>u5,checkPadOnDimRoundingMode:()=>Bt,combineLocations:()=>x2,combineRaggedTensorToTensorShapes:()=>DX,complexWithEvenIndex:()=>JX,complexWithOddIndex:()=>e5,computeConv2DInfo:()=>Hu,computeConv3DInfo:()=>Mk,computeDefaultPad:()=>Lw,computeDilation2DInfo:()=>J4,computeOptimalWindowSize:()=>OX,computeOutAndReduceShapes:()=>eK,computeOutShape:()=>RX,computePool2DInfo:()=>Mw,computePool3DInfo:()=>eH,convertConv2DDataFormat:()=>Lk,decodeEinsumEquation:()=>a5,eitherStridesOrDilationsAreOne:()=>xr,expandShapeToKeepDim:()=>ii,exponent:()=>n5,exponents:()=>o5,fromStringArrayToUint8:()=>$5,fromUint8ToStringArray:()=>_5,getAxesPermutation:()=>rK,getBroadcastDims:()=>m2,getComplexWithIndex:()=>t5,getEinsumComputePath:()=>p5,getEinsumPermutation:()=>i5,getFusedBiasGradient:()=>tp,getFusedDyActivation:()=>ep,getImageCenter:()=>MX,getInnerMostAxes:()=>nK,getPermuted:()=>BX,getRaggedRank:()=>FX,getReductionAxes:()=>yd,getReshaped:()=>LX,getReshapedPermuted:()=>zX,getRowPartitionTypesHelper:()=>AX,getSliceBeginCoords:()=>VX,getSliceSize:()=>WX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>d5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>f5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>h5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>y5,getSparseReshapeInputOutputMismatchErrorMessage:()=>C5,getSparseReshapeInputOutputMultipleErrorMessage:()=>b5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>g5,getSparseReshapeNegativeOutputDimErrorMessage:()=>x5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>v5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>w5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>S5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>I5,getUndoAxesPermutation:()=>oK,isIdentityPermutation:()=>c5,log:()=>jG,mergeRealAndImagArrays:()=>QX,prepareAndValidate:()=>nT,prepareSplitSize:()=>m5,segment_util:()=>lS,shouldFuse:()=>op,slice_util:()=>ct,splitRealAndImagArrays:()=>ZX,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Gu,upcastType:()=>dt,validateDefaultValueShape:()=>PX,validateInput:()=>xc,validateUpdateShape:()=>Yw,warn:()=>Ia});function EX(r,t){let e=r[0].length;r.forEach((n,s)=>{$(n.length===e,()=>`Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`)}),$(t>=0&&t`Error in concat${e}D: axis must be between 0 and ${e-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${e}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function RX(r,t){let e=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function AX(r){let t={FIRST_DIM_SIZE:Pa.FIRST_DIM_SIZE,VALUE_ROWIDS:Pa.VALUE_ROWIDS,ROW_LENGTHS:Pa.ROW_LENGTHS,ROW_SPLITS:Pa.ROW_SPLITS,ROW_LIMITS:Pa.ROW_LIMITS,ROW_STARTS:Pa.ROW_STARTS},e=[];for(let o of r)if(o in t)e.push(t[o]);else break;return e}function FX(r){return r.length===0?0:r[0]===Pa.FIRST_DIM_SIZE?r.length-1:r.length}function PX(r,t){if(r==null||t==null)return;let e=r.length,o=t.length;if(e>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${e} 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=${t} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var uf=30;function OX(r){return r<=uf?r:Xp(r,Math.floor(Math.sqrt(r)))}function MX(r,t,e){let o=e*(typeof r=="number"?r:r[0]),n=t*(typeof r=="number"?r:r[1]);return[o,n]}function LX(r,t,e,o=!0){let n=[];if(o)n=n.concat(t.slice(0)),n.push(r[0]/e),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=t.length;for(let a=0;a=t*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function zX(r,t,e,o=!0){let n=[];o?n.push(r[0]/e):n.push(r[0]*e);for(let s=1;s/g,fT=",",hT="...";function a5(r,t){r=r.replace(/\s/g,"");let e=(r.length-r.replace(s5,"").length)/cS.length;if(e<1)throw new Error("Equations without an arrow are not supported.");if(e>1)throw new Error(`Equation must contain exactly one arrow ("${cS}").`);let[o,n]=r.split(cS);$(o.indexOf(hT)===-1,()=>`The ellipsis notation ("${hT}") is not supported yet.`);let s=o.split(fT),a=s.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);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:e,expandDims:o}}function u5(r,t,e){let o=new Array(r);for(let n=0;n`Expected dimension ${o[t[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function p5(r,t){let e=r,o=[],n=0;r.length===0&&e.push(-1),n=r.length+1;for(let a=0;at===e)}function l5(r,t){let e=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(t).fill(r.shape[e]/t);else{let n=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let a=t.reduce((i,p)=>p>0?i+p:i);t[s]=r.shape[e]-a}$(r.shape[e]===t.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=t}return o}function d5(r){return`Received SparseTensor with denseShape[0] = 0 but + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ba,a)}var LN=N({sparseSegmentSum_:Bj});function zj(r,t,e,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(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:e,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 BN=N({stringNGrams_:zj});function Vj(r,t,e=!0){let o=v(r,"input","stringSplit","string"),n=v(t,"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:e},a={input:o,delimiter:n},i=T.runKernel(qi,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var zN=N({stringSplit_:Vj});function Wj(r,t){let e=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let n={input:e};return T.runKernel(ji,n,o)}var VN=N({stringToHashBucketFast_:Wj});function Uj(r,t,e,o=!0){let n=v(r,"input","staticRegexReplace","string"),s={pattern:t,rewrite:e,replaceGlobal:o};return T.runKernel($u,{x:n},s)}var WN=N({staticRegexReplace_:Uj});var Gj={fft:ac,ifft:Ku,rfft:ic,irfft:Gd},Hj={hammingWindow:nN,hannWindow:Yd,frame:Qd,stft:sN},Kj={flipLeftRight:iN,grayscaleToRGB:uN,resizeNearestNeighbor:CN,resizeBilinear:bN,rgbToGrayscale:pN,rotateWithOffset:cN,cropAndResize:aN,nonMaxSuppression:lN,nonMaxSuppressionAsync:fN,nonMaxSuppressionWithScore:hN,nonMaxSuppressionWithScoreAsync:gN,nonMaxSuppressionPadded:xN,nonMaxSuppressionPaddedAsync:yN,threshold:wN,transform:SN},qj={bandPart:IN,gramSchmidt:vN,qr:NN},jj={absoluteDifference:TN,computeWeightedLoss:cr,cosineDistance:_N,hingeLoss:$N,huberLoss:EN,logLoss:RN,meanSquaredError:DN,sigmoidCrossEntropy:AN,softmaxCrossEntropy:FN},Xj={sparseFillEmptyRows:PN,sparseReshape:ON,sparseSegmentMean:MN,sparseSegmentSum:LN},Yj={stringNGrams:BN,stringSplit:zN,stringToHashBucketFast:VN,staticRegexReplace:WN};var UN={};qe(UN,{Serializable:()=>$l,SerializationMap:()=>tf,getRegisteredName:()=>Zj,registerClass:()=>tS});var Qj=new Map,eS=new Map,$l=class{getClassName(){return this.constructor.className}static fromConfig(t,e){return new t(e)}},tf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(t){r.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function tS(r,t,e){$(r.className!=null,()=>"Class being registered does not have the static className property defined."),$(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),$(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof t=="undefined"&&(t="Custom"),typeof e=="undefined"&&(e=r.className);let o=e,n=t+">"+o;return tf.register(r),Qj.set(n,r),eS.set(r,n),r}function Zj(r){return eS.has(r)?eS.get(r):r.className}var kr=class extends $l{minimize(t,e=!1,o){let{value:n,grads:s}=this.computeGradients(t,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),e?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,e){return zw(t,e)}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(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Qu=class extends kr{static get className(){return"Adadelta"}constructor(t,e,o=null){super(),this.learningRate=t,this.rho=e,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable)),Ot(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=t.length/2,o=!1;this.accumulatedGrads=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.rho,e.epsilon)}};var Zu=class extends kr{static get className(){return"Adagrad"}constructor(t,e=.1){super(),this.learningRate=t,this.initialAccumulatorValue=e,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ea(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(t)?t[n].tensor:t[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(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulatedGrads=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,e){return new t(e.learningRate,e.initialAccumulatorValue)}};var Ju=class extends kr{static get className(){return"Adam"}constructor(t,e,o,n=null){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(e).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);e.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(t)?t[a].tensor:t[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(t=>t.variable)),this.accumulatedSecondMoment!=null&&Ot(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t),De(()=>{this.accBeta1.assign(ii(this.beta1,this.iterations_+1)),this.accBeta2.assign(ii(this.beta2,this.iterations_+1))});let e=t.length/2,o=!1;this.accumulatedFirstMoment=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=t.slice(e,e*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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)}};var ep=class extends kr{static get className(){return"Adamax"}constructor(t,e,o,n=null,s=0){super(),this.learningRate=t,this.beta1=e,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(e).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(o=>o.name):Object.keys(t);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));e.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(t)?t[a].tensor:t[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=Dd(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(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(t){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(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)}};var li=class extends kr{static get className(){return"SGD"}constructor(t){super(),this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).forEach((o,n)=>{let s=Array.isArray(t)?t[n].tensor:t[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(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=Er(ke(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,e){return new t(e.learningRate)}};var tp=class extends li{static get className(){return"Momentum"}constructor(t,e,o=!1){super(t),this.learningRate=t,this.momentum=e,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulations=t.map(o=>({originalName:o.name,variable:o.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)}};var rp=class extends kr{static get className(){return"RMSProp"}constructor(t,e=.9,o=0,n=null,s=!1){if(super(),this.learningRate=t,this.decay=e,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),t==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(t){(Array.isArray(t)?t.map(o=>o.name):Object.keys(t)).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(t)?t[n].tensor:t[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(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&Ot(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=this.centered?t.length/3:t.length/2,o=!1;this.accumulatedMeanSquares=t.slice(0,e).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=t.slice(e,e*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=t.slice(e*2,e*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(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)}};var Jj=[Qu,Zu,Ju,ep,tp,rp,li];function GN(){for(let r of Jj)tS(r)}var mi={};qe(mi,{CompositeArrayBuffer:()=>ir,browserFiles:()=>KN,browserHTTPRequest:()=>XN,concatenateArrayBuffers:()=>uk,copyModel:()=>Sk,decodeWeights:()=>nd,encodeWeights:()=>sk,fromMemory:()=>YN,fromMemorySync:()=>iS,getLoadHandlers:()=>mk,getModelArtifactsForJSON:()=>Jp,getModelArtifactsForJSONSync:()=>_w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>lk,getWeightSpecs:()=>ad,http:()=>of,isHTTPScheme:()=>rf,listModels:()=>Ck,loadWeights:()=>qN,moveModel:()=>Ik,registerLoadRouter:()=>ck,registerSaveRouter:()=>pk,removeModel:()=>wk,weightsLoaderFactory:()=>sS,withSaveHandler:()=>QN,withSaveHandlerSync:()=>ZN});var eX="model",tX=".json",rX=".weights.bin";function HN(r){return new Promise(t=>setTimeout(t)).then(r)}var lc=class r{constructor(t){if(!A().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(r.URL_SCHEME)&&(t=t.slice(r.URL_SCHEME.length)),(t==null||t.length===0)&&(t=eX),this.modelJsonFileName=t+tX,this.weightDataFileName=t+rX}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let e=ir.join(t.weightData),o=window.URL.createObjectURL(new Blob([e],{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 n=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=sd(t,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 HN(()=>i.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let p=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await HN(()=>p.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:va(t)}}}};lc.URL_SCHEME="downloads://";var rS=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:a});return}let p=Jp(s,u=>this.loadWeights(u));t(p)},o.onerror=n=>e(`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(t){let e=[],o=[];for(let a of t)e.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(t),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[e,a])}loadWeightsFile(t,e){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 '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],o=this.weightsFiles.map(s=>Tw(s.name)),n={};for(let s of t)s.paths.forEach(a=>{let i=Tw(a);if(e.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(e.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(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},oX=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(lc.URL_SCHEME)?nX(r.slice(lc.URL_SCHEME.length)):null;qt.registerSaveRouter(oX);function nX(r="model"){return new lc(r)}function KN(r){return new rS(r)}function oS(r,t,e,o){a(r),e=e==null?0:e,o=o==null?1:o,i(e,o);let n=0,s=p=>(p.then(u=>{let c=e+ ++n/r.length*(o-e);return t(c),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function nS(r,t){t==null&&(t={});let e=t.fetchFunc==null?A().platform.fetch:t.fetchFunc,o=r.map(l=>e(l,t.requestInit,{isBinary:!0})),n=0,s=.5,i=(t.onProgress==null?await Promise.all(o):await oS(o,t.onProgress,n,s)).map(l=>l.arrayBuffer()),p=.5,u=1;return t.onProgress==null?await Promise.all(i):await oS(i,t.onProgress,p,u)}async function qN(r,t="",e,o){return sS(a=>nS(a,{requestInit:o}))(r,t,e)}function sS(r){return async(t,e="",o)=>{let n=t.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(t.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=Cl[x]*He(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=>{t[d].paths.forEach(f=>{let h=e+(e.endsWith("/")?"":"/")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=t[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=nd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var sX="application/octet-stream",aX="application/json",El=class{constructor(t,e){if(this.DEFAULT_METHOD="POST",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?($(typeof e.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=e.fetchFunc):this.fetch=A().platform.fetch,$(t!=null&&t.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(t)&&$(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let o=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],n=sd(t,o);if(e.body.append("model.json",new Blob([JSON.stringify(n)],{type:aX}),"model.json"),t.weightData!=null){let a=ir.join(t.weightData);e.body.append("model.weights.bin",new Blob([a],{type:sX}),"model.weights.bin")}let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:va(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.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=e.modelTopology,n=e.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 Jp(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=iX(e),s=this.weightPathPrefix||o,a=ad(t),i=[],p=[];for(let c of t)for(let l of c.paths)this.weightUrlConverter!=null?p.push(this.weightUrlConverter(l)):i.push(s+l+n);this.weightUrlConverter&&i.push(...await Promise.all(p));let u=await nS(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,u]}};El.URL_SCHEME_REGEX=/^https?:\/\//;function iX(r){let t=r.lastIndexOf("/"),e=r.lastIndexOf("?"),o=r.substring(0,t),n=e>t?r.substring(e):"";return[o+"/",n]}function rf(r){return r.match(El.URL_SCHEME_REGEX)!=null}var jN=(r,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(o=>rf(o)):e=rf(r),e)return of(r,t)}return null};qt.registerSaveRouter(jN);qt.registerLoadRouter(jN);function of(r,t){return new El(r,t)}function XN(r,t){return of(r,t)}var Rl=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},nf=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},aS=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function YN(r,t,e,o){let n=arguments;return new aS(iS(...n))}function iS(r,t,e,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Rl(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 Rl({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 Rl({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:o}))}function QN(r){return new nf(r)}function ZN(r){return new nf(r)}var eT={};qe(eT,{confusionMatrix:()=>JN});function uX(r,t,e){let o=v(r,"labels","confusionMatrix"),n=v(t,"predictions","confusionMatrix");$(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=Tl(We(o,"int32"),e),a=Tl(We(n,"int32"),e),i=cc(s),p=Ze(i,a);return We(p,"int32")}var JN=N({confusionMatrix_:uX});var nT={};qe(nT,{draw:()=>gX,fromPixels:()=>xX,fromPixelsAsync:()=>dX,toPixels:()=>hX});var op,tT=!1;function rT(r,t=3){if(t>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 e=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)e=!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(qp(Eu,T.backendName)!=null){let f={pixels:r},h={numChannels:t};return T.runKernel(Eu,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||e)l=r.data;else if(s||n||i){if(op==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")op=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else op=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});op.canvas.width=u,op.canvas.height=c,op.drawImage(r,0,0,u,c),l=op.getImageData(0,0,u,c).data}let m;if(t===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*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(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function fX(r){let t=(r==null?void 0:r.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function hX(r,t){let e=v(r,"img","toPixels");if(!(r instanceof mt)){let u=e;e=We(u,"int32"),u.dispose()}oT(e);let[o,n]=e.shape.slice(0,2),s=e.rank===2?1:e.shape[2],a=await e.data(),i=e.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(e.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(t!=null){tT||qp(_u,T.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),tT=!0),t.width=n,t.height=o;let u=t.getContext("2d"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return e!==r&&e.dispose(),p}function gX(r,t,e){let o=v(r,"img","draw");if(!(r instanceof mt)){let a=o;o=We(a,"int32"),a.dispose()}oT(o),fX(e==null?void 0:e.imageOptions);let n={image:o},s={canvas:t,options:e};T.runKernel(_u,n,s)}var xX=N({fromPixels_:rT});var sf={};qe(sf,{prepareAndValidate:()=>sT});function sT(r,t){let e=r.shape.length,o=t.shape.length;if(e<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);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[o-1]>e)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[o-1]} vs. ${e}`);if(He(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=t.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:()=>bX,computeFlatOffset:()=>vX,computeOutShape:()=>wX,getNormalizedAxes:()=>SX,isSliceContinous:()=>IX,maskToAxes:()=>CX,parseSliceParams:()=>kX,sliceInfo:()=>NX,startForAxis:()=>dT,startIndicesWithElidedDims:()=>cT,stopForAxis:()=>fT,stopIndicesWithElidedDims:()=>lT,stridesForAxis:()=>mT,stridesWithElidedDims:()=>iT});var uS=-2,yX=-1;function bX(r,t,e){let o=r.shape.length;$(o===t.length,()=>`Error in slice${o}D: Length of begin ${t} must match the rank of the array (${o}).`),$(o===e.length,()=>`Error in slice${o}D: Length of size ${e} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${t[n]+e[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function CX(r){let t=[],e=0;for(;r>0;)r&1&&t.push(e),r/=2,e++;return t}function wX(r,t,e){let o=[];for(let n=0;n0){let d=t[0],f=e+1;c=cT(a,d,f,o,r),l=lT(i,d,f,n,r),m=iT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=uT(t,e,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=uT(t,e,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=Bp(0,a,p-1),a}function fT(r,t,e,o,n,s){let a=t[n],i=e[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=Bp(0,a,p):a=Bp(-1,a,p-1),a}function IX(r,t,e){let o=e.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||e[n]!==r[n])return!1;return!0}function vX(r,t){let e=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return e==null?s=new Array(n).fill(-1):typeof e=="number"?s=[e,...new Array(n-1).fill(-1)]:e.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function NX(r,t,e,o,n,s,a,i,p){let u;if(o==null?(u=new Array(t.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:t.slice(),end:e.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]=aT(m.begin[C],0,m.strides[C],k,_,E),m.end[C]=aT(m.end[C],1,m.strides[C],k,_,E);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===uS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==uS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function TX(r,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let e=0;t.beginValid=r.begin!=null,t.endValid=r.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 o=0;o0?s[t]:s[t+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var _X="4.14.0";var Dl=class{static sgd(t){return new li(t)}static momentum(t,e,o=!1){return new tp(t,e,o)}static rmsprop(t,e=.9,o=0,n=null,s=!1){return new rp(t,e,o,n,s)}static adam(t=.001,e=.9,o=.999,n=null){return new Ju(t,e,o,n)}static adadelta(t=.001,e=.95,o=null){return new Qu(t,e,o)}static adamax(t=.002,e=.9,o=.999,n=null,s=0){return new ep(t,e,o,n,s)}static adagrad(t,e=.1){return new Zu(t,e)}};var TGe=Dl;var $X=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r();function pS(){return new Promise(r=>$X(()=>r()))}var w={};qe(w,{ERF_A1:()=>KX,ERF_A2:()=>qX,ERF_A3:()=>jX,ERF_A4:()=>XX,ERF_A5:()=>YX,ERF_P:()=>HX,PARALLELIZE_THRESHOLD:()=>af,RowPartitionType:()=>Fa,SELU_SCALE:()=>GX,SELU_SCALEALPHA:()=>UX,applyActivation:()=>Xu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>tK,assertParamsConsistent:()=>EX,assignToTypedArray:()=>r5,axesAreInnerMostDims:()=>Bw,calculateShapes:()=>W1,checkEinsumDimSizes:()=>u5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>y2,combineRaggedTensorToTensorShapes:()=>DX,complexWithEvenIndex:()=>JX,complexWithOddIndex:()=>e5,computeConv2DInfo:()=>Lu,computeConv3DInfo:()=>Lk,computeDefaultPad:()=>Lw,computeDilation2DInfo:()=>J4,computeOptimalWindowSize:()=>OX,computeOutAndReduceShapes:()=>eK,computeOutShape:()=>RX,computePool2DInfo:()=>Mw,computePool3DInfo:()=>eH,convertConv2DDataFormat:()=>Bk,decodeEinsumEquation:()=>a5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ai,exponent:()=>n5,exponents:()=>o5,fromStringArrayToUint8:()=>$5,fromUint8ToStringArray:()=>_5,getAxesPermutation:()=>rK,getBroadcastDims:()=>d2,getComplexWithIndex:()=>t5,getEinsumComputePath:()=>p5,getEinsumPermutation:()=>i5,getFusedBiasGradient:()=>ju,getFusedDyActivation:()=>qu,getImageCenter:()=>MX,getInnerMostAxes:()=>nK,getPermuted:()=>BX,getRaggedRank:()=>FX,getReductionAxes:()=>gd,getReshaped:()=>LX,getReshapedPermuted:()=>zX,getRowPartitionTypesHelper:()=>AX,getSliceBeginCoords:()=>VX,getSliceSize:()=>WX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>d5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>f5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>h5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>y5,getSparseReshapeInputOutputMismatchErrorMessage:()=>C5,getSparseReshapeInputOutputMultipleErrorMessage:()=>b5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>g5,getSparseReshapeNegativeOutputDimErrorMessage:()=>x5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>v5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>w5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>S5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>I5,getUndoAxesPermutation:()=>oK,isIdentityPermutation:()=>c5,log:()=>XG,mergeRealAndImagArrays:()=>QX,prepareAndValidate:()=>sT,prepareSplitSize:()=>m5,segment_util:()=>lS,shouldFuse:()=>Yu,slice_util:()=>pt,splitRealAndImagArrays:()=>ZX,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Mu,upcastType:()=>dt,validateDefaultValueShape:()=>PX,validateInput:()=>pc,validateUpdateShape:()=>Yw,warn:()=>Ia});function EX(r,t){let e=r[0].length;r.forEach((n,s)=>{$(n.length===e,()=>`Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`)}),$(t>=0&&t`Error in concat${e}D: axis must be between 0 and ${e-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${e}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function RX(r,t){let e=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function AX(r){let t={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},e=[];for(let o of r)if(o in t)e.push(t[o]);else break;return e}function FX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function PX(r,t){if(r==null||t==null)return;let e=r.length,o=t.length;if(e>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${e} 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=${t} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var af=30;function OX(r){return r<=af?r:Vp(r,Math.floor(Math.sqrt(r)))}function MX(r,t,e){let o=e*(typeof r=="number"?r:r[0]),n=t*(typeof r=="number"?r:r[1]);return[o,n]}function LX(r,t,e,o=!0){let n=[];if(o)n=n.concat(t.slice(0)),n.push(r[0]/e),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=t.length;for(let a=0;a=t*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function zX(r,t,e,o=!0){let n=[];o?n.push(r[0]/e):n.push(r[0]*e);for(let s=1;s/g,hT=",",gT="...";function a5(r,t){r=r.replace(/\s/g,"");let e=(r.length-r.replace(s5,"").length)/cS.length;if(e<1)throw new Error("Equations without an arrow are not supported.");if(e>1)throw new Error(`Equation must contain exactly one arrow ("${cS}").`);let[o,n]=r.split(cS);$(o.indexOf(gT)===-1,()=>`The ellipsis notation ("${gT}") is not supported yet.`);let s=o.split(hT),a=s.length;if(t!==a)throw new Error(`Expected ${a} input tensors, received ${t}`);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:e,expandDims:o}}function u5(r,t,e){let o=new Array(r);for(let n=0;n`Expected dimension ${o[t[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function p5(r,t){let e=r,o=[],n=0;r.length===0&&e.push(-1),n=r.length+1;for(let a=0;at===e)}function l5(r,t){let e=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(t).fill(r.shape[e]/t);else{let n=t.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let a=t.reduce((i,p)=>p>0?i+p:i);t[s]=r.shape[e]-a}$(r.shape[e]===t.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=t}return o}function d5(r){return`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${r}`}function f5(r,t){return`indices(${r}, 0) is invalid: ${t} < 0`}function h5(r,t,e){return`indices(${r}, 0) is invalid: ${t} >= ${e}`}function g5(r,t){return`only one output dimension may be -1, not both ${r} and ${t}`}function x5(r,t){return`size ${r} must be non-negative, not ${t}`}function y5(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function b5(r,t){let e=He(r),o=He(t);return`Input to reshape is a SparseTensor with ${e} - dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${t}`}function C5(r,t){let e=He(r),o=He(t);return`Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${t}`}function w5(){return"segment ids must be >= 0"}function S5(){return"segment ids are not increasing"}function I5(r,t){return`Segment id ${r} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function v5(r,t,e){return`Bad: indices[${r}] == ${t} out of range [0, ${e})`}var lS={};qe(lS,{collectGatherOpShapeInfo:()=>T5,computeOutShape:()=>N5,segOpComputeOptimalWindowSize:()=>k5});function k5(r,t){let e=!1,o;for(r<=uf?(o=r,e=!0):o=Xp(r,Math.floor(Math.sqrt(r)));!e;)o>t||o===r?e=!0:o=Xp(r,o+1);return o}function N5(r,t,e){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(esc(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function $5(r){return r.map(t=>tu(t))}var Wt={};qe(Wt,{nonMaxSuppressionV3Impl:()=>ef,nonMaxSuppressionV4Impl:()=>tf,nonMaxSuppressionV5Impl:()=>rf,whereImpl:()=>Yd});UN();var E5=A();E5.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 ho;(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"})(ho||(ho={}));var gT;(function(r){let t;(function(e){e[e.LEGACY=0]="LEGACY",e[e.V1=1]="V1",e[e.V2=2]="V2"})(t=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(gT||(gT={}));var dS={};function D5(r,t){let e={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:t};dS[r]=e}function pf(r){return dS[r]}function A5(r){delete dS[r]}function I(r,t,e,o,n){let s=t.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?t.inputNames.length+i:i;if(s.type==="tensor")return zt(t.inputNames[u],e,o,n);if(s.type==="tensors"){let m=t.inputs.slice(i,p);return t.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!=="NoOp"}).map(f=>zt(f,e,o,n))}let c=zt(t.inputNames[u],e,o,n),l=c.dataSync();return s.type==="number"?l[0]:y.toNestedArray(c.shape,l)}let a=t.attrParams[r];return a&&a.value}function zt(r,t,e,o){let[n,s]=Tr(r,e);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=e.currentContextIds.find(i=>!!t[cf(n,i)]);return a!==void 0?t[cf(n,a)][s]:void 0}function fS(r,t,e){return t[cf(r,e.currentContextId)]}function Ls(r,t){let[e,o,n]=Tr(r,t);return[cf(e,t&&t.currentContextId),o,n]}function cf(r,t){return t?`${r}-${t}`:r}function Tr(r,t){if(r==="")return["",0,void 0];let e=t!=null&&t.parseNodeNameCache!=null;if(e){let s=t.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 e&&t.parseNodeNameCache.set(r,n),n}function Ol(r,t,e){let o=I("pad",r,t,e);if(o==="explicit"){o=I("explicitPaddings",r,t,e);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 hS={};qe(hS,{json:()=>F5});var F5=[{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 gS={};qe(gS,{json:()=>P5});var P5=[{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 xS={};qe(xS,{json:()=>O5});var O5=[{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 yS={};qe(yS,{json:()=>M5});var M5=[{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 bS={};qe(bS,{json:()=>L5});var L5=[{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 CS={};qe(CS,{json:()=>B5});var B5=[{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 wS={};qe(wS,{json:()=>z5});var z5=[{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 SS={};qe(SS,{json:()=>V5});var V5=[{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 IS={};qe(IS,{json:()=>W5});var W5=[{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 vS={};qe(vS,{json:()=>U5});var U5=[{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 kS={};qe(kS,{json:()=>G5});var G5=[{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 NS={};qe(NS,{json:()=>H5});var H5=[{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 TS={};qe(TS,{json:()=>K5});var K5=[{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 _S={};qe(_S,{json:()=>q5});var q5=[{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:()=>j5});var j5=[{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 ES={};qe(ES,{json:()=>X5});var X5=[{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 RS={};qe(RS,{json:()=>Y5});var Y5=[{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 DS={};qe(DS,{json:()=>Q5});var Q5=[{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 AS={};qe(AS,{json:()=>Z5});var Z5=[{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 Ml=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[hS,gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,$S,ES,RS,DS,AS],e=[].concat(...t.map(o=>o.json));this.opMappers=e.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(t,e={}){let o=t.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={};e!=null&&(c=this.mapSignatureEntries(e.inputs),l=this.mapSignatureEntries(e.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 E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=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={};t.library!=null&&t.library.function!=null&&(d=t.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:e,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(t){return Object.keys(t||{}).reduce((e,o)=>(e[t[o].name]=o,e),{})}mapNode(t){let e=pf(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let o={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:e.outputs};return e.inputs!=null&&(o.inputParams=e.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),e.attrs!=null&&(o.attrParams=e.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=lf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=yf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=df(t.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=xf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=mf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=Cf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=gf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=bf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=ff(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=hf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=xT(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xT(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${t.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(t){let e=t.nodeDef,o=[],n=[],s={};e!=null&&(s=e.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op==="Const"&&n.push(l[m.name]),l),{}));let a=[],i=[];t.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:FS(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=t.ret;t.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(t);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o),e),{}),outputs:t.signature.outputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o,t.ret),e),{})}}mapArgToTensorInfo(t,e){let o=t.name;return e!=null&&(o=e[o]),{name:o,dtype:t.type}}};function J5(r){let t=A().global;if(typeof t.atob!="undefined")return t.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 yT(r,t){let e=Array.isArray(r)?String.fromCharCode.apply(null,r):J5(r);return t?e:e.toLowerCase()}function lf(r,t,e,o=!1){let n=r[t];return n!=null?yT(n.s,o):e}function mf(r,t,e){let o=r[t];return o?o.b:e}function df(r,t,e){let o=r[t]||{},n=o.i!=null?o.i:o.f!=null?o.f:e;return typeof n=="number"?n:parseInt(n,10)}function FS(r){switch(typeof r=="string"&&(r=ho[r]),r){case ho.DT_FLOAT:case ho.DT_HALF:return"float32";case ho.DT_INT32:case ho.DT_INT64:case ho.DT_INT8:case ho.DT_UINT8:return"int32";case ho.DT_BOOL:return"bool";case ho.DT_DOUBLE:return"float32";case ho.DT_STRING:return"string";default:return null}}function xT(r,t,e){let o=r[t];return o&&o.func?o.func.name:e}function ff(r,t,e){let o=r[t];return o&&o.type?FS(o.type):e}function hf(r,t,e){let o=r[t];return o&&o.list&&o.list.type?o.list.type.map(n=>FS(n)):e}function bT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function gf(r,t,e){let o=r[t];return o&&o.shape?bT(o.shape):e}function xf(r,t,e){let o=r[t];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):e}function yf(r,t,e,o=!1){let n=r[t];return n&&n.list&&n.list.s?n.list.s.map(s=>yT(s,o)):e}function bf(r,t,e){let o=r[t];return o&&o.list&&o.list.shape?o.list.shape.map(n=>bT(n)):e}function Cf(r,t,e){let o=r[t];return o&&o.list&&o.list.b?o.list.b:e}var wf=class{constructor(t,e,o){this.node=t,this.tensorMap=e,this.context=o,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(n=>this.getInput(n)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(t){return zt(t,this.tensorMap,this.context)}getAttr(t,e){let o=this.node.rawAttrs[t];if(o.tensor!=null)return zt(t,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,t,e);if(o.s!=null)return lf(this.node.rawAttrs,t,e);if(o.b!=null)return mf(this.node.rawAttrs,t,e);if(o.shape!=null)return gf(this.node.rawAttrs,t,e);if(o.type!=null)return ff(this.node.rawAttrs,t,e);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,t,e);if(o.list.s!=null)return yf(this.node.rawAttrs,t,e);if(o.list.shape!=null)return bf(this.node.rawAttrs,t,e);if(o.list.b!=null)return Cf(this.node.rawAttrs,t,e);if(o.list.type!=null)return hf(this.node.rawAttrs,t,e)}return e}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>kw,abs:()=>Jt,acos:()=>kk,acosh:()=>Nk,add:()=>Ce,addN:()=>Tk,all:()=>_k,any:()=>$k,argMax:()=>Ek,argMin:()=>Rk,asin:()=>Dk,asinh:()=>Ak,atan:()=>Fk,atan2:()=>Pk,atanh:()=>Ok,avgPool:()=>fd,avgPool3d:()=>Bk,basicLSTMCell:()=>zk,batchNorm:()=>au,batchNorm2d:()=>Wk,batchNorm3d:()=>Uk,batchNorm4d:()=>Gk,batchToSpaceND:()=>hd,bincount:()=>gd,bitwiseAnd:()=>Hk,booleanMaskAsync:()=>E6,broadcastArgs:()=>Kk,broadcastTo:()=>iu,buffer:()=>me,cast:()=>We,ceil:()=>qk,clipByValue:()=>jk,clone:()=>Ur,complex:()=>Er,concat:()=>bt,concat1d:()=>Xk,concat2d:()=>Yk,concat3d:()=>Qk,concat4d:()=>Zk,conv1d:()=>Jk,conv2d:()=>uu,conv2dTranspose:()=>e2,conv3d:()=>t2,conv3dTranspose:()=>o2,cos:()=>n2,cosh:()=>s2,cosineWindow:()=>Rl,cumprod:()=>a2,cumsum:()=>i2,denseBincount:()=>u2,depthToSpace:()=>p2,depthwiseConv2d:()=>lc,diag:()=>c2,dilation2d:()=>l2,div:()=>je,divNoNan:()=>d2,dot:()=>f2,dropout:()=>W6,einsum:()=>pu,elu:()=>Cd,enclosingPowerOfTwo:()=>Qw,ensureShape:()=>h2,equal:()=>bd,erf:()=>g2,euclideanNorm:()=>b2,exp:()=>$o,expandDims:()=>Ms,expm1:()=>C2,eye:()=>wd,fft:()=>fc,fill:()=>Ea,floor:()=>Sd,floorDiv:()=>dd,fused:()=>Zw,gather:()=>Id,gatherND:()=>z6,greater:()=>qu,greaterEqual:()=>vd,ifft:()=>Ju,imag:()=>lu,image:()=>Kj,inTopKAsync:()=>G6,irfft:()=>Kd,isFinite:()=>w2,isInf:()=>S2,isNaN:()=>I2,leakyRelu:()=>kd,less:()=>_l,lessEqual:()=>mc,linalg:()=>qj,linspace:()=>v2,localResponseNormalization:()=>k2,log:()=>pi,log1p:()=>Nd,logSigmoid:()=>N2,logSoftmax:()=>T2,logSumExp:()=>$d,logicalAnd:()=>ju,logicalNot:()=>Ed,logicalOr:()=>Rd,logicalXor:()=>_2,losses:()=>jj,lowerBound:()=>$2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Ad,maxPool3d:()=>E2,maxPoolWithArgmax:()=>R2,maximum:()=>Fd,mean:()=>Xu,meshgrid:()=>D2,min:()=>Tl,minimum:()=>Yu,mirrorPad:()=>A2,mod:()=>F2,moments:()=>P2,movingAverage:()=>A6,mul:()=>se,multiRNNCell:()=>O2,multinomial:()=>M2,neg:()=>cr,norm:()=>Ku,notEqual:()=>Pd,oneHot:()=>El,ones:()=>Da,onesLike:()=>L2,op:()=>N,outerProduct:()=>B2,pad:()=>Aa,pad1d:()=>z2,pad2d:()=>V2,pad3d:()=>W2,pad4d:()=>U2,pool:()=>G2,pow:()=>ui,prelu:()=>Md,print:()=>md,prod:()=>H2,raggedGather:()=>K2,raggedRange:()=>q2,raggedTensorToTensor:()=>j2,rand:()=>X2,randomGamma:()=>g1,randomNormal:()=>Ud,randomStandardNormal:()=>x1,randomUniform:()=>dc,randomUniformInt:()=>y1,range:()=>mu,real:()=>ci,reciprocal:()=>b1,relu:()=>du,relu6:()=>Gd,reshape:()=>W,reverse:()=>mo,reverse1d:()=>C1,reverse2d:()=>w1,reverse3d:()=>S1,reverse4d:()=>I1,rfft:()=>hc,round:()=>Hd,rsqrt:()=>v1,scalar:()=>ke,scatterND:()=>P6,searchSorted:()=>$l,selu:()=>k1,separableConv2d:()=>N1,setdiff1dAsync:()=>T1,sigmoid:()=>$a,sign:()=>_1,signal:()=>Hj,sin:()=>$1,sinh:()=>E1,slice:()=>Xe,slice1d:()=>R1,slice2d:()=>D1,slice3d:()=>A1,slice4d:()=>F1,softmax:()=>P1,softplus:()=>_d,spaceToBatchND:()=>Od,sparse:()=>Xj,sparseToDense:()=>L6,spectral:()=>Gj,split:()=>li,sqrt:()=>Dr,square:()=>er,squaredDifference:()=>qd,squeeze:()=>gc,stack:()=>kr,step:()=>jd,stridedSlice:()=>O1,string:()=>Yj,sub:()=>Te,sum:()=>ot,tan:()=>M1,tanh:()=>Nl,tensor:()=>ur,tensor1d:()=>tr,tensor2d:()=>fu,tensor3d:()=>Xd,tensor4d:()=>L1,tensor5d:()=>B1,tensor6d:()=>z1,tensorScatterUpdate:()=>W1,tile:()=>cu,topk:()=>U1,transpose:()=>yc,truncatedNormal:()=>G1,unique:()=>H1,unsortedSegmentSum:()=>K1,unstack:()=>fo,upperBound:()=>q1,variable:()=>j1,where:()=>lo,whereAsync:()=>Qd,zeros:()=>Gr,zerosLike:()=>Ht});var CT=(r,t,e,o=Je)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(I("a",r,t,e),I("b",r,t,e))];case"AddN":return[o.addN(I("tensors",r,t,e))];case"FloorMod":case"Mod":return[o.mod(I("a",r,t,e),I("b",r,t,e))];case"Mul":return[o.mul(I("a",r,t,e),I("b",r,t,e))];case"RealDiv":case"Div":return[o.div(I("a",r,t,e),I("b",r,t,e))];case"DivNoNan":return[o.divNoNan(I("a",r,t,e),I("b",r,t,e))];case"FloorDiv":return[o.floorDiv(I("a",r,t,e),I("b",r,t,e))];case"Sub":return[o.sub(I("a",r,t,e),I("b",r,t,e))];case"Minimum":return[o.minimum(I("a",r,t,e),I("b",r,t,e))];case"Maximum":return[o.maximum(I("a",r,t,e),I("b",r,t,e))];case"Pow":return[o.pow(I("a",r,t,e),I("b",r,t,e))];case"SquaredDifference":return[o.squaredDifference(I("a",r,t,e),I("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var wT=(r,t,e,o=Je)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(I("x",r,t,e))];case"Acos":return[o.acos(I("x",r,t,e))];case"Acosh":return[o.acosh(I("x",r,t,e))];case"Asin":return[o.asin(I("x",r,t,e))];case"Asinh":return[o.asinh(I("x",r,t,e))];case"Atan":return[o.atan(I("x",r,t,e))];case"Atan2":return[o.atan2(I("x",r,t,e),I("y",r,t,e))];case"Atanh":return[o.atanh(I("x",r,t,e))];case"Ceil":return[o.ceil(I("x",r,t,e))];case"Complex":return[o.complex(I("real",r,t,e),I("imag",r,t,e))];case"Cos":return[o.cos(I("x",r,t,e))];case"Cosh":return[o.cosh(I("x",r,t,e))];case"Elu":return[o.elu(I("x",r,t,e))];case"Erf":return[o.erf(I("x",r,t,e))];case"Exp":return[o.exp(I("x",r,t,e))];case"Expm1":return[o.expm1(I("x",r,t,e))];case"Floor":return[o.floor(I("x",r,t,e))];case"Log":return[o.log(I("x",r,t,e))];case"Log1p":return[o.log1p(I("x",r,t,e))];case"Imag":return[o.imag(I("x",r,t,e))];case"Neg":return[o.neg(I("x",r,t,e))];case"Reciprocal":return[o.reciprocal(I("x",r,t,e))];case"Real":return[o.real(I("x",r,t,e))];case"Relu":return[o.relu(I("x",r,t,e))];case"Round":return[o.round(I("x",r,t,e))];case"Selu":return[o.selu(I("x",r,t,e))];case"Sigmoid":return[o.sigmoid(I("x",r,t,e))];case"Sin":return[o.sin(I("x",r,t,e))];case"Sign":return[o.sign(I("x",r,t,e))];case"Sinh":return[o.sinh(I("x",r,t,e))];case"Softplus":return[o.softplus(I("x",r,t,e))];case"Sqrt":return[o.sqrt(I("x",r,t,e))];case"Square":return[o.square(I("x",r,t,e))];case"Tanh":return[o.tanh(I("x",r,t,e))];case"Tan":return[o.tan(I("x",r,t,e))];case"ClipByValue":return[o.clipByValue(I("x",r,t,e),I("clipValueMin",r,t,e),I("clipValueMax",r,t,e))];case"Relu6":return[o.relu6(I("x",r,t,e))];case"Rsqrt":return[o.rsqrt(zt(r.inputNames[0],t,e))];case"LeakyRelu":return[o.leakyRelu(I("x",r,t,e),I("alpha",r,t,e))];case"Prelu":return[o.prelu(I("x",r,t,e),I("alpha",r,t,e))];case"IsNan":return[o.isNaN(zt(r.inputNames[0],t,e))];case"IsInf":return[o.isInf(zt(r.inputNames[0],t,e))];case"IsFinite":return[o.isFinite(zt(r.inputNames[0],t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(r,t,e=""){if(!(typeof r=="number"||typeof t=="number")){y.assert(r.length===t.length,()=>e+` Shapes ${r} and ${t} must match`);for(let o=0;oe+` Shapes ${r} and ${t} must match`)}}}function ST(r){return!(typeof r=="number"||r.some(t=>t<0))}function bc(r,t,e){let o=Sf(r,e),n=!ST(o);if(n&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&t.forEach(s=>{o=Sf(s.shape,o)}),!ST(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(r,t){if(typeof r=="number")return t;if(typeof t=="number")return r;if(r.length!==t.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${t}`);let e=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${t}`);e[o]=n>=0?n:s}return e}var If=class{constructor(t,e,o,n,s,a,i){this.name=t,this.dtype=e,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Rr(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.tensor.id))&&e.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let e=this.tensors[t];if(e.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor}readMany(t){return t.map(e=>this.read(e))}write(t,e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, - because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),Hr(this.elementShape,e.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);o.tensor=e,Rr(e),o.written=!0,this.tensors[t]=o}writeMany(t,e){if(t.length!==e.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${e.length}.`);t.forEach((o,n)=>this.write(o,e[n]))}gather(t,e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${e}`);if(t)t=t.slice(0,this.size());else{t=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(t,fo(e,0))}split(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);let o=0,n=t.map(p=>(o+=p,o));if(o!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to + dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${t}`}function C5(r,t){let e=He(r),o=He(t);return`Input to reshape is a tensor with ${e} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${t}`}function w5(){return"segment ids must be >= 0"}function S5(){return"segment ids are not increasing"}function I5(r,t){return`Segment id ${r} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function v5(r,t,e){return`Bad: indices[${r}] == ${t} out of range [0, ${e})`}var lS={};qe(lS,{collectGatherOpShapeInfo:()=>T5,computeOutShape:()=>N5,segOpComputeOptimalWindowSize:()=>k5});function k5(r,t){let e=!1,o;for(r<=af?(o=r,e=!0):o=Vp(r,Math.floor(Math.sqrt(r)));!e;)o>t||o===r?e=!0:o=Vp(r,o+1);return o}function N5(r,t,e){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(eQp(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function $5(r){return r.map(t=>Zi(t))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Zd,nonMaxSuppressionV4Impl:()=>Jd,nonMaxSuppressionV5Impl:()=>ef,whereImpl:()=>jd});GN();var E5=A();E5.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 fo;(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"})(fo||(fo={}));var xT;(function(r){let t;(function(e){e[e.LEGACY=0]="LEGACY",e[e.V1=1]="V1",e[e.V2=2]="V2"})(t=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(xT||(xT={}));var dS={};function D5(r,t){let e={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:t};dS[r]=e}function uf(r){return dS[r]}function A5(r){delete dS[r]}function I(r,t,e,o,n){let s=t.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?t.inputNames.length+i:i;if(s.type==="tensor")return Bt(t.inputNames[u],e,o,n);if(s.type==="tensors"){let m=t.inputs.slice(i,p);return t.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,e,o,n))}let c=Bt(t.inputNames[u],e,o,n),l=c.dataSync();return s.type==="number"?l[0]:y.toNestedArray(c.shape,l)}let a=t.attrParams[r];return a&&a.value}function Bt(r,t,e,o){let[n,s]=Nr(r,e);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=e.currentContextIds.find(i=>!!t[pf(n,i)]);return a!==void 0?t[pf(n,a)][s]:void 0}function fS(r,t,e){return t[pf(r,e.currentContextId)]}function Ls(r,t){let[e,o,n]=Nr(r,t);return[pf(e,t&&t.currentContextId),o,n]}function pf(r,t){return t?`${r}-${t}`:r}function Nr(r,t){if(r==="")return["",0,void 0];let e=t!=null&&t.parseNodeNameCache!=null;if(e){let s=t.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 e&&t.parseNodeNameCache.set(r,n),n}function Al(r,t,e){let o=I("pad",r,t,e);if(o==="explicit"){o=I("explicitPaddings",r,t,e);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:Wr(r)}var hS={};qe(hS,{json:()=>F5});var F5=[{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 gS={};qe(gS,{json:()=>P5});var P5=[{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 xS={};qe(xS,{json:()=>O5});var O5=[{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 yS={};qe(yS,{json:()=>M5});var M5=[{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 bS={};qe(bS,{json:()=>L5});var L5=[{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 CS={};qe(CS,{json:()=>B5});var B5=[{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 wS={};qe(wS,{json:()=>z5});var z5=[{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 SS={};qe(SS,{json:()=>V5});var V5=[{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 IS={};qe(IS,{json:()=>W5});var W5=[{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 vS={};qe(vS,{json:()=>U5});var U5=[{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 kS={};qe(kS,{json:()=>G5});var G5=[{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 NS={};qe(NS,{json:()=>H5});var H5=[{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 TS={};qe(TS,{json:()=>K5});var K5=[{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 _S={};qe(_S,{json:()=>q5});var q5=[{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:()=>j5});var j5=[{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 ES={};qe(ES,{json:()=>X5});var X5=[{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 RS={};qe(RS,{json:()=>Y5});var Y5=[{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 DS={};qe(DS,{json:()=>Q5});var Q5=[{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 AS={};qe(AS,{json:()=>Z5});var Z5=[{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 Fl=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[hS,gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,$S,ES,RS,DS,AS],e=[].concat(...t.map(o=>o.json));this.opMappers=e.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(t,e={}){let o=t.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={};e!=null&&(c=this.mapSignatureEntries(e.inputs),l=this.mapSignatureEntries(e.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 E=`${C}:${_}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=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={};t.library!=null&&t.library.function!=null&&(d=t.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:e,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(t){return Object.keys(t||{}).reduce((e,o)=>(e[t[o].name]=o,e),{})}mapNode(t){let e=uf(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let o={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:e.outputs};return e.inputs!=null&&(o.inputParams=e.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),e.attrs!=null&&(o.attrParams=e.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=cf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=cf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=xf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=mf(t.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=mf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=gf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=lf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=bf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=hf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=yf(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=df(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=df(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=ff(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=yT(t.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yT(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${t.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(t){let e=t.nodeDef,o=[],n=[],s={};e!=null&&(s=e.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op==="Const"&&n.push(l[m.name]),l),{}));let a=[],i=[];t.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:FS(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=t.ret;t.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(t);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o),e),{}),outputs:t.signature.outputArg.reduce((e,o)=>(e[o.name]=this.mapArgToTensorInfo(o,t.ret),e),{})}}mapArgToTensorInfo(t,e){let o=t.name;return e!=null&&(o=e[o]),{name:o,dtype:t.type}}};function J5(r){let t=A().global;if(typeof t.atob!="undefined")return t.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 bT(r,t){let e=Array.isArray(r)?String.fromCharCode.apply(null,r):J5(r);return t?e:e.toLowerCase()}function cf(r,t,e,o=!1){let n=r[t];return n!=null?bT(n.s,o):e}function lf(r,t,e){let o=r[t];return o?o.b:e}function mf(r,t,e){let o=r[t]||{},n=o.i!=null?o.i:o.f!=null?o.f:e;return typeof n=="number"?n:parseInt(n,10)}function FS(r){switch(typeof r=="string"&&(r=fo[r]),r){case fo.DT_FLOAT:case fo.DT_HALF:return"float32";case fo.DT_INT32:case fo.DT_INT64:case fo.DT_INT8:case fo.DT_UINT8:return"int32";case fo.DT_BOOL:return"bool";case fo.DT_DOUBLE:return"float32";case fo.DT_STRING:return"string";default:return null}}function yT(r,t,e){let o=r[t];return o&&o.func?o.func.name:e}function df(r,t,e){let o=r[t];return o&&o.type?FS(o.type):e}function ff(r,t,e){let o=r[t];return o&&o.list&&o.list.type?o.list.type.map(n=>FS(n)):e}function CT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function hf(r,t,e){let o=r[t];return o&&o.shape?CT(o.shape):e}function gf(r,t,e){let o=r[t];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):e}function xf(r,t,e,o=!1){let n=r[t];return n&&n.list&&n.list.s?n.list.s.map(s=>bT(s,o)):e}function yf(r,t,e){let o=r[t];return o&&o.list&&o.list.shape?o.list.shape.map(n=>CT(n)):e}function bf(r,t,e){let o=r[t];return o&&o.list&&o.list.b?o.list.b:e}var Cf=class{constructor(t,e,o){this.node=t,this.tensorMap=e,this.context=o,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(n=>this.getInput(n)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(t){return Bt(t,this.tensorMap,this.context)}getAttr(t,e){let o=this.node.rawAttrs[t];if(o.tensor!=null)return Bt(t,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return mf(this.node.rawAttrs,t,e);if(o.s!=null)return cf(this.node.rawAttrs,t,e);if(o.b!=null)return lf(this.node.rawAttrs,t,e);if(o.shape!=null)return hf(this.node.rawAttrs,t,e);if(o.type!=null)return df(this.node.rawAttrs,t,e);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return gf(this.node.rawAttrs,t,e);if(o.list.s!=null)return xf(this.node.rawAttrs,t,e);if(o.list.shape!=null)return yf(this.node.rawAttrs,t,e);if(o.list.b!=null)return bf(this.node.rawAttrs,t,e);if(o.list.type!=null)return ff(this.node.rawAttrs,t,e)}return e}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>kw,abs:()=>Qt,acos:()=>Nk,acosh:()=>Tk,add:()=>Ce,addN:()=>_k,all:()=>$k,any:()=>Ek,argMax:()=>Rk,argMin:()=>Dk,asin:()=>Ak,asinh:()=>Fk,atan:()=>Pk,atan2:()=>Ok,atanh:()=>Mk,avgPool:()=>md,avgPool3d:()=>zk,basicLSTMCell:()=>Vk,batchNorm:()=>ru,batchNorm2d:()=>Uk,batchNorm3d:()=>Gk,batchNorm4d:()=>Hk,batchToSpaceND:()=>dd,bincount:()=>fd,bitwiseAnd:()=>Kk,booleanMaskAsync:()=>E6,broadcastArgs:()=>qk,broadcastTo:()=>ou,buffer:()=>me,cast:()=>We,ceil:()=>jk,clipByValue:()=>Xk,clone:()=>Wr,complex:()=>$r,concat:()=>yt,concat1d:()=>Yk,concat2d:()=>Qk,concat3d:()=>Zk,concat4d:()=>Jk,conv1d:()=>e2,conv2d:()=>nu,conv2dTranspose:()=>t2,conv3d:()=>r2,conv3dTranspose:()=>n2,cos:()=>s2,cosh:()=>a2,cosineWindow:()=>_l,cumprod:()=>i2,cumsum:()=>u2,denseBincount:()=>p2,depthToSpace:()=>c2,depthwiseConv2d:()=>oc,diag:()=>l2,dilation2d:()=>m2,div:()=>je,divNoNan:()=>f2,dot:()=>h2,dropout:()=>W6,einsum:()=>su,elu:()=>yd,enclosingPowerOfTwo:()=>Qw,ensureShape:()=>g2,equal:()=>xd,erf:()=>x2,euclideanNorm:()=>C2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>w2,eye:()=>bd,fft:()=>ac,fill:()=>Ea,floor:()=>Cd,floorDiv:()=>ld,fused:()=>Zw,gather:()=>wd,gatherND:()=>z6,greater:()=>zu,greaterEqual:()=>Sd,ifft:()=>Ku,imag:()=>iu,image:()=>Kj,inTopKAsync:()=>G6,irfft:()=>Gd,isFinite:()=>S2,isInf:()=>I2,isNaN:()=>v2,leakyRelu:()=>Id,less:()=>kl,lessEqual:()=>nc,linalg:()=>qj,linspace:()=>k2,localResponseNormalization:()=>N2,log:()=>ui,log1p:()=>vd,logSigmoid:()=>T2,logSoftmax:()=>_2,logSumExp:()=>Td,logicalAnd:()=>Vu,logicalNot:()=>_d,logicalOr:()=>$d,logicalXor:()=>$2,losses:()=>jj,lowerBound:()=>E2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Rd,maxPool3d:()=>R2,maxPoolWithArgmax:()=>D2,maximum:()=>Dd,mean:()=>Wu,meshgrid:()=>A2,min:()=>vl,minimum:()=>Uu,mirrorPad:()=>F2,mod:()=>P2,moments:()=>O2,movingAverage:()=>A6,mul:()=>se,multiRNNCell:()=>M2,multinomial:()=>L2,neg:()=>pr,norm:()=>Bu,notEqual:()=>Ad,oneHot:()=>Tl,ones:()=>Da,onesLike:()=>B2,op:()=>N,outerProduct:()=>z2,pad:()=>Aa,pad1d:()=>V2,pad2d:()=>W2,pad3d:()=>U2,pad4d:()=>G2,pool:()=>H2,pow:()=>ii,prelu:()=>Pd,print:()=>cd,prod:()=>K2,raggedGather:()=>q2,raggedRange:()=>j2,raggedTensorToTensor:()=>X2,rand:()=>Y2,randomGamma:()=>x1,randomNormal:()=>Vd,randomStandardNormal:()=>y1,randomUniform:()=>sc,randomUniformInt:()=>b1,range:()=>uu,real:()=>pi,reciprocal:()=>C1,relu:()=>pu,relu6:()=>Wd,reshape:()=>W,reverse:()=>lo,reverse1d:()=>w1,reverse2d:()=>S1,reverse3d:()=>I1,reverse4d:()=>v1,rfft:()=>ic,round:()=>Ud,rsqrt:()=>k1,scalar:()=>ke,scatterND:()=>P6,searchSorted:()=>Nl,selu:()=>N1,separableConv2d:()=>T1,setdiff1dAsync:()=>_1,sigmoid:()=>$a,sign:()=>$1,signal:()=>Hj,sin:()=>E1,sinh:()=>R1,slice:()=>Xe,slice1d:()=>D1,slice2d:()=>A1,slice3d:()=>F1,slice4d:()=>P1,softmax:()=>O1,softplus:()=>Nd,spaceToBatchND:()=>Fd,sparse:()=>Xj,sparseToDense:()=>L6,spectral:()=>Gj,split:()=>ci,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Hd,squeeze:()=>uc,stack:()=>vr,step:()=>Kd,stridedSlice:()=>M1,string:()=>Yj,sub:()=>Te,sum:()=>ot,tan:()=>L1,tanh:()=>Il,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>cu,tensor3d:()=>qd,tensor4d:()=>B1,tensor5d:()=>z1,tensor6d:()=>V1,tensorScatterUpdate:()=>U1,tile:()=>au,topk:()=>G1,transpose:()=>cc,truncatedNormal:()=>H1,unique:()=>K1,unsortedSegmentSum:()=>q1,unstack:()=>mo,upperBound:()=>j1,variable:()=>X1,where:()=>co,whereAsync:()=>Xd,zeros:()=>Ur,zerosLike:()=>Gt});var wT=(r,t,e,o=Je)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(I("a",r,t,e),I("b",r,t,e))];case"AddN":return[o.addN(I("tensors",r,t,e))];case"FloorMod":case"Mod":return[o.mod(I("a",r,t,e),I("b",r,t,e))];case"Mul":return[o.mul(I("a",r,t,e),I("b",r,t,e))];case"RealDiv":case"Div":return[o.div(I("a",r,t,e),I("b",r,t,e))];case"DivNoNan":return[o.divNoNan(I("a",r,t,e),I("b",r,t,e))];case"FloorDiv":return[o.floorDiv(I("a",r,t,e),I("b",r,t,e))];case"Sub":return[o.sub(I("a",r,t,e),I("b",r,t,e))];case"Minimum":return[o.minimum(I("a",r,t,e),I("b",r,t,e))];case"Maximum":return[o.maximum(I("a",r,t,e),I("b",r,t,e))];case"Pow":return[o.pow(I("a",r,t,e),I("b",r,t,e))];case"SquaredDifference":return[o.squaredDifference(I("a",r,t,e),I("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ST=(r,t,e,o=Je)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(I("x",r,t,e))];case"Acos":return[o.acos(I("x",r,t,e))];case"Acosh":return[o.acosh(I("x",r,t,e))];case"Asin":return[o.asin(I("x",r,t,e))];case"Asinh":return[o.asinh(I("x",r,t,e))];case"Atan":return[o.atan(I("x",r,t,e))];case"Atan2":return[o.atan2(I("x",r,t,e),I("y",r,t,e))];case"Atanh":return[o.atanh(I("x",r,t,e))];case"Ceil":return[o.ceil(I("x",r,t,e))];case"Complex":return[o.complex(I("real",r,t,e),I("imag",r,t,e))];case"Cos":return[o.cos(I("x",r,t,e))];case"Cosh":return[o.cosh(I("x",r,t,e))];case"Elu":return[o.elu(I("x",r,t,e))];case"Erf":return[o.erf(I("x",r,t,e))];case"Exp":return[o.exp(I("x",r,t,e))];case"Expm1":return[o.expm1(I("x",r,t,e))];case"Floor":return[o.floor(I("x",r,t,e))];case"Log":return[o.log(I("x",r,t,e))];case"Log1p":return[o.log1p(I("x",r,t,e))];case"Imag":return[o.imag(I("x",r,t,e))];case"Neg":return[o.neg(I("x",r,t,e))];case"Reciprocal":return[o.reciprocal(I("x",r,t,e))];case"Real":return[o.real(I("x",r,t,e))];case"Relu":return[o.relu(I("x",r,t,e))];case"Round":return[o.round(I("x",r,t,e))];case"Selu":return[o.selu(I("x",r,t,e))];case"Sigmoid":return[o.sigmoid(I("x",r,t,e))];case"Sin":return[o.sin(I("x",r,t,e))];case"Sign":return[o.sign(I("x",r,t,e))];case"Sinh":return[o.sinh(I("x",r,t,e))];case"Softplus":return[o.softplus(I("x",r,t,e))];case"Sqrt":return[o.sqrt(I("x",r,t,e))];case"Square":return[o.square(I("x",r,t,e))];case"Tanh":return[o.tanh(I("x",r,t,e))];case"Tan":return[o.tan(I("x",r,t,e))];case"ClipByValue":return[o.clipByValue(I("x",r,t,e),I("clipValueMin",r,t,e),I("clipValueMax",r,t,e))];case"Relu6":return[o.relu6(I("x",r,t,e))];case"Rsqrt":return[o.rsqrt(Bt(r.inputNames[0],t,e))];case"LeakyRelu":return[o.leakyRelu(I("x",r,t,e),I("alpha",r,t,e))];case"Prelu":return[o.prelu(I("x",r,t,e),I("alpha",r,t,e))];case"IsNan":return[o.isNaN(Bt(r.inputNames[0],t,e))];case"IsInf":return[o.isInf(Bt(r.inputNames[0],t,e))];case"IsFinite":return[o.isFinite(Bt(r.inputNames[0],t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Gr(r,t,e=""){if(!(typeof r=="number"||typeof t=="number")){y.assert(r.length===t.length,()=>e+` Shapes ${r} and ${t} must match`);for(let o=0;oe+` Shapes ${r} and ${t} must match`)}}}function IT(r){return!(typeof r=="number"||r.some(t=>t<0))}function mc(r,t,e){let o=wf(r,e),n=!IT(o);if(n&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&t.forEach(s=>{o=wf(s.shape,o)}),!IT(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function wf(r,t){if(typeof r=="number")return t;if(typeof t=="number")return r;if(r.length!==t.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${t}`);let e=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${t}`);e[o]=n>=0?n:s}return e}var Sf=class{constructor(t,e,o,n,s,a,i){this.name=t,this.dtype=e,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Er(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.tensor.id))&&e.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let e=this.tensors[t];if(e.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor}readMany(t){return t.map(e=>this.read(e))}write(t,e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let o=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, + because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),Gr(this.elementShape,e.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);o.tensor=e,Er(e),o.written=!0,this.tensors[t]=o}writeMany(t,e){if(t.length!==e.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${e.length}.`);t.forEach((o,n)=>this.write(o,e[n]))}gather(t,e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${e}`);if(t)t=t.slice(0,this.size());else{t=[];for(let n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(t,mo(e,0))}split(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);let o=0,n=t.map(p=>(o+=p,o));if(o!==e.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: ${e.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:e.size/o,a=[];De(()=>{e=W(e,[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(e,s.shape,"TensorList shape mismatch: "),Rr(s)}),this.idTensor=ke(0),this.maxNumElements=n,Rr(this.idTensor)}copy(){return new hi([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.id))&&e.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,e,o=-1){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, 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(t,this.elementShape,"TensorList shape mismatch: ");let n=bc(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(a=>W(a,n));return kr(s,0)})}popBack(t,e){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let o=bc(this.elementShape,this.tensors,t),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,t,"TensorList shape mismatch: "),W(n,o)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Hr(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Rr(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 e=new hi([],this.elementShape,this.elementDtype,this.maxNumElements);e.tensors.length=t;for(let o=0;othis.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.`);Hr(this.tensors[t].shape,e,"TensorList shape mismatch: ");let n=bc(this.elementShape,this.tensors,e);return W(this.tensors[t],n)}setItem(t,e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.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.`);Hr(this.elementShape,e.shape,"TensorList shape mismatch: "),Rr(e),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=e}gather(t,e,o){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);Hr(this.elementShape,o,"TensorList shape mismatch: "),t=t.slice(0,this.size());let n=bc(this.elementShape,this.tensors,o);return t.length===0?ur([],[0].concat(n)):De(()=>{let s=t.map(a=>W(this.tensors[a],n));return kr(s,0)})}concat(t,e){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Hr(this.elementShape,e,"TensorList shape mismatch: ");let o=bc(this.elementShape,this.tensors,e);return this.size()===0?ur([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return bt(n,0)})}};function IT(r,t,e){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!==e)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`);let n=r.shape.slice(1);Hr(n,t,"TensorList shape mismatch: ");let s=fo(r);return new hi(s,t,o)}function vT(r,t,e,o){return new hi([],r,t,o)}function kT(r,t,e,o){if(t.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${r.shape[0]}`);let n=Math.max(...t);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new hi([],e,r.dtype,o),a=fo(r,0);return t.forEach((i,p)=>{s.setItem(i,a[p])}),s}function NT(r,t,e){let o=0,n=t.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${o}, and tensor's shape is: ${e.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let s=o===0?0:e.size/o,a=[];De(()=>{e=W(e,[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}`);Gr(e,s.shape,"TensorList shape mismatch: "),Er(s)}),this.idTensor=ke(0),this.maxNumElements=n,Er(this.idTensor)}copy(){return new r([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.id))&&e.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,e,o=-1){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, 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.`);Gr(t,this.elementShape,"TensorList shape mismatch: ");let n=mc(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(s,0)})}popBack(t,e){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let o=mc(this.elementShape,this.tensors,t),n=this.tensors.pop();return n.kept=!1,Gr(n.shape,t,"TensorList shape mismatch: "),W(n,o)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Gr(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Er(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 e=new r([],this.elementShape,this.elementDtype,this.maxNumElements);e.tensors.length=t;for(let o=0;othis.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.`);Gr(this.tensors[t].shape,e,"TensorList shape mismatch: ");let n=mc(this.elementShape,this.tensors,e);return W(this.tensors[t],n)}setItem(t,e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.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.`);Gr(this.elementShape,e.shape,"TensorList shape mismatch: "),Er(e),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=e}gather(t,e,o){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);Gr(this.elementShape,o,"TensorList shape mismatch: "),t=t.slice(0,this.size());let n=mc(this.elementShape,this.tensors,o);return t.length===0?ar([],[0].concat(n)):De(()=>{let s=t.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(t,e){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Gr(this.elementShape,e,"TensorList shape mismatch: ");let o=mc(this.elementShape,this.tensors,e);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function vT(r,t,e){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!==e)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`);let n=r.shape.slice(1);Gr(n,t,"TensorList shape mismatch: ");let s=mo(r);return new dc(s,t,o)}function kT(r,t,e,o){return new dc([],r,t,o)}function NT(r,t,e,o){if(t.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${r.shape[0]}`);let n=Math.max(...t);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new dc([],e,r.dtype,o),a=mo(r,0);return t.forEach((i,p)=>{s.setItem(i,a[p])}),s}function TT(r,t,e){let o=0,n=t.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,e),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,t,e),n=I("elseBranch",r,t,e),s=I("cond",r,t,e),a=I("args",r,t,e);return(await s.data())[0]?e.functionMap[o].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap):e.functionMap[n].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap)}case"While":case"StatelessWhile":{let o=I("body",r,t,e),n=I("cond",r,t,e),s=I("args",r,t,e),a=await e.functionMap[n].executeFunctionAsync(s,e.tensorArrayMap,e.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 e.functionMap[o].executeFunctionAsync(u,e.tensorArrayMap,e.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 e.functionMap[n].executeFunctionAsync(u,e.tensorArrayMap,e.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,t,e);return[Bs(o)]}case"Switch":{let o=I("pred",r,t,e),n=I("data",r,t,e);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>zt(n,t,e)!==void 0);if(o){let n=zt(o,t,e);return[Bs(n)]}return}case"Enter":{let o=I("frameName",r,t,e),n=I("tensor",r,t,e);return e.enterFrame(o),[Bs(n)]}case"Exit":{let o=I("tensor",r,t,e);return e.exitFrame(),[Bs(o)]}case"NextIteration":{let o=I("tensor",r,t,e);return e.nextIteration(),[Bs(o)]}case"TensorArrayV3":{let o=I("size",r,t,e),n=I("dtype",r,t,e),s=I("elementShape",r,t,e),a=I("dynamicSize",r,t,e),i=I("clearAfterRead",r,t,e),p=I("identicalElementShapes",r,t,e),u=I("name",r,t,e),c=new If(u,n,o,s,p,a,i);return e.addTensorArray(c),[c.idTensor,ke(1)]}case"TensorArrayWriteV3":{let o=I("tensorArrayId",r,t,e),n=I("index",r,t,e),s=I("tensor",r,t,e),a=e.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=I("tensorArrayId",r,t,e),n=I("index",r,t,e);return[e.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=I("tensorArrayId",r,t,e),n=I("indices",r,t,e),s=I("dtype",r,t,e);return[e.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=I("tensorArrayId",r,t,e),n=I("indices",r,t,e),s=I("tensor",r,t,e),a=e.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id),s=I("dtype",r,t,e);return[n.concat(s)]}case"TensorArraySplitV3":{let o=I("tensorArrayId",r,t,e),n=I("tensor",r,t,e),s=I("lengths",r,t,e),a=e.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id);return[ke(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=I("tensorListId",r,t,e),n=I("index",r,t,e),s=I("tensor",r,t,e),a=e.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=I("tensorListId",r,t,e),n=I("index",r,t,e),s=I("elementShape",r,t,e),a=I("elementDType",r,t,e);return[e.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=I("indices",r,t,e),n=I("tensor",r,t,e),s=I("elementShape",r,t,e),a=I("numElements",r,t,e),i=kT(n,o,s,a);return e.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=I("elementShape",r,t,e),n=I("elementDType",r,t,e),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=I(s,r,t,e),i=r.op==="TensorListReserve"?-1:a,p=vT(o,n,a,i);return e.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=I("tensorListId",r,t,e),n=I("indices",r,t,e),s=I("elementShape",r,t,e),a=I("elementDType",r,t,e);return[e.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=I("tensorListId",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e),a=I("numElements",r,t,e);return[e.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=I("tensor",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e),a=IT(o,n,s);return e.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=I("tensorListId",r,t,e),n=e.getTensorList(o.id),s=I("dtype",r,t,e),a=I("elementShape",r,t,e);return[n.concat(s,a)]}case"TensorListPushBack":{let o=I("tensorListId",r,t,e),n=I("tensor",r,t,e),s=e.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=I("tensorListId",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e);return[e.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=I("tensor",r,t,e),n=I("elementShape",r,t,e),s=I("lengths",r,t,e),a=NT(o,s,n);return e.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,t,e),n=e.getTensorList(o.id);return[ke(n.size(),"int32")]}case"TensorListResize":{let o=I("tensorListId",r,t,e),n=I("size",r,t,e),a=e.getTensorList(o.id).resize(n);return e.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function _T(r,t,e){let[o,n]=I("fusedOps",r,t,e),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=I("numArgs",r,t,e);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,t,e),l=Ol(r,t,e),m=I("dataFormat",r,t,e).toUpperCase(),d=I("dilations",r,t,e),[f,h]=I("args",r,t,e);a&&(h=f,f=void 0);let g=I("leakyreluAlpha",r,t,e);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var $T=(r,t,e,o=Je)=>{switch(r.op){case"Conv1D":{let n=I("stride",r,t,e),s=I("pad",r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilation",r,t,e);return[o.conv1d(I("x",r,t,e),I("filter",r,t,e),n,s,a,i)]}case"Conv2D":{let n=I("strides",r,t,e),s=Ol(r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilations",r,t,e);return[o.conv2d(I("x",r,t,e),I("filter",r,t,e),[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}=_T(r,t,e);return[o.fused.conv2d({x:I("x",r,t,e),filter:I("filter",r,t,e),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}=_T(r,t,e);return[o.fused.depthwiseConv2d({x:I("x",r,t,e),filter:I("filter",r,t,e),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,t,e),s=I("strides",r,t,e),a=Ol(r,t,e);return[o.conv2dTranspose(I("x",r,t,e),I("filter",r,t,e),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=I("strides",r,t,e),s=Ol(r,t,e),a=I("dilations",r,t,e),i=I("dataFormat",r,t,e).toUpperCase();return[o.depthwiseConv2d(I("input",r,t,e),I("filter",r,t,e),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilations",r,t,e);return[o.conv3d(I("x",r,t,e),I("filter",r,t,e),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.avgPool(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.maxPool(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e),i=I("includeBatchInIndex",r,t,e),{result:p,indexes:u}=o.maxPoolWithArgmax(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.avgPool3d(I("x",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.maxPool3d(I("x",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("dilations",r,t,e),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I("x",r,t,e),I("filter",r,t,e),[i,p],s,[u,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ET=(r,t,e,o=Je)=>{switch(r.op){case"Fill":{let n=I("shape",r,t,e),s=I("dtype",r,t,e),a=I("value",r,t,e);return[o.fill(n,a,s)]}case"LinSpace":{let n=I("start",r,t,e),s=I("stop",r,t,e),a=I("num",r,t,e);return[o.linspace(n,s,a)]}case"Multinomial":{let n=I("logits",r,t,e),s=I("numSamples",r,t,e),a=I("seed",r,t,e);return[o.multinomial(n,s,a)]}case"OneHot":{let n=I("indices",r,t,e),s=I("depth",r,t,e),a=I("onValue",r,t,e),i=I("offValue",r,t,e),p=I("dtype",r,t,e);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(I("shape",r,t,e),I("dtype",r,t,e))];case"OnesLike":return[o.onesLike(I("x",r,t,e))];case"RandomStandardNormal":return[o.randomStandardNormal(I("shape",r,t,e),I("dtype",r,t,e),I("seed",r,t,e))];case"RandomUniform":return[o.randomUniform(I("shape",r,t,e),I("minval",r,t,e),I("maxval",r,t,e),I("dtype",r,t,e))];case"RandomUniformInt":return[o.randomUniformInt(I("shape",r,t,e),I("minval",r,t,e),I("maxval",r,t,e),I("seed",r,t,e))];case"Range":{let n=I("start",r,t,e),s=I("stop",r,t,e),a=I("step",r,t,e);return[o.range(n,s,a,I("dtype",r,t,e))]}case"TruncatedNormal":{let n=I("shape",r,t,e),s=I("mean",r,t,e),a=I("stdDev",r,t,e),i=I("seed",r,t,e);return[o.truncatedNormal(n,s,a,I("dtype",r,t,e),i)]}case"Zeros":return[o.zeros(I("shape",r,t,e),I("dtype",r,t,e))];case"ZerosLike":return[o.zerosLike(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PS(r,t,e){let o=I("boxes",r,t,e),n=I("scores",r,t,e),s=I("maxOutputSize",r,t,e),a=I("iouThreshold",r,t,e),i=I("scoreThreshold",r,t,e),p=I("softNmsSigma",r,t,e);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var RT=async(r,t,e,o,n=Je)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=PS(r,t,e),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}=PS(r,t,e),c=I("padToMaxOutputSize",r,t,e),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}=PS(r,t,e);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(I("condition",r,t,e),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(I("x",r,t,e),I("y",r,t,e));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var DT=(r,t,e,o=Je)=>{switch(r.op){case"LowerBound":{let n=I("sortedSequence",r,t,e),s=I("values",r,t,e);return[o.lowerBound(n,s)]}case"TopKV2":{let n=I("x",r,t,e),s=I("k",r,t,e),a=I("sorted",r,t,e),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=I("sortedSequence",r,t,e),s=I("values",r,t,e);return[o.upperBound(n,s)]}case"Unique":{let n=I("x",r,t,e),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=I("x",r,t,e),s=I("axis",r,t,e),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var AT=(r,t,e,o=Je)=>{switch(r.op){case"Const":return t[r.name];case"PlaceholderWithDefault":let n=I("default",r,t,e);return[zt(r.name,t,e)||n];case"Placeholder":return[zt(r.name,t,e)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,t,e);return[Bs(c)]}case"IdentityN":return I("x",r,t,e).map(c=>Bs(c));case"Snapshot":let s=I("x",r,t,e);return[Bs(s)];case"Shape":return[o.tensor1d(I("x",r,t,e).shape,"int32")];case"ShapeN":return I("x",r,t,e).map(c=>o.tensor1d(c.shape));case"Size":return[o.scalar(I("x",r,t,e).size,"int32")];case"Rank":return[o.scalar(I("x",r,t,e).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=I("x",r,t,e),i=I("data",r,t,e),p=I("message",r,t,e),u=I("summarize",r,t,e);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let c=0;ct.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),"int32")}async import(t,e){this.checkKeyAndValueTensor(t,e);let o=await t.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=fo(e),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,t,e),a=I("valueDType",r,t,e),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,t,e,o),s=I("keys",r,t,e),a=I("values",r,t,e);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=I("tableHandle",r,t,e,o),s=I("keys",r,t,e),a=I("defaultValue",r,t,e);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=I("tableHandle",r,t,e,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var PT=(r,t,e,o=Je)=>{switch(r.op){case"ResizeBilinear":{let n=I("images",r,t,e),s=I("size",r,t,e),a=I("alignCorners",r,t,e),i=I("halfPixelCenters",r,t,e);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=I("images",r,t,e),s=I("size",r,t,e),a=I("alignCorners",r,t,e),i=I("halfPixelCenters",r,t,e);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=I("image",r,t,e),s=I("boxes",r,t,e),a=I("boxInd",r,t,e),i=I("cropSize",r,t,e),p=I("method",r,t,e),u=I("extrapolationValue",r,t,e);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=I("images",r,t,e),s=I("transforms",r,t,e),a=I("outputShape",r,t,e),i=I("fillValue",r,t,e),p=I("interpolation",r,t,e),u=I("fillMode",r,t,e);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var OT=(r,t,e,o=Je)=>{switch(r.op){case"Equal":return[o.equal(I("a",r,t,e),I("b",r,t,e))];case"NotEqual":return[o.notEqual(I("a",r,t,e),I("b",r,t,e))];case"Greater":return[o.greater(I("a",r,t,e),I("b",r,t,e))];case"GreaterEqual":return[o.greaterEqual(I("a",r,t,e),I("b",r,t,e))];case"Less":return[o.less(I("a",r,t,e),I("b",r,t,e))];case"LessEqual":return[o.lessEqual(I("a",r,t,e),I("b",r,t,e))];case"LogicalAnd":return[o.logicalAnd(I("a",r,t,e),I("b",r,t,e))];case"LogicalNot":return[o.logicalNot(I("a",r,t,e))];case"LogicalOr":return[o.logicalOr(I("a",r,t,e),I("b",r,t,e))];case"Select":case"SelectV2":return[o.where(I("condition",r,t,e),I("a",r,t,e),I("b",r,t,e))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,t,e),I("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,t,e,o=Je)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(I("a",r,t,e),I("b",r,t,e),I("transposeA",r,t,e),I("transposeB",r,t,e))];case"Einsum":return[o.einsum(I("equation",r,t,e),...I("tensors",r,t,e))];case"Transpose":return[o.transpose(I("x",r,t,e),I("perm",r,t,e))];case"_FusedMatMul":let[n,s]=I("fusedOps",r,t,e),a=n==="biasadd",i=s==="prelu",p=I("numArgs",r,t,e),u=I("leakyreluAlpha",r,t,e);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,t,e);return[o.fused.matMul({a:I("a",r,t,e),b:I("b",r,t,e),transposeA:I("transposeA",r,t,e),transposeB:I("transposeB",r,t,e),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,t,e),I("numLower",r,t,e),I("numUpper",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LT=(r,t,e,o=Je)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(I("x",r,t,e),I("axis",r,t,e),I("keepDims",r,t,e))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(I("x",r,t,e),I("mean",r,t,e),I("variance",r,t,e),I("offset",r,t,e),I("scale",r,t,e),I("epsilon",r,t,e))];case"FusedBatchNormV3":return[o.batchNorm(I("x",r,t,e),I("mean",r,t,e),I("variance",r,t,e),I("offset",r,t,e),I("scale",r,t,e),I("epsilon",r,t,e))];case"LRN":return[o.localResponseNormalization(I("x",r,t,e),I("radius",r,t,e),I("bias",r,t,e),I("alpha",r,t,e),I("beta",r,t,e))];case"Softmax":return[o.softmax(I("x",r,t,e))];case"LogSoftmax":return[o.logSoftmax(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,t,e,o=Je)=>{switch(r.op){case"RaggedGather":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I("paramsNestedSplits",r,t,e),I("paramsDenseValues",r,t,e),I("indices",r,t,e),I("outputRaggedRank",r,t,e));return n.concat(s)}case"RaggedRange":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I("starts",r,t,e),I("limits",r,t,e),I("splits",r,t,e));return[n,s]}case"RaggedTensorToTensor":return[o.raggedTensorToTensor(I("shape",r,t,e),I("values",r,t,e),I("defaultValue",r,t,e),I("rowPartitionTensors",r,t,e),I("rowPartitionTypes",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,t,e,o=Je)=>{switch(r.op){case"Max":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.max(I("x",r,t,e),i,p)]}case"Mean":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.mean(I("x",r,t,e),i,p)]}case"Min":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.min(I("x",r,t,e),i,p)]}case"Sum":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.sum(I("x",r,t,e),i,p)]}case"All":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.all(I("x",r,t,e),i,p)]}case"Any":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.any(I("x",r,t,e),i,p)]}case"ArgMax":{let i=I("axis",r,t,e);return[o.argMax(I("x",r,t,e),i)]}case"ArgMin":{let i=I("axis",r,t,e);return[o.argMin(I("x",r,t,e),i)]}case"Prod":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.prod(I("x",r,t,e),i,p)]}case"Cumprod":{let i=I("axis",r,t,e),p=I("exclusive",r,t,e),u=I("reverse",r,t,e);return[o.cumprod(I("x",r,t,e),i,p,u)]}case"Cumsum":{let i=I("axis",r,t,e),p=I("exclusive",r,t,e),u=I("reverse",r,t,e);return[o.cumsum(I("x",r,t,e),i,p,u)]}case"Bincount":let n=I("x",r,t,e),s=I("weights",r,t,e),a=I("size",r,t,e);return[o.bincount(n,s,a)];case"DenseBincount":{let i=I("x",r,t,e),p=I("weights",r,t,e),u=I("size",r,t,e),c=I("binaryOutput",r,t,e);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VT=(r,t,e,o=Je)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=I("n",r,t,e),s=I("axis",r,t,e),a=I("tensors",r,t,e);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=I("x",r,t,e),s=I("indices",r,t,e);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=I("axis",r,t,e),s=I("batchDims",r,t,e),a=I("x",r,t,e),i=I("indices",r,t,e);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=I("dims",r,t,e),s=[];for(let i=0;i{let n=I("axis",r,t,e),s=I("tensors",r,t,e),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,t,e),s=I("tensor",r,t,e);return o.unstack(s,n)}case"Tile":{let n=I("reps",r,t,e);return[o.tile(I("x",r,t,e),n)]}case"Split":case"SplitV":{let n=I("axis",r,t,e),s=I("numOrSizeSplits",r,t,e),a=I("x",r,t,e);return o.split(a,s,n)}case"ScatterNd":{let n=I("indices",r,t,e),s=I("values",r,t,e),a=I("shape",r,t,e);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=I("x",r,t,e),s=I("indices",r,t,e);return[o.gatherND(n,s)]}case"SparseToDense":{let n=I("sparseIndices",r,t,e),s=I("outputShape",r,t,e),a=I("sparseValues",r,t,e),i=I("defaultValue",r,t,e);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case"TensorScatterUpdate":{let n=I("indices",r,t,e),s=I("values",r,t,e),a=I("tensor",r,t,e);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,t,e,o=Je)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I("indices",r,t,e),I("values",r,t,e),I("denseShape",r,t,e),I("defaultValue",r,t,e));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I("inputIndices",r,t,e),I("inputShape",r,t,e),I("newShape",r,t,e));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(I("data",r,t,e),I("indices",r,t,e),I("segmentIds",r,t,e))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(I("data",r,t,e),I("indices",r,t,e),I("segmentIds",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,t,e,o=Je)=>{switch(r.op){case"FFT":return[o.fft(I("x",r,t,e))];case"IFFT":return[o.ifft(I("x",r,t,e))];case"RFFT":return[o.rfft(I("x",r,t,e))];case"IRFFT":return[o.irfft(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,t,e,o=Je)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,t,e),I("pattern",r,t,e),I("rewrite",r,t,e),I("replaceGlobal",r,t,e))];case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I("data",r,t,e),I("dataSplits",r,t,e),I("separator",r,t,e),I("nGramWidths",r,t,e),I("leftPad",r,t,e),I("rightPad",r,t,e),I("padWidth",r,t,e),I("preserveShortSequences",r,t,e));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I("input",r,t,e),I("delimiter",r,t,e),I("skipEmpty",r,t,e));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(I("input",r,t,e),I("numBuckets",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,t,e,o=Je)=>{switch(r.op){case"Cast":return[o.cast(I("x",r,t,e),I("dtype",r,t,e))];case"ExpandDims":{let n=I("axis",r,t,e);return[o.expandDims(I("x",r,t,e),n)]}case"Squeeze":{let n=I("axis",r,t,e);return[o.squeeze(I("x",r,t,e),n)]}case"Reshape":return[o.reshape(I("x",r,t,e),I("shape",r,t,e))];case"EnsureShape":return[o.ensureShape(I("x",r,t,e),I("shape",r,t,e))];case"MirrorPad":return[o.mirrorPad(I("x",r,t,e),I("padding",r,t,e),I("mode",r,t,e))];case"PadV2":case"Pad":return[o.pad(I("x",r,t,e),I("padding",r,t,e),I("constantValue",r,t,e))];case"SpaceToBatchND":{let n=I("blockShape",r,t,e),s=I("paddings",r,t,e);return[o.spaceToBatchND(I("x",r,t,e),n,s)]}case"BatchToSpaceND":{let n=I("blockShape",r,t,e),s=I("crops",r,t,e);return[o.batchToSpaceND(I("x",r,t,e),n,s)]}case"DepthToSpace":{let n=I("blockSize",r,t,e),s=I("dataFormat",r,t,e).toUpperCase();return[o.depthToSpace(I("x",r,t,e),n,s)]}case"BroadcastTo":return[o.broadcastTo(I("x",r,t,e),I("shape",r,t,e))];case"BroadcastArgs":return[o.broadcastArgs(I("s0",r,t,e),I("s1",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,t,e,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>CT(a,i,p));case"basic_math":return n(()=>wT(a,i,p));case"control":return TT(a,i,p);case"convolution":return n(()=>$T(a,i,p));case"creation":return n(()=>ET(a,i,p));case"dynamic":return RT(a,i,p);case"evaluation":return n(()=>DT(a,i,p));case"image":return n(()=>PT(a,i,p));case"graph":return n(()=>AT(a,i,p));case"logical":return n(()=>OT(a,i,p));case"matrices":return n(()=>MT(a,i,p));case"normalization":return n(()=>LT(a,i,p));case"ragged":return n(()=>BT(a,i,p));case"reduction":return n(()=>zT(a,i,p));case"slice_join":return n(()=>VT(a,i,p));case"sparse":return n(()=>WT(a,i,p));case"spectral":return n(()=>UT(a,i,p));case"string":return n(()=>GT(a,i,p));case"transformation":return n(()=>HT(a,i,p));case"hash_table":return FT(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,t,e);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Ll=class{constructor(t={},e={},o={},n={},s){this.weightMap=t,this.tensorArrayMap=e,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(t,e){return{id:t,frameName:e,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let e=0;ee.id===0&&e.iterationId===0?"":`${e.frameName}-${e.iterationId}`).join("/"):""}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),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 t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(let e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)}};function MS(r,t,e,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Tr(m)[0]));o=o||[];let c=new Set(o.map(m=>Tr(m.name)[0])),l=[...t];for(;l.length>0;){let m=l.pop();if((gu(m)||k8(m)||N8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),e[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:t,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function KT(r,t){let{usedNodes:e,inputs:o}=t,n=Object.keys(o).map(g=>Tr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>e.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=C8(f,p);return w8(h,p),h}function C8(r,t){let e=new Map(r.map(a=>[a.name,a])),o=t.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=e.get(a);for(let p of i.children)!e.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var Cc=class extends Error{constructor(t){super(`NodesExecutionOrderError: ${t}`)}};function w8(r,t){let e=new Map(r.map((i,p)=>[i.name,p])),o=new Set(t.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(!e.has(p.name))throw new Cc(`Child ${p.name} of node ${i.name} is unreachable.`);if(e.get(i.name)>e.get(p.name))throw new Cc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!e.has(p.name))throw new Cc(`Input ${p.name} of node ${i.name} is unreachable.`);if(e.get(p.name)>e.get(i.name))throw new Cc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function qT(r){let t=new Map(r.map((i,p)=>[i.name,p])),e=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>gu(i)?e:p),n=i=>{let p=o[t.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;it[o].map(n=>n.id));this._weightIds=[].concat(...e),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 e=t.signatureKey||t.name;return t.defaultOutput?`${e}:${t.defaultOutput}`:e})}get functions(){return Object.keys(this._functions).reduce((t,e)=>(t[e]=this._functions[e].signature,t),{})}constructor(t,e){this.graph=t,this.parent=e,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(o=>{this._functionExecutorMap[o]=new lp(t.functions[o],this)})}getCompilationKey(t,e){let o=t.map(s=>s.name).sort(),n=e.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(t,e){let o=MS(t,e,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=e.map(l=>l.name),c=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=KT(this.graph,o),p=qT(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(t){if(t==null)return null;let e=t.clone();return Rr(e),e}cloneTensorList(t){return t?t.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([e,o])=>[e,this.cloneTensorList(o)]))}execute(t,e){this.disposeIntermediateTensors(),t=this.mapInputs(t);let o=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);let n=o.map(m=>this.graph.nodes[Tr(m)[0]]),s=e.map(m=>Tr(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(t,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 Ll(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(x=>{let[b,C]=Tr(x,m),S=[];S[C]=t[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=OS(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),e.map(x=>zt(x,d,m))})}getFrozenTensorIds(t){let e=[].concat.apply([],Object.keys(t).map(o=>t[o]).map(o=>o.map(n=>n.id)));return new Set(e)}checkTensorForDisposal(t,e,o,n,s,a,i){if(!(gu(e)||a.has(t))){for(let p of o[t])p!=null&&(i[p.id]=(i[p.id]||0)+e.children.length);for(let p of e.inputs){if(gu(p))continue;let u=fS(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(t,e,o,n,s,a){function i(p){return gu(p)||s.has(p.name)}if(!(gu(t)||a==null))for(let p of a){if(i(p))continue;let u=fS(p.name,e,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(t,e){return this._executeAsync(t,e)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let e of t)e&&!e.isDisposed&&e.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,e,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ll(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(t,a,e,o),p=e.map(m=>zt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(t).map(m=>t[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(t,e,o){let n=t.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,e,o)}async executeWithControlFlow(t,e,o,n){let s=Object.keys(t),a=s.map(S=>this.graph.nodes[Tr(S)[0]]),i=o.map(S=>Tr(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}=MS(t,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:e.currentContext})),h=Object.assign({},this.weightMap);Object.keys(t).forEach(S=>{let[k,_]=Tr(S),E=[];E[_]=t[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,e,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=>!gu(S)&&!zt(S.name,h,e)).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(t,e,o,n,s,a,i,p,u){let c=[];for(;e.length>0;){let l=e.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=OS(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,e,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,e,o,n,s,u))}else this.processChildNodes(l.node,e,o,n,s,u)}return c}processChildNodes(t,e,o,n,s,a){t.children.forEach(i=>{let[p]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!zt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!zt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(e=>e.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(e=>{let o=t[e],[n]=Tr(e),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(t){var e,o;let n={};for(let s in t){let a=(o=(e=this._signature)===null||e===void 0?void 0:e.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=t[s]:n[s]=t[s]}return n}checkInputs(t){let e=Object.keys(t).filter(o=>{let[n]=Tr(o);return this.graph.nodes[n]==null});if(e.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${e}] that are not part of graph`)}mapOutputs(t){return t.map(e=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[e];return s!=null?s.name:e},{})}checkOutputs(t){t.forEach(e=>{let[o]=Tr(e);if(!this.graph.nodes[o])throw new Error(`The output '${e}' is not found in the graph`)})}};var kf=class{constructor(t={},e={}){this.hashTableNameToHandle=t,this.hashTableMap=e}addHashTable(t,e){this.hashTableNameToHandle[t]=e.handle,this.hashTableMap[e.id]=e}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var T8="?tfjs-format=file",_8="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(t,e={},o=fi){this.modelUrl=t,this.loadOptions=e,this.version="n/a",this.io=o,e==null&&(this.loadOptions={}),this.resourceManager=new kf}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(t,this.loadOptions);else{let e=this.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(this.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error(`Found more than one (${e.length}) load handlers for URL '${[t]}'`);this.handler=e[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 t=this.handler.load();return y.isPromise(t)?t.then(e=>this.loadSync(e)):this.loadSync(t)}loadSync(t){this.artifacts=t;let e=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${e.versions.producer}.${e.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new lp(Ml.Instance.transformGraph(e,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let s=Ml.Instance.transformGraph(t.modelInitializer);this.initializer=new lp(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=t.initializerSignature}return!0}async save(t,e){if(typeof t=="string"){let o=this.io.getSaveHandlers(t);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${t}'`);t=o[0]}if(t.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return t.save(this.artifacts)}addStructuredOutputNames(t){if(this.structuredOutputKeys){let e=t instanceof ut?[t]:t,o={};return e.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return t}predict(t,e){let o=this.execute(t,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(t,e){let o=await this.executeAsync(t,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(t){var e;if(!(t instanceof ut)&&!Array.isArray(t)){let s=(e=this.signature)===null||e===void 0?void 0:e.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(t[a]=this.resourceIdToCapturedInput[i.resourceId])}return t}t=Array.isArray(t)?t:[t];let o=Object.keys(this.resourceIdToCapturedInput).length;if(t.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 ${t.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]=t[n++],s},{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}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(t){if(this.resourceIdToCapturedInput={},this.initializerSignature){let e=this.initializerSignature.outputs,o=Object.keys(e);for(let n=0;n1?o:o[0]}async executeAsync(t,e){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let o=await this.executor.executeAsync(t,e);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((e,o)=>(e[o]=[t[o]],e),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Mt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function $8(r,t={},e=fi){if(r==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 r=="string"&&(r=R8(r));let o=new Bl(r,t,e);return await o.load(),o}function E8(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 t;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=fi.getWeightSpecs(o.weightsManifest),a=fi.getModelArtifactsForJSONSync(o,s,n);t=fi.fromMemorySync(a)}else if("load"in r)t=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)t=fi.fromMemorySync(r);else throw new Error("Unknown model format");let e=new Bl(t);return e.load(),e}function R8(r){return r.endsWith("/")||(r=r+"/"),`${r}${_8}${T8}`}var D8="4.11.0";function Q(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var A8=Wt.whereImpl,xu=class extends ao{nextDataId(){return xu.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new zo(this,pr())}write(t,e,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=wf(s,e),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,t,e),n=I("elseBranch",r,t,e),s=I("cond",r,t,e),a=I("args",r,t,e);return(await s.data())[0]?e.functionMap[o].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap):e.functionMap[n].executeFunctionAsync(a,e.tensorArrayMap,e.tensorListMap)}case"While":case"StatelessWhile":{let o=I("body",r,t,e),n=I("cond",r,t,e),s=I("args",r,t,e),a=await e.functionMap[n].executeFunctionAsync(s,e.tensorArrayMap,e.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 e.functionMap[o].executeFunctionAsync(u,e.tensorArrayMap,e.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 e.functionMap[n].executeFunctionAsync(u,e.tensorArrayMap,e.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,t,e);return[Bs(o)]}case"Switch":{let o=I("pred",r,t,e),n=I("data",r,t,e);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,t,e)!==void 0);if(o){let n=Bt(o,t,e);return[Bs(n)]}return}case"Enter":{let o=I("frameName",r,t,e),n=I("tensor",r,t,e);return e.enterFrame(o),[Bs(n)]}case"Exit":{let o=I("tensor",r,t,e);return e.exitFrame(),[Bs(o)]}case"NextIteration":{let o=I("tensor",r,t,e);return e.nextIteration(),[Bs(o)]}case"TensorArrayV3":{let o=I("size",r,t,e),n=I("dtype",r,t,e),s=I("elementShape",r,t,e),a=I("dynamicSize",r,t,e),i=I("clearAfterRead",r,t,e),p=I("identicalElementShapes",r,t,e),u=I("name",r,t,e),c=new Sf(u,n,o,s,p,a,i);return e.addTensorArray(c),[c.idTensor,ke(1)]}case"TensorArrayWriteV3":{let o=I("tensorArrayId",r,t,e),n=I("index",r,t,e),s=I("tensor",r,t,e),a=e.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=I("tensorArrayId",r,t,e),n=I("index",r,t,e);return[e.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=I("tensorArrayId",r,t,e),n=I("indices",r,t,e),s=I("dtype",r,t,e);return[e.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=I("tensorArrayId",r,t,e),n=I("indices",r,t,e),s=I("tensor",r,t,e),a=e.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id),s=I("dtype",r,t,e);return[n.concat(s)]}case"TensorArraySplitV3":{let o=I("tensorArrayId",r,t,e),n=I("tensor",r,t,e),s=I("lengths",r,t,e),a=e.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id);return[ke(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=I("tensorArrayId",r,t,e),n=e.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=I("tensorListId",r,t,e),n=I("index",r,t,e),s=I("tensor",r,t,e),a=e.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=I("tensorListId",r,t,e),n=I("index",r,t,e),s=I("elementShape",r,t,e),a=I("elementDType",r,t,e);return[e.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=I("indices",r,t,e),n=I("tensor",r,t,e),s=I("elementShape",r,t,e),a=I("numElements",r,t,e),i=NT(n,o,s,a);return e.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=I("elementShape",r,t,e),n=I("elementDType",r,t,e),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=I(s,r,t,e),i=r.op==="TensorListReserve"?-1:a,p=kT(o,n,a,i);return e.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=I("tensorListId",r,t,e),n=I("indices",r,t,e),s=I("elementShape",r,t,e),a=I("elementDType",r,t,e);return[e.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=I("tensorListId",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e),a=I("numElements",r,t,e);return[e.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=I("tensor",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e),a=vT(o,n,s);return e.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=I("tensorListId",r,t,e),n=e.getTensorList(o.id),s=I("dtype",r,t,e),a=I("elementShape",r,t,e);return[n.concat(s,a)]}case"TensorListPushBack":{let o=I("tensorListId",r,t,e),n=I("tensor",r,t,e),s=e.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=I("tensorListId",r,t,e),n=I("elementShape",r,t,e),s=I("elementDType",r,t,e);return[e.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=I("tensor",r,t,e),n=I("elementShape",r,t,e),s=I("lengths",r,t,e),a=TT(o,s,n);return e.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,t,e),n=e.getTensorList(o.id);return[ke(n.size(),"int32")]}case"TensorListResize":{let o=I("tensorListId",r,t,e),n=I("size",r,t,e),a=e.getTensorList(o.id).resize(n);return e.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function $T(r,t,e){let[o,n]=I("fusedOps",r,t,e),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=I("numArgs",r,t,e);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,t,e),l=Al(r,t,e),m=I("dataFormat",r,t,e).toUpperCase(),d=I("dilations",r,t,e),[f,h]=I("args",r,t,e);a&&(h=f,f=void 0);let g=I("leakyreluAlpha",r,t,e);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var ET=(r,t,e,o=Je)=>{switch(r.op){case"Conv1D":{let n=I("stride",r,t,e),s=I("pad",r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilation",r,t,e);return[o.conv1d(I("x",r,t,e),I("filter",r,t,e),n,s,a,i)]}case"Conv2D":{let n=I("strides",r,t,e),s=Al(r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilations",r,t,e);return[o.conv2d(I("x",r,t,e),I("filter",r,t,e),[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}=$T(r,t,e);return[o.fused.conv2d({x:I("x",r,t,e),filter:I("filter",r,t,e),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}=$T(r,t,e);return[o.fused.depthwiseConv2d({x:I("x",r,t,e),filter:I("filter",r,t,e),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,t,e),s=I("strides",r,t,e),a=Al(r,t,e);return[o.conv2dTranspose(I("x",r,t,e),I("filter",r,t,e),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=I("strides",r,t,e),s=Al(r,t,e),a=I("dilations",r,t,e),i=I("dataFormat",r,t,e).toUpperCase();return[o.depthwiseConv2d(I("input",r,t,e),I("filter",r,t,e),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("dataFormat",r,t,e).toUpperCase(),i=I("dilations",r,t,e);return[o.conv3d(I("x",r,t,e),I("filter",r,t,e),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.avgPool(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.maxPool(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e),i=I("includeBatchInIndex",r,t,e),{result:p,indexes:u}=o.maxPoolWithArgmax(I("x",r,t,e),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.avgPool3d(I("x",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("kernelSize",r,t,e);return[o.maxPool3d(I("x",r,t,e),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=I("strides",r,t,e),s=I("pad",r,t,e),a=I("dilations",r,t,e),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I("x",r,t,e),I("filter",r,t,e),[i,p],s,[u,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var RT=(r,t,e,o=Je)=>{switch(r.op){case"Fill":{let n=I("shape",r,t,e),s=I("dtype",r,t,e),a=I("value",r,t,e);return[o.fill(n,a,s)]}case"LinSpace":{let n=I("start",r,t,e),s=I("stop",r,t,e),a=I("num",r,t,e);return[o.linspace(n,s,a)]}case"Multinomial":{let n=I("logits",r,t,e),s=I("numSamples",r,t,e),a=I("seed",r,t,e);return[o.multinomial(n,s,a)]}case"OneHot":{let n=I("indices",r,t,e),s=I("depth",r,t,e),a=I("onValue",r,t,e),i=I("offValue",r,t,e),p=I("dtype",r,t,e);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(I("shape",r,t,e),I("dtype",r,t,e))];case"OnesLike":return[o.onesLike(I("x",r,t,e))];case"RandomStandardNormal":return[o.randomStandardNormal(I("shape",r,t,e),I("dtype",r,t,e),I("seed",r,t,e))];case"RandomUniform":return[o.randomUniform(I("shape",r,t,e),I("minval",r,t,e),I("maxval",r,t,e),I("dtype",r,t,e))];case"RandomUniformInt":return[o.randomUniformInt(I("shape",r,t,e),I("minval",r,t,e),I("maxval",r,t,e),I("seed",r,t,e))];case"Range":{let n=I("start",r,t,e),s=I("stop",r,t,e),a=I("step",r,t,e);return[o.range(n,s,a,I("dtype",r,t,e))]}case"TruncatedNormal":{let n=I("shape",r,t,e),s=I("mean",r,t,e),a=I("stdDev",r,t,e),i=I("seed",r,t,e);return[o.truncatedNormal(n,s,a,I("dtype",r,t,e),i)]}case"Zeros":return[o.zeros(I("shape",r,t,e),I("dtype",r,t,e))];case"ZerosLike":return[o.zerosLike(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PS(r,t,e){let o=I("boxes",r,t,e),n=I("scores",r,t,e),s=I("maxOutputSize",r,t,e),a=I("iouThreshold",r,t,e),i=I("scoreThreshold",r,t,e),p=I("softNmsSigma",r,t,e);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var DT=async(r,t,e,o,n=Je)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=PS(r,t,e),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}=PS(r,t,e),c=I("padToMaxOutputSize",r,t,e),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}=PS(r,t,e);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(I("condition",r,t,e),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(I("x",r,t,e),I("y",r,t,e));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var AT=(r,t,e,o=Je)=>{switch(r.op){case"LowerBound":{let n=I("sortedSequence",r,t,e),s=I("values",r,t,e);return[o.lowerBound(n,s)]}case"TopKV2":{let n=I("x",r,t,e),s=I("k",r,t,e),a=I("sorted",r,t,e),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=I("sortedSequence",r,t,e),s=I("values",r,t,e);return[o.upperBound(n,s)]}case"Unique":{let n=I("x",r,t,e),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=I("x",r,t,e),s=I("axis",r,t,e),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var FT=(r,t,e,o=Je)=>{switch(r.op){case"Const":return t[r.name];case"PlaceholderWithDefault":let n=I("default",r,t,e);return[Bt(r.name,t,e)||n];case"Placeholder":return[Bt(r.name,t,e)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,t,e);return[Bs(c)]}case"IdentityN":return I("x",r,t,e).map(c=>Bs(c));case"Snapshot":let s=I("x",r,t,e);return[Bs(s)];case"Shape":return[o.tensor1d(I("x",r,t,e).shape,"int32")];case"ShapeN":return I("x",r,t,e).map(c=>o.tensor1d(c.shape));case"Size":return[o.scalar(I("x",r,t,e).size,"int32")];case"Rank":return[o.scalar(I("x",r,t,e).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=I("x",r,t,e),i=I("data",r,t,e),p=I("message",r,t,e),u=I("summarize",r,t,e);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let c=0;ct.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),"int32")}async import(t,e){this.checkKeyAndValueTensor(t,e);let o=await t.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=mo(e),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,t,e),a=I("valueDType",r,t,e),i=new If(s,a);return o.addHashTable(r.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let n=I("tableHandle",r,t,e,o),s=I("keys",r,t,e),a=I("values",r,t,e);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=I("tableHandle",r,t,e,o),s=I("keys",r,t,e),a=I("defaultValue",r,t,e);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=I("tableHandle",r,t,e,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var OT=(r,t,e,o=Je)=>{switch(r.op){case"ResizeBilinear":{let n=I("images",r,t,e),s=I("size",r,t,e),a=I("alignCorners",r,t,e),i=I("halfPixelCenters",r,t,e);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=I("images",r,t,e),s=I("size",r,t,e),a=I("alignCorners",r,t,e),i=I("halfPixelCenters",r,t,e);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=I("image",r,t,e),s=I("boxes",r,t,e),a=I("boxInd",r,t,e),i=I("cropSize",r,t,e),p=I("method",r,t,e),u=I("extrapolationValue",r,t,e);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=I("images",r,t,e),s=I("transforms",r,t,e),a=I("outputShape",r,t,e),i=I("fillValue",r,t,e),p=I("interpolation",r,t,e),u=I("fillMode",r,t,e);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,t,e,o=Je)=>{switch(r.op){case"Equal":return[o.equal(I("a",r,t,e),I("b",r,t,e))];case"NotEqual":return[o.notEqual(I("a",r,t,e),I("b",r,t,e))];case"Greater":return[o.greater(I("a",r,t,e),I("b",r,t,e))];case"GreaterEqual":return[o.greaterEqual(I("a",r,t,e),I("b",r,t,e))];case"Less":return[o.less(I("a",r,t,e),I("b",r,t,e))];case"LessEqual":return[o.lessEqual(I("a",r,t,e),I("b",r,t,e))];case"LogicalAnd":return[o.logicalAnd(I("a",r,t,e),I("b",r,t,e))];case"LogicalNot":return[o.logicalNot(I("a",r,t,e))];case"LogicalOr":return[o.logicalOr(I("a",r,t,e),I("b",r,t,e))];case"Select":case"SelectV2":return[o.where(I("condition",r,t,e),I("a",r,t,e),I("b",r,t,e))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,t,e),I("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var LT=(r,t,e,o=Je)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(I("a",r,t,e),I("b",r,t,e),I("transposeA",r,t,e),I("transposeB",r,t,e))];case"Einsum":return[o.einsum(I("equation",r,t,e),...I("tensors",r,t,e))];case"Transpose":return[o.transpose(I("x",r,t,e),I("perm",r,t,e))];case"_FusedMatMul":let[n,s]=I("fusedOps",r,t,e),a=n==="biasadd",i=s==="prelu",p=I("numArgs",r,t,e),u=I("leakyreluAlpha",r,t,e);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,t,e);return[o.fused.matMul({a:I("a",r,t,e),b:I("b",r,t,e),transposeA:I("transposeA",r,t,e),transposeB:I("transposeB",r,t,e),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,t,e),I("numLower",r,t,e),I("numUpper",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,t,e,o=Je)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(I("x",r,t,e),I("axis",r,t,e),I("keepDims",r,t,e))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(I("x",r,t,e),I("mean",r,t,e),I("variance",r,t,e),I("offset",r,t,e),I("scale",r,t,e),I("epsilon",r,t,e))];case"FusedBatchNormV3":return[o.batchNorm(I("x",r,t,e),I("mean",r,t,e),I("variance",r,t,e),I("offset",r,t,e),I("scale",r,t,e),I("epsilon",r,t,e))];case"LRN":return[o.localResponseNormalization(I("x",r,t,e),I("radius",r,t,e),I("bias",r,t,e),I("alpha",r,t,e),I("beta",r,t,e))];case"Softmax":return[o.softmax(I("x",r,t,e))];case"LogSoftmax":return[o.logSoftmax(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,t,e,o=Je)=>{switch(r.op){case"RaggedGather":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I("paramsNestedSplits",r,t,e),I("paramsDenseValues",r,t,e),I("indices",r,t,e),I("outputRaggedRank",r,t,e));return n.concat(s)}case"RaggedRange":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I("starts",r,t,e),I("limits",r,t,e),I("splits",r,t,e));return[n,s]}case"RaggedTensorToTensor":return[o.raggedTensorToTensor(I("shape",r,t,e),I("values",r,t,e),I("defaultValue",r,t,e),I("rowPartitionTensors",r,t,e),I("rowPartitionTypes",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VT=(r,t,e,o=Je)=>{switch(r.op){case"Max":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.max(I("x",r,t,e),i,p)]}case"Mean":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.mean(I("x",r,t,e),i,p)]}case"Min":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.min(I("x",r,t,e),i,p)]}case"Sum":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.sum(I("x",r,t,e),i,p)]}case"All":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.all(I("x",r,t,e),i,p)]}case"Any":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.any(I("x",r,t,e),i,p)]}case"ArgMax":{let i=I("axis",r,t,e);return[o.argMax(I("x",r,t,e),i)]}case"ArgMin":{let i=I("axis",r,t,e);return[o.argMin(I("x",r,t,e),i)]}case"Prod":{let i=I("axis",r,t,e),p=I("keepDims",r,t,e);return[o.prod(I("x",r,t,e),i,p)]}case"Cumprod":{let i=I("axis",r,t,e),p=I("exclusive",r,t,e),u=I("reverse",r,t,e);return[o.cumprod(I("x",r,t,e),i,p,u)]}case"Cumsum":{let i=I("axis",r,t,e),p=I("exclusive",r,t,e),u=I("reverse",r,t,e);return[o.cumsum(I("x",r,t,e),i,p,u)]}case"Bincount":let n=I("x",r,t,e),s=I("weights",r,t,e),a=I("size",r,t,e);return[o.bincount(n,s,a)];case"DenseBincount":{let i=I("x",r,t,e),p=I("weights",r,t,e),u=I("size",r,t,e),c=I("binaryOutput",r,t,e);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,t,e,o=Je)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=I("n",r,t,e),s=I("axis",r,t,e),a=I("tensors",r,t,e);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=I("x",r,t,e),s=I("indices",r,t,e);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=I("axis",r,t,e),s=I("batchDims",r,t,e),a=I("x",r,t,e),i=I("indices",r,t,e);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=I("dims",r,t,e),s=[];for(let i=0;i{let n=I("axis",r,t,e),s=I("tensors",r,t,e),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,t,e),s=I("tensor",r,t,e);return o.unstack(s,n)}case"Tile":{let n=I("reps",r,t,e);return[o.tile(I("x",r,t,e),n)]}case"Split":case"SplitV":{let n=I("axis",r,t,e),s=I("numOrSizeSplits",r,t,e),a=I("x",r,t,e);return o.split(a,s,n)}case"ScatterNd":{let n=I("indices",r,t,e),s=I("values",r,t,e),a=I("shape",r,t,e);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=I("x",r,t,e),s=I("indices",r,t,e);return[o.gatherND(n,s)]}case"SparseToDense":{let n=I("sparseIndices",r,t,e),s=I("outputShape",r,t,e),a=I("sparseValues",r,t,e),i=I("defaultValue",r,t,e);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case"TensorScatterUpdate":{let n=I("indices",r,t,e),s=I("values",r,t,e),a=I("tensor",r,t,e);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,t,e,o=Je)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I("indices",r,t,e),I("values",r,t,e),I("denseShape",r,t,e),I("defaultValue",r,t,e));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I("inputIndices",r,t,e),I("inputShape",r,t,e),I("newShape",r,t,e));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(I("data",r,t,e),I("indices",r,t,e),I("segmentIds",r,t,e))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(I("data",r,t,e),I("indices",r,t,e),I("segmentIds",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,t,e,o=Je)=>{switch(r.op){case"FFT":return[o.fft(I("x",r,t,e))];case"IFFT":return[o.ifft(I("x",r,t,e))];case"RFFT":return[o.rfft(I("x",r,t,e))];case"IRFFT":return[o.irfft(I("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,t,e,o=Je)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,t,e),I("pattern",r,t,e),I("rewrite",r,t,e),I("replaceGlobal",r,t,e))];case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I("data",r,t,e),I("dataSplits",r,t,e),I("separator",r,t,e),I("nGramWidths",r,t,e),I("leftPad",r,t,e),I("rightPad",r,t,e),I("padWidth",r,t,e),I("preserveShortSequences",r,t,e));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I("input",r,t,e),I("delimiter",r,t,e),I("skipEmpty",r,t,e));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(I("input",r,t,e),I("numBuckets",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,t,e,o=Je)=>{switch(r.op){case"Cast":return[o.cast(I("x",r,t,e),I("dtype",r,t,e))];case"ExpandDims":{let n=I("axis",r,t,e);return[o.expandDims(I("x",r,t,e),n)]}case"Squeeze":{let n=I("axis",r,t,e);return[o.squeeze(I("x",r,t,e),n)]}case"Reshape":return[o.reshape(I("x",r,t,e),I("shape",r,t,e))];case"EnsureShape":return[o.ensureShape(I("x",r,t,e),I("shape",r,t,e))];case"MirrorPad":return[o.mirrorPad(I("x",r,t,e),I("padding",r,t,e),I("mode",r,t,e))];case"PadV2":case"Pad":return[o.pad(I("x",r,t,e),I("padding",r,t,e),I("constantValue",r,t,e))];case"SpaceToBatchND":{let n=I("blockShape",r,t,e),s=I("paddings",r,t,e);return[o.spaceToBatchND(I("x",r,t,e),n,s)]}case"BatchToSpaceND":{let n=I("blockShape",r,t,e),s=I("crops",r,t,e);return[o.batchToSpaceND(I("x",r,t,e),n,s)]}case"DepthToSpace":{let n=I("blockSize",r,t,e),s=I("dataFormat",r,t,e).toUpperCase();return[o.depthToSpace(I("x",r,t,e),n,s)]}case"BroadcastTo":return[o.broadcastTo(I("x",r,t,e),I("shape",r,t,e))];case"BroadcastArgs":return[o.broadcastArgs(I("s0",r,t,e),I("s1",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,t,e,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>wT(a,i,p));case"basic_math":return n(()=>ST(a,i,p));case"control":return _T(a,i,p);case"convolution":return n(()=>ET(a,i,p));case"creation":return n(()=>RT(a,i,p));case"dynamic":return DT(a,i,p);case"evaluation":return n(()=>AT(a,i,p));case"image":return n(()=>OT(a,i,p));case"graph":return n(()=>FT(a,i,p));case"logical":return n(()=>MT(a,i,p));case"matrices":return n(()=>LT(a,i,p));case"normalization":return n(()=>BT(a,i,p));case"ragged":return n(()=>zT(a,i,p));case"reduction":return n(()=>VT(a,i,p));case"slice_join":return n(()=>WT(a,i,p));case"sparse":return n(()=>UT(a,i,p));case"spectral":return n(()=>GT(a,i,p));case"string":return n(()=>HT(a,i,p));case"transformation":return n(()=>KT(a,i,p));case"hash_table":return PT(a,i,p,o);case"custom":let u=uf(a.op);if(u&&u.customExecutor)return u.customExecutor(new Cf(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,t,e);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Pl=class{constructor(t={},e={},o={},n={},s){this.weightMap=t,this.tensorArrayMap=e,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(t,e){return{id:t,frameName:e,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let e=0;ee.id===0&&e.iterationId===0?"":`${e.frameName}-${e.iterationId}`).join("/"):""}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),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 t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(let e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)}};function MS(r,t,e,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=[...t];for(;l.length>0;){let m=l.pop();if((mu(m)||k8(m)||N8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),e[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:t,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function qT(r,t){let{usedNodes:e,inputs:o}=t,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>e.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=C8(f,p);return w8(h,p),h}function C8(r,t){let e=new Map(r.map(a=>[a.name,a])),o=t.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=e.get(a);for(let p of i.children)!e.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var fc=class extends Error{constructor(t){super(`NodesExecutionOrderError: ${t}`)}};function w8(r,t){let e=new Map(r.map((i,p)=>[i.name,p])),o=new Set(t.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(!e.has(p.name))throw new fc(`Child ${p.name} of node ${i.name} is unreachable.`);if(e.get(i.name)>e.get(p.name))throw new fc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!e.has(p.name))throw new fc(`Input ${p.name} of node ${i.name} is unreachable.`);if(e.get(p.name)>e.get(i.name))throw new fc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function jT(r){let t=new Map(r.map((i,p)=>[i.name,p])),e=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>mu(i)?e:p),n=i=>{let p=o[t.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;it[o].map(n=>n.id));this._weightIds=[].concat(...e),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 e=t.signatureKey||t.name;return t.defaultOutput?`${e}:${t.defaultOutput}`:e})}get functions(){return Object.keys(this._functions).reduce((t,e)=>(t[e]=this._functions[e].signature,t),{})}constructor(t,e){this.graph=t,this.parent=e,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(o=>{this._functionExecutorMap[o]=new r(t.functions[o],this)})}getCompilationKey(t,e){let o=t.map(s=>s.name).sort(),n=e.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(t,e){let o=MS(t,e,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=e.map(l=>l.name),c=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=qT(this.graph,o),p=jT(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(t){if(t==null)return null;let e=t.clone();return Er(e),e}cloneTensorList(t){return t?t.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([e,o])=>[e,this.cloneTensorList(o)]))}execute(t,e){this.disposeIntermediateTensors(),t=this.mapInputs(t);let o=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);let n=o.map(m=>this.graph.nodes[Nr(m)[0]]),s=e.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(t,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 Pl(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=t[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=OS(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),e.map(x=>Bt(x,d,m))})}getFrozenTensorIds(t){let e=[].concat.apply([],Object.keys(t).map(o=>t[o]).map(o=>o.map(n=>n.id)));return new Set(e)}checkTensorForDisposal(t,e,o,n,s,a,i){if(!(mu(e)||a.has(t))){for(let p of o[t])p!=null&&(i[p.id]=(i[p.id]||0)+e.children.length);for(let p of e.inputs){if(mu(p))continue;let u=fS(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(t,e,o,n,s,a){function i(p){return mu(p)||s.has(p.name)}if(!(mu(t)||a==null))for(let p of a){if(i(p))continue;let u=fS(p.name,e,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(t,e){return this._executeAsync(t,e)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let e of t)e&&!e.isDisposed&&e.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,e,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Pl(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(t,a,e,o),p=e.map(m=>Bt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(t).map(m=>t[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(t,e,o){let n=t.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,e,o)}async executeWithControlFlow(t,e,o,n){let s=Object.keys(t),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}=MS(t,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:e.currentContext})),h=Object.assign({},this.weightMap);Object.keys(t).forEach(S=>{let[k,_]=Nr(S),E=[];E[_]=t[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,e,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=>!mu(S)&&!Bt(S.name,h,e)).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(t,e,o,n,s,a,i,p,u){let c=[];for(;e.length>0;){let l=e.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=OS(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,e,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,e,o,n,s,u))}else this.processChildNodes(l.node,e,o,n,s,u)}return c}processChildNodes(t,e,o,n,s,a){t.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,e.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(u,n,o))&&(s[p]=!0,e.push({contexts:o.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(e=>e.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(e=>{let o=t[e],[n]=Nr(e),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(t){var e,o;let n={};for(let s in t){let a=(o=(e=this._signature)===null||e===void 0?void 0:e.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=t[s]:n[s]=t[s]}return n}checkInputs(t){let e=Object.keys(t).filter(o=>{let[n]=Nr(o);return this.graph.nodes[n]==null});if(e.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${e}] that are not part of graph`)}mapOutputs(t){return t.map(e=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[e];return s!=null?s.name:e},{})}checkOutputs(t){t.forEach(e=>{let[o]=Nr(e);if(!this.graph.nodes[o])throw new Error(`The output '${e}' is not found in the graph`)})}};var vf=class{constructor(t={},e={}){this.hashTableNameToHandle=t,this.hashTableMap=e}addHashTable(t,e){this.hashTableNameToHandle[t]=e.handle,this.hashTableMap[e.id]=e}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var T8="?tfjs-format=file",_8="model.json",Ml=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(t,e={},o=mi){this.modelUrl=t,this.loadOptions=e,this.version="n/a",this.io=o,e==null&&(this.loadOptions={}),this.resourceManager=new vf}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(t,this.loadOptions);else{let e=this.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(this.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error(`Found more than one (${e.length}) load handlers for URL '${[t]}'`);this.handler=e[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 t=this.handler.load();return y.isPromise(t)?t.then(e=>this.loadSync(e)):this.loadSync(t)}loadSync(t){this.artifacts=t;let e=this.artifacts.modelTopology,o=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(o=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=o,this.version=`${e.versions.producer}.${e.versions.minConsumer}`;let n=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Ol(Fl.Instance.transformGraph(e,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(n),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let s=Fl.Instance.transformGraph(t.modelInitializer);this.initializer=new Ol(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=t.initializerSignature}return!0}async save(t,e){if(typeof t=="string"){let o=this.io.getSaveHandlers(t);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${t}'`);t=o[0]}if(t.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return t.save(this.artifacts)}addStructuredOutputNames(t){if(this.structuredOutputKeys){let e=t instanceof mt?[t]:t,o={};return e.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return t}predict(t,e){let o=this.execute(t,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(t,e){let o=await this.executeAsync(t,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(t){var e;if(!(t instanceof mt)&&!Array.isArray(t)){let s=(e=this.signature)===null||e===void 0?void 0:e.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(t[a]=this.resourceIdToCapturedInput[i.resourceId])}return t}t=Array.isArray(t)?t:[t];let o=Object.keys(this.resourceIdToCapturedInput).length;if(t.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 ${t.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]=t[n++],s},{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}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(t){if(this.resourceIdToCapturedInput={},this.initializerSignature){let e=this.initializerSignature.outputs,o=Object.keys(e);for(let n=0;n1?o:o[0]}async executeAsync(t,e){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let o=await this.executor.executeAsync(t,e);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((e,o)=>(e[o]=[t[o]],e),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function $8(r,t={},e=mi){if(r==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 r=="string"&&(r=R8(r));let o=new Ml(r,t,e);return await o.load(),o}function E8(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 t;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=mi.getWeightSpecs(o.weightsManifest),a=mi.getModelArtifactsForJSONSync(o,s,n);t=mi.fromMemorySync(a)}else if("load"in r)t=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)t=mi.fromMemorySync(r);else throw new Error("Unknown model format");let e=new Ml(t);return e.load(),e}function R8(r){return r.endsWith("/")||(r=r+"/"),`${r}${_8}${T8}`}var D8="4.14.0";function Q(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var A8=Vt.whereImpl,hc=class r extends so{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(t,e,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:t,dtype:o,refCount:1}),n}makeTensorInfo(t,e,o){let n;if(e==="string"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,t,e)}else n=this.write(o,t,e);return{dataId:n,shape:t,dtype:e}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let e=this.data.get(t);e.refCount++}decRef(t){if(this.data.has(t)){let e=this.data.get(t);e.refCount--}}move(t,e,o,n,s){this.data.set(t,{values:e,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:e,complexTensorInfos:o}=this.data.get(t);if(e==="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(t).values,e)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}makeOutput(t,e,o){return pr().makeTensorFromTensorInfo(this.makeTensorInfo(e,o,t),this)}disposeData(t,e=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!e&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(t);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}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){Q([t],"where");let e=this.readSync(t.dataId);return A8(t.shape,e)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xu.nextDataId=0;var Tc={};qe(Tc,{addImpl:()=>zS,bincountImpl:()=>Ic,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>VS,castImpl:()=>BS,ceilImpl:()=>WS,concatImpl:()=>mp,equalImpl:()=>US,expImpl:()=>HS,expm1Impl:()=>qS,floorDivImpl:()=>XS,floorImpl:()=>jS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>QS,greaterImpl:()=>YS,lessEqualImpl:()=>JS,lessImpl:()=>ZS,linSpaceImpl:()=>$f,logImpl:()=>eI,maxImpl:()=>Ef,maximumImpl:()=>tI,minimumImpl:()=>rI,multiplyImpl:()=>zl,negImpl:()=>oI,notEqualImpl:()=>nI,prodImpl:()=>sI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>fp,rsqrtImpl:()=>aI,scatterImpl:()=>zs,sigmoidImpl:()=>v_,simpleAbsImpl:()=>LS,sliceImpl:()=>hp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Nc,sqrtImpl:()=>T_,squaredDifferenceImpl:()=>uI,staticRegexReplaceImpl:()=>pI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>gp,stringSplitImpl:()=>xp,stringToHashBucketFastImpl:()=>yp,subImpl:()=>lI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>vc,uniqueImpl:()=>bp});function LS(r){let t=new Float32Array(r.length);for(let e=0;e{let{x:t}=r.inputs,e=r.backend;Q(t,"abs");let o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId).values;return o=LS(n),e.makeOutput(o,t.shape,t.dtype)},jT={kernelName:Xs,backendName:"cpu",kernelFunc:F8};function ze(r){return(t,e,o,n,s)=>{let a=w.assertAndGetBroadcastShape(t,e),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=t.length,m=e.length,d=y.computeStrides(t),f=y.computeStrides(e),h=w.getBroadcastDims(t,a),g=w.getBroadcastDims(e,a);if(h.length+g.length===0)for(let x=0;xC[E]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Kt(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=e.makeTensorInfo(o.shape,"complex64"),p=e.data.get(i.dataId);return p.complexTensorInfos={real:e.makeTensorInfo(o.shape,"float32",s),imag:e.makeTensorInfo(n.shape,"float32",a)},i}var XT={kernelName:Fi,backendName:"cpu",kernelFunc:Kt};function wc(r,t,e="float32"){if(e==="complex64"){let n=wc(r,t,"float32"),s=wc(r,t,"float32");return Kt({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(t),e);return r.makeTensorInfo(t,e,o)}function mr(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var YT={kernelName:wo,backendName:"cpu",kernelFunc:mr};function Ro(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.data.get(o.dataId).complexTensorInfos.real,s=e.data.get(n.dataId).values;return e.makeTensorInfo(n.shape,n.dtype,s)}var QT={kernelName:qi,backendName:"cpu",kernelFunc:Ro};function BS(r,t,e,o){if(o==="int32"){let n=Int32Array.from(r);return[t,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],e),[s,a]=ze((i,p)=>i!==p?1:0)(t,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${e} to ${o}`)}function Do(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return mr({inputs:{x:n},backend:e});let c=wc(e,n.shape,n.dtype),l=Do({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),m=Kt({inputs:{real:l,imag:c},backend:e});return e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=Ro({inputs:{input:n},backend:e}),l=Do({inputs:{x:c},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=mr({inputs:{x:n},backend:e});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=e.data.get(n.dataId).values,[i,p,u]=BS(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}var ZT={kernelName:bo,backendName:"cpu",kernelFunc:Do};function Ye(r,t,e,o){return e==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]=t(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=Do({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=Do({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,_,E]=e(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo(E,"float32",k),D=p.makeTensorInfo(E,"float32",_),P=Kt({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]=t(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function Sc(r){return(t,e,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(t,e),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=w.getBroadcastDims(t,i),f=w.getBroadcastDims(e,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=t.length,b=y.computeStrides(t),C=e.length,S=y.computeStrides(e);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,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 zS=ze((r,t)=>r+t),P8=Sc((r,t,e,o)=>({real:r+e,imag:t+o})),Oa=Ye(uo,zS,P8),JT={kernelName:uo,backendName:"cpu",kernelFunc:Oa};function Ic(r,t,e,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,e);for(let i=0;i=n||(s>0?a[p]+=t[i]:a[p]+=1)}return a}function Nf(r,t,e,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,e],t.dtype);for(let i=0;i=e||(o?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var VS=ze((r,t)=>r&t),O8=Ye(ja,VS),e_={kernelName:ja,backendName:"cpu",kernelFunc:O8};function Xt(r){return(t,e,o)=>{let n=y.getArrayFromDType(e,t.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=e||a.dtype,l=t(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var WS=Xt(r=>Math.ceil(r)),M8=Ar(tn,WS),t_={kernelName:tn,backendName:"cpu",kernelFunc:M8};function mp(r,t,e,o){let n=y.getArrayFromDType(e,y.sizeFromShape(t));if(o&&e!=="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=e==="string"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===t?1:0),GS=Ye(yn,US,null,"bool"),r_={kernelName:yn,backendName:"cpu",kernelFunc:GS};var HS=Xt(r=>Math.exp(r)),KS=Ar(bn,HS,"float32"),o_={kernelName:bn,backendName:"cpu",kernelFunc:KS};var qS=Xt(r=>Math.expm1(r)),L8=Ar(Cn,qS),n_={kernelName:Cn,backendName:"cpu",kernelFunc:L8};var jS=Xt(r=>Math.floor(r)),B8=Ar(Sn,jS),s_={kernelName:Sn,backendName:"cpu",kernelFunc:B8};var XS=ze((r,t)=>Math.floor(r/t)),z8=Ye(In,XS,null,"int32"),a_={kernelName:In,backendName:"cpu",kernelFunc:z8};function Tf(r,t,e,o,n,s,a,i,p){let u=me([o,s],e);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>t?1:0),V8=Ye(Nn,YS,null,"bool"),i_={kernelName:Nn,backendName:"cpu",kernelFunc:V8};var QS=ze((r,t)=>r>=t?1:0),W8=Ye(Tn,QS,null,"bool"),u_={kernelName:Tn,backendName:"cpu",kernelFunc:W8};var ZS=ze((r,t)=>rr<=t?1:0),G8=Ye(An,JS,null,"bool"),c_={kernelName:An,backendName:"cpu",kernelFunc:G8};function $f(r,t,e){let o=(t-r)/(e-1),n=y.makeZerosTypedArray(e,"float32");n[0]=r;for(let s=1;sMath.log(r)),H8=Ar(Pn,eI),l_={kernelName:Pn,backendName:"cpu",kernelFunc:H8};function Ef(r,t,e,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(e));for(let s=0;si)&&(i=u)}n[s]=i}return n}var tI=ze((r,t)=>Math.max(r,t)),K8=Ye(Wn,tI),m_={kernelName:Wn,backendName:"cpu",kernelFunc:K8};var rI=ze((r,t)=>Math.min(r,t)),q8=Ye(Kn,rI),d_={kernelName:Kn,backendName:"cpu",kernelFunc:q8};var zl=ze((r,t)=>r*t),j8=Sc((r,t,e,o)=>({real:r*e-t*o,imag:r*o+t*e})),dp=Ye(Yn,zl,j8),f_={kernelName:Yn,backendName:"cpu",kernelFunc:dp};function oI(r,t,e){let o=y.createScalarValue(-1,e);return zl([],t,o,r,e)}function X8(r){let{inputs:t,backend:e}=r,{x:o}=t;Q(o,"neg");let n=e.data.get(o.dataId).values,[s,a]=oI(n,o.shape,o.dtype);return e.makeTensorInfo(a,o.dtype,s)}var h_={kernelName:pa,backendName:"cpu",kernelFunc:X8};var nI=ze((r,t)=>r!==t?1:0),Y8=Ye(Qn,nI,null,"bool"),g_={kernelName:Qn,backendName:"cpu",kernelFunc:Y8};function vc(r,t,e,o,n){let s=t.length,a=y.sizeFromShape(t),i=y.computeStrides(t),p=y.computeStrides(n),u=y.getTypedArrayFromDType(e,y.sizeFromShape(n));for(let c=0;ce.disposeIntermediateTensorInfo(b)),e.makeTensorInfo(x,g,f)}var y_={kernelName:ns,backendName:"cpu",kernelFunc:Q8};function Z8(r,t,e){r.forEach((o,n)=>{if(o<0||o>=e){let s=y.indexToLoc(n,t.length,y.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${e})`)}})}function J8(r,t){for(let e=0;en)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 eY(r,t,e,o){let n=[],s=0,a=t.length-1+e.length,i=new Array(a).fill(null).map(()=>[0]);J8(e,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 t}function b_(r,t){let e=r.slice(0,t);for(;e.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=t.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(t[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>C_)throw new Error(`Requires ((limit - start) / delta) <= ${C_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(e,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(t){let e=t.length;if(e===0)return 0;let o=0,n=t[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,e,o,n){let s=t.length,a=[];for(let i=0;i0&&a.length!==t[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(t,e,o,n){let s=t.length,a=[];if(s===0)return[];let i=0,p=t[0];if(p>=e.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${e.length}`);let u=e[p];a.push(u);for(let c=1;c=0&&(++i,i=e.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${e.length}`);u=e[l]}a.push(u)}if(a.length!==t.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(t,e,o,n){let s=this.getRowPartitionTensor(t),a=this.getRowPartitionTypeByDimension(t);switch(a){case Ao.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,e,o,n);case Ao.ROW_SPLITS:if(s.length-1>e.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${e.length}`);return this.calculateOutputIndexRowSplit(s,e,o,n);default:throw new Error(`Unsupported partition type: ${Ao[a]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let e=this.rowPartitionTypes[0];switch(e){case Ao.FIRST_DIM_SIZE:return t[0];case Ao.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Ao.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Ao[e]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),o=this.calculateOutputSize(e),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=S_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(e,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(t,e,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(t+1);let p=y.sizeFromShape(i),u=e.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=iu(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);w_(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function w_(r,t,e){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}e.push(o)}return e}function Af(r,t,e,o,n,s,a,i,p,u){return new kc(r,t,e,o,n,s,a,i,p,u).compute()}function fp(r,t,e,o){let n=r===t,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((t-r)/e)),p=y.makeZerosTypedArray(i,o);t1/Math.sqrt(r)),nY=Ar(ms,aI),I_={kernelName:ms,backendName:"cpu",kernelFunc:nY};function zs(r,t,e,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=t.values;if(o===0)return me(e,t.dtype);let d=p instanceof tt?p:me(c,t.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 ${e}`);for(let x=0;x1/(1+Math.exp(-r))),iI=Ie(Cs,r=>1/(1+Math.exp(-r))),k_={kernelName:Cs,backendName:"cpu",kernelFunc:iI};function hp(r,t,e,o,n){let s=ct.isSliceContinous(o,t,e),a=y.sizeFromShape(e),i=y.computeStrides(o);if(s){let l=ct.computeFlatOffset(t,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(e,n);for(let l=0;lf+t[h]);c.set(u.get(...d),...m)}return n==="string"?w.fromStringArrayToUint8(c.values):c.values}function Fo(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=ct.parseSliceParams(n,s,a);ct.assertParamsValid(n,i,p);let u=e.data.get(n.dataId).values,c=hp(u,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,c)}var N_={kernelName:ha,backendName:"cpu",kernelFunc:Fo};function Ff(r,t,e,o,n,s,a){let i=t[0],p=s[0],u=new Array(p),c=new Array(i),l=t[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(e,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(e,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=t.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(e,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)),sY=Ie(Ss,r=>Math.sqrt(r)),__={kernelName:Ss,backendName:"cpu",kernelFunc:sY};var uI=ze((r,t)=>{let e=r-t;return e*e}),aY=Ye(Ns,uI),$_={kernelName:Ns,backendName:"cpu",kernelFunc:aY};var pI=Xt((r,t)=>{let{pattern:e,replaceGlobal:o,rewrite:n}=t;return r.replace(new RegExp(e,o?"g":""),n)}),iY=Ar(Ou,pI),E_={kernelName:Ou,backendName:"cpu",kernelFunc:iY};function Of(r,t,e,o){let n=me(r,t.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(t[m+l-1]);for(let b=0;b0){let p=e[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&e[u]<=o,!c)throw new Error(`Invalid split value ${e[u]}, must be in [${p}, ${o}]`);p=e[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=e[p]-e[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=e[p+1]-e[p],d=this.getNumNGrams(m,l);this.createNGrams(t,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=e[p+1]-e[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(t,u,i,c,d,m)}}return[i,a]}};function gp(r,t,e,o,n,s,a,i){return new cI(e,o,n,s,a,i).compute(r,t)}function uY(r,t,e,o){if(!r.length)return;if(t.length===0){for(let s=0;sr-t),pY=Sc((r,t,e,o)=>({real:r-e,imag:t-o})),Vl=Ye(_s,lI,pY),R_={kernelName:_s,backendName:"cpu",kernelFunc:Vl};function Mf(r,t){let e=new Array(r.rank);for(let n=0;n{let e=t.value-r.value;return e===0?r.index-t.index:e};function D_(r,t,e=0,o=r.length-1){for(;o>e;){if(o-e>600){let i=o-e+1,p=t-e+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(e,Math.floor(t-p*c/i+l)),d=Math.min(o,Math.floor(t+(i-p)*c/i+l));D_(r,t,m,d)}let n=r[t],s=e,a=o;for(y.swap(r,e,t),Wl(r[o],n)>0&&y.swap(r,e,o);s0;)a=a-1}Wl(r[e],n)===0?y.swap(r,e,a):(a=a+1,y.swap(r,a,o)),a<=t&&(e=a+1),t<=a&&(o=a-1)}}function Lf(r,t,e,o,n){let s=t[t.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(e,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew xu,1);var mI=Ie(gn,r=>r>=0?r:Math.exp(r)-1),A_={kernelName:gn,backendName:"cpu",kernelFunc:mI};function dI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o;Q([n],"leakyRelu");let a=y.sizeFromShape(n.shape),i=e.data.get(n.dataId).values,p=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?t*r:r);function fI(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t;Q([o,n],"prelu");let s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,[i,p]=lY(o.shape,n.shape,s,a,"float32");return e.makeTensorInfo(p,"float32",i)}var P_={kernelName:os,backendName:"cpu",kernelFunc:fI};var hI=Ie(as,r=>Math.max(0,r)),O_={kernelName:as,backendName:"cpu",kernelFunc:hI};var gI=Ie(ps,r=>Math.min(Math.max(0,r),6)),M_={kernelName:ps,backendName:"cpu",kernelFunc:gI};function Cp(r,t,e,o,n){if(e==="linear")return mr({inputs:{x:t},backend:r});if(e==="relu")return hI({inputs:{x:t},backend:r});if(e==="elu")return mI({inputs:{x:t},backend:r});if(e==="relu6")return gI({inputs:{x:t},backend:r});if(e==="prelu")return fI({inputs:{x:t,alpha:o},backend:r});if(e==="leakyrelu")return dI({inputs:{x:t},backend:r,attrs:{alpha:n}});if(e==="sigmoid")return iI({inputs:{x:t},backend:r});throw new Error(`Activation ${e} has not been implemented for the CPU backend.`)}function Ve(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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.`),e.incRef(n.dataId);let u=e.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 L_={kernelName:da,backendName:"cpu",kernelFunc:Ve};function xI(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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=Ir.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],_=Ve({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Ve({inputs:{x:s},backend:e,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=e.data.get(_.dataId).values,L=e.data.get(E.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides(E.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=e.blockSize;for(let le=0;leMath.acos(r)),V_={kernelName:Wo,backendName:"cpu",kernelFunc:dY};var fY=Ie(Uo,r=>Math.acosh(r)),W_={kernelName:Uo,backendName:"cpu",kernelFunc:fY};function hY(r){let{inputs:t,backend:e}=r,o=t;Q(t,"addN");let n=o.map(i=>e.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=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",d)}var K_={kernelName:Ys,backendName:"cpu",kernelFunc:yY};function bY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=It({inputs:{x:n},backend:e,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=e.data.get(p.dataId).values;for(let g=0;ge.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",d)}var q_={kernelName:Qs,backendName:"cpu",kernelFunc:bY};var CY=Ie(qo,r=>Math.asin(r)),j_={kernelName:qo,backendName:"cpu",kernelFunc:CY};var wY=Ie(jo,r=>Math.asinh(r)),X_={kernelName:jo,backendName:"cpu",kernelFunc:wY};var SY=Ie(Xo,r=>Math.atan(r)),Y_={kernelName:Xo,backendName:"cpu",kernelFunc:SY};var IY=ze((r,t)=>Math.atan2(r,t)),vY=Ye(Qo,IY),Q_={kernelName:Qo,backendName:"cpu",kernelFunc:vY};var kY=Ie(Yo,r=>Math.atanh(r)),Z_={kernelName:Yo,backendName:"cpu",kernelFunc:kY};function _c(r,t,e,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,e),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+E;g[J]=s==="avg"?q/Y:j}}}return h}function Bf(r,t,e,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(t,e,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,t,e,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,e),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],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=xt:s==="avg"&&(ve+=xt,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 J_(r,t){let e=me(t.outShape,"int32"),o=t.strideDepth,n=t.strideHeight,s=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,p=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,l=t.effectiveFilterWidth,m=t.padInfo.front,d=t.padInfo.top,f=t.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}e.set(B,h,x,k,D,g)}}}return e}function NY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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=mr({inputs:{x:n},backend:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=_c(m,n.shape,n.dtype,d,c,"avg");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var e$={kernelName:Zo,backendName:"cpu",kernelFunc:NY};function TY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return e.makeTensorInfo(m.shape,"float32",m.values)}var t$={kernelName:Zs,backendName:"cpu",kernelFunc:TY};function _Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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,E=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=e.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 e.makeTensorInfo(P.shape,P.dtype,P.values)}var r$={kernelName:Ai,backendName:"cpu",kernelFunc:_Y};function $Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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),E=e.data.get(n.dataId).values,R=me(n.shape,"float32",E);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 e.makeTensorInfo(k.shape,k.dtype,k.values)}var o$={kernelName:Di,backendName:"cpu",kernelFunc:$Y};function EY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=t;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=e.data.get(n.dataId).values,l=e.data.get(i.dataId).values,m=e.data.get(p.dataId).values,d=s?e.data.get(s.dataId).values:new Float32Array([1]),f=a?e.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,E=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),E>=b&&(E=0);return e.makeTensorInfo(n.shape,n.dtype,h)}var n$={kernelName:vn,backendName:"cpu",kernelFunc:EY};function RY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({inputs:{x:n},backend:e,attrs:{shape:p}}),f=It({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Fo({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var s$={kernelName:Js,backendName:"cpu",kernelFunc:RY};function DY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,u=Ic(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var a$={kernelName:en,backendName:"cpu",kernelFunc:DY};function AY(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var i$={kernelName:ea,backendName:"cpu",kernelFunc:AY};var FY=Ie(Co,(r,t)=>{let e=t;return r>e.clipValueMax?e.clipValueMax:r{let{x:t}=r.inputs,e=r.backend,o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return mr({inputs:{x:p[0]},backend:e});if(p[0].dtype==="complex64"){let h=p.map(S=>Ro({inputs:{input:S},backend:e})),g=p.map(S=>Ma({inputs:{input:S},backend:e})),x=yu({inputs:h,backend:e,attrs:{axis:s}}),b=yu({inputs:g,backend:e,attrs:{axis:s}}),C=Kt({inputs:{real:x,imag:b},backend:e});return h.forEach(S=>e.disposeIntermediateTensorInfo(S)),g.forEach(S=>e.disposeIntermediateTensorInfo(S)),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Ve({inputs:{x:h},backend:e,attrs:{shape:x}})}),c=u.map(h=>({vals:e.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=mp(c,i,t[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=e.makeTensorInfo(d,t[0].dtype,m);return u.forEach(h=>e.disposeIntermediateTensorInfo(h)),f}var l$={kernelName:ta,backendName:"cpu",kernelFunc:yu};function yI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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),E=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=e.data.get(n.dataId).values,U=e.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 lt=le+Pe*_[1],Ge=be+st*D,mt=lt;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],lt=le+Pe*u.inChannels,Ge=st;for(let mt=0;mtMath.cos(r)),y$={kernelName:an,backendName:"cpu",kernelFunc:VY};var WY=Ie(un,r=>Math.cosh(r)),b$={kernelName:un,backendName:"cpu",kernelFunc:WY};function UY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{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=e.data.get(s.dataId).values,C=e.data.get(a.dataId).values,S=e.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let E=0;E=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=e.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),E=e.data.get(n.dataId).values,R=e.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}=e,p=t,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:E,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 E$={kernelName:zi,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${zi}, 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 R$={kernelName:Bi,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Bi}, 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 QY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{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=e.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 ${E}.`)}else if(n.dtype==="int32"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[_]=E*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 D$={kernelName:Pu,backendName:"cpu",kernelFunc:QY};function gi(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=Do({inputs:{x:n},backend:e,attrs:{dtype:"int32"}}):i=mr({inputs:{x:n},backend:e});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=It({inputs:{x:i},backend:e,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=wc(e,d,h),x=y.sizeFromShape(f),b=e.data.get(g.dataId).values,C=e.data.get(m.dataId).values;for(let S=0;S=0&&(m=gi({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var F$={kernelName:Vi,backendName:"cpu",kernelFunc:ZY};function JY(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t;Q([o,n],"eluGrad");let s=new Float32Array(y.sizeFromShape(n.shape)),a=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return e.makeTensorInfo(n.shape,"float32",s)}var P$={kernelName:Ya,backendName:"cpu",kernelFunc:JY};var eQ=w.ERF_P,tQ=w.ERF_A1,rQ=w.ERF_A2,oQ=w.ERF_A3,nQ=w.ERF_A4,sQ=w.ERF_A5,aQ=Ie(xn,r=>{let t=Math.sign(r),e=Math.abs(r),o=1/(1+eQ*e);return t*(1-((((sQ*o+nQ)*o+oQ)*o+rQ)*o+tQ)*o*Math.exp(-e*e))}),O$={kernelName:xn,backendName:"cpu",kernelFunc:aQ};function $c(r){let{inputs:t,backend:e,attrs:o}=r,{input:n}=t,{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),Ve({inputs:{x:n},backend:e,attrs:{shape:i}})}var M$={kernelName:na,backendName:"cpu",kernelFunc:$c};var iQ=ze((r,t)=>r/t),Ul=Ye(hn,iQ),Gl={kernelName:hn,backendName:"cpu",kernelFunc:Ul};function Vf(r,t,e){let o=r.shape,n=o[0],s=o[1],a=e.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=e,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=Ve({inputs:{x:n},backend:e,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Ve({inputs:{x:s},backend:e,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=e.bufferSync(h),b=e.bufferSync(f),C=_f(b,x,g);return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.makeTensorInfo(d.outputShape,C.dtype,C.values)}var G$={kernelName:aa,backendName:"cpu",kernelFunc:gQ};function xQ(r){let{inputs:t,backend:e}=r,{input:o}=t,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Ve({inputs:{x:o},backend:e,attrs:{shape:[a,s]}}),p=Vf(i,!0,e),u=Ve({inputs:{x:p},backend:e,attrs:{shape:o.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(p),u}var H$={kernelName:Ui,backendName:"cpu",kernelFunc:xQ};var yQ=Ie(_n,r=>Number.isFinite(r)?1:0,"bool"),K$={kernelName:_n,backendName:"cpu",kernelFunc:yQ};var bQ=Ie($n,r=>Math.abs(r)===1/0?1:0,"bool"),q$={kernelName:$n,backendName:"cpu",kernelFunc:bQ};var CQ=Ie(En,r=>Number.isNaN(r)?1:0,"bool"),j$={kernelName:En,backendName:"cpu",kernelFunc:CQ};function wQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=$f(o,n,s);return t.makeTensorInfo([a.length],"float32",a)}var X$={kernelName:Fn,backendName:"cpu",kernelFunc:wQ};var SQ=Ie(On,r=>Math.log1p(r)),Y$={kernelName:On,backendName:"cpu",kernelFunc:SQ};var IQ=ze((r,t)=>r&&t),vQ=Ye(Mn,IQ,null,"bool"),Q$={kernelName:Mn,backendName:"cpu",kernelFunc:vQ};var kQ=Ie(Ln,r=>r?0:1,"bool"),Z$={kernelName:Ln,backendName:"cpu",kernelFunc:kQ};var NQ=ze((r,t)=>r||t),TQ=Ye(Bn,NQ,null,"bool"),J$={kernelName:Bn,backendName:"cpu",kernelFunc:TQ};function _Q(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,"LRN");let u=n.shape[3],c=u-1,l=e.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=mr({inputs:{x:n},backend:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=_c(m,n.shape,n.dtype,d,c,"max");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var oE={kernelName:Un,backendName:"cpu",kernelFunc:EQ};function RQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return e.makeTensorInfo(m.shape,"float32",m.values)}var nE={kernelName:ia,backendName:"cpu",kernelFunc:RQ};function DQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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=e.bufferSync(s),m=J_(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,E=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,"float32"),P=e.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 e.makeTensorInfo(D.shape,D.dtype,D.values)}var sE={kernelName:Ki,backendName:"cpu",kernelFunc:DQ};function AQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.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,E=me(i.shape,"float32"),R=e.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}}E.set(U,P,M,L,O)}return e.makeTensorInfo(E.shape,E.dtype,E.values)}var aE={kernelName:Hi,backendName:"cpu",kernelFunc:AQ};function iE(r,t,e,o,n){let s=y.computeStrides(t),a=_c(r,t,e,s,n,"max"),i=Bf(r,t,e,n,!0,o);return[a.values,i.values]}var uE={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=iE(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 FQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=e.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Do({inputs:{x:n},backend:e,attrs:{dtype:"float32"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:e});l.push(f);let h=gi({inputs:{x:f},backend:e,attrs:{axis:s,keepDims:a}});return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),h}var pE={kernelName:Gn,backendName:"cpu",kernelFunc:FQ};function PQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=It({inputs:{x:n},backend:e,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=e.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=e.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((_,E)=>_-p[E]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:e.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var lE={kernelName:qn,backendName:"cpu",kernelFunc:OQ};var MQ=ze((r,t)=>{let e=r%t;return r<0&&t<0||r>=0&&t>=0?e:(e+t)%t}),LQ=Ye(jn,MQ),mE={kernelName:jn,backendName:"cpu",kernelFunc:LQ};var fE=Kp(qw());function SI(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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=wI({inputs:{x:n},backend:e,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=Ve({inputs:{x:u},backend:e,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:e}),d=KS({inputs:{x:m},backend:e}),f=gi({inputs:{x:d},backend:e,attrs:{axis:p,keepDims:!1}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Ul({inputs:{a:d,b:h},backend:e});return e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var dE={kernelName:vs,backendName:"cpu",kernelFunc:SI};function BQ(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:SI({inputs:{logits:n},backend:e,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=e.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=t.map(c=>{let l=$c({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=yu({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var IE={kernelName:la,backendName:"cpu",kernelFunc:II};function qQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.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[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:e.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:ts,backendName:"cpu",kernelFunc:qQ};var jQ=ze((r,t)=>Math.pow(r,t)),XQ=Ye(rs,jQ),vE={kernelName:rs,backendName:"cpu",kernelFunc:XQ};function YQ(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.data.get(x.dataId).values),u=n.map(x=>x.shape),c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,[m,d,f]=Rf(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var kE={kernelName:Qp,backendName:"cpu",kernelFunc:YQ};function QQ(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Df(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],"int32",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var NE={kernelName:Zp,backendName:"cpu",kernelFunc:QQ};function ZQ(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.data.get(n.dataId).values,c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,m=i.map(g=>e.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 e.makeTensorInfo(f,s.dtype,h)}var TE={kernelName:Jp,backendName:"cpu",kernelFunc:ZQ};function JQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,dtype:s,step:a}=e,i=fp(o,n,a,s);return t.makeTensorInfo([i.length],s,i)}var _E={kernelName:ma,backendName:"cpu",kernelFunc:JQ};var e7=Ie(ss,r=>1/r),$E={kernelName:ss,backendName:"cpu",kernelFunc:e7};function t7(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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=e.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=e.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,E=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 e.makeTensorInfo(n.shape,n.dtype,h)}var AE={kernelName:Ja,backendName:"cpu",kernelFunc:n7};function s7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o;Q(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return mr({inputs:{x:n},backend:e});let p=new tt(n.shape,n.dtype),u=e.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return e.makeTensorInfo(p.shape,p.dtype,p.values)}var FE={kernelName:cs,backendName:"cpu",kernelFunc:s7};var PE={kernelName:As,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 t=Math.floor(r);return r-t<.5?Math.floor(r):r-t>.5?Math.ceil(r):t%2===0?t:t+1}),OE={kernelName:ls,backendName:"cpu",kernelFunc:a7};function i7(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=e.bufferSync(n),f=e.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return e.makeTensorInfo(a,h.dtype,h.values)}var ME={kernelName:ds,backendName:"cpu",kernelFunc:i7};function u7(r,t){let e=0,o=r.length,n=0;for(;e1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?d7*r:m7*(Math.exp(r)-1)),VE={kernelName:gs,backendName:"cpu",kernelFunc:f7};var h7=Ie(bs,r=>r<0?-1:r>0?1:0),WE={kernelName:bs,backendName:"cpu",kernelFunc:h7};var g7=Ie(xs,r=>Math.sin(r)),UE={kernelName:xs,backendName:"cpu",kernelFunc:g7};var x7=Ie(ys,r=>Math.sinh(r)),GE={kernelName:ys,backendName:"cpu",kernelFunc:x7};var y7=11920928955078125e-23,HE=Math.log(y7)+2,b7=Ie(ws,r=>{let t=r>-HE,e=r0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,t,e)}else n=this.write(o,t,e);return{dataId:n,shape:t,dtype:e}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let e=this.data.get(t);e.refCount++}decRef(t){if(this.data.has(t)){let e=this.data.get(t);e.refCount--}}move(t,e,o,n,s){this.data.set(t,{values:e,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:e,complexTensorInfos:o}=this.data.get(t);if(e==="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(t).values,e)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}makeOutput(t,e,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,o,t),this)}disposeData(t,e=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!e&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:o}=this.data.get(t);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}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){Q([t],"where");let e=this.readSync(t.dataId);return A8(t.shape,e)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};hc.nextDataId=0;var wc={};qe(wc,{addImpl:()=>zS,bincountImpl:()=>yc,bincountReduceImpl:()=>kf,bitwiseAndImpl:()=>VS,castImpl:()=>BS,ceilImpl:()=>WS,concatImpl:()=>np,equalImpl:()=>US,expImpl:()=>HS,expm1Impl:()=>qS,floorDivImpl:()=>XS,floorImpl:()=>jS,gatherNdImpl:()=>Nf,gatherV2Impl:()=>Tf,greaterEqualImpl:()=>QS,greaterImpl:()=>YS,lessEqualImpl:()=>JS,lessImpl:()=>ZS,linSpaceImpl:()=>_f,logImpl:()=>eI,maxImpl:()=>$f,maximumImpl:()=>tI,minimumImpl:()=>rI,multiplyImpl:()=>Ll,negImpl:()=>oI,notEqualImpl:()=>nI,prodImpl:()=>sI,raggedGatherImpl:()=>Ef,raggedRangeImpl:()=>Rf,raggedTensorToTensorImpl:()=>Df,rangeImpl:()=>ap,rsqrtImpl:()=>iI,scatterImpl:()=>zs,sigmoidImpl:()=>k_,simpleAbsImpl:()=>LS,sliceImpl:()=>ip,sparseFillEmptyRowsImpl:()=>Af,sparseReshapeImpl:()=>Ff,sparseSegmentReductionImpl:()=>Cc,sqrtImpl:()=>__,squaredDifferenceImpl:()=>pI,staticRegexReplaceImpl:()=>cI,stridedSliceImpl:()=>Pf,stringNGramsImpl:()=>up,stringSplitImpl:()=>pp,stringToHashBucketFastImpl:()=>cp,subImpl:()=>mI,tileImpl:()=>Of,topKImpl:()=>Mf,transposeImpl:()=>bc,uniqueImpl:()=>lp});function LS(r){let t=new Float32Array(r.length);for(let e=0;e{let{x:t}=r.inputs,e=r.backend;Q(t,"abs");let o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId).values;return o=LS(n),e.makeOutput(o,t.shape,t.dtype)},XT={kernelName:Xs,backendName:"cpu",kernelFunc:F8};function ze(r){return(t,e,o,n,s)=>{let a=w.assertAndGetBroadcastShape(t,e),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=t.length,m=e.length,d=y.computeStrides(t),f=y.computeStrides(e),h=w.getBroadcastDims(t,a),g=w.getBroadcastDims(e,a);if(h.length+g.length===0)for(let x=0;xC[E]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Ht(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=e.makeTensorInfo(o.shape,"complex64"),p=e.data.get(i.dataId);return p.complexTensorInfos={real:e.makeTensorInfo(o.shape,"float32",s),imag:e.makeTensorInfo(n.shape,"float32",a)},i}var YT={kernelName:Ri,backendName:"cpu",kernelFunc:Ht};function gc(r,t,e="float32"){if(e==="complex64"){let n=gc(r,t,"float32"),s=gc(r,t,"float32");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(t),e);return r.makeTensorInfo(t,e,o)}function lr(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var QT={kernelName:Co,backendName:"cpu",kernelFunc:lr};function Eo(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.data.get(o.dataId).complexTensorInfos.real,s=e.data.get(n.dataId).values;return e.makeTensorInfo(n.shape,n.dtype,s)}var ZT={kernelName:Gi,backendName:"cpu",kernelFunc:Eo};function BS(r,t,e,o){if(o==="int32"){let n=Int32Array.from(r);return[t,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],e),[s,a]=ze((i,p)=>i!==p?1:0)(t,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${e} to ${o}`)}function Ro(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return lr({inputs:{x:n},backend:e});let c=gc(e,n.shape,n.dtype),l=Ro({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),m=Ht({inputs:{real:l,imag:c},backend:e});return e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=Eo({inputs:{input:n},backend:e}),l=Ro({inputs:{x:c},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({inputs:{x:n},backend:e});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=e.data.get(n.dataId).values,[i,p,u]=BS(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}var JT={kernelName:yo,backendName:"cpu",kernelFunc:Ro};function Ye(r,t,e,o){return e==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]=t(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,_,E]=e(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo(E,"float32",k),D=p.makeTensorInfo(E,"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]=t(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function xc(r){return(t,e,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(t,e),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=w.getBroadcastDims(t,i),f=w.getBroadcastDims(e,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=t.length,b=y.computeStrides(t),C=e.length,S=y.computeStrides(e);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,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 zS=ze((r,t)=>r+t),P8=xc((r,t,e,o)=>({real:r+e,imag:t+o})),Pa=Ye(io,zS,P8),e_={kernelName:io,backendName:"cpu",kernelFunc:Pa};function yc(r,t,e,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,e);for(let i=0;i=n||(s>0?a[p]+=t[i]:a[p]+=1)}return a}function kf(r,t,e,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,e],t.dtype);for(let i=0;i=e||(o?a.set(1,i,u):t.size>0?a.set(a.get(i,u)+t.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var VS=ze((r,t)=>r&t),O8=Ye(qa,VS),t_={kernelName:qa,backendName:"cpu",kernelFunc:O8};function jt(r){return(t,e,o)=>{let n=y.getArrayFromDType(e,t.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=e||a.dtype,l=t(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var WS=jt(r=>Math.ceil(r)),M8=Dr(en,WS),r_={kernelName:en,backendName:"cpu",kernelFunc:M8};function np(r,t,e,o){let n=y.getArrayFromDType(e,y.sizeFromShape(t));if(o&&e!=="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=e==="string"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===t?1:0),GS=Ye(xn,US,null,"bool"),o_={kernelName:xn,backendName:"cpu",kernelFunc:GS};var HS=jt(r=>Math.exp(r)),KS=Dr(yn,HS,"float32"),n_={kernelName:yn,backendName:"cpu",kernelFunc:KS};var qS=jt(r=>Math.expm1(r)),L8=Dr(bn,qS),s_={kernelName:bn,backendName:"cpu",kernelFunc:L8};var jS=jt(r=>Math.floor(r)),B8=Dr(wn,jS),a_={kernelName:wn,backendName:"cpu",kernelFunc:B8};var XS=ze((r,t)=>Math.floor(r/t)),z8=Ye(Sn,XS,null,"int32"),i_={kernelName:Sn,backendName:"cpu",kernelFunc:z8};function Nf(r,t,e,o,n,s,a,i,p){let u=me([o,s],e);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>t?1:0),V8=Ye(kn,YS,null,"bool"),u_={kernelName:kn,backendName:"cpu",kernelFunc:V8};var QS=ze((r,t)=>r>=t?1:0),W8=Ye(Nn,QS,null,"bool"),p_={kernelName:Nn,backendName:"cpu",kernelFunc:W8};var ZS=ze((r,t)=>rr<=t?1:0),G8=Ye(Dn,JS,null,"bool"),l_={kernelName:Dn,backendName:"cpu",kernelFunc:G8};function _f(r,t,e){let o=(t-r)/(e-1),n=y.makeZerosTypedArray(e,"float32");n[0]=r;for(let s=1;sMath.log(r)),H8=Dr(Fn,eI),m_={kernelName:Fn,backendName:"cpu",kernelFunc:H8};function $f(r,t,e,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(e));for(let s=0;si)&&(i=u)}n[s]=i}return n}var tI=ze((r,t)=>Math.max(r,t)),K8=Ye(Vn,tI),d_={kernelName:Vn,backendName:"cpu",kernelFunc:K8};var rI=ze((r,t)=>Math.min(r,t)),q8=Ye(Hn,rI),f_={kernelName:Hn,backendName:"cpu",kernelFunc:q8};var Ll=ze((r,t)=>r*t),j8=xc((r,t,e,o)=>({real:r*e-t*o,imag:r*o+t*e})),sp=Ye(Xn,Ll,j8),h_={kernelName:Xn,backendName:"cpu",kernelFunc:sp};function oI(r,t,e){let o=y.createScalarValue(-1,e);return Ll([],t,o,r,e)}function X8(r){let{inputs:t,backend:e}=r,{x:o}=t;Q(o,"neg");let n=e.data.get(o.dataId).values,[s,a]=oI(n,o.shape,o.dtype);return e.makeTensorInfo(a,o.dtype,s)}var g_={kernelName:pa,backendName:"cpu",kernelFunc:X8};var nI=ze((r,t)=>r!==t?1:0),Y8=Ye(Yn,nI,null,"bool"),x_={kernelName:Yn,backendName:"cpu",kernelFunc:Y8};function bc(r,t,e,o,n){let s=t.length,a=y.sizeFromShape(t),i=y.computeStrides(t),p=y.computeStrides(n),u=y.getTypedArrayFromDType(e,y.sizeFromShape(n));for(let c=0;ce.disposeIntermediateTensorInfo(b)),e.makeTensorInfo(x,g,f)}var b_={kernelName:os,backendName:"cpu",kernelFunc:Q8};function Z8(r,t,e){r.forEach((o,n)=>{if(o<0||o>=e){let s=y.indexToLoc(n,t.length,y.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${e})`)}})}function J8(r,t){for(let e=0;en)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 eY(r,t,e,o){let n=[],s=0,a=t.length-1+e.length,i=new Array(a).fill(null).map(()=>[0]);J8(e,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 t}function C_(r,t){let e=r.slice(0,t);for(;e.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=t.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(t[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>w_)throw new Error(`Requires ((limit - start) / delta) <= ${w_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(e,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(t){let e=t.length;if(e===0)return 0;let o=0,n=t[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,e,o,n){let s=t.length,a=[];for(let i=0;i0&&a.length!==t[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(t,e,o,n){let s=t.length,a=[];if(s===0)return[];let i=0,p=t[0];if(p>=e.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${e.length}`);let u=e[p];a.push(u);for(let c=1;c=0&&(++i,i=e.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${e.length}`);u=e[l]}a.push(u)}if(a.length!==t.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(t,e,o,n){let s=this.getRowPartitionTensor(t),a=this.getRowPartitionTypeByDimension(t);switch(a){case Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,e,o,n);case Do.ROW_SPLITS:if(s.length-1>e.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${e.length}`);return this.calculateOutputIndexRowSplit(s,e,o,n);default:throw new Error(`Unsupported partition type: ${Do[a]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let e=this.rowPartitionTypes[0];switch(e){case Do.FIRST_DIM_SIZE:return t[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[e]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),o=this.calculateOutputSize(e),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=I_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(e,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(t,e,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(t+1);let p=y.sizeFromShape(i),u=e.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=ou(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);S_(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function S_(r,t,e){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}e.push(o)}return e}function Df(r,t,e,o,n,s,a,i,p,u){return new aI(r,t,e,o,n,s,a,i,p,u).compute()}function ap(r,t,e,o){let n=r===t,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((t-r)/e)),p=y.makeZerosTypedArray(i,o);t1/Math.sqrt(r)),nY=Dr(ls,iI),v_={kernelName:ls,backendName:"cpu",kernelFunc:nY};function zs(r,t,e,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=t.values;if(o===0)return me(e,t.dtype);let d=p instanceof tt?p:me(c,t.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 ${e}`);for(let x=0;x1/(1+Math.exp(-r))),uI=Ie(bs,r=>1/(1+Math.exp(-r))),N_={kernelName:bs,backendName:"cpu",kernelFunc:uI};function ip(r,t,e,o,n){let s=pt.isSliceContinous(o,t,e),a=y.sizeFromShape(e),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(t,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(e,n);for(let l=0;lf+t[h]);c.set(u.get(...d),...m)}return n==="string"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=e.data.get(n.dataId).values,c=ip(u,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,c)}var T_={kernelName:ha,backendName:"cpu",kernelFunc:Ao};function Af(r,t,e,o,n,s,a){let i=t[0],p=s[0],u=new Array(p),c=new Array(i),l=t[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(e,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(e,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=t.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(e,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)),sY=Ie(ws,r=>Math.sqrt(r)),$_={kernelName:ws,backendName:"cpu",kernelFunc:sY};var pI=ze((r,t)=>{let e=r-t;return e*e}),aY=Ye(ks,pI),E_={kernelName:ks,backendName:"cpu",kernelFunc:aY};var cI=jt((r,t)=>{let{pattern:e,replaceGlobal:o,rewrite:n}=t;return r.replace(new RegExp(e,o?"g":""),n)}),iY=Dr($u,cI),R_={kernelName:$u,backendName:"cpu",kernelFunc:iY};function Pf(r,t,e,o){let n=me(r,t.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(t[m+l-1]);for(let b=0;b0){let p=e[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&e[u]<=o,!c)throw new Error(`Invalid split value ${e[u]}, must be in [${p}, ${o}]`);p=e[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=e[p]-e[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=e[p+1]-e[p],d=this.getNumNGrams(m,l);this.createNGrams(t,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=e[p+1]-e[p];if(l===0)continue;let m=l+2*this.padWidth,d=1;this.createNGrams(t,u,i,c,d,m)}}return[i,a]}};function up(r,t,e,o,n,s,a,i){return new lI(e,o,n,s,a,i).compute(r,t)}function uY(r,t,e,o){if(!r.length)return;if(t.length===0){for(let s=0;sr-t),pY=xc((r,t,e,o)=>({real:r-e,imag:t-o})),Bl=Ye(Ts,mI,pY),D_={kernelName:Ts,backendName:"cpu",kernelFunc:Bl};function Of(r,t){let e=new Array(r.rank);for(let n=0;n{let e=t.value-r.value;return e===0?r.index-t.index:e};function A_(r,t,e=0,o=r.length-1){for(;o>e;){if(o-e>600){let i=o-e+1,p=t-e+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(e,Math.floor(t-p*c/i+l)),d=Math.min(o,Math.floor(t+(i-p)*c/i+l));A_(r,t,m,d)}let n=r[t],s=e,a=o;for(y.swap(r,e,t),zl(r[o],n)>0&&y.swap(r,e,o);s0;)a=a-1}zl(r[e],n)===0?y.swap(r,e,a):(a=a+1,y.swap(r,a,o)),a<=t&&(e=a+1),t<=a&&(o=a-1)}}function Mf(r,t,e,o,n){let s=t[t.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(e,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew hc,1);var dI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),F_={kernelName:hn,backendName:"cpu",kernelFunc:dI};function fI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o;Q([n],"leakyRelu");let a=y.sizeFromShape(n.shape),i=e.data.get(n.dataId).values,p=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?t*r:r);function hI(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t;Q([o,n],"prelu");let s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,[i,p]=lY(o.shape,n.shape,s,a,"float32");return e.makeTensorInfo(p,"float32",i)}var O_={kernelName:rs,backendName:"cpu",kernelFunc:hI};var gI=Ie(ss,r=>Math.max(0,r)),M_={kernelName:ss,backendName:"cpu",kernelFunc:gI};var xI=Ie(us,r=>Math.min(Math.max(0,r),6)),L_={kernelName:us,backendName:"cpu",kernelFunc:xI};function mp(r,t,e,o,n){if(e==="linear")return lr({inputs:{x:t},backend:r});if(e==="relu")return gI({inputs:{x:t},backend:r});if(e==="elu")return dI({inputs:{x:t},backend:r});if(e==="relu6")return xI({inputs:{x:t},backend:r});if(e==="prelu")return hI({inputs:{x:t,alpha:o},backend:r});if(e==="leakyrelu")return fI({inputs:{x:t},backend:r,attrs:{alpha:n}});if(e==="sigmoid")return uI({inputs:{x:t},backend:r});throw new Error(`Activation ${e} has not been implemented for the CPU backend.`)}function Ve(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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.`),e.incRef(n.dataId);let u=e.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 B_={kernelName:da,backendName:"cpu",kernelFunc:Ve};function yI(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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],_=Ve({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Ve({inputs:{x:s},backend:e,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=e.data.get(_.dataId).values,L=e.data.get(E.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides(E.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=e.blockSize;for(let le=0;leMath.acos(r)),W_={kernelName:Vo,backendName:"cpu",kernelFunc:dY};var fY=Ie(Wo,r=>Math.acosh(r)),U_={kernelName:Wo,backendName:"cpu",kernelFunc:fY};function hY(r){let{inputs:t,backend:e}=r,o=t;Q(t,"addN");let n=o.map(i=>e.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=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",d)}var q_={kernelName:Ys,backendName:"cpu",kernelFunc:yY};function bY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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=e.data.get(p.dataId).values;for(let g=0;ge.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",d)}var j_={kernelName:Qs,backendName:"cpu",kernelFunc:bY};var CY=Ie(Ko,r=>Math.asin(r)),X_={kernelName:Ko,backendName:"cpu",kernelFunc:CY};var wY=Ie(qo,r=>Math.asinh(r)),Y_={kernelName:qo,backendName:"cpu",kernelFunc:wY};var SY=Ie(jo,r=>Math.atan(r)),Q_={kernelName:jo,backendName:"cpu",kernelFunc:SY};var IY=ze((r,t)=>Math.atan2(r,t)),vY=Ye(Yo,IY),Z_={kernelName:Yo,backendName:"cpu",kernelFunc:vY};var kY=Ie(Xo,r=>Math.atanh(r)),J_={kernelName:Xo,backendName:"cpu",kernelFunc:kY};function Sc(r,t,e,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,e),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+E;g[J]=s==="avg"?q/Y:j}}}return h}function Lf(r,t,e,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(t,e,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 Bf(r,t,e,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,e),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],E=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 e$(r,t){let e=me(t.outShape,"int32"),o=t.strideDepth,n=t.strideHeight,s=t.strideWidth,a=t.dilationDepth,i=t.dilationHeight,p=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,l=t.effectiveFilterWidth,m=t.padInfo.front,d=t.padInfo.top,f=t.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}e.set(B,h,x,k,D,g)}}}return e}function NY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Sc(m,n.shape,n.dtype,d,c,"avg");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var t$={kernelName:Qo,backendName:"cpu",kernelFunc:NY};function TY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=Bf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return e.makeTensorInfo(m.shape,"float32",m.values)}var r$={kernelName:Zs,backendName:"cpu",kernelFunc:TY};function _Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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,E=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=e.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 e.makeTensorInfo(P.shape,P.dtype,P.values)}var o$={kernelName:Ei,backendName:"cpu",kernelFunc:_Y};function $Y(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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),E=e.data.get(n.dataId).values,R=me(n.shape,"float32",E);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 e.makeTensorInfo(k.shape,k.dtype,k.values)}var n$={kernelName:$i,backendName:"cpu",kernelFunc:$Y};function EY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=t;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=e.data.get(n.dataId).values,l=e.data.get(i.dataId).values,m=e.data.get(p.dataId).values,d=s?e.data.get(s.dataId).values:new Float32Array([1]),f=a?e.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,E=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),E>=b&&(E=0);return e.makeTensorInfo(n.shape,n.dtype,h)}var s$={kernelName:In,backendName:"cpu",kernelFunc:EY};function RY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({inputs:{x:n},backend:e,attrs:{shape:p}}),f=St({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var a$={kernelName:Js,backendName:"cpu",kernelFunc:RY};function DY(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,u=yc(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var i$={kernelName:Jo,backendName:"cpu",kernelFunc:DY};function AY(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var u$={kernelName:ea,backendName:"cpu",kernelFunc:AY};var FY=Ie(bo,(r,t)=>{let e=t;return r>e.clipValueMax?e.clipValueMax:r{let{x:t}=r.inputs,e=r.backend,o=new Float32Array(y.sizeFromShape(t.shape)),n=e.data.get(t.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return lr({inputs:{x:p[0]},backend:e});if(p[0].dtype==="complex64"){let h=p.map(S=>Eo({inputs:{input:S},backend:e})),g=p.map(S=>Oa({inputs:{input:S},backend:e})),x=du({inputs:h,backend:e,attrs:{axis:s}}),b=du({inputs:g,backend:e,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:e});return h.forEach(S=>e.disposeIntermediateTensorInfo(S)),g.forEach(S=>e.disposeIntermediateTensorInfo(S)),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return Ve({inputs:{x:h},backend:e,attrs:{shape:x}})}),c=u.map(h=>({vals:e.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=np(c,i,t[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=e.makeTensorInfo(d,t[0].dtype,m);return u.forEach(h=>e.disposeIntermediateTensorInfo(h)),f}var m$={kernelName:ta,backendName:"cpu",kernelFunc:du};function bI(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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),E=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=e.data.get(n.dataId).values,U=e.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],Ge=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,Ge=st;for(let lt=0;ltMath.cos(r)),b$={kernelName:sn,backendName:"cpu",kernelFunc:VY};var WY=Ie(an,r=>Math.cosh(r)),C$={kernelName:an,backendName:"cpu",kernelFunc:WY};function UY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{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=e.data.get(s.dataId).values,C=e.data.get(a.dataId).values,S=e.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let E=0;E=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=e.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),E=e.data.get(n.dataId).values,R=e.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}=e,p=t,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:E,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 R$={kernelName:Mi,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,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(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 D$={kernelName:Oi,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=e,u=t,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:E,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Oi}, 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 QY(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{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=e.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 ${E}.`)}else if(n.dtype==="int32"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[_]=E*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 A$={kernelName:_u,backendName:"cpu",kernelFunc:QY};function di(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=Ro({inputs:{x:n},backend:e,attrs:{dtype:"int32"}}):i=lr({inputs:{x:n},backend:e});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:e,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=gc(e,d,h),x=y.sizeFromShape(f),b=e.data.get(g.dataId).values,C=e.data.get(m.dataId).values;for(let S=0;S=0&&(m=di({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var P$={kernelName:Li,backendName:"cpu",kernelFunc:ZY};function JY(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t;Q([o,n],"eluGrad");let s=new Float32Array(y.sizeFromShape(n.shape)),a=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return e.makeTensorInfo(n.shape,"float32",s)}var O$={kernelName:Xa,backendName:"cpu",kernelFunc:JY};var eQ=w.ERF_P,tQ=w.ERF_A1,rQ=w.ERF_A2,oQ=w.ERF_A3,nQ=w.ERF_A4,sQ=w.ERF_A5,aQ=Ie(gn,r=>{let t=Math.sign(r),e=Math.abs(r),o=1/(1+eQ*e);return t*(1-((((sQ*o+nQ)*o+oQ)*o+rQ)*o+tQ)*o*Math.exp(-e*e))}),M$={kernelName:gn,backendName:"cpu",kernelFunc:aQ};function Ic(r){let{inputs:t,backend:e,attrs:o}=r,{input:n}=t,{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),Ve({inputs:{x:n},backend:e,attrs:{shape:i}})}var L$={kernelName:na,backendName:"cpu",kernelFunc:Ic};var iQ=ze((r,t)=>r/t),Vl=Ye(fn,iQ),Wl={kernelName:fn,backendName:"cpu",kernelFunc:Vl};function zf(r,t,e){let o=r.shape,n=o[0],s=o[1],a=e.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=e,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=Ve({inputs:{x:n},backend:e,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=Ve({inputs:{x:s},backend:e,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=e.bufferSync(h),b=e.bufferSync(f),C=Tf(b,x,g);return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.makeTensorInfo(d.outputShape,C.dtype,C.values)}var H$={kernelName:aa,backendName:"cpu",kernelFunc:gQ};function xQ(r){let{inputs:t,backend:e}=r,{input:o}=t,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=Ve({inputs:{x:o},backend:e,attrs:{shape:[a,s]}}),p=zf(i,!0,e),u=Ve({inputs:{x:p},backend:e,attrs:{shape:o.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(p),u}var K$={kernelName:zi,backendName:"cpu",kernelFunc:xQ};var yQ=Ie(Tn,r=>Number.isFinite(r)?1:0,"bool"),q$={kernelName:Tn,backendName:"cpu",kernelFunc:yQ};var bQ=Ie(_n,r=>Math.abs(r)===1/0?1:0,"bool"),j$={kernelName:_n,backendName:"cpu",kernelFunc:bQ};var CQ=Ie($n,r=>Number.isNaN(r)?1:0,"bool"),X$={kernelName:$n,backendName:"cpu",kernelFunc:CQ};function wQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=_f(o,n,s);return t.makeTensorInfo([a.length],"float32",a)}var Y$={kernelName:An,backendName:"cpu",kernelFunc:wQ};var SQ=Ie(Pn,r=>Math.log1p(r)),Q$={kernelName:Pn,backendName:"cpu",kernelFunc:SQ};var IQ=ze((r,t)=>r&&t),vQ=Ye(On,IQ,null,"bool"),Z$={kernelName:On,backendName:"cpu",kernelFunc:vQ};var kQ=Ie(Mn,r=>r?0:1,"bool"),J$={kernelName:Mn,backendName:"cpu",kernelFunc:kQ};var NQ=ze((r,t)=>r||t),TQ=Ye(Ln,NQ,null,"bool"),eE={kernelName:Ln,backendName:"cpu",kernelFunc:TQ};function _Q(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,"LRN");let u=n.shape[3],c=u-1,l=e.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:e});else{let m=e.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=Sc(m,n.shape,n.dtype,d,c,"max");l=e.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var nE={kernelName:Wn,backendName:"cpu",kernelFunc:EQ};function RQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.data.get(n.dataId).values,m=Bf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return e.makeTensorInfo(m.shape,"float32",m.values)}var sE={kernelName:ia,backendName:"cpu",kernelFunc:RQ};function DQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{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=e.bufferSync(s),m=e$(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,E=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,"float32"),P=e.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 e.makeTensorInfo(D.shape,D.dtype,D.values)}var aE={kernelName:Ui,backendName:"cpu",kernelFunc:DQ};function AQ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Lf(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,E=me(i.shape,"float32"),R=e.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}}E.set(U,P,M,L,O)}return e.makeTensorInfo(E.shape,E.dtype,E.values)}var iE={kernelName:Wi,backendName:"cpu",kernelFunc:AQ};function uE(r,t,e,o,n){let s=y.computeStrides(t),a=Sc(r,t,e,s,n,"max"),i=Lf(r,t,e,n,!0,o);return[a.values,i.values]}var pE={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=uE(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 FQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=e.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:e,attrs:{dtype:"float32"}});l.push(d);let f=Vl({inputs:{a:d,b:m},backend:e});l.push(f);let h=di({inputs:{x:f},backend:e,attrs:{axis:s,keepDims:a}});return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),h}var cE={kernelName:Un,backendName:"cpu",kernelFunc:FQ};function PQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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=e.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=e.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((_,E)=>_-p[E]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:e.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var mE={kernelName:Kn,backendName:"cpu",kernelFunc:OQ};var MQ=ze((r,t)=>{let e=r%t;return r<0&&t<0||r>=0&&t>=0?e:(e+t)%t}),LQ=Ye(qn,MQ),dE={kernelName:qn,backendName:"cpu",kernelFunc:LQ};var hE=Lp(qw());function II(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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=SI({inputs:{x:n},backend:e,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=Ve({inputs:{x:u},backend:e,attrs:{shape:c}}),m=Bl({inputs:{a:n,b:l},backend:e}),d=KS({inputs:{x:m},backend:e}),f=di({inputs:{x:d},backend:e,attrs:{axis:p,keepDims:!1}}),h=Ve({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Vl({inputs:{a:d,b:h},backend:e});return e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var fE={kernelName:Is,backendName:"cpu",kernelFunc:II};function BQ(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:II({inputs:{logits:n},backend:e,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=e.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=t.map(c=>{let l=Ic({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=du({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var vE={kernelName:la,backendName:"cpu",kernelFunc:vI};function qQ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.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[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:e.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Vf={kernelName:es,backendName:"cpu",kernelFunc:qQ};var jQ=ze((r,t)=>Math.pow(r,t)),XQ=Ye(ts,jQ),kE={kernelName:ts,backendName:"cpu",kernelFunc:XQ};function YQ(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.data.get(x.dataId).values),u=n.map(x=>x.shape),c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,[m,d,f]=Ef(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var NE={kernelName:Up,backendName:"cpu",kernelFunc:YQ};function QQ(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Rf(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],"int32",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var TE={kernelName:Gp,backendName:"cpu",kernelFunc:QQ};function ZQ(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.data.get(n.dataId).values,c=e.data.get(s.dataId).values,l=e.data.get(a.dataId).values,m=i.map(g=>e.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Df(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var _E={kernelName:Hp,backendName:"cpu",kernelFunc:ZQ};function JQ(r){let{backend:t,attrs:e}=r,{start:o,stop:n,dtype:s,step:a}=e,i=ap(o,n,a,s);return t.makeTensorInfo([i.length],s,i)}var $E={kernelName:ma,backendName:"cpu",kernelFunc:JQ};var e7=Ie(ns,r=>1/r),EE={kernelName:ns,backendName:"cpu",kernelFunc:e7};function t7(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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=e.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=e.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,E=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 e.makeTensorInfo(n.shape,n.dtype,h)}var FE={kernelName:Za,backendName:"cpu",kernelFunc:n7};function s7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e});let p=new tt(n.shape,n.dtype),u=e.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return e.makeTensorInfo(p.shape,p.dtype,p.values)}var PE={kernelName:ps,backendName:"cpu",kernelFunc:s7};var OE={kernelName:Ds,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 t=Math.floor(r);return r-t<.5?Math.floor(r):r-t>.5?Math.ceil(r):t%2===0?t:t+1}),ME={kernelName:cs,backendName:"cpu",kernelFunc:a7};function i7(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=e.bufferSync(n),f=e.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return e.makeTensorInfo(a,h.dtype,h.values)}var LE={kernelName:ms,backendName:"cpu",kernelFunc:i7};function u7(r,t){let e=0,o=r.length,n=0;for(;e1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?d7*r:m7*(Math.exp(r)-1)),WE={kernelName:hs,backendName:"cpu",kernelFunc:f7};var h7=Ie(ys,r=>r<0?-1:r>0?1:0),UE={kernelName:ys,backendName:"cpu",kernelFunc:h7};var g7=Ie(gs,r=>Math.sin(r)),GE={kernelName:gs,backendName:"cpu",kernelFunc:g7};var x7=Ie(xs,r=>Math.sinh(r)),HE={kernelName:xs,backendName:"cpu",kernelFunc:x7};var y7=11920928955078125e-23,KE=Math.log(y7)+2,b7=Ie(Cs,r=>{let t=r>-KE,e=rNumber(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var jE={kernelName:ji,backendName:"cpu",kernelFunc:w7};function S7(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape + ${a.shape}`);let i=e.data.get(o.dataId).values,p=e.data.get(n.dataId).values,u=e.data.get(s.dataId).values,c=e.data.get(a.dataId).values[0],[l,m,d,f,h]=Af(i,o.shape,o.dtype,p,n.dtype,u,c);return[e.makeTensorInfo(m,o.dtype,l),e.makeTensorInfo([m[0]],n.dtype,d),e.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var XE={kernelName:Hi,backendName:"cpu",kernelFunc:w7};function S7(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.data.get(n.dataId).values),i=e.data.get(o.dataId).values,p=Array.from(e.data.get(s.dataId).values),[u,c,l]=Pf(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var XE={kernelName:ti,backendName:"cpu",kernelFunc:S7};function I7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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(e.data.get(n.dataId).values),i=e.data.get(o.dataId).values,p=Array.from(e.data.get(s.dataId).values),[u,c,l]=Ff(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var YE={kernelName:ei,backendName:"cpu",kernelFunc:S7};function I7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Nc(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var YE={kernelName:ya,backendName:"cpu",kernelFunc:I7};function v7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Cc(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var QE={kernelName:ya,backendName:"cpu",kernelFunc:I7};function v7(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Nc(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var QE={kernelName:ba,backendName:"cpu",kernelFunc:v7};function k7(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1,f=e.bufferSync(n),h;switch(s.dtype){case"bool":{let g=e.bufferSync(s),x=!!e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"float32":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"int32":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"string":{let g=e.bufferSync(s),x=y.decodeString(e.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 e.makeTensorInfo(i,h.dtype,h.values)}var ZE={kernelName:ks,backendName:"cpu",kernelFunc:k7};function N7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Fo({inputs:{x:n},backend:e,attrs:{begin:u,size:m}});return u[i]+=l,d})}var JE={kernelName:xa,backendName:"cpu",kernelFunc:N7};var eR={kernelName:Xi,backendName:"cpu",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t;Q(e,"square");let n=o.data.get(e.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let e=t;return isNaN(r)?NaN:r>0?1:e.alpha}),tR={kernelName:So,backendName:"cpu",kernelFunc:T7};function _7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Ve({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 _=ct.computeOutShape(b,C,S),E=Fo({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Ve({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(E)}else{let _=e.bufferSync(n),E=Of(d,_,S,b);k=e.makeTensorInfo(f,E.dtype,E.values)}return k}var rR={kernelName:Ts,backendName:"cpu",kernelFunc:_7};function $7(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.data.get(c.dataId).values,d=e.data.get(l.dataId).values,[f,h]=gp(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var oR={kernelName:Ca,backendName:"cpu",kernelFunc:$7};function E7(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values[0],[u,c,l]=xp(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],"int32",u),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(l))]}var nR={kernelName:Yi,backendName:"cpu",kernelFunc:E7};function R7(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.data.get(s.dataId).values,i=yp(a,n);return e.makeTensorInfo(s.shape,"int32",i)}var sR={kernelName:Qi,backendName:"cpu",kernelFunc:R7};var D7=Ie($s,r=>Math.tan(r)),aR={kernelName:$s,backendName:"cpu",kernelFunc:D7};var A7=Ie(Es,r=>Math.tanh(r)),iR={kernelName:Es,backendName:"cpu",kernelFunc:A7};function F7(r){let{inputs:t,backend:e}=r,{tensor:o,indices:n,updates:s}=t,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=e.bufferSync(n),d=e.bufferSync(s),f=e.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return e.makeTensorInfo(o.shape,h.dtype,h.values)}var uR={kernelName:fs,backendName:"cpu",kernelFunc:F7};function P7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reps:s}=o;Q(n,"tile");let a=Mf(e.bufferSync(n),s);return e.makeTensorInfo(a.shape,a.dtype,a.values)}var pR={kernelName:po,backendName:"cpu",kernelFunc:P7};function O7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{k:s,sorted:a}=o;Q(n,"topk");let i=e.data.get(n.dataId).values,[p,u]=Lf(i,n.shape,n.dtype,s,a);return[e.makeTensorInfo(p.shape,p.dtype,p.values),e.makeTensorInfo(u.shape,u.dtype,u.values)]}var cR={kernelName:Rs,backendName:"cpu",kernelFunc:O7};function M7(r){let{inputs:t,attrs:e,backend:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=e,[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],E=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;Lt-1)if(t<=1)e=0;else{let o=2*t;e-=o*Math.trunc(e/o),e>=t&&(e=o-e-1)}return y.clamp(0,e,t-1)}function B7(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let o=t-1;e+=t*(Math.trunc(-e/o)+1)}else if(e>t-1)if(t<=1)e=0;else{let o=t-1;e-=t*Math.trunc(e/o)}return y.clamp(0,e,t-1)}function z7(r,t){return r}function V7(r,t){return y.clamp(0,r,t-1)}function ql(r,t,e,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&ie.disposeIntermediateTensorInfo(f)),d}var hR={kernelName:Ji,backendName:"cpu",kernelFunc:K7};var q7=[z_,jT,V_,W_,JT,U_,G_,H_,K_,q_,j_,X_,Y_,Q_,Z_,e$,t$,r$,o$,B_,n$,s$,a$,e_,i$,ZT,t_,u$,XT,p$,l$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,k$,N$,T$,_$,$$,E$,R$,D$,F$,A_,P$,r_,O$,o_,M$,n_,L$,B$,z$,s_,a_,V$,W$,U$,G$,i_,u_,YT,H$,c$,K$,q$,j$,F_,p_,c_,X$,l_,Y$,Q$,Z$,J$,eE,tE,rE,m_,oE,nE,sE,aE,uE,pE,cE,d_,lE,mE,hE,f_,h_,gE,xE,yE,g_,bE,SE,IE,Wf,vE,P_,y_,kE,NE,TE,_E,QT,Gl,$E,O_,M_,L_,EE,RE,DE,AE,FE,PE,OE,I_,ME,BE,zE,VE,k_,WE,UE,GE,N_,dE,KE,qE,jE,XE,YE,QE,ZE,JE,__,eR,$_,E_,tR,rR,oR,nR,sR,R_,A$,aR,iR,uR,pR,cR,mR,x_,dR,fR,hR,CE];for(let r of q7)ri(r);var Ac={};qe(Ac,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>rZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>BI,bindTextureUnit:()=>bR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>TI,createFragmentShader:()=>$I,createFramebuffer:()=>OI,createProgram:()=>EI,createStaticIndexBuffer:()=>AI,createStaticVertexBuffer:()=>DI,createTexture:()=>FI,createVertexShader:()=>_I,getBatchDim:()=>yi,getExtensionOrThrow:()=>Ec,getFramebufferErrorMessage:()=>CR,getMaxTexturesInShader:()=>WI,getNumChannels:()=>eZ,getProgramUniformLocation:()=>LI,getProgramUniformLocationOrThrow:()=>MI,getRowsCols:()=>bi,getShapeAs3D:()=>Dc,getTextureShapeFromLogicalShape:()=>zI,getWebGLDisjointQueryTimerVersion:()=>UI,getWebGLErrorMessage:()=>yR,getWebGLMaxTextureSize:()=>VI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>GI,isDownloadFloatTextureEnabled:()=>HI,isReshapeFree:()=>Cu,isWebGLFenceEnabled:()=>KI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>RI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>oZ,resetMaxTexturesInShader:()=>nZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>tZ,validateFramebuffer:()=>Rc,validateProgram:()=>Yl,validateTextureSize:()=>PI});var wp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function vI(r,t){wp[r]=t}function Kr(r,t){if(!(r in wp)||t!=null){let o=X7(r,t);if(o!==null)wp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let e=wp[r];return e==null||e.isContextLost()?(delete wp[r],Kr(r)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),wp[r])}function j7(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 X7(r,t){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let e=t==null?j7(r):t;return e.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete wp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?e.getContext("webgl",Uf)||e.getContext("experimental-webgl",Uf):e.getContext("webgl2",Uf)}var bu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(bu||(bu={}));var dr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(dr||(dr={}));var rr;(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"})(rr||(rr={}));function Sp(r,t){return[t,r]}function gR(r,t){return r*t}function jl(r){let t=y.sizeFromShape(r),e=Math.ceil(t/4);return y.sizeToSquarishShape(e)}function La(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function xR(r,t){let[e,o]=La(r,t);return e*o*4}function Xl(r,t){let e=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber("WEBGL_VERSION")===2?(o=e.R32F,n=e.R16F,s=e.RGBA16F,a=e.RGBA32F,i=e.RED,u=4,c=1,l=e.HALF_FLOAT,m=e.FLOAT,p=e.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=e.RGBA,i=r.RGBA,u=4,c=4,l=t!=null?t.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,t){let e=t();return A().getBool("DEBUG")&&Y7(r),e}function Y7(r){let t=r.getError();if(t!==r.NO_ERROR)throw new Error("WebGL Error: "+yR(r,t))}var Q7=596e-10,Z7=65504;function TI(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||Q7r.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function _I(r,t){let e=xi(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(e)),new Error("Failed to compile vertex shader.");return e}function $I(r,t){let e=xi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),A().get("ENGINE_COMPILE_ONLY"))return e;if(r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw qf(t,r.getShaderInfoLog(e)),new Error("Failed to compile fragment shader.");return e}var J7=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,t){let e=J7.exec(t);if(e==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(r);return}let o=+e[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=e.data.get(o.dataId).values,i=e.data.get(n.dataId).values,p=e.data.get(s.dataId).values,[u,c]=Cc(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var ZE={kernelName:ba,backendName:"cpu",kernelFunc:v7};function k7(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1,f=e.bufferSync(n),h;switch(s.dtype){case"bool":{let g=e.bufferSync(s),x=!!e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"float32":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"int32":{let g=e.bufferSync(s),x=e.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case"string":{let g=e.bufferSync(s),x=y.decodeString(e.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 e.makeTensorInfo(i,h.dtype,h.values)}var JE={kernelName:vs,backendName:"cpu",kernelFunc:k7};function N7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:u,size:m}});return u[i]+=l,d})}var eR={kernelName:xa,backendName:"cpu",kernelFunc:N7};var tR={kernelName:Ki,backendName:"cpu",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t;Q(e,"square");let n=o.data.get(e.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let e=t;return isNaN(r)?NaN:r>0?1:e.alpha}),rR={kernelName:wo,backendName:"cpu",kernelFunc:T7};function _7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ve({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),E=Ao({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=Ve({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(E)}else{let _=e.bufferSync(n),E=Pf(d,_,S,b);k=e.makeTensorInfo(f,E.dtype,E.values)}return k}var oR={kernelName:Ns,backendName:"cpu",kernelFunc:_7};function $7(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.data.get(c.dataId).values,d=e.data.get(l.dataId).values,[f,h]=up(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var nR={kernelName:Ca,backendName:"cpu",kernelFunc:$7};function E7(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.data.get(s.dataId).values,p=e.data.get(a.dataId).values[0],[u,c,l]=pp(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],"int32",u),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(l))]}var sR={kernelName:qi,backendName:"cpu",kernelFunc:E7};function R7(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.data.get(s.dataId).values,i=cp(a,n);return e.makeTensorInfo(s.shape,"int32",i)}var aR={kernelName:ji,backendName:"cpu",kernelFunc:R7};var D7=Ie(_s,r=>Math.tan(r)),iR={kernelName:_s,backendName:"cpu",kernelFunc:D7};var A7=Ie($s,r=>Math.tanh(r)),uR={kernelName:$s,backendName:"cpu",kernelFunc:A7};function F7(r){let{inputs:t,backend:e}=r,{tensor:o,indices:n,updates:s}=t,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=e.bufferSync(n),d=e.bufferSync(s),f=e.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return e.makeTensorInfo(o.shape,h.dtype,h.values)}var pR={kernelName:ds,backendName:"cpu",kernelFunc:F7};function P7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reps:s}=o;Q(n,"tile");let a=Of(e.bufferSync(n),s);return e.makeTensorInfo(a.shape,a.dtype,a.values)}var cR={kernelName:uo,backendName:"cpu",kernelFunc:P7};function O7(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{k:s,sorted:a}=o;Q(n,"topk");let i=e.data.get(n.dataId).values,[p,u]=Mf(i,n.shape,n.dtype,s,a);return[e.makeTensorInfo(p.shape,p.dtype,p.values),e.makeTensorInfo(u.shape,u.dtype,u.values)]}var lR={kernelName:Es,backendName:"cpu",kernelFunc:O7};function M7(r){let{inputs:t,attrs:e,backend:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=e,[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],E=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;Lt-1)if(t<=1)e=0;else{let o=2*t;e-=o*Math.trunc(e/o),e>=t&&(e=o-e-1)}return y.clamp(0,e,t-1)}function B7(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let o=t-1;e+=t*(Math.trunc(-e/o)+1)}else if(e>t-1)if(t<=1)e=0;else{let o=t-1;e-=t*Math.trunc(e/o)}return y.clamp(0,e,t-1)}function z7(r,t){return r}function V7(r,t){return y.clamp(0,r,t-1)}function Hl(r,t,e,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&ie.disposeIntermediateTensorInfo(f)),d}var gR={kernelName:Yi,backendName:"cpu",kernelFunc:K7};var q7=[V_,XT,W_,U_,e_,G_,H_,K_,q_,j_,X_,Y_,Q_,Z_,J_,t$,r$,o$,n$,z_,s$,a$,i$,t_,u$,JT,r_,p$,YT,c$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,k$,N$,T$,_$,$$,E$,R$,D$,A$,P$,F_,O$,o_,M$,n_,L$,s_,B$,z$,V$,a_,i_,W$,U$,G$,H$,u_,p_,QT,K$,l$,q$,j$,X$,P_,c_,l_,Y$,m_,Q$,Z$,J$,eE,tE,rE,oE,d_,nE,sE,aE,iE,pE,cE,lE,f_,mE,dE,gE,h_,g_,xE,yE,bE,x_,CE,IE,vE,Vf,kE,O_,b_,NE,TE,_E,$E,ZT,Wl,EE,M_,L_,B_,RE,DE,AE,FE,PE,OE,ME,v_,LE,zE,VE,WE,N_,UE,GE,HE,T_,fE,qE,jE,XE,YE,QE,ZE,JE,eR,$_,tR,E_,R_,rR,oR,nR,sR,aR,D_,F$,iR,uR,pR,cR,lR,dR,y_,fR,hR,gR,wE];for(let r of q7)ti(r);var Tc={};qe(Tc,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>rZ,bindColorTextureToFramebuffer:()=>Xl,bindTextureToProgramUniformSampler:()=>zI,bindTextureUnit:()=>CR,bindVertexBufferToProgramAttribute:()=>qf,callAndCheck:()=>ce,canBeRepresented:()=>_I,createFragmentShader:()=>EI,createFramebuffer:()=>MI,createProgram:()=>RI,createStaticIndexBuffer:()=>FI,createStaticVertexBuffer:()=>AI,createTexture:()=>PI,createVertexShader:()=>$I,getBatchDim:()=>hi,getExtensionOrThrow:()=>vc,getFramebufferErrorMessage:()=>wR,getMaxTexturesInShader:()=>UI,getNumChannels:()=>eZ,getProgramUniformLocation:()=>BI,getProgramUniformLocationOrThrow:()=>LI,getRowsCols:()=>gi,getShapeAs3D:()=>Nc,getTextureShapeFromLogicalShape:()=>VI,getWebGLDisjointQueryTimerVersion:()=>GI,getWebGLErrorMessage:()=>bR,getWebGLMaxTextureSize:()=>WI,hasExtension:()=>Kr,isCapableOfRenderingToFloatTexture:()=>HI,isDownloadFloatTextureEnabled:()=>KI,isReshapeFree:()=>hu,isWebGLFenceEnabled:()=>qI,isWebGLVersionEnabled:()=>Xf,linkProgram:()=>DI,logShaderSourceAndInfoLog:()=>Kf,resetMaxTextureSize:()=>oZ,resetMaxTexturesInShader:()=>nZ,unbindColorTextureFromFramebuffer:()=>jf,unbindTextureUnit:()=>tZ,validateFramebuffer:()=>kc,validateProgram:()=>jl,validateTextureSize:()=>OI});var dp={},Wf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function kI(r,t){dp[r]=t}function Hr(r,t){if(!(r in dp)||t!=null){let o=X7(r,t);if(o!==null)dp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let e=dp[r];return e==null||e.isContextLost()?(delete dp[r],Hr(r)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),dp[r])}function j7(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 X7(r,t){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let e=t==null?j7(r):t;return e.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete dp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(Wf.failIfMajorPerformanceCaveat=!1),r===1?e.getContext("webgl",Wf)||e.getContext("experimental-webgl",Wf):e.getContext("webgl2",Wf)}var fu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(fu||(fu={}));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 fp(r,t){return[t,r]}function xR(r,t){return r*t}function Kl(r){let t=y.sizeFromShape(r),e=Math.ceil(t/4);return y.sizeToSquarishShape(e)}function Ma(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function yR(r,t){let[e,o]=Ma(r,t);return e*o*4}function ql(r,t){let e=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber("WEBGL_VERSION")===2?(o=e.R32F,n=e.R16F,s=e.RGBA16F,a=e.RGBA32F,i=e.RED,u=4,c=1,l=e.HALF_FLOAT,m=e.FLOAT,p=e.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=e.RGBA,i=r.RGBA,u=4,c=4,l=t!=null?t.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,t){let e=t();return A().getBool("DEBUG")&&Y7(r),e}function Y7(r){let t=r.getError();if(t!==r.NO_ERROR)throw new Error("WebGL Error: "+bR(r,t))}var Q7=596e-10,Z7=65504;function _I(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||Q7r.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function $I(r,t){let e=fi(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(e)),new Error("Failed to compile vertex shader.");return e}function EI(r,t){let e=fi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(e,t)),ce(r,()=>r.compileShader(e)),A().get("ENGINE_COMPILE_ONLY"))return e;if(r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw Kf(t,r.getShaderInfoLog(e)),new Error("Failed to compile fragment shader.");return e}var J7=/ERROR: [0-9]+:([0-9]+):/g;function Kf(r,t){let e=J7.exec(t);if(e==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(r);return}let o=+e[1],n=r.split(` `),s=n.length.toString().length+2,a=n.map((l,m)=>y.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),"Unable to create WebGLProgram.")}function RI(r,t){if(ce(r,()=>r.linkProgram(t)),!A().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(t,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function Yl(r,t){if(ce(r,()=>r.validateProgram(t)),r.getProgramParameter(t,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function DI(r,t){let e=xi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function AI(r,t){let e=xi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function eZ(){return A().getNumber("WEBGL_VERSION")===2?1:4}function FI(r){return xi(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function PI(r,t){let e=A().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||t<=0){let o=`[${r}x${t}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>e||t>e){let o=`[${r}x${t}]`,n=`[${e}x${e}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function OI(r){return xi(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function jf(r,t,e,o,n,s,a){let i=r.getAttribLocation(t,e);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 bR(r,t,e){wR(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,t))}function tZ(r,t){wR(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function MI(r,t,e){return xi(r,()=>r.getUniformLocation(t,e),'uniform "'+e+'" not present in program.')}function LI(r,t,e){return r.getUniformLocation(t,e)}function BI(r,t,e,o){ce(r,()=>bR(r,t,o)),ce(r,()=>r.uniform1i(e,o))}function rZ(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,t,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0))}function Xf(r,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Rc(r){let t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+CR(r,t))}function CR(r,t){switch(t){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 ${t}`}}function xi(r,t,e){let o=ce(r,()=>t());if(o==null)throw new Error(e);return o}function wR(r,t){let e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=t+r.TEXTURE0;if(oe){let n=`[gl.TEXTURE0, gl.TEXTURE${e}]`;throw new Error(`textureUnit must be in ${n}.`)}}function yi(r,t=2){return y.sizeFromShape(r.slice(0,r.length-t))}function bi(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 Dc(r){let t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[yi(r),...bi(r)]),t}function zI(r,t=!1){let e=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=e/2),t&&(e=e*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<=e?s=[1,n]:r.length===2&&r[0]<=e&&r[1]<=e?s=r:r.length===3&&r[0]*r[1]<=e&&r[2]<=e?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=e&&r[1]*r[2]<=e?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=e&&r[3]<=e?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=e&&r[1]*r[2]*r[3]<=e&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||a)if(t){let i=yi(r),p=2,u=2;r.length&&([p,u]=bi(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 Cu(r,t){if(r=r.slice(-2),t=t.slice(-2),y.arraysEqual(r,t)||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){let e=r[r.length-1],o=t[t.length-1];if(e===o||Gf(e)&&Gf(o)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&Gf(r[0])&&Gf(t[0])}var Hf,Kf;function VI(r){if(Hf==null){let t=Kr(r);Hf=t.getParameter(t.MAX_TEXTURE_SIZE)}return Hf}function oZ(){Hf=null}function nZ(){Kf=null}function WI(r){if(Kf==null){let t=Kr(r);Kf=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function UI(r){if(r===0)return 0;let t,e=Kr(r);return qr(e,"EXT_disjoint_timer_query_webgl2")&&r===2?t=2:qr(e,"EXT_disjoint_timer_query")?t=1:t=0,t}function qr(r,t){return r.getExtension(t)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function GI(r){if(r===0)return!1;let t=Kr(r);if(r===1){if(!qr(t,"OES_texture_float"))return!1}else if(!qr(t,"EXT_color_buffer_float"))return!1;return NI(t)}function HI(r){if(r===0)return!1;let t=Kr(r);if(r===1){if(!qr(t,"OES_texture_float")||!qr(t,"WEBGL_color_buffer_float"))return!1}else{if(qr(t,"EXT_color_buffer_float"))return NI(t);let o="EXT_color_buffer_half_float";if(qr(t,o)){let n=t.getExtension(o);return sZ(t,n)}return!1}return NI(t)}function NI(r){let t=Xl(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,o,n,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(s),a}function sZ(r,t){let e=Xl(r,t),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatHalfFloat,n,s,0,e.textureFormatFloat,e.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 KI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} 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",()=>VI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>WI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Se.getNumber("WEBGL_VERSION");return r===0?0:UI(r)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!ou.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>GI(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",()=>HI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>KI(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",()=>ou.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 vt(){let r,t,e,o,n,s,a,i,p,u;return A().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",t="in",e="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=A().getBool("WEBGL2_ISNAN_CUSTOM")?` +`))}function RI(r){return fi(r,()=>r.createProgram(),"Unable to create WebGLProgram.")}function DI(r,t){if(ce(r,()=>r.linkProgram(t)),!A().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(t,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function jl(r,t){if(ce(r,()=>r.validateProgram(t)),r.getProgramParameter(t,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function AI(r,t){let e=fi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function FI(r,t){let e=fi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function eZ(){return A().getNumber("WEBGL_VERSION")===2?1:4}function PI(r){return fi(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function OI(r,t){let e=A().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||t<=0){let o=`[${r}x${t}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>e||t>e){let o=`[${r}x${t}]`,n=`[${e}x${e}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function MI(r){return fi(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function qf(r,t,e,o,n,s,a){let i=r.getAttribLocation(t,e);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 CR(r,t,e){SR(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,t))}function tZ(r,t){SR(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function LI(r,t,e){return fi(r,()=>r.getUniformLocation(t,e),'uniform "'+e+'" not present in program.')}function BI(r,t,e){return r.getUniformLocation(t,e)}function zI(r,t,e,o){ce(r,()=>CR(r,t,o)),ce(r,()=>r.uniform1i(e,o))}function rZ(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 Xl(r,t,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0))}function jf(r,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function kc(r){let t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+wR(r,t))}function wR(r,t){switch(t){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 ${t}`}}function fi(r,t,e){let o=ce(r,()=>t());if(o==null)throw new Error(e);return o}function SR(r,t){let e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=t+r.TEXTURE0;if(oe){let n=`[gl.TEXTURE0, gl.TEXTURE${e}]`;throw new Error(`textureUnit must be in ${n}.`)}}function hi(r,t=2){return y.sizeFromShape(r.slice(0,r.length-t))}function gi(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 Nc(r){let t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[hi(r),...gi(r)]),t}function VI(r,t=!1){let e=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=e/2),t&&(e=e*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<=e?s=[1,n]:r.length===2&&r[0]<=e&&r[1]<=e?s=r:r.length===3&&r[0]*r[1]<=e&&r[2]<=e?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=e&&r[1]*r[2]<=e?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=e&&r[3]<=e?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=e&&r[1]*r[2]*r[3]<=e&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||a)if(t){let i=hi(r),p=2,u=2;r.length&&([p,u]=gi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Uf(r){return r%2===0}function hu(r,t){if(r=r.slice(-2),t=t.slice(-2),y.arraysEqual(r,t)||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){let e=r[r.length-1],o=t[t.length-1];if(e===o||Uf(e)&&Uf(o)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&Uf(r[0])&&Uf(t[0])}var Gf,Hf;function WI(r){if(Gf==null){let t=Hr(r);Gf=t.getParameter(t.MAX_TEXTURE_SIZE)}return Gf}function oZ(){Gf=null}function nZ(){Hf=null}function UI(r){if(Hf==null){let t=Hr(r);Hf=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Hf)}function GI(r){if(r===0)return 0;let t,e=Hr(r);return Kr(e,"EXT_disjoint_timer_query_webgl2")&&r===2?t=2:Kr(e,"EXT_disjoint_timer_query")?t=1:t=0,t}function Kr(r,t){return r.getExtension(t)!=null}function Xf(r){try{if(Hr(r)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function HI(r){if(r===0)return!1;let t=Hr(r);if(r===1){if(!Kr(t,"OES_texture_float"))return!1}else if(!Kr(t,"EXT_color_buffer_float"))return!1;return TI(t)}function KI(r){if(r===0)return!1;let t=Hr(r);if(r===1){if(!Kr(t,"OES_texture_float")||!Kr(t,"WEBGL_color_buffer_float"))return!1}else{if(Kr(t,"EXT_color_buffer_float"))return TI(t);let o="EXT_color_buffer_half_float";if(Kr(t,o)){let n=t.getExtension(o);return sZ(t,n)}return!1}return TI(t)}function TI(r){let t=ql(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e);let o=1,n=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,o,n,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(s),a}function sZ(r,t){let e=ql(r,t),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o);let n=1,s=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatHalfFloat,n,s,0,e.textureFormatFloat,e.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 qI(r){return r!==2?!1:Hr(r).fenceSync!=null}function Vs(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} 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",()=>Xf(2)?2:Xf(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",()=>WI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>UI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Se.getNumber("WEBGL_VERSION");return r===0?0:GI(r)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Ji.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>HI(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",()=>KI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>qI(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",()=>Ji.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,t,e,o,n,s,a,i,p,u;return A().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",t="in",e="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=A().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:r,attribute:t,varyingVs:e,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,t,e="index"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function Ip(r,t,e="index"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function aZ(r,t){let e=r.length,o=r.map(s=>`${t}[${s}]`),n=new Array(e-1);n[e-2]=o[e-1];for(let s=e-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function SR(r,t,e="index"){let o=r.map((s,a)=>a),n=aZ(o,t);return n.map((s,a)=>{let i=`int ${r[a]} = ${e} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${e} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function Fc(r){let t=y.computeStrides(r).map(e=>e.toString());return` + `),{version:r,attribute:t,varyingVs:e,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,t,e="index"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function hp(r,t,e="index"){let o=y.computeStrides(t);return o.map((n,s)=>{let a=`int ${r[s]} = ${e} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function aZ(r,t){let e=r.length,o=r.map(s=>`${t}[${s}]`),n=new Array(e-1);n[e-2]=o[e-1];for(let s=e-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function IR(r,t,e="index"){let o=r.map((s,a)=>a),n=aZ(o,t);return n.map((s,a)=>{let i=`int ${r[a]} = ${e} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${e} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function _c(r){let t=y.computeStrides(r).map(e=>e.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } -`}function Pc(){return` +`}function $c(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var Qf=` +`}var Yf=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -147,10 +147,10 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return c / 255.0; } -`;var{getBroadcastDims:IR}=w;function vR(r,t,e){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};`)),e.enableShapeUniforms){let{uniformShape:h}=Zf(e.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;`)}}),e.enableShapeUniforms){switch(t.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;")}e.customUniforms&&e.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let n=o.join(` +`;var{getBroadcastDims:vR}=w;function kR(r,t,e){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};`)),e.enableShapeUniforms){let{uniformShape:h}=Qf(e.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;`)}}),e.enableShapeUniforms){switch(t.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;")}e.customUniforms&&e.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let n=o.join(` `),s=r.map(d=>iZ(d,t,e.packedInputs,e.enableShapeUniforms)).join(` -`),a=t.texShape,i=vt(),p=cZ(i),u,c,l=dZ(i);return t.isPacked?(u=uZ(t.logicalShape,a,e.enableShapeUniforms),c=mZ(i)):(u=pZ(t.logicalShape,a,e.enableShapeUniforms),c=lZ(i)),e.packedInputs&&(l+=xZ),[l,p,c,n,u,s,e.userCode].join(` -`)}function Mc(r,t=!1){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return $Z(r,t);case 1:return RZ(r,t);case 2:return AZ(r,t);case 3:return PZ(r,t);case 4:return MZ(r,t);case 5:return LZ(r);case 6:return BZ(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function kR(r,t){switch(r.shapeInfo.logicalShape.length){case 0:return _Z(r);case 1:return EZ(r,t);case 2:return DZ(r,t);case 3:return FZ(r,t);default:return OZ(r,t)}}function iZ(r,t,e=!1,o){let n="";e?n+=kR(r,o):n+=Mc(r,o);let s=r.shapeInfo.logicalShape,a=t.logicalShape;return s.length<=a.length&&(e?n+=zZ(r,t):n+=VZ(r,t)),n}function uZ(r,t,e){switch(r.length){case 0:return NR();case 1:return yZ(r,t,e);case 2:return NZ(r,t,e);case 3:return CZ(r,t,e);default:return SZ(r,t,e)}}function pZ(r,t,e){switch(r.length){case 0:return NR();case 1:return bZ(r,t,e);case 2:return TZ(r,t,e);case 3:return wZ(r,t,e);case 4:return IZ(r,t,e);case 5:return vZ(r,t);case 6:return kZ(r,t);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function cZ(r){return` +`),a=t.texShape,i=It(),p=cZ(i),u,c,l=dZ(i);return t.isPacked?(u=uZ(t.logicalShape,a,e.enableShapeUniforms),c=mZ(i)):(u=pZ(t.logicalShape,a,e.enableShapeUniforms),c=lZ(i)),e.packedInputs&&(l+=xZ),[l,p,c,n,u,s,e.userCode].join(` +`)}function Rc(r,t=!1){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return $Z(r,t);case 1:return RZ(r,t);case 2:return AZ(r,t);case 3:return PZ(r,t);case 4:return MZ(r,t);case 5:return LZ(r);case 6:return BZ(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function NR(r,t){switch(r.shapeInfo.logicalShape.length){case 0:return _Z(r);case 1:return EZ(r,t);case 2:return DZ(r,t);case 3:return FZ(r,t);default:return OZ(r,t)}}function iZ(r,t,e=!1,o){let n="";e?n+=NR(r,o):n+=Rc(r,o);let s=r.shapeInfo.logicalShape,a=t.logicalShape;return s.length<=a.length&&(e?n+=zZ(r,t):n+=VZ(r,t)),n}function uZ(r,t,e){switch(r.length){case 0:return TR();case 1:return yZ(r,t,e);case 2:return NZ(r,t,e);case 3:return CZ(r,t,e);default:return SZ(r,t,e)}}function pZ(r,t,e){switch(r.length){case 0:return TR();case 1:return bZ(r,t,e);case 2:return TZ(r,t,e);case 3:return wZ(r,t,e);case 4:return IZ(r,t,e);case 5:return vZ(r,t);case 6:return kZ(r,t);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function cZ(r){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${r.texture2D}(textureSampler, uv).r; } @@ -260,7 +260,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } -`;function NR(){return` +`;function TR(){return` int getOutputCoords() { return 0; } @@ -357,7 +357,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r","c","d"],r)} + ${hp(["r","c","d"],r)} return ivec3(r, c, d); } `;let o=Ws(["r","c","d"],r);return` @@ -414,7 +414,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r","c","d","d2"],r)} + ${hp(["r","c","d","d2"],r)} return ivec4(r, c, d, d2); } `;let o=Ws(["r","c","d","d2"],r);return` @@ -535,7 +535,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${r[1]}; return ivec2(r, c); } - `}function vp(r){return`offset${r}`}function _Z(r){let t=r.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),o=vt();return` + `}function gp(r){return`offset${r}`}function _Z(r){let t=r.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),o=It();return` vec4 ${e}() { return ${o.texture2D}(${t}, halfCR); } @@ -543,7 +543,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float ${o}() { return sampleTexture(${e}, halfCR); } - `;let a=vp(e);if(t)return` + `;let a=gp(e);if(t)return` float ${o}() { vec2 uv = uvFromFlat(${e}TexShape[0], ${e}TexShape[1], ${a}); return sampleTexture(${e}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${i}, ${p}, ${a}); return sampleTexture(${e}, uv); } - `}function EZ(r,t){let e=r.name,o="get"+e.charAt(0).toUpperCase()+e.slice(1),n=r.shapeInfo.texShape,s=vt();if(t)return` + `}function EZ(r,t){let e=r.name,o="get"+e.charAt(0).toUpperCase()+e.slice(1),n=r.shapeInfo.texShape,s=It();if(t)return` vec4 ${o}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${e}TexShape[0]) / 2.0), ceil(float(${e}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -568,13 +568,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } `}function RZ(r,t){let e=r.name,o="get"+e.charAt(0).toUpperCase()+e.slice(1);if(r.shapeInfo.isUniform)return` float ${o}(int index) { - ${Lc(r)} + ${Dc(r)} } `;let n=r.shapeInfo.texShape,s=n[0],a=n[1];if(a===1&&s===1)return` float ${o}(int index) { return sampleTexture(${e}, halfCR); } - `;let i=vp(e);return a===1?t?` + `;let i=gp(e);return a===1?t?` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${e}TexShape[0])); return sampleTexture(${e}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${a}, index + ${i}); return sampleTexture(${e}, uv); } - `}function DZ(r,t){let e=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=vt();if(s!=null&&y.arraysEqual(e,s))return t?` + `}function DZ(r,t){let e=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=It();if(s!=null&&y.arraysEqual(e,s))return t?` vec4 ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); @@ -638,17 +638,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } - `}let{newShape:a,keptDims:i}=y.squeezeShape(e),p=a;if(p.length=1?c="coords = 0;":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(` + `}function zZ(r,t){let e=r.name,o=e.charAt(0).toUpperCase()+e.slice(1),n="get"+o+"AtOutCoords",s=r.shapeInfo.logicalShape.length,a=t.logicalShape.length,i=vR(r.shapeInfo.logicalShape,t.logicalShape),p=Re(a),u=a-s,c,l=["x","y","z","w","u","v"];s===0?c="":a<2&&i.length>=1?c="coords = 0;":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(` `);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(", ");let d="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(t.logicalShape)===1;if(s===1&&!h&&!x)d=` return vec4(outputValue.xy, outputValue.xy); `;else if(h&&!x)a===1?d=` @@ -969,16 +969,16 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float ${n}() { return sampleTexture(${e}, resultUV); } - `;let u=Re(p),c=IR(r.shapeInfo.logicalShape,t.logicalShape),l=p-i,m,d=["x","y","z","w","u","v"];i===0?m="":p<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(` + `;let u=Re(p),c=vR(r.shapeInfo.logicalShape,t.logicalShape),l=p-i,m,d=["x","y","z","w","u","v"];i===0?m="":p<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(` `);let f="";return p<2&&i>0?f="coords":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+l]}`).join(", "),` float ${n}() { ${u} coords = getOutputCoords(); ${m} return get${o}(${f}); } - `}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,t,e){let{newShape:o,keptDims:n}=y.squeezeShape(t),s=t.length,a=r&&s===3&&t[0]===1,i=a?t.slice(1):o,p=!r&&s>1&&!y.arraysEqual(t,e)&&o.lengthr[e]).join(", ")}function _R(r,t,e,o){let n=e.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:t.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=vR(n,a,t),p=$I(r.gl,i),u=r.createProgram(p);return A().get("ENGINE_COMPILE_ONLY")?{program:t,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:t,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},qI(r,t,u)))}function qI(r,t,e){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(e,"NAN",!1),A().getNumber("WEBGL_VERSION")===1&&(p=r.getUniformLocation(e,"INFINITY",!1));let c=!1;for(let l of t.variableNames){let m={name:l,uniform:r.getUniformLocation(e,l,c),offset:r.getUniformLocation(e,`offset${l}`,c)};t.enableShapeUniforms&&(m.shape=r.getUniformLocation(e,`${l}Shape`,c),m.texShape=r.getUniformLocation(e,`${l}TexShape`,c)),o.push(m)}if(t.enableShapeUniforms&&(s=r.getUniformLocation(e,"outShape",c),i=r.getUniformLocation(e,"outShapeStrides",c),a=r.getUniformLocation(e,"outTexShape",c)),t.customUniforms)for(let l of t.customUniforms)n.push(r.getUniformLocation(e,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function TR(r,t){if(r.length!==t.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t.length} inputs`);r.forEach((e,o)=>{let n=e.logicalShape,s=t[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(e.isUniform&&s.isUniform)return;let i=e.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 $R(r,t,e,o,n){t.program.enableShapeUniforms||(TR(t.inShapeInfos,e),TR([t.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(t.webGLProgram),r.bindVertexArray(t.webGLProgram.vao),A().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&r.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&r.gl.uniform1f(t.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,e.shape),C=!r.packedInputs&&h===e.shape.length&&y.arraysEqual(p,e.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 pt(r){return A().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var Jf=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=bu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=` + `}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 Qf(r,t,e){let{newShape:o,keptDims:n}=y.squeezeShape(t),s=t.length,a=r&&s===3&&t[0]===1,i=a?t.slice(1):o,p=!r&&s>1&&!y.arraysEqual(t,e)&&o.lengthr[e]).join(", ")}function $R(r,t,e,o){let n=e.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:t.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=kR(n,a,t),p=EI(r.gl,i),u=r.createProgram(p);return A().get("ENGINE_COMPILE_ONLY")?{program:t,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:t,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},jI(r,t,u)))}function jI(r,t,e){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(e,"NAN",!1),A().getNumber("WEBGL_VERSION")===1&&(p=r.getUniformLocation(e,"INFINITY",!1));let c=!1;for(let l of t.variableNames){let m={name:l,uniform:r.getUniformLocation(e,l,c),offset:r.getUniformLocation(e,`offset${l}`,c)};t.enableShapeUniforms&&(m.shape=r.getUniformLocation(e,`${l}Shape`,c),m.texShape=r.getUniformLocation(e,`${l}TexShape`,c)),o.push(m)}if(t.enableShapeUniforms&&(s=r.getUniformLocation(e,"outShape",c),i=r.getUniformLocation(e,"outShapeStrides",c),a=r.getUniformLocation(e,"outTexShape",c)),t.customUniforms)for(let l of t.customUniforms)n.push(r.getUniformLocation(e,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function _R(r,t){if(r.length!==t.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t.length} inputs`);r.forEach((e,o)=>{let n=e.logicalShape,s=t[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(e.isUniform&&s.isUniform)return;let i=e.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 ER(r,t,e,o,n){t.program.enableShapeUniforms||(_R(t.inShapeInfos,e),_R([t.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(t.webGLProgram),r.bindVertexArray(t.webGLProgram.vao),A().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&r.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&r.gl.uniform1f(t.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}=Qf(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,e.shape),C=!r.packedInputs&&h===e.shape.length&&y.arraysEqual(p,e.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 Zf=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=fu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=It();this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ip(["r","c","d"],t):Ws(["r","c","d"],t)} + ${this.enableShapeUniforms?hp(["r","c","d"],t):Ws(["r","c","d"],t)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${e.output} = result; } - `}};var eh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=bu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=` + `}};var Jf=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=fu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=It();this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ip(["r","c","d"],t):Ws(["r","c","d"],t)} + ${this.enableShapeUniforms?hp(["r","c","d"],t):Ws(["r","c","d"],t)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${e.output} = result; } - `}};var th=class{constructor(t){this.variableNames=["A"],this.outTexUsage=dr.DOWNLOAD;let e=vt();this.outputShape=t,this.userCode=` - ${Qf} + `}};var eh=class{constructor(t){this.variableNames=["A"],this.outTexUsage=mr.DOWNLOAD;let e=It();this.outputShape=t,this.userCode=` + ${Yf} void main() { float x = getAAtOutCoords(); ${e.output} = encode_float(x); } - `}};var rh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=dr.DOWNLOAD;let e=vt();this.outputShape=t,this.userCode=` - ${Qf} + `}};var th=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let e=It();this.outputShape=t,this.userCode=` + ${Yf} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${e.output} = encode_float(x); } - `}};var GZ={R:0,G:1,B:2,A:3},Zl=class{constructor(t,e=!1,o="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=vt();this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length);let s="result";e&&(s="floor(result * 255. + 0.5)");let a="";for(let i=0;irv,createBufferFromOutputTexture:()=>sv,createFloat16MatrixTexture:()=>ZI,createFloat16PackedMatrixTexture:()=>tv,createFloat32MatrixTexture:()=>QI,createIndexBuffer:()=>YI,createPackedMatrixTexture:()=>ev,createUnsignedBytesMatrixTexture:()=>JI,createVertexBuffer:()=>XI,createVertexShader:()=>jI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>iv,downloadFloat32MatrixFromBuffer:()=>av,downloadMatrixFromPackedOutputTexture:()=>pv,downloadPackedMatrixFromBuffer:()=>uv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>ov,uploadPixelDataToTexture:()=>nv});function jI(r){let t=vt(),e=`${t.version} + `}};var lv={};qe(lv,{bindVertexProgramAttributeStreams:()=>ov,createBufferFromOutputTexture:()=>av,createFloat16MatrixTexture:()=>JI,createFloat16PackedMatrixTexture:()=>rv,createFloat32MatrixTexture:()=>ZI,createIndexBuffer:()=>QI,createPackedMatrixTexture:()=>tv,createUnsignedBytesMatrixTexture:()=>ev,createVertexBuffer:()=>YI,createVertexShader:()=>XI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>uv,downloadFloat32MatrixFromBuffer:()=>iv,downloadMatrixFromPackedOutputTexture:()=>cv,downloadPackedMatrixFromBuffer:()=>pv,getInternalFormatForFloat16MatrixTexture:()=>nh,getInternalFormatForFloat16PackedMatrixTexture:()=>ih,getInternalFormatForFloat32MatrixTexture:()=>oh,getInternalFormatForPackedMatrixTexture:()=>ah,getInternalFormatForUnsignedBytesMatrixTexture:()=>sh,uploadDenseMatrixToTexture:()=>nv,uploadPixelDataToTexture:()=>sv});function XI(r){let t=It(),e=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; @@ -1107,11 +1107,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return _I(r,e)}function XI(r){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 DI(r,t)}function YI(r){let t=new Uint16Array([0,1,2,2,1,3]);return AI(r,t)}function Jl(r,t,e,o,n,s){PI(t,e);let a=FI(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,t,e,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,t,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[e,t]}}function nh(r){return r.internalFormatFloat}function QI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ZI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function JI(r,t,e,o){let[n,s]=Sp(t,e);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function ev(r,t,e,o){let[n,s]=La(t,e);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function tv(r,t,e,o){let[n,s]=La(t,e);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function rv(r,t,e){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),jf(r,t,"clipSpacePos",e,3,20,0)&&jf(r,t,"uv",e,2,20,12)}function ov(r,t,e,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(e*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(e*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,e,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,e,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function nv(r,t,e){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t)),e.data instanceof Uint8Array?A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width,e.height,0,r.RGBA,r.UNSIGNED_BYTE,e.data)):A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,e)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function sv(r,t,e,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*t*e;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function av(r,t,e){let o=r,n=new Float32Array(e);return o.bindBuffer(o.PIXEL_PACK_BUFFER,t),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function iv(r,t,e,o){let[n,s]=Sp(t,e),a=4,i=new Uint8Array(gR(t*e,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function uv(r,t,e,o,n,s,a,i){let p=r,u=new Float32Array(xR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,t),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function pv(r,t,e){let o=new Float32Array(t*e*4);return ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,o)),o}var kp=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let e=A().getNumber("WEBGL_VERSION");if(t!=null?(this.gl=t,vI(e,t)):this.gl=Kr(e),t=this.gl,A().getNumber("WEBGL_VERSION")===2){let s=t;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(t!=null){let s=t.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(t,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(t,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(t,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(t,()=>t.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=Ec(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Ec(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=Ec(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=XI(this.gl),this.indexBuffer=YI(this.gl),this.framebuffer=OI(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 t=this.gl;ce(t,()=>t.finish()),ce(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),ce(t,()=>t.deleteFramebuffer(this.framebuffer)),ce(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),ce(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,e){return this.throwIfDisposed(),QI(this.gl,t,e,this.textureConfig)}createFloat16MatrixTexture(t,e){return this.throwIfDisposed(),ZI(this.gl,t,e,this.textureConfig)}createUnsignedBytesMatrixTexture(t,e){return this.throwIfDisposed(),JI(this.gl,t,e,this.textureConfig)}uploadPixelDataToTexture(t,e){this.throwIfDisposed(),nv(this.gl,t,e)}uploadDenseMatrixToTexture(t,e,o,n){this.throwIfDisposed(),ov(this.gl,t,e,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(t,e){return this.throwIfDisposed(),tv(this.gl,t,e,this.textureConfig)}createPackedMatrixTexture(t,e){return this.throwIfDisposed(),ev(this.gl,t,e,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,e,o){return this.downloadMatrixDriver(t,()=>iv(this.gl,e,o,this.textureConfig))}downloadPackedMatrixFromBuffer(t,e,o,n,s,a){return uv(this.gl,t,e,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,e){return av(this.gl,t,e)}createBufferFromTexture(t,e,o){this.bindTextureToFrameBuffer(t);let n=sv(this.gl,e,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e,o;if(A().getBool("WEBGL_FENCE_API_ENABLED")){let n=t,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},e=s}else A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:e,isFencePassed:o}}downloadMatrixFromPackedTexture(t,e,o){return this.downloadMatrixDriver(t,()=>pv(this.gl,e,o))}createProgram(t){this.throwIfDisposed();let e=this.gl;this.vertexShader==null&&(this.vertexShader=jI(e));let o=EI(e);ce(e,()=>e.attachShader(o,this.vertexShader)),ce(e,()=>e.attachShader(o,t)),RI(e,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(e,n),n}buildVao(t){this.setProgram(t),this.bindVertexArray(t.vao);let e=this.gl;ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),rv(e,t,this.vertexBuffer)}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&(ce(this.gl,()=>this.gl.deleteProgram(t)),this.deleteVertexArray(t.vao))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,e,o=!0){return this.throwIfDisposed(),o?MI(this.gl,t,e):LI(this.gl,t,e)}getAttributeLocation(t,e){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(t,e))}getUniformLocationNoThrow(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)}setInputMatrixTexture(t,e,o){this.throwIfDisposed(),this.throwIfNoProgram(),BI(this.gl,t,e,o)}setOutputMatrixTexture(t,e,o){this.setOutputMatrixTextureDriver(t,o,e)}setOutputPackedMatrixTexture(t,e,o){this.throwIfDisposed();let[n,s]=La(e,o);this.setOutputMatrixTextureDriver(t,n,s)}setOutputMatrixWriteRegion(t,e,o,n){this.setOutputMatrixWriteRegionDriver(o,t,n,e)}setOutputPackedMatrixWriteRegion(t,e,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&Yl(this.gl,this.program),Rc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;if(this.debug){let e=this.getVertexArray();console.assert(e===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Ec(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 t=this.getQueryTimerExtensionWebGL1(),e=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,e),e}endQuery(){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let e=this.gl,o=this.getQueryTimerExtensionWebGL2();e.endQuery(o.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(t,e){if(e===0)return null;if(e===2){let o=this.gl;return o.getQueryParameter(t,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(t,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,e){if(e===0)return!0;if(e===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(t,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(t,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(t){return new Promise(e=>{this.addItemToPoll(()=>t.isFencePassed(),()=>e())})}pollItems(){let t=HZ(this.itemsToPoll.map(e=>e.isDoneFn));for(let e=0;e<=t;++e){let{resolveFn:o}=this.itemsToPoll[e];o()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,e){if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),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(t){this.throwIfDisposed(),Ql(this.gl,t,this.framebuffer),this.debug&&Rc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Rc(this.gl)):Xf(this.gl,this.framebuffer)}downloadMatrixDriver(t,e){this.bindTextureToFrameBuffer(t);let o=e();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(t,e,o){this.throwIfDisposed();let n=this.gl;Ql(n,t,this.framebuffer),this.debug&&Rc(n),this.outputTexture=t,ce(n,()=>n.viewport(0,0,e,o)),ce(n,()=>n.scissor(0,0,e,o))}setOutputMatrixWriteRegionDriver(t,e,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(t,e,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 HZ(r){let t=0;for(;t`${r}.${e}`)}function Dt(r,t){return t===1?[r]:lv(r,t)}function SD(r,t){if(r===1)return"rc";let e="";for(let o=0;or.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),A().getNumber("WEBGL_VERSION")===1?ce(r,()=>r.texImage2D(i,0,o,t,e,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,t,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[e,t]}}function oh(r){return r.internalFormatFloat}function ZI(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,oh(o),o.textureFormatFloat,r.FLOAT)}function nh(r){return r.internalFormatHalfFloat}function JI(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,nh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function sh(r){return r.downloadTextureFormat}function ev(r,t,e,o){let[n,s]=fp(t,e);return Ql(r,n,s,sh(o),r.RGBA,r.UNSIGNED_BYTE)}function ah(r){return r.internalFormatPackedFloat}function tv(r,t,e,o){let[n,s]=Ma(t,e);return Ql(r,n,s,ah(o),r.RGBA,r.FLOAT)}function ih(r){return r.internalFormatPackedHalfFloat}function rv(r,t,e,o){let[n,s]=Ma(t,e);return Ql(r,n,s,ih(o),r.RGBA,o.textureTypeHalfFloat)}function ov(r,t,e){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),qf(r,t,"clipSpacePos",e,3,20,0)&&qf(r,t,"uv",e,2,20,12)}function nv(r,t,e,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(e*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(e*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,e,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,e,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function sv(r,t,e){ce(r,()=>r.bindTexture(r.TEXTURE_2D,t)),e.data instanceof Uint8Array?A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width,e.height,0,r.RGBA,r.UNSIGNED_BYTE,e.data)):A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,e)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function av(r,t,e,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*t*e;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function iv(r,t,e){let o=r,n=new Float32Array(e);return o.bindBuffer(o.PIXEL_PACK_BUFFER,t),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function uv(r,t,e,o){let[n,s]=fp(t,e),a=4,i=new Uint8Array(xR(t*e,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function pv(r,t,e,o,n,s,a,i){let p=r,u=new Float32Array(yR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,t),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function cv(r,t,e){let o=new Float32Array(t*e*4);return ce(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,o)),o}var xp=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let e=A().getNumber("WEBGL_VERSION");if(t!=null?(this.gl=t,kI(e,t)):this.gl=Hr(e),t=this.gl,A().getNumber("WEBGL_VERSION")===2){let s=t;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(t!=null){let s=t.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(t,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(t,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(t,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(t,()=>t.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=vc(this.gl,s),Kr(this.gl,a))this.textureHalfFloatExtension=vc(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),Kr(this.gl,n))this.colorBufferHalfFloatExtension=vc(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",Kr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Kr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=YI(this.gl),this.indexBuffer=QI(this.gl),this.framebuffer=MI(this.gl),this.textureConfig=ql(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 t=this.gl;ce(t,()=>t.finish()),ce(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),ce(t,()=>t.deleteFramebuffer(this.framebuffer)),ce(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),ce(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,e){return this.throwIfDisposed(),ZI(this.gl,t,e,this.textureConfig)}createFloat16MatrixTexture(t,e){return this.throwIfDisposed(),JI(this.gl,t,e,this.textureConfig)}createUnsignedBytesMatrixTexture(t,e){return this.throwIfDisposed(),ev(this.gl,t,e,this.textureConfig)}uploadPixelDataToTexture(t,e){this.throwIfDisposed(),sv(this.gl,t,e)}uploadDenseMatrixToTexture(t,e,o,n){this.throwIfDisposed(),nv(this.gl,t,e,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(t,e){return this.throwIfDisposed(),rv(this.gl,t,e,this.textureConfig)}createPackedMatrixTexture(t,e){return this.throwIfDisposed(),tv(this.gl,t,e,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(jf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,e,o){return this.downloadMatrixDriver(t,()=>uv(this.gl,e,o,this.textureConfig))}downloadPackedMatrixFromBuffer(t,e,o,n,s,a){return pv(this.gl,t,e,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,e){return iv(this.gl,t,e)}createBufferFromTexture(t,e,o){this.bindTextureToFrameBuffer(t);let n=av(this.gl,e,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e,o;if(A().getBool("WEBGL_FENCE_API_ENABLED")){let n=t,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},e=s}else A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:e,isFencePassed:o}}downloadMatrixFromPackedTexture(t,e,o){return this.downloadMatrixDriver(t,()=>cv(this.gl,e,o))}createProgram(t){this.throwIfDisposed();let e=this.gl;this.vertexShader==null&&(this.vertexShader=XI(e));let o=RI(e);ce(e,()=>e.attachShader(o,this.vertexShader)),ce(e,()=>e.attachShader(o,t)),DI(e,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&jl(e,n),n}buildVao(t){this.setProgram(t),this.bindVertexArray(t.vao);let e=this.gl;ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),ov(e,t,this.vertexBuffer)}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&(ce(this.gl,()=>this.gl.deleteProgram(t)),this.deleteVertexArray(t.vao))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&jl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,e,o=!0){return this.throwIfDisposed(),o?LI(this.gl,t,e):BI(this.gl,t,e)}getAttributeLocation(t,e){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(t,e))}getUniformLocationNoThrow(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)}setInputMatrixTexture(t,e,o){this.throwIfDisposed(),this.throwIfNoProgram(),zI(this.gl,t,e,o)}setOutputMatrixTexture(t,e,o){this.setOutputMatrixTextureDriver(t,o,e)}setOutputPackedMatrixTexture(t,e,o){this.throwIfDisposed();let[n,s]=Ma(e,o);this.setOutputMatrixTextureDriver(t,n,s)}setOutputMatrixWriteRegion(t,e,o,n){this.setOutputMatrixWriteRegionDriver(o,t,n,e)}setOutputPackedMatrixWriteRegion(t,e,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&jl(this.gl,this.program),kc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;if(this.debug){let e=this.getVertexArray();console.assert(e===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=vc(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 t=this.getQueryTimerExtensionWebGL1(),e=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,e),e}endQuery(){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let e=this.gl,o=this.getQueryTimerExtensionWebGL2();e.endQuery(o.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(t,e){if(e===0)return null;if(e===2){let o=this.gl;return o.getQueryParameter(t,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(t,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,e){if(e===0)return!0;if(e===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(t,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(t,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(t){return new Promise(e=>{this.addItemToPoll(()=>t.isFencePassed(),()=>e())})}pollItems(){let t=HZ(this.itemsToPoll.map(e=>e.isDoneFn));for(let e=0;e<=t;++e){let{resolveFn:o}=this.itemsToPoll[e];o()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,e){if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),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(t){this.throwIfDisposed(),Xl(this.gl,t,this.framebuffer),this.debug&&kc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Xl(this.gl,this.outputTexture,this.framebuffer),this.debug&&kc(this.gl)):jf(this.gl,this.framebuffer)}downloadMatrixDriver(t,e){this.bindTextureToFrameBuffer(t);let o=e();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(t,e,o){this.throwIfDisposed();let n=this.gl;Xl(n,t,this.framebuffer),this.debug&&kc(n),this.outputTexture=t,ce(n,()=>n.viewport(0,0,e,o)),ce(n,()=>n.scissor(0,0,e,o))}setOutputMatrixWriteRegionDriver(t,e,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(t,e,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 HZ(r){let t=0;for(;t`${r}.${e}`)}function Rt(r,t){return t===1?[r]:mv(r,t)}function ID(r,t){if(r===1)return"rc";let e="";for(let o=0;o= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${e[0]}), cEdge ? 0. : getA(${e[1]}), rEdge ? 0. : getA(${e[2]}), - rEdge || cEdge ? 0. : getA(${e[3]})`}};var Vc=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length);let o="";for(let n=0;n<4;n++){let s="thisRC = rc;";n%2===1&&(s+="thisRC.z += 1;"),n>1&&(s+="thisRC.y += 1;"),o+=` + rEdge || cEdge ? 0. : getA(${e[3]})`}};var Pc=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=t,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+=` ${s} ${n>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); @@ -1147,7 +1147,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n>0?"}":""} `}this.userCode=` ${KZ(e,this.enableShapeUniforms)} - ${this.enableShapeUniforms?Pc():Fc(t)} + ${this.enableShapeUniforms?$c():_c(t)} void main() { ivec3 rc = getOutputCoords(); @@ -1164,10 +1164,10 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } `}};function KZ(r,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t?SR(["r","c","d"],"inputShape"):Ws(["r","c","d"],r)} + ${t?IR(["r","c","d"],"inputShape"):Ws(["r","c","d"],r)} return ivec3(r, c, d); } - `}var dh=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(t,e,o){let n=vD(e,o),s=kD(t,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=ID(t,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===rr.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):n===rr.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):n===rr.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):n===rr.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):n===rr.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(t,e,o,n){if(this.freeTextures==null)return;let s=vD(o,n),a=kD(e,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=ID(e,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(t.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(t),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(t);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 t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let e=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*e)}%)`)}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 t in this.freeTextures)this.freeTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});for(let t in this.usedTextures)this.usedTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function qZ(r,t){let e=r;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===r.RGBA)return 16;if(t===e.RGBA16F)return 8;if(t===e.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function ID(r,t,e,o,n){let s=jZ(t,o),a;if(n){let[p,u]=La(r[0],r[1]);a=p*u}else{let[p,u]=Sp(r[0],r[1]);a=p*u}let i=qZ(e,s);return a*i}function jZ(r,t){switch(r){case rr.PACKED_2X2_FLOAT32:return ih(t);case rr.PACKED_2X2_FLOAT16:return uh(t);case rr.UNPACKED_FLOAT32:return nh(t);case rr.UNPACKED_FLOAT16:return sh(t);case rr.PACKED_4X1_UNSIGNED_BYTE:return ah(t);default:throw new Error(`Unknown physical texture type ${r}`)}}function XZ(r){return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?rr.PACKED_2X2_FLOAT32:rr.UNPACKED_FLOAT32:r?rr.PACKED_2X2_FLOAT16:rr.UNPACKED_FLOAT16}function vD(r,t){if(r===dr.UPLOAD)return rr.PACKED_2X2_FLOAT32;if(r===dr.RENDER||r==null)return XZ(t);if(r===dr.DOWNLOAD||r===dr.PIXELS)return rr.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function kD(r,t,e){return`${r[0]}_${r[1]}_${t}_${e}`}var or=class{constructor(t,e){this.variableNames=["A"],this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=` + `}var mh=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(t,e,o){let n=kD(e,o),s=ND(t,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=vD(t,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(t[0],t[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):n===er.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(t,e,o,n){if(this.freeTextures==null)return;let s=kD(o,n),a=ND(e,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=vD(e,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(t.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(t),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(t);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 t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let e=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*e)}%)`)}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 t in this.freeTextures)this.freeTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});for(let t in this.usedTextures)this.usedTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function qZ(r,t){let e=r;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===r.RGBA)return 16;if(t===e.RGBA16F)return 8;if(t===e.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function vD(r,t,e,o,n){let s=jZ(t,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=fp(r[0],r[1]);a=p*u}let i=qZ(e,s);return a*i}function jZ(r,t){switch(r){case er.PACKED_2X2_FLOAT32:return ah(t);case er.PACKED_2X2_FLOAT16:return ih(t);case er.UNPACKED_FLOAT32:return oh(t);case er.UNPACKED_FLOAT16:return nh(t);case er.PACKED_4X1_UNSIGNED_BYTE:return sh(t);default:throw new Error(`Unknown physical texture type ${r}`)}}function XZ(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 kD(r,t){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return XZ(t);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function ND(r,t,e){return`${r[0]}_${r[1]}_${t}_${e}`}var tr=class{constructor(t,e){this.variableNames=["A"],this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${e} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Ut="if (isnan(x)) return x;",ND="return x;",mv="return abs(x);";var TD="return (x >= 0.0) ? x : (exp(x) - 1.0);",_D=Ut+` + `}},Wt="if (isnan(x)) return x;",TD="return x;",dv="return abs(x);";var _D="return (x >= 0.0) ? x : (exp(x) - 1.0);",$D=Wt+` return (x < 0.0) ? 0.0 : x; -`,$D=Ut+` +`,ED=Wt+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Ba="return x;",ED="return 1.0 / (1.0 + exp(-1.0 * x));";var DD="return x;",AD=` +`,La="return x;",RD="return 1.0 / (1.0 + exp(-1.0 * x));";var AD="return x;",FD=` 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; -`,FD=` +`,PD=` 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; -`,PD=` +`,OD=` 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; -`,OD="return 1.0 / (1.0 + exp(-1.0 * x));",Fr=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=` +`,MD="return 1.0 / (1.0 + exp(-1.0 * x));",Ar=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${e} } @@ -1222,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}};var fh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t,this.enableShapeUniforms=pt(this.outputShape.length);let e=t.length,o=Dt("rc",e),n=Re(e),s=SD(e,o),a=o.slice(-2),i=e<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` + `}};var dh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t,this.enableShapeUniforms=ut(this.outputShape.length);let e=t.length,o=Rt("rc",e),n=Re(e),s=ID(e,o),a=o.slice(-2),i=e<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${n} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${i})); } - `}};var QZ=Wt.whereImpl,ZZ=1e-7,JZ=1e-4,hh={};function e9(r){return r in hh||(hh[r]={}),hh[r]}var t9=A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),r9=600;function o9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*r9/1024/1024}var wu=class extends ao{nextDataId(){return wu.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,!A().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let e;if(t!=null){if(t instanceof kp)e=t;else{let o=Kr(A().getNumber("WEBGL_VERSION"),t);e=new kp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber("WEBGL_VERSION"));e=new kp(o),this.binaryCache=e9(A().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=e,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=o9(),this.texData=new zo(this,pr())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,e,o,n,s,a){let i=this.makeTensorInfo(e,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:t,texShape:[n,s]},p.texShape=[n,s];let u=Dc(e),c=new Zl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=e,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(t,e,o){if((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||A().getBool("DEBUG"))&&this.checkNumericalProblems(t),o==="complex64"&&t!=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:e,dtype:o,values:t,usage:dr.UPLOAD,refCount:1}),n}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let e=this.texData.get(t);e.refCount++}decRef(t){if(this.texData.has(t)){let e=this.texData.get(t);e.refCount--}}move(t,e,o,n,s){if(A().getBool("DEBUG")&&this.checkNumericalProblems(e),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:o,dtype:n,values:e,usage:dr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let e=this.texData.get(t),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=e;if(a!=null){let m;p?m=new Fr(i,Ba):m=new or(i,Ba);let d=this.runWebGLProgram(m,[{dataId:t,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(t,l)}async read(t){if(this.pendingRead.has(t)){let f=this.pendingRead.get(t);return new Promise(h=>f.push(h))}let e=this.texData.get(t),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=e;if(s!=null){let f;p?f=new Fr(n,Ba):f=new or(n,Ba);let h=this.runWebGLProgram(f,[{dataId:t,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(n))}this.pendingRead.set(t,[]),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(t);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(t,l),d=this.pendingRead.get(t);return this.pendingRead.delete(t),d.forEach(f=>f(m)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&pr().removeDataId(t,this),this.pendingDeletes--),m}readToGPU(t,e={}){let o=this.texData.get(t),{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,Ba):d=new or(s,Ba);let f=this.runWebGLProgram(d,[{dataId:t,shape:s,dtype:i}],i),h=this.readToGPU(f,e);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(t,e.customTexShape),l=pr().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}checkNumericalProblems(t){if(t!=null)for(let e=0;e0}time(t){let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=y.now(),t)}async getQueryTime(t){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let e=t;return e.endMs-e.startMs}disposeData(t,e=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(e?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!e&&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:o}=this.texData.get(t);return o!=null&&(this.disposeData(o.real.dataId,e),this.disposeData(o.imag.dataId,e)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:e,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(t),p=i&&i.origDataId||t,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),e!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(e,n,s,a)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,e=t9){return A().getBool("WEBGL_CPU_FORWARD")&&t.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,t,e)}else n=this.write(o,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}}makeOutput(t,e,o){return pr().makeTensorFromTensorInfo(this.makeTensorInfo(t,e,o),this)}unpackTensor(t){let e=new fh(t.shape);return this.runWebGLProgram(e,[t],t.dtype)}packTensor(t){let e=new mh(t.shape),o=!0;return this.runWebGLProgram(e,[t],t.dtype,null,o)}packedReshape(t,e){let o=[yi(t.shape),...bi(t.shape)],n={dtype:t.dtype,shape:o,dataId:t.dataId},s=[yi(e),...bi(e)],a=new Vc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],t.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}decode(t,e){let o=this.texData.get(t),{isPacked:n,shape:s,dtype:a}=o;if(e!=null){let m=y.sizeFromShape(s),d=e[0]*e[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=Dc(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[e!=null?e:jl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:t}],a,c,u,e);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(t,e,o,n,s=!1,a){let i=this.makeTensorInfo(t.outputShape,o),p=this.texData.get(i.dataId);if(t.packedOutput&&(p.isPacked=!0),t.outPackingScheme===bu.DENSE){let x=a!=null?a:jl(t.outputShape);p.texShape=x.map(b=>b*2)}if(t.outTexUsage!=null&&(p.usage=t.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=e.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(!t.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};t.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!t.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!Cu(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=ER(t,c,l),d=this.getAndSaveBinary(m,()=>_R(this.gpgpu,t,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||$R(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:t.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(t,e,o,n,s=!1){return o=o||e[0].dtype,this.runWebGLProgram(t,e,o,n,s)}getAndSaveBinary(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=A().getBool("DEBUG");A().set("DEBUG",!1);let e=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",t),e>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?ZZ:JZ}uploadToGPU(t){let e=this.texData.get(t),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=e;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=e.texShape;if(l==null&&(l=zI(o,p),e.texShape=l),s!=null){let m=Dc(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=La(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=dr.PIXELS:C.usage=dr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],k=!0,_=this.runWebGLProgram(d,[b],n,S,k),E=this.texData.get(_.dataId);e.texShape=E.texShape,e.isPacked=E.isPacked,e.usage=E.usage,A().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(e.texture=E.texture,e.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);e.texture=m}}convertAndCacheOnCPU(t,e){let o=this.texData.get(t),{dtype:n}=o;return e!=null&&(o.values=n9(e,n)),o.values}acquireTexture(t,e,o,n){if(this.numBytesInGPU+=this.computeBytes(t,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(t,e,n)}computeBytes(t,e){return t[0]*t[1]*y.bytesPerElement(e)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,e]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(e));return Promise.all(t)}else{for(let[,e]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(e),n(!0)}catch(s){throw s}});t.push(o)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await pS(),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?(qf(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:e,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=qI(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=e,t.customUniformLocations=o,t.infLoc=n,t.nanLoc=s,t.outShapeLocation=a,t.outShapeStridesLocation=i,t.outTexShapeLocation=p}}createTensorFromGPUData(t,e,o){t.channels=t.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=t,p=pr().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,e,o,s,a,i);return pr().makeTensorFromDataId(u,e,o,p)}};wu.nextDataId=0;function n9(r,t){if(t==="float32"||t==="complex64")return r;if(t==="int32"||t==="bool"){let e=t==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew wu,2);var Cat={forceHalfFloat:MD};var Wc=` + `}};var QZ=Vt.whereImpl,ZZ=1e-7,JZ=1e-4,fh={};function e9(r){return r in fh||(fh[r]={}),fh[r]}var t9=A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),r9=600;function o9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*r9/1024/1024}var Oc=class r extends so{nextDataId(){return r.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,!A().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let e;if(t!=null){if(t instanceof xp)e=t;else{let o=Hr(A().getNumber("WEBGL_VERSION"),t);e=new xp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Hr(A().getNumber("WEBGL_VERSION"));e=new xp(o),this.binaryCache=e9(A().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=e,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new mh(this.gpgpu),this.numMBBeforeWarning=o9(),this.texData=new Bo(this,ur())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,e,o,n,s,a){let i=this.makeTensorInfo(e,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:t,texShape:[n,s]},p.texShape=[n,s];let u=Nc(e),c=new Yl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=e,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(t,e,o){if((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||A().getBool("DEBUG"))&&this.checkNumericalProblems(t),o==="complex64"&&t!=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:e,dtype:o,values:t,usage:mr.UPLOAD,refCount:1}),n}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let e=this.texData.get(t);e.refCount++}decRef(t){if(this.texData.has(t)){let e=this.texData.get(t);e.refCount--}}move(t,e,o,n,s){if(A().getBool("DEBUG")&&this.checkNumericalProblems(e),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:o,dtype:n,values:e,usage:mr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let e=this.texData.get(t),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=e;if(a!=null){let m;p?m=new Ar(i,La):m=new tr(i,La);let d=this.runWebGLProgram(m,[{dataId:t,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(t,l)}async read(t){if(this.pendingRead.has(t)){let f=this.pendingRead.get(t);return new Promise(h=>f.push(h))}let e=this.texData.get(t),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=e;if(s!=null){let f;p?f=new Ar(n,La):f=new tr(n,La);let h=this.runWebGLProgram(f,[{dataId:t,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(t);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(t);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...Kl(n))}this.pendingRead.set(t,[]),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(t);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(t,l),d=this.pendingRead.get(t);return this.pendingRead.delete(t),d.forEach(f=>f(m)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&ur().removeDataId(t,this),this.pendingDeletes--),m}readToGPU(t,e={}){let o=this.texData.get(t),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let d;p?d=new Ar(s,La):d=new tr(s,La);let f=this.runWebGLProgram(d,[{dataId:t,shape:s,dtype:i}],i),h=this.readToGPU(f,e);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(t,e.customTexShape),l=ur().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let o=e.map(n=>y.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}checkNumericalProblems(t){if(t!=null)for(let e=0;e0}time(t){let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=y.now(),t)}async getQueryTime(t){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let e=t;return e.endMs-e.startMs}disposeData(t,e=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(e?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!e&&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:o}=this.texData.get(t);return o!=null&&(this.disposeData(o.real.dataId,e),this.disposeData(o.imag.dataId,e)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:e,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(t),p=i&&i.origDataId||t,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),e!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(e,n,s,a)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,e=t9){return A().getBool("WEBGL_CPU_FORWARD")&&t.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,t,e)}else n=this.write(o,t,e);return this.texData.get(n).usage=null,{dataId:n,shape:t,dtype:e}}makeOutput(t,e,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t,e,o),this)}unpackTensor(t){let e=new dh(t.shape);return this.runWebGLProgram(e,[t],t.dtype)}packTensor(t){let e=new lh(t.shape),o=!0;return this.runWebGLProgram(e,[t],t.dtype,null,o)}packedReshape(t,e){let o=[hi(t.shape),...gi(t.shape)],n={dtype:t.dtype,shape:o,dataId:t.dataId},s=[hi(e),...gi(e)],a=new Pc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],t.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}decode(t,e){let o=this.texData.get(t),{isPacked:n,shape:s,dtype:a}=o;if(e!=null){let m=y.sizeFromShape(s),d=e[0]*e[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=Nc(s),p;n?p=new Jf(i):p=new Zf(i);let u=!0,c=[e!=null?e:Kl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:t}],a,c,u,e);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(t,e,o,n,s=!1,a){let i=this.makeTensorInfo(t.outputShape,o),p=this.texData.get(i.dataId);if(t.packedOutput&&(p.isPacked=!0),t.outPackingScheme===fu.DENSE){let x=a!=null?a:Kl(t.outputShape);p.texShape=x.map(b=>b*2)}if(t.outTexUsage!=null&&(p.usage=t.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=e.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(!t.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};t.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!t.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!hu(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=RR(t,c,l),d=this.getAndSaveBinary(m,()=>$R(this.gpgpu,t,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||ER(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:t.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(t,e,o,n,s=!1){return o=o||e[0].dtype,this.runWebGLProgram(t,e,o,n,s)}getAndSaveBinary(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=A().getBool("DEBUG");A().set("DEBUG",!1);let e=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",t),e>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?ZZ:JZ}uploadToGPU(t){let e=this.texData.get(t),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=e;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=e.texShape;if(l==null&&(l=VI(o,p),e.texShape=l),s!=null){let m=Nc(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 rh(m,g):d=new Yl(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]],k=!0,_=this.runWebGLProgram(d,[b],n,S,k),E=this.texData.get(_.dataId);e.texShape=E.texShape,e.isPacked=E.isPacked,e.usage=E.usage,A().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(e.texture=E.texture,e.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);e.texture=m}}convertAndCacheOnCPU(t,e){let o=this.texData.get(t),{dtype:n}=o;return e!=null&&(o.values=n9(e,n)),o.values}acquireTexture(t,e,o,n){if(this.numBytesInGPU+=this.computeBytes(t,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(t,e,n)}computeBytes(t,e){return t[0]*t[1]*y.bytesPerElement(e)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,e]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(e));return Promise.all(t)}else{for(let[,e]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(e),n(!0)}catch(s){throw s}});t.push(o)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await pS(),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?(Kf(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:e,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=jI(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=e,t.customUniformLocations=o,t.infLoc=n,t.nanLoc=s,t.outShapeLocation=a,t.outShapeStridesLocation=i,t.outTexShapeLocation=p}}createTensorFromGPUData(t,e,o){t.channels=t.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=t,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,e,o,s,a,i);return ur().makeTensorFromDataId(u,e,o,p)}};Oc.nextDataId=0;function n9(r,t){if(t==="float32"||t==="complex64")return r;if(t==="int32"||t==="bool"){let e=t==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Oc,2);var Cat={forceHalfFloat:LD};var Mc=` if (isnan(a)) return a; if (isnan(b)) return b; -`;var Pr=class{constructor(t,e,o){this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.enableShapeUniforms=pt(this.outputShape.length),this.userCode=` +`;var Fr=class{constructor(t,e,o){this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${t} } @@ -1242,12 +1242,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } - `}};var Xr=` + `}};var jr=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; -`;var jr=class{constructor(t,e,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o);let s=this.outputShape.length;this.enableShapeUniforms=pt(s);let a="";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` +`;var qr=class{constructor(t,e,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o);let s=this.outputShape.length;this.enableShapeUniforms=ut(s);let a="";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; @@ -1261,7 +1261,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; - `;else{let p=Dt("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 = @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function At(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var LD={kernelName:wo,backendName:"webgl",kernelFunc:At};function Or(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,"complex64"),a=e.texData.get(s.dataId),i=At({inputs:{x:o},backend:e}),p=At({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var BD={kernelName:Fi,backendName:"webgl",kernelFunc:Or};var dv="return (a < 0.) ? b * a : a;",fv=` + `}};function Dt(r){let{inputs:t,backend:e}=r,{x:o}=t;return e.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var BD={kernelName:Co,backendName:"webgl",kernelFunc:Dt};function Pr(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,"complex64"),a=e.texData.get(s.dataId),i=Dt({inputs:{x:o},backend:e}),p=Dt({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var zD={kernelName:Ri,backendName:"webgl",kernelFunc:Pr};var fv="return (a < 0.) ? b * a : a;",hv=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function a9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=e.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(fv,n.shape,a.shape):new Pr(dv,n.shape,a.shape),p=e.runWebGLProgram(i,[n,a],"float32");return e.disposeIntermediateTensorInfo(a),p}var zD={kernelName:Rn,backendName:"webgl",kernelFunc:a9};var hv="return (a < 0.) ? b * a : a;",gv=` +`;function a9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=e.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new qr(hv,n.shape,a.shape):new Fr(fv,n.shape,a.shape),p=e.runWebGLProgram(i,[n,a],"float32");return e.disposeIntermediateTensorInfo(a),p}var VD={kernelName:En,backendName:"webgl",kernelFunc:a9};var gv="return (a < 0.) ? b * a : a;",xv=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function i9(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(gv,o.shape,n.shape):new Pr(hv,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],"float32")}var VD={kernelName:os,backendName:"webgl",kernelFunc:i9};var Po="if (isnan(x)) return x;";function xe({opSnippet:r,packedOpSnippet:t,cpuKernelImpl:e,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&e!=null){let l=i.texData.get(a.dataId),m=e(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return u?c=new Fr(a.shape,t):c=new or(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:t,checkOutOfBounds:e=!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},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],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")&&t!=null,d;return m?d=new jr(t,p.shape,u.shape,e):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function Ci(r,t=!1){if(r==="linear")return t?DD:ND;if(r==="relu")return t?FD:_D;if(r==="elu")return t?AD:TD;if(r==="relu6")return t?PD:$D;if(r==="prelu")return t?gv:hv;if(r==="leakyrelu")return t?fv:dv;if(r==="sigmoid")return t?OD:ED;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Uc=class{constructor(t,e,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=pt(this.outputShape.length);let c=n?t[1]:t[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) { +`;function i9(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new qr(xv,o.shape,n.shape):new Fr(gv,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],"float32")}var WD={kernelName:rs,backendName:"webgl",kernelFunc:i9};var Fo="if (isnan(x)) return x;";function xe({opSnippet:r,packedOpSnippet:t,cpuKernelImpl:e,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&e!=null){let l=i.texData.get(a.dataId),m=e(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return u?c=new Ar(a.shape,t):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:t,checkOutOfBounds:e=!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},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Fr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,E],dt(S.dtype,k.dtype))}),b=Pr({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")&&t!=null,d;return m?d=new qr(t,p.shape,u.shape,e):d=new Fr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function xi(r,t=!1){if(r==="linear")return t?AD:TD;if(r==="relu")return t?PD:$D;if(r==="elu")return t?FD:_D;if(r==="relu6")return t?OD:ED;if(r==="prelu")return t?xv:gv;if(r==="leakyrelu")return t?hv:fv;if(r==="sigmoid")return t?MD:RD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Lc=class{constructor(t,e,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?t[1]:t[2],l=Math.ceil(c/2),m=n?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",f=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";i&&(p?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:u?g=`vec4 activation(vec4 a) { @@ -1336,7 +1336,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};var xv={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},em=class{constructor(t,e,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.userCode=` + `}};var yv={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},Zl=class{constructor(t,e,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.userCode=` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { ${t} @@ -1349,7 +1349,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float bimag = getBImagAtOutCoords(); setOutput(binaryOpComplex(areal, aimag, breal, bimag)); } - `}};var WD="return a * b;";function tm(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=w.upcastType(o.dtype,n.dtype);if(o.dtype==="complex64"){let i=e.texData.get(o.dataId),p=e.texData.get(n.dataId),u=new em(xv.REAL,o.shape,n.shape),c=new em(xv.IMAG,o.shape,n.shape),l=[{dataId:i.complexTensorInfos.real.dataId,dtype:i.complexTensorInfos.real.dtype,shape:o.shape},{dataId:i.complexTensorInfos.imag.dataId,dtype:i.complexTensorInfos.imag.dtype,shape:o.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:n.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:n.shape}],m=e.runWebGLProgram(u,l,"float32"),d=e.runWebGLProgram(c,l,"float32"),f=Or({inputs:{real:m,imag:d},backend:e});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}if(e.shouldExecuteOnCPU([o,n])){let i=e.texData.get(o.dataId),p=e.texData.get(n.dataId),[u,c]=ZR(o.shape,n.shape,i.values,p.values,s),l=e.makeTensorInfo(c,s),m=e.texData.get(l.dataId);return m.values=u,l}let a;return A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?a=new jr(WD,o.shape,n.shape):a=new Pr(WD,o.shape,n.shape),e.runWebGLProgram(a,[o,n],s)}var UD={kernelName:Yn,backendName:"webgl",kernelFunc:tm};function GD(r,t,e){let o=[yi(r.shape),...bi(r.shape)],n={dtype:r.dtype,shape:o,dataId:r.dataId},s=[yi(t),...bi(t)],a=new Vc(s,o),i=!0,p=[o],u=e.runWebGLProgram(a,[n],r.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function te(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{shape:s}=o,a=e,i=y.sizeFromShape(n.shape),p=y.inferFromImplicitShape(s,i),u=y.sizeFromShape(p);y.assert(i===u,()=>`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!Cu(n.shape,p)&&!(c.texture!==null&&Cu(c.shape,p))?GD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var HD={kernelName:da,backendName:"webgl",kernelFunc:te};var rm=class{constructor(t,e){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(e!=null){let l=1/e;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%o>0&&(c=` + `}};var UD="return a * b;";function Jl(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=w.upcastType(o.dtype,n.dtype);if(o.dtype==="complex64"){let i=e.texData.get(o.dataId),p=e.texData.get(n.dataId),u=new Zl(yv.REAL,o.shape,n.shape),c=new Zl(yv.IMAG,o.shape,n.shape),l=[{dataId:i.complexTensorInfos.real.dataId,dtype:i.complexTensorInfos.real.dtype,shape:o.shape},{dataId:i.complexTensorInfos.imag.dataId,dtype:i.complexTensorInfos.imag.dtype,shape:o.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:n.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:n.shape}],m=e.runWebGLProgram(u,l,"float32"),d=e.runWebGLProgram(c,l,"float32"),f=Pr({inputs:{real:m,imag:d},backend:e});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}if(e.shouldExecuteOnCPU([o,n])){let i=e.texData.get(o.dataId),p=e.texData.get(n.dataId),[u,c]=JR(o.shape,n.shape,i.values,p.values,s),l=e.makeTensorInfo(c,s),m=e.texData.get(l.dataId);return m.values=u,l}let a;return A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?a=new qr(UD,o.shape,n.shape):a=new Fr(UD,o.shape,n.shape),e.runWebGLProgram(a,[o,n],s)}var GD={kernelName:Xn,backendName:"webgl",kernelFunc:Jl};function HD(r,t,e){let o=[hi(r.shape),...gi(r.shape)],n={dtype:r.dtype,shape:o,dataId:r.dataId},s=[hi(t),...gi(t)],a=new Pc(s,o),i=!0,p=[o],u=e.runWebGLProgram(a,[n],r.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function te(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{shape:s}=o,a=e,i=y.sizeFromShape(n.shape),p=y.inferFromImplicitShape(s,i),u=y.sizeFromShape(p);y.assert(i===u,()=>`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!hu(n.shape,p)&&!(c.texture!==null&&hu(c.shape,p))?HD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var KD={kernelName:da,backendName:"webgl",kernelFunc:te};var em=class{constructor(t,e){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(e!=null){let l=1/e;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%o>0&&(c=` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } @@ -1402,7 +1402,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(sumValue); } - `}};var gh=class{constructor(t,e){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i="0.0",p="";e==="prod"?i="1.0":e==="min"?(i="1.0 / 1e-20",p="min"):e==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e==="sum"?u="sumValue":e==="prod"?u="prodValue":e==="all"?u="allValue":e==="any"&&(u="anyValue");let c=Math.floor(o/4)*4,l=o%4,m=` + `}};var hh=class{constructor(t,e){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=t;this.outputShape=[n,a];let i="0.0",p="";e==="prod"?i="1.0":e==="min"?(i="1.0 / 1e-20",p="min"):e==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e==="sum"?u="sumValue":e==="prod"?u="prodValue":e==="all"?u="allValue":e==="any"&&(u="anyValue");let c=Math.floor(o/4)*4,l=o%4,m=` if (${e==="sum"}) { sumValue += dot(values, ones); } else if (${e==="prod"}) { @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${u}); } - `}};function p9(r){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let e=t.length?t[t.length-1].outSize:r[1],o=w.computeOptimalWindowSize(e);t.push({inSize:e,windowSize:o,outSize:Math.ceil(e/o)})}return t}function Yr(r,t,e,o){let n=p9(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(t);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=lv("rc",this.rank),a=new Array(this.rank);for(let c=0;c6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(t);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=mv("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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=e?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p==="leakyrelu",z=p!=null?Ci(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>yv&&U===!1){let Y=E,J=R;e&&(Y=Ct({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=Ct({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=Tp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,t.dtype),J=new Uc(k,_,[P,d,f],e,o,M,z,L,B),re=[E,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 l9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var XD={kernelName:Io,backendName:"webgl",kernelFunc:l9};var YD="return abs(x);";function m9(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=e.texData.get(o.dataId),a=ch(s.values);return e.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Fr(o.shape,YD):n=new or(o.shape,YD),e.runWebGLProgram(n,[o],o.dtype)}var QD={kernelName:Xs,backendName:"webgl",kernelFunc:m9};var d9=Ut+` + `}};function gu(r,t,e){let o=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xh(r.shape,t):new gh(r.shape,t);return e.runWebGLProgram(o,[r],r.dtype)}function qD(r,t,e,o){let n=t,s=r.shape.length,a=y.parseAxisParam(n,r.shape),i=a,p=w.getAxesPermutation(i,s),u=p!=null,c=r;u&&(c=gu(r,p,o),i=w.getInnerMostAxes(i.length,s)),w.assertAxesAreInnerMostDims("sum",i,s);let[l,m]=w.computeOutAndReduceShapes(c.shape,i),d=l;e&&(d=w.expandShapeToKeepDim(l,a));let f=y.sizeFromShape(m),g=y.sizeFromShape(r.shape)/f,x=te({inputs:{x:c},attrs:{shape:[g,f]},backend:o}),b=oi(r.dtype),C=Xr(x,b,"sum",o),S=te({inputs:{x:C},attrs:{shape:d},backend:o});return o.disposeIntermediateTensorInfo(x),o.disposeIntermediateTensorInfo(C),u&&o.disposeIntermediateTensorInfo(c),S}function bp(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return qD(n,s,a,e)}var jD={kernelName:Ss,backendName:"webgl",kernelFunc:bp};function bt(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{perm:s}=o,a=e,i=n.shape.length,p=new Array(i);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=e?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p==="leakyrelu",z=p!=null?xi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>bv&&U===!1){let Y=E,J=R;e&&(Y=bt({inputs:{x:E},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=Jl({inputs:{a:ee,b:ie},backend:n});j=bp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,t.dtype),J=new Lc(k,_,[P,d,f],e,o,M,z,L,B),re=[E,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 l9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Cp({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var YD={kernelName:So,backendName:"webgl",kernelFunc:l9};var QD="return abs(x);";function m9(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=e.texData.get(o.dataId),a=ph(s.values);return e.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Ar(o.shape,QD):n=new tr(o.shape,QD),e.runWebGLProgram(n,[o],o.dtype)}var ZD={kernelName:Xs,backendName:"webgl",kernelFunc:m9};var d9=Wt+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,f9=xe({opSnippet:d9}),ZD={kernelName:Wo,backendName:"webgl",kernelFunc:f9};var h9=Ut+` +`,f9=xe({opSnippet:d9}),JD={kernelName:Vo,backendName:"webgl",kernelFunc:f9};var h9=Wt+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,backendName:"webgl",kernelFunc:g9};var eA="return a + b;",x9=nt({opSnippet:eA,packedOpSnippet:eA,supportsComplex:!0,cpuKernelImpl:RR}),tA={kernelName:uo,backendName:"webgl",kernelFunc:x9};var bh=class{constructor(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` +return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),eA={kernelName:Wo,backendName:"webgl",kernelFunc:g9};var tA="return a + b;",x9=nt({opSnippet:tA,packedOpSnippet:tA,supportsComplex:!0,cpuKernelImpl:DR}),rA={kernelName:io,backendName:"webgl",kernelFunc:x9};var yh=class{constructor(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1531,7 +1531,7 @@ return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,back float result = ${n}; setOutput(result); } - `}};var Ch=class{constructor(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` + `}};var bh=class{constructor(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1539,7 +1539,7 @@ return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,back vec4 result = ${n}; setOutput(result); } - `}};function wh(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return At({inputs:{x:o[0]},backend:e});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:e}),c=wh({inputs:o.slice(p),backend:e});return wh({inputs:[u,c],backend:e})}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 e.runWebGLProgram(i,o,n)}var rA={kernelName:Go,backendName:"webgl",kernelFunc:wh};function y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,"all",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var oA={kernelName:Ho,backendName:"webgl",kernelFunc:y9};function b9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,"any",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Ko,backendName:"webgl",kernelFunc:b9};var Sh=class{constructor(t,e,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=t;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=e==="max"?">":"<",p=o?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` + `}};function Ch(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return Dt({inputs:{x:o[0]},backend:e});if(o.length>A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(o.length/2),u=Ch({inputs:o.slice(0,p),backend:e}),c=Ch({inputs:o.slice(p),backend:e});return Ch({inputs:[u,c],backend:e})}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 bh(o[0].shape,s):new yh(o[0].shape,s);return e.runWebGLProgram(i,o,n)}var oA={kernelName:Uo,backendName:"webgl",kernelFunc:Ch};function y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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:e,attrs:{shape:[-1,f]}}),g=Xr(h,h.dtype,"all",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var nA={kernelName:Go,backendName:"webgl",kernelFunc:y9};function b9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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:e,attrs:{shape:[-1,f]}}),g=Xr(h,h.dtype,"any",e),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(l),x}var sA={kernelName:Ho,backendName:"webgl",kernelFunc:b9};var wh=class{constructor(t,e,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=t;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=e==="max"?">":"<",p=o?"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));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,back } setOutput(float(bestIndex)); } - `}};var Ih=class{constructor(t,e,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(t.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=t[t.length-1],a=Math.ceil(s/e);this.outputShape=t.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=Dt("coords",p),l,m;if(a===1){m=p+1;let R=Re(m);l=` + `}};var Sh=class{constructor(t,e,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(t.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=t[t.length-1],a=Math.ceil(s/e);this.outputShape=t.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=` ${R} sourceLocR = ${R}(${c.join()}, 0); ++${c[p-1]}; ${R} sourceLocG = ${R}(${c.join()}, 0); @@ -1575,7 +1575,7 @@ return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,back ${u} sourceLocA = coords; --${c[p-1]}; ${u} sourceLocB = coords; - --${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=Dt("sourceLocR",m-1).concat("inIdx.r"),x=Dt("sourceLocG",m-1).concat("inIdx.g"),b=Dt("sourceLocB",m-1).concat("inIdx.b"),C=Dt("sourceLocA",m-1).concat("inIdx.a"),S=o==="max"?"greaterThan":"lessThan",k=n?"":` + --${c[p-2]};`;let d=["x","y","z","w","u","v"].slice(0,m),f="."+d[m-1],h=d.map(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?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), @@ -1621,25 +1621,25 @@ return log(x + sqrt(x * x - 1.0));`,g9=xe({opSnippet:h9}),JD={kernelName:Uo,back } setOutput(bestIndex); } - `}};function sA(r,t,e,o=null){let n=t.shape[0],s=t.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,e,o==null),u=[t];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,"int32");if(c.shape[1]===1)return c;let l=sA(r,t,e,c);return r.disposeIntermediateTensorInfo(c),l}function aA(r,t,e,o=null){let n=o!=null?o.shape:t.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(n,a,e,o==null),p=o==null?[t]:[t,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===t.shape.length){let c=aA(r,t,e,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,t,e,o){let n=[e];if(w.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,t.shape.length),!A().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],a=r.texData.get(t.dataId),i=a!==null&&a.isPacked,p=t;i&&(p=r.unpackTensor(t),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=sA(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 aA(r,t,o)}function C9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:e,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(e,p,a[0],"max");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var iA={kernelName:Ys,backendName:"webgl",kernelFunc:C9};function w9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:e,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(e,p,a[0],"min");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Qs,backendName:"webgl",kernelFunc:w9};var S9=Ut+` + `}};function aA(r,t,e,o=null){let n=t.shape[0],s=t.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 wh(i,e,o==null),u=[t];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,"int32");if(c.shape[1]===1)return c;let l=aA(r,t,e,c);return r.disposeIntermediateTensorInfo(c),l}function iA(r,t,e,o=null){let n=o!=null?o.shape:t.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Sh(n,a,e,o==null),p=o==null?[t]:[t,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===t.shape.length){let c=iA(r,t,e,u);return r.disposeIntermediateTensorInfo(u),c}return u}function Ih(r,t,e,o){let n=[e];if(w.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,t.shape.length),!A().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],a=r.texData.get(t.dataId),i=a!==null&&a.isPacked,p=t;i&&(p=r.unpackTensor(t),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=aA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return iA(r,t,o)}function C9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=Ih(e,p,a[0],"max");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var uA={kernelName:Ys,backendName:"webgl",kernelFunc:C9};function w9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=Ih(e,p,a[0],"min");return u.forEach(l=>e.disposeIntermediateTensorInfo(l)),c}var pA={kernelName:Qs,backendName:"webgl",kernelFunc:w9};var S9=Wt+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,I9=xe({opSnippet:S9}),pA={kernelName:qo,backendName:"webgl",kernelFunc:I9};var v9=Ut+"return log(x + sqrt(x * x + 1.0));",k9=xe({opSnippet:v9}),cA={kernelName:jo,backendName:"webgl",kernelFunc:k9};var N9=Ut+` +`,I9=xe({opSnippet:S9}),cA={kernelName:Ko,backendName:"webgl",kernelFunc:I9};var v9=Wt+"return log(x + sqrt(x * x + 1.0));",k9=xe({opSnippet:v9}),lA={kernelName:qo,backendName:"webgl",kernelFunc:k9};var N9=Wt+` return atan(x); -`,T9=xe({opSnippet:N9}),lA={kernelName:Xo,backendName:"webgl",kernelFunc:T9};var _9=Wc+` +`,T9=xe({opSnippet:N9}),mA={kernelName:jo,backendName:"webgl",kernelFunc:T9};var _9=Mc+` return atan(a, b); `,$9=` 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); - `+Xr+` + `+jr+` return result; -`,E9=nt({opSnippet:_9,packedOpSnippet:$9}),mA={kernelName:Qo,backendName:"webgl",kernelFunc:E9};var R9=Ut+` +`,E9=nt({opSnippet:_9,packedOpSnippet:$9}),dA={kernelName:Yo,backendName:"webgl",kernelFunc:E9};var R9=Wt+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelName:Yo,backendName:"webgl",kernelFunc:D9};var Us=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideHeight,p=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterHeight,m=t.effectiveFilterWidth,d=t.padInfo.top,f=t.padInfo.left;this.outputShape=t.outShape;let h=e==="avg",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let R=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),fA={kernelName:Xo,backendName:"webgl",kernelFunc:D9};var Us=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideHeight,p=t.strideWidth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterHeight,m=t.effectiveFilterWidth,d=t.padInfo.top,f=t.padInfo.left;this.outputShape=t.outShape;let h=e==="avg",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let R=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${p}); const ivec2 pads = ivec2(${d}, ${f}); @@ -1780,7 +1780,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(${S}); } - `}},Iu=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideDepth,p=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,l=t.dilationHeight,m=t.dilationWidth,d=t.effectiveFilterDepth,f=t.effectiveFilterHeight,h=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;let C=e==="avg",S="0.0";if(C||(S="-1.0 / 1e-20"),o){let P=">=";this.userCode=` + `}},xu=class{constructor(t,e,o,n=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=t.filterWidth,i=t.strideDepth,p=t.strideHeight,u=t.strideWidth,c=t.dilationDepth,l=t.dilationHeight,m=t.dilationWidth,d=t.effectiveFilterDepth,f=t.effectiveFilterHeight,h=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;let C=e==="avg",S="0.0";if(C||(S="-1.0 / 1e-20"),o){let P=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${p}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${b}); @@ -1943,7 +1943,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(${_}); } - `}};function A9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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 At({inputs:{x:n},backend:e});let l=new Us(c,"avg",!1);return e.runWebGLProgram(l,[n],"float32")}var fA={kernelName:Zo,backendName:"webgl",kernelFunc:A9};function F9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 Iu(l,"avg",!1);return e.runWebGLProgram(m,[n],"float32")}var hA={kernelName:Zs,backendName:"webgl",kernelFunc:F9};var kh=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=p-1-t.padInfo.top,l=u-1-t.padInfo.left,m=1/(e*o);this.userCode=` + `}};function A9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;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:e});let l=new Us(c,"avg",!1);return e.runWebGLProgram(l,[n],"float32")}var hA={kernelName:Qo,backendName:"webgl",kernelFunc:A9};function F9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 xu(l,"avg",!1);return e.runWebGLProgram(m,[n],"float32")}var gA={kernelName:Zs,backendName:"webgl",kernelFunc:F9};var vh=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterHeight,u=t.effectiveFilterWidth,c=p-1-t.padInfo.top,l=u-1-t.padInfo.left,m=1/(e*o);this.userCode=` const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${m}); @@ -1985,7 +1985,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},Nh=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,m=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,h=m-1-t.padInfo.top,g=d-1-t.padInfo.left,x=1/(e*o*n);this.userCode=` + `}},kh=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.effectiveFilterDepth,m=t.effectiveFilterHeight,d=t.effectiveFilterWidth,f=l-1-t.padInfo.front,h=m-1-t.padInfo.top,g=d-1-t.padInfo.left,x=1/(e*o*n);this.userCode=` const ivec3 pads = ivec3(${f}, ${h}, ${g}); const float avgMultiplier = float(${x}); @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}};function P9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGLProgram(d,[n],a.dtype)}var gA={kernelName:Ai,backendName:"webgl",kernelFunc:P9};function O9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGLProgram(l,[n],a.dtype)}var xA={kernelName:Di,backendName:"webgl",kernelFunc:O9};function M9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var yA={kernelName:Jo,backendName:"webgl",kernelFunc:M9};var Th=class{constructor(t,e,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i="0.0";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` + `}};function P9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 kh(m);return e.runWebGLProgram(d,[n],a.dtype)}var xA={kernelName:Ei,backendName:"webgl",kernelFunc:P9};function O9(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 vh(c);return e.runWebGLProgram(l,[n],a.dtype)}var yA={kernelName:$i,backendName:"webgl",kernelFunc:O9};function M9(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return Cp({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var bA={kernelName:Zo,backendName:"webgl",kernelFunc:M9};var Nh=class{constructor(t,e,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i="0.0";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=t,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;`,D9=xe({opSnippet:R9}),dA={kernelNam float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}};var _h=class{constructor(t,e,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i="vec4(0.0)";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` + `}};var Th=class{constructor(t,e,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(t,e),w.assertAndGetBroadcastShape(t,o);let i="vec4(0.0)";n!=null&&(w.assertAndGetBroadcastShape(t,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(w.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${p}; @@ -2064,7 +2064,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam setOutput((x - mean) * inv + offset); } - `}};var L9=({inputs:r,backend:t,attrs:e})=>{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}=e;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 t.runWebGLProgram(m,u,u[0].dtype)},bA={kernelName:vn,backendName:"webgl",kernelFunc:L9};var $h=class{constructor(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;let e=Re(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=B9(this.rank),n,s=t.map((a,i)=>`sourceLoc.${bv[i]} = start[${i}] + coords.${bv[i]};`);n=` + `}};var L9=({inputs:r,backend:t,attrs:e})=>{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}=e;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 Th(o.shape,n.shape,s.shape,c,l,p):new Nh(o.shape,n.shape,s.shape,c,l,p);return t.runWebGLProgram(m,u,u[0].dtype)},CA={kernelName:In,backendName:"webgl",kernelFunc:L9};var _h=class{constructor(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;let e=Re(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=B9(this.rank),n,s=t.map((a,i)=>`sourceLoc.${Cv[i]} = start[${i}] + coords.${Cv[i]};`);n=` ${e} sourceLoc; ${e} coords = getOutputCoords(); ${s.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${n} setOutput(getSource(${o})); } - `}},bv=["x","y","z","w","u","v"];function B9(r){if(r===1)return"sourceLoc";if(r<=6)return bv.slice(0,r).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var Eh=class{constructor(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let e=Re(this.rank),o=Dt("coords",this.rank),n=Dt("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=` + `}},Cv=["x","y","z","w","u","v"];function B9(r){if(r===1)return"sourceLoc";if(r<=6)return Cv.slice(0,r).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=class{constructor(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let e=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=` result.x = ${a}; if (++${o[this.rank-1]} < ${t[this.rank-1]}) { ++${n[this.rank-1]}; @@ -2103,7 +2103,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${p} setOutput(result); } - `}};function z9(r,t,e,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(e,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=e,a.dtype=r.dtype;let i=ct.computeFlatOffset(t,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:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=ct.parseSliceParams(n,s,a);if(ct.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);if(e.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=e.texData.get(n.dataId),m=pD(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=e.texData.get(n.dataId),c=ct.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Eh(p):new $h(p),m=[i];return e.runWebGLProgram(l,[n],n.dtype,m)}return e.uploadToGPU(n.dataId),z9(n,i,p,e)}var CA={kernelName:ha,backendName:"webgl",kernelFunc:Gs};var V9=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=Ct({inputs:{x:f},backend:e,attrs:{perm:u}}),g=te({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeIntermediateTensorInfo(b)),x},wA={kernelName:Js,backendName:"webgl",kernelFunc:V9};function W9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),u=ph(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var SA={kernelName:en,backendName:"webgl",kernelFunc:W9};var U9=` + `}};function z9(r,t,e,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(e,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=e,a.dtype=r.dtype;let i=pt.computeFlatOffset(t,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:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);if(e.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=e.texData.get(n.dataId),m=cD(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=e.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 _h(p),m=[i];return e.runWebGLProgram(l,[n],n.dtype,m)}return e.uploadToGPU(n.dataId),z9(n,i,p,e)}var wA={kernelName:ha,backendName:"webgl",kernelFunc:Gs};var V9=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:e,attrs:{perm:u}}),g=te({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeIntermediateTensorInfo(b)),x},SA={kernelName:Js,backendName:"webgl",kernelFunc:V9};function W9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),u=uh(i,p,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,u)}var IA={kernelName:Jo,backendName:"webgl",kernelFunc:W9};var U9=` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); @@ -2111,7 +2111,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam return vec4(r, g, rb, ra); `,G9=` return float(int(a.r) & int(b.r)); -`;function H9(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS"),a=A().getNumber("WEBGL_VERSION");if(e.shouldExecuteOnCPU([o,n])||a===1){let p=e.texData.get(o.dataId).values,u=e.texData.get(n.dataId).values,[c,l]=AR(o.shape,n.shape,p,u,o.dtype),m=e.makeTensorInfo(l,o.dtype),d=e.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(U9,o.shape,n.shape,!1):i=new Pr(G9,o.shape,n.shape),e.runWebGLProgram(i,[o,n],o.dtype)}var IA={kernelName:ja,backendName:"webgl",kernelFunc:H9};function K9(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.readSync(o.dataId),a=e.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var vA={kernelName:ea,backendName:"webgl",kernelFunc:K9};var q9="return float(a != b);",Cv=nt({opSnippet:q9,cpuKernelImpl:eD,dtype:"bool"}),kA={kernelName:Qn,backendName:"webgl",kernelFunc:Cv};function wi(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:e})}var NA={kernelName:qi,backendName:"webgl",kernelFunc:wi};var j9="return float(int(x));";function TA(r,t){let e=new or(r.shape,j9),o=t.runWebGLProgram(e,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function wv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return At({inputs:{x:n},backend:e});let a=Gr(n.shape),i=wv({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),p=Or({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=wi({inputs:{input:n},backend:e}),i=wv({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.texData.get(n.dataId).values,[i,p,u]=FR(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s==="int32")return TA(n,e);if(s==="bool"){let a=e.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=Cv({inputs:{a:n,b:a},backend:e});return e.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var _A={kernelName:bo,backendName:"webgl",kernelFunc:wv};var $A="return ceil(x);",X9=xe({opSnippet:$A,packedOpSnippet:$A,cpuKernelImpl:PR}),EA={kernelName:tn,backendName:"webgl",kernelFunc:X9};var Rh=class{constructor(t){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` +`;function H9(r){let{inputs:t,backend:e}=r,{a:o,b:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS"),a=A().getNumber("WEBGL_VERSION");if(e.shouldExecuteOnCPU([o,n])||a===1){let p=e.texData.get(o.dataId).values,u=e.texData.get(n.dataId).values,[c,l]=FR(o.shape,n.shape,p,u,o.dtype),m=e.makeTensorInfo(l,o.dtype),d=e.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new qr(U9,o.shape,n.shape,!1):i=new Fr(G9,o.shape,n.shape),e.runWebGLProgram(i,[o,n],o.dtype)}var vA={kernelName:qa,backendName:"webgl",kernelFunc:H9};function K9(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.readSync(o.dataId),a=e.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var kA={kernelName:ea,backendName:"webgl",kernelFunc:K9};var q9="return float(a != b);",wv=nt({opSnippet:q9,cpuKernelImpl:tD,dtype:"bool"}),NA={kernelName:Yn,backendName:"webgl",kernelFunc:wv};function yi(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:e})}var TA={kernelName:Gi,backendName:"webgl",kernelFunc:yi};var j9="return float(int(x));";function _A(r,t){let e=new tr(r.shape,j9),o=t.runWebGLProgram(e,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Sv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Dt({inputs:{x:n},backend:e});let a=Ur(n.shape),i=Sv({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),p=Pr({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=yi({inputs:{input:n},backend:e}),i=Sv({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.texData.get(n.dataId).values,[i,p,u]=PR(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s==="int32")return _A(n,e);if(s==="bool"){let a=e.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=wv({inputs:{a:n,b:a},backend:e});return e.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var $A={kernelName:yo,backendName:"webgl",kernelFunc:Sv};var EA="return ceil(x);",X9=xe({opSnippet:EA,packedOpSnippet:EA,cpuKernelImpl:OR}),RA={kernelName:en,backendName:"webgl",kernelFunc:X9};var Eh=class{constructor(t){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` void main() { float value = getAAtOutCoords(); @@ -2122,7 +2122,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}};var Dh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` + `}};var Rh=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=` void main() { vec4 value = getAAtOutCoords(); @@ -2133,7 +2133,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function Y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGLProgram(i,[n],n.dtype,p)}var RA={kernelName:Co,backendName:"webgl",kernelFunc:Y9};var Ah=class{constructor(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode=` + `}};function Y9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool("WEBGL_PACK_CLIP")?i=new Rh(n.shape):i=new Eh(n.shape);let p=[[s],[a]];return e.runWebGLProgram(i,[n],n.dtype,p)}var DA={kernelName:bo,backendName:"webgl",kernelFunc:Y9};var Dh=class{constructor(t){this.variableNames=["real","imag"],this.outputShape=t,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;`,D9=xe({opSnippet:R9}),dA={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function DA(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function Q9(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.texData.get(o.dataId),s=new Ah(o.shape),a=[DA(o,n.complexTensorInfos.real),DA(o,n.complexTensorInfos.imag)];return e.runWebGLProgram(s,a,a[0].dtype)}var AA={kernelName:Pi,backendName:"webgl",kernelFunc:Q9};var Fh=class{constructor(t){this.outputShape=[],this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((a,i)=>`T${i}`);let e=new Array(t.length-1);e[0]=t[0][1];for(let a=1;a`T${i}`);let e=new Array(t.length-1);e[0]=t[0][1];for(let a=1;a`T${g}`);let p=new Array(t.length-1);p[0]=t[0][e];for(let h=1;h`T${g}`);let p=new Array(t.length-1);p[0]=t[0][e];for(let h=1;h= ${p[h-1]}) { return getChannel( - getT${h}(${Ph(i,u,g)}), - vec2(${Ph(c,u,g)})); + getT${h}(${Fh(i,u,g)}), + vec2(${Fh(c,u,g)})); }`}let d=p.length,f=p[p.length-1];m+=` return getChannel( - getT${d}(${Ph(i,u,f)}), - vec2(${Ph(c,u,f)}));`,this.userCode=` + getT${d}(${Fh(i,u,f)}), + vec2(${Fh(c,u,f)}));`,this.userCode=` float getValue(${i.map(h=>"int "+h)}) { ${m} } @@ -2192,7 +2192,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(result); } - `}};function Ph(r,t,e){let o=r.indexOf(t);return r.map((s,a)=>a===o?`${s} - ${e}`:s).join()}function $p(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:e})}var FA={kernelName:Gi,backendName:"webgl",kernelFunc:$p};function Gc(r,t,e){let o=r[0].dtype;if(o==="complex64"){let d=r.map(b=>wi({inputs:{input:b},backend:e})),f=r.map(b=>$p({inputs:{input:b},backend:e})),h=Gc(d,t,e),g=Gc(f,t,e),x=Or({inputs:{real:h,imag:g},backend:e});return d.forEach(b=>e.disposeIntermediateTensorInfo(b)),f.forEach(b=>e.disposeIntermediateTensorInfo(b)),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),x}let n=e.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(t))];return te({inputs:{x:S},backend:e,attrs:{shape:_}})}),f=d.map(S=>({vals:e.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=OR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),t),C=e.makeTensorInfo(b,o,x);return d.forEach(S=>e.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 or(r[0].shape,Ba):new Fr(r[0].shape,Ba);return e.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),t);return e.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=Z9(s,t,e),c=new Fh(p.map(d=>d.shape)),l=e.runWebGLProgram(c,p,o);p.forEach(d=>e.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:e});return e.disposeIntermediateTensorInfo(l),m}function Z9(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(t))]},backend:e})),outShape:o}}function Sv(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:e}):Gc(p,s,e)}var PA={kernelName:ta,backendName:"webgl",kernelFunc:Sv};var Hc=class{constructor(t,e=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=t.outShape;let a=t.padInfo.top,i=t.padInfo.left,p=t.strideHeight,u=t.strideWidth,c=t.dilationHeight,l=t.dilationWidth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4,g=t.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,C=g?3:1,S="",k="";o&&(n?S=`float activation(float a) { + `}};function Fh(r,t,e){let o=r.indexOf(t);return r.map((s,a)=>a===o?`${s} - ${e}`:s).join()}function wp(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:e})}var PA={kernelName:Vi,backendName:"webgl",kernelFunc:wp};function Bc(r,t,e){let o=r[0].dtype;if(o==="complex64"){let d=r.map(b=>yi({inputs:{input:b},backend:e})),f=r.map(b=>wp({inputs:{input:b},backend:e})),h=Bc(d,t,e),g=Bc(f,t,e),x=Pr({inputs:{real:h,imag:g},backend:e});return d.forEach(b=>e.disposeIntermediateTensorInfo(b)),f.forEach(b=>e.disposeIntermediateTensorInfo(b)),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),x}let n=e.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(t))];return te({inputs:{x:S},backend:e,attrs:{shape:_}})}),f=d.map(S=>({vals:e.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=MR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),t),C=e.makeTensorInfo(b,o,x);return d.forEach(S=>e.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 Ar(r[0].shape,La);return e.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),t);return e.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=Z9(s,t,e),c=new Ah(p.map(d=>d.shape)),l=e.runWebGLProgram(c,p,o);p.forEach(d=>e.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:e});return e.disposeIntermediateTensorInfo(l),m}function Z9(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(t))]},backend:e})),outShape:o}}function Iv(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Dt({inputs:{x:p[0]},backend:e}):Bc(p,s,e)}var OA={kernelName:ta,backendName:"webgl",kernelFunc:Iv};var zc=class{constructor(t,e=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=t.outShape;let a=t.padInfo.top,i=t.padInfo.left,p=t.strideHeight,u=t.strideWidth,c=t.dilationHeight,l=t.dilationWidth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4,g=t.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,C=g?3:1,S="",k="";o&&(n?S=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?S=`float activation(float a) { @@ -2326,7 +2326,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${k} setOutput(result); } - `}},Mh=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let e=t.padInfo.front,o=t.padInfo.top,n=t.padInfo.left,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4;this.userCode=` + `}},Oh=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let e=t.padInfo.front,o=t.padInfo.top,n=t.padInfo.left,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=t.dilationDepth,u=t.dilationHeight,c=t.dilationWidth,l=t.filterDepth,m=t.filterHeight,d=t.filterWidth,f=Math.floor(t.inChannels/4)*4,h=t.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${a}, ${i}); const ivec3 pads = ivec3(${e}, ${o}, ${n}); @@ -2414,7 +2414,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}};var Kc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.padInfo.left,i=t.strideWidth,p=t.dilationWidth,u=t.filterHeight,c=t.filterWidth,l=c,m=` + `}};var Vc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.padInfo.left,i=t.strideWidth,p=t.dilationWidth,u=t.filterHeight,c=t.filterWidth,l=c,m=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function zh({x:r,filter:t,convInfo:e,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=e.inChannels,l=p[0]*p[1]*p[2],m=e.outChannels,d=e.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>yv)&&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,e.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(Cu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});x.push(E);let R=_p({a:k,b:E,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=e.outShape,g=At({inputs:{x:R},backend:o}),g.shape=e.outShape,x.push(R)}else{let S=e.outHeight*e.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[e.batchSize,S,e.inChannels]:[e.batchSize,e.inChannels,S]}}),_=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}}),E=_p({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:e.outShape}}),x.push(k),x.push(_),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Vh({x:r,filter:t,convInfo:e,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}=e,f=d==="channelsLast",h=p*u*c,g=m*l,x=[e.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:t},backend:o,attrs:{shape:[1,h,y.sizeFromShape(t.shape)/h]}});S.push(k);let _=new Lh(x,e),E=[r.shape,[e.padInfo.top,e.padInfo.left],[e.strideHeight,e.strideWidth],[e.dilationHeight,e.dilationWidth],[e.inChannels],[e.filterWidth*e.inChannels],[e.outWidth]],R=o.runWebGLProgram(_,[r],"float32",E),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?Ci(i,!0):null,B=new Uc(f?D.shape:k.shape,f?k.shape:D.shape,f?[e.batchSize,g,e.outChannels]:[e.batchSize,e.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:e.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function J9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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:e});else if(m.strideWidth<=2&&l==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let h=new Kc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=e.runWebGLProgram(h,[n,s],"float32",g)}else if(A().getBool("WEBGL_CONV_IM2COL"))d=Vh({x:n,filter:s,convInfo:m,backend:e});else{let h=new Hc(m);d=e.runWebGLProgram(h,[n,s],"float32")}let f=te({inputs:{x:d},backend:e,attrs:{shape:m.outShape}});return e.disposeIntermediateTensorInfo(d),f}var OA={kernelName:rn,backendName:"webgl",kernelFunc:J9};var Wh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.dataFormat==="channelsLast";this.userCode=` + `}};function Lh(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Bh({x:r,filter:t,convInfo:e,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=e.inChannels,l=p[0]*p[1]*p[2],m=e.outChannels,d=e.dataFormat==="channelsLast",f=!1,h=!1,g,x=[];if(s!=null){let S=Lh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Lh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>bv)&&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,e.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(hu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});x.push(E);let R=Cp({a:k,b:E,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=e.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=e.outShape,x.push(R)}else{let S=e.outHeight*e.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[e.batchSize,S,e.inChannels]:[e.batchSize,e.inChannels,S]}}),_=te({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}}),E=Cp({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:e.outShape}}),x.push(k),x.push(_),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function zh({x:r,filter:t,convInfo:e,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}=e,f=d==="channelsLast",h=p*u*c,g=m*l,x=[e.batchSize,h,g],b=!0,C=!1,S=[];if(s!=null){let q=Lh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Lh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:t},backend:o,attrs:{shape:[1,h,y.sizeFromShape(t.shape)/h]}});S.push(k);let _=new Mh(x,e),E=[r.shape,[e.padInfo.top,e.padInfo.left],[e.strideHeight,e.strideWidth],[e.dilationHeight,e.dilationWidth],[e.inChannels],[e.filterWidth*e.inChannels],[e.outWidth]],R=o.runWebGLProgram(_,[r],"float32",E),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?xi(i,!0):null,B=new Lc(f?D.shape:k.shape,f?k.shape:D.shape,f?[e.batchSize,g,e.outChannels]:[e.batchSize,e.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:e.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function J9(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=Bh({x:n,filter:s,convInfo:m,backend:e});else if(m.strideWidth<=2&&l==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let h=new Vc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=e.runWebGLProgram(h,[n,s],"float32",g)}else if(A().getBool("WEBGL_CONV_IM2COL"))d=zh({x:n,filter:s,convInfo:m,backend:e});else{let h=new zc(m);d=e.runWebGLProgram(h,[n,s],"float32")}let f=te({inputs:{x:d},backend:e,attrs:{shape:m.outShape}});return e.disposeIntermediateTensorInfo(d),f}var MA={kernelName:tn,backendName:"webgl",kernelFunc:J9};var Vh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.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;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},Uh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dataFormat==="channelsLast",i=e-1-t.padInfo.top,p=o-1-t.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` + `}},Wh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=t.dataFormat==="channelsLast",i=e-1-t.padInfo.top,p=o-1-t.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { @@ -2747,7 +2747,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},Gh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode=` + `}},Uh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.padInfo.front,a=t.padInfo.top,i=t.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;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},Hh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=e-1-t.padInfo.front,u=o-1-t.padInfo.top,c=n-1-t.padInfo.left;this.userCode=` + `}},Gh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterDepth,o=t.filterHeight,n=t.filterWidth,s=t.strideDepth,a=t.strideHeight,i=t.strideWidth,p=e-1-t.padInfo.front,u=o-1-t.padInfo.top,c=n-1-t.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${p}, ${u}, ${c}); void main() { @@ -2846,7 +2846,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}};function eJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGLProgram(d,[n,s],"float32")}var MA={kernelName:Oi,backendName:"webgl",kernelFunc:eJ};var Kh=class{constructor(t){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=t.inShape,this.enableShapeUniforms=pt(this.outputShape.length);let e=t.filterHeight,o=t.filterWidth,n=e-1-t.padInfo.top,s=o-1-t.padInfo.left;this.userCode=` + `}};function eJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 Vh(m);return e.runWebGLProgram(d,[n,s],"float32")}var LA={kernelName:Ai,backendName:"webgl",kernelFunc:eJ};var Hh=class{constructor(t){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=t.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let e=t.filterHeight,o=t.filterWidth,n=e-1-t.padInfo.top,s=o-1-t.padInfo.left;this.userCode=` const ivec2 pads = ivec2(${n}, ${s}); void main() { @@ -2920,17 +2920,17 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(result); } - `}};function tJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGLProgram(f,[n,s],"float32",d)}else{let d=new Uh(m);return e.runWebGLProgram(d,[n,s],"float32")}}var LA={kernelName:on,backendName:"webgl",kernelFunc:tJ};function rJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return e.runWebGLProgram(c,[n,s],"float32")}var BA={kernelName:nn,backendName:"webgl",kernelFunc:rJ};function oJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return e.runWebGLProgram(c,[n,s],"float32")}var zA={kernelName:Xa,backendName:"webgl",kernelFunc:oJ};function nJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return e.runWebGLProgram(c,[n,s],"float32")}var VA={kernelName:sn,backendName:"webgl",kernelFunc:nJ};var sJ=Po+` + `}};function tJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 Hh(m);return e.runWebGLProgram(f,[n,s],"float32",d)}else{let d=new Wh(m);return e.runWebGLProgram(d,[n,s],"float32")}}var BA={kernelName:rn,backendName:"webgl",kernelFunc:tJ};function rJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Oh(u);return e.runWebGLProgram(c,[n,s],"float32")}var zA={kernelName:on,backendName:"webgl",kernelFunc:rJ};function oJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Uh(u);return e.runWebGLProgram(c,[n,s],"float32")}var VA={kernelName:ja,backendName:"webgl",kernelFunc:oJ};function nJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Gh(u);return e.runWebGLProgram(c,[n,s],"float32")}var WA={kernelName:nn,backendName:"webgl",kernelFunc:nJ};var sJ=Fo+` return cos(x); `,aJ=` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${Xr} + ${jr} return result; -`,iJ=xe({opSnippet:sJ,packedOpSnippet:aJ}),WA={kernelName:an,backendName:"webgl",kernelFunc:iJ};var uJ=` +`,iJ=xe({opSnippet:sJ,packedOpSnippet:aJ}),UA={kernelName:sn,backendName:"webgl",kernelFunc:iJ};var uJ=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,pJ=xe({opSnippet:uJ}),UA={kernelName:un,backendName:"webgl",kernelFunc:pJ};var qh=class{constructor(t,e,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=t,[c]=e,[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=` +`,pJ=xe({opSnippet:uJ}),GA={kernelName:an,backendName:"webgl",kernelFunc:pJ};var Kh=class{constructor(t,e,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=t,[c]=e,[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=` const float height_ratio = float(${g}); const float width_ratio = float(${C}); void main() { @@ -2991,20 +2991,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam setOutput(newValue); } } - `}};var cJ=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new qh(n.shape,s.shape,i,p,u);return e.runWebGLProgram(c,[n,s,a],"float32")},GA={kernelName:ln,backendName:"webgl",kernelFunc:cJ};var Ep;(function(r){r.Prod="*",r.Sum="+"})(Ep||(Ep={}));var om=class{constructor(t,e,o,n){this.op=t,this.outputShape=e,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===Ep.Prod?"1.0":"0.0",i=o?a:`getX(${HA(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",c="";o?(u=n?`end != ${p-1}`:"end != 0",c=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",c=n?"end + pow2":"end - pow2"),this.userCode=` + `}};var cJ=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Kh(n.shape,s.shape,i,p,u);return e.runWebGLProgram(c,[n,s,a],"float32")},HA={kernelName:cn,backendName:"webgl",kernelFunc:cJ};var Sp;(function(r){r.Prod="*",r.Sum="+"})(Sp||(Sp={}));var tm=class{constructor(t,e,o,n){this.op=t,this.outputShape=e,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===Sp.Prod?"1.0":"0.0",i=o?a:`getX(${KA(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",c="";o?(u=n?`end != ${p-1}`:"end != 0",c=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",c=n?"end + pow2":"end - pow2"),this.userCode=` void main() { ${Re(s)} coords = getOutputCoords(); - int end = ${KA(s,"coords",this.op)}; + int end = ${qA(s,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { int idx = ${c}; - ${KA(s,"coords",this.op)} = idx; - val ${this.op}= getX(${HA(s,"coords",this.op)}); + ${qA(s,"coords",this.op)} = idx; + val ${this.op}= getX(${KA(s,"coords",this.op)}); } setOutput(val); } - `}};function HA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function KA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function jh(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=Ct({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:e});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=e.runWebGLProgram(d,[l],l.dtype,f),e.disposeIntermediateTensorInfo(h)}if(n){let m=new om(r,p.shape,n,s),d=l;l=e.runWebGLProgram(m,[l],l.dtype),e.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=Ct({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(p),d}return l}function lJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return jh(Ep.Prod,n,e,s,a,i)}var qA={kernelName:pn,backendName:"webgl",kernelFunc:lJ};function mJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return jh(Ep.Sum,n,e,s,a,i)}var jA={kernelName:cn,backendName:"webgl",kernelFunc:mJ};function dJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=ph(p,u,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=e.bufferSync(n),u=e.bufferSync(s),c=DR(p,u,a,i);return e.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var XA={kernelName:ra,backendName:"webgl",kernelFunc:dJ};var Xh=class{constructor(t,e,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=o,this.userCode=` + `}};function KA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function qA(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function qh(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=bt({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Dt({inputs:{x:p},backend:e});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new tm(r,p.shape,!1,s),f=[[m]],h=l;l=e.runWebGLProgram(d,[l],l.dtype,f),e.disposeIntermediateTensorInfo(h)}if(n){let m=new tm(r,p.shape,n,s),d=l;l=e.runWebGLProgram(m,[l],l.dtype),e.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(p),d}return l}function lJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return qh(Sp.Prod,n,e,s,a,i)}var jA={kernelName:un,backendName:"webgl",kernelFunc:lJ};function mJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return qh(Sp.Sum,n,e,s,a,i)}var XA={kernelName:pn,backendName:"webgl",kernelFunc:mJ};function dJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=uh(p,u,s.dtype,s.shape,a);return e.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=e.bufferSync(n),u=e.bufferSync(s),c=AR(p,u,a,i);return e.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 YA={kernelName:ra,backendName:"webgl",kernelFunc:dJ};var jh=class{constructor(t,e,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=o,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;`,D9=xe({opSnippet:R9}),dA={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 fJ(r){let{inputs:t,backend:e,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=new Xh(f,s,a);return e.runWebGLProgram(h,[n],n.dtype)}var YA={kernelName:mn,backendName:"webgl",kernelFunc:fJ};var qc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.filterHeight,i=t.filterWidth,p=t.outChannels/t.inChannels,u="",c="";o&&(n?u=`float activation(float a) { + `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function fJ(r){let{inputs:t,backend:e,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=new jh(f,s,a);return e.runWebGLProgram(h,[n],n.dtype)}var QA={kernelName:ln,backendName:"webgl",kernelFunc:fJ};var Wc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.filterHeight,i=t.filterWidth,p=t.outChannels/t.inChannels,u="",c="";o&&(n?u=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?u=`float activation(float a) { @@ -3076,7 +3076,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${c} setOutput(result); } - `}};var jc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=pt(this.outputShape.length);let a=t.outChannels/t.inChannels,i=t.padInfo.left,p=t.strideWidth,u=t.dilationWidth,c=t.filterHeight,l=t.filterWidth,m=l,d=` + `}};var Uc=class{constructor(t,e=!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=t.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=t.outChannels/t.inChannels,i=t.padInfo.left,p=t.strideWidth,u=t.dilationWidth,c=t.filterHeight,l=t.filterWidth,m=l,d=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x`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 jc(l):m=new qc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return e.runWebGLProgram(m,[n,s],"float32",d)}var QA={kernelName:dn,backendName:"webgl",kernelFunc:hJ};var Yh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode=` + `}};function hJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p,dimRoundingMode:u}=o,c=p;c==null&&(c=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(a,c),()=>`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 Uc(l):m=new Wc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return e.runWebGLProgram(m,[n,s],"float32",d)}var ZA={kernelName:mn,backendName:"webgl",kernelFunc:hJ};var Xh=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,o=t.strideWidth,n=t.padInfo.top,s=t.padInfo.left,a=t.outChannels/t.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;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},Qh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=e-1-t.padInfo.top,i=o-1-t.padInfo.left,p=t.outChannels/t.inChannels;this.userCode=` + `}},Yh=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,o=t.filterWidth,n=t.strideHeight,s=t.strideWidth,a=e-1-t.padInfo.top,i=o-1-t.padInfo.left,p=t.outChannels/t.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { @@ -3345,13 +3345,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}};function gJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGLProgram(m,[n,s],"float32")}var ZA={kernelName:Mi,backendName:"webgl",kernelFunc:gJ};function xJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGLProgram(m,[n,s],"float32")}var JA={kernelName:Li,backendName:"webgl",kernelFunc:xJ};var Zh=class{constructor(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode=` + `}};function gJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Xh(l);return e.runWebGLProgram(m,[n,s],"float32")}var JA={kernelName:Fi,backendName:"webgl",kernelFunc:gJ};function xJ(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Yh(l);return e.runWebGLProgram(m,[n,s],"float32")}var eF={kernelName:Pi,backendName:"webgl",kernelFunc:xJ};var Qh=class{constructor(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } - `}};function yJ(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Zh(s),p=e.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(p),u}var eF={kernelName:oa,backendName:"webgl",kernelFunc:yJ};var Jh=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let{inHeight:e,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=t,{top:l,left:m}=n;this.userCode=` + `}};function yJ(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Qh(s),p=e.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(p),u}var tF={kernelName:oa,backendName:"webgl",kernelFunc:yJ};var Zh=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let{inHeight:e,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=t,{top:l,left:m}=n;this.userCode=` const ivec2 strides = ivec2(${s}, ${a}); const ivec2 pads = ivec2(${l}, ${m}); const float neg_infinity = -3.4e38; @@ -3389,7 +3389,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam float result = curVal; setOutput(result); } - `}};function bJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c,l=new Jh(u);c=e.runWebGLProgram(l,[n,s],"float32");let m=te({inputs:{x:c},backend:e,attrs:{shape:u.outShape}});return e.disposeIntermediateTensorInfo(c),m}var tF={kernelName:fn,backendName:"webgl",kernelFunc:bJ};function CJ(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=Tp({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var rF={kernelName:Vi,backendName:"webgl",kernelFunc:CJ};var wJ="return (x >= 0.0) ? x : (exp(x) - 1.0);",SJ=` + `}};function bJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c,l=new Zh(u);c=e.runWebGLProgram(l,[n,s],"float32");let m=te({inputs:{x:c},backend:e,attrs:{shape:u.outShape}});return e.disposeIntermediateTensorInfo(c),m}var rF={kernelName:dn,backendName:"webgl",kernelFunc:bJ};function CJ(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=bp({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var oF={kernelName:Li,backendName:"webgl",kernelFunc:CJ};var wJ="return (x >= 0.0) ? x : (exp(x) - 1.0);",SJ=` 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;`,D9=xe({opSnippet:R9}),dA={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,IJ=xe({opSnippet:wJ,packedOpSnippet:SJ}),oF={kernelName:gn,backendName:"webgl",kernelFunc:IJ};var vJ="return (b >= 0.0) ? a : a * (b + 1.0);",kJ=` +`,IJ=xe({opSnippet:wJ,packedOpSnippet:SJ}),nF={kernelName:hn,backendName:"webgl",kernelFunc:IJ};var vJ="return (b >= 0.0) ? a : a * (b + 1.0);",kJ=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,NJ=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(kJ,o.shape,n.shape):new Pr(vJ,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],o.dtype)},nF={kernelName:Ya,backendName:"webgl",kernelFunc:NJ};var TJ=` +`,NJ=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new qr(kJ,o.shape,n.shape):new Fr(vJ,o.shape,n.shape);return e.runWebGLProgram(s,[o,n],o.dtype)},sF={kernelName:Xa,backendName:"webgl",kernelFunc:NJ};var TJ=` return vec4(equal(a, b)); -`,_J="return float(a == b);",$J=nt({opSnippet:_J,packedOpSnippet:TJ,dtype:"bool",cpuKernelImpl:MR}),sF={kernelName:yn,backendName:"webgl",kernelFunc:$J};var EJ=` +`,_J="return float(a == b);",$J=nt({opSnippet:_J,packedOpSnippet:TJ,dtype:"bool",cpuKernelImpl:LR}),aF={kernelName:xn,backendName:"webgl",kernelFunc:$J};var EJ=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. @@ -3418,7 +3418,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={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)); -`,RJ=xe({opSnippet:EJ}),aF={kernelName:xn,backendName:"webgl",kernelFunc:RJ};var DJ=Po+` +`,RJ=xe({opSnippet:EJ}),iF={kernelName:gn,backendName:"webgl",kernelFunc:RJ};var DJ=Fo+` return exp(x); `,AJ=` vec4 result = exp(x); @@ -3429,7 +3429,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,Iv=xe({opSnippet:DJ,packedOpSnippet:AJ,cpuKernelImpl:LR,dtype:"float32"}),iF={kernelName:bn,backendName:"webgl",kernelFunc:Iv};function eg(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 uF={kernelName:na,backendName:"webgl",kernelFunc:eg};var pF="return exp(x) - 1.0;",FJ=xe({opSnippet:pF,packedOpSnippet:pF,cpuKernelImpl:BR}),cF={kernelName:Cn,backendName:"webgl",kernelFunc:FJ};var nm=class{constructor(t,e,o){this.variableNames=["real","imag"];let n=e[1];this.outputShape=e;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:"1.0",i;if(t==="real")i="return real * expR - imag * expI;";else if(t==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${t}.`);this.userCode=` +`,vv=xe({opSnippet:DJ,packedOpSnippet:AJ,cpuKernelImpl:BR,dtype:"float32"}),uF={kernelName:yn,backendName:"webgl",kernelFunc:vv};function Jh(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 pF={kernelName:na,backendName:"webgl",kernelFunc:Jh};var cF="return exp(x) - 1.0;",FJ=xe({opSnippet:cF,packedOpSnippet:cF,cpuKernelImpl:zR}),lF={kernelName:bn,backendName:"webgl",kernelFunc:FJ};var rm=class{constructor(t,e,o){this.variableNames=["real","imag"];let n=e[1];this.outputShape=e;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.0`:"1.0",i;if(t==="real")i="return real * expR - imag * expI;";else if(t==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${t}.`);this.userCode=` const float exponentMultiplier = ${s}; 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;`,D9=xe({opSnippet:R9}),dA={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function tg(r,t,e){let o=e.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:e,attrs:{shape:[a,s]}}),p=i.shape,u=new nm("real",p,t),c=new nm("imag",p,t),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=e.runWebGLProgram(u,l,"float32"),d=e.runWebGLProgram(c,l,"float32"),f=Or({inputs:{real:m,imag:d},backend:e});e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:e,attrs:{shape:r.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(f),h}function PJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return tg(o,!1,e)}var lF={kernelName:Wi,backendName:"webgl",kernelFunc:PJ};var rg=class{constructor(t,e){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=t,this.userCode=` + `}};function eg(r,t,e){let o=e.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:e,attrs:{shape:[a,s]}}),p=i.shape,u=new rm("real",p,t),c=new rm("imag",p,t),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=e.runWebGLProgram(u,l,"float32"),d=e.runWebGLProgram(c,l,"float32"),f=Pr({inputs:{real:m,imag:d},backend:e});e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:e,attrs:{shape:r.shape}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(f),h}function PJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return eg(o,!1,e)}var mF={kernelName:Bi,backendName:"webgl",kernelFunc:PJ};var tg=class{constructor(t,e){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=t,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } - `}};function Si(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new rg(o,n),i=[[n]];return t.runWebGLProgram(a,[],s,i)}}var mF={kernelName:sa,backendName:"webgl",kernelFunc:Si};var og=class{constructor(t){this.variableNames=["Image"],this.outputShape=[];let e=t[2];this.outputShape=t,this.userCode=` + `}};function bi(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new tg(o,n),i=[[n]];return t.runWebGLProgram(a,[],s,i)}}var dF={kernelName:sa,backendName:"webgl",kernelFunc:bi};var rg=class{constructor(t){this.variableNames=["Image"],this.outputShape=[];let e=t[2];this.outputShape=t,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;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(outputValue); } - `}};var dF={kernelName:wn,backendName:"webgl",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new og(e.shape);return o.runWebGLProgram(n,[e],e.dtype)}};var fF="return floor(x);",OJ=xe({opSnippet:fF,packedOpSnippet:fF,cpuKernelImpl:zR}),hF={kernelName:Sn,backendName:"webgl",kernelFunc:OJ};var MJ=` + `}};var fF={kernelName:Cn,backendName:"webgl",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new rg(e.shape);return o.runWebGLProgram(n,[e],e.dtype)}};var hF="return floor(x);",OJ=xe({opSnippet:hF,packedOpSnippet:hF,cpuKernelImpl:VR}),gF={kernelName:wn,backendName:"webgl",kernelFunc:OJ};var MJ=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3512,7 +3512,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,BJ=nt({opSnippet:MJ,packedOpSnippet:LJ,dtype:"int32"}),gF={kernelName:In,backendName:"webgl",kernelFunc:BJ};var ng=class{constructor(t){this.variableNames=["A"];let e=vt(),[o,n]=t;this.outputShape=t,this.userCode=` +`,BJ=nt({opSnippet:MJ,packedOpSnippet:LJ,dtype:"int32"}),xF={kernelName:Sn,backendName:"webgl",kernelFunc:BJ};var og=class{constructor(t){this.variableNames=["A"];let e=It(),[o,n]=t;this.outputShape=t,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;`,D9=xe({opSnippet:R9}),dA={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}};var sg=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let e=vt(),[o,n]=t;this.outputShape=t,this.userCode=` + `}};var ng=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let e=It(),[o,n]=t;this.outputShape=t,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;`,D9=xe({opSnippet:R9}),dA={kernelNam ${e.output} = result; } - `}};var xF={kernelName:Mu,backendName:"webgl",kernelFunc:zJ},Xc,vv=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function zJ(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{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");(Xc==null||h!==vv)&&(vv=h,Xc=document.createElement("canvas").getContext("2d",{willReadFrequently:vv})),Xc.canvas.width=p,Xc.canvas.height=u,Xc.drawImage(n,0,0,p,u),n=Xc.canvas}let m=e.makeTensorInfo(c,"int32");e.texData.get(m.dataId).usage=dr.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId),n);let d=A().getBool("WEBGL_PACK")?new sg(l):new ng(l),f=e.runWebGLProgram(d,[m],"int32");return e.disposeData(m.dataId),f}function VJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,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=e.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:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let R=d?Ci(d,!0):null,D=new Kc(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=e.runWebGLProgram(D,O,"float32",P)}else if(A().getBool("WEBGL_CONV_IM2COL"))x=Vh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?Ci(d,!1):null,D=new Hc(g,C,R,S,k),P=_();x=e.runWebGLProgram(D,P,"float32")}let E=te({inputs:{x},backend:e,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>e.disposeIntermediateTensorInfo(R)),E}var yF={kernelName:vo,backendName:"webgl",kernelFunc:VJ};function WJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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?Ci(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=e.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));C.push(P),f.push(P)}let E;x?E=new jc(g,S,b,k,_):E=new qc(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=e.runWebGLProgram(E,C,"float32",R);return f.forEach(P=>e.disposeIntermediateTensorInfo(P)),D}var bF={kernelName:ko,backendName:"webgl",kernelFunc:WJ};var ag=class{constructor(t,e,o,n){this.sliceDim=t,this.strides=e,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=Re(o.length),a=` + `}};var yF={kernelName:Eu,backendName:"webgl",kernelFunc:zJ},Gc,kv=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function zJ(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{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");(Gc==null||h!==kv)&&(kv=h,Gc=document.createElement("canvas").getContext("2d",{willReadFrequently:kv})),Gc.canvas.width=p,Gc.canvas.height=u,Gc.drawImage(n,0,0,p,u),n=Gc.canvas}let m=e.makeTensorInfo(c,"int32");e.texData.get(m.dataId).usage=mr.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId),n);let d=A().getBool("WEBGL_PACK")?new ng(l):new og(l),f=e.runWebGLProgram(d,[m],"int32");return e.disposeData(m.dataId),f}function VJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,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=e.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=Bh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let R=d?xi(d,!0):null,D=new Vc(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=e.runWebGLProgram(D,O,"float32",P)}else if(A().getBool("WEBGL_CONV_IM2COL"))x=zh({x:n,filter:s,convInfo:g,backend:e,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?xi(d,!1):null,D=new zc(g,C,R,S,k),P=_();x=e.runWebGLProgram(D,P,"float32")}let E=te({inputs:{x},backend:e,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>e.disposeIntermediateTensorInfo(R)),E}var bF={kernelName:Io,backendName:"webgl",kernelFunc:VJ};function WJ(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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?xi(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=e.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));C.push(P),f.push(P)}let E;x?E=new Uc(g,S,b,k,_):E=new Wc(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=e.runWebGLProgram(E,C,"float32",R);return f.forEach(P=>e.disposeIntermediateTensorInfo(P)),D}var CF={kernelName:vo,backendName:"webgl",kernelFunc:WJ};var sg=class{constructor(t,e,o,n){this.sliceDim=t,this.strides=e,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=Re(o.length),a=` int index;`;for(let i=0;i= 0) && (index < ${t[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function GJ(r,t){let e=["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:e,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:e,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(e.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=e.bufferSync(d),C=e.bufferSync(m),S=WR(C,b,f);return l.forEach(k=>e.disposeIntermediateTensorInfo(k)),e.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(m.shape,f),g=e.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}var wF={kernelName:aa,backendName:"webgl",kernelFunc:kv};var HJ="return float(a > b);",KJ=` + `}};function GJ(r,t){let e=["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:e,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:e,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(e.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=e.bufferSync(d),C=e.bufferSync(m),S=UR(C,b,f);return l.forEach(k=>e.disposeIntermediateTensorInfo(k)),e.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ag(m.shape,f),g=e.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}var SF={kernelName:aa,backendName:"webgl",kernelFunc:Nv};var HJ="return float(a > b);",KJ=` return vec4(greaterThan(a, b)); -`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,cpuKernelImpl:UR,dtype:"bool"}),SF={kernelName:Nn,backendName:"webgl",kernelFunc:qJ};var jJ="return float(a >= b);",XJ=` +`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,cpuKernelImpl:GR,dtype:"bool"}),IF={kernelName:kn,backendName:"webgl",kernelFunc:qJ};var jJ="return float(a >= b);",XJ=` return vec4(greaterThanEqual(a, b)); -`,YJ=nt({opSnippet:jJ,packedOpSnippet:XJ,dtype:"bool",cpuKernelImpl:GR}),IF={kernelName:Tn,backendName:"webgl",kernelFunc:YJ};function QJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return tg(o,!0,e)}var vF={kernelName:Ui,backendName:"webgl",kernelFunc:QJ};var ZJ="return float(!isnan(x) && !isinf(x));",JJ=xe({opSnippet:ZJ,dtype:"bool"}),kF={kernelName:_n,backendName:"webgl",kernelFunc:JJ};var eee="return float(isinf(x));",tee=xe({opSnippet:eee,dtype:"bool"}),NF={kernelName:$n,backendName:"webgl",kernelFunc:tee};var ree="return float(isnan(x));",oee=xe({opSnippet:ree,dtype:"bool"}),TF={kernelName:En,backendName:"webgl",kernelFunc:oee};var nee="return float(a < b);",see=` +`,YJ=nt({opSnippet:jJ,packedOpSnippet:XJ,dtype:"bool",cpuKernelImpl:HR}),vF={kernelName:Nn,backendName:"webgl",kernelFunc:YJ};function QJ(r){let{inputs:t,backend:e}=r,{input:o}=t;return eg(o,!0,e)}var kF={kernelName:zi,backendName:"webgl",kernelFunc:QJ};var ZJ="return float(!isnan(x) && !isinf(x));",JJ=xe({opSnippet:ZJ,dtype:"bool"}),NF={kernelName:Tn,backendName:"webgl",kernelFunc:JJ};var eee="return float(isinf(x));",tee=xe({opSnippet:eee,dtype:"bool"}),TF={kernelName:_n,backendName:"webgl",kernelFunc:tee};var ree="return float(isnan(x));",oee=xe({opSnippet:ree,dtype:"bool"}),_F={kernelName:$n,backendName:"webgl",kernelFunc:oee};var nee="return float(a < b);",see=` return vec4(lessThan(a, b)); -`,aee=nt({opSnippet:nee,packedOpSnippet:see,cpuKernelImpl:HR,dtype:"bool"}),_F={kernelName:Dn,backendName:"webgl",kernelFunc:aee};var iee="return float(a <= b);",uee=` +`,aee=nt({opSnippet:nee,packedOpSnippet:see,cpuKernelImpl:KR,dtype:"bool"}),$F={kernelName:Rn,backendName:"webgl",kernelFunc:aee};var iee="return float(a <= b);",uee=` return vec4(lessThanEqual(a, b)); -`,pee=nt({opSnippet:iee,packedOpSnippet:uee,cpuKernelImpl:KR,dtype:"bool"}),$F={kernelName:An,backendName:"webgl",kernelFunc:pee};function cee(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=qR(o,n,s);return t.makeTensorInfo([a.length],"float32",a)}var EF={kernelName:Fn,backendName:"webgl",kernelFunc:cee};var lee=Po+` +`,pee=nt({opSnippet:iee,packedOpSnippet:uee,cpuKernelImpl:qR,dtype:"bool"}),EF={kernelName:Dn,backendName:"webgl",kernelFunc:pee};function cee(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=jR(o,n,s);return t.makeTensorInfo([a.length],"float32",a)}var RF={kernelName:An,backendName:"webgl",kernelFunc:cee};var lee=Fo+` return x < 0.0 ? 0./0. : log(x); `,mee=` vec4 result = log(x); @@ -3608,18 +3608,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={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; -`,dee=xe({opSnippet:lee,packedOpSnippet:mee,cpuKernelImpl:jR}),RF={kernelName:Pn,backendName:"webgl",kernelFunc:dee};var fee=Po+` +`,dee=xe({opSnippet:lee,packedOpSnippet:mee,cpuKernelImpl:XR}),DF={kernelName:Fn,backendName:"webgl",kernelFunc:dee};var fee=Fo+` return log(1.0 + x); -`,hee=xe({opSnippet:fee}),DF={kernelName:On,backendName:"webgl",kernelFunc:hee};var gee="return float(a >= 1.0 && b >= 1.0);",xee=` +`,hee=xe({opSnippet:fee}),AF={kernelName:Pn,backendName:"webgl",kernelFunc:hee};var gee="return float(a >= 1.0 && b >= 1.0);",xee=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,yee=nt({opSnippet:gee,packedOpSnippet:xee,dtype:"bool"}),AF={kernelName:Mn,backendName:"webgl",kernelFunc:yee};var bee="return float(!(x >= 1.0));",Cee=xe({opSnippet:bee}),FF={kernelName:Ln,backendName:"webgl",kernelFunc:Cee};var wee="return float(a >= 1.0 || b >= 1.0);",See=` +`,yee=nt({opSnippet:gee,packedOpSnippet:xee,dtype:"bool"}),FF={kernelName:On,backendName:"webgl",kernelFunc:yee};var bee="return float(!(x >= 1.0));",Cee=xe({opSnippet:bee}),PF={kernelName:Mn,backendName:"webgl",kernelFunc:Cee};var wee="return float(a >= 1.0 || b >= 1.0);",See=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,Iee=nt({opSnippet:wee,packedOpSnippet:See,dtype:"bool"}),PF={kernelName:Bn,backendName:"webgl",kernelFunc:Iee};var ug=class{constructor(t,e,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=e,i=t[3]-1;this.outputShape=t;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=` +`,Iee=nt({opSnippet:wee,packedOpSnippet:See,dtype:"bool"}),OF={kernelName:Ln,backendName:"webgl",kernelFunc:Iee};var ig=class{constructor(t,e,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=e,i=t[3]-1;this.outputShape=t;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3638,7 +3638,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam float val = x * ${p}; setOutput(val); } - `}};var pg=class{constructor(t,e,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=e,i=t[3]-1;this.outputShape=t;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` + `}};var ug=class{constructor(t,e,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=e,i=t[3]-1;this.outputShape=t;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; @@ -3700,7 +3700,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam vec4 result = xAtOutputCoords * ${p}; setOutput(result); } - `}};var vee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGLProgram(u,[n],n.dtype)},OF={kernelName:zn,backendName:"webgl",kernelFunc:vee};var cg=class{constructor(t,e,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=o,this.alpha=n,this.beta=s,this.userCode=` + `}};var vee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool("WEBGL_PACK_NORMALIZATION")?new ug(n.shape,s,a,i,p):new ig(n.shape,s,a,i,p);return e.runWebGLProgram(u,[n],n.dtype)},MF={kernelName:Bn,backendName:"webgl",kernelFunc:vee};var pg=class{constructor(t,e,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=o,this.alpha=n,this.beta=s,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;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(result); } - `}};var kee=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new cg(n.shape,i,p,u,c);return e.runWebGLProgram(l,[n,s,a],n.dtype)},MF={kernelName:Qa,backendName:"webgl",kernelFunc:kee};function LF(r,t,e,o){let n=y.sizeFromShape(t),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:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Nv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=e.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E{let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new pg(n.shape,i,p,u,c);return e.runWebGLProgram(l,[n,s,a],n.dtype)},LF={kernelName:Ya,backendName:"webgl",kernelFunc:kee};function BF(r,t,e,o){let n=y.sizeFromShape(t),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Xr(i,r.dtype,"max",o),u=te({inputs:{x:p},attrs:{shape:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function Tv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=e.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return At({inputs:{x:n},backend:e});let l=new Us(c,"max",!1);return e.runWebGLProgram(l,[n],n.dtype)}var VF={kernelName:Un,backendName:"webgl",kernelFunc:$ee};function Eee(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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",!1);return e.runWebGLProgram(m,[n],n.dtype)}var WF={kernelName:ia,backendName:"webgl",kernelFunc:Eee};var lg=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideHeight,o=t.strideWidth,n=t.dilationHeight,s=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=s-1-t.padInfo.top,p=a-1-t.padInfo.left,u=s*a-1;this.userCode=` +`,_ee=nt({opSnippet:Nee,packedOpSnippet:Tee,cpuKernelImpl:QR}),VF={kernelName:Vn,backendName:"webgl",kernelFunc:_ee};function $ee(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;Vs(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);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:e});let l=new Us(c,"max",!1);return e.runWebGLProgram(l,[n],n.dtype)}var WF={kernelName:Wn,backendName:"webgl",kernelFunc:$ee};function Eee(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 xu(l,"max",!1);return e.runWebGLProgram(m,[n],n.dtype)}var UF={kernelName:ia,backendName:"webgl",kernelFunc:Eee};var cg=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideHeight,o=t.strideWidth,n=t.dilationHeight,s=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=s-1-t.padInfo.top,p=a-1-t.padInfo.left,u=s*a-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { @@ -3810,7 +3810,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}},mg=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=p-1-t.padInfo.front,m=u-1-t.padInfo.top,d=c-1-t.padInfo.left,f=p*u*c-1;this.userCode=` + `}},lg=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideDepth,o=t.strideHeight,n=t.strideWidth,s=t.dilationDepth,a=t.dilationHeight,i=t.dilationWidth,p=t.effectiveFilterDepth,u=t.effectiveFilterHeight,c=t.effectiveFilterWidth,l=p-1-t.padInfo.front,m=u-1-t.padInfo.top,d=c-1-t.padInfo.left,f=p*u*c-1;this.userCode=` const ivec3 pads = ivec3(${l}, ${m}, ${d}); void main() { @@ -3874,16 +3874,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam } setOutput(dotProd); } - `}};function Ree(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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=e.runWebGLProgram(d,[a],a.dtype),h=new mg(m),g=e.runWebGLProgram(h,[n,f],a.dtype);return e.disposeIntermediateTensorInfo(f),g}var UF={kernelName:Ki,backendName:"webgl",kernelFunc:Ree};function Dee(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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=e.runWebGLProgram(f,[i],i.dtype),g=new lg(m),x=e.runWebGLProgram(g,[n,h],i.dtype);return e.disposeIntermediateTensorInfo(h),x}var GF={kernelName:Hi,backendName:"webgl",kernelFunc:Dee};function HF(r,t,e,o){let n=new Us(e,"max",!1),s=o.runWebGLProgram(n,[r],"float32");n=new Us(e,"max",!0,!0,t);let a=o.runWebGLProgram(n,[r],"float32");return[s,a]}var KF={kernelName:ua,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;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]=HF(o,i,c,p);return[l,m]}};function qF(r,t,e,o){let n=y.sizeFromShape(t),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:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var jF={kernelName:Gn,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{keepDims:n,axis:s}=t,a=e,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;R{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=t,p=e;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]=KF(o,i,c,p);return[l,m]}};function jF(r,t,e,o){let n=y.sizeFromShape(t),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Xr(i,"float32","mean",o),u=te({inputs:{x:p},attrs:{shape:e},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var XF={kernelName:Un,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{keepDims:n,axis:s}=t,a=e,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]+t[l]+c[1]);let n=t.length,s=Re(n),a=e.map(c=>c[0]).join(","),i=e.map((c,l)=>c[0]+t[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` +`,Oee=nt({opSnippet:Fee,packedOpSnippet:Pee,cpuKernelImpl:ZR}),QF={kernelName:Hn,backendName:"webgl",kernelFunc:Oee};var mg=class{constructor(t,e,o){this.variableNames=["x"],this.outputShape=e.map((c,l)=>c[0]+t[l]+c[1]);let n=t.length,s=Re(n),a=e.map(c=>c[0]).join(","),i=e.map((c,l)=>c[0]+t[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -3912,7 +3912,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${s} coords = outC - start; setOutput(getX(${p})); } - `}};var fg=class{constructor(t,e,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((f,h)=>f[0]+t[h]+f[1]);let n=t.length,s=Re(n),a=e.map(f=>f[0]).join(","),i=e.map((f,h)=>f[0]+t[h]).join(","),p=Dt("rc",n),u=Dt("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=` + `}};var dg=class{constructor(t,e,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((f,h)=>f[0]+t[h]+f[1]);let n=t.length,s=Re(n),a=e.map(f=>f[0]).join(","),i=e.map((f,h)=>f[0]+t[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=` ${s} source = rc; if (source < start) { source = start * 2 - source - ${m}; @@ -3968,13 +3968,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,D9=xe({opSnippet:R9}),dA={kernelNam ${d} setOutput(result); } - `}};var Mee=({inputs:r,backend:t,attrs:e})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new fg(o.shape,n,s):new dg(o.shape,n,s);return t.runWebGLProgram(a,[o],o.dtype)},QF={kernelName:qn,backendName:"webgl",kernelFunc:Mee};var Lee=`if (b == 0.0) return NAN; + `}};var Mee=({inputs:r,backend:t,attrs:e})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new dg(o.shape,n,s):new mg(o.shape,n,s);return t.runWebGLProgram(a,[o],o.dtype)},ZF={kernelName:Kn,backendName:"webgl",kernelFunc:Mee};var Lee=`if (b == 0.0) return NAN; return mod(a, b);`,Bee=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - `+Xr+` + `+jr+` return result; -`,zee=nt({opSnippet:Lee,packedOpSnippet:Bee}),ZF={kernelName:jn,backendName:"webgl",kernelFunc:zee};var hg=class{constructor(t,e,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[t,o],this.userCode=` +`,zee=nt({opSnippet:Lee,packedOpSnippet:Bee}),JF={kernelName:qn,backendName:"webgl",kernelFunc:zee};var fg=class{constructor(t,e,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[t,o],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4016,7 +4016,7 @@ return a / b;`,Wee=` } return result; -`,Tv=nt({opSnippet:Vee,packedOpSnippet:Wee,checkOutOfBounds:!0}),JF={kernelName:hn,backendName:"webgl",kernelFunc:Tv};var e3="return a - b;",_v=nt({opSnippet:e3,packedOpSnippet:e3,supportsComplex:!0,cpuKernelImpl:yD}),t3={kernelName:_s,backendName:"webgl",kernelFunc:_v};function $v(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Nv({inputs:{x:n},backend:e,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:e,attrs:{shape:p}}),c=_v({inputs:{a:n,b:u},backend:e}),l=Iv({inputs:{x:c},backend:e}),m=Tp({inputs:{x:l},backend:e,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:e,attrs:{shape:p}}),f=Tv({inputs:{a:l,b:d},backend:e});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}var r3={kernelName:vs,backendName:"webgl",kernelFunc:$v};function Uee(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:$v({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=e.runWebGLProgram(l,[p],"int32",m);return i||e.disposeIntermediateTensorInfo(p),d}var o3={kernelName:Xn,backendName:"webgl",kernelFunc:Uee};var Gee=Ut+` +`,_v=nt({opSnippet:Vee,packedOpSnippet:Wee,checkOutOfBounds:!0}),e3={kernelName:fn,backendName:"webgl",kernelFunc:_v};var t3="return a - b;",$v=nt({opSnippet:t3,packedOpSnippet:t3,supportsComplex:!0,cpuKernelImpl:bD}),r3={kernelName:Ts,backendName:"webgl",kernelFunc:$v};function Ev(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=Tv({inputs:{x:n},backend:e,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:e,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:e}),l=vv({inputs:{x:c},backend:e}),m=bp({inputs:{x:l},backend:e,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:e,attrs:{shape:p}}),f=_v({inputs:{a:l,b:d},backend:e});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(u),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(d),f}var o3={kernelName:Is,backendName:"webgl",kernelFunc:Ev};function Uee(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Ev({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new fg(u,c,s),m=[[a]],d=e.runWebGLProgram(l,[p],"int32",m);return i||e.disposeIntermediateTensorInfo(p),d}var n3={kernelName:jn,backendName:"webgl",kernelFunc:Uee};var Gee=Wt+` return -x; `,Hee=` vec4 result = -x; @@ -4028,14 +4028,14 @@ return a / b;`,Wee=` result.a = isNaN.a ? x.a : result.a; return result; -`;function Kee(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.texData.get(o.dataId),[a,i]=JR(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Fr(o.shape,Hee):n=new or(o.shape,Gee),e.runWebGLProgram(n,[o],o.dtype)}var n3={kernelName:pa,backendName:"webgl",kernelFunc:Kee};var qee=Wt.nonMaxSuppressionV3Impl;function jee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=qee(u,c,a,i,p);return e.makeTensorInfo([l.length],"int32",new Int32Array(l))}var s3={kernelName:Zn,backendName:"webgl",kernelFunc:jee};var Xee=Wt.nonMaxSuppressionV4Impl;function Yee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Xee(c,l,a,i,p,u);return[e.makeTensorInfo([m.length],"int32",new Int32Array(m)),e.makeTensorInfo([],"int32",new Int32Array([d]))]}var a3={kernelName:Za,backendName:"webgl",kernelFunc:Yee};var Qee=Wt.nonMaxSuppressionV5Impl;function Zee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Qee(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var i3={kernelName:Jn,backendName:"webgl",kernelFunc:Zee};var gg=class{constructor(t,e,o,n){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode=` +`;function Kee(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.texData.get(o.dataId),[a,i]=eD(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Ar(o.shape,Hee):n=new tr(o.shape,Gee),e.runWebGLProgram(n,[o],o.dtype)}var s3={kernelName:pa,backendName:"webgl",kernelFunc:Kee};var qee=Vt.nonMaxSuppressionV3Impl;function jee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=qee(u,c,a,i,p);return e.makeTensorInfo([l.length],"int32",new Int32Array(l))}var a3={kernelName:Qn,backendName:"webgl",kernelFunc:jee};var Xee=Vt.nonMaxSuppressionV4Impl;function Yee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Xee(c,l,a,i,p,u);return[e.makeTensorInfo([m.length],"int32",new Int32Array(m)),e.makeTensorInfo([],"int32",new Int32Array([d]))]}var i3={kernelName:Qa,backendName:"webgl",kernelFunc:Yee};var Qee=Vt.nonMaxSuppressionV5Impl;function Zee(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Qee(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var u3={kernelName:Zn,backendName:"webgl",kernelFunc:Zee};var hg=class{constructor(t,e,o,n){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${n}), float(${o}), float(index == coords.y))); } - `}};var Jee=r=>{let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{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:e,attrs:{shape:[u]}}),m=e.runWebGLProgram(c,[l],s);e.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:e,attrs:{shape:d}});return e.disposeIntermediateTensorInfo(m),f},u3={kernelName:es,backendName:"webgl",kernelFunc:Jee};function sm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="complex64"){let n=wi({inputs:{input:o},backend:e}),s=sm({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=sm({inputs:{x:a},backend:e}),p=Or({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return Si({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:e})}var p3={kernelName:Sa,backendName:"webgl",kernelFunc:sm};function c3(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=wi({inputs:{input:o},backend:e}),s=c3({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=sm({inputs:{x:a},backend:e}),p=Or({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return Si({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var l3={kernelName:ca,backendName:"webgl",kernelFunc:c3};function ete(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return eg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=eg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Sv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var m3={kernelName:la,backendName:"webgl",kernelFunc:ete};var xg=class{constructor(t,e,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((u,c)=>u[0]+t[c]+u[1]);let n=t.length,s=Re(n),a=e.map(u=>u[0]).join(","),i=e.map((u,c)=>u[0]+t[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` + `}};var Jee=r=>{let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new hg(u,a,i,p),l=te({inputs:{x:n},backend:e,attrs:{shape:[u]}}),m=e.runWebGLProgram(c,[l],s);e.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:e,attrs:{shape:d}});return e.disposeIntermediateTensorInfo(m),f},p3={kernelName:Jn,backendName:"webgl",kernelFunc:Jee};function om(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="complex64"){let n=yi({inputs:{input:o},backend:e}),s=om({inputs:{x:n},backend:e}),a=wp({inputs:{input:o},backend:e}),i=om({inputs:{x:a},backend:e}),p=Pr({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return bi({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:e})}var c3={kernelName:Sa,backendName:"webgl",kernelFunc:om};function l3(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=yi({inputs:{input:o},backend:e}),s=l3({inputs:{x:n},backend:e}),a=wp({inputs:{input:o},backend:e}),i=om({inputs:{x:a},backend:e}),p=Pr({inputs:{real:s,imag:i},backend:e});return e.disposeIntermediateTensorInfo(n),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(i),p}else return bi({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var m3={kernelName:ca,backendName:"webgl",kernelFunc:l3};function ete(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Jh({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Jh({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Iv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeIntermediateTensorInfo(c)),u}var d3={kernelName:la,backendName:"webgl",kernelFunc:ete};var gg=class{constructor(t,e,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((u,c)=>u[0]+t[c]+u[1]);let n=t.length,s=Re(n),a=e.map(u=>u[0]).join(","),i=e.map((u,c)=>u[0]+t[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -4060,7 +4060,7 @@ return a / b;`,Wee=` setOutput(getX(${p})); } } - `}};var yg=class{constructor(t,e,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((h,g)=>h[0]+t[g]+h[1]);let n=t.length,s=Re(n),a=e.map(h=>h[0]).join(","),i=e.map((h,g)=>h[0]+t[g]).join(","),p=Dt("rc",n),u=Dt("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1; + `}};var xg=class{constructor(t,e,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((h,g)=>h[0]+t[g]+h[1]);let n=t.length,s=Re(n),a=e.map(h=>h[0]).join(","),i=e.map((h,g)=>h[0]+t[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; if(${c}) { `,n===1?"":`} rc = outputLoc; @@ -4084,7 +4084,7 @@ return a / b;`,Wee=` ${f} setOutput(result); } - `}};var Ev=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 Si({backend:e,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 e.runWebGLProgram(i,[n],n.dtype,p)},d3={kernelName:ts,backendName:"webgl",kernelFunc:Ev};var tte=` + `}};var Rv=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 bi({backend:e,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xg(n.shape,s,a):new gg(n.shape,s,a),p=[[a]];return e.runWebGLProgram(i,[n],n.dtype,p)},f3={kernelName:es,backendName:"webgl",kernelFunc:Rv};var tte=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4109,9 +4109,9 @@ return a / b;`,Wee=` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - `+Xr+` + `+jr+` return result; -`,ote=nt({opSnippet:tte,packedOpSnippet:rte}),f3={kernelName:rs,backendName:"webgl",kernelFunc:ote};function nte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=Ct({inputs:{x:n},backend:e,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims("prod",c,i);let d;if(e.shouldExecuteOnCPU([m])){let f=e.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=tD(m.shape,m.dtype,f,c);d=e.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:e,attrs:{shape:[-1,g]}}),b=ni(n.dtype),C=Yr(x,b,"prod",e);d=te({inputs:{x:C},backend:e,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:e,attrs:{shape:f}})}return p.forEach(f=>e.disposeIntermediateTensorInfo(f)),d}var h3={kernelName:ns,backendName:"webgl",kernelFunc:nte};function ste(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.readSync(x.dataId)),u=n.map(x=>x.shape),c=e.readSync(s.dataId),l=e.readSync(a.dataId),[m,d,f]=rD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var g3={kernelName:Qp,backendName:"webgl",kernelFunc:ste};function ate(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=oD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],"int32",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var x3={kernelName:Zp,backendName:"webgl",kernelFunc:ate};function ite(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),l=e.readSync(a.dataId),m=i.map(g=>e.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=nD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var y3={kernelName:Jp,backendName:"webgl",kernelFunc:ite};var Rv=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=sD(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},b3={kernelName:ma,backendName:"webgl",kernelFunc:Rv};var ute="return 1.0 / x;",pte=xe({opSnippet:ute}),C3={kernelName:ss,backendName:"webgl",kernelFunc:pte};var cte=Ut+` +`,ote=nt({opSnippet:tte,packedOpSnippet:rte}),h3={kernelName:ts,backendName:"webgl",kernelFunc:ote};function nte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims("prod",c,i);let d;if(e.shouldExecuteOnCPU([m])){let f=e.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=rD(m.shape,m.dtype,f,c);d=e.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:e,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Xr(x,b,"prod",e);d=te({inputs:{x:C},backend:e,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:e,attrs:{shape:f}})}return p.forEach(f=>e.disposeIntermediateTensorInfo(f)),d}var g3={kernelName:os,backendName:"webgl",kernelFunc:nte};function ste(r){let{inputs:t,backend:e,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=t,{outputRaggedRank:i}=o,p=n.map(x=>e.readSync(x.dataId)),u=n.map(x=>x.shape),c=e.readSync(s.dataId),l=e.readSync(a.dataId),[m,d,f]=oD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var x3={kernelName:Up,backendName:"webgl",kernelFunc:ste};function ate(r){let{inputs:t,backend:e}=r,{starts:o,limits:n,deltas:s}=t,a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=nD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=e.makeTensorInfo([u.length],"int32",u),m=e.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var y3={kernelName:Gp,backendName:"webgl",kernelFunc:ate};function ite(r){let{inputs:t,backend:e,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=t,{rowPartitionTypes:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),l=e.readSync(a.dataId),m=i.map(g=>e.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=sD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return e.makeTensorInfo(f,s.dtype,h)}var b3={kernelName:Hp,backendName:"webgl",kernelFunc:ite};var Dv=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=aD(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},C3={kernelName:ma,backendName:"webgl",kernelFunc:Dv};var ute="return 1.0 / x;",pte=xe({opSnippet:ute}),w3={kernelName:ns,backendName:"webgl",kernelFunc:pte};var cte=Wt+` return (x < 0.0) ? 0.0 : x; `,lte=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); @@ -4123,7 +4123,7 @@ return a / b;`,Wee=` result.a = isNaN.a ? x.a : result.a; return result; -`,mte=xe({opSnippet:cte,packedOpSnippet:lte}),w3={kernelName:as,backendName:"webgl",kernelFunc:mte};var dte=Ut+` +`,mte=xe({opSnippet:cte,packedOpSnippet:lte}),S3={kernelName:ss,backendName:"webgl",kernelFunc:mte};var dte=Wt+` return (x < 0.0) ? 0.0 : min(6.0, x); `,fte=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); @@ -4135,7 +4135,7 @@ return a / b;`,Wee=` result.a = isNaN.a ? x.a : result.a; return result; -`,hte=xe({opSnippet:dte,packedOpSnippet:fte}),S3={kernelName:ps,backendName:"webgl",kernelFunc:hte};var bg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` +`,hte=xe({opSnippet:dte,packedOpSnippet:fte}),I3={kernelName:us,backendName:"webgl",kernelFunc:hte};var yg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); @@ -4168,7 +4168,7 @@ return a / b;`,Wee=` setOutput(newValue); } - `}};var Cg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};var bg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, @@ -4245,7 +4245,7 @@ return a / b;`,Wee=` setOutput(newValue); } - `}};function gte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGLProgram(c,[n],"float32")}var I3={kernelName:us,backendName:"webgl",kernelFunc:gte};var wg=class{constructor(t,e,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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=` + `}};function gte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new bg(n.shape,p,u,s,a):new yg(n.shape,p,u,s,a);return e.runWebGLProgram(c,[n],"float32")}var v3={kernelName:is,backendName:"webgl",kernelFunc:gte};var Cg=class{constructor(t,e,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4326,7 +4326,7 @@ return a / b;`,Wee=` setOutput(accumulator); } - `}};function xte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var v3={kernelName:ei,backendName:"webgl",kernelFunc:xte};var Sg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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=` + `}};function xte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new Cg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var k3={kernelName:Ja,backendName:"webgl",kernelFunc:xte};var wg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); @@ -4348,7 +4348,7 @@ return a / b;`,Wee=` setOutput(newValue); } - `}};var Ig=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,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=` + `}};var Sg=class{constructor(t,e,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=t;this.outputShape=[a,e,o,u];let c=[n&&e>1?i-1:i,n&&o>1?p-1:p],l=[n&&e>1?e-1:e,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, @@ -4389,7 +4389,7 @@ return a / b;`,Wee=` setOutput(newValue); } - `}};function yte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGLProgram(c,[n],n.dtype)}var k3={kernelName:is,backendName:"webgl",kernelFunc:yte};var vg=class{constructor(t,e,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,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=` + `}};function yte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Sg(n.shape,p,u,s,a):new wg(n.shape,p,u,s,a);return e.runWebGLProgram(c,[n],n.dtype)}var N3={kernelName:as,backendName:"webgl",kernelFunc:yte};var Ig=class{constructor(t,e,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,n,s]=e,[,a,i]=t,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4459,7 +4459,7 @@ return a / b;`,Wee=` setOutput(accumulator); } - `}};function bte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var N3={kernelName:Ja,backendName:"webgl",kernelFunc:bte};var kg=class{constructor(t,e){this.variableNames=["x"];let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=t,o===1){this.userCode=` + `}};function bte(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=new Ig(s.shape,n.shape,a);return e.runWebGLProgram(i,[s],s.dtype)}var T3={kernelName:Za,backendName:"webgl",kernelFunc:bte};var vg=class{constructor(t,e){this.variableNames=["x"];let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=t,o===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${t[0]} - coord - 1)); @@ -4469,7 +4469,7 @@ return a / b;`,Wee=` ${a} coords = getOutputCoords(); setOutput(getX(${s})); } - `}};var Ng=class{constructor(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=t;let n=Dt("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=` + `}};var kg=class{constructor(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=t.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=t;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=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4497,7 +4497,7 @@ return a / b;`,Wee=` } setOutput(result); } - `;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=t.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 e.indexOf(f)!==-1&&t[f]!==1?`${t[f]} - ${h[f]} - 1`:`${h[f]}`}}};function Cte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return At({inputs:{x:n},backend:e});let p=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Ng(n.shape,i):new kg(n.shape,i);return e.runWebGLProgram(p,[n],n.dtype)}var T3={kernelName:cs,backendName:"webgl",kernelFunc:Cte};var Tg=class{constructor(t,e){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=t[1],n=t[2];this.outputShape=t;let s="";typeof e=="number"?s=`float outputValue = ${e.toFixed(2)};`:s=` + `;function p(f){return m(f)}function u(f){return f[o-1]="("+f[o-1]+" + 1)",m(f)}function c(f){return f[o-2]="("+f[o-2]+" + 1)",m(f)}function l(f){return f[o-1]="("+f[o-1]+" + 1)",f[o-2]="("+f[o-2]+" + 1)",m(f)}function m(f){let h=t.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 e.indexOf(f)!==-1&&t[f]!==1?`${t[f]} - ${h[f]} - 1`:`${h[f]}`}}};function Cte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Dt({inputs:{x:n},backend:e});let p=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new kg(n.shape,i):new vg(n.shape,i);return e.runWebGLProgram(p,[n],n.dtype)}var _3={kernelName:ps,backendName:"webgl",kernelFunc:Cte};var Ng=class{constructor(t,e){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=t[1],n=t[2];this.outputShape=t;let s="";typeof e=="number"?s=`float outputValue = ${e.toFixed(2)};`:s=` vec3 fill = vec3(${e.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { @@ -4516,7 +4516,7 @@ return a / b;`,Wee=` } setOutput(outputValue); } - `}};var _3={kernelName:As,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 wte=` + `}};var $3={kernelName:Ds,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,p=new Ng(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 wte=` // 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;`,Wee=` return base + 1.0; } } -`,Ste=xe({opSnippet:wte}),$3={kernelName:ls,backendName:"webgl",kernelFunc:Ste};var Ite="return inversesqrt(x);",vte=xe({opSnippet:Ite,cpuKernelImpl:aD}),E3={kernelName:ms,backendName:"webgl",kernelFunc:vte};var vu=class{constructor(t,e,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=e>1?"strides[j]":"strides";this.userCode=` +`,Ste=xe({opSnippet:wte}),E3={kernelName:cs,backendName:"webgl",kernelFunc:Ste};var Ite="return inversesqrt(x);",vte=xe({opSnippet:Ite,cpuKernelImpl:iD}),R3={kernelName:ls,backendName:"webgl",kernelFunc:vte};var yu=class{constructor(t,e,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=e>1?"strides[j]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { @@ -4551,7 +4551,7 @@ return a / b;`,Wee=` } setOutput(mix(${g}, sum, float(found))); } - `}};var _g=class{constructor(t,e,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=e>1?"strides[j]":"strides",b=e>1?"strides[j + 1]":"strides";this.userCode=` + `}};var Tg=class{constructor(t,e,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=e>1?"strides[j]":"strides",b=e>1?"strides[j + 1]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { @@ -4588,7 +4588,7 @@ return a / b;`,Wee=` } setOutput(mix(${g}, sum, found)); } - `}};function kte(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=e.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 vu(p,i,d.shape.length,f.shape.length,c,m);let x=e.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:e,attrs:{shape:a}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(h),b}var R3={kernelName:ds,backendName:"webgl",kernelFunc:kte};var $g=class{constructor(t,e,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[t,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(e+1))}; ++i) { if (left >= right) break;`,i=A().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` + `}};function kte(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=e.makeTensorInfo([],"float32",new Float32Array([0])),g;A().getBool("WEBGL_PACK")?g=new Tg(p,i,d.shape.length,f.shape.length,c,m):g=new yu(p,i,d.shape.length,f.shape.length,c,m);let x=e.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:e,attrs:{shape:a}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(h),b}var D3={kernelName:ms,backendName:"webgl",kernelFunc:kte};var _g=class{constructor(t,e,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[t,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(e+1))}; ++i) { if (left >= right) break;`,i=A().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4613,7 +4613,7 @@ return a / b;`,Wee=` setOutput(float(findBound(batch, value))); } - `}};function Nte(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new $g(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return e.runWebGLProgram(i,[n,s],"int32",p)}var D3={kernelName:hs,backendName:"webgl",kernelFunc:Nte};var Eg=class{constructor(t,e,o){this.variableNames=["c","a","b"],this.outputShape=e;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let c=0;c4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let c=0;c= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); -`,$te=xe({opSnippet:_te}),F3={kernelName:gs,backendName:"webgl",kernelFunc:$te};var Ete=Po+` +`,$te=xe({opSnippet:_te}),P3={kernelName:hs,backendName:"webgl",kernelFunc:$te};var Ete=Fo+` return 1.0 / (1.0 + exp(-1.0 * x)); `,Rte=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); @@ -4641,20 +4641,20 @@ return a / b;`,Wee=` result.a = isNaN.a ? x.a : result.a; return result; -`,Dte=xe({opSnippet:Ete,packedOpSnippet:Rte,cpuKernelImpl:uD}),P3={kernelName:Cs,backendName:"webgl",kernelFunc:Dte};var Ate=` +`,Dte=xe({opSnippet:Ete,packedOpSnippet:Rte,cpuKernelImpl:pD}),O3={kernelName:bs,backendName:"webgl",kernelFunc:Dte};var Ate=` if (isnan(x)) { return 0.0; } return sign(x); -`,Fte=xe({opSnippet:Ate}),O3={kernelName:bs,backendName:"webgl",kernelFunc:Fte};var Pte=Po+` +`,Fte=xe({opSnippet:Ate}),M3={kernelName:ys,backendName:"webgl",kernelFunc:Fte};var Pte=Fo+` return sin(x); `,Ote=` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${Xr} + ${jr} return result; -`,Mte=xe({opSnippet:Pte,packedOpSnippet:Ote}),M3={kernelName:xs,backendName:"webgl",kernelFunc:Mte};var Lte=` +`,Mte=xe({opSnippet:Pte,packedOpSnippet:Ote}),L3={kernelName:gs,backendName:"webgl",kernelFunc:Mte};var Lte=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,Bte=xe({opSnippet:Lte}),L3={kernelName:ys,backendName:"webgl",kernelFunc:Bte};var zte=` +`,Bte=xe({opSnippet:Lte}),B3={kernelName:xs,backendName:"webgl",kernelFunc:Bte};var zte=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4674,17 +4674,17 @@ return a / b;`,Wee=` result = log(exp_x + 1.0); } return result; -`,Vte=xe({opSnippet:zte}),B3={kernelName:ws,backendName:"webgl",kernelFunc:Vte};var Wte=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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;xe.disposeIntermediateTensorInfo(x)),g},z3={kernelName:ga,backendName:"webgl",kernelFunc:Wte};function Ute(r){let{inputs:t,backend:e}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: +`,Vte=xe({opSnippet:zte}),z3={kernelName:Cs,backendName:"webgl",kernelFunc:Vte};var Wte=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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;xe.disposeIntermediateTensorInfo(x)),g},V3={kernelName:ga,backendName:"webgl",kernelFunc:Wte};function Ute(r){let{inputs:t,backend:e}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw: ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw: - ${a.shape}`);let i=e.readSync(o.dataId),p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=e.readSync(a.dataId)[0],[l,m,d,f,h]=cD(i,o.shape,o.dtype,p,n.dtype,u,c);return[e.makeTensorInfo(m,o.dtype,l),e.makeTensorInfo([m[0]],n.dtype,d),e.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var V3={kernelName:ji,backendName:"webgl",kernelFunc:Ute};function Gte(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.readSync(n.dataId)),i=e.readSync(o.dataId),p=Array.from(e.readSync(s.dataId)),[u,c,l]=lD(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var W3={kernelName:ti,backendName:"webgl",kernelFunc:Gte};function Hte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${a.shape}`);let i=e.readSync(o.dataId),p=e.readSync(n.dataId),u=e.readSync(s.dataId),c=e.readSync(a.dataId)[0],[l,m,d,f,h]=lD(i,o.shape,o.dtype,p,n.dtype,u,c);return[e.makeTensorInfo(m,o.dtype,l),e.makeTensorInfo([m[0]],n.dtype,d),e.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),e.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var W3={kernelName:Hi,backendName:"webgl",kernelFunc:Ute};function Gte(r){let{inputs:t,backend:e}=r,{inputIndices:o,inputShape:n,newShape:s}=t;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(e.readSync(n.dataId)),i=e.readSync(o.dataId),p=Array.from(e.readSync(s.dataId)),[u,c,l]=mD(i,o.shape,o.dtype,a,p);return[e.makeTensorInfo(c,o.dtype,u),e.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var U3={kernelName:ei,backendName:"webgl",kernelFunc:Gte};function Hte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var U3={kernelName:ya,backendName:"webgl",kernelFunc:Hte};function Kte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);let a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=ch(a,o.shape,o.dtype,i,p,!0);return e.makeTensorInfo(c,o.dtype,u)}var G3={kernelName:ya,backendName:"webgl",kernelFunc:Hte};function Kte(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var G3={kernelName:ba,backendName:"webgl",kernelFunc:Kte};function qte(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),b=e.bufferSync(s),C=y.decodeString(e.readSync(a.dataId)[0]),S=iD(x,b,i,m,c,u,p,l,C,d);return e.makeTensorInfo(i,S.dtype,S.values)}let f=new vu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=e.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:i}});return e.disposeIntermediateTensorInfo(h),g}var H3={kernelName:ks,backendName:"webgl",kernelFunc:qte};function jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var K3={kernelName:xa,backendName:"webgl",kernelFunc:jte};var q3="return sqrt(x);",Xte=xe({opSnippet:q3,packedOpSnippet:q3,cpuKernelImpl:mD}),j3={kernelName:Ss,backendName:"webgl",kernelFunc:Xte};var Yte="return x * x;",Qte=xe({opSnippet:Yte}),X3={kernelName:Xi,backendName:"webgl",kernelFunc:Qte};var Y3="return (a - b) * (a - b);",Zte=nt({opSnippet:Y3,packedOpSnippet:Y3}),Q3={kernelName:Ns,backendName:"webgl",kernelFunc:Zte};function Jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;if(n.dtype!=="string")throw new Error("Input must be of datatype string");let s=e.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=dD(a,"string",o);return e.makeTensorInfo(n.shape,"string",i)}var Z3={kernelName:Ou,backendName:"webgl",kernelFunc:Jte};function ere({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=Ut+` + ${s.shape}`);let a=e.readSync(o.dataId),i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c]=ch(a,o.shape,o.dtype,i,p);return e.makeTensorInfo(c,o.dtype,u)}var H3={kernelName:ba,backendName:"webgl",kernelFunc:Kte};function qte(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),b=e.bufferSync(s),C=y.decodeString(e.readSync(a.dataId)[0]),S=uD(x,b,i,m,c,u,p,l,C,d);return e.makeTensorInfo(i,S.dtype,S.values)}let f=new yu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=e.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:e,attrs:{shape:i}});return e.disposeIntermediateTensorInfo(h),g}var K3={kernelName:vs,backendName:"webgl",kernelFunc:qte};function jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var q3={kernelName:xa,backendName:"webgl",kernelFunc:jte};var j3="return sqrt(x);",Xte=xe({opSnippet:j3,packedOpSnippet:j3,cpuKernelImpl:dD}),X3={kernelName:ws,backendName:"webgl",kernelFunc:Xte};var Yte="return x * x;",Qte=xe({opSnippet:Yte}),Y3={kernelName:Ki,backendName:"webgl",kernelFunc:Qte};var Q3="return (a - b) * (a - b);",Zte=nt({opSnippet:Q3,packedOpSnippet:Q3}),Z3={kernelName:ks,backendName:"webgl",kernelFunc:Zte};function Jte(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t;if(n.dtype!=="string")throw new Error("Input must be of datatype string");let s=e.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=fD(a,"string",o);return e.makeTensorInfo(n.shape,"string",i)}var J3={kernelName:$u,backendName:"webgl",kernelFunc:Jte};function ere({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=Wt+` return x > 0.0 ? 1.0 : float(${t.alpha}); - `,s=new or(o.shape,n);return e.runWebGLProgram(s,[o],o.dtype)}var J3={kernelName:So,backendName:"webgl",kernelFunc:ere};var Rg=class{constructor(t,e,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=` + `,s=new tr(o.shape,n);return e.runWebGLProgram(s,[o],o.dtype)}var eP={kernelName:wo,backendName:"webgl",kernelFunc:ere};var Eg=class{constructor(t,e,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=` ${s} begin = ${s}(${t}); ${s} strides = ${s}(${e}); @@ -4692,15 +4692,15 @@ return a / b;`,Wee=` ${a} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function tre(r){let{inputs:t,backend:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({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 E=ct.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:e,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(R)}else if(e.shouldExecuteOnCPU([n])){let R=e.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=fD(d,D,S,b);k=e.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=e.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:e,attrs:{shape:f}});return e.disposeIntermediateTensorInfo(k),_}var eP={kernelName:Ts,backendName:"webgl",kernelFunc:tre};function rre(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=hD(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var tP={kernelName:Ca,backendName:"webgl",kernelFunc:rre};function ore(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.readSync(s.dataId),p=e.readSync(a.dataId)[0],[u,c,l]=gD(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],"int32",u),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(l))]}var rP={kernelName:Yi,backendName:"webgl",kernelFunc:ore};function nre(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.readSync(s.dataId),i=xD(a,n);return e.makeTensorInfo(s.shape,"int32",i)}var oP={kernelName:Qi,backendName:"webgl",kernelFunc:nre};var sre="return tan(x);",are=xe({opSnippet:sre}),nP={kernelName:$s,backendName:"webgl",kernelFunc:are};var ire=` + `}};function tre(r){let{inputs:t,backend:e,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=te({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 E=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:e,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:e,attrs:{shape:f}}),e.disposeIntermediateTensorInfo(R)}else if(e.shouldExecuteOnCPU([n])){let R=e.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=hD(d,D,S,b);k=e.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Eg(b,S,d);k=e.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:e,attrs:{shape:f}});return e.disposeIntermediateTensorInfo(k),_}var tP={kernelName:Ns,backendName:"webgl",kernelFunc:tre};function rre(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=gD(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var rP={kernelName:Ca,backendName:"webgl",kernelFunc:rre};function ore(r){let{inputs:t,backend:e,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=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(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=e.readSync(s.dataId),p=e.readSync(a.dataId)[0],[u,c,l]=xD(i,p,n),m=c.length;return[e.makeTensorInfo([m,2],"int32",u),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(l))]}var oP={kernelName:qi,backendName:"webgl",kernelFunc:ore};function nre(r){let{inputs:t,backend:e,attrs:o}=r,{numBuckets:n}=o,{input:s}=t;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=e.readSync(s.dataId),i=yD(a,n);return e.makeTensorInfo(s.shape,"int32",i)}var nP={kernelName:ji,backendName:"webgl",kernelFunc:nre};var sre="return tan(x);",are=xe({opSnippet:sre}),sP={kernelName:_s,backendName:"webgl",kernelFunc:are};var ire=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,ure=xe({opSnippet:ire}),sP={kernelName:Es,backendName:"webgl",kernelFunc:ure};function pre(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:e,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:e,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:e,attrs:{shape:m}}),g=new vu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=e.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:e,attrs:{shape:n.shape}});return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(x),b}var aP={kernelName:fs,backendName:"webgl",kernelFunc:pre};var Dg=class{constructor(t,e){this.variableNames=["A"];let o=new Array(t.length);for(let a=0;a5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${r[0]})`;let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=e.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=bD(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Dg(n.shape,s);return e.runWebGLProgram(a,[n],n.dtype)}var iP={kernelName:po,backendName:"webgl",kernelFunc:Dv};var Ag=class{constructor(t){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=t,this.userCode=` + `}};function cre(r){let t=r.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${r[0]})`;let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=e.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=CD(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Rg(n.shape,s);return e.runWebGLProgram(a,[n],n.dtype)}var uP={kernelName:uo,backendName:"webgl",kernelFunc:Av};var Dg=class{constructor(t){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=t,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4740,7 +4740,7 @@ return a / b;`,Wee=` setOutput(float(i1)); } } - `}},Fg=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=t,this.userCode=` + `}},Ag=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=t,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;`,Wee=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function Rp(r,t){t!==null&&r.disposeIntermediateTensorInfo(t)}function uP(r){let t=1;for(;tp){let P=e.readSync(n.dataId),[O,M]=CD(P,u,n.dtype,s,a);return[e.makeTensorInfo(O.shape,O.dtype,O.values),e.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[e.makeTensorInfo(u,n.dtype,[]),e.makeTensorInfo(u,"int32",[])];if(c===1)return[n,Si({attrs:{shape:u,dtype:"int32",value:0},backend:e})];let l=e.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?e.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:e});m&&Rp(e,d);let x=uP(s),b=uP(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=e.runWebGLProgram(B,L,"int32",U),Rp(e,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=e.runWebGLProgram(M,O,"int32",B),Rp(e,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:e,attrs:{begin:0,size:[h,s]}}),Rp(e,_);let E=kv({inputs:{x:g,indices:C},backend:e,attrs:{axis:1,batchDims:1}});Rp(e,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:e}),Rp(e,_);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:e}),Rp(e,D),[E,C]}var pP={kernelName:Rs,backendName:"webgl",kernelFunc:lre};var Pg=class{constructor(t,e,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` + `}};function Ip(r,t){t!==null&&r.disposeIntermediateTensorInfo(t)}function pP(r){let t=1;for(;tp){let P=e.readSync(n.dataId),[O,M]=wD(P,u,n.dtype,s,a);return[e.makeTensorInfo(O.shape,O.dtype,O.values),e.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[e.makeTensorInfo(u,n.dtype,[]),e.makeTensorInfo(u,"int32",[])];if(c===1)return[n,bi({attrs:{shape:u,dtype:"int32",value:0},backend:e})];let l=e.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?e.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:e});m&&Ip(e,d);let x=pP(s),b=pP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Dg(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=e.runWebGLProgram(B,L,"int32",U),Ip(e,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 Ag([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=e.runWebGLProgram(M,O,"int32",B),Ip(e,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:e,attrs:{begin:0,size:[h,s]}}),Ip(e,_);let E=Nv({inputs:{x:g,indices:C},backend:e,attrs:{axis:1,batchDims:1}});Ip(e,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:e}),Ip(e,_);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:e}),Ip(e,D),[E,C]}var cP={kernelName:Es,backendName:"webgl",kernelFunc:lre};var Fg=class{constructor(t,e,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${p} == 2) { @@ -4886,7 +4886,7 @@ return a / b;`,Wee=` } setOutput(outputValue); } - `}};function mre(r){let{inputs:t,backend:e,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 Pg(l,m,a,i,p,g);return e.runWebGLProgram(x,[n,s],"float32")}var cP={kernelName:Ds,backendName:"webgl",kernelFunc:mre};function dre(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t;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}=wD(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var lP={kernelName:Zi,backendName:"webgl",kernelFunc:dre};function fre(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeIntermediateTensorInfo(h)),f}var mP={kernelName:wa,backendName:"webgl",kernelFunc:fre};var Og=class{constructor(t,e){this.variableNames=["x","segmentIds"];let o=t.windowSize,n=t.batchSize,s=t.inSize,a=t.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",c=Math.floor(o/4)*4,l=o%4,m=` + `}};function mre(r){let{inputs:t,backend:e,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 Fg(l,m,a,i,p,g);return e.runWebGLProgram(x,[n,s],"float32")}var lP={kernelName:Rs,backendName:"webgl",kernelFunc:mre};function dre(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t;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}=SD(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var mP={kernelName:Xi,backendName:"webgl",kernelFunc:dre};function fre(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeIntermediateTensorInfo(h)),f}var dP={kernelName:wa,backendName:"webgl",kernelFunc:fre};var Pg=class{constructor(t,e){this.variableNames=["x","segmentIds"];let o=t.windowSize,n=t.batchSize,s=t.inSize,a=t.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",c=Math.floor(o/4)*4,l=o%4,m=` sumValue += dot(values, segFilter); `,d="";s%o>0&&(d=` if (inIdx < 0 || inIdx >= ${s}) { @@ -4992,9 +4992,9 @@ return a / b;`,Wee=` } setOutput(${u}); } - `}};function hre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=Ct({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=ni(n.dtype),g=(S,k,_,E,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=e.compileAndRun(L,[S,_],E);if(p.push(B),B.shape[1]===R)return B;let z=Rv({backend:e,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),U=Dv({inputs:{x:z},backend:e,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,"unsortedSegmentSum",s,h,a),b=te({inputs:{x},backend:e,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=Ct({inputs:{x:C},backend:e,attrs:{perm:S}})}return p.forEach(S=>e.disposeIntermediateTensorInfo(S)),C}var dP={kernelName:Ji,backendName:"webgl",kernelFunc:hre};var gre=[XD,QD,ZD,JD,tA,rA,oA,nA,iA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,wA,SA,IA,vA,_A,EA,RA,BD,AA,PA,OA,MA,LA,BA,zA,VA,WA,UA,GA,qA,jA,XA,YA,QA,ZA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,cF,lF,mF,dF,hF,gF,xF,yF,bF,CF,wF,SF,IF,LD,vF,FA,kF,NF,TF,zD,_F,$F,EF,RF,DF,AF,FF,PF,OF,MF,BF,zF,VF,WF,UF,GF,KF,jF,XF,YF,QF,ZF,o3,UD,n3,s3,a3,i3,kA,u3,l3,m3,d3,f3,VD,h3,g3,x3,y3,b3,NA,JF,C3,w3,S3,HD,I3,v3,k3,N3,T3,_3,$3,E3,R3,D3,A3,F3,P3,O3,M3,L3,CA,r3,B3,z3,V3,W3,U3,G3,H3,K3,j3,X3,Q3,Z3,J3,eP,tP,rP,oP,t3,qD,nP,sP,aP,iP,pP,cP,jD,lP,mP,dP,p3];for(let r of gre)ri(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 ku;(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"})(ku||(ku={}));var fP;function xre(r){fP=r.wasm.cwrap(Io,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function yre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t;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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=e.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:e.dataIdMap.get(i.dataId).id,g=ku[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=Ir.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=e.makeOutput([...C,x,b],n.dtype),k=e.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return fP(m,_,n.shape.length,d,E,s.shape.length,p,u,g,f,h,l||0,k),S}var hP={kernelName:Io,backendName:"wasm",setupFunc:xre,kernelFunc:yre};function he(r,t){let e;function o(s){e=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,t||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||e(p,we[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var gP=he(Xs);var xP=he(Wo);var yP=he(Uo);function Ue(r,t,e){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=e!=null?e: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 bre=!0,bP=Ue(uo,bre);var CP;function Cre(r){CP=r.wasm.cwrap(Go,null,["array","number","number","number"])}function wre(r){let{inputs:t,backend:e}=r,o=e.makeOutput(t[0].shape,t[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=t.map(i=>e.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=e.dataIdMap.get(o.dataId).id;return CP(s,n.length,we[o.dtype],a),o}var wP={kernelName:Go,backendName:"wasm",setupFunc:Cre,kernelFunc:wre};function Dp(r){let{inputs:{x:t},backend:e}=r;if(t.dtype==="string")return ur(e.readSync(t.dataId),t.shape,t.dtype);let o=e.makeOutput(t.shape,t.dtype),n=e.typedArrayFromHeap(t);return e.typedArrayFromHeap(o).set(n),o}var SP={kernelName:wo,backendName:"wasm",kernelFunc:Dp};var IP;function Sre(r){IP=r.wasm.cwrap(co,null,["number","array","number","number","number","array","number"])}function go(r){let{inputs:t,backend:e,attrs:o}=r,[n,s]=vre(t.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[e,o]}var vP={kernelName:co,backendName:"wasm",kernelFunc:go,setupFunc:Sre};function _r(r,t,e){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(t,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 GP={kernelName:da,backendName:"wasm",kernelFunc:Vt};var HP;function Mre(r){HP=r.wasm.cwrap(Jo,null,["number","array","number","number","array","number","number","number","number"])}function Lre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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=Ir.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],_=Vt({inputs:{x:n},backend:e,attrs:{shape:S}}),E=Vt({inputs:{x:s},backend:e,attrs:{shape:k}}),R=e.dataIdMap.get(_.dataId).id,D=e.dataIdMap.get(E.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=e.makeOutput([M,P,O],_.dtype),B=e.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return HP(R,z,_.shape.length,D,U,E.shape.length,a,i,B),e.disposeData(_.dataId),e.disposeData(E.dataId),L.shape=C,L}var KP={kernelName:Jo,backendName:"wasm",setupFunc:Mre,kernelFunc:Lre};function Oo(r){let{inputs:{x:t},attrs:{begin:e,size:o},backend:n}=r,[s,a]=ct.parseSliceParams(t,e,o),i=ct.isSliceContinous(t.shape,s,a),p=n.readSync(t.dataId),u=n.makeOutput(a,t.dtype),c=y.computeStrides(t.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=ct.computeFlatOffset(s,c);return t.dtype==="string"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(t.dtype==="string"){let f=hp(p,s,a,t.shape,t.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=t.shape.length;if(d===2)Bre(p,c[0],m,s,a);else if(d===3)zre(p,c[0],c[1],m,s,a);else if(d===4)Vre(p,c[0],c[1],c[2],m,s,a);else{let f=hp(p,s,a,t.shape,t.dtype);m.set(f)}return u}function Bre(r,t,e,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=Vt({inputs:{x:n},backend:e,attrs:{shape:p}}),f=go({inputs:{x:d},backend:e,attrs:{perm:u}}),h=Vt({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Oo({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(h.dataId),g}var jP={kernelName:Js,backendName:"wasm",kernelFunc:Wre};var XP;function Ure(r){XP=r.wasm.cwrap(en,null,["number","number","boolean","number","number","number"])}function Gre(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=t.makeOutput(p,s.dtype);function c(l){return t.dataIdMap.get(l.dataId).id}return XP(c(n),a,i,c(s),we[s.dtype],c(u)),u}var YP={kernelName:en,backendName:"wasm",setupFunc:Ure,kernelFunc:Gre};var Hre=!0,QP=Ue(ja,Hre);function Kre(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.typedArrayFromHeap(o),a=e.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var ZP={kernelName:ea,backendName:"wasm",kernelFunc:Kre};function Mr(r){let{inputs:{x:t},attrs:{dtype:e},backend:o}=r,n=o.makeOutput(t.shape,e),s=o.typedArrayFromHeap(t);return o.typedArrayFromHeap(n).set(s),n}var JP={kernelName:bo,backendName:"wasm",kernelFunc:Mr};var eO=he(tn);var tO;function qre(r){tO=r.wasm.cwrap(Co,null,["number","number","number","number"])}function jre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i=e.dataIdMap.get(n.dataId).id,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(p.dataId).id;return tO(i,s,a,u),p}var rO={kernelName:Co,backendName:"wasm",setupFunc:qre,kernelFunc:jre};function Av(r){let{inputs:t,backend:e}=r,o=y.parseAxisParam(r.attrs.axis,t[0].shape)[0],n=t.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(t.map(d=>d.shape),o),a=t.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Dp({inputs:{x:a[0]},backend:e});let i=e.makeOutput(s,t[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 Vt({inputs:{x:C},backend:e,attrs:{shape:k}})}),f=d.map(C=>({vals:e.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=mp(f,s,t[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=e.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>e.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=>e.typedArrayFromHeap(d)),m=e.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=go({inputs:{x:n},attrs:{perm:u},backend:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumprod",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;yO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=go({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var bO={kernelName:pn,backendName:"wasm",setupFunc:ioe,kernelFunc:uoe};var CO;function poe(r){CO=r.wasm.cwrap(cn,null,["number","number","number","number","number","number"])}function coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=go({inputs:{x:n},attrs:{perm:u},backend:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumsum",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;CO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=go({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var wO={kernelName:cn,backendName:"wasm",setupFunc:poe,kernelFunc:coe};var SO;function loe(r){SO=r.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function moe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{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=t.makeOutput(u,s.dtype);function l(m){return t.dataIdMap.get(m.dataId).id}return SO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var IO={kernelName:ra,backendName:"wasm",setupFunc:loe,kernelFunc:moe};var vO;function doe(r){vO=r.wasm.cwrap(mn,null,["number","number","number","array","number","array","array","number","number"])}function foe(r){let{backend:t,inputs:e,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=t.makeOutput(f,"float32"),x=t.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=t.dataIdMap.get(h.dataId).id;return vO(x,s,a==="NHWC"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var kO={kernelName:mn,backendName:"wasm",setupFunc:doe,kernelFunc:foe};var NO;function hoe(r){NO=r.wasm.cwrap(dn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function goe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=e,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,E=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 NO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,E,R,D,M),O}var TO={kernelName:dn,backendName:"wasm",setupFunc:hoe,kernelFunc:goe};var _O;function xoe(r){_O=r.wasm.cwrap("Diag",null,["number","number","number","number"])}function yoe(r){let{inputs:t,backend:e}=r,{x:o}=t,n=y.sizeFromShape(o.shape),s=e.makeOutput([...o.shape,...o.shape],o.dtype);return _O(e.dataIdMap.get(o.dataId).id,we[o.dtype],n,e.dataIdMap.get(s.dataId).id),s}var $O={kernelName:oa,backendName:"wasm",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap(fn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=e.makeOutput(u.outShape,n.dtype);return EO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.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 RO={kernelName:fn,backendName:"wasm",setupFunc:boe,kernelFunc:Coe};var DO;function woe(r){DO=r.wasm.cwrap(zi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Soe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(s.shape,s.dtype);return DO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 AO={kernelName:zi,backendName:"wasm",setupFunc:woe,kernelFunc:Soe};var FO;function Ioe(r){FO=r.wasm.cwrap(Bi,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:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return FO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 PO={kernelName:Bi,backendName:"wasm",setupFunc:Ioe,kernelFunc:voe};var OO=he(gn);var MO;function koe(r){MO=r.wasm.cwrap(Ya,null,["number","number","number"])}function Noe(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=e.makeOutput(n.shape,"float32"),a=i=>e.dataIdMap.get(i.dataId).id;return MO(a(n),a(o),a(s)),s}var LO={kernelName:Ya,backendName:"wasm",setupFunc:koe,kernelFunc:Noe};var Toe=!1,BO=Ue(yn,Toe,"bool");var zO=he(xn);var VO=he(bn,"float32");function Lg(r){let{inputs:t,attrs:e,backend:o}=r,{input:n}=t,{dim:s}=e,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),Vt({inputs:{x:n},backend:o,attrs:{shape:i}})}var WO={kernelName:na,backendName:"wasm",kernelFunc:Lg};var UO=he(Cn,"float32");function Pv(r){let{attrs:{shape:t,value:e,dtype:o},backend:n}=r,s=n.makeOutput(t,o);return n.typedArrayFromHeap(s).fill(e),s}var GO={kernelName:sa,backendName:"wasm",kernelFunc:Pv};var HO;function _oe(r){HO=r.wasm.cwrap(wn,null,["number","number","number","number","number","number"])}function $oe(r){let{inputs:t,backend:e}=r,{image:o}=t,n=e.makeOutput(o.shape,o.dtype),s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return HO(s,i,p,u,c,a),n}var KO={kernelName:wn,backendName:"wasm",kernelFunc:$oe,setupFunc:_oe};var qO=he(Sn);var Eoe=!1,jO=Ue(In,Eoe);var XO;function Roe(r){XO=r.wasm.cwrap(vn,null,["number","number","number","number","number","number","number"])}function Doe(r){let{backend:t,inputs:e,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=e,c=t.dataIdMap.get(s.dataId).id,l=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(i.dataId).id,d=p!=null?t.dataIdMap.get(p.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,h=t.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=t.dataIdMap.get(h.dataId).id;return XO(c,l,m,d,f,n,g),h}var YO={kernelName:vn,backendName:"wasm",setupFunc:Roe,kernelFunc:Doe};var QO;function Aoe(r){QO=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 Foe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=ku[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,E=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 QO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var ZO={kernelName:vo,backendName:"wasm",setupFunc:Aoe,kernelFunc:Foe};var JO;function Poe(r){JO=r.wasm.cwrap(ko,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 Ooe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=ku[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,E=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 JO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var eM={kernelName:ko,backendName:"wasm",setupFunc:Poe,kernelFunc:Ooe};var tM;function Moe(r){tM=r.wasm.cwrap(kn,null,["number","number","number","number","number","number","array","number"])}function Loe(r){let{backend:t,inputs:e}=r,{params:o,indices:n}=e,[s,a,i,p]=af.prepareAndValidate(o,n),u=t.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=t.dataIdMap.get(o.dataId).id,h=t.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(u.dataId).id;return tM(d,we[o.dtype],h,a,l,i,g,x),u}var rM={kernelName:kn,backendName:"wasm",setupFunc:Moe,kernelFunc:Loe};var oM;function Boe(r){oM=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function zoe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=t.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=Vt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:t}),d=y.sizeFromShape(s.shape),f=Vt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:t}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=t.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=t.dataIdMap.get(m.dataId).id,k=t.dataIdMap.get(f.dataId).id,_=t.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return oM(C,we[n.dtype],E,x,k,l.batchSize,R,_),t.disposeData(m.dataId),t.disposeData(f.dataId),g.shape=l.outputShape,g}var nM={kernelName:aa,backendName:"wasm",setupFunc:Boe,kernelFunc:zoe};var Voe=!1,sM=Ue(Nn,Voe,"bool");var Woe=!1,aM=Ue(Tn,Woe,"bool");var iM=he(_n,"bool");var uM=he($n,"bool");var pM=he(En,"bool");var cM;function Uoe(r){cM=r.wasm.cwrap(Rn,null,["number","number","number","number"])}function Goe(r){let{inputs:{x:t},attrs:{alpha:e},backend:o}=r,n=o.dataIdMap.get(t.dataId).id,s=o.makeOutput(t.shape,"float32");if(y.sizeFromShape(t.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;cM(n,we[t.dtype],e,a)}return s}var lM={kernelName:Rn,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe};var Hoe=!1,mM=Ue(Dn,Hoe,"bool");var Koe=!1,dM=Ue(An,Koe,"bool");var fM;function qoe(r){fM=r.wasm.cwrap(Fn,null,["number","number","number","number"])}function joe(r){let{attrs:t,backend:e}=r,{start:o,stop:n,num:s}=t,a=Math.floor(s),i=e.makeOutput([a],"float32");return fM(e.dataIdMap.get(i.dataId).id,o,n,a),i}var hM={kernelName:Fn,backendName:"wasm",setupFunc:qoe,kernelFunc:joe};var gM=he(Pn);var xM=he(On);var Xoe=!1,yM=Ue(Mn,Xoe,"bool");var bM=he(Ln);var Yoe=!1,CM=Ue(Bn,Yoe,"bool");var Qoe=!1,wM=Ue($0,Qoe,"bool");var SM;function Zoe(r){SM=r.wasm.cwrap(zn,null,["number","number","number","number","number","number","number"])}function Joe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(n.shape,n.dtype);return SM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var IM={kernelName:zn,backendName:"wasm",setupFunc:Zoe,kernelFunc:Joe};var vM;function ene(r){vM=r.wasm.cwrap(Qa,null,["number","number","number","number","number","number","number","number","number"])}function tne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return vM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var kM={kernelName:Qa,backendName:"wasm",setupFunc:ene,kernelFunc:tne};var NM;function rne(r){NM=r.wasm.cwrap(Vn,null,["number","number","number","number"])}function one(r){let{backend:t,inputs:e,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=e,p=t.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t);if(d){let C=t.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=t.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;NM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var TM={kernelName:Vn,backendName:"wasm",setupFunc:rne,kernelFunc:one};var nne=!1,_M=Ue(Wn,nne);var $M;function sne(r){$M=r.wasm.cwrap(Un,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ane(r){let{inputs:t,attrs:e,backend:o}=r,n=t.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}=e,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 E=o.makeOutput(c.outShape,"float32"),R=o.dataIdMap.get(E.dataId).id;return $M(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),E}var EM={kernelName:Un,backendName:"wasm",setupFunc:sne,kernelFunc:ane};var RM;function ine(r){RM=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 une(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=e.makeOutput(c.outShape,n.dtype);return RM(e.dataIdMap.get(n.dataId).id,e.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 DM={kernelName:ia,backendName:"wasm",setupFunc:ine,kernelFunc:une};var AM;function pne(r){AM=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 cne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return AM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 FM={kernelName:Ki,backendName:"wasm",setupFunc:pne,kernelFunc:cne};var PM;function lne(r){PM=r.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function mne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return PM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 OM={kernelName:Hi,backendName:"wasm",setupFunc:lne,kernelFunc:mne};var MM;function dne(r){MM=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 fne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(c.outShape,n.dtype),m=e.makeOutput(c.outShape,"int32");return MM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(l.dataId).id,e.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 LM={kernelName:ua,backendName:"wasm",setupFunc:dne,kernelFunc:fne};var BM;function hne(r){BM=r.wasm.cwrap(Gn,null,["number, number, number"])}function gne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let S=t.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:t,inputs:{x:u},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(b.dataId).id);let C=t.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let S=t.dataIdMap.get(C.dataId).id;BM(p,x,S)}if(d&&t.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!=="float32"&&t.disposeData(b.dataId),C}var zM={kernelName:Gn,backendName:"wasm",setupFunc:hne,kernelFunc:gne};var VM;function xne(r){VM=r.wasm.cwrap(Hn,null,["number","number","number","number"])}function yne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t);if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;VM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var WM={kernelName:Hn,backendName:"wasm",setupFunc:xne,kernelFunc:yne};var bne=!1,UM=Ue(Kn,bne);var Ov;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Ov||(Ov={}));var GM;function Cne(r){GM=r.wasm.cwrap(qn,null,["number","array","number","number","array","array","number","number"])}function wne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+t.shape[h]+f[1]),a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),p=e.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.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 GM(a,u,t.shape.length,we[t.dtype],m,d,Ov[n],p),i}var HM={kernelName:qn,backendName:"wasm",kernelFunc:wne,setupFunc:Cne};var KM;function Sne(r){KM=r.wasm.cwrap(vs,null,["number","number","number","number"])}function Mv(r){let{backend:t,inputs:{logits:e},attrs:{dim:o}}=r,n=t.dataIdMap.get(e.dataId).id,s=t.makeOutput(e.shape,e.dtype),a=t.dataIdMap.get(s.dataId).id,i=e.shape[o],p=y.sizeFromShape(e.shape)/i;return y.sizeFromShape(s.shape)===0||KM(n,a,i,p),s}var qM={kernelName:vs,backendName:"wasm",setupFunc:Sne,kernelFunc:Mv};var jM;function Ine(r){jM=r.wasm.cwrap(Xn,null,["number","number","number","number","number","number"])}function vne(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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:Mv({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=e.makeOutput([u,s],"int32");return jM(e.dataIdMap.get(p.dataId).id,u,c,s,a,e.dataIdMap.get(l.dataId).id),i||e.disposeData(p.dataId),l}var XM={kernelName:Xn,backendName:"wasm",setupFunc:Ine,kernelFunc:vne};var YM=Ue(jn,!0);var kne=!0,QM=Ue(Yn,kne);var ZM=he(pa);function Yc(r,t){let e=new Int32Array(r.wasm.HEAPU8.buffer,t,4),o=e[0],n=e[1],s=e[2],a=e[3];return r.wasm._free(t),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var JM;function Nne(r){JM=r.wasm.cwrap(Zn,"number",["number","number","number","number","number"])}function Tne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=e,u=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(p.dataId).id,l=JM(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Yc(t,l);return t.wasm._free(f),t.wasm._free(h),t.makeOutput([d],"int32",m)}var eL={kernelName:Zn,backendName:"wasm",setupFunc:Nne,kernelFunc:Tne};var tL;function _ne(r){tL=r.wasm.cwrap(Za,"number",["number","number","number","number","number","bool"])}function $ne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=tL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Yc(t,m);t.wasm._free(h);let x=t.makeOutput([f],"int32",d),b=t.makeOutput([],"int32",g);return[x,b]}var rL={kernelName:Za,backendName:"wasm",setupFunc:_ne,kernelFunc:$ne};var oL;function Ene(r){oL=r.wasm.cwrap(Jn,"number",["number","number","number","number","number","number"])}function Rne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=oL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Yc(t,m);t.wasm._free(g);let x=t.makeOutput([f],"int32",d),b=t.makeOutput([f],"float32",h);return[x,b]}var nL={kernelName:Jn,backendName:"wasm",setupFunc:Ene,kernelFunc:Rne};var Dne=!1,sL=Ue(Qn,Dne,"bool");var aL;function Ane(r){aL=r.wasm.cwrap(es,null,["number","number","number","number","number"])}function Fne(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=e.makeOutput([...n.shape,a],s),c=e.dataIdMap.get(u.dataId).id,m=e.dataIdMap.get(n.dataId).id;return aL(m,a,i,p,c),u}var iL={kernelName:es,backendName:"wasm",setupFunc:Ane,kernelFunc:Fne};function Pne(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(1),o}var uL={kernelName:ca,backendName:"wasm",kernelFunc:Pne};function One(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Lg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Lg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Av({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var pL={kernelName:la,backendName:"wasm",kernelFunc:One};var cL;function Mne(r){cL=r.wasm.cwrap(ts,null,["number","array","number","number","array","array","number","number"])}function Lne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+t.shape[g]+h[1]);if(y.sizeFromShape(t.shape)===0)return Pv({backend:e,attrs:{shape:s,value:n,dtype:t.dtype}});let a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.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 cL(a,c,t.shape.length,we[t.dtype],d,f,n,u),i}var Bg={kernelName:ts,backendName:"wasm",kernelFunc:Lne,setupFunc:Mne};var Bne=!1,lL=Ue(rs,Bne);var mL;function zne(r){mL=r.wasm.cwrap(os,null,["number","number","number"])}function Vne(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=Mr({backend:e,inputs:{x:o},attrs:{dtype:"float32"}}),i=e.dataIdMap.get(u.dataId).id);let c=e.makeOutput(o.shape,"float32"),l=e.dataIdMap.get(c.dataId).id;return mL(i,a,l),p.dtype!=="float32"&&e.disposeData(u.dataId),c}var dL={kernelName:os,backendName:"wasm",setupFunc:zne,kernelFunc:Vne};var fL;function Wne(r){fL=r.wasm.cwrap(ns,null,["number","number","number","number"])}function Une(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;fL(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var hL={kernelName:ns,backendName:"wasm",setupFunc:Wne,kernelFunc:Une};var Gne=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=fp(o,n,s,a),p=t.makeOutput([i.length],a);return t.typedArrayFromHeap(p).set(i),p},gL={kernelName:ma,backendName:"wasm",kernelFunc:Gne};var Hne=!0,xL=Ue(hn,Hne);var yL=he(ss);var bL=he(as);var CL=he(ps);var wL;function Kne(r){wL=r.wasm.cwrap(us,null,["number","number","number","number","number","number","number","number","number","number"])}function qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),h=t.dataIdMap.get(g.dataId));let x=h.id,b=t.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return b;let C=t.dataIdMap.get(b.dataId).id;return wL(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&t.disposeData(g.dataId),b}var SL={kernelName:us,backendName:"wasm",setupFunc:Kne,kernelFunc:qne};var IL;function jne(r){IL=r.wasm.cwrap(ei,null,["number","number","number","array","array","boolean"])}function Xne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,"float32"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(u.dataId)),IL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var vL={kernelName:ei,backendName:"wasm",setupFunc:jne,kernelFunc:Xne};var kL;function Yne(r){kL=r.wasm.cwrap(is,null,["number","number","number","number","number","number","number","number","number","number"])}function Qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return h;let g=t.dataIdMap.get(n.dataId),x;g.dtype!=="float32"&&(x=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(x.dataId));let b=g.id,C=t.dataIdMap.get(h.dataId).id;return kL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&t.disposeData(x.dataId),h}var NL={kernelName:is,backendName:"wasm",setupFunc:Yne,kernelFunc:Qne};var TL;function Zne(r){TL=r.wasm.cwrap(Ja,null,["number","number","number","array","array","boolean"])}function Jne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,"float32"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(u.dataId)),TL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var _L={kernelName:Ja,backendName:"wasm",setupFunc:Zne,kernelFunc:Jne};var $L;function ese(r){$L=r.wasm.cwrap(cs,null,["number","array","number","array","number","number"])}function tse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Dp({inputs:{x:n},backend:e});let i=e.makeOutput(n.shape,n.dtype),p=e.dataIdMap.get(n.dataId).id,u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);$L(p,c,a.length,l,n.shape.length,u);let m=Vt({inputs:{x:i},attrs:{shape:n.shape},backend:e});return e.disposeData(i.dataId),m}var EL={kernelName:cs,backendName:"wasm",kernelFunc:tse,setupFunc:ese};var RL;function rse(r){RL=r.wasm.cwrap(As,null,["number","number","number","number","number","number","number","number","array","number","number"])}function ose(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{radians:s,fillValue:a,center:i}=o,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(n.dataId).id,c=e.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 RL(u,l,m,d,f,s,h,g,S,C.length,c),p}var DL={kernelName:As,backendName:"wasm",kernelFunc:ose,setupFunc:rse};var AL=he(ls);var FL=he(ms);var PL;function nse(r){PL=r.wasm.cwrap(ds,null,["number","number","number","number","number","number","array","number","number"])}function sse(r){let{backend:t,inputs:e,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,i=t.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=hu.calculateShapes(s,n,a),f=t.dataIdMap.get(n.dataId).id,g=t.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=t.dataIdMap.get(i.dataId).id;return PL(f,g,we[s.dtype],p,u,c,x,m,b),i}var OL={kernelName:ds,backendName:"wasm",setupFunc:nse,kernelFunc:sse};var ML;function ase(r){ML=r.wasm.cwrap(hs,null,["number","number","number","number","number","number","bool","number"])}function ise(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{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=e.makeOutput(s.shape,"int32");function p(u){return e.dataIdMap.get(u.dataId).id}return ML(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a==="left",p(i)),i}var LL={kernelName:hs,backendName:"wasm",setupFunc:ase,kernelFunc:ise};var BL;function use(r){BL=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function pse(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=e.makeOutput(n.shape,n.dtype),c=e.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 BL(a,i,p,d,c),u}var zL={kernelName:fa,backendName:"wasm",kernelFunc:pse,setupFunc:use};var VL=he(gs);var WL;function cse(r){WL=r.wasm.cwrap(Cs,null,["number","number"])}function lse(r){let{backend:t,inputs:{x:e}}=r,o=t.dataIdMap.get(e.dataId).id,n=t.makeOutput(e.shape,e.dtype),s=t.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||WL(o,s),n}var UL={kernelName:"Sigmoid",backendName:"wasm",setupFunc:cse,kernelFunc:lse};var GL=he(bs);var HL=he(xs);var KL=he(ys);var qL=he(ws);function mse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_{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 Pg(M,k),B=e.compileAndRun(L,[S,_],E);if(p.push(B),B.shape[1]===R)return B;let z=Dv({backend:e,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),U=Av({inputs:{x:z},backend:e,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,"unsortedSegmentSum",s,h,a),b=te({inputs:{x},backend:e,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:e,attrs:{perm:S}})}return p.forEach(S=>e.disposeIntermediateTensorInfo(S)),C}var fP={kernelName:Yi,backendName:"webgl",kernelFunc:hre};var gre=[YD,ZD,JD,eA,rA,oA,nA,sA,uA,pA,cA,lA,mA,dA,fA,hA,gA,xA,yA,bA,CA,SA,IA,vA,kA,$A,RA,DA,zD,FA,OA,MA,LA,BA,zA,VA,WA,UA,GA,HA,jA,XA,YA,QA,ZA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,lF,mF,dF,fF,gF,xF,yF,bF,CF,wF,SF,IF,vF,BD,kF,PA,NF,TF,_F,VD,$F,EF,RF,DF,AF,FF,PF,OF,MF,LF,zF,VF,WF,UF,GF,HF,qF,XF,YF,QF,ZF,JF,n3,GD,s3,a3,i3,u3,NA,p3,m3,d3,f3,h3,WD,g3,x3,y3,b3,C3,TA,e3,w3,S3,I3,KD,v3,k3,N3,T3,_3,$3,E3,R3,D3,A3,F3,P3,O3,M3,L3,B3,wA,o3,z3,V3,W3,U3,G3,H3,K3,q3,X3,Y3,Z3,J3,eP,tP,rP,oP,nP,r3,jD,sP,aP,iP,uP,cP,lP,XD,mP,dP,fP,c3];for(let r of gre)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 bu;(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"})(bu||(bu={}));var hP;function xre(r){hP=r.wasm.cwrap(So,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function yre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t;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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=e.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:e.dataIdMap.get(i.dataId).id,g=bu[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=e.makeOutput([...C,x,b],n.dtype),k=e.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return hP(m,_,n.shape.length,d,E,s.shape.length,p,u,g,f,h,l||0,k),S}var gP={kernelName:So,backendName:"wasm",setupFunc:xre,kernelFunc:yre};function he(r,t){let e;function o(s){e=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,t||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||e(p,we[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var xP=he(Xs);var yP=he(Vo);var bP=he(Wo);function Ue(r,t,e){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=e!=null?e: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 bre=!0,CP=Ue(io,bre);var wP;function Cre(r){wP=r.wasm.cwrap(Uo,null,["array","number","number","number"])}function wre(r){let{inputs:t,backend:e}=r,o=e.makeOutput(t[0].shape,t[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=t.map(i=>e.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=e.dataIdMap.get(o.dataId).id;return wP(s,n.length,we[o.dtype],a),o}var SP={kernelName:Uo,backendName:"wasm",setupFunc:Cre,kernelFunc:wre};function vp(r){let{inputs:{x:t},backend:e}=r;if(t.dtype==="string")return ar(e.readSync(t.dataId),t.shape,t.dtype);let o=e.makeOutput(t.shape,t.dtype),n=e.typedArrayFromHeap(t);return e.typedArrayFromHeap(o).set(n),o}var IP={kernelName:Co,backendName:"wasm",kernelFunc:vp};var vP;function Sre(r){vP=r.wasm.cwrap(po,null,["number","array","number","number","number","array","number"])}function ho(r){let{inputs:t,backend:e,attrs:o}=r,[n,s]=vre(t.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[e,o]}var kP={kernelName:po,backendName:"wasm",kernelFunc:ho,setupFunc:Sre};function Tr(r,t,e){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(t,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 HP={kernelName:da,backendName:"wasm",kernelFunc:zt};var KP;function Mre(r){KP=r.wasm.cwrap(Zo,null,["number","array","number","number","array","number","number","number","number"])}function Lre(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{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:e,attrs:{shape:S}}),E=zt({inputs:{x:s},backend:e,attrs:{shape:k}}),R=e.dataIdMap.get(_.dataId).id,D=e.dataIdMap.get(E.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=e.makeOutput([M,P,O],_.dtype),B=e.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return KP(R,z,_.shape.length,D,U,E.shape.length,a,i,B),e.disposeData(_.dataId),e.disposeData(E.dataId),L.shape=C,L}var qP={kernelName:Zo,backendName:"wasm",setupFunc:Mre,kernelFunc:Lre};function Po(r){let{inputs:{x:t},attrs:{begin:e,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(t,e,o),i=pt.isSliceContinous(t.shape,s,a),p=n.readSync(t.dataId),u=n.makeOutput(a,t.dtype),c=y.computeStrides(t.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=pt.computeFlatOffset(s,c);return t.dtype==="string"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(t.dtype==="string"){let f=ip(p,s,a,t.shape,t.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=t.shape.length;if(d===2)Bre(p,c[0],m,s,a);else if(d===3)zre(p,c[0],c[1],m,s,a);else if(d===4)Vre(p,c[0],c[1],c[2],m,s,a);else{let f=ip(p,s,a,t.shape,t.dtype);m.set(f)}return u}function Bre(r,t,e,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:e,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:e,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:e,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:e,attrs:{begin:l,size:m}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(h.dataId),g}var XP={kernelName:Js,backendName:"wasm",kernelFunc:Wre};var YP;function Ure(r){YP=r.wasm.cwrap(Jo,null,["number","number","boolean","number","number","number"])}function Gre(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=t.makeOutput(p,s.dtype);function c(l){return t.dataIdMap.get(l.dataId).id}return YP(c(n),a,i,c(s),we[s.dtype],c(u)),u}var QP={kernelName:Jo,backendName:"wasm",setupFunc:Ure,kernelFunc:Gre};var Hre=!0,ZP=Ue(qa,Hre);function Kre(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t,s=e.typedArrayFromHeap(o),a=e.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return e.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var JP={kernelName:ea,backendName:"wasm",kernelFunc:Kre};function Or(r){let{inputs:{x:t},attrs:{dtype:e},backend:o}=r,n=o.makeOutput(t.shape,e),s=o.typedArrayFromHeap(t);return o.typedArrayFromHeap(n).set(s),n}var eO={kernelName:yo,backendName:"wasm",kernelFunc:Or};var tO=he(en);var rO;function qre(r){rO=r.wasm.cwrap(bo,null,["number","number","number","number"])}function jre(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i=e.dataIdMap.get(n.dataId).id,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(p.dataId).id;return rO(i,s,a,u),p}var oO={kernelName:bo,backendName:"wasm",setupFunc:qre,kernelFunc:jre};function Fv(r){let{inputs:t,backend:e}=r,o=y.parseAxisParam(r.attrs.axis,t[0].shape)[0],n=t.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(t.map(d=>d.shape),o),a=t.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return vp({inputs:{x:a[0]},backend:e});let i=e.makeOutput(s,t[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:e,attrs:{shape:k}})}),f=d.map(C=>({vals:e.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=np(f,s,t[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=e.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>e.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=>e.typedArrayFromHeap(d)),m=e.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:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumprod",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;bO(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:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var CO={kernelName:un,backendName:"wasm",setupFunc:ioe,kernelFunc:uoe};var wO;function poe(r){wO=r.wasm.cwrap(pn,null,["number","number","number","number","number","number"])}function coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumsum",[l],p);let m=e.makeOutput(c.shape,c.dtype),d=c.shape[l],f=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;wO(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:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var SO={kernelName:pn,backendName:"wasm",setupFunc:poe,kernelFunc:coe};var IO;function loe(r){IO=r.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function moe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,weights:s}=e,{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=t.makeOutput(u,s.dtype);function l(m){return t.dataIdMap.get(m.dataId).id}return IO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var vO={kernelName:ra,backendName:"wasm",setupFunc:loe,kernelFunc:moe};var kO;function doe(r){kO=r.wasm.cwrap(ln,null,["number","number","number","array","number","array","array","number","number"])}function foe(r){let{backend:t,inputs:e,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=t.makeOutput(f,"float32"),x=t.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=t.dataIdMap.get(h.dataId).id;return kO(x,s,a==="NHWC"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var NO={kernelName:ln,backendName:"wasm",setupFunc:doe,kernelFunc:foe};var TO;function hoe(r){TO=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 goe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=e,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,E=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 TO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,E,R,D,M),O}var _O={kernelName:mn,backendName:"wasm",setupFunc:hoe,kernelFunc:goe};var $O;function xoe(r){$O=r.wasm.cwrap("Diag",null,["number","number","number","number"])}function yoe(r){let{inputs:t,backend:e}=r,{x:o}=t,n=y.sizeFromShape(o.shape),s=e.makeOutput([...o.shape,...o.shape],o.dtype);return $O(e.dataIdMap.get(o.dataId).id,we[o.dtype],n,e.dataIdMap.get(s.dataId).id),s}var EO={kernelName:oa,backendName:"wasm",setupFunc:xoe,kernelFunc:yoe};var RO;function boe(r){RO=r.wasm.cwrap(dn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Coe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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=e.makeOutput(u.outShape,n.dtype);return RO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.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 DO={kernelName:dn,backendName:"wasm",setupFunc:boe,kernelFunc:Coe};var AO;function woe(r){AO=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 Soe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(s.shape,s.dtype);return AO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 FO={kernelName:Mi,backendName:"wasm",setupFunc:woe,kernelFunc:Soe};var PO;function Ioe(r){PO=r.wasm.cwrap(Oi,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:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return PO(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.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 OO={kernelName:Oi,backendName:"wasm",setupFunc:Ioe,kernelFunc:voe};var MO=he(hn);var LO;function koe(r){LO=r.wasm.cwrap(Xa,null,["number","number","number"])}function Noe(r){let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=e.makeOutput(n.shape,"float32"),a=i=>e.dataIdMap.get(i.dataId).id;return LO(a(n),a(o),a(s)),s}var BO={kernelName:Xa,backendName:"wasm",setupFunc:koe,kernelFunc:Noe};var Toe=!1,zO=Ue(xn,Toe,"bool");var VO=he(gn);var WO=he(yn,"float32");function Mg(r){let{inputs:t,attrs:e,backend:o}=r,{input:n}=t,{dim:s}=e,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 UO={kernelName:na,backendName:"wasm",kernelFunc:Mg};var GO=he(bn,"float32");function Ov(r){let{attrs:{shape:t,value:e},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(e);let s=o.makeOutput(t,n);return o.typedArrayFromHeap(s).fill(e),s}var HO={kernelName:sa,backendName:"wasm",kernelFunc:Ov};var KO;function _oe(r){KO=r.wasm.cwrap(Cn,null,["number","number","number","number","number","number"])}function $oe(r){let{inputs:t,backend:e}=r,{image:o}=t,n=e.makeOutput(o.shape,o.dtype),s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return KO(s,i,p,u,c,a),n}var qO={kernelName:Cn,backendName:"wasm",kernelFunc:$oe,setupFunc:_oe};var jO=he(wn);var Eoe=!1,XO=Ue(Sn,Eoe);var YO;function Roe(r){YO=r.wasm.cwrap(In,null,["number","number","number","number","number","number","number"])}function Doe(r){let{backend:t,inputs:e,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=e,c=t.dataIdMap.get(s.dataId).id,l=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(i.dataId).id,d=p!=null?t.dataIdMap.get(p.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,h=t.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=t.dataIdMap.get(h.dataId).id;return YO(c,l,m,d,f,n,g),h}var QO={kernelName:In,backendName:"wasm",setupFunc:Roe,kernelFunc:Doe};var ZO;function Aoe(r){ZO=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 Foe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=bu[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,E=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 ZO(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var JO={kernelName:Io,backendName:"wasm",setupFunc:Aoe,kernelFunc:Foe};var eM;function Poe(r){eM=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 Ooe(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=e,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=bu[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,E=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 eM(x,j,q,Y,b,k,_,S,E,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var tM={kernelName:vo,backendName:"wasm",setupFunc:Poe,kernelFunc:Ooe};var rM;function Moe(r){rM=r.wasm.cwrap(vn,null,["number","number","number","number","number","number","array","number"])}function Loe(r){let{backend:t,inputs:e}=r,{params:o,indices:n}=e,[s,a,i,p]=sf.prepareAndValidate(o,n),u=t.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=t.dataIdMap.get(o.dataId).id,h=t.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(u.dataId).id;return rM(d,we[o.dtype],h,a,l,i,g,x),u}var oM={kernelName:vn,backendName:"wasm",setupFunc:Moe,kernelFunc:Loe};var nM;function Boe(r){nM=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function zoe(r){let{backend:t,inputs:e,attrs:o}=r,{x:n,indices:s}=e,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=t.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:t}),d=y.sizeFromShape(s.shape),f=zt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:t}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=t.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=t.dataIdMap.get(m.dataId).id,k=t.dataIdMap.get(f.dataId).id,_=t.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return nM(C,we[n.dtype],E,x,k,l.batchSize,R,_),t.disposeData(m.dataId),t.disposeData(f.dataId),g.shape=l.outputShape,g}var sM={kernelName:aa,backendName:"wasm",setupFunc:Boe,kernelFunc:zoe};var Voe=!1,aM=Ue(kn,Voe,"bool");var Woe=!1,iM=Ue(Nn,Woe,"bool");var uM=he(Tn,"bool");var pM=he(_n,"bool");var cM=he($n,"bool");var lM;function Uoe(r){lM=r.wasm.cwrap(En,null,["number","number","number","number"])}function Goe(r){let{inputs:{x:t},attrs:{alpha:e},backend:o}=r,n=o.dataIdMap.get(t.dataId).id,s=o.makeOutput(t.shape,"float32");if(y.sizeFromShape(t.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;lM(n,we[t.dtype],e,a)}return s}var mM={kernelName:En,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe};var Hoe=!1,dM=Ue(Rn,Hoe,"bool");var Koe=!1,fM=Ue(Dn,Koe,"bool");var hM;function qoe(r){hM=r.wasm.cwrap(An,null,["number","number","number","number"])}function joe(r){let{attrs:t,backend:e}=r,{start:o,stop:n,num:s}=t,a=Math.floor(s),i=e.makeOutput([a],"float32");return hM(e.dataIdMap.get(i.dataId).id,o,n,a),i}var gM={kernelName:An,backendName:"wasm",setupFunc:qoe,kernelFunc:joe};var xM=he(Fn);var yM=he(Pn);var Xoe=!1,bM=Ue(On,Xoe,"bool");var CM=he(Mn);var Yoe=!1,wM=Ue(Ln,Yoe,"bool");var Qoe=!1,SM=Ue(E0,Qoe,"bool");var IM;function Zoe(r){IM=r.wasm.cwrap(Bn,null,["number","number","number","number","number","number","number"])}function Joe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(n.shape,n.dtype);return IM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var vM={kernelName:Bn,backendName:"wasm",setupFunc:Zoe,kernelFunc:Joe};var kM;function ene(r){kM=r.wasm.cwrap(Ya,null,["number","number","number","number","number","number","number","number","number"])}function tne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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=e.makeOutput(n.shape,n.dtype);return kM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(a.dataId).id,e.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var NM={kernelName:Ya,backendName:"wasm",setupFunc:ene,kernelFunc:tne};var TM;function rne(r){TM=r.wasm.cwrap(zn,null,["number","number","number","number"])}function one(r){let{backend:t,inputs:e,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=e,p=t.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t);if(d){let C=t.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=t.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;TM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var _M={kernelName:zn,backendName:"wasm",setupFunc:rne,kernelFunc:one};var nne=!1,$M=Ue(Vn,nne);var EM;function sne(r){EM=r.wasm.cwrap(Wn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ane(r){let{inputs:t,attrs:e,backend:o}=r,n=t.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}=e,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 E=o.makeOutput(c.outShape,"float32"),R=o.dataIdMap.get(E.dataId).id;return EM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),E}var RM={kernelName:Wn,backendName:"wasm",setupFunc:sne,kernelFunc:ane};var DM;function ine(r){DM=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 une(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=e.makeOutput(c.outShape,n.dtype);return DM(e.dataIdMap.get(n.dataId).id,e.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 AM={kernelName:ia,backendName:"wasm",setupFunc:ine,kernelFunc:une};var FM;function pne(r){FM=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 cne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return FM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 PM={kernelName:Ui,backendName:"wasm",setupFunc:pne,kernelFunc:cne};var OM;function lne(r){OM=r.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function mne(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=e.makeOutput(s.shape,s.dtype);return OM(e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(n.dataId).id,e.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 MM={kernelName:Wi,backendName:"wasm",setupFunc:lne,kernelFunc:mne};var LM;function dne(r){LM=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 fne(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.makeOutput(c.outShape,n.dtype),m=e.makeOutput(c.outShape,"int32");return LM(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(l.dataId).id,e.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 BM={kernelName:ua,backendName:"wasm",setupFunc:dne,kernelFunc:fne};var zM;function hne(r){zM=r.wasm.cwrap(Un,null,["number, number, number"])}function gne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let S=t.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=Or({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(b.dataId).id);let C=t.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let S=t.dataIdMap.get(C.dataId).id;zM(p,x,S)}if(d&&t.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!=="float32"&&t.disposeData(b.dataId),C}var VM={kernelName:Un,backendName:"wasm",setupFunc:hne,kernelFunc:gne};var WM;function xne(r){WM=r.wasm.cwrap(Gn,null,["number","number","number","number"])}function yne(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t);if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;WM(p,we[a.dtype],x,C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var UM={kernelName:Gn,backendName:"wasm",setupFunc:xne,kernelFunc:yne};var bne=!1,GM=Ue(Hn,bne);var Mv;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Mv||(Mv={}));var HM;function Cne(r){HM=r.wasm.cwrap(Kn,null,["number","array","number","number","array","array","number","number"])}function wne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+t.shape[h]+f[1]),a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),p=e.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(t.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 HM(a,u,t.shape.length,we[t.dtype],m,d,Mv[n],p),i}var KM={kernelName:Kn,backendName:"wasm",kernelFunc:wne,setupFunc:Cne};var qM;function Sne(r){qM=r.wasm.cwrap(Is,null,["number","number","number","number"])}function Lv(r){let{backend:t,inputs:{logits:e},attrs:{dim:o}}=r,n=t.dataIdMap.get(e.dataId).id,s=t.makeOutput(e.shape,e.dtype),a=t.dataIdMap.get(s.dataId).id,i=e.shape[o],p=y.sizeFromShape(e.shape)/i;return y.sizeFromShape(s.shape)===0||qM(n,a,i,p),s}var jM={kernelName:Is,backendName:"wasm",setupFunc:Sne,kernelFunc:Lv};var XM;function Ine(r){XM=r.wasm.cwrap(jn,null,["number","number","number","number","number","number"])}function vne(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{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:Lv({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=e.makeOutput([u,s],"int32");return XM(e.dataIdMap.get(p.dataId).id,u,c,s,a,e.dataIdMap.get(l.dataId).id),i||e.disposeData(p.dataId),l}var YM={kernelName:jn,backendName:"wasm",setupFunc:Ine,kernelFunc:vne};var QM=Ue(qn,!0);var kne=!0,ZM=Ue(Xn,kne);var JM=he(pa);function Hc(r,t){let e=new Int32Array(r.wasm.HEAPU8.buffer,t,4),o=e[0],n=e[1],s=e[2],a=e[3];return r.wasm._free(t),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var eL;function Nne(r){eL=r.wasm.cwrap(Qn,"number",["number","number","number","number","number"])}function Tne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=e,u=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(p.dataId).id,l=eL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Hc(t,l);return t.wasm._free(f),t.wasm._free(h),t.makeOutput([d],"int32",m)}var tL={kernelName:Qn,backendName:"wasm",setupFunc:Nne,kernelFunc:Tne};var rL;function _ne(r){rL=r.wasm.cwrap(Qa,"number",["number","number","number","number","number","bool"])}function $ne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=rL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Hc(t,m);t.wasm._free(h);let x=t.makeOutput([f],"int32",d),b=t.makeOutput([],"int32",g);return[x,b]}var oL={kernelName:Qa,backendName:"wasm",setupFunc:_ne,kernelFunc:$ne};var nL;function Ene(r){nL=r.wasm.cwrap(Zn,"number",["number","number","number","number","number","number"])}function Rne(r){let{backend:t,inputs:e,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=e,c=t.dataIdMap.get(p.dataId).id,l=t.dataIdMap.get(u.dataId).id,m=nL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Hc(t,m);t.wasm._free(g);let x=t.makeOutput([f],"int32",d),b=t.makeOutput([f],"float32",h);return[x,b]}var sL={kernelName:Zn,backendName:"wasm",setupFunc:Ene,kernelFunc:Rne};var Dne=!1,aL=Ue(Yn,Dne,"bool");var iL;function Ane(r){iL=r.wasm.cwrap(Jn,null,["number","number","number","number","number"])}function Fne(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=e.makeOutput([...n.shape,a],s),c=e.dataIdMap.get(u.dataId).id,m=e.dataIdMap.get(n.dataId).id;return iL(m,a,i,p,c),u}var uL={kernelName:Jn,backendName:"wasm",setupFunc:Ane,kernelFunc:Fne};function Pne(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(1),o}var pL={kernelName:ca,backendName:"wasm",kernelFunc:Pne};function One(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Mg({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Mg({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=Fv({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var cL={kernelName:la,backendName:"wasm",kernelFunc:One};var lL;function Mne(r){lL=r.wasm.cwrap(es,null,["number","array","number","number","array","array","number","number"])}function Lne(r){let{inputs:{x:t},backend:e,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+t.shape[g]+h[1]);if(y.sizeFromShape(t.shape)===0)return Ov({backend:e,attrs:{shape:s,value:n,dtype:t.dtype}});let a=e.dataIdMap.get(t.dataId).id,i=e.makeOutput(s,t.dtype),u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.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 lL(a,c,t.shape.length,we[t.dtype],d,f,n,u),i}var Lg={kernelName:es,backendName:"wasm",kernelFunc:Lne,setupFunc:Mne};var Bne=!1,mL=Ue(ts,Bne);var dL;function zne(r){dL=r.wasm.cwrap(rs,null,["number","number","number"])}function Vne(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=e.dataIdMap.get(o.dataId).id,a=e.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=Or({backend:e,inputs:{x:o},attrs:{dtype:"float32"}}),i=e.dataIdMap.get(u.dataId).id);let c=e.makeOutput(o.shape,"float32"),l=e.dataIdMap.get(c.dataId).id;return dL(i,a,l),p.dtype!=="float32"&&e.disposeData(u.dataId),c}var fL={kernelName:rs,backendName:"wasm",setupFunc:zne,kernelFunc:Vne};var hL;function Wne(r){hL=r.wasm.cwrap(os,null,["number","number","number","number"])}function Une(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;hL(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var gL={kernelName:os,backendName:"wasm",setupFunc:Wne,kernelFunc:Une};var Gne=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=ap(o,n,s,a),p=t.makeOutput([i.length],a);return t.typedArrayFromHeap(p).set(i),p},xL={kernelName:ma,backendName:"wasm",kernelFunc:Gne};var Hne=!0,yL=Ue(fn,Hne);var bL=he(ns);var CL=he(ss);var wL=he(us);var SL;function Kne(r){SL=r.wasm.cwrap(is,null,["number","number","number","number","number","number","number","number","number","number"])}function qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=Or({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),h=t.dataIdMap.get(g.dataId));let x=h.id,b=t.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return b;let C=t.dataIdMap.get(b.dataId).id;return SL(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&t.disposeData(g.dataId),b}var IL={kernelName:is,backendName:"wasm",setupFunc:Kne,kernelFunc:qne};var vL;function jne(r){vL=r.wasm.cwrap(Ja,null,["number","number","number","array","array","boolean"])}function Xne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,"float32"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Or({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(u.dataId)),vL(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var kL={kernelName:Ja,backendName:"wasm",setupFunc:jne,kernelFunc:Xne};var NL;function Yne(r){NL=r.wasm.cwrap(as,null,["number","number","number","number","number","number","number","number","number","number"])}function Qne(r){let{backend:t,inputs:e,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=t.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return h;let g=t.dataIdMap.get(n.dataId),x;g.dtype!=="float32"&&(x=Or({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(x.dataId));let b=g.id,C=t.dataIdMap.get(h.dataId).id;return NL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&t.disposeData(x.dataId),h}var TL={kernelName:as,backendName:"wasm",setupFunc:Yne,kernelFunc:Qne};var _L;function Zne(r){_L=r.wasm.cwrap(Za,null,["number","number","number","array","array","boolean"])}function Jne(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{alignCorners:a}=o,i=e.makeOutput(n.shape,"float32"),p=e.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Or({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(u.dataId)),_L(e.dataIdMap.get(n.dataId).id,e.dataIdMap.get(s.dataId).id,e.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&e.disposeData(u.dataId),i}var $L={kernelName:Za,backendName:"wasm",setupFunc:Zne,kernelFunc:Jne};var EL;function ese(r){EL=r.wasm.cwrap(ps,null,["number","array","number","array","number","number"])}function tse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return vp({inputs:{x:n},backend:e});let i=e.makeOutput(n.shape,n.dtype),p=e.dataIdMap.get(n.dataId).id,u=e.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);EL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:e});return e.disposeData(i.dataId),m}var RL={kernelName:ps,backendName:"wasm",kernelFunc:tse,setupFunc:ese};var DL;function rse(r){DL=r.wasm.cwrap(Ds,null,["number","number","number","number","number","number","number","number","array","number","number"])}function ose(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{radians:s,fillValue:a,center:i}=o,p=e.makeOutput(n.shape,n.dtype),u=e.dataIdMap.get(n.dataId).id,c=e.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 DL(u,l,m,d,f,s,h,g,S,C.length,c),p}var AL={kernelName:Ds,backendName:"wasm",kernelFunc:ose,setupFunc:rse};var FL=he(cs);var PL=he(ls);var OL;function nse(r){OL=r.wasm.cwrap(ms,null,["number","number","number","number","number","number","array","number","number"])}function sse(r){let{backend:t,inputs:e,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,i=t.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=lu.calculateShapes(s,n,a),f=t.dataIdMap.get(n.dataId).id,g=t.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=t.dataIdMap.get(i.dataId).id;return OL(f,g,we[s.dtype],p,u,c,x,m,b),i}var ML={kernelName:ms,backendName:"wasm",setupFunc:nse,kernelFunc:sse};var LL;function ase(r){LL=r.wasm.cwrap(fs,null,["number","number","number","number","number","number","bool","number"])}function ise(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{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=e.makeOutput(s.shape,"int32");function p(u){return e.dataIdMap.get(u.dataId).id}return LL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a==="left",p(i)),i}var BL={kernelName:fs,backendName:"wasm",setupFunc:ase,kernelFunc:ise};var zL;function use(r){zL=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function pse(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=e.makeOutput(n.shape,n.dtype),c=e.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 zL(a,i,p,d,c),u}var VL={kernelName:fa,backendName:"wasm",kernelFunc:pse,setupFunc:use};var WL=he(hs);var UL;function cse(r){UL=r.wasm.cwrap(bs,null,["number","number"])}function lse(r){let{backend:t,inputs:{x:e}}=r,o=t.dataIdMap.get(e.dataId).id,n=t.makeOutput(e.shape,e.dtype),s=t.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||UL(o,s),n}var GL={kernelName:"Sigmoid",backendName:"wasm",setupFunc:cse,kernelFunc:lse};var HL=he(ys);var KL=he(gs);var qL=he(xs);var jL=he(Cs);function mse(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=e.dataIdMap.get(a.dataId).id,h=e.makeOutput(l,n.dtype),g=e.dataIdMap.get(h.dataId).id,x=e.makeOutput([4],"int32"),b=e.dataIdMap.get(x.dataId).id;JL(m,we[n.dtype],n.shape[0],d,f,g,b,t,0);let C=e.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(e.disposeData(x.dataId),S)throw e.disposeData(h.dataId),new Error(S);return h}function xse(r){return Vg(r,!0)}var eB={kernelName:ya,backendName:"wasm",setupFunc:zg,kernelFunc:xse};function yse(r){return Vg(r,!1)}var tB={kernelName:ba,backendName:"wasm",setupFunc:zg,kernelFunc:yse};var rB;function bse(r){rB=r.wasm.cwrap(ks,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Cse(r){let{backend:t,inputs:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,p=t.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=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=t.dataIdMap.get(p.dataId).id;return rB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var oB={kernelName:ks,backendName:"wasm",setupFunc:bse,kernelFunc:Cse};function wse(r){let{inputs:t,attrs:e,backend:o}=r,{x:n}=t,{numOrSizeSplits:s,axis:a}=e,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=Oo({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var nB={kernelName:xa,backendName:"wasm",kernelFunc:wse};var sB=he(Ss);var aB=he(Xi);var Sse=!0,iB=Ue(Ns,Sse);var uB;function Ise(r){uB=r.wasm.cwrap(So,null,["number","number","number","number"])}function vse(r){let{backend:t,inputs:e,attrs:o}=r,{alpha:n}=o,{x:s}=e,a=t.dataIdMap.get(s.dataId).id,i=t.makeOutput(s.shape,s.dtype),p=t.dataIdMap.get(i.dataId).id;return uB(a,n,we[s.dtype],p),i}var pB={kernelName:So,backendName:"wasm",setupFunc:Ise,kernelFunc:vse};var cB;function kse(r){cB=r.wasm.cwrap(Ts,null,["number","array","number","array","array","array","array","array","number","number"])}function Nse(r){let{backend:t,inputs:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=Vt({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 _=ct.computeOutShape(b,C,S),E=Oo({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=Vt({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else{let _=t.makeOutput(d,"float32"),E=t.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=t.dataIdMap.get(_.dataId).id;cB(E,R,n.shape.length,D,P,O,M,L,d.length,B),k=Vt({inputs:{x:_},backend:t,attrs:{shape:f}}),t.disposeData(_.dataId)}return k}var lB={kernelName:Ts,backendName:"wasm",setupFunc:kse,kernelFunc:Nse};function Tse(r){let{backend:t,inputs:e,attrs:o}=r,{data:n,dataSplits:s}=e,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=t.readSync(n.dataId),d=t.readSync(s.dataId),[f,h]=gp(m,d,a,i,p,u,c,l),g=t.makeOutput([f.length],"string"),x=t.dataIdMap.get(g.dataId);x.stringBytes=f;let b=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(b).set(h),[g,b]}var mB={kernelName:Ca,backendName:"wasm",kernelFunc:Tse};function _se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n,delimiter:s}=e,{skipEmpty:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c,l]=xp(i,p[0],a),m=c.length,d=t.makeOutput([m,2],"int32");t.typedArrayFromHeap(d).set(u);let h=t.makeOutput([m],"string"),g=t.dataIdMap.get(h.dataId);g.stringBytes=c;let x=t.makeOutput([2],"int32");return t.typedArrayFromHeap(x).set(l),[d,h,x]}var dB={kernelName:Yi,backendName:"wasm",kernelFunc:_se};function $se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n}=e,{numBuckets:s}=o,a=t.readSync(n.dataId),i=yp(a,s),p=t.makeOutput(n.shape,"int32");return t.typedArrayFromHeap(p).set(i),p}var fB={kernelName:Qi,backendName:"wasm",kernelFunc:$se};var Ese=!0,hB=Ue(_s,Ese);var gB;function Rse(r){gB=r.wasm.cwrap(Is,null,["number","number","number","number"])}function Dse(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=_r(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;gB(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var xB={kernelName:Is,backendName:"wasm",setupFunc:Rse,kernelFunc:Dse};var yB=he($s);var bB=he(Es);var CB;function Ase(r){CB=r.wasm.cwrap(fs,null,["number","number","number","number","number","number","array","number","number","number"])}function Fse(r){let{backend:t,inputs:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,i=t.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=hu.calculateShapes(a,s,n.shape),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=t.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=t.dataIdMap.get(i.dataId).id;return CB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var wB={kernelName:fs,backendName:"wasm",setupFunc:Ase,kernelFunc:Fse};var SB;function Pse(r){SB=r.wasm.cwrap(po,null,["number","array","number","array","number","number"])}function Ose(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,s=e.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}=e,a=t.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=t.makeOutput(p,o.dtype),c=t.dataIdMap.get(u.dataId).id,l=t.makeOutput(p,"int32"),m=t.dataIdMap.get(l.dataId).id;return vB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},kB={kernelName:Rs,backendName:"wasm",setupFunc:Mse,kernelFunc:Lse};var NB;function Bse(r){NB=r.wasm.cwrap(Ds,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function zse(r){let{backend:t,inputs:e,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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=t.makeOutput(g,n.dtype),S=t.dataIdMap.get(C.dataId).id,_=t.dataIdMap.get(n.dataId).id,R=t.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 NB(_,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 TB={kernelName:Ds,backendName:"wasm",setupFunc:Bse,kernelFunc:zse};function Vse(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t,{outputValues:a,outputShape:i,indices:p}=bp(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 _B={kernelName:Zi,backendName:"wasm",kernelFunc:Vse};function Wse(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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 $B={kernelName:wa,backendName:"wasm",kernelFunc:Wse};function Use(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(0),o}var EB={kernelName:Sa,backendName:"wasm",kernelFunc:Use};var Gse=[hP,gP,xP,yP,bP,wP,NP,_P,$P,EP,RP,DP,AP,FP,PP,MP,UP,BP,VP,KP,jP,YP,QP,ZP,JP,eO,rO,oO,sO,iO,pO,lO,dO,fO,hO,xO,bO,wO,IO,kO,TO,$O,RO,AO,PO,OO,LO,BO,zO,VO,WO,UO,GO,KO,qO,jO,YO,ZO,eM,rM,nM,sM,aM,SP,iM,uM,pM,lM,mM,dM,hM,xM,gM,yM,bM,CM,wM,IM,kM,TM,_M,EM,DM,FM,OM,LM,zM,WM,UM,HM,XM,YM,QM,ZM,eL,rL,nL,sL,iL,uL,pL,Bg,lL,dL,hL,gL,xL,yL,bL,CL,GP,SL,vL,NL,_L,EL,DL,AL,FL,OL,LL,zL,VL,UL,GL,HL,KL,qP,qM,qL,jL,YL,ZL,eB,tB,oB,nB,sB,aB,iB,pB,lB,mB,dB,fB,hB,xB,yB,bB,wB,IB,kB,TB,vP,_B,$B,EB];for(let r of Gse)ri(r);var Lv=A();Lv.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}});Lv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Lv.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 Kv=Kp(FB()),zB=Kp(OB()),qv=Kp(MB());var LB=Kv.default||Kv,Hse=qv.default||qv,pm=class extends ao{constructor(t){super(),this.wasm=t,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(WB),Hv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new zo(this,pr())}write(t,e,o){let n={id:this.dataIdNextNumber++};return this.move(n,t,e,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}move(t,e,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let c=e;this.dataIdMap.set(t,{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(t,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),e!=null&&this.wasm.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,p),u)}async read(t){return this.readSync(t)}readSync(t,e,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(t);if(s==="string")return(e==null||e===0)&&(o==null||o>=i.length)?i:i.slice(e,o);e=e||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+e*p,n+o*p);return qse(u.buffer,s)}disposeData(t,e=!1){if(this.dataIdMap.has(t)){let o=this.dataIdMap.get(t);if(o.refCount--,!e&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(t)}return!0}refCount(t){return this.dataIdMap.has(t)?this.dataIdMap.get(t).refCount:0}incRef(t){let e=this.dataIdMap.get(t);e!=null&&e.refCount++}floatPrecision(){return 32}getMemoryOffset(t){return this.dataIdMap.get(t).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(t,e,o,n){let s;if(o==null)s=this.write(n!=null?n:null,t,e);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:t,dtype:e,refCount:1});let i=y.sizeFromShape(t);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:t,dtype:e}}typedArrayFromHeap({shape:t,dtype:e,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(t);switch(e){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 ${e}`)}}};function Kse(r){return(t,e)=>(y.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||t.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,t).then(s=>{e(s.instance,s.module)})})}),{})}function BB(r,t,e){if(Gg!=null)return Gg;let o="tfjs-backend-wasm.wasm";return r&&t?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),im!=null&&im[o]!=null?im[o]:e+o}async function VB(){let[r,t]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((e,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=zB.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?BB(r,t,am!=null?am:p):p+i},jv&&(n.instantiateWasm=Kse(BB(r,t,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;t&&r&&Gg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+LB.toString()],{type:"text/javascript"}),a=LB(n)):a=Hse(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,[])},e({wasm:i})}).catch(o)})}function qse(r,t){switch(t){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${t}`)}}var jse=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Gg=null,am=null,im={},um=!1,jv=!1;function Xse(r,t=!1){if(Pw("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,jv=t}function Yse(r,t=!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 e=jse.filter(o=>im[o]==null);if(e.length>0)throw new Error(`There were no entries found for the following binaries: ${e.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.`)}jv=t}var WB=-1,Hv=-1;function Qse(r){WB=r}function Zse(){if(Hv===-1)throw new Error("WASM backend not initialized.");return Hv}var Jse="4.11.0";var eae=2;su("wasm",async()=>{let{wasm:r}=await VB();return new pm(r)},eae);var xo=A();xo.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);xo.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);xo.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);xo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);xo.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);xo.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);xo.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);xo.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);xo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);xo.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);xo.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);xo.registerFlag("WEBGPU_PRINT_SHADER",()=>"");xo.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Hg=class{constructor(t){t&&(this.vendor=t.vendor,this.architecture=t.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(t){this.device=t,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(t,e,o=!1,n=!0){let s,a=UB(t,e);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:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t)):(s=this.device.createBuffer({size:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=t,s}releaseBuffer(t,e=!0){if(this.freeBuffers.size===0)return;let o=t.size,n=t.usage,s=UB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(t);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,e?(this.freeBuffers.get(s).push(t),this.numFreeBuffers++):(t.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((t,e)=>{t.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 UB(r,t){return`${r}_${t}`}var qg=class{constructor(t){this.device=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(t,e,o,n){let s=HB(o),a=t*e*s,i=GB(t,e,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:[t,e],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(t){if(this.freeTextures.size===0)return;let e=t.width,o=t.height,n=t.format,s=t.usage,a=GB(e,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(t),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(t);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=HB(n),c=e*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((t,e)=>{t.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 GB(r,t,e,o){return`${r}_${t}_${e}_${o}`}function HB(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function KB(r,t){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let e=r.length,o="xyzwuv",n=r.map(a=>`${t}.${o[a]}`),s=new Array(e-1);s[e-2]=n[e-1];for(let a=e-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,t,e)=>e==="int32"?`atomicAdd(${r}, bitcast(${t}));`:` + ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=o.shape[0],c=y.sizeFromShape(s.shape),l=t.makeOutput([u,c],o.dtype),m=t.dataIdMap.get(l.dataId).id,d=t.makeOutput([c],s.dtype),f=t.dataIdMap.get(d.dataId).id,h=t.makeOutput([3],"int32"),g=t.dataIdMap.get(h.dataId).id;ZL(a,i,p,u,m,f,g);let x=t.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(t.readSync(n.dataId)),S=Array.from(t.readSync(d.dataId));b=w.getSparseReshapeInputOutputMultipleErrorMessage(C,S);break}case 4:{let C=Array.from(t.readSync(n.dataId)),S=Array.from(t.readSync(d.dataId));b=w.getSparseReshapeInputOutputMismatchErrorMessage(C,S);break}default:b=""}if(t.disposeData(h.dataId),b)throw t.disposeData(l.dataId),t.disposeData(d.dataId),new Error(b);return[l,d]}var JL={kernelName:ei,backendName:"wasm",setupFunc:hse,kernelFunc:gse};var eB;function Bg(r){eB=r.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function zg(r,t){let{backend:e,inputs:o}=r,{data:n,indices:s,segmentIds:a}=o,i=s.shape[0],p=e.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=e.dataIdMap.get(n.dataId).id,d=e.dataIdMap.get(s.dataId).id,f=e.dataIdMap.get(a.dataId).id,h=e.makeOutput(l,n.dtype),g=e.dataIdMap.get(h.dataId).id,x=e.makeOutput([4],"int32"),b=e.dataIdMap.get(x.dataId).id;eB(m,we[n.dtype],n.shape[0],d,f,g,b,t,0);let C=e.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(e.disposeData(x.dataId),S)throw e.disposeData(h.dataId),new Error(S);return h}function xse(r){return zg(r,!0)}var tB={kernelName:ya,backendName:"wasm",setupFunc:Bg,kernelFunc:xse};function yse(r){return zg(r,!1)}var rB={kernelName:ba,backendName:"wasm",setupFunc:Bg,kernelFunc:yse};var oB;function bse(r){oB=r.wasm.cwrap(vs,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Cse(r){let{backend:t,inputs:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,p=t.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=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=t.dataIdMap.get(p.dataId).id;return oB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var nB={kernelName:vs,backendName:"wasm",setupFunc:bse,kernelFunc:Cse};function wse(r){let{inputs:t,attrs:e,backend:o}=r,{x:n}=t,{numOrSizeSplits:s,axis:a}=e,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 sB={kernelName:xa,backendName:"wasm",kernelFunc:wse};var aB=he(ws);var iB=he(Ki);var Sse=!0,uB=Ue(ks,Sse);var pB;function Ise(r){pB=r.wasm.cwrap(wo,null,["number","number","number","number"])}function vse(r){let{backend:t,inputs:e,attrs:o}=r,{alpha:n}=o,{x:s}=e,a=t.dataIdMap.get(s.dataId).id,i=t.makeOutput(s.shape,s.dtype),p=t.dataIdMap.get(i.dataId).id;return pB(a,n,we[s.dtype],p),i}var cB={kernelName:wo,backendName:"wasm",setupFunc:Ise,kernelFunc:vse};var lB;function kse(r){lB=r.wasm.cwrap(Ns,null,["number","array","number","array","array","array","array","array","number","number"])}function Nse(r){let{backend:t,inputs:e,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=zt({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),E=Po({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=zt({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else{let _=t.makeOutput(d,"float32"),E=t.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=t.dataIdMap.get(_.dataId).id;lB(E,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:t,attrs:{shape:f}}),t.disposeData(_.dataId)}return k}var mB={kernelName:Ns,backendName:"wasm",setupFunc:kse,kernelFunc:Nse};function Tse(r){let{backend:t,inputs:e,attrs:o}=r,{data:n,dataSplits:s}=e,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=t.readSync(n.dataId),d=t.readSync(s.dataId),[f,h]=up(m,d,a,i,p,u,c,l),g=t.makeOutput([f.length],"string"),x=t.dataIdMap.get(g.dataId);x.stringBytes=f;let b=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(b).set(h),[g,b]}var dB={kernelName:Ca,backendName:"wasm",kernelFunc:Tse};function _se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n,delimiter:s}=e,{skipEmpty:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c,l]=pp(i,p[0],a),m=c.length,d=t.makeOutput([m,2],"int32");t.typedArrayFromHeap(d).set(u);let h=t.makeOutput([m],"string"),g=t.dataIdMap.get(h.dataId);g.stringBytes=c;let x=t.makeOutput([2],"int32");return t.typedArrayFromHeap(x).set(l),[d,h,x]}var fB={kernelName:qi,backendName:"wasm",kernelFunc:_se};function $se(r){let{backend:t,inputs:e,attrs:o}=r,{input:n}=e,{numBuckets:s}=o,a=t.readSync(n.dataId),i=cp(a,s),p=t.makeOutput(n.shape,"int32");return t.typedArrayFromHeap(p).set(i),p}var hB={kernelName:ji,backendName:"wasm",kernelFunc:$se};var Ese=!0,gB=Ue(Ts,Ese);var xB;function Rse(r){xB=r.wasm.cwrap(Ss,null,["number","number","number","number"])}function Dse(r){let{backend:t,inputs:e,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=e,i=t.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,t),f=l;if(d){let C=t.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=t.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=t.dataIdMap.get(b.dataId).id;xB(p,x,we[b.dtype],C)}if(d&&t.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var yB={kernelName:Ss,backendName:"wasm",setupFunc:Rse,kernelFunc:Dse};var bB=he(_s);var CB=he($s);var wB;function Ase(r){wB=r.wasm.cwrap(ds,null,["number","number","number","number","number","number","array","number","number","number"])}function Fse(r){let{backend:t,inputs:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,i=t.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=lu.calculateShapes(a,s,n.shape),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=t.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=t.dataIdMap.get(i.dataId).id;return wB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var SB={kernelName:ds,backendName:"wasm",setupFunc:Ase,kernelFunc:Fse};var IB;function Pse(r){IB=r.wasm.cwrap(uo,null,["number","array","number","array","number","number"])}function Ose(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,s=e.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}=e,a=t.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=t.makeOutput(p,o.dtype),c=t.dataIdMap.get(u.dataId).id,l=t.makeOutput(p,"int32"),m=t.dataIdMap.get(l.dataId).id;return kB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},NB={kernelName:Es,backendName:"wasm",setupFunc:Mse,kernelFunc:Lse};var TB;function Bse(r){TB=r.wasm.cwrap(Rs,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function zse(r){let{backend:t,inputs:e,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 Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=t.makeOutput(g,n.dtype),S=t.dataIdMap.get(C.dataId).id,_=t.dataIdMap.get(n.dataId).id,R=t.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 TB(_,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 _B={kernelName:Rs,backendName:"wasm",setupFunc:Bse,kernelFunc:zse};function Vse(r){let{inputs:t,attrs:e,backend:o}=r,{axis:n}=e,{x:s}=t,{outputValues:a,outputShape:i,indices:p}=lp(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 $B={kernelName:Xi,backendName:"wasm",kernelFunc:Vse};function Wse(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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 EB={kernelName:wa,backendName:"wasm",kernelFunc:Wse};function Use(r){let{inputs:{x:t},backend:e}=r,o=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(o).fill(0),o}var RB={kernelName:Sa,backendName:"wasm",kernelFunc:Use};var Gse=[gP,xP,yP,bP,CP,SP,TP,$P,EP,RP,DP,AP,FP,PP,OP,LP,GP,zP,WP,qP,XP,QP,ZP,JP,eO,tO,oO,nO,aO,uO,cO,mO,fO,hO,gO,yO,CO,SO,vO,NO,_O,EO,DO,FO,OO,MO,BO,zO,VO,WO,UO,GO,HO,qO,jO,XO,QO,JO,tM,oM,sM,aM,iM,IP,uM,pM,cM,mM,dM,fM,gM,yM,xM,bM,CM,wM,SM,vM,NM,_M,$M,RM,AM,PM,MM,BM,VM,UM,GM,KM,YM,QM,ZM,JM,tL,oL,sL,aL,uL,pL,cL,Lg,mL,fL,gL,xL,yL,bL,CL,wL,HP,IL,kL,TL,$L,RL,AL,FL,PL,ML,BL,VL,WL,GL,HL,KL,qL,jP,jM,jL,XL,QL,JL,tB,rB,nB,sB,aB,iB,uB,cB,mB,dB,fB,hB,gB,yB,bB,CB,SB,vB,NB,_B,kP,$B,EB,RB];for(let r of Gse)ti(r);var Bv=A();Bv.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}});Bv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Bv.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 qv=Lp(PB()),VB=Lp(MB()),jv=Lp(LB());var BB=qv.default||qv,Hse=jv.default||jv,im=class extends so{constructor(t){super(),this.wasm=t,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(UB),Kv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}write(t,e,o){let n={id:this.dataIdNextNumber++};return this.move(n,t,e,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}move(t,e,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let c=e;this.dataIdMap.set(t,{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(t,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),e!=null&&this.wasm.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,p),u)}async read(t){return this.readSync(t)}readSync(t,e,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(t);if(s==="string")return(e==null||e===0)&&(o==null||o>=i.length)?i:i.slice(e,o);e=e||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+e*p,n+o*p);return qse(u.buffer,s)}disposeData(t,e=!1){if(this.dataIdMap.has(t)){let o=this.dataIdMap.get(t);if(o.refCount--,!e&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.id),this.dataIdMap.delete(t)}return!0}refCount(t){return this.dataIdMap.has(t)?this.dataIdMap.get(t).refCount:0}incRef(t){let e=this.dataIdMap.get(t);e!=null&&e.refCount++}floatPrecision(){return 32}getMemoryOffset(t){return this.dataIdMap.get(t).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(t,e,o,n){let s;if(o==null)s=this.write(n!=null?n:null,t,e);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:t,dtype:e,refCount:1});let i=y.sizeFromShape(t);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:t,dtype:e}}typedArrayFromHeap({shape:t,dtype:e,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(t);switch(e){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 ${e}`)}}};function Kse(r){return(t,e)=>(y.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||t.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,t).then(s=>{e(s.instance,s.module)})})}),{})}function zB(r,t,e){if(Ug!=null)return Ug;let o="tfjs-backend-wasm.wasm";return r&&t?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),sm!=null&&sm[o]!=null?sm[o]:e+o}async function WB(){let[r,t]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((e,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=VB.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?zB(r,t,nm!=null?nm:p):p+i},Xv&&(n.instantiateWasm=Kse(zB(r,t,nm!=null?nm:"")));let s=!1;n.onAbort=()=>{if(s||am)return;am=!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;t&&r&&Ug==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+BB.toString()],{type:"text/javascript"}),a=BB(n)):a=Hse(n),a.then(i=>{s=!0,am=!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,[])},e({wasm:i})}).catch(o)})}function qse(r,t){switch(t){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${t}`)}}var jse=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Ug=null,nm=null,sm={},am=!1,Xv=!1;function Xse(r,t=!1){if(Pw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),am)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Ug=r,Xv=t}function Yse(r,t=!1){if(am)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")nm=r;else{sm=r;let e=jse.filter(o=>sm[o]==null);if(e.length>0)throw new Error(`There were no entries found for the following binaries: ${e.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.`)}Xv=t}var UB=-1,Kv=-1;function Qse(r){UB=r}function Zse(){if(Kv===-1)throw new Error("WASM backend not initialized.");return Kv}var Jse="4.14.0";var eae=2;tu("wasm",async()=>{let{wasm:r}=await WB();return new im(r)},eae);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 Gg=class{constructor(t){t&&(this.vendor=t.vendor,this.architecture=t.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 Hg=class{constructor(t){this.device=t,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(t,e,o=!1,n=!0){let s,a=GB(t,e);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:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t)):(s=this.device.createBuffer({size:t,usage:e,mappedAtCreation:o}),this.numBytesAllocated+=t),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=t,s}releaseBuffer(t,e=!0){if(this.freeBuffers.size===0)return;let o=t.size,n=t.usage,s=GB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(t);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,e?(this.freeBuffers.get(s).push(t),this.numFreeBuffers++):(t.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((t,e)=>{t.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 GB(r,t){return`${r}_${t}`}var Kg=class{constructor(t){this.device=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(t,e,o,n){let s=KB(o),a=t*e*s,i=HB(t,e,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:[t,e],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(t){if(this.freeTextures.size===0)return;let e=t.width,o=t.height,n=t.format,s=t.usage,a=HB(e,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(t),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(t);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=KB(n),c=e*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((t,e)=>{t.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((t,e)=>{t.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 HB(r,t,e,o){return`${r}_${t}_${e}_${o}`}function KB(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function qB(r,t){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let e=r.length,o="xyzwuv",n=r.map(a=>`${t}.${o[a]}`),s=new Array(e-1);s[e-2]=n[e-1];for(let a=e-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Yr=(r,t,e)=>e==="int32"?`atomicAdd(${r}, bitcast(${t}));`:` { var oldValue = 0; loop { @@ -5006,11 +5006,11 @@ return a / b;`,Wee=` } oldValue = res.old_value; } - }`;var Ii;(function(r){r[r.FROM_PIXELS=0]="FROM_PIXELS",r[r.DRAW=1]="DRAW"})(Ii||(Ii={}));var YB=(r,t,e,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=rae(e,s,t),i=r.createShaderModule({code:a,label:t.constructor.name}),p=A().get("WEBGPU_PRINT_SHADER");if(p!==""){p=p.toLowerCase();let u=p.split(",");(p==="all"||u.some(c=>t.shaderKey.toLowerCase().includes(c)))&&(console.group(t.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):r.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Ae=(r,t="f32")=>{switch(r){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${r}-component ${t} is not supported.`)}};function ht(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 Mo(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 t;switch(r.length){case 0:t=` + }`;var Ci;(function(r){r[r.FROM_PIXELS=0]="FROM_PIXELS",r[r.DRAW=1]="DRAW"})(Ci||(Ci={}));var QB=(r,t,e,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=rae(e,s,t),i=r.createShaderModule({code:a,label:t.constructor.name}),p=A().get("WEBGPU_PRINT_SHADER");if(p!==""){p=p.toLowerCase();let u=p.split(",");(p==="all"||u.some(c=>t.shaderKey.toLowerCase().includes(c)))&&(console.group(t.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):r.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Ae=(r,t="f32")=>{switch(r){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${r}-component ${t} 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 t;switch(r.length){case 0:t=` fn main() `;break;case 1:t=` fn main(${r[0]} : i32) - `;break;default:throw Error("Unreachable")}return t}function qB(r,t){let e;return e=` + `;break;default:throw Error("Unreachable")}return t}function jB(r,t){let e;return e=` ${tae(t)} fn _start(@builtin(local_invocation_id) LocalId : vec3, @builtin(global_invocation_id) GlobalId : vec3, @@ -5036,12 +5036,12 @@ return a / b;`,Wee=` // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${ZB(e)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${JB(e)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u + localIndex); `} } - `),e.pixelsOpType!=null){let f=e.pixelsOpType===Ii.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Nu(t.dtype,e.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Nu(r[0].dtype,e.outputComponent)}>;`,h=t.shape.length===3?"vec2":"i32";o.push(` + `),e.pixelsOpType!=null){let f=e.pixelsOpType===Ci.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Cu(t.dtype,e.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Cu(r[0].dtype,e.outputComponent)}>;`,h=t.shape.length===3?"vec2":"i32";o.push(` struct Uniform { outShapeStrides : ${h}, size : i32, @@ -5051,21 +5051,21 @@ return a / b;`,Wee=` ${f} @group(0) @binding(2) var uniforms: Uniform; - `);let g=XB(e);return[jB,o.join(` -`),cm(t.shape),e.getUserCode(),qB(g,e)].join(` -`)}let s,a,i="struct Uniforms { NAN : f32, INFINITY : f32, ";e.variableNames.forEach((f,h)=>{let g=ht(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ht(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ht(t.shape.length);i+=`outShape : ${p}, `,s=t.shape.length-1,a=ht(s),i+=` + `);let g=YB(e);return[XB,o.join(` +`),um(t.shape),e.getUserCode(),jB(g,e)].join(` +`)}let s,a,i="struct Uniforms { NAN : f32, INFINITY : f32, ";e.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(t.shape.length);i+=`outShape : ${p}, `,s=t.shape.length-1,a=ft(s),i+=` outShapeStrides: ${a}, `,e.size&&(i+="size : i32, "),e.uniforms&&(i+=e.uniforms),i+="};",i=cae(i),o.push(i),e.atomic?o.push(` @group(0) @binding(0) var result: array>; `):o.push(` - @group(0) @binding(0) var result: array<${Nu(t.dtype,e.outputComponent)}>; + @group(0) @binding(0) var result: array<${Cu(t.dtype,e.outputComponent)}>; `),e.variableNames.forEach((f,h)=>{o.push(` - @group(0) @binding(${1+h}) var ${f}: array<${e.variableComponents?Nu(r[h].dtype,e.variableComponents[h]):Nu(r[h].dtype,e.outputComponent)}>; + @group(0) @binding(${1+h}) var ${f}: array<${e.variableComponents?Cu(r[h].dtype,e.variableComponents[h]):Cu(r[h].dtype,e.outputComponent)}>; `)}),i!==""&&o.push(` @group(0) @binding(${1+e.variableNames.length}) var uniforms: Uniforms; - `);let u=iae(t.shape,e.dispatchLayout),c=[jB,o.join(` -`)+oae,cm(t.shape),u,uae(t.shape.length)];e.atomic||c.push(pae(t.shape,t.dtype,e.outputComponent)),e.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>aae(f,t.shape,e.variableComponents?e.variableComponents[h]:e.outputComponent,e.dispatchLayout.x.length===t.shape.length)).join(` -`);c.push(l),c.push(e.getUserCode());let m=XB(e);return c.push(qB(m,e)),c.join(` -`)}function QB(r,t,e){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];t.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(e.shape),s.push(e.dtype);let a=t.map(c=>w.getBroadcastDims(c.shape,e.shape)),i=t.map(c=>y.arraysEqual(c.shape,e.shape)).join("_"),p=a.map(c=>c.join("_")).join(";"),u=ZB(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 jB=` + `);let u=iae(t.shape,e.dispatchLayout),c=[XB,o.join(` +`)+oae,um(t.shape),u,uae(t.shape.length)];e.atomic||c.push(pae(t.shape,t.dtype,e.outputComponent)),e.variableNames.forEach((f,h)=>{c.push(`${um(r[h].shape,f)}`)});let l=r.map((f,h)=>aae(f,t.shape,e.variableComponents?e.variableComponents[h]:e.outputComponent,e.dispatchLayout.x.length===t.shape.length)).join(` +`);c.push(l),c.push(e.getUserCode());let m=YB(e);return c.push(jB(m,e)),c.join(` +`)}function ZB(r,t,e){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];t.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(e.shape),s.push(e.dtype);let a=t.map(c=>w.getBroadcastDims(c.shape,e.shape)),i=t.map(c=>y.arraysEqual(c.shape,e.shape)).join("_"),p=a.map(c=>c.join("_")).join(";"),u=JB(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 XB=` 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}; @@ -5119,15 +5119,15 @@ return a / b;`,Wee=` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } -`;function cm(r,t=""){let e=r.length,o=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",n=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(e<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ht(e),i=[];for(let u=0;u vec2 { +`;function um(r,t=""){let e=r.length,o=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",n=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(e<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(e),i=[];for(let u=0;u vec2 { let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n}; return vec2(d0, d1); - }`;let p;return p="var index2 = index;"+s.map((u,c)=>{let l=`let ${i[c]} = index2 / uniforms.${n}.${Mo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Mo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Mo(c)}`;return`${l}; ${m};`}).join(""),` + }`;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(""),` fn ${o}(index : i32) -> ${a} { ${p} return ${a}(${i.join(",")}); } - `}function nae(r,t){let e=r.name,o=r.shape.length,n=ht(o),s="get"+e.charAt(0).toUpperCase()+e.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(c=>`${c} : i32`).join(", ");if(o<1)return` + `}function nae(r,t){let e=r.name,o=r.shape.length,n=ft(o),s="get"+e.charAt(0).toUpperCase()+e.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(c=>`${c} : i32`).join(", ");if(o<1)return` fn ${s}() -> ${Ae(t)} { return ${Ae(t)}(${e}[0]); } @@ -5136,7 +5136,7 @@ return a / b;`,Wee=` return ${Ae(t)}(${e}[getIndexFromCoords${u}(${n}(${a.join(",")}), ${p})${t===1?"":` / ${t}`}]); } - `}function sae(r,t,e,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=t.length,u=ht(p);if(y.arraysEqual(r.shape,t)&&o)return` + `}function sae(r,t,e,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=t.length,u=ft(p);if(y.arraysEqual(r.shape,t)&&o)return` fn ${a}Index(globalIndex : i32) -> ${Ae(e)} { return ${Ae(e)}(${n}[globalIndex]); } @@ -5152,8 +5152,8 @@ return a / b;`,Wee=` fn ${a}Coords(coords : ${u}) -> ${Ae(e)}{ return get${s}(); } - `;p<2&&c.length>=1?m="coords = 0;":m=c.map(g=>`coords.${Mo(g+l)} = 0;`).join(` -`);let d="";if(p<2&&i>0)d="coords";else if(p>1){let g=ht(i),x=r.shape.map((b,C)=>`coords.${Mo(C+l)}`).join(", ");d=`${g}(${x})`}else d="coords";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return` + `;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";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` fn ${a}Index(globalIndex : i32) -> ${Ae(e)} { var coords = getCoordsFromIndex(globalIndex); ${m} @@ -5165,11 +5165,11 @@ return a / b;`,Wee=` ${m} return ${Ae(e)}(${n}[getIndexFromCoords${h}(${d}, ${f})${e===1?"":` / ${e}`}]); } -`}function aae(r,t,e,o){let n=nae(r,e);return r.shape.length<=t.length&&(n+=sae(r,t,e,o)),n}function iae(r,t){let{x:e,y:o=[],z:n=[]}=t,s=r.length,a=e.length+o.length+n.length;if(a!==s)return"";if(e.length===s)return`fn getOutputCoords() -> ${ht(s)}{ +`}function aae(r,t,e,o){let n=nae(r,e);return r.shape.length<=t.length&&(n+=sae(r,t,e,o)),n}function iae(r,t){let{x:e,y:o=[],z:n=[]}=t,s=r.length,a=e.length+o.length+n.length;if(a!==s)return"";if(e.length===s)return`fn getOutputCoords() -> ${ft(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let i="",p=[e,o,n];for(let m=0;m ${c} { + `;let i="",p=[e,o,n];for(let m=0;m ${c} { ${i} `;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(",")}); }`,l}function uae(r){let t="";switch(r){case 0:case 1:t+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { @@ -5205,14 +5205,14 @@ return a / b;`,Wee=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return t}function ZB(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Nu(r,t=1){if(r==="float32")return Ae(t,"f32");if(r==="int32"||r==="bool")return Ae(t,"i32");throw new Error(`type ${r} is not supported.`)}function pae(r,t,e){let o=r.length,n=Nu(t,e),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) { + `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return t}function JB(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Cu(r,t=1){if(r==="float32")return Ae(t,"f32");if(r==="int32"||r==="bool")return Ae(t,"i32");throw new Error(`type ${r} is not supported.`)}function pae(r,t,e){let o=r.length,n=Cu(t,e),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(e)}) { result[flatIndex] = ${n}(value); } fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(e,"i32")}) { result[flatIndex] = ${n}(value); } - `;if(o>=2){let a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=ht(o);s+=` + `;if(o>=2){let a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=ft(o);s+=` fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(", ")}, value : ${Ae(e)}) { let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndex(flatIndex${e===1?"":` / ${e}`}, value); @@ -5221,7 +5221,7 @@ return a / b;`,Wee=` let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndexI32(flatIndex${e===1?"":` / ${e}`}, value); } - `}return s}function cae(r){let t=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(t,o=>"@align(16) "+o);let e=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(e,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function XB(r){return!(r.dispatchLayout.hasOwnProperty("y")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty("z")&&r.dispatchLayout.z.length!==0)}var Yv={};qe(Yv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Lo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Xv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>mae});var Ap=r=>{let t=1;for(let e=0;ee%r[o]===0)}function H(r,t,e=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Ap(r.x.map(i=>t[i]))/(e[0]*o[0])),r.y?Math.ceil(Ap(r.y.map(i=>t[i]))/(e[1]*o[1])):1,r.z?Math.ceil(Ap(r.z.map(i=>t[i]))/(e[2]*o[2])):1];return[n,s,a]}function Xv(r,t,e,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),t<=16&&e<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function lm(r,t,e=!1){if(e)return[8,8,1];let o=Ap(r.x.map(s=>t[s])),n=Ap(r.y.map(s=>t[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,t,e=!1){if(e)return[4,4,1];let o=Ap(r.x.map(s=>t[s])),n=Ap(r.y.map(s=>t[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((t,e)=>e)}}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 window!="undefined"||typeof WorkerGlobalScope!="undefined")&&!!navigator.gpu}function fm(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGPU backend.`)})}var Lo;(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"})(Lo||(Lo={}));var dae=A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),fae=(r,t)=>{let e=r.limits.maxComputeWorkgroupsPerDimension,o=t.dispatchLayout,n=t.dispatch;if(n.every(a=>a<=e))return n;y.assert(n[0]>e&&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>e?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=e,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Tu=class extends ao{nextDataId(){return Tu.nextDataId++}constructor(t,e){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=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(e),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 zo(this,pr()),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:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,e=!1){if(!this.tensorMap.has(t))return!0;let o=this.tensorMap.get(t);return e?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(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 e=this.tensorMap.get(t);if(!(!e||!e.resource)){if(e.external){e.resource=null;return}e.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(e.resource):e.resource instanceof GPUTexture&&this.textureManager.releaseTexture(e.resource),e.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let e=this.tensorMap.get(t);e.refCount++}decRef(t){if(this.tensorMap.has(t)){let e=this.tensorMap.get(t);e.refCount--}}write(t,e,o){if(o==="complex64"&&t!=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:e,values:t,refCount:1}),n}move(t,e,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:n,shape:o,values:e,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(e){throw new Error(e.message)}Object.keys(this.pipelineCache).map((e,o)=>{this.pipelineCache[e]=t[o]})}async getBufferData(t){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 e=t.size,o=this.bufferManager.acquireBuffer(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,o,0,e),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(t,e){let o=this.tensorMap.get(t);return o.values=e,o.values}readSync(t){let e=this.tensorMap.get(t),{values:o,complexTensorInfos:n}=e;if(o!=null||e.dtype==="string")return o;if(e.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(t,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=e.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=E%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,e.dtype);return this.convertAndCacheOnCPU(t,f),f}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let e=this.tensorMap.get(t),{values:o}=e;if(o!=null)return o;let n;if(e.dtype==="complex64"){let s=await Promise.all([this.read(e.complexTensorInfos.real.dataId),this.read(e.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(e.resource);n=y.convertBackendValuesAndArrayBuffer(s,e.dtype)}return this.convertAndCacheOnCPU(t,n),n}copyBuffer(t){let e=t.size,o=t.usage,n=this.bufferManager.acquireBuffer(e,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,e),this.submitQueue(),n}createTensorFromGPUData(t,e,o){let n=t.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:e,values:null,refCount:1,external:t.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(t.buffer.sizey.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --disable-dawn-features=disallow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t,e,o){return e==="string"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,t,e),shape:t,dtype:e}}tensorToBinding(t){if(!t)return null;let o=this.tensorMap.get(t.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(t){let e=this.tensorMap.get(t);if(e.resource!=null)return;let o=jg(e.dtype)*y.sizeFromShape(e.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(e.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();e.dtype==="int32"||e.dtype==="bool"?new Int32Array(i).set(e.values):new Float32Array(i).set(e.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();e.dtype==="int32"||e.dtype==="bool"?new Int32Array(a).set(e.values):new Float32Array(a).set(e.values),n.unmap()}e.values=null}else n=this.bufferManager.acquireBuffer(o,s);e.resource=n}makeUniforms(t){let e=0,o=0,n=[],s=1;t.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),e=Math.ceil(e/u)*u,o=p.data.length,n.push(e),e+=p.data.length*4}),e=Math.ceil(e/s)*s;let a=new ArrayBuffer(e);t.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(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,e),this.uniformPendingDisposal.push(i),{offset:0,size:e,buffer:i}}runWebGPUProgram(t,e,o,n,s){if(s||(s=this.makeTensorInfo(t.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=fae(this.device,t);let a=e.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:t.variableNames[u]}});t.shaderKey=QB(t,a,s);let i=A().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=YB(this.device,t,a,s,i)),t.pipeline=this.pipelineCache[t.shaderKey],i||this.recordAndSubmit(t,s,e,n),s}recordAndSubmit(t,e,o,n){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],a=[],i="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),a=o.concat(e).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(e.shape);s.push({type:i,data:m})}if(t.size){let m=y.sizeFromShape(t.outputShape);s.push({type:i,data:[t.outputComponent?m/t.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(e),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(e.dataId);let u=this.device.createBindGroup({layout:t.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,queryIndex:0,location:"beginning"},{querySet:this.querySet,queryIndex:1,location:"end"}],this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(c||A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===Ii.DRAW)&&(this.endComputePassEncoder(),c?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 e=new BigUint64Array(t.getMappedRange()),o=Number(e[1]-e[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),o}shouldExecuteOnCPU(t,e=dae){return A().getBool("WEBGPU_CPU_FORWARD")&&t.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"},t=await navigator.gpu.requestAdapter(r),e={},o=[];t.features.has("timestamp-query")&&o.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&o.push(["bgra8unorm-storage"]),e.requiredFeatures=o;let n=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(e),a=await t.requestAdapterInfo();return new Tu(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 hae="let resultTemp = a + b;",gae="let resultTemp = atan2(a, b);",xae="let resultTemp = areal * breal - aimag * bimag;",yae="let resultTemp = areal * bimag + aimag * breal;",bae="let resultTemp = a / b;",Cae="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",wae=` + `}return s}function cae(r){let t=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(t,o=>"@align(16) "+o);let e=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(e,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function YB(r){return!(r.dispatchLayout.hasOwnProperty("y")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty("z")&&r.dispatchLayout.z.length!==0)}var Qv={};qe(Qv,{GPUBytesPerElement:()=>qg,MatMulProgramType:()=>Mo,assertNotComplex:()=>mm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>cm,computeWorkgroupInfoForMatMul:()=>Yv,computeWorkgroupSizeForConv2d:()=>pm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>lm,tilesFitEvenlyIntoShape:()=>mae});var kp=r=>{let t=1;for(let e=0;ee%r[o]===0)}function H(r,t,e=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(kp(r.x.map(i=>t[i]))/(e[0]*o[0])),r.y?Math.ceil(kp(r.y.map(i=>t[i]))/(e[1]*o[1])):1,r.z?Math.ceil(kp(r.z.map(i=>t[i]))/(e[2]*o[2])):1];return[n,s,a]}function Yv(r,t,e,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),t<=16&&e<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function pm(r,t,e=!1){if(e)return[8,8,1];let o=kp(r.x.map(s=>t[s])),n=kp(r.y.map(s=>t[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function cm(r,t,e=!1){if(e)return[4,4,1];let o=kp(r.x.map(s=>t[s])),n=kp(r.y.map(s=>t[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((t,e)=>e)}}function qg(r){if(r==="float32"||r==="int32"||r==="bool"||r==="string")return 4;if(r==="complex64")return 8;throw new Error(`Unknown dtype ${r}`)}function lm(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function mm(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} 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 dae=A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),fae=(r,t)=>{let e=r.limits.maxComputeWorkgroupsPerDimension,o=t.dispatchLayout,n=t.dispatch;if(n.every(a=>a<=e))return n;y.assert(n[0]>e&&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>e?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=e,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Kc=class r extends so{nextDataId(){return r.nextDataId++}constructor(t,e){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,!lm())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 Gg(e),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Hg(this.device),this.textureManager=new Kg(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:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,e=!1){if(!this.tensorMap.has(t))return!0;let o=this.tensorMap.get(t);return e?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(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 e=this.tensorMap.get(t);if(!(!e||!e.resource)){if(e.external){e.resource=null;return}e.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(e.resource):e.resource instanceof GPUTexture&&this.textureManager.releaseTexture(e.resource),e.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let e=this.tensorMap.get(t);e.refCount++}decRef(t){if(this.tensorMap.has(t)){let e=this.tensorMap.get(t);e.refCount--}}write(t,e,o){if(o==="complex64"&&t!=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:e,values:t,refCount:1}),n}move(t,e,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:n,shape:o,values:e,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(e){throw new Error(e.message)}Object.keys(this.pipelineCache).map((e,o)=>{this.pipelineCache[e]=t[o]})}async getBufferData(t){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 e=t.size,o=this.bufferManager.acquireBuffer(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,o,0,e),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(t,e){let o=this.tensorMap.get(t);return o.values=e,o.values}readSync(t){let e=this.tensorMap.get(t),{values:o,complexTensorInfos:n}=e;if(o!=null||e.dtype==="string")return o;if(e.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(t,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=e.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=E%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,e.dtype);return this.convertAndCacheOnCPU(t,f),f}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let e=this.tensorMap.get(t),{values:o}=e;if(o!=null)return o;let n;if(e.dtype==="complex64"){let s=await Promise.all([this.read(e.complexTensorInfos.real.dataId),this.read(e.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(e.resource);n=y.convertBackendValuesAndArrayBuffer(s,e.dtype)}return this.convertAndCacheOnCPU(t,n),n}copyBuffer(t){let e=t.size,o=t.usage,n=this.bufferManager.acquireBuffer(e,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,e),this.submitQueue(),n}createTensorFromGPUData(t,e,o){let n=t.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:e,values:null,refCount:1,external:t.zeroCopy});let a=this.tensorMap.get(s),i=qg(a.dtype)*y.sizeFromShape(a.shape);if(t.buffer.sizey.decodeString(n));return me(t.shape,t.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(t.shape,t.dtype,e)}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 e=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,t();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=e,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(t,e,o){return e==="string"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,t,e),shape:t,dtype:e}}tensorToBinding(t){if(!t)return null;let o=this.tensorMap.get(t.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(t){let e=this.tensorMap.get(t);if(e.resource!=null)return;let o=qg(e.dtype)*y.sizeFromShape(e.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(e.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();e.dtype==="int32"||e.dtype==="bool"?new Int32Array(i).set(e.values):new Float32Array(i).set(e.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();e.dtype==="int32"||e.dtype==="bool"?new Int32Array(a).set(e.values):new Float32Array(a).set(e.values),n.unmap()}e.values=null}else n=this.bufferManager.acquireBuffer(o,s);e.resource=n}makeUniforms(t){let e=0,o=0,n=[],s=1;t.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),e=Math.ceil(e/u)*u,o=p.data.length,n.push(e),e+=p.data.length*4}),e=Math.ceil(e/s)*s;let a=new ArrayBuffer(e);t.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(e,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,e),this.uniformPendingDisposal.push(i),{offset:0,size:e,buffer:i}}runWebGPUProgram(t,e,o,n,s){if(s||(s=this.makeTensorInfo(t.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=fae(this.device,t);let a=e.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:t.variableNames[u]}});t.shaderKey=ZB(t,a,s);let i=A().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=QB(this.device,t,a,s,i)),t.pipeline=this.pipelineCache[t.shaderKey],i||this.recordAndSubmit(t,s,e,n),s}recordAndSubmit(t,e,o,n){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],a=[],i="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),a=o.concat(e).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(e.shape);s.push({type:i,data:m})}if(t.size){let m=y.sizeFromShape(t.outputShape);s.push({type:i,data:[t.outputComponent?m/t.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(e),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(e.dataId);let u=this.device.createBindGroup({layout:t.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(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(c||A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===Ci.DRAW)&&(this.endComputePassEncoder(),c?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 e=new BigUint64Array(t.getMappedRange()),o=Number(e[1]-e[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),o}shouldExecuteOnCPU(t,e=dae){return A().getBool("WEBGPU_CPU_FORWARD")&&t.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"},t=await navigator.gpu.requestAdapter(r),e={},o=[];t.features.has("timestamp-query")&&o.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&o.push(["bgra8unorm-storage"]),e.requiredFeatures=o;let n=t.limits;e.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(e),a=await t.requestAdapterInfo();return new Kc(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 hae="let resultTemp = a + b;",gae="let resultTemp = atan2(a, b);",xae="let resultTemp = areal * breal - aimag * bimag;",yae="let resultTemp = areal * bimag + aimag * breal;",bae="let resultTemp = a / b;",Cae="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",wae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); @@ -5306,7 +5306,7 @@ return a / b;`,Wee=` `,zae="if (a < 0.0) { return b * a; } return a;",Vae=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,Wae="let resultTemp = (a - b) * (a - b);",Uae="let resultTemp = a - b;";function Qc(r,t){let e;do{switch(r){case fe.ATAN2:e=gae;break;case fe.MAX:e=Rae;break;case fe.MIN:e=Dae;break;case fe.MOD:e=t?Fae:Aae;break;case fe.NOT_EQUAL:e=t?Mae:Oae;break;case fe.POW:e=t?Bae:Lae;break;default:continue}let o,n,s;return t?(o="isnanVec4",n="vec4",s="vec4"):(o="isnan",n="f32",s="bool"),` +`,Wae="let resultTemp = (a - b) * (a - b);",Uae="let resultTemp = a - b;";function qc(r,t){let e;do{switch(r){case fe.ATAN2:e=gae;break;case fe.MAX:e=Rae;break;case fe.MIN:e=Dae;break;case fe.MOD:e=t?Fae:Aae;break;case fe.NOT_EQUAL:e=t?Mae:Oae;break;case fe.POW:e=t?Bae:Lae;break;default:continue}let o,n,s;return t?(o="isnanVec4",n="vec4",s="vec4"):(o="isnan",n="f32",s="bool"),` let aIsNaN = ${o}(a); let aPostLegalization = select(a, ${n}(42), aIsNaN); let bIsNaN = ${o}(b); @@ -5430,17 +5430,17 @@ return a / b;`,Wee=` `,Die="return tan(a);",Aie=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,Fie="return f32(i32((a)));";function vi(r,t){switch(r){case Z.ABS:return Gae;case Z.ACOS:return Hae;case Z.ACOSH:return Kae;case Z.ASIN:return qae;case Z.ASINH:return jae;case Z.ATAN:return Xae;case Z.ATANH:return Yae;case Z.COS:return Zae;case Z.COSH:return Jae;case Z.CEIL:return Qae;case Z.ELU:return t?rie:tie;case Z.ERF:return oie;case Z.EXP:return nie;case Z.EXPM1:return eie;case Z.FLOOR:return sie;case Z.IS_FINITE:return aie;case Z.IS_INF:return iie;case Z.IS_NAN:return uie;case Z.LINEAR:return pie;case Z.LOG:return cie;case Z.LOG1P:return lie;case Z.LOGICAL_NOT:return mie;case Z.NEG:return die;case Z.LEAKYRELU:return t?hie:fie;case Z.RECIPROCAL:return gie;case Z.RELU:return t?Cie:xie;case Z.RELU6:return t?bie:yie;case Z.ROUND:return wie;case Z.RSQRT:return Sie;case Z.SELU:return Iie;case Z.SIGMOID:return vie;case Z.SIGN:return kie;case Z.SIN:return Nie;case Z.SINH:return Tie;case Z.SOFTPLUS:return _ie;case Z.SQRT:return $ie;case Z.SQUARE:return Eie;case Z.STEP:return Rie;case Z.TAN:return Die;case Z.TANH:return Aie;case Z.TO_INT:return Fie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function fr(r,t=!1,e=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=vi(Z.LINEAR);else if(r==="relu")n=vi(Z.RELU,e);else if(r==="elu")n=vi(Z.ELU,e);else if(r==="relu6")n=vi(Z.RELU6,e);else if(r==="prelu")n=Qc(fe.PRELU,e);else if(r==="sigmoid")n=vi(Z.SIGMOID,e);else if(r==="leakyrelu")n=vi(Z.LEAKYRELU,e);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(e?4:1),i="";return t?i=` +`,Fie="return f32(i32((a)));";function wi(r,t){switch(r){case Z.ABS:return Gae;case Z.ACOS:return Hae;case Z.ACOSH:return Kae;case Z.ASIN:return qae;case Z.ASINH:return jae;case Z.ATAN:return Xae;case Z.ATANH:return Yae;case Z.COS:return Zae;case Z.COSH:return Jae;case Z.CEIL:return Qae;case Z.ELU:return t?rie:tie;case Z.ERF:return oie;case Z.EXP:return nie;case Z.EXPM1:return eie;case Z.FLOOR:return sie;case Z.IS_FINITE:return aie;case Z.IS_INF:return iie;case Z.IS_NAN:return uie;case Z.LINEAR:return pie;case Z.LOG:return cie;case Z.LOG1P:return lie;case Z.LOGICAL_NOT:return mie;case Z.NEG:return die;case Z.LEAKYRELU:return t?hie:fie;case Z.RECIPROCAL:return gie;case Z.RELU:return t?Cie:xie;case Z.RELU6:return t?bie:yie;case Z.ROUND:return wie;case Z.RSQRT:return Sie;case Z.SELU:return Iie;case Z.SIGMOID:return vie;case Z.SIGN:return kie;case Z.SIN:return Nie;case Z.SINH:return Tie;case Z.SOFTPLUS:return _ie;case Z.SQRT:return $ie;case Z.SQUARE:return Eie;case Z.STEP:return Rie;case Z.TAN:return Die;case Z.TANH:return Aie;case Z.TO_INT:return Fie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,t=!1,e=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=wi(Z.LINEAR);else if(r==="relu")n=wi(Z.RELU,e);else if(r==="elu")n=wi(Z.ELU,e);else if(r==="relu6")n=wi(Z.RELU6,e);else if(r==="prelu")n=qc(fe.PRELU,e);else if(r==="sigmoid")n=wi(Z.SIGMOID,e);else if(r==="leakyrelu")n=wi(Z.LEAKYRELU,e);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(e?4:1),i="";return t?i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { let b = getPreluActivationWeightsByOutputCoords(coords); ${n} }`:i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { ${n} - }`,i}function Zr(r,t){return` + }`,i}function Qr(r,t){return` ${r?"value = value + getBiasByOutputCoords(coords);":""} ${t?"value = activation(value, coords);":""} - `}function Qv(r,t,e=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=` + `}function Zv(r,t,e=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=` ${r?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,i=t?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` @@ -5460,14 +5460,14 @@ return a / b;`,Wee=` ${i} return value; } - `}function hm(r,t,e,o,n=!1,s=!1,a=!1,i=1){return` - ${Qv(e,o,n,s,a,i)} + `}function dm(r,t,e,o,n=!1,s=!1,a=!1,i=1){return` + ${Zv(e,o,n,s,a,i)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) { ${n&&s?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${Zr(r,t)} + ${Qr(r,t)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } @@ -5493,7 +5493,7 @@ return a / b;`,Wee=` let ACached = mm_Asub[tileRow + i][k]; ${s} } - }`}};function Fp(r,t,e=!1,o=32,n=!1,s=32,a=!1){let i=t[1]*r[1],p=t[0]*r[0],u=e?i:o,c=e?o:i,l=u/t[0],m=o/t[1],d=r[1],f=r[0];return y.assert((e&&l===4&&r[1]===4||!e&&(l===3||l===4))&&u%t[0]===0&&o%t[1]===0&&r[0]===4,()=>`If transposeA ${e} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. + }`}};function Np(r,t,e=!1,o=32,n=!1,s=32,a=!1){let i=t[1]*r[1],p=t[0]*r[0],u=e?i:o,c=e?o:i,l=u/t[0],m=o/t[1],d=r[1],f=r[0];return y.assert((e&&l===4&&r[1]===4||!e&&(l===3||l===4))&&u%t[0]===0&&o%t[1]===0&&r[0]===4,()=>`If transposeA ${e} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. Otherwise, innerElementSize ${l} must be 3 or 4. tileAWidth ${u} must be divisible by workgroupSize[0]${t[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${r[0]} must be 4.`),` var mm_Asub : array, ${u/l}>, ${c}>; @@ -5543,7 +5543,7 @@ return a / b;`,Wee=` for (var innerRow = 0; innerRow < ${d}; innerRow++) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var JB=r=>r?` + }`}var ez=r=>r?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -5551,7 +5551,7 @@ return a / b;`,Wee=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRowStart + inputRow, kStart + inputCol); - `,Mie=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Pp(r,t,e=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*t[1],u=r[0]*t[0],c=e?p:o,l=e?o:p;y.assert(l%t[1]===0&&c%t[0]===0&&o%t[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t[1]}`);let m=l/t[1],d=c/t[0],f=o/t[1],h=r[1],g=r[0],x=a?` + `,Mie=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Tp(r,t,e=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*t[1],u=r[0]*t[0],c=e?p:o,l=e?o:p;y.assert(l%t[1]===0&&c%t[0]===0&&o%t[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t[1]}`);let m=l/t[1],d=c/t[0],f=o/t[1],h=r[1],g=r[0],x=a?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${p}; @@ -5562,7 +5562,7 @@ return a / b;`,Wee=` // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${t[1]}) { for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t[0]}) { - ${JB(e)} + ${ez(e)} } } // Load one tile of B into local memory. @@ -5617,7 +5617,7 @@ return a / b;`,Wee=` for (var innerCol = 0; innerCol < ${d}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${JB(e)} + ${ez(e)} } } @@ -5729,10 +5729,10 @@ return a / b;`,Wee=` mm_write(batch, globalRow, globalCol, acc); } - `}var Xg=class{constructor(t,e,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=e,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?t[1]:t[2];if(this.isVec4=(u%4===0&&!o||e[1]%4===0&&o)&&e[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=e[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Xv(e[1],u,e[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(e[1],e[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(t,e,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=t%n===0,i=e%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` - ${fr(this.activation,this.hasPreluActivationWeights,this.isVec4)} - ${hm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Bie(this.workgroupSize,this.transposeA):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} + `}var jg=class{constructor(t,e,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=e,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?t[1]:t[2];if(this.isVec4=(u%4===0&&!o||e[1]%4===0&&o)&&e[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=e[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Yv(e[1],u,e[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(e[1],e[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(t,e,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=t%n===0,i=e%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)} + ${dm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?Np(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Bie(this.workgroupSize,this.transposeA):Tp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} `}};function zie(r){return` var sumValues : array; ${G()} { @@ -5766,9 +5766,9 @@ return a / b;`,Wee=` mm_write(batch, row, col, sum); } } - `}var Yg=class{constructor(t,e=!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=t,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=e,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${e}_${o}`}getUserCode(){return` - ${fr(this.activation,this.hasPreluActivationWeights)} - ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)} + `}var Xg=class{constructor(t,e=!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=t,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=e,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${e}_${o}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights)} + ${dm(this.addBias,this.activation,this.transposeA,this.transposeB)} ${zie(this.workgroupSize[0])} `}};function Vie(r){let t=r[1],e=r[0],o=t>e?t:e;return` var mm_Asub : array, ${t}>; @@ -5822,12 +5822,12 @@ return a / b;`,Wee=` mm_write(batch, globalRow, globalCol, acc); } - `}var Qg=class{constructor(t,e,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` - ${fr(this.activation,this.hasPreluActivationWeights)} - ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)} + `}var Yg=class{constructor(t,e,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` + ${dr(this.activation,this.hasPreluActivationWeights)} + ${dm(this.addBias,this.activation,this.transposeA,this.transposeB)} ${Vie(this.workgroupSize)} - `}};var Zg=class{constructor(t,e,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(t[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&e%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],e],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let t=this.outputComponent;return` - ${Qv(!1,this.transposeB,!1,!1,!1,t)} + `}};var Qg=class{constructor(t,e,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(t[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&e%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],e],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let t=this.outputComponent;return` + ${Zv(!1,this.transposeB,!1,!1,!1,t)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(t)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5835,31 +5835,31 @@ return a / b;`,Wee=` // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${t}; i = i + 1) { - ${Qr("&result[flatIndex + i]",`${t>1?"value[i]":"value"}`,"float32")} + ${Yr("&result[flatIndex + i]",`${t>1?"value[i]":"value"}`,"float32")} } } } - ${t===4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},Jg=class{constructor(t,e=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],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.addBias=e!=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` - ${fr(this.activation,this.hasPreluActivationWeights)} + ${t===4?Np(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Tp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},Zg=class{constructor(t,e=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],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.addBias=e!=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` + ${dr(this.activation,this.hasPreluActivationWeights)} ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${Zr(this.addBias,this.activation)} + ${Qr(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}};var ex=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms="value : 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.shaderKey="fill"}getUserCode(){return` + `}};var Jg=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms="value : 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.shaderKey="fill"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function kt(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new ex(o),i=[{type:"float32",data:[n]}];return t.runWebGPUProgram(a,[],s,i)}}var ez={kernelName:sa,backendName:"webgpu",kernelFunc:kt};function pe(r){let{inputs:t,attrs:e}=r,{x:o}=t,{shape:n}=e,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 tz={kernelName:da,backendName:"webgpu",kernelFunc:pe};function Op({a:r,b:t,transposeA:e,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=t.shape.length,l=e?r.shape[u-2]:r.shape[u-1],m=o?t.shape[c-1]:t.shape[c-2],d=e?r.shape[u-1]:r.shape[u-2],f=o?t.shape[c-2]:t.shape[c-1],h=r.shape.slice(0,-2),g=t.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Ir.assertAndGetBroadcastShape(r.shape.slice(0,-2),t.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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=[E,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=Lo.MatMulReduceProgram:P===1&&m>=2e3?U=Lo.MatMulSplitKProgram:U=Lo.MatMulSmallOutputSizeProgram:U=Lo.MatMulPackedProgram}switch(U){case Lo.MatMulReduceProgram:L=new Yg(z,e,o,s,p,a);break;case Lo.MatMulSplitKProgram:{if(B=kt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,e,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 Lo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,e,o,s,p,a);break;case Lo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,e,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 Wie(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Op({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rz={kernelName:Io,backendName:"webgpu",kernelFunc:Wie};var gm=class{constructor(t,e,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${t}`,this.op=t}getUserCode(){return` + `}};function vt(r){let{backend:t,attrs:e}=r,{shape:o,value:n}=e,{dtype:s}=e;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),t.makeTensorInfo(o,s,a)}else{let a=new Jg(o),i=[{type:"float32",data:[n]}];return t.runWebGPUProgram(a,[],s,i)}}var tz={kernelName:sa,backendName:"webgpu",kernelFunc:vt};function pe(r){let{inputs:t,attrs:e}=r,{x:o}=t,{shape:n}=e,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 rz={kernelName:da,backendName:"webgpu",kernelFunc:pe};function _p({a:r,b:t,transposeA:e,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=t.shape.length,l=e?r.shape[u-2]:r.shape[u-1],m=o?t.shape[c-1]:t.shape[c-2],d=e?r.shape[u-1]:r.shape[u-2],f=o?t.shape[c-2]:t.shape[c-1],h=r.shape.slice(0,-2),g=t.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Sr.assertAndGetBroadcastShape(r.shape.slice(0,-2),t.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 ${t.shape} and transposeA=${e} and transposeB=${o} must match.`);let k=e?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],E=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:t},backend:n,attrs:{shape:_}}),D=[E,R],P=Math.max(x,b),O=[E,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 Xg(z,e,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Qg(z,m,e,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Zg(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 Yg(k,_,z,e,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new jg(k,z,e,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 Wie(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=t,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var oz={kernelName:So,backendName:"webgpu",kernelFunc:Wie};var fm=class{constructor(t,e,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${t}`,this.op=t}getUserCode(){return` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${Qc(this.op,!1)} + ${qc(this.op,!1)} } ${G("index")} { @@ -5871,9 +5871,9 @@ return a / b;`,Wee=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}};var ki=class{constructor(t,e,o){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.op=t,this.useSharedMemoryWithA=e.length<=1&&o.length>1&&e[0]<128,this.useSharedMemoryWithB=o.length<=1&&e.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:e[0],this.shaderKey=`binary_${t}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=e.length>0&&e[e.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(e)||e[e.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_${t}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let t,e=this.outputComponent===4?"vec4":"f32",o=` + `}};var Si=class{constructor(t,e,o){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(e,o),this.dispatchLayout=X(this.outputShape),this.op=t,this.useSharedMemoryWithA=e.length<=1&&o.length>1&&e[0]<128,this.useSharedMemoryWithB=o.length<=1&&e.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:e[0],this.shaderKey=`binary_${t}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=e.length>0&&e[e.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(e)||e[e.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_${t}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let t,e=this.outputComponent===4?"vec4":"f32",o=` fn binaryOperation(a : ${e}, b : ${e}) -> ${e} { - ${Qc(this.op,this.outputComponent===4)} + ${qc(this.op,this.outputComponent===4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; @@ -5904,9 +5904,9 @@ return a / b;`,Wee=` setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return t}};function Ft(r){let{inputs:t}=r,{x:e}=t;return r.backend.incRef(e.dataId),{dataId:e.dataId,shape:e.shape,dtype:e.dtype}}var oz={kernelName:wo,backendName:"webgpu",kernelFunc:Ft};function yo(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,"complex64"),a=e.tensorMap.get(s.dataId),i=Ft({inputs:{x:o},backend:e}),p=Ft({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var nz={kernelName:Fi,backendName:"webgpu",kernelFunc:yo};var Jr=class{constructor(t,e,o=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=e,o!==""&&(this.uniforms=o),this.shaderKey=`unary_${e}`}getUserCode(){return` + `;return t}};function At(r){let{inputs:t}=r,{x:e}=t;return r.backend.incRef(e.dataId),{dataId:e.dataId,shape:e.shape,dtype:e.dtype}}var nz={kernelName:Co,backendName:"webgpu",kernelFunc:At};function xo(r){let{inputs:t,backend:e}=r,{real:o,imag:n}=t,s=e.makeTensorInfo(o.shape,"complex64"),a=e.tensorMap.get(s.dataId),i=At({inputs:{x:o},backend:e}),p=At({inputs:{x:n},backend:e});return a.complexTensorInfos={real:i,imag:p},s}var sz={kernelName:Ri,backendName:"webgpu",kernelFunc:xo};var Zr=class{constructor(t,e,o=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=e,o!==""&&(this.uniforms=o),this.shaderKey=`unary_${e}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { - ${vi(this.op,!1)} + ${wi(this.op,!1)} } ${G("index")} { if (index < uniforms.size) { @@ -5914,7 +5914,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, unaryOperation(a)); } } - `}};function ye({opType:r,cpuKernelImpl:t,dtype:e}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=e||s.dtype;if(a.shouldExecuteOnCPU([s])&&t!=null){let u=a.tensorMap.get(s.dataId),c=t(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:t,supportsComplex:e=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(e&&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 ki(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=yo({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]))&&t!=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]=t(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new ki(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:sz,castImpl:az,ceilImpl:iz,concatImpl:uz,equalImpl:pz,expImpl:cz,expm1Impl:lz,floorImpl:mz,floorDivImpl:dz,gatherNdImpl:fz,gatherV2Impl:hz,greaterEqualImpl:gz,greaterImpl:xz,lessEqualImpl:yz,lessImpl:bz,logImpl:Cz,maxImpl:wz,maximumImpl:Sz,minimumImpl:Iz,multiplyImpl:vz,negImpl:kz,notEqualImpl:Nz,prodImpl:Tz,rangeImpl:_z,rsqrtImpl:$z,scatterImpl:Ez,simpleAbsImpl:Rz,sliceImpl:Dz,stridedSliceImpl:Az,stringNGramsImpl:Fz,subImpl:Pz,tileImpl:Oz,topKImpl:Mz,transposeImpl:Lz,uniqueImpl:HPt}=Tc;var Uie=ye({opType:Z.ABS,cpuKernelImpl:Rz}),Bz={kernelName:Xs,backendName:"webgpu",kernelFunc:Uie};var Gie=ye({opType:Z.ACOS}),zz={kernelName:Wo,backendName:"webgpu",kernelFunc:Gie};var Hie=ye({opType:Z.ACOSH}),Vz={kernelName:Uo,backendName:"webgpu",kernelFunc:Hie};var Kie=et({opType:fe.ADD,cpuKernelImpl:sz,supportsComplex:!0}),Wz={kernelName:uo,backendName:"webgpu",kernelFunc:Kie};var tx=class{constructor(t){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t[0],this.variableNames=t.map((e,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 t=[];this.variableNames.forEach(n=>{t.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let e=this.variableNames.map(n=>`v${n}`).join(" + ");return` + `}};function ye({opType:r,cpuKernelImpl:t,dtype:e}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=e||s.dtype;if(a.shouldExecuteOnCPU([s])&&t!=null){let u=a.tensorMap.get(s.dataId),c=t(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Zr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({opType:r,cpuKernelImpl:t,supportsComplex:e=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(e&&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 Si(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new fm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new fm(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]))&&t!=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]=t(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Si(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:az,castImpl:iz,ceilImpl:uz,concatImpl:pz,equalImpl:cz,expImpl:lz,expm1Impl:mz,floorImpl:dz,floorDivImpl:fz,gatherNdImpl:hz,gatherV2Impl:gz,greaterEqualImpl:xz,greaterImpl:yz,lessEqualImpl:bz,lessImpl:Cz,logImpl:wz,maxImpl:Sz,maximumImpl:Iz,minimumImpl:vz,multiplyImpl:kz,negImpl:Nz,notEqualImpl:Tz,prodImpl:_z,rangeImpl:$z,rsqrtImpl:Ez,scatterImpl:Rz,simpleAbsImpl:Dz,sliceImpl:Az,stridedSliceImpl:Fz,stringNGramsImpl:Pz,subImpl:Oz,tileImpl:Mz,topKImpl:Lz,transposeImpl:Bz,uniqueImpl:KPt}=wc;var Uie=ye({opType:Z.ABS,cpuKernelImpl:Dz}),zz={kernelName:Xs,backendName:"webgpu",kernelFunc:Uie};var Gie=ye({opType:Z.ACOS}),Vz={kernelName:Vo,backendName:"webgpu",kernelFunc:Gie};var Hie=ye({opType:Z.ACOSH}),Wz={kernelName:Wo,backendName:"webgpu",kernelFunc:Hie};var Kie=et({opType:fe.ADD,cpuKernelImpl:az,supportsComplex:!0}),Uz={kernelName:io,backendName:"webgpu",kernelFunc:Kie};var ex=class{constructor(t){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t[0],this.variableNames=t.map((e,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 t=[];this.variableNames.forEach(n=>{t.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let e=this.variableNames.map(n=>`v${n}`).join(" + ");return` ${G("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; @@ -5926,7 +5926,7 @@ return a / b;`,Wee=` } } } - `}};function qie(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return Ft({inputs:{x:o[0]},backend:e});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new tx(s);return e.runWebGPUProgram(a,o,n)}var Uz={kernelName:Go,backendName:"webgpu",kernelFunc:qie};var rx=class{constructor(t,e){this.variableNames=["A"],this.workgroupSize=[16,16,1];let o=new Array(t.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let t=this.workgroupSize[0];return` + `}};function qie(r){let{inputs:t,backend:e}=r,o=t;if(o.length===1)return At({inputs:{x:o[0]},backend:e});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new ex(s);return e.runWebGPUProgram(a,o,n)}var Gz={kernelName:Uo,backendName:"webgpu",kernelFunc:qie};var tx=class{constructor(t,e){this.variableNames=["A"],this.workgroupSize=[16,16,1];let o=new Array(t.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let t=this.workgroupSize[0];return` var tile : array, ${this.workgroupSize[0]}>; ${G()} { var x = i32(workgroupId.x) * ${t} + i32(localId.x); @@ -5945,7 +5945,7 @@ return a / b;`,Wee=` [localId.y]); } } - `}};var ox=class{constructor(t,e){this.variableNames=["A"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=new Array(t);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:t.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=e,this.shaderKey=`reduce_${e}`}getUserCode(){let t="",e="0.0",o=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(t=` + `}};function Jv(r){let t=r.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=new Array(t);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:t.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=e,this.shaderKey=`reduce_${e}`}getUserCode(){let t="",e="0.0",o=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(t=` if (isnan(candidate)) { bestValue = uniforms.NAN; } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) @@ -6004,7 +6004,7 @@ return a / b;`,Wee=` ${n} } } - `}};var jie={mean:"float32",all:"bool",any:"bool"};function eo(r,t,e,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(t,r.shape),p=i,u=w.getAxesPermutation(p,s),c=r;u!=null&&(c=yr({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;e&&(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=wz(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case"prod":let{outVals:x,outShape:b,outDtype:C}=Tz(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=jie[o]||ni(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 Xie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,"all",e)}var Hz={kernelName:Ho,backendName:"webgpu",kernelFunc:Xie};function Yie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,"any",e)}var Kz={kernelName:Ko,backendName:"webgpu",kernelFunc:Yie};var Zc=class{constructor(t,e,o){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[e];this.op=o==="min"?"<":">";let[s,a]=w.computeOutAndReduceShapes(t,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=t,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let t=this.workgroupSize[0],e=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Mo(this.inputShape.length-1)}`,o=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let s=0;sn.disposeData(h.dataId)),f}function Xie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,"all",e)}var Kz={kernelName:Go,backendName:"webgpu",kernelFunc:Xie};function Yie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,"any",e)}var qz={kernelName:Ho,backendName:"webgpu",kernelFunc:Yie};var jc=class{constructor(t,e,o){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[e];this.op=o==="min"?"<":">";let[s,a]=w.computeOutAndReduceShapes(t,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=t,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let t=this.workgroupSize[0],e=()=>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 { return ((a - 1u) / b + 1u); } @@ -6070,7 +6070,7 @@ return a / b;`,Wee=` setOutputAtIndexI32(index, bestIndex); } } - `}};function Qie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=yr({inputs:{x:n},backend:e,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 Zc(p.shape,a[0],"max"),l=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var qz={kernelName:Ys,backendName:"webgpu",kernelFunc:Qie};function Zie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=yr({inputs:{x:n},backend:e,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 Zc(p.shape,a[0],"min"),l=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var jz={kernelName:Qs,backendName:"webgpu",kernelFunc:Zie};var Jie=ye({opType:Z.ASIN}),Xz={kernelName:qo,backendName:"webgpu",kernelFunc:Jie};var eue=ye({opType:Z.ASINH}),Yz={kernelName:jo,backendName:"webgpu",kernelFunc:eue};var tue=ye({opType:Z.ATAN}),Qz={kernelName:Xo,backendName:"webgpu",kernelFunc:tue};var rue=et({opType:fe.ATAN2}),Zz={kernelName:Qo,backendName:"webgpu",kernelFunc:rue};var oue=ye({opType:Z.ATANH}),Jz={kernelName:Yo,backendName:"webgpu",kernelFunc:oue};var sx=class{constructor(t){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + `}};function Qie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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 jc(p.shape,a[0],"max"),l=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var jz={kernelName:Ys,backendName:"webgpu",kernelFunc:Qie};function Zie(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,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 jc(p.shape,a[0],"min"),l=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=e.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>e.disposeData(d.dataId)),m}var Xz={kernelName:Qs,backendName:"webgpu",kernelFunc:Zie};var Jie=ye({opType:Z.ASIN}),Yz={kernelName:Ko,backendName:"webgpu",kernelFunc:Jie};var eue=ye({opType:Z.ASINH}),Qz={kernelName:qo,backendName:"webgpu",kernelFunc:eue};var tue=ye({opType:Z.ATAN}),Zz={kernelName:jo,backendName:"webgpu",kernelFunc:tue};var rue=et({opType:fe.ATAN2}),Jz={kernelName:Yo,backendName:"webgpu",kernelFunc:rue};var oue=ye({opType:Z.ATANH}),eV={kernelName:Xo,backendName:"webgpu",kernelFunc:oue};var nx=class{constructor(t){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6085,7 +6085,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, value); } } - `}};var za=class{constructor(t,e,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,e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType==="avg"?t="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?t=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}};var Ba=class{constructor(t,e,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,e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType==="avg"?t="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?t=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6126,7 +6126,7 @@ return a / b;`,Wee=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${e});`} } } - `}},_u=class{constructor(t,e,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,e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType==="avg"?t="resultValue += value; count += 1.0;":this.computePositions?t=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},wu=class{constructor(t,e,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,e==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=e,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${e}_${o}_${n}_${s}`}getUserCode(){let t;this.poolType==="avg"?t="resultValue += value; count += 1.0;":this.computePositions?t=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6175,7 +6175,7 @@ return a / b;`,Wee=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${e});`} } } - `}};function Jv(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,"max",e)}var eV={kernelName:Vn,backendName:"webgpu",kernelFunc:Jv};function e0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return eo(n,a,s,"mean",e)}var tV={kernelName:Gn,backendName:"webgpu",kernelFunc:e0};function ax(r,t,e,o){if(t.filterWidth===1&&t.filterHeight===1&&y.arraysEqual(t.inShape,t.outShape))return Ft({inputs:{x:r},backend:o});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.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;e==="avg"?p=e0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(e==="max",()=>`Invalid pool type ${e}`),p=Jv({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:t.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?n=new sx(t):(e==="avg"?n=new za(t,"avg"):(y.assert(e==="max",()=>`Invalid pool type ${e}`),n=new za(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]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return ax(n,c,"avg",e)}var rV={kernelName:Zo,backendName:"webgpu",kernelFunc:nue};function sue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 _u(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var oV={kernelName:Zs,backendName:"webgpu",kernelFunc:sue};var ix=class{constructor(t){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function e0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{reductionIndices:s,keepDims:a}=o;return Jr(n,s,a,"max",e)}var tV={kernelName:zn,backendName:"webgpu",kernelFunc:e0};function t0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{keepDims:s,axis:a}=o;return Jr(n,a,s,"mean",e)}var rV={kernelName:Un,backendName:"webgpu",kernelFunc:t0};function sx(r,t,e,o){if(t.filterWidth===1&&t.filterHeight===1&&y.arraysEqual(t.inShape,t.outShape))return At({inputs:{x:r},backend:o});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.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;e==="avg"?p=t0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(e==="max",()=>`Invalid pool type ${e}`),p=e0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:t.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?n=new nx(t):(e==="avg"?n=new Ba(t,"avg"):(y.assert(e==="max",()=>`Invalid pool type ${e}`),n=new Ba(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]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return sx(n,c,"avg",e)}var oV={kernelName:Qo,backendName:"webgpu",kernelFunc:nue};function sue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 wu(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var nV={kernelName:Zs,backendName:"webgpu",kernelFunc:sue};var ax=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool2DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -6214,7 +6214,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},ux=class{constructor(t){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},ix=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool3DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -6263,7 +6263,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}};function aue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGPUProgram(m,[n],a.dtype,f)}var nV={kernelName:Ai,backendName:"webgpu",kernelFunc:aue};function iue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 e.runWebGPUProgram(l,[n],a.dtype,d)}var sV={kernelName:Di,backendName:"webgpu",kernelFunc:iue};function uue(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return Op({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var aV={kernelName:Jo,backendName:"webgpu",kernelFunc:uue};var px=class{constructor(t,e){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=t,this.uniforms=`start : ${ht(t.length)}, `,this.shaderKey="slice"}getUserCode(){let t=ht(this.rank),e=pue(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.${t0[a]} = uniforms.start.${Mo(a)} + coords.${t0[a]};`),` + `}};function aue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ix(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 e.runWebGPUProgram(m,[n],a.dtype,f)}var sV={kernelName:Ei,backendName:"webgpu",kernelFunc:aue};function iue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,a=s;mm([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ax(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 e.runWebGPUProgram(l,[n],a.dtype,d)}var aV={kernelName:$i,backendName:"webgpu",kernelFunc:iue};function uue(r){let{inputs:t,backend:e,attrs:o}=r,{a:n,b:s}=t,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:e})}var iV={kernelName:Zo,backendName:"webgpu",kernelFunc:uue};var ux=class{constructor(t,e){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=t,this.uniforms=`start : ${ft(t.length)}, `,this.shaderKey="slice"}getUserCode(){let t=ft(this.rank),e=pue(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.${r0[a]} = uniforms.start.${Oo(a)} + coords.${r0[a]};`),` ${G("index")} { if (index < uniforms.size) { var sourceLoc : ${t}; @@ -6273,15 +6273,15 @@ return a / b;`,Wee=` setOutputAtIndex(index, getSource(${e})); } } - `}},t0=["x","y","z","w","u","v"];function pue(r){if(r===1)return"sourceLoc";if(r<=6)return t0.slice(0,r).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=ct.parseSliceParams(n,s,a);if(ct.assertParamsValid(n,i,p),e.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=e.tensorMap.get(n.dataId),m=Dz(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);let u=new px(i,p),c=[{type:"int32",data:i}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var iV={kernelName:ha,backendName:"webgpu",kernelFunc:Hs};var cue=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=yr({inputs:{x:f},backend:e,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeData(b.dataId)),x},uV={kernelName:Js,backendName:"webgpu",kernelFunc:cue};var lue=` + `}},r0=["x","y","z","w","u","v"];function pue(r){if(r===1)return"sourceLoc";if(r<=6)return r0.slice(0,r).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),e.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=e.tensorMap.get(n.dataId),m=Az(l.values,i,p,n.shape,n.dtype);return e.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return e.makeTensorInfo(p,n.dtype,[]);let u=new ux(i,p),c=[{type:"int32",data:i}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var uV={kernelName:ha,backendName:"webgpu",kernelFunc:Hs};var cue=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:e,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:e,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:e,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>e.disposeData(b.dataId)),x},pV={kernelName:Js,backendName:"webgpu",kernelFunc:cue};var lue=` fn bincount_write(index: i32, value: f32) { - ${Qr("&result[index]","value","float32")} + ${Yr("&result[index]","value","float32")} } `,mue=` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } -`,Jc=class{constructor(t,e,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=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=e,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` +`,Xc=class{constructor(t,e,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=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=e,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` ${this.binaryOutput?mue:lue} ${G("index")} { ${this.rank===1?`if (index < uniforms.xShape) { @@ -6299,7 +6299,7 @@ return a / b;`,Wee=` } }`} } - `}};function due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=kt({backend:e,attrs:{shape:c,value:0,dtype:l}}),d=new Jc([i],u),f=[{type:"int32",data:[a]}],h=u?[n,s]:[n];return e.runWebGPUProgram(d,h,l,f,m)}var pV={kernelName:en,backendName:"webgpu",kernelFunc:due};var cx=class{constructor(t){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",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="broadcastArgs"}getUserCode(){return` + `}};function due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=vt({backend:e,attrs:{shape:c,value:0,dtype:l}}),d=new Xc([i],u),f=[{type:"int32",data:[a]}],h=u?[n,s]:[n];return e.runWebGPUProgram(d,h,l,f,m)}var cV={kernelName:Jo,backendName:"webgpu",kernelFunc:due};var px=class{constructor(t){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",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="broadcastArgs"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { var s0 = 1.0; @@ -6324,7 +6324,7 @@ return a / b;`,Wee=` } } } - `}};function fue(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t;if(e.shouldExecuteOnCPU([o,n])){let c=e.tensorMap.get(o.dataId),l=e.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return e.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 e.runWebGPUProgram(p,[o,n],"int32",u)}var cV={kernelName:ea,backendName:"webgpu",kernelFunc:fue};var r0=et({opType:fe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Nz}),lV={kernelName:Qn,backendName:"webgpu",kernelFunc:r0};function Ni(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.tensorMap.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:e})}var mV={kernelName:qi,backendName:"webgpu",kernelFunc:Ni};function dV(r,t){let e=new Jr(r.shape,Z.TO_INT),o=t.runWebGPUProgram(e,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function o0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Ft({inputs:{x:n},backend:e});let a=Gr(n.shape),i=o0({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),p=yo({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=Ni({inputs:{input:n},backend:e}),i=o0({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.tensorMap.get(n.dataId).values,[i,p,u]=az(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s==="int32")return dV(n,e);if(s==="bool"){let a=e.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=r0({inputs:{a:n,b:a},backend:e});return e.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var fV={kernelName:bo,backendName:"webgpu",kernelFunc:o0};var hue=ye({opType:Z.CEIL,cpuKernelImpl:iz}),hV={kernelName:tn,backendName:"webgpu",kernelFunc:hue};var lx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + `}};function fue(r){let{inputs:t,backend:e}=r,{s0:o,s1:n}=t;if(e.shouldExecuteOnCPU([o,n])){let c=e.tensorMap.get(o.dataId),l=e.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return e.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 px(i),u=[{type:"int32",data:[s]},{type:"int32",data:[a]}];return e.runWebGPUProgram(p,[o,n],"int32",u)}var lV={kernelName:ea,backendName:"webgpu",kernelFunc:fue};var o0=et({opType:fe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Tz}),mV={kernelName:Yn,backendName:"webgpu",kernelFunc:o0};function Ii(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:e})}var dV={kernelName:Gi,backendName:"webgpu",kernelFunc:Ii};function fV(r,t){let e=new Zr(r.shape,Z.TO_INT),o=t.runWebGPUProgram(e,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function n0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return At({inputs:{x:n},backend:e});let a=Ur(n.shape),i=n0({inputs:{x:n},backend:e,attrs:{dtype:"float32"}}),p=xo({inputs:{real:i,imag:a},backend:e});return a.dispose(),e.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=Ii({inputs:{input:n},backend:e}),i=n0({inputs:{x:a},backend:e,attrs:{dtype:s}});return e.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:e});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(e.shouldExecuteOnCPU([n])){let a=e.tensorMap.get(n.dataId).values,[i,p,u]=iz(a,n.shape,n.dtype,s);return e.makeTensorInfo(i,p,u)}if(s==="int32")return fV(n,e);if(s==="bool"){let a=e.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=o0({inputs:{a:n,b:a},backend:e});return e.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var hV={kernelName:yo,backendName:"webgpu",kernelFunc:n0};var hue=ye({opType:Z.CEIL,cpuKernelImpl:uz}),gV={kernelName:en,backendName:"webgpu",kernelFunc:hue};var cx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6334,7 +6334,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, clampedValue); } } - `}};var mx=class{constructor(t){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : 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.shaderKey="clip"}getUserCode(){return` + `}};var lx=class{constructor(t){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : 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.shaderKey="clip"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6345,7 +6345,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function gue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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),e.runWebGPUProgram(i,[n],n.dtype,p)}var gV={kernelName:Co,backendName:"webgpu",kernelFunc:gue};var dx=class{constructor(t){this.outputShape=[],this.variableNames=["real","imag"],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="complexAbs"}getUserCode(){return` + `}};function gue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:"float32",data:[s]},{type:"float32",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new cx(n.shape):i=new lx(n.shape),e.runWebGPUProgram(i,[n],n.dtype,p)}var xV={kernelName:bo,backendName:"webgpu",kernelFunc:gue};var mx=class{constructor(t){this.outputShape=[],this.variableNames=["real","imag"],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="complexAbs"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let re = abs(getRealByOutputIndex(index)); @@ -6357,7 +6357,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0)); } } - `}};function xV(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function xue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=e.tensorMap.get(o.dataId),s=new dx(o.shape),a=[xV(o,n.complexTensorInfos.real),xV(o,n.complexTensorInfos.imag)];return e.runWebGPUProgram(s,a,a[0].dtype)}var yV={kernelName:Pi,backendName:"webgpu",kernelFunc:xue};var fx=class{constructor(t){this.uniforms="",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(t,1),this.variableNames=t.map((e,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=t.length-1;for(let e=0;e0){t.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;s`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=t.length-1;for(let e=0;e0){t.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;sNi({inputs:{input:C},backend:e})),h=r.map(C=>Mp({inputs:{input:C},backend:e})),g=el(f,t,e),x=el(h,t,e),b=yo({inputs:{real:g,imag:x},backend:e});return f.forEach(C=>e.disposeData(C.dataId)),h.forEach(C=>e.disposeData(C.dataId)),e.disposeData(g.dataId),e.disposeData(x.dataId),b}let n=e.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(t))];return pe({inputs:{x:k},backend:e,attrs:{shape:E}})}),h=f.map(k=>({vals:e.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=uz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),t),S=e.makeTensorInfo(C,o,b);return f.forEach(k=>e.disposeData(k.dataId)),S}let s=e.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;fe.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:e,attrs:{shape:i}});return e.disposeData(m.dataId),d}function yue(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:e,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,t)),y.sizeFromShape(s.shape.slice(t))]}})),outShape:o}}function n0(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:e}):el(p,s,e)}var CV={kernelName:ta,backendName:"webgpu",kernelFunc:n0};function bue(r,t,e,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?` + `}};function $p(r){let{inputs:t,backend:e}=r,{input:o}=t,n=e.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:e})}var CV={kernelName:Vi,backendName:"webgpu",kernelFunc:$p};function Yc(r,t,e){let o=r[0].dtype;if(o==="complex64"){let f=r.map(C=>Ii({inputs:{input:C},backend:e})),h=r.map(C=>$p({inputs:{input:C},backend:e})),g=Yc(f,t,e),x=Yc(h,t,e),b=xo({inputs:{real:g,imag:x},backend:e});return f.forEach(C=>e.disposeData(C.dataId)),h.forEach(C=>e.disposeData(C.dataId)),e.disposeData(g.dataId),e.disposeData(x.dataId),b}let n=e.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(t))];return pe({inputs:{x:k},backend:e,attrs:{shape:E}})}),h=f.map(k=>({vals:e.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=pz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),t),S=e.makeTensorInfo(C,o,b);return f.forEach(k=>e.disposeData(k.dataId)),S}let s=e.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new dx(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;fe.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:e,attrs:{shape:i}});return e.disposeData(m.dataId),d}function yue(r,t,e){let o=w.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:e,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,t)),y.sizeFromShape(s.shape.slice(t))]}})),outShape:o}}function s0(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,t[0].shape)[0],a=t.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(t.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return e.makeTensorInfo(i,t[0].dtype,[]);let p=t.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:e}):Yc(p,s,e)}var wV={kernelName:ta,backendName:"webgpu",kernelFunc:s0};function bue(r,t,e,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?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); @@ -6417,7 +6417,7 @@ return a / b;`,Wee=` ${b} } return ${Ae(i)}(0.0);`,S=`${l(p)}`,k=Ae(u),_=r?Ae(i):Ae(p),E=r?Ae(p):Ae(i);return` - ${fr(s,a,u===4,4)} + ${dr(s,a,u===4,4)} fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} { ${r?C:S} } @@ -6432,14 +6432,14 @@ return a / b;`,Wee=` var value = valueIn; let outWidth = ${r?"uniforms.outShape[2]":"uniforms.outShape[3]"}; ${d} - ${Zr(n,s)} + ${Qr(n,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var hx=class{constructor(t,e,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=t.outShape,this.isChannelsLast=t.dataFormat==="channelsLast",this.isVec4=((t.inChannels%4===0||t.inChannels%3===0)&&this.isChannelsLast||t.outWidth%4===0&&!this.isChannelsLast)&&t.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&&t.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=e%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 t=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Pp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),e=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + }`}var fx=class{constructor(t,e,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=t.outShape,this.isChannelsLast=t.dataFormat==="channelsLast",this.isVec4=((t.inChannels%4===0||t.inChannels%3===0)&&this.isChannelsLast||t.outWidth%4===0&&!this.isChannelsLast)&&t.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=pm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=cm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&t.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=e%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 t=this.isVec4?Np(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Tp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),e=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` ${bue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,e[0],e[1],e[2])} ${t} - `}};var gx=class{constructor(t,e=!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=t.outShape,this.isChannelsLast=t.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=e,this.activation=o,this.hasPreluActivationWeights=n,e&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` - ${fr(this.activation,this.hasPreluActivationWeights,!1,4)} + `}};var hx=class{constructor(t,e=!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=t.outShape,this.isChannelsLast=t.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=e,this.activation=o,this.hasPreluActivationWeights=n,e&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -6460,7 +6460,7 @@ return a / b;`,Wee=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${Zr(this.addBias,this.activation)} + ${Qr(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -6484,7 +6484,7 @@ return a / b;`,Wee=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}};var xx=class{constructor(t,e){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, + `}};var gx=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let t=this.isChannelsLast?1:2,e=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` ${G("index")} { let coords = getCoordsFromIndex(index); @@ -6508,7 +6508,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, value); } } - `}};function yx(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Cue({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=e.dataFormat==="channelsLast",u=!p,c=!1,l=p&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type==="VALID",m=[],d,f;if(l){let x=e.inHeight*e.inWidth*e.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,e.batchSize,x]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,x,e.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[e.batchSize,e.inHeight*e.inWidth,e.inChannels]:[e.batchSize,e.inChannels,e.inHeight*e.inWidth]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.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=Op({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:e.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function wue({x:r,filter:t,convInfo:e,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}=e,C=b==="channelsLast",S=p*u*c,k=h*f,_=C?[e.batchSize,k,S]:[e.batchSize,S,k],E=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(E,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:t},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=Op({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:e.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=e.dataFormat==="channelsLast",l=c&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type==="VALID",m=A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(l||e.filterHeight===1&&e.filterWidth===1&&e.dilationHeight===1&&e.dilationWidth===1&&e.strideHeight===1&&e.strideWidth===1&&(e.padInfo.type==="SAME"||e.padInfo.type==="VALID")))return Cue({x:r,filter:t,convInfo:e,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=e.batchSize*Math.ceil(e.outHeight*e.outWidth/32)*Math.ceil(e.outChannels/32);if(A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||h<=f)return wue({x:r,filter:t,convInfo:e,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[e.padInfo.top,e.padInfo.left],b=[{type:"int32",data:[e.filterHeight,e.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[e.strideHeight,e.strideWidth]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]}];if(m)g=new gx(e,p,i,u);else{let _=c?e.outHeight*e.outWidth:e.outChannels,E=c?e.outChannels:e.outHeight*e.outWidth,R=e.filterHeight*e.filterWidth*e.inChannels;b.push({type:"int32",data:[_]},{type:"int32",data:[E]},{type:"int32",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(e,_,E,R,p,i,u,D)}let C=[],S=[r,t];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 Sue(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=e,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 wV={kernelName:rn,backendName:"webgpu",kernelFunc:Sue};var Cx=class{constructor(t){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=t.inShape,this.isChannelsLast=t.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&t.outChannels%4===0&&t.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 t=this.isChannelsLast?1:2,e=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=` + `}};function xx(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function Cue({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=e.dataFormat==="channelsLast",u=!p,c=!1,l=p&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type==="VALID",m=[],d,f;if(l){let x=e.inHeight*e.inWidth*e.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,e.batchSize,x]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,x,e.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[e.batchSize,e.inHeight*e.inWidth,e.inChannels]:[e.batchSize,e.inChannels,e.inHeight*e.inWidth]}}),f=pe({inputs:{x:t},backend:o,attrs:{shape:[1,e.inChannels,e.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=xx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=xx(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:e.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function wue({x:r,filter:t,convInfo:e,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}=e,C=b==="channelsLast",S=p*u*c,k=h*f,_=C?[e.batchSize,k,S]:[e.batchSize,S,k],E=new gx(_,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(E,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:t},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=xx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=xx(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:e.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function yx({x:r,filter:t,convInfo:e,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=e.dataFormat==="channelsLast",l=c&&e.filterHeight===e.inHeight&&e.filterWidth===e.inWidth&&e.padInfo.type==="VALID",m=A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(l||e.filterHeight===1&&e.filterWidth===1&&e.dilationHeight===1&&e.dilationWidth===1&&e.strideHeight===1&&e.strideWidth===1&&(e.padInfo.type==="SAME"||e.padInfo.type==="VALID")))return Cue({x:r,filter:t,convInfo:e,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=e.batchSize*Math.ceil(e.outHeight*e.outWidth/32)*Math.ceil(e.outChannels/32);if(A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||h<=f)return wue({x:r,filter:t,convInfo:e,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[e.padInfo.top,e.padInfo.left],b=[{type:"int32",data:[e.filterHeight,e.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[e.strideHeight,e.strideWidth]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]}];if(m)g=new hx(e,p,i,u);else{let _=c?e.outHeight*e.outWidth:e.outChannels,E=c?e.outChannels:e.outHeight*e.outWidth,R=e.filterHeight*e.filterWidth*e.inChannels;b.push({type:"int32",data:[_]},{type:"int32",data:[E]},{type:"int32",data:[R]});let D=o.adapterInfo.isIntel();g=new fx(e,_,E,R,p,i,u,D)}let C=[],S=[r,t];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 Sue(r){let{inputs:t,attrs:e,backend:o}=r,{x:n,filter:s}=t,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=e,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return yx({x:n,filter:s,convInfo:m,backend:o})}var SV={kernelName:tn,backendName:"webgpu",kernelFunc:Sue};var bx=class{constructor(t){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=t.inShape,this.isChannelsLast=t.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&t.outChannels%4===0&&t.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 t=this.isChannelsLast?1:2,e=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=` ${G()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; @@ -6651,7 +6651,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},wx=class{constructor(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` + `}},Cx=class{constructor(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6692,7 +6692,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},Sx=class{constructor(t){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, + `}},wx=class{constructor(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerFilter"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { @@ -6733,7 +6733,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},Ix=class{constructor(t){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, + `}},Sx=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerInput"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { @@ -6787,7 +6787,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}};function Iue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(d,[n,s],n.dtype,f)}var SV={kernelName:Oi,backendName:"webgpu",kernelFunc:Iue};function vue(r=4){let t=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};function Iue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 Cx(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 e.runWebGPUProgram(d,[n,s],n.dtype,f)}var IV={kernelName:Ai,backendName:"webgpu",kernelFunc:Iue};function vue(r=4){let t=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` let coord1 = vec4(coordX, coordY, col + 1, rowInner); let coord2 = vec4(coordX, coordY, col + 2, rowInner); let coord3 = vec4(coordX, coordY, col + 3, rowInner); @@ -6847,10 +6847,10 @@ return a / b;`,Wee=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value; } - }`}var vx=class{constructor(t){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t.inShape,y.assert(t.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=t.inChannels%4===0&&t.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 t=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize):Pp(this.elementsPerThread,this.workgroupSize);return` + }`}var Ix=class{constructor(t){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t.inShape,y.assert(t.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=t.inChannels%4===0&&t.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=pm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=cm(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 t=this.isVec4?Np(this.elementsPerThread,this.workgroupSize):Tp(this.elementsPerThread,this.workgroupSize);return` ${vue(this.isVec4?4:1)} ${t} - `}};function kue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(f,[n,s],"float32",d)}var IV={kernelName:on,backendName:"webgpu",kernelFunc:kue};var kx=class{constructor(t){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` + `}};function kue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 bx(m);else{f=new Ix(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 e.runWebGPUProgram(f,[n,s],"float32",d)}var vV={kernelName:rn,backendName:"webgpu",kernelFunc:kue};var vx=class{constructor(t){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -6932,7 +6932,7 @@ return a / b;`,Wee=` } setOutputAtIndex(index, dotProd); } - }`}};function Nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],d,l)}var vV={kernelName:nn,backendName:"webgpu",kernelFunc:Nue};function Tue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(c,[n,s],s.dtype,l)}var kV={kernelName:Xa,backendName:"webgpu",kernelFunc:Tue};function _ue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(c,[n,s],n.dtype,l)}var NV={kernelName:sn,backendName:"webgpu",kernelFunc:_ue};var $ue=ye({opType:Z.COS}),TV={kernelName:an,backendName:"webgpu",kernelFunc:$ue};var Eue=ye({opType:Z.COSH}),_V={kernelName:un,backendName:"webgpu",kernelFunc:Eue};var Nx=class{constructor(t,e,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[s]=e;this.outputShape=[s,o[0],o[1],t],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[t,e]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${t} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${t} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${t}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${e} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${e} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${e}`];return` + }`}};function Nue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 vx(u),d=dt(n.dtype,s.dtype);return e.runWebGPUProgram(m,[n,s],d,l)}var kV={kernelName:on,backendName:"webgpu",kernelFunc:Nue};function Tue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new wx(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 e.runWebGPUProgram(c,[n,s],s.dtype,l)}var NV={kernelName:ja,backendName:"webgpu",kernelFunc:Tue};function _ue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Sx(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 e.runWebGPUProgram(c,[n,s],n.dtype,l)}var TV={kernelName:nn,backendName:"webgpu",kernelFunc:_ue};var $ue=ye({opType:Z.COS}),_V={kernelName:sn,backendName:"webgpu",kernelFunc:$ue};var Eue=ye({opType:Z.COSH}),$V={kernelName:an,backendName:"webgpu",kernelFunc:Eue};var kx=class{constructor(t,e,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[s]=e;this.outputShape=[s,o[0],o[1],t],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[t,e]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${t} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${t} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${t}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${e} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${e} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${e}`];return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6988,23 +6988,23 @@ return a / b;`,Wee=` } } } - `}};var Rue=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Nx(n.shape[3],s.shape,i,p),l=[{type:"float32",data:[u]}];return e.runWebGPUProgram(c,[n,s,a],"float32",l)},$V={kernelName:ln,backendName:"webgpu",kernelFunc:Rue};var Lp;(function(r){r.Prod="*",r.Sum="+"})(Lp||(Lp={}));var xm=class{constructor(t,e,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=t,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let t=this.outputShape.length,e=this.op===Lp.Prod?"1.0":"0.0",o=this.exclusive?e:`getX(${EV(t,"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"),` + `}};var Rue=r=>{let{inputs:t,backend:e,attrs:o}=r,{image:n,boxes:s,boxInd:a}=t,{cropSize:i,method:p,extrapolationValue:u}=o,c=new kx(n.shape[3],s.shape,i,p),l=[{type:"float32",data:[u]}];return e.runWebGPUProgram(c,[n,s,a],"float32",l)},EV={kernelName:cn,backendName:"webgpu",kernelFunc:Rue};var Ep;(function(r){r.Prod="*",r.Sum="+"})(Ep||(Ep={}));var hm=class{constructor(t,e,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=t,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let t=this.outputShape.length,e=this.op===Ep.Prod?"1.0":"0.0",o=this.exclusive?e:`getX(${RV(t,"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"),` ${G("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${RV(t,"coords",this.op)}; + let end = ${DV(t,"coords",this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${RV(t,"coords",this.op)} = idx; - val ${this.op}= getX(${EV(t,"coords",this.op)}); + ${DV(t,"coords",this.op)} = idx; + val ${this.op}= getX(${RV(t,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function EV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function RV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function Tx(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=yr({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Ft({inputs:{x:p},backend:e});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=e.runWebGPUProgram(d,[l],l.dtype,h),e.disposeData(f.dataId)}if(n){let m=new xm(r,p.shape,n,s),d=l,f=[{type:"float32",data:[0]}];l=e.runWebGPUProgram(m,[l],l.dtype,f),e.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=yr({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeData(l.dataId),e.disposeData(p.dataId),d}return l}function Due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Tx(Lp.Prod,n,e,s,a,i)}var DV={kernelName:pn,backendName:"webgpu",kernelFunc:Due};function Aue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Tx(Lp.Sum,n,e,s,a,i)}var AV={kernelName:cn,backendName:"webgpu",kernelFunc:Aue};function Fue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{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=kt({backend:e,attrs:{shape:d,value:0,dtype:l}}),h=new Jc(m,c,i),g=[{type:"int32",data:[a]}],x=c?[n,s]:[n];return e.runWebGPUProgram(h,x,l,g,f)}var FV={kernelName:ra,backendName:"webgpu",kernelFunc:Fue};var _x=class{constructor(t,e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${e}`,this.dataFormat=e}getUserCode(){return` + `}};function RV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function DV(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function Nx(r,t,e,o,n,s){let a=t.shape.length,i=w.getAxesPermutation([o],a),p=t;i!=null&&(p=xr({inputs:{x:t},backend:e,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=${t.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:e});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new hm(r,p.shape,!1,s),f=l,h=[{type:"float32",data:[m]}];l=e.runWebGPUProgram(d,[l],l.dtype,h),e.disposeData(f.dataId)}if(n){let m=new hm(r,p.shape,n,s),d=l,f=[{type:"float32",data:[0]}];l=e.runWebGPUProgram(m,[l],l.dtype,f),e.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:e,attrs:{perm:m}});return e.disposeData(l.dataId),e.disposeData(p.dataId),d}return l}function Due(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Nx(Ep.Prod,n,e,s,a,i)}var AV={kernelName:un,backendName:"webgpu",kernelFunc:Due};function Aue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,exclusive:a,reverse:i}=o;return Nx(Ep.Sum,n,e,s,a,i)}var FV={kernelName:pn,backendName:"webgpu",kernelFunc:Aue};function Fue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,weights:s}=t,{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:e,attrs:{shape:d,value:0,dtype:l}}),h=new Xc(m,c,i),g=[{type:"int32",data:[a]}],x=c?[n,s]:[n];return e.runWebGPUProgram(h,x,l,g,f)}var PV={kernelName:ra,backendName:"webgpu",kernelFunc:Fue};var Tx=class{constructor(t,e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${e}`,this.dataFormat=e}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7024,8 +7024,8 @@ return a / b;`,Wee=` 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 Pue(r){let{inputs:t,backend:e,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=[{type:"int32",data:[s]}],g=new _x(f,a);return e.runWebGPUProgram(g,[n],n.dtype,h)}var PV={kernelName:mn,backendName:"webgpu",kernelFunc:Pue};var $x=class{constructor(t,e,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=t,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=e,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let t=this.filterWidth*this.filterHeight,e=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` - ${fr(this.activation,this.hasPreluActivation,!1,4)} + }`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Pue(r){let{inputs:t,backend:e,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=[{type:"int32",data:[s]}],g=new Tx(f,a);return e.runWebGPUProgram(g,[n],n.dtype,h)}var OV={kernelName:ln,backendName:"webgpu",kernelFunc:Pue};var _x=class{constructor(t,e,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=t,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=e,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let t=this.filterWidth*this.filterHeight,e=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` + ${dr(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${o}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -7081,13 +7081,13 @@ return a / b;`,Wee=` value = fma(xVal, wVal, value); } } - ${Zr(this.addBias,this.activation)} + ${Qr(this.addBias,this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};var tl=class{constructor(t,e=!1,o=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=t.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(t.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),e&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=t,this.addBias=e,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 t=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,e=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return` - ${fr(this.activation,this.hasPreluActivation,!0,4)} + `}};var Qc=class{constructor(t,e=!1,o=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=t.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(t.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),e&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=t,this.addBias=e,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 t=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,e=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return` + ${dr(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -7136,14 +7136,14 @@ return a / b;`,Wee=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${Zr(this.addBias,this.activation)} + ${Qr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}};var rl=class{constructor(t,e=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, + `}};var Zc=class{constructor(t,e=!1,o=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=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t.dataFormat==="channelsLast",e&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=t,this.addBias=e,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let t=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` - ${fr(this.activation,this.hasPreluActivation,!1,4)} + ${dr(this.activation,this.hasPreluActivation,!1,4)} ${G("index")} { if (index < uniforms.size) { @@ -7204,11 +7204,11 @@ return a / b;`,Wee=` } } } - ${Zr(this.addBias,this.activation)} + ${Qr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function Oue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 $x(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 tl(d),f.push({type:"int32",data:[g.virtualWidth]})):(g=new rl(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]})),e.runWebGPUProgram(g,[n,s],n.dtype,f)}var OV={kernelName:dn,backendName:"webgpu",kernelFunc:Oue};var Ex=class{constructor(t){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, + `}};function Oue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 _x(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 Qc(d),f.push({type:"int32",data:[g.virtualWidth]})):(g=new Zc(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]})),e.runWebGPUProgram(g,[n,s],n.dtype,f)}var MV={kernelName:mn,backendName:"webgpu",kernelFunc:Oue};var $x=class{constructor(t){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=t.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_filter"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7244,7 +7244,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},Rx=class{constructor(t){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, + `}},Ex=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_input"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7287,7 +7287,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}};function Mue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Ex(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 e.runWebGPUProgram(m,[n,s],"float32",d)}var MV={kernelName:Mi,backendName:"webgpu",kernelFunc:Mue};function Lue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],n.dtype,d)}var LV={kernelName:Li,backendName:"webgpu",kernelFunc:Lue};var Dx=class{constructor(t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` + `}};function Mue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,dy:s}=t,{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 e.runWebGPUProgram(m,[n,s],"float32",d)}var LV={kernelName:Fi,backendName:"webgpu",kernelFunc:Mue};function Lue(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,filter:s}=t,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Ex(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 e.runWebGPUProgram(m,[n,s],n.dtype,d)}var BV={kernelName:Pi,backendName:"webgpu",kernelFunc:Lue};var Rx=class{constructor(t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7295,7 +7295,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, value); } } - `}};function Bue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Dx(s),p=e.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var BV={kernelName:oa,backendName:"webgpu",kernelFunc:Bue};var Ax=class{constructor(t){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` + `}};function Bue(r){let{inputs:t,backend:e}=r,{x:o}=t,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:e,attrs:{shape:[s]}}),i=new Rx(s),p=e.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var zV={kernelName:oa,backendName:"webgpu",kernelFunc:Bue};var Dx=class{constructor(t){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let neg_infinity = -3.4e38; @@ -7327,7 +7327,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, curVal); } } - `}};function zue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 e.runWebGPUProgram(m,[n,s],n.dtype,l)}var zV={kernelName:fn,backendName:"webgpu",kernelFunc:zue};var Fx=class{constructor(t,e){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=t.inShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.outShape,this.workgroupSize),e!=="float32"&&e!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 + `}};function zue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s}=t,{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 Dx(u);return e.runWebGPUProgram(m,[n,s],n.dtype,l)}var VV={kernelName:dn,backendName:"webgpu",kernelFunc:zue};var Ax=class{constructor(t,e){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=t.inShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.outShape,this.workgroupSize),e!=="float32"&&e!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 types, does not support ${e} type.`);this.type=e,this.shaderKey="dilation2DBackpropInput"}getUserCode(){return` ${G("index")} { if (index < uniforms.dySize) { @@ -7368,10 +7368,10 @@ return a / b;`,Wee=` let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${Qr("&result[flatIndexIn]","value",this.type)} + ${Yr("&result[flatIndexIn]","value",this.type)} } } - `}},Px=class{constructor(t,e,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=t.filterShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.outShape,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 + `}},Fx=class{constructor(t,e,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=t.filterShape,this.dispatchLayout=X(t.outShape),this.dispatch=H(this.dispatchLayout,t.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"}getUserCode(){return` ${G("index")} { if (index < uniforms.dySize) { @@ -7411,10 +7411,10 @@ return a / b;`,Wee=` let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${Qr("&result[flatIndexIn]","value",this.type)} + ${Yr("&result[flatIndexIn]","value",this.type)} } } - `}};function Vue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=kt({backend:e,attrs:{shape:s.shape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var VV={kernelName:zi,backendName:"webgpu",kernelFunc:Vue};function Wue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{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=kt({backend:e,attrs:{shape:c.inShape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var WV={kernelName:Bi,backendName:"webgpu",kernelFunc:Wue};var Ox=class{constructor(t,e,o){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=Ii.DRAW,this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=e,this.textureFormat=o,this.shaderKey=`draw_${e}_${o}`}getUserCode(){let t,e=this.type==="float32"?"value":"value / 255.0";return t=` + `}};function Vue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=s.dtype,m=new Fx(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:e,attrs:{shape:s.shape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var WV={kernelName:Mi,backendName:"webgpu",kernelFunc:Vue};function Wue(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,dy:a}=t,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=n.dtype,m=new Ax(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:e,attrs:{shape:c.inShape,value:0,dtype:l}});return e.runWebGPUProgram(m,[n,s,a],l,d,f)}var UV={kernelName:Oi,backendName:"webgpu",kernelFunc:Wue};var Px=class{constructor(t,e,o){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=Ci.DRAW,this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=e,this.textureFormat=o,this.shaderKey=`draw_${e}_${o}`}getUserCode(){let t,e=this.type==="float32"?"value":"value / 255.0";return t=` if (uniforms.numChannels == 1) { rgba[0] = ${e}; rgba[1] = ${e}; @@ -7437,7 +7437,7 @@ return a / b;`,Wee=` textureStore(outImage, vec2(coords.yx), rgba); } } - `}};function Uue(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=e.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:e.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let b="int32",C=e.makeTensorInfo(m,b),S=e.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:"uint32",data:[x]},{type:"float32",data:[c]}];if(e.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 e.disposeData(C.dataId),n}var UV={kernelName:Pu,backendName:"webgpu",kernelFunc:Uue};var s0=et({opType:fe.MUL,cpuKernelImpl:vz,supportsComplex:!0}),GV={kernelName:Yn,backendName:"webgpu",kernelFunc:s0};function a0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,"sum",e)}var HV={kernelName:Is,backendName:"webgpu",kernelFunc:a0};function Gue(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=a0({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeData(h.dataId);return m}var KV={kernelName:Vi,backendName:"webgpu",kernelFunc:Gue};var Hue=ye({opType:Z.ELU}),qV={kernelName:gn,backendName:"webgpu",kernelFunc:Hue};var Kue=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=new ki(fe.ELU_DER,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],o.dtype)},jV={kernelName:Ya,backendName:"webgpu",kernelFunc:Kue};var que=et({opType:fe.EQUAL,dtype:"bool",cpuKernelImpl:pz}),XV={kernelName:yn,backendName:"webgpu",kernelFunc:que};var jue=ye({opType:Z.ERF}),YV={kernelName:xn,backendName:"webgpu",kernelFunc:jue};var Xue=ye({opType:Z.EXP,cpuKernelImpl:cz,dtype:"float32"}),QV={kernelName:bn,backendName:"webgpu",kernelFunc:Xue};function Mx(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 ZV={kernelName:na,backendName:"webgpu",kernelFunc:Mx};var Yue=ye({opType:Z.EXPM1,cpuKernelImpl:lz}),JV={kernelName:Cn,backendName:"webgpu",kernelFunc:Yue};var ym=class{constructor(t,e){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: 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.component=t,this.shaderKey=`fft_${t}`}getUserCode(){return` + `}};function Uue(r){let{inputs:t,backend:e,attrs:o}=r,{image:n}=t,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=e.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",m=[i,p],d=new Px(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:e.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let b="int32",C=e.makeTensorInfo(m,b),S=e.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:"uint32",data:[x]},{type:"float32",data:[c]}];if(e.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 e.disposeData(C.dataId),n}var GV={kernelName:_u,backendName:"webgpu",kernelFunc:Uue};var a0=et({opType:fe.MUL,cpuKernelImpl:kz,supportsComplex:!0}),HV={kernelName:Xn,backendName:"webgpu",kernelFunc:a0};function i0(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,"sum",e)}var KV={kernelName:Ss,backendName:"webgpu",kernelFunc:i0};function Gue(r){let{inputs:t,backend:e,attrs:o}=r,{equation:n}=o,s=t,{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=i0({inputs:{x:m},backend:e,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&e.disposeData(h.dataId);return m}var qV={kernelName:Li,backendName:"webgpu",kernelFunc:Gue};var Hue=ye({opType:Z.ELU}),jV={kernelName:hn,backendName:"webgpu",kernelFunc:Hue};var Kue=r=>{let{inputs:t,backend:e}=r,{dy:o,y:n}=t,s=new Si(fe.ELU_DER,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],o.dtype)},XV={kernelName:Xa,backendName:"webgpu",kernelFunc:Kue};var que=et({opType:fe.EQUAL,dtype:"bool",cpuKernelImpl:cz}),YV={kernelName:xn,backendName:"webgpu",kernelFunc:que};var jue=ye({opType:Z.ERF}),QV={kernelName:gn,backendName:"webgpu",kernelFunc:jue};var Xue=ye({opType:Z.EXP,cpuKernelImpl:lz,dtype:"float32"}),ZV={kernelName:yn,backendName:"webgpu",kernelFunc:Xue};function Ox(r){let{inputs:t,attrs:e,backend:o}=r,{dim:n}=e,{input:s}=t,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 JV={kernelName:na,backendName:"webgpu",kernelFunc:Ox};var Yue=ye({opType:Z.EXPM1,cpuKernelImpl:mz}),eW={kernelName:bn,backendName:"webgpu",kernelFunc:Yue};var gm=class{constructor(t,e){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: 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.component=t,this.shaderKey=`fft_${t}`}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;`,Wee=` setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); } } - `}};function Lx(r,t,e){let o=e.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:e,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=t?2*Math.PI:-2*Math.PI,f=t?u[1]:1,h=[{type:"float32",data:[d]},{type:"float32",data:[f]}],g=e.runWebGPUProgram(c,m,"float32",h);i.push(g);let x=e.runWebGPUProgram(l,m,"float32",h);i.push(x);let b=yo({inputs:{real:g,imag:x},backend:e});i.push(b);let C=pe({inputs:{x:b},backend:e,attrs:{shape:r.shape}});return i.forEach(S=>e.disposeData(S.dataId)),C}function Que(r){let{inputs:t,backend:e}=r,{input:o}=t;return Lx(o,!1,e)}var eW={kernelName:Wi,backendName:"webgpu",kernelFunc:Que};var Bx=class{constructor(t){this.outputShape=[],this.variableNames=["x"],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="flipLeftRight"}getUserCode(){return` + `}};function Mx(r,t,e){let o=e.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:e,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new gm("real",u),l=new gm("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=t?2*Math.PI:-2*Math.PI,f=t?u[1]:1,h=[{type:"float32",data:[d]},{type:"float32",data:[f]}],g=e.runWebGPUProgram(c,m,"float32",h);i.push(g);let x=e.runWebGPUProgram(l,m,"float32",h);i.push(x);let b=xo({inputs:{real:g,imag:x},backend:e});i.push(b);let C=pe({inputs:{x:b},backend:e,attrs:{shape:r.shape}});return i.forEach(S=>e.disposeData(S.dataId)),C}function Que(r){let{inputs:t,backend:e}=r,{input:o}=t;return Mx(o,!1,e)}var tW={kernelName:Bi,backendName:"webgpu",kernelFunc:Que};var Lx=class{constructor(t){this.outputShape=[],this.variableNames=["x"],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="flipLeftRight"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7479,7 +7479,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, outputValue); } } - `}};var tW={kernelName:wn,backendName:"webgpu",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new Bx(e.shape);return o.runWebGPUProgram(n,[e],e.dtype)}};var Zue=ye({opType:Z.FLOOR,cpuKernelImpl:mz}),rW={kernelName:Sn,backendName:"webgpu",kernelFunc:Zue};var Jue=et({opType:fe.FLOOR_DIV,cpuKernelImpl:dz,dtype:"int32"}),oW={kernelName:In,backendName:"webgpu",kernelFunc:Jue};var zx=class{constructor(t,e,o=!1){this.pixelsOpType=Ii.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[e,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let t=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` + `}};var rW={kernelName:Cn,backendName:"webgpu",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,o=t,n=new Lx(e.shape);return o.runWebGPUProgram(n,[e],e.dtype)}};var Zue=ye({opType:Z.FLOOR,cpuKernelImpl:dz}),oW={kernelName:wn,backendName:"webgpu",kernelFunc:Zue};var Jue=et({opType:fe.FLOOR_DIV,cpuKernelImpl:fz,dtype:"int32"}),nW={kernelName:Sn,backendName:"webgpu",kernelFunc:Jue};var Bx=class{constructor(t,e,o=!1){this.pixelsOpType=Ci.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[e,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let t=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"}; ${G("index")} { let flatIndex = index * uniforms.numChannels; @@ -7491,7 +7491,7 @@ return a / b;`,Wee=` } } } - `}};var nW={kernelName:Mu,backendName:"webgpu",kernelFunc:epe},ol,i0=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function epe(r){let{inputs:t,backend:e,attrs:o}=r,{pixels:n}=t,{numChannels:s}=o;if(n==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!="undefined"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],d=!1,f=a||i;if(u||p||f){let b;if(d)b=e.device.importExternalTexture({source:n});else{if(f){let L=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(ol==null||L!==i0)&&(i0=L,ol=document.createElement("canvas").getContext("2d",{willReadFrequently:i0})),ol.canvas.width=c,ol.canvas.height=l,ol.drawImage(n,0,0,c,l),n=ol.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,O="rgba8unorm",M=e.textureManager.acquireTexture(m[1],m[0],O,P);e.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]}],E=e.makeTensorInfo([l,c],"int32"),R=e.tensorMap.get(E.dataId);R.resource=b;let D=e.runWebGPUProgram(k,[E],"int32",_);return e.disposeData(E.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))); } } - `}};var sW={kernelName:vn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=t,u=e,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 tpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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:e,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var aW={kernelName:vo,backendName:"webgpu",kernelFunc:tpe};function rpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 tl(h,x,m,b),C.push({type:"int32",data:[S.virtualWidth]})):(S=new rl(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,"),e.runWebGPUProgram(S,g,"float32",C)}var iW={kernelName:ko,backendName:"webgpu",kernelFunc:rpe};var Wx=class{constructor(t,e){this.variableNames=["A","indices"],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=`gathernd_${t}`,this.sliceDim=t,this.uniforms=`sliceDim : i32, strides : ${ht(t)},`}getUserCode(){let t;return this.sliceDim>1?t="uniforms.strides[j]":t="uniforms.strides",` + `}};var aW={kernelName:In,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=t,u=e,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 zx(o.shape,a.shape,i.shape,l,m),f=[{type:"float32",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function tpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 yx({x:n,filter:s,convInfo:g,backend:e,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var iW={kernelName:Io,backendName:"webgpu",kernelFunc:tpe};function rpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=t,{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 Qc(h,x,m,b),C.push({type:"int32",data:[S.virtualWidth]})):(S=new Zc(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,"),e.runWebGPUProgram(S,g,"float32",C)}var uW={kernelName:vo,backendName:"webgpu",kernelFunc:rpe};var Vx=class{constructor(t,e){this.variableNames=["A","indices"],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=`gathernd_${t}`,this.sliceDim=t,this.uniforms=`sliceDim : i32, strides : ${ft(t)},`}getUserCode(){let t;return this.sliceDim>1?t="uniforms.strides[j]":t="uniforms.strides",` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7518,7 +7518,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function ope(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=e.readSync(n.dataId),C=e.bufferSync(o),S=fz(b,C,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:"int32",data:[a]},{type:"int32",data:l}],g=e.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:p}});return e.disposeData(m.dataId),e.disposeData(d.dataId),e.disposeData(g.dataId),x}var uW={kernelName:kn,backendName:"webgpu",kernelFunc:ope};var Ux=class{constructor(t,e){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.slice(),this.aShape=t,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let t=npe(this.aShape);return` + `}};function ope(r){let{inputs:t,backend:e}=r,{params:o,indices:n}=t,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:e,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:e,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(e.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=e.readSync(n.dataId),C=e.bufferSync(o),S=hz(b,C,o.dtype,u,a,c,l,o.shape,i);return e.makeTensorInfo(p,o.dtype,S.values)}let f=new Vx(a,[u,c]),h=[{type:"int32",data:[a]},{type:"int32",data:l}],g=e.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:p}});return e.disposeData(m.dataId),e.disposeData(d.dataId),e.disposeData(g.dataId),x}var pW={kernelName:vn,backendName:"webgpu",kernelFunc:ope};var Wx=class{constructor(t,e){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.slice(),this.aShape=t,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let t=npe(this.aShape);return` ${G("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); @@ -7527,13 +7527,13 @@ return a / b;`,Wee=` setOutputAtIndex(index, inBounds * getA(${t})); } } - `}};function npe(r){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],e=[];for(let o=0;oe.disposeData(D.dataId)),e.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=e.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeData(b.dataId)),x}var pW={kernelName:aa,backendName:"webgpu",kernelFunc:u0};var spe=et({opType:fe.GREATER,cpuKernelImpl:xz,dtype:"bool"}),cW={kernelName:Nn,backendName:"webgpu",kernelFunc:spe};var ape=et({opType:fe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:gz}),lW={kernelName:Tn,backendName:"webgpu",kernelFunc:ape};function ipe(r){let{inputs:t,backend:e}=r,{input:o}=t;return Lx(o,!0,e)}var mW={kernelName:Ui,backendName:"webgpu",kernelFunc:ipe};var upe=ye({opType:Z.IS_FINITE,dtype:"bool"}),dW={kernelName:_n,backendName:"webgpu",kernelFunc:upe};var ppe=ye({opType:Z.IS_INF,dtype:"bool"}),fW={kernelName:$n,backendName:"webgpu",kernelFunc:ppe};var cpe=ye({opType:Z.IS_NAN,dtype:"bool"}),hW={kernelName:En,backendName:"webgpu",kernelFunc:cpe};function lpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,"alpha : f32,");return e.runWebGPUProgram(i,[n],"float32",a)}var gW={kernelName:Rn,backendName:"webgpu",kernelFunc:lpe};var mpe=et({opType:fe.LESS,dtype:"bool",cpuKernelImpl:bz}),xW={kernelName:Dn,backendName:"webgpu",kernelFunc:mpe};var dpe=et({opType:fe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:yz}),yW={kernelName:An,backendName:"webgpu",kernelFunc:dpe};var Gx=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : 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.shaderKey="linSpace"}getUserCode(){return` + `}};function npe(r){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],e=[];for(let o=0;oe.disposeData(D.dataId)),e.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Wx(m.shape,f),g=e.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:e,attrs:{shape:u.outputShape}});return l.forEach(b=>e.disposeData(b.dataId)),x}var cW={kernelName:aa,backendName:"webgpu",kernelFunc:p0};var spe=et({opType:fe.GREATER,cpuKernelImpl:yz,dtype:"bool"}),lW={kernelName:kn,backendName:"webgpu",kernelFunc:spe};var ape=et({opType:fe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:xz}),mW={kernelName:Nn,backendName:"webgpu",kernelFunc:ape};function ipe(r){let{inputs:t,backend:e}=r,{input:o}=t;return Mx(o,!0,e)}var dW={kernelName:zi,backendName:"webgpu",kernelFunc:ipe};var upe=ye({opType:Z.IS_FINITE,dtype:"bool"}),fW={kernelName:Tn,backendName:"webgpu",kernelFunc:upe};var ppe=ye({opType:Z.IS_INF,dtype:"bool"}),hW={kernelName:_n,backendName:"webgpu",kernelFunc:ppe};var cpe=ye({opType:Z.IS_NAN,dtype:"bool"}),gW={kernelName:$n,backendName:"webgpu",kernelFunc:cpe};function lpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new Zr(n.shape,Z.LEAKYRELU,"alpha : f32,");return e.runWebGPUProgram(i,[n],"float32",a)}var xW={kernelName:En,backendName:"webgpu",kernelFunc:lpe};var mpe=et({opType:fe.LESS,dtype:"bool",cpuKernelImpl:Cz}),yW={kernelName:Rn,backendName:"webgpu",kernelFunc:mpe};var dpe=et({opType:fe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:bz}),bW={kernelName:Dn,backendName:"webgpu",kernelFunc:dpe};var Ux=class{constructor(t){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : 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.shaderKey="linSpace"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step); } } - `}};function fpe(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=(n-o)/(s-1),i=new Gx(s),p=[{type:"float32",data:[o]},{type:"float32",data:[a]}];return t.runWebGPUProgram(i,[],"float32",p)}var bW={kernelName:Fn,backendName:"webgpu",kernelFunc:fpe};var hpe=ye({opType:Z.LOG,cpuKernelImpl:Cz}),CW={kernelName:Pn,backendName:"webgpu",kernelFunc:hpe};var gpe=ye({opType:Z.LOG1P}),wW={kernelName:On,backendName:"webgpu",kernelFunc:gpe};var xpe=et({opType:fe.LOGICAL_AND,dtype:"bool"}),SW={kernelName:Mn,backendName:"webgpu",kernelFunc:xpe};var ype=ye({opType:Z.LOGICAL_NOT}),IW={kernelName:Ln,backendName:"webgpu",kernelFunc:ype};var bpe=et({opType:fe.LOGICAL_OR}),vW={kernelName:Bn,backendName:"webgpu",kernelFunc:bpe};var kW=` + `}};function fpe(r){let{backend:t,attrs:e}=r,{start:o,stop:n,num:s}=e,a=(n-o)/(s-1),i=new Ux(s),p=[{type:"float32",data:[o]},{type:"float32",data:[a]}];return t.runWebGPUProgram(i,[],"float32",p)}var CW={kernelName:An,backendName:"webgpu",kernelFunc:fpe};var hpe=ye({opType:Z.LOG,cpuKernelImpl:wz}),wW={kernelName:Fn,backendName:"webgpu",kernelFunc:hpe};var gpe=ye({opType:Z.LOG1P}),SW={kernelName:Pn,backendName:"webgpu",kernelFunc:gpe};var xpe=et({opType:fe.LOGICAL_AND,dtype:"bool"}),IW={kernelName:On,backendName:"webgpu",kernelFunc:xpe};var ype=ye({opType:Z.LOGICAL_NOT}),vW={kernelName:Mn,backendName:"webgpu",kernelFunc:ype};var bpe=et({opType:fe.LOGICAL_OR}),kW={kernelName:Ln,backendName:"webgpu",kernelFunc:bpe};var NW=` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -7543,7 +7543,7 @@ return a / b;`,Wee=` } else { powValue = exp(log(basis) * (-uniforms.beta)); } -`,Hx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` +`,Gx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7561,12 +7561,12 @@ return a / b;`,Wee=` sum = sum + z * z; } } - ${kW} + ${NW} setOutputAtIndex(index, x * powValue); } } - `}},Kx=class{constructor(t,e){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(e<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${e}`),this.outputShape=t,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` + `}},Hx=class{constructor(t,e){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(e<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${e}`),this.outputShape=t,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` var lrnSub: array; const elementsPerWorkgroup = ${this.elementsPerWorkgroup}; const maxAllowRadius = ${this.maxAllowRadius}; @@ -7594,11 +7594,11 @@ return a / b;`,Wee=` let z = lrnSub[index + i]; sum = sum + z * z; } - ${kW} + ${NW} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } - } `}};function Cpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 e.runWebGPUProgram(u,[n],n.dtype,c)}var NW={kernelName:zn,backendName:"webgpu",kernelFunc:Cpe};var qx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` + } `}};function Cpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Gx(n.shape):u=new Hx(n.shape,s);let c=[{type:"int32",data:[s]},{type:"float32",data:[a]},{type:"float32",data:[i]},{type:"float32",data:[p]}];return e.runWebGPUProgram(u,[n],n.dtype,c)}var TW={kernelName:Bn,backendName:"webgpu",kernelFunc:Cpe};var Kx=class{constructor(t){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7648,7 +7648,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, result); } } - `}};function wpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{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 e.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var TW={kernelName:Qa,backendName:"webgpu",kernelFunc:wpe};var Spe=et({opType:fe.MAX,cpuKernelImpl:Sz}),_W={kernelName:Wn,backendName:"webgpu",kernelFunc:Spe};function Ipe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return ax(n,c,"max",e)}var $W={kernelName:Un,backendName:"webgpu",kernelFunc:Ipe};function vpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 _u(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var EW={kernelName:ia,backendName:"webgpu",kernelFunc:vpe};var jx=class{constructor(t){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function wpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,y:s,dy:a}=t,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new Kx(n.shape),m=[{type:"int32",data:[i]},{type:"float32",data:[p]},{type:"float32",data:[u]},{type:"float32",data:[c]}];return e.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var _W={kernelName:Ya,backendName:"webgpu",kernelFunc:wpe};var Spe=et({opType:fe.MAX,cpuKernelImpl:Iz}),$W={kernelName:Vn,backendName:"webgpu",kernelFunc:Spe};function Ipe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1,c=w.computePool2DInfo(n.shape,s,a,u,i,p);return sx(n,c,"max",e)}var EW={kernelName:Wn,backendName:"webgpu",kernelFunc:Ipe};function vpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 wu(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 e.runWebGPUProgram(m,[n],n.dtype,d)}var RW={kernelName:ia,backendName:"webgpu",kernelFunc:vpe};var qx=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool2DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7693,7 +7693,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}},Xx=class{constructor(t){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},jx=class{constructor(t){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=t.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool3DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7751,7 +7751,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, dotProd); } } - `}};function kpe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 _u(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=e.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=e.runWebGPUProgram(g,[n,h],a.dtype,f);return e.disposeData(h.dataId),x}var RW={kernelName:Ki,backendName:"webgpu",kernelFunc:kpe};function Npe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,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 za(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=e.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=e.runWebGPUProgram(g,[n,h],i.dtype,f);return e.disposeData(h.dataId),x}var DW={kernelName:Hi,backendName:"webgpu",kernelFunc:Npe};function Tpe(r){let{inputs:t,backend:e,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=t;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 za(c,"max",!1),d=e.runWebGPUProgram(m,[p],p.dtype,l);m=new za(c,"max",!0,!0,i);let f=e.runWebGPUProgram(m,[p],"int32",l);return[d,f]}var AW={kernelName:ua,backendName:"webgpu",kernelFunc:Tpe};function _pe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,"min",e)}var FW={kernelName:Hn,backendName:"webgpu",kernelFunc:_pe};var $pe=et({opType:fe.MIN,cpuKernelImpl:Iz}),PW={kernelName:Kn,backendName:"webgpu",kernelFunc:$pe};var Yx=class{constructor(t,e,o){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((n,s)=>n[0]+t[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=t,e.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let t=this.xShape.length,e=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(","),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${t>1?`[${c}]`:""}`).join(","),n=t===1?"start":"start[i]",s=t===1?"end":"end[i]",a=t===1?"outC":"outC[i]",i=ht(t),p=t>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,t):"coords";return` + `}};function kpe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s}=t,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 wu(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=e.runWebGPUProgram(d,[a],"int32",f),g=new jx(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=e.runWebGPUProgram(g,[n,h],a.dtype,f);return e.disposeData(h.dataId),x}var DW={kernelName:Ui,backendName:"webgpu",kernelFunc:kpe};function Npe(r){let{inputs:t,backend:e,attrs:o}=r,{dy:n,input:s,output:a}=t,i=s;mm([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=e.runWebGPUProgram(d,[i],"int32",f),g=new qx(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=e.runWebGPUProgram(g,[n,h],i.dtype,f);return e.disposeData(h.dataId),x}var AW={kernelName:Wi,backendName:"webgpu",kernelFunc:Npe};function Tpe(r){let{inputs:t,backend:e,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=t;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=e.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,"max",!0,!0,i);let f=e.runWebGPUProgram(m,[p],"int32",l);return[d,f]}var FW={kernelName:ua,backendName:"webgpu",kernelFunc:Tpe};function _pe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,"min",e)}var PW={kernelName:Gn,backendName:"webgpu",kernelFunc:_pe};var $pe=et({opType:fe.MIN,cpuKernelImpl:vz}),OW={kernelName:Hn,backendName:"webgpu",kernelFunc:$pe};var Xx=class{constructor(t,e,o){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((n,s)=>n[0]+t[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=t,e.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let t=this.xShape.length,e=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(","),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${t>1?`[${c}]`:""}`).join(","),n=t===1?"start":"start[i]",s=t===1?"end":"end[i]",a=t===1?"outC":"outC[i]",i=ft(t),p=t>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,t):"coords";return` ${G("index")} { if (index < uniforms.size) { let start = ${i}(${e}); @@ -7768,7 +7768,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, getX(${p})); } } - `}};var OW={kernelName:qn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=e,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 Epe=et({opType:fe.MOD}),MW={kernelName:jn,backendName:"webgpu",kernelFunc:Epe};var Qx=class{constructor(t,e){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` + `}};var MW={kernelName:Kn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=e,i=n.map(c=>({type:"int32",data:[c[0],c[1]]})),p=new Xx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Epe=et({opType:fe.MOD}),LW={kernelName:qn,backendName:"webgpu",kernelFunc:Epe};var Yx=class{constructor(t,e){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(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;`,Wee=` setOutputAtIndexI32(index, uniforms.numOutcomes - 1); } } - `}};var Zx=class{constructor(t){this.variableNames=["logits"],this.outputShape=t,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` + `}};var Qx=class{constructor(t){this.variableNames=["logits"],this.outputShape=t,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` var buf : array; var rowMaxShared : f32; var rowSumShared : f32; @@ -7860,7 +7860,7 @@ return a / b;`,Wee=` setOutputAtCoords(row, col, value); } } - `}};function p0(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=pe({inputs:{x:n},backend:e,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=e.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n.shape}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var LW={kernelName:vs,backendName:"webgpu",kernelFunc:p0};function Rpe(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:p0({inputs:{logits:n},backend:e,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=e.runWebGPUProgram(l,[p],"int32",m);return i||e.disposeData(p.dataId),d}var BW={kernelName:Xn,backendName:"webgpu",kernelFunc:Rpe};function Dpe(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.tensorMap.get(o.dataId),[a,i]=kz(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return e.runWebGPUProgram(n,[o],o.dtype)}var zW={kernelName:pa,backendName:"webgpu",kernelFunc:Dpe};function Ape(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=Wt.nonMaxSuppressionV3Impl(u,c,a,i,p);return e.makeTensorInfo([l.length],"int32",new Int32Array(l))}var VW={kernelName:Zn,backendName:"webgpu",kernelFunc:Ape};function Fpe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Wt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var WW={kernelName:Jn,backendName:"webgpu",kernelFunc:Fpe};var Jx=class{constructor(t,e){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + `}};function c0(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{dim:s}=o,a=pe({inputs:{x:n},backend:e,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Qx(a.shape),p=e.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:e,attrs:{shape:n.shape}});return e.disposeData(a.dataId),e.disposeData(p.dataId),u}var BW={kernelName:Is,backendName:"webgpu",kernelFunc:c0};function Rpe(r){let{inputs:t,backend:e,attrs:o}=r,{logits:n}=t,{numSamples:s,seed:a,normalized:i}=o,p=i?n:c0({inputs:{logits:n},backend:e,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Yx(u,s),m=[{type:"float32",data:[a]},{type:"int32",data:[c]}],d=e.runWebGPUProgram(l,[p],"int32",m);return i||e.disposeData(p.dataId),d}var zW={kernelName:jn,backendName:"webgpu",kernelFunc:Rpe};function Dpe(r){let{inputs:t,backend:e}=r,{x:o}=t;if(e.shouldExecuteOnCPU([o])){let s=e.tensorMap.get(o.dataId),[a,i]=Nz(s.values,o.shape,o.dtype);return e.makeTensorInfo(i,o.dtype,a)}let n=new Zr(o.shape,Z.NEG);return e.runWebGPUProgram(n,[o],o.dtype)}var VW={kernelName:pa,backendName:"webgpu",kernelFunc:Dpe};function Ape(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=e.readSync(n.dataId),c=e.readSync(s.dataId),{selectedIndices:l}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return e.makeTensorInfo([l.length],"int32",new Int32Array(l))}var WW={kernelName:Qn,backendName:"webgpu",kernelFunc:Ape};function Fpe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:o}=r,{boxes:n,scores:s}=t,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=e.readSync(n.dataId),l=e.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Vt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var UW={kernelName:Zn,backendName:"webgpu",kernelFunc:Fpe};var Zx=class{constructor(t,e){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7868,7 +7868,7 @@ return a / b;`,Wee=` f32(i32(round(getX(coords.x))) == coords.y))); } } - `}};function Ppe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{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:e,attrs:{shape:[u]}}),m=[{type:"float32",data:[i]},{type:"float32",data:[p]}],d=e.runWebGPUProgram(c,[l],s,m);e.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:e,attrs:{shape:f}});return e.disposeData(d.dataId),h}var UW={kernelName:es,backendName:"webgpu",kernelFunc:Ppe};function bm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="complex64"){let n=Ni({inputs:{input:o},backend:e}),s=bm({inputs:{x:n},backend:e}),a=Mp({inputs:{input:o},backend:e}),i=bm({inputs:{x:a},backend:e}),p=yo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return kt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:e})}var GW={kernelName:Sa,backendName:"webgpu",kernelFunc:bm};function HW(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=Ni({inputs:{input:o},backend:e}),s=HW({inputs:{x:n},backend:e}),a=Mp({inputs:{input:o},backend:e}),i=bm({inputs:{x:a},backend:e}),p=yo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return kt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var KW={kernelName:ca,backendName:"webgpu",kernelFunc:HW};function Ope(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Mx({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Mx({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=n0({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var qW={kernelName:la,backendName:"webgpu",kernelFunc:Ope};function c0(r,t=!1){let e=r.length,o=ht(e),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(","),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:""}`).join(","),a=e>1?`${o}(${n})`:`${n}`,i=e>1?`${o}(${s})`:`${s}`,p=e>1?"any(paddedCoords < start)":"paddedCoords < start",u=e>1?"any(paddedCoords >= end)":"paddedCoords >= end",c=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + `}};function Ppe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n}=t,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Zx(u,a),l=pe({inputs:{x:n},backend:e,attrs:{shape:[u]}}),m=[{type:"float32",data:[i]},{type:"float32",data:[p]}],d=e.runWebGPUProgram(c,[l],s,m);e.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:e,attrs:{shape:f}});return e.disposeData(d.dataId),h}var GW={kernelName:Jn,backendName:"webgpu",kernelFunc:Ppe};function xm(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="complex64"){let n=Ii({inputs:{input:o},backend:e}),s=xm({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=xm({inputs:{x:a},backend:e}),p=xo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:e})}var HW={kernelName:Sa,backendName:"webgpu",kernelFunc:xm};function KW(r){let{inputs:t,backend:e}=r,{x:o}=t;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=Ii({inputs:{input:o},backend:e}),s=KW({inputs:{x:n},backend:e}),a=$p({inputs:{input:o},backend:e}),i=xm({inputs:{x:a},backend:e}),p=xo({inputs:{real:s,imag:i},backend:e});return e.disposeData(n.dataId),e.disposeData(s.dataId),e.disposeData(a.dataId),e.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:e})}var qW={kernelName:ca,backendName:"webgpu",kernelFunc:KW};function Ope(r){let{inputs:t,backend:e,attrs:o}=r,{axis:n}=o;if(t.length===1)return Ox({inputs:{input:t[0]},backend:e,attrs:{dim:n}});let s=t[0].shape,a=t[0].dtype;t.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=t.map(c=>{let l=Ox({inputs:{input:c},backend:e,attrs:{dim:n}});return i.push(l),l}),u=s0({inputs:p,backend:e,attrs:{axis:n}});return i.forEach(c=>e.disposeData(c.dataId)),u}var jW={kernelName:la,backendName:"webgpu",kernelFunc:Ope};function l0(r,t=!1){let e=r.length,o=ft(e),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(","),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${e>1?`[${m}]`:""}`).join(","),a=e>1?`${o}(${n})`:`${n}`,i=e>1?`${o}(${s})`:`${s}`,p=e>1?"any(paddedCoords < start)":"paddedCoords < start",u=e>1?"any(paddedCoords >= end)":"paddedCoords >= end",c=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` let start = ${a}; let end = ${i}; if (${p} || ${u}) { @@ -7877,14 +7877,14 @@ return a / b;`,Wee=` let coords = paddedCoords - start; setOutputAtIndex(index, getX(${c})); } - `}var ey=class{constructor(t,e){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((o,n)=>o[0]+t[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),e.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=t,this.shaderKey="pad"}getUserCode(){return` + `}var Jx=class{constructor(t,e){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.map((o,n)=>o[0]+t[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),e.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=t,this.shaderKey="pad"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${c0(this.xShape)} + ${l0(this.xShape)} } } - `}};var Mpe=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Ft({inputs:{x:n},backend:e});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return kt({backend:e,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 e.runWebGPUProgram(p,[n],n.dtype,i)},jW={kernelName:ts,backendName:"webgpu",kernelFunc:Mpe};var Lpe=et({opType:fe.POW}),XW={kernelName:rs,backendName:"webgpu",kernelFunc:Lpe};function Bpe(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=new ki(fe.PRELU,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],"float32")}var YW={kernelName:os,backendName:"webgpu",kernelFunc:Bpe};function zpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return eo(n,s,a,"prod",e)}var QW={kernelName:ns,backendName:"webgpu",kernelFunc:zpe};var Vpe=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=_z(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},ZW={kernelName:ma,backendName:"webgpu",kernelFunc:Vpe};var Wpe=et({opType:fe.DIV}),JW={kernelName:hn,backendName:"webgpu",kernelFunc:Wpe};var Upe=ye({opType:Z.RECIPROCAL}),eU={kernelName:ss,backendName:"webgpu",kernelFunc:Upe};var Gpe=ye({opType:Z.RELU}),tU={kernelName:as,backendName:"webgpu",kernelFunc:Gpe};var Hpe=ye({opType:Z.RELU6}),rU={kernelName:ps,backendName:"webgpu",kernelFunc:Hpe};var ty=class{constructor(t,e,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + `}};var Mpe=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return At({inputs:{x:n},backend:e});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return vt({backend:e,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 Jx(n.shape,s);return e.runWebGPUProgram(p,[n],n.dtype,i)},XW={kernelName:es,backendName:"webgpu",kernelFunc:Mpe};var Lpe=et({opType:fe.POW}),YW={kernelName:ts,backendName:"webgpu",kernelFunc:Lpe};function Bpe(r){let{inputs:t,backend:e}=r,{x:o,alpha:n}=t,s=new Si(fe.PRELU,o.shape,n.shape);return e.runWebGPUProgram(s,[o,n],"float32")}var QW={kernelName:rs,backendName:"webgpu",kernelFunc:Bpe};function zpe(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{axis:s,keepDims:a}=o;return Jr(n,s,a,"prod",e)}var ZW={kernelName:os,backendName:"webgpu",kernelFunc:zpe};var Vpe=r=>{let{backend:t,attrs:e}=r,{start:o,stop:n,step:s,dtype:a}=e,i=$z(o,n,s,a);return t.makeTensorInfo([i.length],a,i)},JW={kernelName:ma,backendName:"webgpu",kernelFunc:Vpe};var Wpe=et({opType:fe.DIV}),eU={kernelName:fn,backendName:"webgpu",kernelFunc:Wpe};var Upe=ye({opType:Z.RECIPROCAL}),tU={kernelName:ns,backendName:"webgpu",kernelFunc:Upe};var Gpe=ye({opType:Z.RELU}),rU={kernelName:ss,backendName:"webgpu",kernelFunc:Gpe};var Hpe=ye({opType:Z.RELU6}),oU={kernelName:us,backendName:"webgpu",kernelFunc:Hpe};var ey=class{constructor(t,e,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7927,7 +7927,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, newValue); } } - `}};function Kpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGPUProgram(f,[n],"float32",d)}var oU={kernelName:us,backendName:"webgpu",kernelFunc:Kpe};var ry=class{constructor(t,e){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, + `}};function Kpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 ey(n.shape,p,u);return e.runWebGPUProgram(f,[n],"float32",d)}var nU={kernelName:is,backendName:"webgpu",kernelFunc:Kpe};var ty=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeBilinearBackprop_${e}`}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8002,7 +8002,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, accumulator); } } - `}};function qpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 e.runWebGPUProgram(C,[s],s.dtype,S)}var nU={kernelName:ei,backendName:"webgpu",kernelFunc:qpe};var oy=class{constructor(t,e,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let t;return this.halfPixelCenters?t="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":t="vec2(rc) * effectiveInputOverOutputRatioRC",` + `}};function qpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 ty(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 e.runWebGPUProgram(C,[s],s.dtype,S)}var sU={kernelName:Ja,backendName:"webgpu",kernelFunc:qpe};var ry=class{constructor(t,e,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[t[0],e,o,t[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let t;return this.halfPixelCenters?t="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":t="vec2(rc) * effectiveInputOverOutputRatioRC",` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -8033,7 +8033,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, newValue); } } - `}};function jpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 e.runWebGPUProgram(f,[n],n.dtype,d)}var sU={kernelName:is,backendName:"webgpu",kernelFunc:jpe};var ny=class{constructor(t,e){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, + `}};function jpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n}=t,{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 ry(n.shape,p,u,a);return e.runWebGPUProgram(f,[n],n.dtype,d)}var aU={kernelName:as,backendName:"webgpu",kernelFunc:jpe};var oy=class{constructor(t,e){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=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=e,this.shaderKey=`resizeNearestNeigborBackprop_${e}`}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8093,7 +8093,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, accumulator); } } - `}};function Xpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 e.runWebGPUProgram(C,[s],s.dtype,S)}var aU={kernelName:Ja,backendName:"webgpu",kernelFunc:Xpe};var sy=class{constructor(t){this.variableNames=["x"],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.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + `}};function Xpe(r){let{inputs:t,backend:e,attrs:o}=r,{images:n,dy:s}=t,{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 oy(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 e.runWebGPUProgram(C,[s],s.dtype,S)}var iU={kernelName:Za,backendName:"webgpu",kernelFunc:Xpe};var ny=class{constructor(t){this.variableNames=["x"],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.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;`,Wee=` reverseCoords[1], reverseCoords[2], reverseCoords[3])); } } - `}};function Ype(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length;if(a===0)return Ft({inputs:{x:n},backend:e});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:e,attrs:{shape:p}}),d=new sy(p),f=e.runWebGPUProgram(d,[m],m.dtype,l);e.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:e,attrs:{shape:i}});return e.disposeData(f.dataId),h}var iU={kernelName:cs,backendName:"webgpu",kernelFunc:Ype};var ay=class{constructor(t,e){this.outputShape=[],this.variableNames=["x"],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.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function Ype(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{dims:s}=o,a=n.shape.length;if(a===0)return At({inputs:{x:n},backend:e});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:e,attrs:{shape:p}}),d=new ny(p),f=e.runWebGPUProgram(d,[m],m.dtype,l);e.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:e,attrs:{shape:i}});return e.disposeData(f.dataId),h}var uU={kernelName:ps,backendName:"webgpu",kernelFunc:Ype};var sy=class{constructor(t,e){this.outputShape=[],this.variableNames=["x"],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.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`,this.shaderKey="rotate",this.outputShape=t,typeof e=="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` ${G("index")} { if (index < uniforms.size) { @@ -8144,7 +8144,7 @@ return a / b;`,Wee=` setOutputAtIndex(index, outputValue); } } - `}};var uU={kernelName:As,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,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 Qpe=ye({opType:Z.ROUND}),pU={kernelName:ls,backendName:"webgpu",kernelFunc:Qpe};var Zpe=ye({opType:Z.RSQRT,cpuKernelImpl:$z}),cU={kernelName:ms,backendName:"webgpu",kernelFunc:Zpe};var Va=class{constructor(t,e,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(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.sliceDimGreaterThanOne=e>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}`;let u=ht(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let t="";this.indicesRank===1?t="coords[0]":this.indicesRank===2&&(t="coords[0], j");let e=`getIndices(${t})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` + `}};var pU={kernelName:Ds,backendName:"webgpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=t,i=e,p=new sy(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 Qpe=ye({opType:Z.ROUND}),cU={kernelName:cs,backendName:"webgpu",kernelFunc:Qpe};var Zpe=ye({opType:Z.RSQRT,cpuKernelImpl:Ez}),lU={kernelName:ls,backendName:"webgpu",kernelFunc:Zpe};var za=class{constructor(t,e,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(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.sliceDimGreaterThanOne=e>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 t="";this.indicesRank===1?t="coords[0]":this.indicesRank===2&&(t="coords[0], j");let e=`getIndices(${t})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; } @@ -8170,12 +8170,12 @@ return a / b;`,Wee=` flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Nu(this.type)}(${i}); + ${Cu(this.type)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices?Qr("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices?Yr("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} } - }`}};function Jpe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=f.dtype,g=kt({backend:e,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 Va(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=e.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:e,attrs:{shape:a}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(S.dataId),k}var lU={kernelName:ds,backendName:"webgpu",kernelFunc:Jpe};var iy=class{constructor(t,e){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",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.side=e,this.shaderKey=`search_sorted_${e}`}getUserCode(){return` + }`}};function Jpe(r){let{inputs:t,backend:e,attrs:o}=r,{indices:n,updates:s}=t,{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 e.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:e,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({backend:e,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=e.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:e,attrs:{shape:a}});return e.disposeData(d.dataId),e.disposeData(f.dataId),e.disposeData(S.dataId),k}var mU={kernelName:ms,backendName:"webgpu",kernelFunc:Jpe};var ay=class{constructor(t,e){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",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.side=e,this.shaderKey=`search_sorted_${e}`}getUserCode(){return` fn findBound(batch: i32, value: f32) -> i32 { var left = i32(0); var right = uniforms.numInputs; @@ -8197,7 +8197,7 @@ return a / b;`,Wee=` setOutputAtIndexI32(index, findBound(coords[0], value)); } } - `}};function ece(r){let{inputs:t,backend:e,attrs:o}=r,{sortedSequence:n,values:s}=t,{side:a}=o,i=new iy([s.shape[0],s.shape[1]],a),p=[{type:"int32",data:[n.shape[1]]}];return e.runWebGPUProgram(i,[n,s],"int32",p)}var mU={kernelName:hs,backendName:"webgpu",kernelFunc:ece};var uy=class{constructor(t,e,o){this.variableNames=["c","a","b"],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.cRank=t,this.rank=o,this.shaderKey="select"}getUserCode(){let t,e;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)e="resRC",t="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)e="resRC",t="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let t=ht(this.outputShape.length),e=Zv(this.newDim);return` - ${cm(this.paddedXShape,"PaddedX")} + `}};function tce(r){let{inputs:t,backend:e}=r,{condition:o,t:n,e:s}=t,a=new iy(o.shape.length,n.shape,n.shape.length);return e.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var fU={kernelName:fa,backendName:"webgpu",kernelFunc:tce};var rce=ye({opType:Z.SELU}),hU={kernelName:hs,backendName:"webgpu",kernelFunc:rce};var oce=ye({opType:Z.SIGMOID}),gU={kernelName:bs,backendName:"webgpu",kernelFunc:oce};var nce=ye({opType:Z.SIGN}),xU={kernelName:ys,backendName:"webgpu",kernelFunc:nce};var sce=ye({opType:Z.SIN}),yU={kernelName:gs,backendName:"webgpu",kernelFunc:sce};var ace=ye({opType:Z.SINH}),bU={kernelName:xs,backendName:"webgpu",kernelFunc:ace};var ice=ye({opType:Z.SOFTPLUS}),CU={kernelName:Cs,backendName:"webgpu",kernelFunc:ice};var uy=class{constructor(t,e,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 t=ft(this.outputShape.length),e=Jv(this.newDim);return` + ${um(this.paddedXShape,"PaddedX")} ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${t}(${e}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${c0(this.xShape,!0)} + ${l0(this.xShape,!0)} } } - `}};var uce=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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=e.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeData(g.dataId),x},CU={kernelName:ga,backendName:"webgpu",kernelFunc:uce};var cy=class{constructor(t,e,o){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.type=o,this.dispatchLayout=X([e]),this.dispatch=H(this.dispatchLayout,[e],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` + `}};var uce=r=>{let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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 uy(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=e.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeData(g.dataId),x},wU={kernelName:ga,backendName:"webgpu",kernelFunc:uce};var py=class{constructor(t,e,o){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.type=o,this.dispatchLayout=X([e]),this.dispatch=H(this.dispatchLayout,[e],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` ${G("index")} { if (index < uniforms.sparseSize) { let indexInSegmentIds = index / uniforms.segmentSize; @@ -8229,17 +8229,17 @@ return a / b;`,Wee=` let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${Qr("&result[outIndex]","value",this.type)} + ${Yr("&result[outIndex]","value",this.type)} } } - `}},ly=class{constructor(t,e){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[t],this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` + `}},cy=class{constructor(t,e){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[t],this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` ${G("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; - ${Qr("&result[segmentId]","1","int32")} + ${Yr("&result[segmentId]","1","int32")} } } - `}},my=class{constructor(t,e){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.type=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` + `}},ly=class{constructor(t,e){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.type=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let segmentId = index / uniforms.segmentSize; @@ -8249,21 +8249,21 @@ return a / b;`,Wee=` } } } - `}};function dy(r,t,e,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(t.shape),u=n.readSync(e.dataId),l=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=kt({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,t,e],i,g,h);if(o)return x;let b=kt({backend:n,attrs:{shape:[l],value:0,dtype:"int32"}});m=new ly(l,e.shape);let C=n.runWebGPUProgram(m,[e],"int32",null,b),S=kt({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 pce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return dy(o,n,s,!1,e)}var wU={kernelName:ya,backendName:"webgpu",kernelFunc:pce};function cce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return dy(o,n,s,!0,e)}var SU={kernelName:ba,backendName:"webgpu",kernelFunc:cce};var fy=class{constructor(t,e){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n0?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 py(d,f,i);let g=[{type:"int32",data:[a]},{type:"int32",data:[f]}],x=n.runWebGPUProgram(m,[r,t,e],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:"int32"}});m=new cy(l,e.shape);let C=n.runWebGPUProgram(m,[e],"int32",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new ly(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 pce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return my(o,n,s,!1,e)}var SU={kernelName:ya,backendName:"webgpu",kernelFunc:pce};function cce(r){let{inputs:t,backend:e}=r,{data:o,indices:n,segmentIds:s}=t;return my(o,n,s,!0,e)}var IU={kernelName:ba,backendName:"webgpu",kernelFunc:cce};var dy=class{constructor(t,e){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(t.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${t}aShape)`;let e=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=e.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Oz(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return e.runWebGPUProgram(a,[n],n.dtype)}var IU={kernelName:po,backendName:"webgpu",kernelFunc:Cm};function mce(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),D=e.bufferSync(s),P=y.decodeString(e.readSync(a.dataId)[0]),O=Ez(R,D,i,m,c,u,p,l,P,d);return e.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:e,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:e,attrs:{shape:[u,c]}}):Ft({inputs:{x:s},backend:e}),x=g.dtype,b=e.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:e,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({inputs:{x:C},backend:e,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 Va([u,c],p,h.shape.length,g.shape.length,l,f,x,d);e.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new Va([u,c],p,h.shape.length,b.shape.length,l,f,x,d);e.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new Va([u,c],p,h.shape.length,g.shape.length,l,f,x);e.runWebGPUProgram(R,[g,h],x,_,S)}}let E=pe({inputs:{x:S},backend:e,attrs:{shape:i}});return e.disposeData(h.dataId),e.disposeData(g.dataId),e.disposeData(C.dataId),e.disposeData(b.dataId),e.disposeData(S.dataId),E}var vU={kernelName:ks,backendName:"webgpu",kernelFunc:mce};function dce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var kU={kernelName:xa,backendName:"webgpu",kernelFunc:dce};var fce=ye({opType:Z.SQRT}),NU={kernelName:Ss,backendName:"webgpu",kernelFunc:fce};var TU={kernelName:Xi,backendName:"webgpu",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t,n=new Jr(e.shape,Z.SQUARE);return o.runWebGPUProgram(n,[e],e.dtype)}};var hce=et({opType:fe.SQUARED_DIFFERENCE}),_U={kernelName:Ns,backendName:"webgpu",kernelFunc:hce};function gce({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return e.runWebGPUProgram(n,[o],o.dtype,s)}var $U={kernelName:So,backendName:"webgpu",kernelFunc:gce};var hy=class{constructor(t){this.variableNames=["x"],this.workPerThread=1,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.workPerThread,1,1]);let e=ht(this.outputShape.length);this.uniforms=`begin : ${e}, strides : ${e}, `,this.shaderKey="stridedSlice"}getUserCode(){let t=this.outputShape.length,e="";if(t===1)e="coords * uniforms.strides + uniforms.begin";else{let n=0;e=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` + `}};function lce(r,t=""){if(r>=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${t}aShape)`;let e=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=e.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Mz(c,s);return e.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new dy(n.shape,s);return e.runWebGPUProgram(a,[n],n.dtype)}var vU={kernelName:uo,backendName:"webgpu",kernelFunc:ym};function mce(r){let{inputs:t,backend:e,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{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=e.bufferSync(n),D=e.bufferSync(s),P=y.decodeString(e.readSync(a.dataId)[0]),O=Rz(R,D,i,m,c,u,p,l,P,d);return e.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:e,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:e,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:e}),x=g.dtype,b=e.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:e,attrs:{shape:Array(f.length).fill(1)}}),S=ym({inputs:{x:C},backend:e,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);e.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);e.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);e.runWebGPUProgram(R,[g,h],x,_,S)}}let E=pe({inputs:{x:S},backend:e,attrs:{shape:i}});return e.disposeData(h.dataId),e.disposeData(g.dataId),e.disposeData(C.dataId),e.disposeData(b.dataId),e.disposeData(S.dataId),E}var kU={kernelName:vs,backendName:"webgpu",kernelFunc:mce};function dce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n}=t,{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:e,attrs:{begin:c,size:d}});return c[i]+=m,f})}var NU={kernelName:xa,backendName:"webgpu",kernelFunc:dce};var fce=ye({opType:Z.SQRT}),TU={kernelName:ws,backendName:"webgpu",kernelFunc:fce};var _U={kernelName:Ki,backendName:"webgpu",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,o=t,n=new Zr(e.shape,Z.SQUARE);return o.runWebGPUProgram(n,[e],e.dtype)}};var hce=et({opType:fe.SQUARED_DIFFERENCE}),$U={kernelName:ks,backendName:"webgpu",kernelFunc:hce};function gce({inputs:r,attrs:t,backend:e}){let{x:o}=r,n=new Zr(o.shape,Z.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return e.runWebGPUProgram(n,[o],o.dtype,s)}var EU={kernelName:wo,backendName:"webgpu",kernelFunc:gce};var fy=class{constructor(t){this.variableNames=["x"],this.workPerThread=1,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.workPerThread,1,1]);let e=ft(this.outputShape.length);this.uniforms=`begin : ${e}, strides : ${e}, `,this.shaderKey="stridedSlice"}getUserCode(){let t=this.outputShape.length,e="";if(t===1)e="coords * uniforms.strides + uniforms.begin";else{let n=0;e=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` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${e})); } } - `}};function xce(r){let{inputs:t,backend:e,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}=ct.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({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 _=ct.computeOutShape(b,C,S),E=Hs({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=pe({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else if(e.shouldExecuteOnCPU([n])){let E=e.readSync(n.dataId),R=me(n.shape,n.dtype,E),D=Az(d,R,S,b);k=e.makeTensorInfo(f,n.dtype,D.values)}else{let E=new hy(d),R=[{type:"int32",data:b},{type:"int32",data:S}],D=e.runWebGPUProgram(E,[n],n.dtype,R);k=pe({inputs:{x:D},backend:e,attrs:{shape:f}}),e.disposeData(D.dataId)}return k}var EU={kernelName:Ts,backendName:"webgpu",kernelFunc:xce};function yce(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=Fz(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var RU={kernelName:Ca,backendName:"webgpu",kernelFunc:yce};var bce=et({opType:fe.SUB,cpuKernelImpl:Pz,supportsComplex:!0}),DU={kernelName:_s,backendName:"webgpu",kernelFunc:bce};var Cce=ye({opType:Z.TAN}),AU={kernelName:$s,backendName:"webgpu",kernelFunc:Cce};var wce=ye({opType:Z.TANH}),FU={kernelName:Es,backendName:"webgpu",kernelFunc:wce};function Sce(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:e,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:e,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:e,attrs:{reps:Array(m.length).fill(1)}}),b=new Va([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=e.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:e,attrs:{shape:n.shape}});return d.forEach(E=>e.disposeData(E.dataId)),_}var PU={kernelName:fs,backendName:"webgpu",kernelFunc:Sce};var gy=class{constructor(t){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function xce(r){let{inputs:t,backend:e,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=pe({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),E=Hs({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=pe({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else if(e.shouldExecuteOnCPU([n])){let E=e.readSync(n.dataId),R=me(n.shape,n.dtype,E),D=Fz(d,R,S,b);k=e.makeTensorInfo(f,n.dtype,D.values)}else{let E=new fy(d),R=[{type:"int32",data:b},{type:"int32",data:S}],D=e.runWebGPUProgram(E,[n],n.dtype,R);k=pe({inputs:{x:D},backend:e,attrs:{shape:f}}),e.disposeData(D.dataId)}return k}var RU={kernelName:Ns,backendName:"webgpu",kernelFunc:xce};function yce(r){let{inputs:t,backend:e,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=t,m=e.readSync(c.dataId),d=e.readSync(l.dataId),[f,h]=Pz(m,d,n,s,a,i,p,u);return[e.makeTensorInfo([f.length],"string",f),e.makeTensorInfo(l.shape,"int32",h)]}var DU={kernelName:Ca,backendName:"webgpu",kernelFunc:yce};var bce=et({opType:fe.SUB,cpuKernelImpl:Oz,supportsComplex:!0}),AU={kernelName:Ts,backendName:"webgpu",kernelFunc:bce};var Cce=ye({opType:Z.TAN}),FU={kernelName:_s,backendName:"webgpu",kernelFunc:Cce};var wce=ye({opType:Z.TANH}),PU={kernelName:$s,backendName:"webgpu",kernelFunc:wce};function Sce(r){let{inputs:t,backend:e,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=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 e.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:e,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:e,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:e,attrs:{shape:m}});d.push(g);let x=ym({inputs:{x:g},backend:e,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=e.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:e,attrs:{shape:n.shape}});return d.forEach(E=>e.disposeData(E.dataId)),_}var OU={kernelName:ds,backendName:"webgpu",kernelFunc:Sce};var hy=class{constructor(t){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`,this.shaderKey="swap"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8331,7 +8331,7 @@ return a / b;`,Wee=` } } } - `}},xy=class{constructor(t){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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` + `}},gy=class{constructor(t){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=t,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` ${G("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); @@ -8390,7 +8390,7 @@ return a / b;`,Wee=` } } } - `}};function nl(r,t){t!==null&&r.disposeData(t.dataId)}function OU(r){let t=1;for(;tf===null?[l,l]:[l,f],g=(k,_,E)=>{let R=h(),D=new gy(E),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=e.runWebGPUProgram(D,R,"int32",O),nl(e,M)};for(let k=1;k=1;E/=2)g(_,E,[c,d])}for(let k=d;k>m;k/=2){let _=h(),E=new xy([c,k/2]),D=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"int32",data:[m]}],P=f;f=e.runWebGPUProgram(E,_,"int32",D),nl(e,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:e,attrs:{begin:0,size:[c,s]}}),nl(e,x);let b=u0({inputs:{x:l,indices:f},backend:e,attrs:{axis:1,batchDims:1}});nl(e,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:e}),nl(e,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:e}),nl(e,S),[b,f]}var MU={kernelName:Rs,backendName:"webgpu",kernelFunc:Ice};var yy=class{constructor(t){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : 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.shaderKey="transform"}getUserCode(){return` + `}};function el(r,t){t!==null&&r.disposeData(t.dataId)}function MU(r){let t=1;for(;tf===null?[l,l]:[l,f],g=(k,_,E)=>{let R=h(),D=new hy(E),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=e.runWebGPUProgram(D,R,"int32",O),el(e,M)};for(let k=1;k=1;E/=2)g(_,E,[c,d])}for(let k=d;k>m;k/=2){let _=h(),E=new gy([c,k/2]),D=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"int32",data:[m]}],P=f;f=e.runWebGPUProgram(E,_,"int32",D),el(e,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:e,attrs:{begin:0,size:[c,s]}}),el(e,x);let b=p0({inputs:{x:l,indices:f},backend:e,attrs:{axis:1,batchDims:1}});el(e,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:e}),el(e,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:e}),el(e,S),[b,f]}var LU={kernelName:Es,backendName:"webgpu",kernelFunc:Ice};var xy=class{constructor(t){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : 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.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;`,Wee=` setOutputAtIndex(index, outputValue); } } - `}};function vce(r){let{inputs:t,backend:e,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 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 e.runWebGPUProgram(x,[n,s],"float32",S)}var LU={kernelName:Ds,backendName:"webgpu",kernelFunc:vce};function kce(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeData(h.dataId)),f}var BU={kernelName:wa,backendName:"webgpu",kernelFunc:kce};var by=class{constructor(t,e,o){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 + `}};function vce(r){let{inputs:t,backend:e,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 xy(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 e.runWebGPUProgram(x,[n,s],"float32",S)}var BU={kernelName:Rs,backendName:"webgpu",kernelFunc:vce};function kce(r){let{inputs:t,backend:e,attrs:o}=r,{value:n}=t,{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;he.disposeData(h.dataId)),f}var zU={kernelName:wa,backendName:"webgpu",kernelFunc:kce};var yy=class{constructor(t,e,o){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,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"}getUserCode(){return` ${G("index")} { if (index < uniforms.xSize) { @@ -8519,8 +8519,8 @@ return a / b;`,Wee=` let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${Qr("&result[flatIndex]","value",this.type)} + ${Yr("&result[flatIndex]","value",this.type)} } } } - `}};function Nce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=yr({inputs:{x:n},backend:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=kt({backend:e,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=e.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:e,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let E=w.getUndoAxesPermutation(c);_=yr({inputs:{x:_},backend:e,attrs:{perm:E}})}return p.forEach(E=>e.disposeData(E.dataId)),_}var zU={kernelName:Ji,backendName:"webgpu",kernelFunc:Nce};var Tce=[rz,Bz,zz,Vz,Wz,Uz,Hz,Kz,qz,jz,Xz,Yz,Qz,Zz,Jz,rV,oV,nV,sV,aV,uV,pV,cV,fV,hV,gV,nz,yV,CV,wV,SV,IV,vV,kV,NV,TV,_V,$V,DV,AV,FV,PV,MV,LV,OV,BV,zV,VV,WV,UV,KV,qV,jV,XV,YV,QV,ZV,JV,eW,ez,tW,nW,rW,oW,sW,aW,iW,uW,pW,cW,lW,oz,mW,bV,dW,fW,hW,gW,xW,yW,bW,wW,CW,SW,IW,vW,NW,TW,eV,_W,$W,DW,EW,RW,AW,tV,FW,PW,OW,MW,BW,GV,zW,VW,WW,lV,UW,KW,qW,jW,XW,YW,QW,ZW,mV,JW,eU,tU,rU,tz,oU,nU,sU,aU,iU,uU,pU,cU,lU,mU,dU,fU,hU,gU,xU,yU,iV,$U,EU,RU,LW,bU,CU,wU,SU,vU,kU,NU,TU,_U,DU,HV,AU,FU,PU,IU,MU,LU,Gz,BU,zU,GW];for(let r of Tce)ri(r);var VU="4.11.0",_ce="4.11.0",$ce="4.11.0",Ece="4.11.0",Rce="4.11.0",Dce="4.11.0",Ace={tfjs:VU,"tfjs-core":VU,"tfjs-converter":_ce,"tfjs-backend-cpu":$ce,"tfjs-backend-webgl":Ece,"tfjs-backend-wasm":Rce,"tfjs-backend-webgpu":Dce};export{Xs as Abs,Wo as Acos,Uo as Acosh,np as AdadeltaOptimizer,sp as AdagradOptimizer,ap as AdamOptimizer,ip as AdamaxOptimizer,uo as Add,Go as AddN,Ho as All,Ko as Any,Ys as ArgMax,Qs as ArgMin,qo as Asin,jo as Asinh,Xo as Atan,Qo as Atan2,Yo as Atanh,Zo as AvgPool,Zs as AvgPool3D,Ai as AvgPool3DGrad,Di as AvgPoolGrad,pm as BackendWasm,Jo as BatchMatMul,Js as BatchToSpaceND,en as Bincount,ja as BitwiseAnd,ea as BroadcastArgs,Bce as BroadcastTo,bo as Cast,tn as Ceil,Co as ClipByValue,Fi as Complex,Pi as ComplexAbs,ta as Concat,rn as Conv2D,Oi as Conv2DBackpropFilter,on as Conv2DBackpropInput,nn as Conv3D,Xa as Conv3DBackpropFilterV2,sn as Conv3DBackpropInputV2,an as Cos,un as Cosh,ln as CropAndResize,pn as Cumprod,cn as Cumsum,zo as DataStorage,ra as DenseBincount,mn as DepthToSpace,dn as DepthwiseConv2dNative,Mi as DepthwiseConv2dNativeBackpropFilter,Li as DepthwiseConv2dNativeBackpropInput,oa as Diag,fn as Dilation2D,zi as Dilation2DBackpropFilter,Bi as Dilation2DBackpropInput,Pu as Draw,nw as ENV,Vi as Einsum,gn as Elu,Ya as EluGrad,hl as Environment,yn as Equal,xn as Erf,bn as Exp,na as ExpandDims,Cn as Expm1,Wi as FFT,sa as Fill,wn as FlipLeftRight,Sn as Floor,In as FloorDiv,Mu as FromPixels,vn as FusedBatchNorm,vo as FusedConv2D,ko as FusedDepthwiseConv2D,kp as GPGPUContext,kn as GatherNd,aa as GatherV2,Bl as GraphModel,Nn as Greater,Tn as GreaterEqual,Ui as IFFT,wo as Identity,Gi as Imag,_n as IsFinite,$n as IsInf,En as IsNan,ao as KernelBackend,zn as LRN,Qa as LRNGrad,Rn as LeakyRelu,Dn as Less,An as LessEqual,Fn as LinSpace,Pn as Log,On as Log1p,zce as LogSoftmax,Mn as LogicalAnd,Ln as LogicalNot,Bn as LogicalOr,$0 as LogicalXor,Vce as LowerBound,xu as MathBackendCPU,wu as MathBackendWebGL,Wce as MatrixBandPart,Vn as Max,Un as MaxPool,ia as MaxPool3D,Ki as MaxPool3DGrad,Hi as MaxPoolGrad,ua as MaxPoolWithArgmax,Wn as Maximum,Gn as Mean,Hn as Min,Kn as Minimum,qn as MirrorPad,jn as Mod,up as MomentumOptimizer,Xn as Multinomial,Yn as Multiply,pa as Neg,Zn as NonMaxSuppressionV3,Za as NonMaxSuppressionV4,Jn as NonMaxSuppressionV5,Qn as NotEqual,kw as OP_SCOPE_SUFFIX,es as OneHot,ca as OnesLike,Nr as Optimizer,Pl as OptimizerConstructors,la as Pack,ts as PadV2,Uce as Pool,rs as Pow,os as Prelu,ns as Prod,pp as RMSPropOptimizer,Qp as RaggedGather,Zp as RaggedRange,Jp as RaggedTensorToTensor,ma as Range,hw as Rank,qi as Real,hn as RealDiv,ss as Reciprocal,Rt as Reduction,as as Relu,ps as Relu6,da as Reshape,us as ResizeBilinear,ei as ResizeBilinearGrad,is as ResizeNearestNeighbor,Ja as ResizeNearestNeighborGrad,cs as Reverse,As as RotateWithOffset,ls as Round,ms as Rsqrt,mi as SGDOptimizer,ds as ScatterNd,hs as SearchSorted,fa as Select,gs as Selu,Cs as Sigmoid,bs as Sign,xs as Sin,ys as Sinh,ha as Slice,vs as Softmax,ws as Softplus,ga as SpaceToBatchND,ji as SparseFillEmptyRows,ti as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,ks as SparseToDense,xa as SplitV,Ss as Sqrt,Xi as Square,Ns as SquaredDifference,Ou as StaticRegexReplace,So as Step,Ts as StridedSlice,Ca as StringNGrams,Yi as StringSplit,Qi as StringToHashBucketFast,_s as Sub,Is as Sum,$s as Tan,Es as Tanh,ut as Tensor,tt as TensorBuffer,fs as TensorScatterUpdate,po as Tile,Rs as TopK,Ds as Transform,co as Transpose,Zi as Unique,wa as Unpack,Ji as UnsortedSegmentSum,Gce as UpperBound,oi as Variable,Tu as WebGPUBackend,Sa as ZerosLike,Io as _FusedMatMul,Jt as abs,kk as acos,Nk as acosh,Ce as add,Tk as addN,_k as all,$k as any,Ek as argMax,Rk as argMin,Dk as asin,Ak as asinh,Fk as atan,Pk as atan2,Ok as atanh,fd as avgPool,Bk as avgPool3d,vde as backend,w as backend_util,zk as basicLSTMCell,au as batchNorm,Wk as batchNorm2d,Uk as batchNorm3d,Gk as batchNorm4d,hd as batchToSpaceND,gd as bincount,Hk as bitwiseAnd,E6 as booleanMaskAsync,Kk as broadcastArgs,iu as broadcastTo,Ir as broadcast_util,oT as browser,me as buffer,We as cast,qk as ceil,jk as clipByValue,Ur as clone,Er as complex,bt as concat,Xk as concat1d,Yk as concat2d,Qk as concat3d,Zk as concat4d,Jk as conv1d,uu as conv2d,e2 as conv2dTranspose,t2 as conv3d,o2 as conv3dTranspose,Zce as copyRegisteredKernels,n2 as cos,s2 as cosh,Rl as cosineWindow,a2 as cumprod,i2 as cumsum,vr as customGrad,u2 as denseBincount,Pw as deprecationWarn,p2 as depthToSpace,lc as depthwiseConv2d,A5 as deregisterOp,ou as device_util,c2 as diag,l2 as dilation2d,dde as disableDeprecationWarnings,Mt as dispose,fde as disposeVariables,je as div,d2 as divNoNan,f2 as dot,W6 as dropout,pu as einsum,Cd as elu,mde as enableDebugMode,lde as enableProdMode,Qw as enclosingPowerOfTwo,pr as engine,h2 as ensureShape,A as env,bd as equal,g2 as erf,b2 as euclideanNorm,$o as exp,Ms as expandDims,C2 as expm1,wd as eye,fc as fft,Ea as fill,Sde as findBackend,Ide as findBackendFactory,Sd as floor,dd as floorDiv,MD as forceHalfFloat,Zw as fused,Id as gather,z6 as gatherND,af as gather_util,Cde as getBackend,iw as getGradient,tc as getKernel,Ym as getKernelsForBackend,Zse as getThreadsCount,cv as gpgpu_util,AK as grad,FK as grads,qu as greater,vd as greaterEqual,Ju as ifft,lu as imag,Kj as image,G6 as inTopKAsync,fi as io,Kd as irfft,w2 as isFinite,S2 as isInf,I2 as isNaN,Rr as keep,Wt as kernel_impls,kd as leakyRelu,_l as less,mc as lessEqual,qj as linalg,v2 as linspace,$8 as loadGraphModel,E8 as loadGraphModelSync,k2 as localResponseNormalization,pi as log,Nd as log1p,N2 as logSigmoid,T2 as logSoftmax,$d as logSumExp,ju as logicalAnd,Ed as logicalNot,Rd as logicalOr,_2 as logicalXor,jj as losses,$2 as lowerBound,Ze as matMul,JN as math,Ra as max,Ad as maxPool,E2 as maxPool3d,R2 as maxPoolWithArgmax,Fd as maximum,Xu as mean,hde as memory,D2 as meshgrid,Tl as min,Yu as minimum,A2 as mirrorPad,F2 as mod,P2 as moments,A6 as movingAverage,se as mul,O2 as multiRNNCell,M2 as multinomial,cr as neg,pS as nextFrame,Ku as norm,Pd as notEqual,El as oneHot,Da as ones,L2 as onesLike,N as op,B2 as outerProduct,Aa as pad,z2 as pad1d,V2 as pad2d,W2 as pad3d,U2 as pad4d,G2 as pool,ui as pow,Md as prelu,md as print,H2 as prod,gde as profile,K2 as raggedGather,q2 as raggedRange,j2 as raggedTensorToTensor,X2 as rand,g1 as randomGamma,Ud as randomNormal,x1 as randomStandardNormal,dc as randomUniform,y1 as randomUniformInt,mu as range,bde as ready,ci as real,b1 as reciprocal,su as registerBackend,Xce as registerGradient,ri as registerKernel,D5 as registerOp,du as relu,Gd as relu6,wde as removeBackend,W as reshape,mo as reverse,C1 as reverse1d,w1 as reverse2d,S1 as reverse3d,I1 as reverse4d,hc as rfft,Hd as round,v1 as rsqrt,ke as scalar,P6 as scatterND,hu as scatter_util,$l as searchSorted,k1 as selu,N1 as separableConv2d,WN as serialization,yde as setBackend,kde as setPlatform,Qse as setThreadsCount,Xse as setWasmPath,Yse as setWasmPaths,vI as setWebGLContext,T1 as setdiff1dAsync,Tc as shared,$a as sigmoid,_1 as sign,Hj as signal,$1 as sin,E1 as sinh,Xe as slice,R1 as slice1d,D1 as slice2d,A1 as slice3d,F1 as slice4d,ct as slice_util,P1 as softmax,_d as softplus,Od as spaceToBatchND,Xj as sparse,L6 as sparseToDense,Gj as spectral,li as split,Dr as sqrt,er as square,qd as squaredDifference,gc as squeeze,kr as stack,jd as step,O1 as stridedSlice,Yj as string,Te as sub,ot as sum,ni as sumOutType,M1 as tan,Nl as tanh,ur as tensor,tr as tensor1d,fu as tensor2d,Xd as tensor3d,L1 as tensor4d,B1 as tensor5d,z1 as tensor6d,W1 as tensorScatterUpdate,ek as tensor_util,h1 as test_util,De as tidy,cu as tile,xde as time,U1 as topk,TGe as train,yc as transpose,G1 as truncatedNormal,H1 as unique,Qce as unregisterGradient,Yce as unregisterKernel,K1 as unsortedSegmentSum,fo as unstack,dt as upcastType,q1 as upperBound,y as util,PK as valueAndGrad,OK as valueAndGrads,j1 as variable,zw as variableGrads,Ace as version,D8 as version_converter,_X as version_core,cY as version_cpu,Jse as version_wasm,s9 as version_webgl,Cat as webgl,Ac as webgl_util,Yv as webgpu_util,lo as where,Qd as whereAsync,Gr as zeros,Ht as zerosLike}; + `}};function Nce(r){let{inputs:t,backend:e,attrs:o}=r,{x:n,segmentIds:s}=t,{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:e,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:e,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:e,attrs:{shape:g,value:0,dtype:h}}),b=new yy(f.shape,g,h),C=[{type:"int32",data:[a]},{type:"int32",data:[y.sizeFromShape(f.shape)]}],S=e.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:e,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let E=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:e,attrs:{perm:E}})}return p.forEach(E=>e.disposeData(E.dataId)),_}var VU={kernelName:Yi,backendName:"webgpu",kernelFunc:Nce};var Tce=[oz,zz,Vz,Wz,Uz,Gz,Kz,qz,jz,Xz,Yz,Qz,Zz,Jz,eV,oV,nV,sV,aV,iV,pV,cV,lV,hV,gV,xV,sz,bV,wV,SV,IV,vV,kV,NV,TV,_V,$V,EV,AV,FV,PV,OV,LV,BV,MV,zV,VV,WV,UV,GV,qV,jV,XV,YV,QV,ZV,JV,eW,tW,tz,rW,sW,oW,nW,aW,iW,uW,pW,cW,lW,mW,nz,dW,CV,fW,hW,gW,xW,yW,bW,CW,SW,wW,IW,vW,kW,TW,_W,tV,$W,EW,AW,RW,DW,FW,rV,PW,OW,MW,LW,zW,HV,VW,WW,UW,mV,GW,qW,jW,XW,YW,QW,ZW,JW,dV,eU,tU,rU,oU,rz,nU,sU,aU,iU,uU,pU,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,uV,EU,RU,DU,BW,CU,wU,SU,IU,kU,NU,TU,_U,$U,AU,KV,FU,PU,OU,vU,LU,BU,Hz,zU,VU,HW];for(let r of Tce)ti(r);var WU="4.14.0",_ce="4.14.0",$ce="4.14.0",Ece="4.14.0",Rce="4.14.0",Dce="4.14.0",Ace={tfjs:WU,"tfjs-core":WU,"tfjs-converter":_ce,"tfjs-backend-cpu":$ce,"tfjs-backend-webgl":Ece,"tfjs-backend-wasm":Rce,"tfjs-backend-webgpu":Dce};var bQt=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Qu as AdadeltaOptimizer,Zu as AdagradOptimizer,Ju as AdamOptimizer,ep as AdamaxOptimizer,io 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,Ei as AvgPool3DGrad,$i as AvgPoolGrad,im as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,Bce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Ri as Complex,Di as ComplexAbs,ta as Concat,tn as Conv2D,Ai 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,Fi as DepthwiseConv2dNativeBackpropFilter,Pi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Mi as Dilation2DBackpropFilter,Oi as Dilation2DBackpropInput,_u as Draw,ow as ENV,Li as Einsum,hn as Elu,Xa as EluGrad,ll as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,Bi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Eu as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,xp as GPGPUContext,vn as GatherNd,aa as GatherV2,Ml as GraphModel,kn as Greater,Nn as GreaterEqual,zi as IFFT,Co as Identity,Vi as Imag,Tn as IsFinite,_n as IsInf,$n as IsNan,so as KernelBackend,Bn as LRN,Ya as LRNGrad,En as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,zce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,E0 as LogicalXor,Vce as LowerBound,hc as MathBackendCPU,Oc as MathBackendWebGL,Wce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Ui as MaxPool3DGrad,Wi as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,tp as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,kw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Dl as OptimizerConstructors,la as Pack,es as PadV2,Uce as Pool,ts as Pow,rs as Prelu,os as Prod,rp as RMSPropOptimizer,Up as RaggedGather,Gp as RaggedRange,Hp as RaggedTensorToTensor,ma as Range,hw as Rank,Gi as Real,fn as RealDiv,ns as Reciprocal,Et 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,li 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,Hi as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,Ki as Square,ks as SquaredDifference,$u as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,qi as StringSplit,ji as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,$s as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,uo as Tile,Es as TopK,Rs as Transform,po as Transpose,Xi as Unique,wa as Unpack,Yi as UnsortedSegmentSum,Gce as UpperBound,ri as Variable,Kc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Nk as acos,Tk as acosh,Ce as add,_k as addN,$k as all,Ek as any,Rk as argMax,Dk as argMin,Ak as asin,Fk as asinh,Pk as atan,Ok as atan2,Mk as atanh,md as avgPool,zk as avgPool3d,vde as backend,w as backend_util,Vk as basicLSTMCell,ru as batchNorm,Uk as batchNorm2d,Gk as batchNorm3d,Hk as batchNorm4d,dd as batchToSpaceND,fd as bincount,Kk as bitwiseAnd,E6 as booleanMaskAsync,qk as broadcastArgs,ou as broadcastTo,Sr as broadcast_util,nT as browser,me as buffer,We as cast,jk as ceil,Xk as clipByValue,Wr as clone,$r as complex,yt as concat,Yk as concat1d,Qk as concat2d,Zk as concat3d,Jk as concat4d,e2 as conv1d,nu as conv2d,t2 as conv2dTranspose,r2 as conv3d,n2 as conv3dTranspose,Zce as copyRegisteredKernels,s2 as cos,a2 as cosh,_l as cosineWindow,i2 as cumprod,u2 as cumsum,Ir as customGrad,p2 as denseBincount,Pw as deprecationWarn,c2 as depthToSpace,oc as depthwiseConv2d,A5 as deregisterOp,Ji as device_util,l2 as diag,m2 as dilation2d,dde as disableDeprecationWarnings,Ot as dispose,fde as disposeVariables,je as div,f2 as divNoNan,h2 as dot,W6 as dropout,su as einsum,yd as elu,mde as enableDebugMode,lde as enableProdMode,Qw as enclosingPowerOfTwo,ur as engine,g2 as ensureShape,A as env,xd as equal,x2 as erf,C2 as euclideanNorm,_o as exp,Ms as expandDims,w2 as expm1,bd as eye,ac as fft,Ea as fill,Sde as findBackend,Ide as findBackendFactory,Cd as floor,ld as floorDiv,LD as forceHalfFloat,Zw as fused,wd as gather,z6 as gatherND,sf as gather_util,Cde as getBackend,aw as getGradient,qp as getKernel,jm as getKernelsForBackend,Zse as getThreadsCount,lv as gpgpu_util,AK as grad,FK as grads,zu as greater,Sd as greaterEqual,Ku as ifft,iu as imag,Kj as image,G6 as inTopKAsync,mi as io,Gd as irfft,S2 as isFinite,I2 as isInf,v2 as isNaN,Er as keep,Vt as kernel_impls,Id as leakyRelu,kl as less,nc as lessEqual,qj as linalg,k2 as linspace,$8 as loadGraphModel,E8 as loadGraphModelSync,N2 as localResponseNormalization,ui as log,vd as log1p,T2 as logSigmoid,_2 as logSoftmax,Td as logSumExp,Vu as logicalAnd,_d as logicalNot,$d as logicalOr,$2 as logicalXor,jj as losses,E2 as lowerBound,Ze as matMul,eT as math,Ra as max,Rd as maxPool,R2 as maxPool3d,D2 as maxPoolWithArgmax,Dd as maximum,Wu as mean,hde as memory,A2 as meshgrid,vl as min,Uu as minimum,F2 as mirrorPad,P2 as mod,O2 as moments,A6 as movingAverage,se as mul,M2 as multiRNNCell,L2 as multinomial,pr as neg,pS as nextFrame,bQt as node,Bu as norm,Ad as notEqual,Tl as oneHot,Da as ones,B2 as onesLike,N as op,z2 as outerProduct,Aa as pad,V2 as pad1d,W2 as pad2d,U2 as pad3d,G2 as pad4d,H2 as pool,ii as pow,Pd as prelu,cd as print,K2 as prod,gde as profile,q2 as raggedGather,j2 as raggedRange,X2 as raggedTensorToTensor,Y2 as rand,x1 as randomGamma,Vd as randomNormal,y1 as randomStandardNormal,sc as randomUniform,b1 as randomUniformInt,uu as range,bde as ready,pi as real,C1 as reciprocal,tu as registerBackend,Xce as registerGradient,ti as registerKernel,D5 as registerOp,pu as relu,Wd as relu6,wde as removeBackend,W as reshape,lo as reverse,w1 as reverse1d,S1 as reverse2d,I1 as reverse3d,v1 as reverse4d,ic as rfft,Ud as round,k1 as rsqrt,ke as scalar,P6 as scatterND,lu as scatter_util,Nl as searchSorted,N1 as selu,T1 as separableConv2d,UN as serialization,yde as setBackend,kde as setPlatform,Qse as setThreadsCount,Xse as setWasmPath,Yse as setWasmPaths,kI as setWebGLContext,_1 as setdiff1dAsync,wc as shared,$a as sigmoid,$1 as sign,Hj as signal,E1 as sin,R1 as sinh,Xe as slice,D1 as slice1d,A1 as slice2d,F1 as slice3d,P1 as slice4d,pt as slice_util,O1 as softmax,Nd as softplus,Fd as spaceToBatchND,Xj as sparse,L6 as sparseToDense,Gj as spectral,ci as split,Rr as sqrt,Zt as square,Hd as squaredDifference,uc as squeeze,vr as stack,Kd as step,M1 as stridedSlice,Yj as string,Te as sub,ot as sum,oi as sumOutType,L1 as tan,Il as tanh,ar as tensor,Jt as tensor1d,cu as tensor2d,qd as tensor3d,B1 as tensor4d,z1 as tensor5d,V1 as tensor6d,U1 as tensorScatterUpdate,tk as tensor_util,g1 as test_util,De as tidy,au as tile,xde as time,G1 as topk,TGe as train,cc as transpose,H1 as truncatedNormal,K1 as unique,Qce as unregisterGradient,Yce as unregisterKernel,q1 as unsortedSegmentSum,mo as unstack,dt as upcastType,j1 as upperBound,y as util,PK as valueAndGrad,OK as valueAndGrads,X1 as variable,zw as variableGrads,Ace as version,D8 as version_converter,_X as version_core,cY as version_cpu,Jse as version_wasm,s9 as version_webgl,Cat as webgl,Tc as webgl_util,Qv as webgpu_util,co as where,Xd as whereAsync,Ur as zeros,Gt as zerosLike}; diff --git a/dist/tfjs.version.js b/dist/tfjs.version.js index 2f442fdb..15752b1c 100644 --- a/dist/tfjs.version.js +++ b/dist/tfjs.version.js @@ -4,4 +4,4 @@ author: ' */ -var e="4.11.0";var s="4.11.0";var t="4.11.0";var n="4.11.0";var r="4.11.0";var i="4.11.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}; +var e="4.14.0";var s="4.14.0";var t="4.14.0";var n="4.14.0";var r="4.14.0";var i="4.14.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}; diff --git a/package.json b/package.json index 7dfa91bc..f2057a40 100644 --- a/package.json +++ b/package.json @@ -95,8 +95,8 @@ "@types/offscreencanvas": "^2019.7.3", "@typescript-eslint/eslint-plugin": "^6.13.2", "@typescript-eslint/parser": "^6.13.2", - "@vladmandic/build": "^0.9.2", - "@vladmandic/pilogger": "^0.4.8", + "@vladmandic/build": "^0.9.3", + "@vladmandic/pilogger": "^0.4.9", "@vladmandic/tfjs": "github:vladmandic/tfjs", "canvas": "^2.11.2", "esbuild": "^0.19.8", @@ -111,6 +111,6 @@ "rimraf": "^5.0.5", "tslib": "^2.6.2", "typedoc": "0.25.4", - "typescript": "~5.1.0" + "typescript": "~5.3.0" } } diff --git a/src/util/env.ts b/src/util/env.ts index f28adbee..2a644b91 100644 --- a/src/util/env.ts +++ b/src/util/env.ts @@ -99,7 +99,7 @@ export class Env { set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; } constructor() { - this.browser = typeof navigator !== 'undefined' && Object.keys(navigator).length !== 0; + 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: tf.version['tfjs-core'] }; this.offscreen = typeof OffscreenCanvas !== 'undefined'; diff --git a/test/build.log b/test/build.log index 15ab1ea1..c7d87fcf 100644 --- a/test/build.log +++ b/test/build.log @@ -1,51 +1,51 @@ -2023-09-18 12:49:46 DATA:  Build {"name":"@vladmandic/human","version":"3.1.2"} -2023-09-18 12:49:46 INFO:  Application: {"name":"@vladmandic/human","version":"3.1.2"} -2023-09-18 12:49:46 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2023-09-18 12:49:46 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.17.19","typescript":"5.1.6","typedoc":"0.23.28","eslint":"8.49.0"} -2023-09-18 12:49:46 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2023-09-18 12:49:46 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358} -2023-09-18 12:49:46 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} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":675948,"outputBytes":320762} -2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":675956,"outputBytes":320766} -2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":676994,"outputBytes":320877} -2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1372,"outputBytes":667} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675658,"outputBytes":319325} -2023-09-18 12:49:46 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1372,"outputBytes":1264969} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1939960,"outputBytes":1579985} -2023-09-18 12:49:46 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1939960,"outputBytes":2057229} -2023-09-18 12:49:50 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":15} -2023-09-18 12:49:51 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} -2023-09-18 12:49:51 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} -2023-09-18 12:49:51 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17503,"outputBytes":9403} -2023-09-18 12:49:51 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} -2023-09-18 12:49:59 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0} -2023-09-18 12:49:59 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2023-09-18 12:49:59 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2023-09-18 12:49:59 INFO:  Done... -2023-09-18 12:49:59 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2023-09-18 12:49:59 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2023-09-18 12:49:59 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2023-09-18 12:50:00 STATE: API-Extractor: {"succeeeded":true,"errors":0,"warnings":211} -2023-09-18 12:50:00 STATE: Filter: {"input":"types/human.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.esm.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node.d.ts"} -2023-09-18 12:50:00 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2023-09-18 12:50:00 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2023-09-18 12:50:00 STATE: Models {"folder":"./models","models":12} -2023-09-18 12:50:00 STATE: Models {"folder":"../human-models/models","models":44} -2023-09-18 12:50:00 STATE: Models {"folder":"../blazepose/model/","models":4} -2023-09-18 12:50:00 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2023-09-18 12:50:00 STATE: Models {"folder":"../efficientpose/models","models":3} -2023-09-18 12:50:00 STATE: Models {"folder":"../insightface/models","models":5} -2023-09-18 12:50:00 STATE: Models {"folder":"../movenet/models","models":3} -2023-09-18 12:50:00 STATE: Models {"folder":"../nanodet/models","models":4} -2023-09-18 12:50:00 STATE: Models: {"count":58,"totalSize":380063249} -2023-09-18 12:50:00 INFO:  Human Build complete... {"logFile":"test/build.log"} +2023-12-06 14:57:40 DATA:  Build {"name":"@vladmandic/human","version":"3.2.0"} +2023-12-06 14:57:40 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.0"} +2023-12-06 14:57:40 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2023-12-06 14:57:40 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.8","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"} +2023-12-06 14:57:40 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2023-12-06 14:57:40 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2023-12-06 14:57:40 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} +2023-12-06 14:57:40 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} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676002,"outputBytes":320790} +2023-12-06 14:57:40 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} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676010,"outputBytes":320794} +2023-12-06 14:57:40 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} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677048,"outputBytes":320905} +2023-12-06 14:57:40 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} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675735,"outputBytes":319371} +2023-12-06 14:57:40 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":1265002} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1940047,"outputBytes":1580115} +2023-12-06 14:57:40 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1940047,"outputBytes":2069972} +2023-12-06 14:57:42 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14} +2023-12-06 14:57:44 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} +2023-12-06 14:57:44 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} +2023-12-06 14:57:44 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} +2023-12-06 14:57:44 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} +2023-12-06 14:57:51 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0} +2023-12-06 14:57:51 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2023-12-06 14:57:51 INFO:  Done... +2023-12-06 14:57:51 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2023-12-06 14:57:51 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2023-12-06 14:57:51 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2023-12-06 14:57:52 ERROR: API-Extractor: {} +2023-12-06 14:57:52 STATE: Filter: {"input":"types/human.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.esm.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node.d.ts"} +2023-12-06 14:57:52 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2023-12-06 14:57:52 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2023-12-06 14:57:52 STATE: Models {"folder":"./models","models":12} +2023-12-06 14:57:52 STATE: Models {"folder":"../human-models/models","models":44} +2023-12-06 14:57:52 STATE: Models {"folder":"../blazepose/model/","models":4} +2023-12-06 14:57:52 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2023-12-06 14:57:52 STATE: Models {"folder":"../efficientpose/models","models":3} +2023-12-06 14:57:52 STATE: Models {"folder":"../insightface/models","models":5} +2023-12-06 14:57:52 STATE: Models {"folder":"../movenet/models","models":3} +2023-12-06 14:57:52 STATE: Models {"folder":"../nanodet/models","models":4} +2023-12-06 14:57:52 STATE: Models: {"count":58,"totalSize":380063249} +2023-12-06 14:57:52 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/test/test.log b/test/test.log index 29200871..02ae18da 100644 --- a/test/test.log +++ b/test/test.log @@ -1,905 +1,905 @@ -2023-09-18 12:45:27 INFO:  @vladmandic/human version 3.1.2 -2023-09-18 12:45:27 INFO:  User: vlado Platform: linux Arch: x64 Node: v20.6.1 -2023-09-18 12:45:27 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]},{"cmd":"../demo/nodejs/node-bench.js","args":[]},{"cmd":"../test/test-node-emotion.js","args":[]}] -2023-09-18 12:45:27 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start -2023-09-18 12:45:28 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start -2023-09-18 12:45:29 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start -2023-09-18 12:45:30 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start -2023-09-18 12:45:30 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start -2023-09-18 12:45:31 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start -2023-09-18 12:45:33 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start -2023-09-18 12:45:45 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start -2023-09-18 12:45:46 INFO:  {"cmd":"../demo/nodejs/node-bench.js","args":[]} start -2023-09-18 12:46:01 INFO:  {"cmd":"../test/test-node-emotion.js","args":[]} start -2023-09-18 12:46:07 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] -2023-09-18 12:46:07 INFO:  -2023-09-18 12:46:07 INFO:  test-node-load.js start -2023-09-18 12:46:07 INFO:  test-node-load.js load start {"human":"3.1.2","tf":"4.11.0","progress":0} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":0,"progress":0} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":12,"progress":0} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":26,"progress":0.12865823126207815} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":40,"progress":0.33826045252170456} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":64,"progress":0.4726970548784964} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":77,"progress":0.68355493315821} -2023-09-18 12:46:07 STATE: test-node-load.js passed {"progress":1} -2023-09-18 12:46:07 INFO:  test-node-load.js load final {"progress":1} -2023-09-18 12:46:07 DATA:  test-node-load.js load interval {"elapsed":435,"progress":1} -2023-09-18 12:46:07 INFO:  -2023-09-18 12:46:07 INFO:  test-node-gear.js start -2023-09-18 12:46:08 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] -2023-09-18 12:46:09 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg -2023-09-18 12:46:09 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92,"emotion":[]} -2023-09-18 12:46:09 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg -2023-09-18 12:46:09 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}],"emotion":[]} -2023-09-18 12:46:09 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg -2023-09-18 12:46:09 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99,"emotion":[]} -2023-09-18 12:46:10 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg -2023-09-18 12:46:10 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"male","emotion":[]} -2023-09-18 12:46:10 INFO:  -2023-09-18 12:46:10 INFO:  test-backend-node.js start -2023-09-18 12:46:10 INFO:  test-backend-node.js test: configuration validation -2023-09-18 12:46:10 STATE: test-backend-node.js passed: configuration default validation [] -2023-09-18 12:46:10 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2023-09-18 12:46:10 INFO:  test-backend-node.js test: model load -2023-09-18 12:46:10 STATE: test-backend-node.js passed: models loaded 11 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"file://models/handlandmark-lite.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"}] -2023-09-18 12:46:10 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} -2023-09-18 12:46:10 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2023-09-18 12:46:10 INFO:  test-backend-node.js test: warmup -2023-09-18 12:46:10 STATE: test-backend-node.js passed: create human -2023-09-18 12:46:10 INFO:  test-backend-node.js human version: 3.1.2 -2023-09-18 12:46:10 INFO:  test-backend-node.js platform: linux x64 agent: NodeJS v20.6.1 -2023-09-18 12:46:10 INFO:  test-backend-node.js tfjs version: 4.11.0 -2023-09-18 12:46:10 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v20.6.1","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.11.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":172} -2023-09-18 12:46:10 STATE: test-backend-node.js passed: set backend: tensorflow -2023-09-18 12:46:10 STATE: test-backend-node.js tensors 1785 -2023-09-18 12:46:10 STATE: test-backend-node.js result: defined models: 11 loaded models: 11 -2023-09-18 12:46:10 STATE: test-backend-node.js passed: load models 11 -2023-09-18 12:46:10 STATE: test-backend-node.js passed: warmup: none default -2023-09-18 12:46:10 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2023-09-18 12:46:10 DATA:  test-backend-node.js result: performance: load: null total: null -2023-09-18 12:46:10 STATE: test-backend-node.js passed: warmup none result match -2023-09-18 12:46:10 STATE: test-backend-node.js event: image -2023-09-18 12:46:10 STATE: test-backend-node.js event: detect -2023-09-18 12:46:10 STATE: test-backend-node.js event: warmup -2023-09-18 12:46:10 STATE: test-backend-node.js passed: warmup: face default -2023-09-18 12:46:10 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2023-09-18 12:46:10 DATA:  test-backend-node.js result: performance: load: null total: 420 -2023-09-18 12:46:10 STATE: test-backend-node.js passed: warmup face result match -2023-09-18 12:46:10 STATE: test-backend-node.js event: image -2023-09-18 12:46:11 STATE: test-backend-node.js event: detect -2023-09-18 12:46:11 STATE: test-backend-node.js event: warmup -2023-09-18 12:46:11 STATE: test-backend-node.js passed: warmup: body default -2023-09-18 12:46:11 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:11 DATA:  test-backend-node.js result: performance: load: null total: 323 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: warmup body result match -2023-09-18 12:46:11 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2023-09-18 12:46:11 INFO:  test-backend-node.js test: details verification -2023-09-18 12:46:11 STATE: test-backend-node.js start default -2023-09-18 12:46:11 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:11 STATE: test-backend-node.js event: image -2023-09-18 12:46:11 STATE: test-backend-node.js event: detect -2023-09-18 12:46:11 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default -2023-09-18 12:46:11 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:11 DATA:  test-backend-node.js result: performance: load: null total: 311 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face length 1 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face score 1 0.93 1 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face arrays 4 478 1024 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details face liveness 0.83 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details body length 1 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details body 0.92 17 6 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details hand length 1 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details hand 0.51 0.73 point -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details hand arrays 21 5 7 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details gesture length 7 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details object length 1 -2023-09-18 12:46:11 STATE: test-backend-node.js passed: details object 0.72 person -2023-09-18 12:46:11 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2023-09-18 12:46:11 STATE: test-backend-node.js event: image -2023-09-18 12:46:12 STATE: test-backend-node.js event: detect -2023-09-18 12:46:12 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2023-09-18 12:46:12 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2023-09-18 12:46:12 STATE: test-backend-node.js event: image -2023-09-18 12:46:12 STATE: test-backend-node.js event: detect -2023-09-18 12:46:12 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 -2023-09-18 12:46:12 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:12 STATE: test-backend-node.js event: image -2023-09-18 12:46:13 STATE: test-backend-node.js event: detect -2023-09-18 12:46:13 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2023-09-18 12:46:13 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:13 STATE: test-backend-node.js event: image -2023-09-18 12:46:13 STATE: test-backend-node.js event: detect -2023-09-18 12:46:13 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 -2023-09-18 12:46:13 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2023-09-18 12:46:13 STATE: test-backend-node.js event: image -2023-09-18 12:46:13 STATE: test-backend-node.js event: detect -2023-09-18 12:46:13 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2023-09-18 12:46:13 INFO:  test-backend-node.js test default -2023-09-18 12:46:13 STATE: test-backend-node.js start async -2023-09-18 12:46:14 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:14 STATE: test-backend-node.js event: image -2023-09-18 12:46:14 STATE: test-backend-node.js event: detect -2023-09-18 12:46:14 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async -2023-09-18 12:46:14 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:14 DATA:  test-backend-node.js result: performance: load: null total: 311 -2023-09-18 12:46:14 STATE: test-backend-node.js passed: default result face match 1 female 0.97 -2023-09-18 12:46:14 INFO:  test-backend-node.js test sync -2023-09-18 12:46:14 STATE: test-backend-node.js start sync -2023-09-18 12:46:14 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:14 STATE: test-backend-node.js event: image -2023-09-18 12:46:15 STATE: test-backend-node.js event: detect -2023-09-18 12:46:15 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync -2023-09-18 12:46:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:15 DATA:  test-backend-node.js result: performance: load: null total: 318 -2023-09-18 12:46:15 STATE: test-backend-node.js passed: default sync 1 female 0.97 -2023-09-18 12:46:15 INFO:  test-backend-node.js test: image process -2023-09-18 12:46:15 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:15 STATE: test-backend-node.js passed: image input null [1,256,256,3] -2023-09-18 12:46:15 INFO:  test-backend-node.js test: image null -2023-09-18 12:46:15 STATE: test-backend-node.js passed: invalid input could not convert input to tensor -2023-09-18 12:46:15 INFO:  test-backend-node.js test face similarity -2023-09-18 12:46:15 STATE: test-backend-node.js start face similarity -2023-09-18 12:46:15 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:15 STATE: test-backend-node.js event: image -2023-09-18 12:46:15 STATE: test-backend-node.js event: detect -2023-09-18 12:46:15 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity -2023-09-18 12:46:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2023-09-18 12:46:15 DATA:  test-backend-node.js result: performance: load: null total: 308 -2023-09-18 12:46:15 STATE: test-backend-node.js start face similarity -2023-09-18 12:46:15 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:15 STATE: test-backend-node.js event: image -2023-09-18 12:46:15 STATE: test-backend-node.js event: detect -2023-09-18 12:46:15 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity -2023-09-18 12:46:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:15 DATA:  test-backend-node.js result: performance: load: null total: 301 -2023-09-18 12:46:15 STATE: test-backend-node.js start face similarity -2023-09-18 12:46:15 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:15 STATE: test-backend-node.js event: image -2023-09-18 12:46:16 STATE: test-backend-node.js event: detect -2023-09-18 12:46:16 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity -2023-09-18 12:46:16 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2023-09-18 12:46:16 DATA:  test-backend-node.js result: performance: load: null total: 274 -2023-09-18 12:46:16 STATE: test-backend-node.js passed: face descriptor -2023-09-18 12:46:16 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} -2023-09-18 12:46:16 INFO:  test-backend-node.js test object -2023-09-18 12:46:16 STATE: test-backend-node.js start object -2023-09-18 12:46:16 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:16 STATE: test-backend-node.js event: image -2023-09-18 12:46:16 STATE: test-backend-node.js event: detect -2023-09-18 12:46:16 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:46:16 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:16 DATA:  test-backend-node.js result: performance: load: null total: 299 -2023-09-18 12:46:16 STATE: test-backend-node.js passed: centernet -2023-09-18 12:46:16 STATE: test-backend-node.js start object -2023-09-18 12:46:17 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:17 STATE: test-backend-node.js event: image -2023-09-18 12:46:17 STATE: test-backend-node.js event: detect -2023-09-18 12:46:17 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:46:17 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:17 DATA:  test-backend-node.js result: performance: load: null total: 294 -2023-09-18 12:46:17 STATE: test-backend-node.js passed: nanodet -2023-09-18 12:46:17 INFO:  test-backend-node.js test sensitive -2023-09-18 12:46:17 STATE: test-backend-node.js start sensitive -2023-09-18 12:46:18 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:18 STATE: test-backend-node.js event: image -2023-09-18 12:46:18 STATE: test-backend-node.js event: detect -2023-09-18 12:46:18 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive -2023-09-18 12:46:18 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:18 DATA:  test-backend-node.js result: performance: load: null total: 266 -2023-09-18 12:46:18 STATE: test-backend-node.js passed: sensitive result match -2023-09-18 12:46:18 STATE: test-backend-node.js passed: sensitive face result match -2023-09-18 12:46:18 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2023-09-18 12:46:18 STATE: test-backend-node.js passed: sensitive body result match -2023-09-18 12:46:18 STATE: test-backend-node.js passed: sensitive hand result match -2023-09-18 12:46:18 INFO:  test-backend-node.js test body -2023-09-18 12:46:18 STATE: test-backend-node.js start blazepose -2023-09-18 12:46:20 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:20 STATE: test-backend-node.js event: image -2023-09-18 12:46:20 STATE: test-backend-node.js event: detect -2023-09-18 12:46:20 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose -2023-09-18 12:46:20 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2023-09-18 12:46:20 DATA:  test-backend-node.js result: performance: load: null total: 370 -2023-09-18 12:46:20 STATE: test-backend-node.js passed: blazepose -2023-09-18 12:46:20 STATE: test-backend-node.js start efficientpose -2023-09-18 12:46:21 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:21 STATE: test-backend-node.js event: image -2023-09-18 12:46:21 STATE: test-backend-node.js event: detect -2023-09-18 12:46:21 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose -2023-09-18 12:46:21 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2023-09-18 12:46:21 DATA:  test-backend-node.js result: performance: load: null total: 306 -2023-09-18 12:46:21 STATE: test-backend-node.js passed: efficientpose -2023-09-18 12:46:21 STATE: test-backend-node.js start posenet -2023-09-18 12:46:22 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:22 STATE: test-backend-node.js event: image -2023-09-18 12:46:22 STATE: test-backend-node.js event: detect -2023-09-18 12:46:22 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet -2023-09-18 12:46:22 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2023-09-18 12:46:22 DATA:  test-backend-node.js result: performance: load: null total: 257 -2023-09-18 12:46:22 STATE: test-backend-node.js passed: posenet -2023-09-18 12:46:22 STATE: test-backend-node.js start movenet -2023-09-18 12:46:23 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:23 STATE: test-backend-node.js event: image -2023-09-18 12:46:23 STATE: test-backend-node.js event: detect -2023-09-18 12:46:23 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet -2023-09-18 12:46:23 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:23 DATA:  test-backend-node.js result: performance: load: null total: 251 -2023-09-18 12:46:23 STATE: test-backend-node.js passed: movenet -2023-09-18 12:46:23 INFO:  test-backend-node.js test face matching -2023-09-18 12:46:23 STATE: test-backend-node.js passed: face database 40 -2023-09-18 12:46:23 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} -2023-09-18 12:46:23 INFO:  test-backend-node.js test face similarity alternative -2023-09-18 12:46:23 STATE: test-backend-node.js start face embeddings -2023-09-18 12:46:24 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:24 STATE: test-backend-node.js event: image -2023-09-18 12:46:24 STATE: test-backend-node.js event: detect -2023-09-18 12:46:24 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:46:24 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:24 DATA:  test-backend-node.js result: performance: load: null total: 308 -2023-09-18 12:46:24 STATE: test-backend-node.js passed: mobilefacenet {"embedding":192} -2023-09-18 12:46:24 STATE: test-backend-node.js start face embeddings -2023-09-18 12:46:25 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:25 STATE: test-backend-node.js event: image -2023-09-18 12:46:25 STATE: test-backend-node.js event: detect -2023-09-18 12:46:25 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:46:25 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:25 DATA:  test-backend-node.js result: performance: load: null total: 305 -2023-09-18 12:46:25 STATE: test-backend-node.js passed: insightface {"embedding":512} -2023-09-18 12:46:25 INFO:  test-backend-node.js test face attention -2023-09-18 12:46:25 STATE: test-backend-node.js start face attention -2023-09-18 12:46:26 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:26 STATE: test-backend-node.js event: image -2023-09-18 12:46:26 STATE: test-backend-node.js event: detect -2023-09-18 12:46:26 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face attention -2023-09-18 12:46:26 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:26 DATA:  test-backend-node.js result: performance: load: null total: 284 -2023-09-18 12:46:26 STATE: test-backend-node.js passed: face attention -2023-09-18 12:46:26 INFO:  test-backend-node.js test detectors -2023-09-18 12:46:26 STATE: test-backend-node.js start detectors -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:27 STATE: test-backend-node.js event: image -2023-09-18 12:46:27 STATE: test-backend-node.js event: detect -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg detectors -2023-09-18 12:46:27 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:27 DATA:  test-backend-node.js result: performance: load: null total: 137 -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detector result face match -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detector result hand match -2023-09-18 12:46:27 INFO:  test-backend-node.js test: multi-instance -2023-09-18 12:46:27 STATE: test-backend-node.js start multi instance -2023-09-18 12:46:27 STATE: test-backend-node.js event: image -2023-09-18 12:46:27 STATE: test-backend-node.js event: detect -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detect: random multi instance -2023-09-18 12:46:27 DATA:  test-backend-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2023-09-18 12:46:27 DATA:  test-backend-node.js result: performance: load: null total: 123 -2023-09-18 12:46:27 INFO:  test-backend-node.js test: first instance -2023-09-18 12:46:27 STATE: test-backend-node.js start multi instance -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2023-09-18 12:46:27 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:27 DATA:  test-backend-node.js result: performance: load: null total: 139 -2023-09-18 12:46:27 INFO:  test-backend-node.js test: second instance -2023-09-18 12:46:27 STATE: test-backend-node.js start multi instance -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:27 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance -2023-09-18 12:46:27 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:27 DATA:  test-backend-node.js result: performance: load: null total: 122 -2023-09-18 12:46:27 INFO:  test-backend-node.js test: concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js start concurrent -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:27 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:28 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:28 STATE: test-backend-node.js event: image -2023-09-18 12:46:28 STATE: test-backend-node.js event: image -2023-09-18 12:46:28 STATE: test-backend-node.js event: image -2023-09-18 12:46:29 STATE: test-backend-node.js event: detect -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js event: detect -2023-09-18 12:46:29 STATE: test-backend-node.js event: detect -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:29 DATA:  test-backend-node.js result: performance: load: null total: 1139 -2023-09-18 12:46:29 INFO:  test-backend-node.js test: monkey-patch -2023-09-18 12:46:29 STATE: test-backend-node.js event: image -2023-09-18 12:46:29 STATE: test-backend-node.js event: detect -2023-09-18 12:46:29 STATE: test-backend-node.js passed: monkey patch -2023-09-18 12:46:30 STATE: test-backend-node.js passed: segmentation [262144] -2023-09-18 12:46:30 STATE: test-backend-node.js passeed: equal usage -2023-09-18 12:46:30 INFO:  test-backend-node.js test: input compare -2023-09-18 12:46:30 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:30 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:30 STATE: test-backend-node.js passed: image compare 0 23.275441687091504 -2023-09-18 12:46:30 INFO:  test-backend-node.js events: {"image":29,"detect":29,"warmup":2} -2023-09-18 12:46:30 INFO:  test-backend-node.js tensors 14855 -2023-09-18 12:46:30 INFO:  test-backend-node.js test complete: 20515 ms -2023-09-18 12:46:30 INFO:  -2023-09-18 12:46:30 INFO:  test-backend-node-gpu.js start -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js test: configuration validation -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: configuration default validation [] -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js test: model load -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: models loaded 11 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"file://models/handlandmark-lite.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"}] -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js test: warmup -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: create human -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js human version: 3.1.2 -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js platform: linux x64 agent: NodeJS v20.6.1 -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js tfjs version: 4.11.0 -2023-09-18 12:46:31 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v20.6.1","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.11.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":172} -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: set backend: tensorflow -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js tensors 1785 -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js result: defined models: 11 loaded models: 11 -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: load models 11 -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: warmup: none default -2023-09-18 12:46:31 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2023-09-18 12:46:31 DATA:  test-backend-node-gpu.js result: performance: load: null total: null -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: warmup none result match -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js event: warmup -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: warmup: face default -2023-09-18 12:46:31 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} -2023-09-18 12:46:31 DATA:  test-backend-node-gpu.js result: performance: load: null total: 429 -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js passed: warmup face result match -2023-09-18 12:46:31 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js event: warmup -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: warmup: body default -2023-09-18 12:46:32 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:32 DATA:  test-backend-node-gpu.js result: performance: load: null total: 341 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: warmup body result match -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2023-09-18 12:46:32 INFO:  test-backend-node-gpu.js test: details verification -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js start default -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default -2023-09-18 12:46:32 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:32 DATA:  test-backend-node-gpu.js result: performance: load: null total: 327 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face length 1 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details body length 1 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details hand length 1 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details gesture length 7 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details object length 1 -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: details object 0.72 person -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} -2023-09-18 12:46:32 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:33 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2023-09-18 12:46:34 INFO:  test-backend-node-gpu.js test default -2023-09-18 12:46:34 STATE: test-backend-node-gpu.js start async -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async -2023-09-18 12:46:35 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:35 DATA:  test-backend-node-gpu.js result: performance: load: null total: 317 -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 -2023-09-18 12:46:35 INFO:  test-backend-node-gpu.js test sync -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js start sync -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:35 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: performance: load: null total: 325 -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 -2023-09-18 12:46:36 INFO:  test-backend-node-gpu.js test: image process -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] -2023-09-18 12:46:36 INFO:  test-backend-node-gpu.js test: image null -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor -2023-09-18 12:46:36 INFO:  test-backend-node-gpu.js test face similarity -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js start face similarity -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: performance: load: null total: 315 -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js start face similarity -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:36 DATA:  test-backend-node-gpu.js result: performance: load: null total: 312 -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js start face similarity -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:36 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity -2023-09-18 12:46:37 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2023-09-18 12:46:37 DATA:  test-backend-node-gpu.js result: performance: load: null total: 281 -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: face descriptor -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} -2023-09-18 12:46:37 INFO:  test-backend-node-gpu.js test object -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js start object -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:46:37 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:37 DATA:  test-backend-node-gpu.js result: performance: load: null total: 304 -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js passed: centernet -2023-09-18 12:46:37 STATE: test-backend-node-gpu.js start object -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:46:38 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:38 DATA:  test-backend-node-gpu.js result: performance: load: null total: 297 -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js passed: nanodet -2023-09-18 12:46:38 INFO:  test-backend-node-gpu.js test sensitive -2023-09-18 12:46:38 STATE: test-backend-node-gpu.js start sensitive -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive -2023-09-18 12:46:39 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:39 DATA:  test-backend-node-gpu.js result: performance: load: null total: 263 -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: sensitive result match -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: sensitive face result match -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: sensitive body result match -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js passed: sensitive hand result match -2023-09-18 12:46:39 INFO:  test-backend-node-gpu.js test body -2023-09-18 12:46:39 STATE: test-backend-node-gpu.js start blazepose -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose -2023-09-18 12:46:41 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2023-09-18 12:46:41 DATA:  test-backend-node-gpu.js result: performance: load: null total: 360 -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js passed: blazepose -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js start efficientpose -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:41 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose -2023-09-18 12:46:42 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2023-09-18 12:46:42 DATA:  test-backend-node-gpu.js result: performance: load: null total: 323 -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js passed: efficientpose -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js start posenet -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:42 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet -2023-09-18 12:46:43 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2023-09-18 12:46:43 DATA:  test-backend-node-gpu.js result: performance: load: null total: 278 -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: posenet -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js start movenet -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet -2023-09-18 12:46:43 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:43 DATA:  test-backend-node-gpu.js result: performance: load: null total: 256 -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: movenet -2023-09-18 12:46:43 INFO:  test-backend-node-gpu.js test face matching -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: face database 40 -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} -2023-09-18 12:46:43 INFO:  test-backend-node-gpu.js test face similarity alternative -2023-09-18 12:46:43 STATE: test-backend-node-gpu.js start face embeddings -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:46:44 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:44 DATA:  test-backend-node-gpu.js result: performance: load: null total: 298 -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js passed: mobilefacenet {"embedding":192} -2023-09-18 12:46:44 STATE: test-backend-node-gpu.js start face embeddings -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:46:45 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:45 DATA:  test-backend-node-gpu.js result: performance: load: null total: 315 -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js passed: insightface {"embedding":512} -2023-09-18 12:46:45 INFO:  test-backend-node-gpu.js test face attention -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js start face attention -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:45 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: performance: load: null total: 280 -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: face attention -2023-09-18 12:46:46 INFO:  test-backend-node-gpu.js test detectors -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js start detectors -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: performance: load: null total: 140 -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: detector result face match -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: detector result hand match -2023-09-18 12:46:46 INFO:  test-backend-node-gpu.js test: multi-instance -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js start multi instance -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: detect: random multi instance -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} -2023-09-18 12:46:46 DATA:  test-backend-node-gpu.js result: performance: load: null total: 128 -2023-09-18 12:46:46 INFO:  test-backend-node-gpu.js test: first instance -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js start multi instance -2023-09-18 12:46:46 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2023-09-18 12:46:47 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:47 DATA:  test-backend-node-gpu.js result: performance: load: null total: 130 -2023-09-18 12:46:47 INFO:  test-backend-node-gpu.js test: second instance -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start multi instance -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance -2023-09-18 12:46:47 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:47 DATA:  test-backend-node-gpu.js result: performance: load: null total: 132 -2023-09-18 12:46:47 INFO:  test-backend-node-gpu.js test: concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js start concurrent -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} -2023-09-18 12:46:48 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:48 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:48 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1162 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1162 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1162 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:46:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1164 -2023-09-18 12:46:49 INFO:  test-backend-node-gpu.js test: monkey-patch -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js event: image -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js event: detect -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: monkey patch -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: segmentation [262144] -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passeed: equal usage -2023-09-18 12:46:49 INFO:  test-backend-node-gpu.js test: input compare -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} -2023-09-18 12:46:49 STATE: test-backend-node-gpu.js passed: image compare 0 23.275441687091504 -2023-09-18 12:46:49 INFO:  test-backend-node-gpu.js events: {"image":29,"detect":29,"warmup":2} -2023-09-18 12:46:49 INFO:  test-backend-node-gpu.js tensors 14855 -2023-09-18 12:46:49 INFO:  test-backend-node-gpu.js test complete: 18651 ms -2023-09-18 12:46:49 INFO:  -2023-09-18 12:46:49 INFO:  test-backend-node-wasm.js start -2023-09-18 12:46:50 DATA:  test-backend-node-wasm.js stdout: 2023-09-18 12:46:50 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.11.0/dist/ -2023-09-18 12:46:50 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ -2023-09-18 12:46:50 INFO:  test-backend-node-wasm.js test: configuration validation -2023-09-18 12:46:50 STATE: test-backend-node-wasm.js passed: configuration default validation [] -2023-09-18 12:46:50 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] -2023-09-18 12:46:50 INFO:  test-backend-node-wasm.js test: model load -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: models loaded 11 11 [{"name":"blazeface","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"liveness","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"emotion","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"antispoof","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"facemesh","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/handlandmark-lite.json"},{"name":"handtrack","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"},{"name":"iris","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"centernet","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"faceres","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"movenet","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"}] -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js test: warmup -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: create human -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js human version: 3.1.2 -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js platform: linux x64 agent: NodeJS v20.6.1 -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js tfjs version: 4.11.0 -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"linux x64","agent":"NodeJS v20.6.1","backends":["wasm"],"initial":false,"tfjs":{"version":"4.11.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":174} -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: set backend: wasm -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js tensors 1785 -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js result: defined models: 11 loaded models: 11 -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: load models 11 -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup: none default -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: performance: load: null total: null -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup none result match -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: warmup -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup: face default -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: performance: load: null total: 472 -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup face result match -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js event: warmup -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup: body default -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:52 DATA:  test-backend-node-wasm.js result: performance: load: null total: 326 -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js passed: warmup body result match -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} -2023-09-18 12:46:52 INFO:  test-backend-node-wasm.js test: details verification -2023-09-18 12:46:52 STATE: test-backend-node-wasm.js start default -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default -2023-09-18 12:46:53 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:53 DATA:  test-backend-node-wasm.js result: performance: load: null total: 315 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face length 1 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details body length 1 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details hand length 1 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details gesture length 7 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details object length 1 -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: details object 0.72 person -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} -2023-09-18 12:46:53 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:46:54 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} -2023-09-18 12:46:55 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:56 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:56 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 -2023-09-18 12:46:56 INFO:  test-backend-node-wasm.js test default -2023-09-18 12:46:56 STATE: test-backend-node-wasm.js start async -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async -2023-09-18 12:46:58 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:46:58 DATA:  test-backend-node-wasm.js result: performance: load: null total: 370 -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 -2023-09-18 12:46:58 INFO:  test-backend-node-wasm.js test sync -2023-09-18 12:46:58 STATE: test-backend-node-wasm.js start sync -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync -2023-09-18 12:47:00 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:47:00 DATA:  test-backend-node-wasm.js result: performance: load: null total: 390 -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 -2023-09-18 12:47:00 INFO:  test-backend-node-wasm.js test: image process -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] -2023-09-18 12:47:00 INFO:  test-backend-node-wasm.js test: image null -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor -2023-09-18 12:47:00 INFO:  test-backend-node-wasm.js test face similarity -2023-09-18 12:47:00 STATE: test-backend-node-wasm.js start face similarity -2023-09-18 12:47:02 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2023-09-18 12:47:02 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:02 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:02 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity -2023-09-18 12:47:02 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} -2023-09-18 12:47:02 DATA:  test-backend-node-wasm.js result: performance: load: null total: 380 -2023-09-18 12:47:02 STATE: test-backend-node-wasm.js start face similarity -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity -2023-09-18 12:47:03 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:47:03 DATA:  test-backend-node-wasm.js result: performance: load: null total: 297 -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js start face similarity -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity -2023-09-18 12:47:03 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} -2023-09-18 12:47:03 DATA:  test-backend-node-wasm.js result: performance: load: null total: 282 -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: face descriptor -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.4472741837136387,0.5567931378245533],"descriptors":[1024,1024,1024]} -2023-09-18 12:47:03 INFO:  test-backend-node-wasm.js test object -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js start object -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:03 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:04 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:04 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:47:04 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:47:04 DATA:  test-backend-node-wasm.js result: performance: load: null total: 302 -2023-09-18 12:47:04 STATE: test-backend-node-wasm.js passed: centernet -2023-09-18 12:47:04 STATE: test-backend-node-wasm.js start object -2023-09-18 12:47:05 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:05 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:06 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:06 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object -2023-09-18 12:47:06 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} -2023-09-18 12:47:06 DATA:  test-backend-node-wasm.js result: performance: load: null total: 341 -2023-09-18 12:47:06 STATE: test-backend-node-wasm.js passed: nanodet -2023-09-18 12:47:06 INFO:  test-backend-node-wasm.js test sensitive -2023-09-18 12:47:06 STATE: test-backend-node-wasm.js start sensitive -2023-09-18 12:47:07 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:07 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive -2023-09-18 12:47:08 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:47:08 DATA:  test-backend-node-wasm.js result: performance: load: null total: 272 -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: sensitive result match -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: sensitive face result match -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: sensitive body result match -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js passed: sensitive hand result match -2023-09-18 12:47:08 INFO:  test-backend-node-wasm.js test body -2023-09-18 12:47:08 STATE: test-backend-node-wasm.js start blazepose -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose -2023-09-18 12:47:11 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} -2023-09-18 12:47:11 DATA:  test-backend-node-wasm.js result: performance: load: null total: 403 -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js passed: blazepose -2023-09-18 12:47:11 STATE: test-backend-node-wasm.js start efficientpose -2023-09-18 12:47:12 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:12 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:13 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:13 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose -2023-09-18 12:47:13 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} -2023-09-18 12:47:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: 622 -2023-09-18 12:47:13 STATE: test-backend-node-wasm.js passed: efficientpose -2023-09-18 12:47:13 STATE: test-backend-node-wasm.js start posenet -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet -2023-09-18 12:47:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} -2023-09-18 12:47:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 244 -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: posenet -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js start movenet -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet -2023-09-18 12:47:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} -2023-09-18 12:47:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 203 -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: movenet -2023-09-18 12:47:14 INFO:  test-backend-node-wasm.js test face matching -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: face database 40 -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5002051178899982}} {"third":{"index":4,"similarity":0.5401586736511599}} -2023-09-18 12:47:14 INFO:  test-backend-node-wasm.js test face similarity alternative -2023-09-18 12:47:14 STATE: test-backend-node-wasm.js start face embeddings -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:47:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:47:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 288 -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js passed: mobilefacenet {"embedding":192} -2023-09-18 12:47:16 STATE: test-backend-node-wasm.js start face embeddings -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js event: detect -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings -2023-09-18 12:47:18 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} -2023-09-18 12:47:18 DATA:  test-backend-node-wasm.js result: performance: load: null total: 268 -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js passed: insightface {"embedding":512} -2023-09-18 12:47:18 INFO:  test-backend-node-wasm.js test face attention -2023-09-18 12:47:18 STATE: test-backend-node-wasm.js start face attention -2023-09-18 12:47:19 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} -2023-09-18 12:47:19 STATE: test-backend-node-wasm.js event: image -2023-09-18 12:47:19 ERROR: test-backend-node-wasm.js failed: testDetect face attention -2023-09-18 12:47:19 ERROR: test-backend-node-wasm.js uncaughtException {"name":"Error","message":"BatchMatMul for non non-float32 tensors not yet supported.","stack":["Error: BatchMatMul for non non-float32 tensors not yet supported."," at Object.batchMatMul [as kernelFunc] (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-backend-wasm/dist/tf-backend-wasm.node.js:1280:15)"," at kernelFunc (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4707:32)"," at /home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4767:27"," at Engine.scopedRun (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4572:23)"," at Engine.runKernelFunc (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4763:14)"," at Engine.runKernel (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4636:21)"," at matMul_ (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:13408:19)"," at Object.matMul__op [as matMul] (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:12217:29)"," at executeOp$9 (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:29592:25)"," at /home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30172:50"]} -2023-09-18 12:47:19 STATE: all tests complete -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../demo/nodejs/node-bench.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"../test/test-node-emotion.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"test-node-gear.js","passed":4,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"test-backend-node.js","passed":125,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"test-backend-node-gpu.js","passed":125,"failed":0} -2023-09-18 12:47:19 INFO:  status {"test":"test-backend-node-wasm.js","passed":92,"failed":1} -2023-09-18 12:47:19 INFO:  failures {"count":1} -2023-09-18 12:47:19 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face attention"]]} +2023-12-06 14:58:19 INFO:  @vladmandic/human version 3.2.0 +2023-12-06 14:58:19 INFO:  User: vlado Platform: linux Arch: x64 Node: v21.4.0 +2023-12-06 14:58:19 INFO:  demos: [{"cmd":"../demo/nodejs/node.js","args":[]},{"cmd":"../demo/nodejs/node-simple.js","args":[]},{"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]},{"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]},{"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]},{"cmd":"../demo/nodejs/process-folder.js","args":["samples"]},{"cmd":"../demo/multithread/node-multiprocess.js","args":[]},{"cmd":"../demo/facematch/node-match.js","args":[]},{"cmd":"../demo/nodejs/node-bench.js","args":[]},{"cmd":"../test/test-node-emotion.js","args":[]}] +2023-12-06 14:58:19 INFO:  {"cmd":"../demo/nodejs/node.js","args":[]} start +2023-12-06 14:58:20 INFO:  {"cmd":"../demo/nodejs/node-simple.js","args":[]} start +2023-12-06 14:58:21 INFO:  {"cmd":"../demo/nodejs/node-event.js","args":["samples/in/ai-body.jpg"]} start +2023-12-06 14:58:21 INFO:  {"cmd":"../demo/nodejs/node-similarity.js","args":["samples/in/ai-face.jpg","samples/in/ai-upper.jpg"]} start +2023-12-06 14:58:22 INFO:  {"cmd":"../demo/nodejs/node-canvas.js","args":["samples/in/ai-body.jpg","samples/out/ai-body.jpg"]} start +2023-12-06 14:58:23 INFO:  {"cmd":"../demo/nodejs/process-folder.js","args":["samples"]} start +2023-12-06 14:58:25 INFO:  {"cmd":"../demo/multithread/node-multiprocess.js","args":[]} start +2023-12-06 14:58:43 INFO:  {"cmd":"../demo/facematch/node-match.js","args":[]} start +2023-12-06 14:58:44 INFO:  {"cmd":"../demo/nodejs/node-bench.js","args":[]} start +2023-12-06 14:58:59 INFO:  {"cmd":"../test/test-node-emotion.js","args":[]} start +2023-12-06 14:59:05 INFO:  tests: ["test-node-load.js","test-node-gear.js","test-backend-node.js","test-backend-node-gpu.js","test-backend-node-wasm.js"] +2023-12-06 14:59:05 INFO:  +2023-12-06 14:59:05 INFO:  test-node-load.js start +2023-12-06 14:59:06 INFO:  test-node-load.js load start {"human":"3.2.0","tf":"4.14.0","progress":0} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":1,"progress":0} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":10,"progress":0} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":27,"progress":0.12865823126207815} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":41,"progress":0.33826045252170456} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":65,"progress":0.4726970548784964} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":80,"progress":0.68355493315821} +2023-12-06 14:59:06 STATE: test-node-load.js passed {"progress":1} +2023-12-06 14:59:06 INFO:  test-node-load.js load final {"progress":1} +2023-12-06 14:59:06 DATA:  test-node-load.js load interval {"elapsed":482,"progress":1} +2023-12-06 14:59:06 INFO:  +2023-12-06 14:59:06 INFO:  test-node-gear.js start +2023-12-06 14:59:06 DATA:  test-node-gear.js input: ["samples/in/ai-face.jpg"] +2023-12-06 14:59:08 STATE: test-node-gear.js passed: gear faceres samples/in/ai-face.jpg +2023-12-06 14:59:08 DATA:  test-node-gear.js results {"face":0,"model":"faceres","image":"samples/in/ai-face.jpg","age":23.5,"gender":"female","genderScore":0.92,"emotion":[]} +2023-12-06 14:59:08 STATE: test-node-gear.js passed: gear gear samples/in/ai-face.jpg +2023-12-06 14:59:08 DATA:  test-node-gear.js results {"face":0,"model":"gear","image":"samples/in/ai-face.jpg","age":23.3,"gender":"female","genderScore":0.51,"race":[{"score":0.93,"race":"white"}],"emotion":[]} +2023-12-06 14:59:08 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg +2023-12-06 14:59:08 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"female","genderScore":0.99,"emotion":[]} +2023-12-06 14:59:09 STATE: test-node-gear.js passed: gear ssrnet samples/in/ai-face.jpg +2023-12-06 14:59:09 DATA:  test-node-gear.js results {"face":0,"model":"ssrnet","image":"samples/in/ai-face.jpg","age":23.4,"gender":"male","emotion":[]} +2023-12-06 14:59:09 INFO:  +2023-12-06 14:59:09 INFO:  test-backend-node.js start +2023-12-06 14:59:09 INFO:  test-backend-node.js test: configuration validation +2023-12-06 14:59:09 STATE: test-backend-node.js passed: configuration default validation [] +2023-12-06 14:59:09 STATE: test-backend-node.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2023-12-06 14:59:09 INFO:  test-backend-node.js test: model load +2023-12-06 14:59:09 STATE: test-backend-node.js passed: models loaded 11 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"file://models/handlandmark-lite.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"}] +2023-12-06 14:59:09 INFO:  test-backend-node.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} +2023-12-06 14:59:09 INFO:  test-backend-node.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2023-12-06 14:59:09 INFO:  test-backend-node.js test: warmup +2023-12-06 14:59:09 STATE: test-backend-node.js passed: create human +2023-12-06 14:59:09 INFO:  test-backend-node.js human version: 3.2.0 +2023-12-06 14:59:09 INFO:  test-backend-node.js platform: agent: +2023-12-06 14:59:09 INFO:  test-backend-node.js tfjs version: 4.14.0 +2023-12-06 14:59:09 INFO:  test-backend-node.js env: {"browser":false,"node":true,"platform":"","agent":"","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.14.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":172} +2023-12-06 14:59:09 STATE: test-backend-node.js passed: set backend: tensorflow +2023-12-06 14:59:09 STATE: test-backend-node.js tensors 1785 +2023-12-06 14:59:09 STATE: test-backend-node.js result: defined models: 11 loaded models: 11 +2023-12-06 14:59:09 STATE: test-backend-node.js passed: load models 11 +2023-12-06 14:59:09 STATE: test-backend-node.js passed: warmup: none default +2023-12-06 14:59:09 DATA:  test-backend-node.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2023-12-06 14:59:09 DATA:  test-backend-node.js result: performance: load: null total: null +2023-12-06 14:59:09 STATE: test-backend-node.js passed: warmup none result match +2023-12-06 14:59:09 STATE: test-backend-node.js event: image +2023-12-06 14:59:09 STATE: test-backend-node.js event: detect +2023-12-06 14:59:09 STATE: test-backend-node.js event: warmup +2023-12-06 14:59:09 STATE: test-backend-node.js passed: warmup: face default +2023-12-06 14:59:09 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2023-12-06 14:59:09 DATA:  test-backend-node.js result: performance: load: null total: 456 +2023-12-06 14:59:09 STATE: test-backend-node.js passed: warmup face result match +2023-12-06 14:59:09 STATE: test-backend-node.js event: image +2023-12-06 14:59:10 STATE: test-backend-node.js event: detect +2023-12-06 14:59:10 STATE: test-backend-node.js event: warmup +2023-12-06 14:59:10 STATE: test-backend-node.js passed: warmup: body default +2023-12-06 14:59:10 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:10 DATA:  test-backend-node.js result: performance: load: null total: 350 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: warmup body result match +2023-12-06 14:59:10 STATE: test-backend-node.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2023-12-06 14:59:10 INFO:  test-backend-node.js test: details verification +2023-12-06 14:59:10 STATE: test-backend-node.js start default +2023-12-06 14:59:10 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:10 STATE: test-backend-node.js event: image +2023-12-06 14:59:10 STATE: test-backend-node.js event: detect +2023-12-06 14:59:10 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg default +2023-12-06 14:59:10 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:10 DATA:  test-backend-node.js result: performance: load: null total: 329 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face length 1 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face score 1 0.93 1 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face age/gender 23.7 female 0.97 2.34 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face arrays 4 478 1024 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face anti-spoofing 0.79 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details face liveness 0.83 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details body length 1 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details body 0.92 17 6 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details hand length 1 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details hand 0.51 0.73 point +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details hand arrays 21 5 7 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details gesture length 7 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details gesture first {"face":0,"gesture":"facing right"} +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details object length 1 +2023-12-06 14:59:10 STATE: test-backend-node.js passed: details object 0.72 person +2023-12-06 14:59:10 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2023-12-06 14:59:10 STATE: test-backend-node.js event: image +2023-12-06 14:59:11 STATE: test-backend-node.js event: detect +2023-12-06 14:59:11 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2023-12-06 14:59:11 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2023-12-06 14:59:11 STATE: test-backend-node.js event: image +2023-12-06 14:59:11 STATE: test-backend-node.js event: detect +2023-12-06 14:59:11 STATE: test-backend-node.js passed: tensor shape: [1200,1200,4] dtype: float32 +2023-12-06 14:59:11 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:11 STATE: test-backend-node.js event: image +2023-12-06 14:59:12 STATE: test-backend-node.js event: detect +2023-12-06 14:59:12 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2023-12-06 14:59:12 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:12 STATE: test-backend-node.js event: image +2023-12-06 14:59:12 STATE: test-backend-node.js event: detect +2023-12-06 14:59:12 STATE: test-backend-node.js passed: tensor shape: [1200,1200,3] dtype: float32 +2023-12-06 14:59:13 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2023-12-06 14:59:13 STATE: test-backend-node.js event: image +2023-12-06 14:59:13 STATE: test-backend-node.js event: detect +2023-12-06 14:59:13 STATE: test-backend-node.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2023-12-06 14:59:13 INFO:  test-backend-node.js test default +2023-12-06 14:59:13 STATE: test-backend-node.js start async +2023-12-06 14:59:13 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:13 STATE: test-backend-node.js event: image +2023-12-06 14:59:13 STATE: test-backend-node.js event: detect +2023-12-06 14:59:14 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg async +2023-12-06 14:59:14 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:14 DATA:  test-backend-node.js result: performance: load: null total: 341 +2023-12-06 14:59:14 STATE: test-backend-node.js passed: default result face match 1 female 0.97 +2023-12-06 14:59:14 INFO:  test-backend-node.js test sync +2023-12-06 14:59:14 STATE: test-backend-node.js start sync +2023-12-06 14:59:14 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:14 STATE: test-backend-node.js event: image +2023-12-06 14:59:14 STATE: test-backend-node.js event: detect +2023-12-06 14:59:14 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sync +2023-12-06 14:59:14 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:14 DATA:  test-backend-node.js result: performance: load: null total: 351 +2023-12-06 14:59:14 STATE: test-backend-node.js passed: default sync 1 female 0.97 +2023-12-06 14:59:14 INFO:  test-backend-node.js test: image process +2023-12-06 14:59:14 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:14 STATE: test-backend-node.js passed: image input null [1,256,256,3] +2023-12-06 14:59:14 INFO:  test-backend-node.js test: image null +2023-12-06 14:59:14 STATE: test-backend-node.js passed: invalid input could not convert input to tensor +2023-12-06 14:59:14 INFO:  test-backend-node.js test face similarity +2023-12-06 14:59:14 STATE: test-backend-node.js start face similarity +2023-12-06 14:59:14 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:14 STATE: test-backend-node.js event: image +2023-12-06 14:59:15 STATE: test-backend-node.js event: detect +2023-12-06 14:59:15 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face similarity +2023-12-06 14:59:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2023-12-06 14:59:15 DATA:  test-backend-node.js result: performance: load: null total: 352 +2023-12-06 14:59:15 STATE: test-backend-node.js start face similarity +2023-12-06 14:59:15 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:15 STATE: test-backend-node.js event: image +2023-12-06 14:59:15 STATE: test-backend-node.js event: detect +2023-12-06 14:59:15 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg face similarity +2023-12-06 14:59:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:15 DATA:  test-backend-node.js result: performance: load: null total: 348 +2023-12-06 14:59:15 STATE: test-backend-node.js start face similarity +2023-12-06 14:59:15 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:15 STATE: test-backend-node.js event: image +2023-12-06 14:59:15 STATE: test-backend-node.js event: detect +2023-12-06 14:59:15 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg face similarity +2023-12-06 14:59:15 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2023-12-06 14:59:15 DATA:  test-backend-node.js result: performance: load: null total: 323 +2023-12-06 14:59:15 STATE: test-backend-node.js passed: face descriptor +2023-12-06 14:59:15 STATE: test-backend-node.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} +2023-12-06 14:59:15 INFO:  test-backend-node.js test object +2023-12-06 14:59:15 STATE: test-backend-node.js start object +2023-12-06 14:59:16 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:16 STATE: test-backend-node.js event: image +2023-12-06 14:59:16 STATE: test-backend-node.js event: detect +2023-12-06 14:59:16 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 14:59:16 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:16 DATA:  test-backend-node.js result: performance: load: null total: 337 +2023-12-06 14:59:16 STATE: test-backend-node.js passed: centernet +2023-12-06 14:59:16 STATE: test-backend-node.js start object +2023-12-06 14:59:18 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:18 STATE: test-backend-node.js event: image +2023-12-06 14:59:18 STATE: test-backend-node.js event: detect +2023-12-06 14:59:18 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 14:59:18 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:18 DATA:  test-backend-node.js result: performance: load: null total: 324 +2023-12-06 14:59:18 STATE: test-backend-node.js passed: nanodet +2023-12-06 14:59:18 INFO:  test-backend-node.js test sensitive +2023-12-06 14:59:18 STATE: test-backend-node.js start sensitive +2023-12-06 14:59:19 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:19 STATE: test-backend-node.js event: image +2023-12-06 14:59:19 STATE: test-backend-node.js event: detect +2023-12-06 14:59:19 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg sensitive +2023-12-06 14:59:19 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:19 DATA:  test-backend-node.js result: performance: load: null total: 297 +2023-12-06 14:59:19 STATE: test-backend-node.js passed: sensitive result match +2023-12-06 14:59:19 STATE: test-backend-node.js passed: sensitive face result match +2023-12-06 14:59:19 STATE: test-backend-node.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2023-12-06 14:59:19 STATE: test-backend-node.js passed: sensitive body result match +2023-12-06 14:59:19 STATE: test-backend-node.js passed: sensitive hand result match +2023-12-06 14:59:19 INFO:  test-backend-node.js test body +2023-12-06 14:59:19 STATE: test-backend-node.js start blazepose +2023-12-06 14:59:21 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:21 STATE: test-backend-node.js event: image +2023-12-06 14:59:21 STATE: test-backend-node.js event: detect +2023-12-06 14:59:21 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg blazepose +2023-12-06 14:59:21 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2023-12-06 14:59:21 DATA:  test-backend-node.js result: performance: load: null total: 425 +2023-12-06 14:59:21 STATE: test-backend-node.js passed: blazepose +2023-12-06 14:59:21 STATE: test-backend-node.js start efficientpose +2023-12-06 14:59:23 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:23 STATE: test-backend-node.js event: image +2023-12-06 14:59:23 STATE: test-backend-node.js event: detect +2023-12-06 14:59:23 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg efficientpose +2023-12-06 14:59:23 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2023-12-06 14:59:23 DATA:  test-backend-node.js result: performance: load: null total: 377 +2023-12-06 14:59:23 STATE: test-backend-node.js passed: efficientpose +2023-12-06 14:59:23 STATE: test-backend-node.js start posenet +2023-12-06 14:59:24 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:24 STATE: test-backend-node.js event: image +2023-12-06 14:59:24 STATE: test-backend-node.js event: detect +2023-12-06 14:59:24 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg posenet +2023-12-06 14:59:24 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2023-12-06 14:59:24 DATA:  test-backend-node.js result: performance: load: null total: 289 +2023-12-06 14:59:24 STATE: test-backend-node.js passed: posenet +2023-12-06 14:59:24 STATE: test-backend-node.js start movenet +2023-12-06 14:59:25 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:25 STATE: test-backend-node.js event: image +2023-12-06 14:59:25 STATE: test-backend-node.js event: detect +2023-12-06 14:59:25 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg movenet +2023-12-06 14:59:25 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:25 DATA:  test-backend-node.js result: performance: load: null total: 265 +2023-12-06 14:59:25 STATE: test-backend-node.js passed: movenet +2023-12-06 14:59:25 INFO:  test-backend-node.js test face matching +2023-12-06 14:59:25 STATE: test-backend-node.js passed: face database 40 +2023-12-06 14:59:25 STATE: test-backend-node.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} +2023-12-06 14:59:25 INFO:  test-backend-node.js test face similarity alternative +2023-12-06 14:59:25 STATE: test-backend-node.js start face embeddings +2023-12-06 14:59:26 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:26 STATE: test-backend-node.js event: image +2023-12-06 14:59:27 STATE: test-backend-node.js event: detect +2023-12-06 14:59:27 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 14:59:27 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:27 DATA:  test-backend-node.js result: performance: load: null total: 348 +2023-12-06 14:59:27 STATE: test-backend-node.js passed: mobilefacenet {"embedding":192} +2023-12-06 14:59:27 STATE: test-backend-node.js start face embeddings +2023-12-06 14:59:28 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:28 STATE: test-backend-node.js event: image +2023-12-06 14:59:28 STATE: test-backend-node.js event: detect +2023-12-06 14:59:28 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 14:59:28 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:28 DATA:  test-backend-node.js result: performance: load: null total: 369 +2023-12-06 14:59:28 STATE: test-backend-node.js passed: insightface {"embedding":512} +2023-12-06 14:59:28 INFO:  test-backend-node.js test face attention +2023-12-06 14:59:28 STATE: test-backend-node.js start face attention +2023-12-06 14:59:28 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:28 STATE: test-backend-node.js event: image +2023-12-06 14:59:29 STATE: test-backend-node.js event: detect +2023-12-06 14:59:29 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg face attention +2023-12-06 14:59:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:29 DATA:  test-backend-node.js result: performance: load: null total: 308 +2023-12-06 14:59:29 STATE: test-backend-node.js passed: face attention +2023-12-06 14:59:29 INFO:  test-backend-node.js test detectors +2023-12-06 14:59:29 STATE: test-backend-node.js start detectors +2023-12-06 14:59:29 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:29 STATE: test-backend-node.js event: image +2023-12-06 14:59:29 STATE: test-backend-node.js event: detect +2023-12-06 14:59:29 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg detectors +2023-12-06 14:59:29 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:29 DATA:  test-backend-node.js result: performance: load: null total: 169 +2023-12-06 14:59:29 STATE: test-backend-node.js passed: detector result face match +2023-12-06 14:59:29 STATE: test-backend-node.js passed: detector result hand match +2023-12-06 14:59:29 INFO:  test-backend-node.js test: multi-instance +2023-12-06 14:59:29 STATE: test-backend-node.js start multi instance +2023-12-06 14:59:29 STATE: test-backend-node.js event: image +2023-12-06 14:59:30 STATE: test-backend-node.js event: detect +2023-12-06 14:59:30 STATE: test-backend-node.js passed: detect: random multi instance +2023-12-06 14:59:30 DATA:  test-backend-node.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2023-12-06 14:59:30 DATA:  test-backend-node.js result: performance: load: null total: 139 +2023-12-06 14:59:30 INFO:  test-backend-node.js test: first instance +2023-12-06 14:59:30 STATE: test-backend-node.js start multi instance +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2023-12-06 14:59:30 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:30 DATA:  test-backend-node.js result: performance: load: null total: 132 +2023-12-06 14:59:30 INFO:  test-backend-node.js test: second instance +2023-12-06 14:59:30 STATE: test-backend-node.js start multi instance +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg multi instance +2023-12-06 14:59:30 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:30 DATA:  test-backend-node.js result: performance: load: null total: 131 +2023-12-06 14:59:30 INFO:  test-backend-node.js test: concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js start concurrent +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:30 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:31 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:31 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:31 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:31 STATE: test-backend-node.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:31 STATE: test-backend-node.js event: image +2023-12-06 14:59:31 STATE: test-backend-node.js event: image +2023-12-06 14:59:31 STATE: test-backend-node.js event: image +2023-12-06 14:59:32 STATE: test-backend-node.js event: detect +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js event: detect +2023-12-06 14:59:32 STATE: test-backend-node.js event: detect +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 STATE: test-backend-node.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:32 DATA:  test-backend-node.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:32 DATA:  test-backend-node.js result: performance: load: null total: 1176 +2023-12-06 14:59:32 INFO:  test-backend-node.js test: monkey-patch +2023-12-06 14:59:32 STATE: test-backend-node.js event: image +2023-12-06 14:59:32 STATE: test-backend-node.js event: detect +2023-12-06 14:59:32 STATE: test-backend-node.js passed: monkey patch +2023-12-06 14:59:33 STATE: test-backend-node.js passed: segmentation [262144] +2023-12-06 14:59:33 STATE: test-backend-node.js passeed: equal usage +2023-12-06 14:59:33 INFO:  test-backend-node.js test: input compare +2023-12-06 14:59:33 STATE: test-backend-node.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:33 STATE: test-backend-node.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:33 STATE: test-backend-node.js passed: image compare 0 23.275441687091504 +2023-12-06 14:59:33 INFO:  test-backend-node.js events: {"image":29,"detect":29,"warmup":2} +2023-12-06 14:59:33 INFO:  test-backend-node.js tensors 14855 +2023-12-06 14:59:33 INFO:  test-backend-node.js test complete: 24052 ms +2023-12-06 14:59:33 INFO:  +2023-12-06 14:59:33 INFO:  test-backend-node-gpu.js start +2023-12-06 14:59:33 INFO:  test-backend-node-gpu.js test: configuration validation +2023-12-06 14:59:33 STATE: test-backend-node-gpu.js passed: configuration default validation [] +2023-12-06 14:59:33 STATE: test-backend-node-gpu.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2023-12-06 14:59:33 INFO:  test-backend-node-gpu.js test: model load +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: models loaded 11 11 [{"name":"blazeface","loaded":true,"size":538928,"url":"file://models/blazeface.json"},{"name":"antispoof","loaded":true,"size":853098,"url":"file://models/antispoof.json"},{"name":"liveness","loaded":true,"size":592976,"url":"file://models/liveness.json"},{"name":"emotion","loaded":true,"size":820516,"url":"file://models/emotion.json"},{"name":"facemesh","loaded":true,"size":1477958,"url":"file://models/facemesh.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"file://models/handlandmark-lite.json"},{"name":"iris","loaded":true,"size":2599092,"url":"file://models/iris.json"},{"name":"handtrack","loaded":true,"size":2964837,"url":"file://models/handtrack.json"},{"name":"centernet","loaded":true,"size":4030290,"url":"file://models/centernet.json"},{"name":"movenet","loaded":true,"size":4650216,"url":"file://models/movenet-lightning.json"},{"name":"faceres","loaded":true,"size":6978814,"url":"file://models/faceres.json"}] +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js memory: {"memory":{"unreliable":true,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js test: warmup +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: create human +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js human version: 3.2.0 +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js platform: agent: +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js tfjs version: 4.14.0 +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js env: {"browser":false,"node":true,"platform":"","agent":"","backends":["cpu","tensorflow"],"initial":false,"tfjs":{"version":"4.14.0"},"offscreen":false,"perfadd":false,"tensorflow":{"version":"2.9.1","gpu":false},"wasm":{"supported":true,"backend":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":172} +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: set backend: tensorflow +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js tensors 1785 +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js result: defined models: 11 loaded models: 11 +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: load models 11 +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup: none default +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: performance: load: null total: null +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup none result match +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: warmup +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup: face default +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.42,"keypoints":4} +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: performance: load: null total: 460 +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup face result match +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js event: warmup +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup: body default +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:34 DATA:  test-backend-node-gpu.js result: performance: load: null total: 354 +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js passed: warmup body result match +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js details: {"face":{"boxScore":0.92,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.63,"emotion":"angry"},{"score":0.22,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.52,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 10% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2023-12-06 14:59:34 INFO:  test-backend-node-gpu.js test: details verification +2023-12-06 14:59:34 STATE: test-backend-node-gpu.js start default +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg default +2023-12-06 14:59:35 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:35 DATA:  test-backend-node-gpu.js result: performance: load: null total: 332 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face length 1 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face score 1 0.93 1 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face age/gender 23.7 female 0.97 2.34 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face arrays 4 478 1024 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face anti-spoofing 0.79 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details face liveness 0.83 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details body length 1 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details body 0.92 17 6 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details hand length 1 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details hand 0.51 0.73 point +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details hand arrays 21 5 7 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details gesture length 7 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details gesture first {"face":0,"gesture":"facing right"} +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details object length 1 +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: details object 0.72 person +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996928} +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:35 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1371996928} +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,4] dtype: float32 +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:36 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js passed: tensor shape: [1200,1200,3] dtype: float32 +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2023-12-06 14:59:37 INFO:  test-backend-node-gpu.js test default +2023-12-06 14:59:37 STATE: test-backend-node-gpu.js start async +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg async +2023-12-06 14:59:38 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:38 DATA:  test-backend-node-gpu.js result: performance: load: null total: 345 +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js passed: default result face match 1 female 0.97 +2023-12-06 14:59:38 INFO:  test-backend-node-gpu.js test sync +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js start sync +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:38 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sync +2023-12-06 14:59:39 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:39 DATA:  test-backend-node-gpu.js result: performance: load: null total: 372 +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: default sync 1 female 0.97 +2023-12-06 14:59:39 INFO:  test-backend-node-gpu.js test: image process +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: image input null [1,256,256,3] +2023-12-06 14:59:39 INFO:  test-backend-node-gpu.js test: image null +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: invalid input could not convert input to tensor +2023-12-06 14:59:39 INFO:  test-backend-node-gpu.js test face similarity +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js start face similarity +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face similarity +2023-12-06 14:59:39 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2023-12-06 14:59:39 DATA:  test-backend-node-gpu.js result: performance: load: null total: 360 +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js start face similarity +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:39 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg face similarity +2023-12-06 14:59:40 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:40 DATA:  test-backend-node-gpu.js result: performance: load: null total: 333 +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js start face similarity +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg face similarity +2023-12-06 14:59:40 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2023-12-06 14:59:40 DATA:  test-backend-node-gpu.js result: performance: load: null total: 341 +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: face descriptor +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: face similarity {"similarity":[1,0.44727441595492046,0.556793560189727],"descriptors":[1024,1024,1024]} +2023-12-06 14:59:40 INFO:  test-backend-node-gpu.js test object +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js start object +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:40 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 14:59:41 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:41 DATA:  test-backend-node-gpu.js result: performance: load: null total: 389 +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js passed: centernet +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js start object +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:41 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 14:59:42 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:42 DATA:  test-backend-node-gpu.js result: performance: load: null total: 313 +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: nanodet +2023-12-06 14:59:42 INFO:  test-backend-node-gpu.js test sensitive +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js start sensitive +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg sensitive +2023-12-06 14:59:42 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:42 DATA:  test-backend-node-gpu.js result: performance: load: null total: 283 +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: sensitive result match +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: sensitive face result match +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: sensitive body result match +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js passed: sensitive hand result match +2023-12-06 14:59:42 INFO:  test-backend-node-gpu.js test body +2023-12-06 14:59:42 STATE: test-backend-node-gpu.js start blazepose +2023-12-06 14:59:43 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:43 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg blazepose +2023-12-06 14:59:44 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2023-12-06 14:59:44 DATA:  test-backend-node-gpu.js result: performance: load: null total: 403 +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js passed: blazepose +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js start efficientpose +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:44 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg efficientpose +2023-12-06 14:59:45 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2023-12-06 14:59:45 DATA:  test-backend-node-gpu.js result: performance: load: null total: 349 +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: efficientpose +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js start posenet +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg posenet +2023-12-06 14:59:45 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2023-12-06 14:59:45 DATA:  test-backend-node-gpu.js result: performance: load: null total: 279 +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: posenet +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js start movenet +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:45 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg movenet +2023-12-06 14:59:46 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:46 DATA:  test-backend-node-gpu.js result: performance: load: null total: 275 +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js passed: movenet +2023-12-06 14:59:46 INFO:  test-backend-node-gpu.js test face matching +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js passed: face database 40 +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js passed: face match {"first":{"index":4,"similarity":0.7827852251220577}} {"second":{"index":4,"similarity":0.5002052057057577}} {"third":{"index":4,"similarity":0.5401588464054732}} +2023-12-06 14:59:46 INFO:  test-backend-node-gpu.js test face similarity alternative +2023-12-06 14:59:46 STATE: test-backend-node-gpu.js start face embeddings +2023-12-06 14:59:47 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:47 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 14:59:48 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:48 DATA:  test-backend-node-gpu.js result: performance: load: null total: 324 +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js passed: mobilefacenet {"embedding":192} +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js start face embeddings +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 14:59:48 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:48 DATA:  test-backend-node-gpu.js result: performance: load: null total: 340 +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js passed: insightface {"embedding":512} +2023-12-06 14:59:48 INFO:  test-backend-node-gpu.js test face attention +2023-12-06 14:59:48 STATE: test-backend-node-gpu.js start face attention +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg face attention +2023-12-06 14:59:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 310 +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: face attention +2023-12-06 14:59:49 INFO:  test-backend-node-gpu.js test detectors +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js start detectors +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg detectors +2023-12-06 14:59:49 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:49 DATA:  test-backend-node-gpu.js result: performance: load: null total: 162 +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: detector result face match +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js passed: detector result hand match +2023-12-06 14:59:49 INFO:  test-backend-node-gpu.js test: multi-instance +2023-12-06 14:59:49 STATE: test-backend-node-gpu.js start multi instance +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: detect: random multi instance +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: face: 0 body: 1 hand: 0 gesture: 0 object: 0 person: 0 {} {} {"score":0,"keypoints":0} +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: performance: load: null total: 134 +2023-12-06 14:59:50 INFO:  test-backend-node-gpu.js test: first instance +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start multi instance +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: performance: load: null total: 134 +2023-12-06 14:59:50 INFO:  test-backend-node-gpu.js test: second instance +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start multi instance +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg multi instance +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:50 DATA:  test-backend-node-gpu.js result: performance: load: null total: 137 +2023-12-06 14:59:50 INFO:  test-backend-node-gpu.js test: concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js start concurrent +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:50 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151289024} +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:51 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-upper.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 0 gesture: 0 object: 0 person: 1 {"score":0.96,"gender":"unknown"} {} {"score":0.75,"keypoints":7} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-face.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.91,"gender":"unknown"} {} {"score":0.47,"keypoints":3} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: detect: samples/in/ai-body.jpg concurrent +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: face: 1 body: 1 hand: 1 gesture: 0 object: 0 person: 1 {"score":0.93,"gender":"unknown"} {} {"score":0.92,"keypoints":17} +2023-12-06 14:59:52 DATA:  test-backend-node-gpu.js result: performance: load: null total: 1213 +2023-12-06 14:59:52 INFO:  test-backend-node-gpu.js test: monkey-patch +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js event: image +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js event: detect +2023-12-06 14:59:52 STATE: test-backend-node-gpu.js passed: monkey patch +2023-12-06 14:59:53 STATE: test-backend-node-gpu.js passed: segmentation [262144] +2023-12-06 14:59:53 STATE: test-backend-node-gpu.js passeed: equal usage +2023-12-06 14:59:53 INFO:  test-backend-node-gpu.js test: input compare +2023-12-06 14:59:53 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34696120} +2023-12-06 14:59:53 STATE: test-backend-node-gpu.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1004796864} +2023-12-06 14:59:53 STATE: test-backend-node-gpu.js passed: image compare 0 23.275441687091504 +2023-12-06 14:59:53 INFO:  test-backend-node-gpu.js events: {"image":29,"detect":29,"warmup":2} +2023-12-06 14:59:53 INFO:  test-backend-node-gpu.js tensors 14855 +2023-12-06 14:59:53 INFO:  test-backend-node-gpu.js test complete: 19331 ms +2023-12-06 14:59:53 INFO:  +2023-12-06 14:59:53 INFO:  test-backend-node-wasm.js start +2023-12-06 14:59:53 DATA:  test-backend-node-wasm.js stdout: 2023-12-06 14:59:53 INFO:  { supported: true, backend: true, simd: undefined, multithread: undefined } https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.14.0/dist/ +2023-12-06 14:59:53 STATE: test-backend-node-wasm.js passed: model server: https://vladmandic.github.io/human-models/models/ +2023-12-06 14:59:53 INFO:  test-backend-node-wasm.js test: configuration validation +2023-12-06 14:59:53 STATE: test-backend-node-wasm.js passed: configuration default validation [] +2023-12-06 14:59:53 STATE: test-backend-node-wasm.js passed: configuration invalid validation [{"reason":"unknown property","where":"config.invalid = true"}] +2023-12-06 14:59:53 INFO:  test-backend-node-wasm.js test: model load +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: models loaded 11 11 [{"name":"movenet","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/movenet-lightning.json"},{"name":"liveness","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/liveness.json"},{"name":"antispoof","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/antispoof.json"},{"name":"facemesh","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/facemesh.json"},{"name":"centernet","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/centernet.json"},{"name":"handskeleton","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/handlandmark-lite.json"},{"name":"iris","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/iris.json"},{"name":"blazeface","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/blazeface.json"},{"name":"emotion","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/emotion.json"},{"name":"faceres","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/faceres.json"},{"name":"handtrack","loaded":true,"size":0,"url":"https://vladmandic.github.io/human-models/models/handtrack.json"}] +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js memory: {"memory":{"unreliable":false,"numTensors":1785,"numDataBuffers":1785,"numBytes":56431460}} +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js state: {"state":{"registeredVariables":{},"nextTapeNodeId":0,"numBytes":56431460,"numTensors":1785,"numStringTensors":0,"numDataBuffers":1785,"gradientDepth":0,"kernelDepth":0,"scopeStack":[],"numDataMovesStack":[],"nextScopeId":0,"tensorInfo":{},"profiling":false,"activeProfile":{"newBytes":0,"newTensors":0,"peakBytes":0,"kernels":[],"result":null,"kernelNames":[]}}} +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js test: warmup +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: create human +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js human version: 3.2.0 +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js platform: agent: +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js tfjs version: 4.14.0 +2023-12-06 14:59:55 INFO:  test-backend-node-wasm.js env: {"browser":false,"node":true,"platform":"","agent":"","backends":["wasm"],"initial":false,"tfjs":{"version":"4.14.0"},"offscreen":false,"perfadd":false,"tensorflow":{},"wasm":{"supported":true,"backend":true,"simd":true,"multithread":false},"webgl":{"supported":false,"backend":false},"webgpu":{"supported":false,"backend":false},"cpu":{"flags":[]},"kernels":174} +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: set backend: wasm +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js tensors 1785 +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js result: defined models: 11 loaded models: 11 +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: load models 11 +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: warmup: none default +2023-12-06 14:59:55 DATA:  test-backend-node-wasm.js result: face: 0 body: 0 hand: 0 gesture: 0 object: 0 person: 0 {} {} {} +2023-12-06 14:59:55 DATA:  test-backend-node-wasm.js result: performance: load: null total: null +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: warmup none result match +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js event: warmup +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: warmup: face default +2023-12-06 14:59:55 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2023-12-06 14:59:55 DATA:  test-backend-node-wasm.js result: performance: load: null total: 488 +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js passed: warmup face result match +2023-12-06 14:59:55 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js event: warmup +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: warmup: body default +2023-12-06 14:59:56 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:56 DATA:  test-backend-node-wasm.js result: performance: load: null total: 338 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: warmup body result match +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js details: {"face":{"boxScore":0.93,"faceScore":1,"age":23.7,"gender":"female","genderScore":0.97},"emotion":[{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}],"body":{"score":0.92,"keypoints":17},"hand":{"boxScore":0.51,"fingerScore":0.73,"keypoints":21},"gestures":[{"face":0,"gesture":"facing right"},{"face":0,"gesture":"mouth 21% open"},{"hand":0,"gesture":"pinky forward"},{"hand":0,"gesture":"thumb up"},{"hand":0,"gesture":"open palm"},{"iris":0,"gesture":"looking left"},{"iris":0,"gesture":"looking up"}]} +2023-12-06 14:59:56 INFO:  test-backend-node-wasm.js test: details verification +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js start default +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg default +2023-12-06 14:59:56 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 14:59:56 DATA:  test-backend-node-wasm.js result: performance: load: null total: 334 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face length 1 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face score 1 0.93 1 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face age/gender 23.7 female 0.97 2.34 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face arrays 4 478 1024 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face emotion 2 {"score":0.59,"emotion":"angry"} +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face anti-spoofing 0.79 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details face liveness 0.83 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details body length 1 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details body 0.92 17 6 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details hand length 1 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details hand 0.51 0.73 point +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details hand arrays 21 5 7 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details gesture length 7 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details gesture first {"face":0,"gesture":"facing right"} +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details object length 1 +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: details object 0.72 person +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1413675264} +2023-12-06 14:59:56 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: float32 +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,4] {"checksum":1413675264} +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:57 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,4] dtype: float32 +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,3] dtype: float32 +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1200,1200,3] {"checksum":1038921856} +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:58 STATE: test-backend-node-wasm.js passed: tensor shape: [1200,1200,3] dtype: float32 +2023-12-06 14:59:59 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,4] {"checksum":1371996871} +2023-12-06 14:59:59 STATE: test-backend-node-wasm.js event: image +2023-12-06 14:59:59 STATE: test-backend-node-wasm.js event: detect +2023-12-06 14:59:59 STATE: test-backend-node-wasm.js passed: tensor shape: [1,1200,1200,4] dtype: int32 +2023-12-06 14:59:59 INFO:  test-backend-node-wasm.js test default +2023-12-06 14:59:59 STATE: test-backend-node-wasm.js start async +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg async +2023-12-06 15:00:01 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 15:00:01 DATA:  test-backend-node-wasm.js result: performance: load: null total: 395 +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js passed: default result face match 1 female 0.97 +2023-12-06 15:00:01 INFO:  test-backend-node-wasm.js test sync +2023-12-06 15:00:01 STATE: test-backend-node-wasm.js start sync +2023-12-06 15:00:02 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:02 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sync +2023-12-06 15:00:03 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 15:00:03 DATA:  test-backend-node-wasm.js result: performance: load: null total: 399 +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js passed: default sync 1 female 0.97 +2023-12-06 15:00:03 INFO:  test-backend-node-wasm.js test: image process +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js passed: image input null [1,256,256,3] +2023-12-06 15:00:03 INFO:  test-backend-node-wasm.js test: image null +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js passed: invalid input could not convert input to tensor +2023-12-06 15:00:03 INFO:  test-backend-node-wasm.js test face similarity +2023-12-06 15:00:03 STATE: test-backend-node-wasm.js start face similarity +2023-12-06 15:00:04 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2023-12-06 15:00:04 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face similarity +2023-12-06 15:00:05 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 6 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.82,"class":"person"} {"score":0.47,"keypoints":3} +2023-12-06 15:00:05 DATA:  test-backend-node-wasm.js result: performance: load: null total: 397 +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js start face similarity +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg face similarity +2023-12-06 15:00:05 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 15:00:05 DATA:  test-backend-node-wasm.js result: performance: load: null total: 301 +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js start face similarity +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-upper.jpg [1,720,688,3] {"checksum":151155104} +2023-12-06 15:00:05 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-upper.jpg face similarity +2023-12-06 15:00:06 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 0 gesture: 4 object: 1 person: 1 {"score":1,"age":23.5,"gender":"female"} {"score":0.71,"class":"person"} {"score":0.75,"keypoints":7} +2023-12-06 15:00:06 DATA:  test-backend-node-wasm.js result: performance: load: null total: 289 +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: face descriptor +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: face similarity {"similarity":[1,0.4472741837136387,0.5567931378245533],"descriptors":[1024,1024,1024]} +2023-12-06 15:00:06 INFO:  test-backend-node-wasm.js test object +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js start object +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 15:00:06 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 1 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.72,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 15:00:06 DATA:  test-backend-node-wasm.js result: performance: load: null total: 311 +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js passed: centernet +2023-12-06 15:00:06 STATE: test-backend-node-wasm.js start object +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg object +2023-12-06 15:00:07 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 1 gesture: 7 object: 3 person: 1 {"score":1,"age":23.7,"gender":"female"} {"score":0.86,"class":"person"} {"score":0.92,"keypoints":17} +2023-12-06 15:00:07 DATA:  test-backend-node-wasm.js result: performance: load: null total: 353 +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js passed: nanodet +2023-12-06 15:00:07 INFO:  test-backend-node-wasm.js test sensitive +2023-12-06 15:00:07 STATE: test-backend-node-wasm.js start sensitive +2023-12-06 15:00:08 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:08 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg sensitive +2023-12-06 15:00:09 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 15:00:09 DATA:  test-backend-node-wasm.js result: performance: load: null total: 276 +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: sensitive result match +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: sensitive face result match +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: sensitive face emotion result [{"score":0.59,"emotion":"angry"},{"score":0.29,"emotion":"fear"}] +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: sensitive body result match +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js passed: sensitive hand result match +2023-12-06 15:00:09 INFO:  test-backend-node-wasm.js test body +2023-12-06 15:00:09 STATE: test-backend-node-wasm.js start blazepose +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg blazepose +2023-12-06 15:00:11 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.99,"keypoints":39} +2023-12-06 15:00:11 DATA:  test-backend-node-wasm.js result: performance: load: null total: 432 +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js passed: blazepose +2023-12-06 15:00:11 STATE: test-backend-node-wasm.js start efficientpose +2023-12-06 15:00:12 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:12 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg efficientpose +2023-12-06 15:00:13 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.75,"keypoints":13} +2023-12-06 15:00:13 DATA:  test-backend-node-wasm.js result: performance: load: null total: 675 +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js passed: efficientpose +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js start posenet +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:13 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg posenet +2023-12-06 15:00:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.96,"keypoints":16} +2023-12-06 15:00:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 261 +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: posenet +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js start movenet +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-body.jpg [1,1200,1200,3] {"checksum":1038921856} +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-body.jpg movenet +2023-12-06 15:00:14 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 9 object: 0 person: 1 {"score":1,"age":23.7,"gender":"female"} {} {"score":0.92,"keypoints":17} +2023-12-06 15:00:14 DATA:  test-backend-node-wasm.js result: performance: load: null total: 214 +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: movenet +2023-12-06 15:00:14 INFO:  test-backend-node-wasm.js test face matching +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: face database 40 +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js passed: face match {"first":{"index":4,"similarity":0.7827852754786533}} {"second":{"index":4,"similarity":0.5002051178899982}} {"third":{"index":4,"similarity":0.5401586736511599}} +2023-12-06 15:00:14 INFO:  test-backend-node-wasm.js test face similarity alternative +2023-12-06 15:00:14 STATE: test-backend-node-wasm.js start face embeddings +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 15:00:16 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 15:00:16 DATA:  test-backend-node-wasm.js result: performance: load: null total: 306 +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js passed: mobilefacenet {"embedding":192} +2023-12-06 15:00:16 STATE: test-backend-node-wasm.js start face embeddings +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js event: detect +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js passed: detect: samples/in/ai-face.jpg face embeddings +2023-12-06 15:00:17 DATA:  test-backend-node-wasm.js result: face: 1 body: 1 hand: 2 gesture: 8 object: 0 person: 1 {"score":1,"age":23.5,"gender":"female"} {} {"score":0.47,"keypoints":3} +2023-12-06 15:00:17 DATA:  test-backend-node-wasm.js result: performance: load: null total: 273 +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js passed: insightface {"embedding":512} +2023-12-06 15:00:17 INFO:  test-backend-node-wasm.js test face attention +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js start face attention +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js passed: load image: samples/in/ai-face.jpg [1,256,256,3] {"checksum":34697856} +2023-12-06 15:00:17 STATE: test-backend-node-wasm.js event: image +2023-12-06 15:00:17 ERROR: test-backend-node-wasm.js failed: testDetect face attention +2023-12-06 15:00:17 ERROR: test-backend-node-wasm.js uncaughtException {"name":"Error","message":"BatchMatMul for non non-float32 tensors not yet supported.","stack":["Error: BatchMatMul for non non-float32 tensors not yet supported."," at Object.batchMatMul [as kernelFunc] (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-backend-wasm/dist/tf-backend-wasm.node.js:1280:15)"," at kernelFunc (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4707:32)"," at /home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4767:27"," at Engine.scopedRun (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4572:23)"," at Engine.runKernelFunc (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4763:14)"," at Engine.runKernel (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4636:21)"," at matMul_ (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:13408:19)"," at Object.matMul__op [as matMul] (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:12217:29)"," at executeOp$9 (/home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:29592:25)"," at /home/vlado/dev/human/node_modules/@tensorflow/tfjs-converter/dist/tf-converter.node.js:30172:50"]} +2023-12-06 15:00:17 STATE: all tests complete +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node-simple.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node-event.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node-similarity.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node-canvas.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/process-folder.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/multithread/node-multiprocess.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/facematch/node-match.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../demo/nodejs/node-bench.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"../test/test-node-emotion.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"test-node-load.js","passed":1,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"test-node-gear.js","passed":4,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"test-backend-node.js","passed":125,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"test-backend-node-gpu.js","passed":125,"failed":0} +2023-12-06 15:00:17 INFO:  status {"test":"test-backend-node-wasm.js","passed":92,"failed":1} +2023-12-06 15:00:17 INFO:  failures {"count":1} +2023-12-06 15:00:17 WARN:  failed {"test":"test-backend-node-wasm.js","message":["error",["failed:","testDetect face attention"]]} diff --git a/tfjs/tf-browser.ts b/tfjs/tf-browser.ts index c1e9d7e8..edb3bda5 100644 --- a/tfjs/tf-browser.ts +++ b/tfjs/tf-browser.ts @@ -23,3 +23,4 @@ export * from '@tensorflow/tfjs-backend-webgpu/dist/index.js'; // export versions, overrides version object from @tensorflow/tfjs export { version } from 'dist/tfjs.version.js'; +export const node = undefined; diff --git a/typedoc/assets/main.js b/typedoc/assets/main.js index f7c83669..d0aa8d5f 100644 --- a/typedoc/assets/main.js +++ b/typedoc/assets/main.js @@ -1,7 +1,8 @@ "use strict"; -"use strict";(()=>{var Qe=Object.create;var ae=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Me=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ce(e))!Re.call(t,i)&&i!==n&&ae(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Qe(Oe(t)):{},Me(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));var de=_e((ce,he)=>{(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 h=t.utils.clone(n)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(r.slice(a,o),h))}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(ou?h+=2:a==u&&(n+=r[l+1]*i[h+1],l+=2,h+=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 u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,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 l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),m=s.str.charAt(1),v;m in s.node.edges?v=s.node.edges[m]:(v=new t.TokenSet,s.node.edges[m]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+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),u=0;u1?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 ce=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});var le=[];function B(t,e){le.push({selector:e,constructor:t})}var Y=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){le.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()}ensureFocusedElementVisible(){this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null);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)}}};var I=class{constructor(e){this.el=e.el,this.app=e.app}};var J=class{constructor(){this.listeners={}}addEventListener(e,n){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(n)}removeEventListener(e,n){if(!(e in this.listeners))return;let r=this.listeners[e];for(let i=0,s=r.length;i{let n=Date.now();return(...r)=>{n+e-Date.now()<0&&(t(...r),n=Date.now())}};var re=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.navigation=document.querySelector(".col-menu"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.searchInput=document.querySelector("#tsd-search input"),this.searchInput&&this.searchInput.addEventListener("focus",()=>{this.hideShowToolbar()}),this.onResize(),this.onScroll()}triggerResize(){let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onScroll(){this.scrollTop=window.scrollY||0;let n=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(n),this.hideShowToolbar()}hideShowToolbar(){let n=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0||!!this.searchInput&&this.searchInput===document.activeElement,n!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.navigation?.classList.toggle("col-menu--hide")),this.lastY=this.scrollTop}},R=re;R.instance=new re;var X=class extends I{constructor(n){super(n);this.anchors=[];this.index=-1;R.instance.addEventListener("resize",()=>this.onResize()),R.instance.addEventListener("scroll",r=>this.onScroll(r)),this.createAnchors()}createAnchors(){let n=window.location.href;n.indexOf("#")!=-1&&(n=n.substring(0,n.indexOf("#"))),this.el.querySelectorAll("a").forEach(r=>{let i=r.href;if(i.indexOf("#")==-1||i.substring(0,n.length)!=n)return;let s=i.substring(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=r.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let n;for(let i=0,s=this.anchors.length;ii.position-s.position);let r=new CustomEvent("scroll",{detail:{scrollTop:R.instance.scrollTop}});this.onScroll(r)}onScroll(n){let r=n.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>r;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var me=De(de());function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let n=document.querySelector("#tsd-search input"),r=document.querySelector("#tsd-search .results");if(!n||!r)throw new Error("The input field or the result list wrapper was not found");let i=!1;r.addEventListener("mousedown",()=>i=!0),r.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),n.addEventListener("focus",()=>t.classList.add("has-focus")),n.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Fe(t,r,n,s)}function Fe(t,e,n,r){n.addEventListener("input",ue(()=>{He(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?pe(e,-1):s.key==="ArrowDown"?pe(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 Ae(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=me.Index.load(window.searchData.index))}function He(t,e,n,r){if(Ae(r,t),!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s=i?r.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${fe(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes??"";let m=document.createElement("a");m.href=r.base+u.url,m.innerHTML=l,h.append(m),e.appendChild(h)}}function pe(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 Ve(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 fe(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(ie(t.substring(s,o)),`${ie(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ie(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function ie(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var F="mousedown",ye="mousemove",j="mouseup",Z={x:0,y:0},ge=!1,se=!1,Be=!1,A=!1,xe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(xe?"is-mobile":"not-mobile");xe&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",ye="touchmove",j="touchend");document.addEventListener(F,t=>{se=!0,A=!1;let e=F=="touchstart"?t.targetTouches[0]:t;Z.y=e.pageY||0,Z.x=e.pageX||0});document.addEventListener(ye,t=>{if(se&&!A){let e=F=="touchstart"?t.targetTouches[0]:t,n=Z.x-(e.pageX||0),r=Z.y-(e.pageY||0);A=Math.sqrt(n*n+r*r)>10}});document.addEventListener(j,()=>{se=!1});document.addEventListener("click",t=>{ge&&(t.preventDefault(),t.stopImmediatePropagation(),ge=!1)});var K=class extends I{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(j,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(j,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){A||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!A&&this.active&&n.target.closest(".col-menu")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var oe;try{oe=localStorage}catch{oe={getItem(){return null},setItem(){}}}var Q=oe;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var ee=class extends I{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var te=class extends I{constructor(n){super(n);this.calculateHeights(),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.textContent.replace(/\s+/g,"-").toLowerCase()}`,this.setLocalStorage(this.fromLocalStorage(),!0),this.summary.addEventListener("click",r=>this.toggleVisibility(r)),this.icon.style.transform=this.getIconRotation()}getIconRotation(n=this.el.open){return`rotate(${n?0:-90}deg)`}calculateHeights(){let n=this.el.open,{position:r,left:i}=this.el.style;this.el.style.position="fixed",this.el.style.left="-9999px",this.el.open=!0,this.expandedHeight=this.el.offsetHeight+"px",this.el.open=!1,this.collapsedHeight=this.el.offsetHeight+"px",this.el.open=n,this.el.style.height=n?this.expandedHeight:this.collapsedHeight,this.el.style.position=r,this.el.style.left=i}toggleVisibility(n){n.preventDefault(),this.el.style.overflow="hidden",this.el.open?this.collapse():this.expand()}expand(n=!0){this.el.open=!0,this.animate(this.collapsedHeight,this.expandedHeight,{opening:!0,duration:n?300:0})}collapse(n=!0){this.animate(this.expandedHeight,this.collapsedHeight,{opening:!1,duration:n?300:0})}animate(n,r,{opening:i,duration:s=300}){if(this.animation)return;let o={duration:s,easing:"ease"};this.animation=this.el.animate({height:[n,r]},o),this.icon.animate({transform:[this.icon.style.transform||this.getIconRotation(!i),this.getIconRotation(i)]},o).addEventListener("finish",()=>{this.icon.style.transform=this.getIconRotation(i)}),this.animation.addEventListener("finish",()=>this.animationEnd(i))}animationEnd(n){this.el.open=n,this.animation=void 0,this.el.style.height="auto",this.el.style.overflow="visible",this.setLocalStorage(n)}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.open}setLocalStorage(n,r=!1){this.fromLocalStorage()===n&&!r||(Q.setItem(this.key,n.toString()),this.el.open=n,this.handleValueChange(r))}handleValueChange(n=!1){this.fromLocalStorage()===this.el.open&&!n||(this.fromLocalStorage()?this.expand(!1):this.collapse(!1))}};function be(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,Ee(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),Ee(t.value)})}function Ee(t){document.documentElement.dataset.theme=t}ve();B(X,".menu-highlight");B(K,"a[data-toggle]");B(te,".tsd-index-accordion");B(ee,".tsd-filter-item input[type=checkbox]");var we=document.getElementById("theme");we&&be(we);var je=new Y;Object.defineProperty(window,"app",{value:je});})(); +"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=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=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_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),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,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.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}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()}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){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}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(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(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 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=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}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 Ve(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 Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!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&&(He=!0,F="touchstart",pe="touchmove",B="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(pe,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(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);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 r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.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,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(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.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.href===r.href&&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();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/typedoc/assets/navigation.js b/typedoc/assets/navigation.js new file mode 100644 index 00000000..e51618d8 --- /dev/null +++ b/typedoc/assets/navigation.js @@ -0,0 +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 diff --git a/typedoc/assets/search.js b/typedoc/assets/search.js index 65b4ef27..6e59737c 100644 --- a/typedoc/assets/search.js +++ b/typedoc/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\",\"8388608\":\"Reference\"},\"rows\":[{\"kind\":128,\"name\":\"Human\",\"url\":\"classes/Human.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Human.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Human.html#version\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/Human.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"classes/Human.html#result\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"classes/Human.html#state\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"process\",\"url\":\"classes/Human.html#process\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Human.html#process.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Human.process\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"classes/Human.html#process.__type.tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.process.__type\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"classes/Human.html#process.__type.canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Human.process.__type\"},{\"kind\":1024,\"name\":\"tf\",\"url\":\"classes/Human.html#tf\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"env\",\"url\":\"classes/Human.html#env\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"draw\",\"url\":\"classes/Human.html#draw\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"match\",\"url\":\"classes/Human.html#match\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"events\",\"url\":\"classes/Human.html#events\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceTriangulation\",\"url\":\"classes/Human.html#faceTriangulation\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"faceUVMap\",\"url\":\"classes/Human.html#faceUVMap\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"classes/Human.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"analyze\",\"url\":\"classes/Human.html#analyze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/Human.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/Human.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"now\",\"url\":\"classes/Human.html#now\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"image\",\"url\":\"classes/Human.html#image\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"segmentation\",\"url\":\"classes/Human.html#segmentation\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"compare\",\"url\":\"classes/Human.html#compare\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"init\",\"url\":\"classes/Human.html#init\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":1024,\"name\":\"webcam\",\"url\":\"classes/Human.html#webcam\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/Human.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"emit\",\"url\":\"classes/Human.html#emit\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"next\",\"url\":\"classes/Human.html#next\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"warmup\",\"url\":\"classes/Human.html#warmup\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"profile\",\"url\":\"classes/Human.html#profile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"detect\",\"url\":\"classes/Human.html#detect\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"sleep\",\"url\":\"classes/Human.html#sleep\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":2048,\"name\":\"video\",\"url\":\"classes/Human.html#video\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Human\"},{\"kind\":8388608,\"name\":\"default\",\"url\":\"index.html#default\",\"classes\":\"tsd-kind-reference\"},{\"kind\":4,\"name\":\"match\",\"url\":\"modules/match.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"distance\",\"url\":\"functions/match.distance.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"similarity\",\"url\":\"functions/match.similarity.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":64,\"name\":\"find\",\"url\":\"functions/match.find.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/match.find.html#find.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"match.find.find\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"functions/match.find.html#find.__type.index\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"functions/match.find.html#find.__type.distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":1024,\"name\":\"similarity\",\"url\":\"functions/match.find.html#find.__type.similarity\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"match.find.find.__type\"},{\"kind\":4194304,\"name\":\"Descriptor\",\"url\":\"types/match.Descriptor.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4194304,\"name\":\"MatchOptions\",\"url\":\"types/match.MatchOptions.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-namespace\",\"parent\":\"match\"},{\"kind\":4,\"name\":\"draw\",\"url\":\"modules/draw.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"person\",\"url\":\"functions/draw.person.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"canvas\",\"url\":\"functions/draw.canvas.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"all\",\"url\":\"functions/draw.all.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"init\",\"url\":\"functions/draw.init.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":32,\"name\":\"options\",\"url\":\"variables/draw.options.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"face\",\"url\":\"functions/draw.face.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"body\",\"url\":\"functions/draw.body.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"hand\",\"url\":\"functions/draw.hand.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"object\",\"url\":\"functions/draw.object.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":64,\"name\":\"gesture\",\"url\":\"functions/draw.gesture.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"draw\"},{\"kind\":4,\"name\":\"models\",\"url\":\"modules/models.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"validateModel\",\"url\":\"functions/models.validateModel.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":256,\"name\":\"KernelOps\",\"url\":\"interfaces/models.KernelOps.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/models.KernelOps.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/models.KernelOps.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"missing\",\"url\":\"interfaces/models.KernelOps.html#missing\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":1024,\"name\":\"ops\",\"url\":\"interfaces/models.KernelOps.html#ops\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.KernelOps\"},{\"kind\":256,\"name\":\"ModelStats\",\"url\":\"interfaces/models.ModelStats.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":1024,\"name\":\"numLoadedModels\",\"url\":\"interfaces/models.ModelStats.html#numLoadedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"numDefinedModels\",\"url\":\"interfaces/models.ModelStats.html#numDefinedModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"percentageLoaded\",\"url\":\"interfaces/models.ModelStats.html#percentageLoaded\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeFromManifest\",\"url\":\"interfaces/models.ModelStats.html#totalSizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeWeights\",\"url\":\"interfaces/models.ModelStats.html#totalSizeWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"totalSizeLoading\",\"url\":\"interfaces/models.ModelStats.html#totalSizeLoading\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":1024,\"name\":\"modelStats\",\"url\":\"interfaces/models.ModelStats.html#modelStats\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"models.ModelStats\"},{\"kind\":128,\"name\":\"Models\",\"url\":\"classes/models.Models.html\",\"classes\":\"tsd-kind-class tsd-parent-kind-namespace\",\"parent\":\"models\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/models.Models.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":1024,\"name\":\"models\",\"url\":\"classes/models.Models.html#models\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"stats\",\"url\":\"classes/models.Models.html#stats\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"reset\",\"url\":\"classes/models.Models.html#reset\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/models.Models.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"list\",\"url\":\"classes/models.Models.html#list\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"loaded\",\"url\":\"classes/models.Models.html#loaded\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":2048,\"name\":\"validate\",\"url\":\"classes/models.Models.html#validate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"models.Models\"},{\"kind\":128,\"name\":\"Tensor\",\"url\":\"classes/Tensor-1.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tensor-1.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"classes/Tensor-1.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dataId\",\"url\":\"classes/Tensor-1.html#dataId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"shape\",\"url\":\"classes/Tensor-1.html#shape\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"classes/Tensor-1.html#size\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"dtype\",\"url\":\"classes/Tensor-1.html#dtype\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"rankType\",\"url\":\"classes/Tensor-1.html#rankType\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"kept\",\"url\":\"classes/Tensor-1.html#kept\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"scopeId\",\"url\":\"classes/Tensor-1.html#scopeId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"kerasMask\",\"url\":\"classes/Tensor-1.html#kerasMask\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":1024,\"name\":\"strides\",\"url\":\"classes/Tensor-1.html#strides\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"rank\",\"url\":\"classes/Tensor-1.html#rank\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"buffer\",\"url\":\"classes/Tensor-1.html#buffer\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bufferSync\",\"url\":\"classes/Tensor-1.html#bufferSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"array\",\"url\":\"classes/Tensor-1.html#array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"arraySync\",\"url\":\"classes/Tensor-1.html#arraySync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"data\",\"url\":\"classes/Tensor-1.html#data\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataToGPU\",\"url\":\"classes/Tensor-1.html#dataToGPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dataSync\",\"url\":\"classes/Tensor-1.html#dataSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"bytes\",\"url\":\"classes/Tensor-1.html#bytes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/Tensor-1.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":262144,\"name\":\"isDisposed\",\"url\":\"classes/Tensor-1.html#isDisposed\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"throwIfDisposed\",\"url\":\"classes/Tensor-1.html#throwIfDisposed\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"print\",\"url\":\"classes/Tensor-1.html#print\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clone\",\"url\":\"classes/Tensor-1.html#clone\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/Tensor-1.html#toString\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"variable\",\"url\":\"classes/Tensor-1.html#variable\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"abs\",\"url\":\"classes/Tensor-1.html#abs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acos\",\"url\":\"classes/Tensor-1.html#acos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"acosh\",\"url\":\"classes/Tensor-1.html#acosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"add\",\"url\":\"classes/Tensor-1.html#add\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"all\",\"url\":\"classes/Tensor-1.html#all\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"any\",\"url\":\"classes/Tensor-1.html#any\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMax\",\"url\":\"classes/Tensor-1.html#argMax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"argMin\",\"url\":\"classes/Tensor-1.html#argMin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asScalar\",\"url\":\"classes/Tensor-1.html#asScalar\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asType\",\"url\":\"classes/Tensor-1.html#asType\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as1D\",\"url\":\"classes/Tensor-1.html#as1D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as2D\",\"url\":\"classes/Tensor-1.html#as2D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as3D\",\"url\":\"classes/Tensor-1.html#as3D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as4D\",\"url\":\"classes/Tensor-1.html#as4D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"as5D\",\"url\":\"classes/Tensor-1.html#as5D\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asin\",\"url\":\"classes/Tensor-1.html#asin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"asinh\",\"url\":\"classes/Tensor-1.html#asinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan\",\"url\":\"classes/Tensor-1.html#atan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atan2\",\"url\":\"classes/Tensor-1.html#atan2\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"atanh\",\"url\":\"classes/Tensor-1.html#atanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"avgPool\",\"url\":\"classes/Tensor-1.html#avgPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchToSpaceND\",\"url\":\"classes/Tensor-1.html#batchToSpaceND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"batchNorm\",\"url\":\"classes/Tensor-1.html#batchNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"broadcastTo\",\"url\":\"classes/Tensor-1.html#broadcastTo\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cast\",\"url\":\"classes/Tensor-1.html#cast\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ceil\",\"url\":\"classes/Tensor-1.html#ceil\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"clipByValue\",\"url\":\"classes/Tensor-1.html#clipByValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"concat\",\"url\":\"classes/Tensor-1.html#concat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv1d\",\"url\":\"classes/Tensor-1.html#conv1d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2dTranspose\",\"url\":\"classes/Tensor-1.html#conv2dTranspose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"conv2d\",\"url\":\"classes/Tensor-1.html#conv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cos\",\"url\":\"classes/Tensor-1.html#cos\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cosh\",\"url\":\"classes/Tensor-1.html#cosh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumprod\",\"url\":\"classes/Tensor-1.html#cumprod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"cumsum\",\"url\":\"classes/Tensor-1.html#cumsum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthToSpace\",\"url\":\"classes/Tensor-1.html#depthToSpace\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"depthwiseConv2d\",\"url\":\"classes/Tensor-1.html#depthwiseConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dilation2d\",\"url\":\"classes/Tensor-1.html#dilation2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"divNoNan\",\"url\":\"classes/Tensor-1.html#divNoNan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"div\",\"url\":\"classes/Tensor-1.html#div\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"dot\",\"url\":\"classes/Tensor-1.html#dot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"elu\",\"url\":\"classes/Tensor-1.html#elu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"equal\",\"url\":\"classes/Tensor-1.html#equal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"erf\",\"url\":\"classes/Tensor-1.html#erf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"euclideanNorm\",\"url\":\"classes/Tensor-1.html#euclideanNorm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"exp\",\"url\":\"classes/Tensor-1.html#exp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expandDims\",\"url\":\"classes/Tensor-1.html#expandDims\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"expm1\",\"url\":\"classes/Tensor-1.html#expm1\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"fft\",\"url\":\"classes/Tensor-1.html#fft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"flatten\",\"url\":\"classes/Tensor-1.html#flatten\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floor\",\"url\":\"classes/Tensor-1.html#floor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"floorDiv\",\"url\":\"classes/Tensor-1.html#floorDiv\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"gather\",\"url\":\"classes/Tensor-1.html#gather\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greaterEqual\",\"url\":\"classes/Tensor-1.html#greaterEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"greater\",\"url\":\"classes/Tensor-1.html#greater\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"ifft\",\"url\":\"classes/Tensor-1.html#ifft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"irfft\",\"url\":\"classes/Tensor-1.html#irfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isFinite\",\"url\":\"classes/Tensor-1.html#isFinite\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isInf\",\"url\":\"classes/Tensor-1.html#isInf\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"isNaN\",\"url\":\"classes/Tensor-1.html#isNaN\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"leakyRelu\",\"url\":\"classes/Tensor-1.html#leakyRelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"lessEqual\",\"url\":\"classes/Tensor-1.html#lessEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"less\",\"url\":\"classes/Tensor-1.html#less\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"localResponseNormalization\",\"url\":\"classes/Tensor-1.html#localResponseNormalization\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSigmoid\",\"url\":\"classes/Tensor-1.html#logSigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSoftmax\",\"url\":\"classes/Tensor-1.html#logSoftmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logSumExp\",\"url\":\"classes/Tensor-1.html#logSumExp\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log\",\"url\":\"classes/Tensor-1.html#log\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"log1p\",\"url\":\"classes/Tensor-1.html#log1p\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalAnd\",\"url\":\"classes/Tensor-1.html#logicalAnd\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalNot\",\"url\":\"classes/Tensor-1.html#logicalNot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalOr\",\"url\":\"classes/Tensor-1.html#logicalOr\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"logicalXor\",\"url\":\"classes/Tensor-1.html#logicalXor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"matMul\",\"url\":\"classes/Tensor-1.html#matMul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maxPool\",\"url\":\"classes/Tensor-1.html#maxPool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"max\",\"url\":\"classes/Tensor-1.html#max\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"maximum\",\"url\":\"classes/Tensor-1.html#maximum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mean\",\"url\":\"classes/Tensor-1.html#mean\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"min\",\"url\":\"classes/Tensor-1.html#min\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"minimum\",\"url\":\"classes/Tensor-1.html#minimum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mirrorPad\",\"url\":\"classes/Tensor-1.html#mirrorPad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mod\",\"url\":\"classes/Tensor-1.html#mod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"mul\",\"url\":\"classes/Tensor-1.html#mul\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"neg\",\"url\":\"classes/Tensor-1.html#neg\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"norm\",\"url\":\"classes/Tensor-1.html#norm\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"notEqual\",\"url\":\"classes/Tensor-1.html#notEqual\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"oneHot\",\"url\":\"classes/Tensor-1.html#oneHot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"onesLike\",\"url\":\"classes/Tensor-1.html#onesLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pad\",\"url\":\"classes/Tensor-1.html#pad\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pool\",\"url\":\"classes/Tensor-1.html#pool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"pow\",\"url\":\"classes/Tensor-1.html#pow\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prelu\",\"url\":\"classes/Tensor-1.html#prelu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"prod\",\"url\":\"classes/Tensor-1.html#prod\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reciprocal\",\"url\":\"classes/Tensor-1.html#reciprocal\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu\",\"url\":\"classes/Tensor-1.html#relu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"relu6\",\"url\":\"classes/Tensor-1.html#relu6\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshapeAs\",\"url\":\"classes/Tensor-1.html#reshapeAs\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reshape\",\"url\":\"classes/Tensor-1.html#reshape\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeBilinear\",\"url\":\"classes/Tensor-1.html#resizeBilinear\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"resizeNearestNeighbor\",\"url\":\"classes/Tensor-1.html#resizeNearestNeighbor\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"reverse\",\"url\":\"classes/Tensor-1.html#reverse\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rfft\",\"url\":\"classes/Tensor-1.html#rfft\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"round\",\"url\":\"classes/Tensor-1.html#round\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"rsqrt\",\"url\":\"classes/Tensor-1.html#rsqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"selu\",\"url\":\"classes/Tensor-1.html#selu\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"separableConv2d\",\"url\":\"classes/Tensor-1.html#separableConv2d\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sigmoid\",\"url\":\"classes/Tensor-1.html#sigmoid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sign\",\"url\":\"classes/Tensor-1.html#sign\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sin\",\"url\":\"classes/Tensor-1.html#sin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sinh\",\"url\":\"classes/Tensor-1.html#sinh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"slice\",\"url\":\"classes/Tensor-1.html#slice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softmax\",\"url\":\"classes/Tensor-1.html#softmax\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"softplus\",\"url\":\"classes/Tensor-1.html#softplus\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"spaceToBatchND\",\"url\":\"classes/Tensor-1.html#spaceToBatchND\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"split\",\"url\":\"classes/Tensor-1.html#split\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sqrt\",\"url\":\"classes/Tensor-1.html#sqrt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"square\",\"url\":\"classes/Tensor-1.html#square\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squaredDifference\",\"url\":\"classes/Tensor-1.html#squaredDifference\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"squeeze\",\"url\":\"classes/Tensor-1.html#squeeze\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stack\",\"url\":\"classes/Tensor-1.html#stack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"step\",\"url\":\"classes/Tensor-1.html#step\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"stridedSlice\",\"url\":\"classes/Tensor-1.html#stridedSlice\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sub\",\"url\":\"classes/Tensor-1.html#sub\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"sum\",\"url\":\"classes/Tensor-1.html#sum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tan\",\"url\":\"classes/Tensor-1.html#tan\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tanh\",\"url\":\"classes/Tensor-1.html#tanh\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"tile\",\"url\":\"classes/Tensor-1.html#tile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toBool\",\"url\":\"classes/Tensor-1.html#toBool\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toFloat\",\"url\":\"classes/Tensor-1.html#toFloat\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"toInt\",\"url\":\"classes/Tensor-1.html#toInt\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"topk\",\"url\":\"classes/Tensor-1.html#topk\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.topk.topk\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.values\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#topk.topk-1.__type.indices\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.topk.topk.__type\"},{\"kind\":2048,\"name\":\"transpose\",\"url\":\"classes/Tensor-1.html#transpose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unique\",\"url\":\"classes/Tensor-1.html#unique\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Tensor.unique.unique\"},{\"kind\":1024,\"name\":\"values\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.values-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":1024,\"name\":\"indices\",\"url\":\"classes/Tensor-1.html#unique.unique-1.__type-1.indices-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Tensor.unique.unique.__type\"},{\"kind\":2048,\"name\":\"unsortedSegmentSum\",\"url\":\"classes/Tensor-1.html#unsortedSegmentSum\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"unstack\",\"url\":\"classes/Tensor-1.html#unstack\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"where\",\"url\":\"classes/Tensor-1.html#where\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":2048,\"name\":\"zerosLike\",\"url\":\"classes/Tensor-1.html#zerosLike\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tensor\"},{\"kind\":4,\"name\":\"Tensor\",\"url\":\"modules/Tensor.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":4194304,\"name\":\"Tensor1D\",\"url\":\"types/Tensor1D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Tensor2D\",\"url\":\"types/Tensor2D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Tensor3D\",\"url\":\"types/Tensor3D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Tensor4D\",\"url\":\"types/Tensor4D.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"TensorLike\",\"url\":\"types/TensorLike.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"GraphModel\",\"url\":\"classes/GraphModel.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/GraphModel.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"modelVersion\",\"url\":\"classes/GraphModel.html#modelVersion\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputNodes\",\"url\":\"classes/GraphModel.html#inputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputNodes\",\"url\":\"classes/GraphModel.html#outputNodes\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"inputs\",\"url\":\"classes/GraphModel.html#inputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"outputs\",\"url\":\"classes/GraphModel.html#outputs\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"weights\",\"url\":\"classes/GraphModel.html#weights\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":262144,\"name\":\"metadata\",\"url\":\"classes/GraphModel.html#metadata\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#metadata.metadata-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.metadata.metadata\"},{\"kind\":262144,\"name\":\"modelSignature\",\"url\":\"classes/GraphModel.html#modelSignature\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelSignature.modelSignature-1.__type-1\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelSignature.modelSignature\"},{\"kind\":262144,\"name\":\"modelStructuredOutputKeys\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/GraphModel.html#modelStructuredOutputKeys.modelStructuredOutputKeys-1.__type-2\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"GraphModel.modelStructuredOutputKeys.modelStructuredOutputKeys\"},{\"kind\":2048,\"name\":\"load\",\"url\":\"classes/GraphModel.html#load\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"loadSync\",\"url\":\"classes/GraphModel.html#loadSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"save\",\"url\":\"classes/GraphModel.html#save\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"predict\",\"url\":\"classes/GraphModel.html#predict\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"predictAsync\",\"url\":\"classes/GraphModel.html#predictAsync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"execute\",\"url\":\"classes/GraphModel.html#execute\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"executeAsync\",\"url\":\"classes/GraphModel.html#executeAsync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"getIntermediateTensors\",\"url\":\"classes/GraphModel.html#getIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"disposeIntermediateTensors\",\"url\":\"classes/GraphModel.html#disposeIntermediateTensors\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":2048,\"name\":\"dispose\",\"url\":\"classes/GraphModel.html#dispose\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"GraphModel\"},{\"kind\":8,\"name\":\"Rank\",\"url\":\"enums/Rank.html\",\"classes\":\"tsd-kind-enum\"},{\"kind\":16,\"name\":\"R0\",\"url\":\"enums/Rank.html#R0\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R1\",\"url\":\"enums/Rank.html#R1\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R2\",\"url\":\"enums/Rank.html#R2\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R3\",\"url\":\"enums/Rank.html#R3\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R4\",\"url\":\"enums/Rank.html#R4\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R5\",\"url\":\"enums/Rank.html#R5\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":16,\"name\":\"R6\",\"url\":\"enums/Rank.html#R6\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"Rank\"},{\"kind\":256,\"name\":\"DrawOptions\",\"url\":\"interfaces/DrawOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"color\",\"url\":\"interfaces/DrawOptions.html#color\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"alpha\",\"url\":\"interfaces/DrawOptions.html#alpha\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"labelColor\",\"url\":\"interfaces/DrawOptions.html#labelColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"shadowColor\",\"url\":\"interfaces/DrawOptions.html#shadowColor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"font\",\"url\":\"interfaces/DrawOptions.html#font\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineHeight\",\"url\":\"interfaces/DrawOptions.html#lineHeight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"lineWidth\",\"url\":\"interfaces/DrawOptions.html#lineWidth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"pointSize\",\"url\":\"interfaces/DrawOptions.html#pointSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"roundRect\",\"url\":\"interfaces/DrawOptions.html#roundRect\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPoints\",\"url\":\"interfaces/DrawOptions.html#drawPoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawLabels\",\"url\":\"interfaces/DrawOptions.html#drawLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawAttention\",\"url\":\"interfaces/DrawOptions.html#drawAttention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGestures\",\"url\":\"interfaces/DrawOptions.html#drawGestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawBoxes\",\"url\":\"interfaces/DrawOptions.html#drawBoxes\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawPolygons\",\"url\":\"interfaces/DrawOptions.html#drawPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"drawGaze\",\"url\":\"interfaces/DrawOptions.html#drawGaze\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fillPolygons\",\"url\":\"interfaces/DrawOptions.html#fillPolygons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useDepth\",\"url\":\"interfaces/DrawOptions.html#useDepth\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"useCurves\",\"url\":\"interfaces/DrawOptions.html#useCurves\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"faceLabels\",\"url\":\"interfaces/DrawOptions.html#faceLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyLabels\",\"url\":\"interfaces/DrawOptions.html#bodyLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"bodyPartLabels\",\"url\":\"interfaces/DrawOptions.html#bodyPartLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"handLabels\",\"url\":\"interfaces/DrawOptions.html#handLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"fingerLabels\",\"url\":\"interfaces/DrawOptions.html#fingerLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"objectLabels\",\"url\":\"interfaces/DrawOptions.html#objectLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":1024,\"name\":\"gestureLabels\",\"url\":\"interfaces/DrawOptions.html#gestureLabels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"DrawOptions\"},{\"kind\":4194304,\"name\":\"Box\",\"url\":\"types/Box.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Point\",\"url\":\"types/Point.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":32,\"name\":\"env\",\"url\":\"variables/env-1.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":128,\"name\":\"Env\",\"url\":\"classes/Env.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Env.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"browser\",\"url\":\"classes/Env.html#browser\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"node\",\"url\":\"classes/Env.html#node\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"worker\",\"url\":\"classes/Env.html#worker\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"platform\",\"url\":\"classes/Env.html#platform\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"agent\",\"url\":\"classes/Env.html#agent\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"backends\",\"url\":\"classes/Env.html#backends\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"initial\",\"url\":\"classes/Env.html#initial\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"classes/Env.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tfjs\",\"url\":\"classes/Env.html#tfjs\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#tfjs.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.tfjs\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#tfjs.__type-2.version-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.tfjs.__type\"},{\"kind\":1024,\"name\":\"offscreen\",\"url\":\"classes/Env.html#offscreen\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"perfadd\",\"url\":\"classes/Env.html#perfadd\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":1024,\"name\":\"tensorflow\",\"url\":\"classes/Env.html#tensorflow\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#tensorflow.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.tensorflow\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#tensorflow.__type-1.version\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.tensorflow.__type\"},{\"kind\":1024,\"name\":\"gpu\",\"url\":\"classes/Env.html#tensorflow.__type-1.gpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.tensorflow.__type\"},{\"kind\":1024,\"name\":\"wasm\",\"url\":\"classes/Env.html#wasm\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#wasm.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.wasm\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#wasm.__type-3.supported\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.wasm.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#wasm.__type-3.backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.wasm.__type\"},{\"kind\":1024,\"name\":\"simd\",\"url\":\"classes/Env.html#wasm.__type-3.simd\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.wasm.__type\"},{\"kind\":1024,\"name\":\"multithread\",\"url\":\"classes/Env.html#wasm.__type-3.multithread\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.wasm.__type\"},{\"kind\":1024,\"name\":\"webgl\",\"url\":\"classes/Env.html#webgl\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#webgl.__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.webgl\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#webgl.__type-4.supported-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#webgl.__type-4.backend-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"version\",\"url\":\"classes/Env.html#webgl.__type-4.version-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"classes/Env.html#webgl.__type-4.renderer\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"shader\",\"url\":\"classes/Env.html#webgl.__type-4.shader\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"vendor\",\"url\":\"classes/Env.html#webgl.__type-4.vendor\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgl.__type\"},{\"kind\":1024,\"name\":\"webgpu\",\"url\":\"classes/Env.html#webgpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#webgpu.__type-5\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.webgpu\"},{\"kind\":1024,\"name\":\"supported\",\"url\":\"classes/Env.html#webgpu.__type-5.supported-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgpu.__type\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"classes/Env.html#webgpu.__type-5.backend-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgpu.__type\"},{\"kind\":1024,\"name\":\"adapter\",\"url\":\"classes/Env.html#webgpu.__type-5.adapter\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.webgpu.__type\"},{\"kind\":1024,\"name\":\"cpu\",\"url\":\"classes/Env.html#cpu\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Env.html#cpu.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Env.cpu\"},{\"kind\":1024,\"name\":\"model\",\"url\":\"classes/Env.html#cpu.__type.model\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.cpu.__type\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"classes/Env.html#cpu.__type.flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Env.cpu.__type\"},{\"kind\":1024,\"name\":\"kernels\",\"url\":\"classes/Env.html#kernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":262144,\"name\":\"Canvas\",\"url\":\"classes/Env.html#Canvas\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":262144,\"name\":\"Image\",\"url\":\"classes/Env.html#Image\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":262144,\"name\":\"ImageData\",\"url\":\"classes/Env.html#ImageData\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateBackend\",\"url\":\"classes/Env.html#updateBackend\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":2048,\"name\":\"updateCPU\",\"url\":\"classes/Env.html#updateCPU\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Env\"},{\"kind\":4194304,\"name\":\"FaceGesture\",\"url\":\"types/FaceGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyGesture\",\"url\":\"types/BodyGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandGesture\",\"url\":\"types/HandGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"IrisGesture\",\"url\":\"types/IrisGesture.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Emotion\",\"url\":\"types/Emotion.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Finger\",\"url\":\"types/Finger.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerCurl\",\"url\":\"types/FingerCurl.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FingerDirection\",\"url\":\"types/FingerDirection.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"HandType\",\"url\":\"types/HandType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Gender\",\"url\":\"types/Gender.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Race\",\"url\":\"types/Race.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"FaceLandmark\",\"url\":\"types/FaceLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmark\",\"url\":\"types/BodyLandmark.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotation\",\"url\":\"types/BodyAnnotation.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ObjectType\",\"url\":\"types/ObjectType.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"WebCam\",\"url\":\"classes/WebCam.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/WebCam.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"config\",\"url\":\"classes/WebCam.html#config\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"classes/WebCam.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"stream\",\"url\":\"classes/WebCam.html#stream\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":1024,\"name\":\"devices\",\"url\":\"classes/WebCam.html#devices\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"track\",\"url\":\"classes/WebCam.html#track\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"capabilities\",\"url\":\"classes/WebCam.html#capabilities\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"constraints\",\"url\":\"classes/WebCam.html#constraints\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"settings\",\"url\":\"classes/WebCam.html#settings\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"label\",\"url\":\"classes/WebCam.html#label\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"paused\",\"url\":\"classes/WebCam.html#paused\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"width\",\"url\":\"classes/WebCam.html#width\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":262144,\"name\":\"height\",\"url\":\"classes/WebCam.html#height\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"enumerate\",\"url\":\"classes/WebCam.html#enumerate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"start\",\"url\":\"classes/WebCam.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"pause\",\"url\":\"classes/WebCam.html#pause\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"play\",\"url\":\"classes/WebCam.html#play\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/WebCam.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WebCam\"},{\"kind\":256,\"name\":\"WebCamConfig\",\"url\":\"interfaces/WebCamConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"element\",\"url\":\"interfaces/WebCamConfig.html#element\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/WebCamConfig.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/WebCamConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"crop\",\"url\":\"interfaces/WebCamConfig.html#crop\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/WebCamConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/WebCamConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/WebCamConfig.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"WebCamConfig\"},{\"kind\":256,\"name\":\"ModelInfo\",\"url\":\"interfaces/ModelInfo.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"interfaces/ModelInfo.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"inCache\",\"url\":\"interfaces/ModelInfo.html#inCache\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeDesired\",\"url\":\"interfaces/ModelInfo.html#sizeDesired\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeFromManifest\",\"url\":\"interfaces/ModelInfo.html#sizeFromManifest\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"sizeLoadedWeights\",\"url\":\"interfaces/ModelInfo.html#sizeLoadedWeights\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/ModelInfo.html#url\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ModelInfo\"},{\"kind\":4194304,\"name\":\"Events\",\"url\":\"types/Events.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyCanvas\",\"url\":\"types/AnyCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyImage\",\"url\":\"types/AnyImage.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"AnyVideo\",\"url\":\"types/AnyVideo.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ImageObjects\",\"url\":\"types/ImageObjects.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"ExternalCanvas\",\"url\":\"types/ExternalCanvas.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"Input\",\"url\":\"types/Input.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BackendEnum\",\"url\":\"types/BackendEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"WarmupEnum\",\"url\":\"types/WarmupEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"SegmentationEnum\",\"url\":\"types/SegmentationEnum.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"GenericConfig\",\"url\":\"interfaces/GenericConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GenericConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/GenericConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/GenericConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/GenericConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GenericConfig\"},{\"kind\":256,\"name\":\"FaceDetectorConfig\",\"url\":\"interfaces/FaceDetectorConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceDetectorConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/FaceDetectorConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDetectorConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"minSize\",\"url\":\"interfaces/FaceDetectorConfig.html#minSize\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/FaceDetectorConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"mask\",\"url\":\"interfaces/FaceDetectorConfig.html#mask\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FaceDetectorConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDetectorConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDetectorConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDetectorConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDetectorConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDetectorConfig\"},{\"kind\":256,\"name\":\"FaceMeshConfig\",\"url\":\"interfaces/FaceMeshConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"keepInvalid\",\"url\":\"interfaces/FaceMeshConfig.html#keepInvalid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceMeshConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceMeshConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceMeshConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceMeshConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceMeshConfig\"},{\"kind\":256,\"name\":\"FaceIrisConfig\",\"url\":\"interfaces/FaceIrisConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceIrisConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceIrisConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceIrisConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceIrisConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceIrisConfig\"},{\"kind\":256,\"name\":\"FaceAttentionConfig\",\"url\":\"interfaces/FaceAttentionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAttentionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAttentionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAttentionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAttentionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAttentionConfig\"},{\"kind\":256,\"name\":\"FaceDescriptionConfig\",\"url\":\"interfaces/FaceDescriptionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceDescriptionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceDescriptionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceDescriptionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceDescriptionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceDescriptionConfig\"},{\"kind\":256,\"name\":\"FaceEmotionConfig\",\"url\":\"interfaces/FaceEmotionConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceEmotionConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceEmotionConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceEmotionConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceEmotionConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceEmotionConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceEmotionConfig\"},{\"kind\":256,\"name\":\"FaceAntiSpoofConfig\",\"url\":\"interfaces/FaceAntiSpoofConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceAntiSpoofConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceAntiSpoofConfig\"},{\"kind\":256,\"name\":\"FaceLivenessConfig\",\"url\":\"interfaces/FaceLivenessConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceLivenessConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceLivenessConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceLivenessConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceLivenessConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceLivenessConfig\"},{\"kind\":256,\"name\":\"FaceGearConfig\",\"url\":\"interfaces/FaceGearConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/FaceGearConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceGearConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceGearConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceGearConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceGearConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceGearConfig\"},{\"kind\":256,\"name\":\"FaceConfig\",\"url\":\"interfaces/FaceConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/FaceConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceConfig.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"attention\",\"url\":\"interfaces/FaceConfig.html#attention\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"iris\",\"url\":\"interfaces/FaceConfig.html#iris\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"description\",\"url\":\"interfaces/FaceConfig.html#description\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceConfig.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"antispoof\",\"url\":\"interfaces/FaceConfig.html#antispoof\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"liveness\",\"url\":\"interfaces/FaceConfig.html#liveness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"gear\",\"url\":\"interfaces/FaceConfig.html#gear\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FaceConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/FaceConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/FaceConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/FaceConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"FaceConfig\"},{\"kind\":256,\"name\":\"BodyConfig\",\"url\":\"interfaces/BodyConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/BodyConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/BodyConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/BodyConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/BodyConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/BodyConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/BodyConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"BodyConfig\"},{\"kind\":256,\"name\":\"HandConfig\",\"url\":\"interfaces/HandConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/HandConfig.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/HandConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/HandConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/HandConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandConfig.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"detector\",\"url\":\"interfaces/HandConfig.html#detector\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#detector.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"HandConfig.detector\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#detector.__type.modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.detector.__type\"},{\"kind\":1024,\"name\":\"skeleton\",\"url\":\"interfaces/HandConfig.html#skeleton\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandConfig\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/HandConfig.html#skeleton.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"HandConfig.skeleton\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#skeleton.__type-1.modelPath-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"HandConfig.skeleton.__type\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/HandConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/HandConfig.html#modelPath-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/HandConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/HandConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"HandConfig\"},{\"kind\":256,\"name\":\"ObjectConfig\",\"url\":\"interfaces/ObjectConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"minConfidence\",\"url\":\"interfaces/ObjectConfig.html#minConfidence\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"iouThreshold\",\"url\":\"interfaces/ObjectConfig.html#iouThreshold\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"maxDetected\",\"url\":\"interfaces/ObjectConfig.html#maxDetected\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/ObjectConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/ObjectConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/ObjectConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/ObjectConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"ObjectConfig\"},{\"kind\":256,\"name\":\"SegmentationConfig\",\"url\":\"interfaces/SegmentationConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"ratio\",\"url\":\"interfaces/SegmentationConfig.html#ratio\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"mode\",\"url\":\"interfaces/SegmentationConfig.html#mode\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/SegmentationConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"modelPath\",\"url\":\"interfaces/SegmentationConfig.html#modelPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipFrames\",\"url\":\"interfaces/SegmentationConfig.html#skipFrames\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":1024,\"name\":\"skipTime\",\"url\":\"interfaces/SegmentationConfig.html#skipTime\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"SegmentationConfig\"},{\"kind\":256,\"name\":\"FilterConfig\",\"url\":\"interfaces/FilterConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/FilterConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"equalization\",\"url\":\"interfaces/FilterConfig.html#equalization\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/FilterConfig.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/FilterConfig.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"return\",\"url\":\"interfaces/FilterConfig.html#return\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"flip\",\"url\":\"interfaces/FilterConfig.html#flip\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"autoBrightness\",\"url\":\"interfaces/FilterConfig.html#autoBrightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"brightness\",\"url\":\"interfaces/FilterConfig.html#brightness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"contrast\",\"url\":\"interfaces/FilterConfig.html#contrast\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sharpness\",\"url\":\"interfaces/FilterConfig.html#sharpness\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"blur\",\"url\":\"interfaces/FilterConfig.html#blur\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"saturation\",\"url\":\"interfaces/FilterConfig.html#saturation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"hue\",\"url\":\"interfaces/FilterConfig.html#hue\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"negative\",\"url\":\"interfaces/FilterConfig.html#negative\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"sepia\",\"url\":\"interfaces/FilterConfig.html#sepia\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"vintage\",\"url\":\"interfaces/FilterConfig.html#vintage\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"kodachrome\",\"url\":\"interfaces/FilterConfig.html#kodachrome\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"technicolor\",\"url\":\"interfaces/FilterConfig.html#technicolor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"polaroid\",\"url\":\"interfaces/FilterConfig.html#polaroid\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":1024,\"name\":\"pixelate\",\"url\":\"interfaces/FilterConfig.html#pixelate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FilterConfig\"},{\"kind\":256,\"name\":\"GestureConfig\",\"url\":\"interfaces/GestureConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"enabled\",\"url\":\"interfaces/GestureConfig.html#enabled\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"GestureConfig\"},{\"kind\":256,\"name\":\"Config\",\"url\":\"interfaces/Config.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"backend\",\"url\":\"interfaces/Config.html#backend\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPath\",\"url\":\"interfaces/Config.html#wasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"wasmPlatformFetch\",\"url\":\"interfaces/Config.html#wasmPlatformFetch\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/Config.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"async\",\"url\":\"interfaces/Config.html#async\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"warmup\",\"url\":\"interfaces/Config.html#warmup\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"modelBasePath\",\"url\":\"interfaces/Config.html#modelBasePath\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheModels\",\"url\":\"interfaces/Config.html#cacheModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"validateModels\",\"url\":\"interfaces/Config.html#validateModels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"cacheSensitivity\",\"url\":\"interfaces/Config.html#cacheSensitivity\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/Config.html#flags\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"softwareKernels\",\"url\":\"interfaces/Config.html#softwareKernels\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"deallocate\",\"url\":\"interfaces/Config.html#deallocate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"skipAllowed\",\"url\":\"interfaces/Config.html#skipAllowed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"filter\",\"url\":\"interfaces/Config.html#filter\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Config.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Config.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Config.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Config.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Config.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":1024,\"name\":\"segmentation\",\"url\":\"interfaces/Config.html#segmentation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Config\"},{\"kind\":32,\"name\":\"defaults\",\"url\":\"variables/defaults.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":256,\"name\":\"FaceResult\",\"url\":\"interfaces/FaceResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/FaceResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/FaceResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/FaceResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"faceScore\",\"url\":\"interfaces/FaceResult.html#faceScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/FaceResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/FaceResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"size\",\"url\":\"interfaces/FaceResult.html#size\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"mesh\",\"url\":\"interfaces/FaceResult.html#mesh\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"meshRaw\",\"url\":\"interfaces/FaceResult.html#meshRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/FaceResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/FaceResult.html#age\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"gender\",\"url\":\"interfaces/FaceResult.html#gender\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"genderScore\",\"url\":\"interfaces/FaceResult.html#genderScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"emotion\",\"url\":\"interfaces/FaceResult.html#emotion\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"race\",\"url\":\"interfaces/FaceResult.html#race\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"embedding\",\"url\":\"interfaces/FaceResult.html#embedding\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/FaceResult.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"real\",\"url\":\"interfaces/FaceResult.html#real\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"live\",\"url\":\"interfaces/FaceResult.html#live\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"rotation\",\"url\":\"interfaces/FaceResult.html#rotation\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":1024,\"name\":\"tensor\",\"url\":\"interfaces/FaceResult.html#tensor\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FaceResult\"},{\"kind\":4194304,\"name\":\"BodyLandmarkPoseNet\",\"url\":\"types/BodyLandmarkPoseNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkMoveNet\",\"url\":\"types/BodyLandmarkMoveNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkEfficientNet\",\"url\":\"types/BodyLandmarkEfficientNet.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyLandmarkBlazePose\",\"url\":\"types/BodyLandmarkBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationBlazePose\",\"url\":\"types/BodyAnnotationBlazePose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":4194304,\"name\":\"BodyAnnotationEfficientPose\",\"url\":\"types/BodyAnnotationEfficientPose.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"BodyKeypoint\",\"url\":\"interfaces/BodyKeypoint.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"part\",\"url\":\"interfaces/BodyKeypoint.html#part\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"position\",\"url\":\"interfaces/BodyKeypoint.html#position\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"positionRaw\",\"url\":\"interfaces/BodyKeypoint.html#positionRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"distance\",\"url\":\"interfaces/BodyKeypoint.html#distance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyKeypoint.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyKeypoint\"},{\"kind\":256,\"name\":\"BodyResult\",\"url\":\"interfaces/BodyResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BodyResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/BodyResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/BodyResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/BodyResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/BodyResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/BodyResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"BodyResult\"},{\"kind\":256,\"name\":\"HandResult\",\"url\":\"interfaces/HandResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/HandResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/HandResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxScore\",\"url\":\"interfaces/HandResult.html#boxScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"fingerScore\",\"url\":\"interfaces/HandResult.html#fingerScore\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/HandResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/HandResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"keypoints\",\"url\":\"interfaces/HandResult.html#keypoints\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/HandResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"annotations\",\"url\":\"interfaces/HandResult.html#annotations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":1024,\"name\":\"landmarks\",\"url\":\"interfaces/HandResult.html#landmarks\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"HandResult\"},{\"kind\":256,\"name\":\"ObjectResult\",\"url\":\"interfaces/ObjectResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ObjectResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"score\",\"url\":\"interfaces/ObjectResult.html#score\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"class\",\"url\":\"interfaces/ObjectResult.html#class\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"label\",\"url\":\"interfaces/ObjectResult.html#label\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/ObjectResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/ObjectResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"ObjectResult\"},{\"kind\":4194304,\"name\":\"GestureResult\",\"url\":\"types/GestureResult.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":256,\"name\":\"PersonResult\",\"url\":\"interfaces/PersonResult.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PersonResult.html#id\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/PersonResult.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/PersonResult.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"hands\",\"url\":\"interfaces/PersonResult.html#hands\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PersonResult.html#hands.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"PersonResult.hands\"},{\"kind\":1024,\"name\":\"left\",\"url\":\"interfaces/PersonResult.html#hands.__type.left\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.hands.__type\"},{\"kind\":1024,\"name\":\"right\",\"url\":\"interfaces/PersonResult.html#hands.__type.right\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PersonResult.hands.__type\"},{\"kind\":1024,\"name\":\"gestures\",\"url\":\"interfaces/PersonResult.html#gestures\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"box\",\"url\":\"interfaces/PersonResult.html#box\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":1024,\"name\":\"boxRaw\",\"url\":\"interfaces/PersonResult.html#boxRaw\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PersonResult\"},{\"kind\":256,\"name\":\"Result\",\"url\":\"interfaces/Result.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"face\",\"url\":\"interfaces/Result.html#face\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/Result.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"hand\",\"url\":\"interfaces/Result.html#hand\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"gesture\",\"url\":\"interfaces/Result.html#gesture\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"object\",\"url\":\"interfaces/Result.html#object\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"performance\",\"url\":\"interfaces/Result.html#performance\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"canvas\",\"url\":\"interfaces/Result.html#canvas\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"timestamp\",\"url\":\"interfaces/Result.html#timestamp\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"persons\",\"url\":\"interfaces/Result.html#persons\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"interfaces/Result.html#error\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"width\",\"url\":\"interfaces/Result.html#width\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":1024,\"name\":\"height\",\"url\":\"interfaces/Result.html#height\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Result\"},{\"kind\":64,\"name\":\"empty\",\"url\":\"functions/empty.html\",\"classes\":\"tsd-kind-function\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,61.048]],[\"comment/0\",[]],[\"name/1\",[1,46.385]],[\"comment/1\",[]],[\"name/2\",[2,50.062]],[\"comment/2\",[]],[\"name/3\",[3,52.575]],[\"comment/3\",[]],[\"name/4\",[4,55.94]],[\"comment/4\",[]],[\"name/5\",[5,61.048]],[\"comment/5\",[]],[\"name/6\",[6,61.048]],[\"comment/6\",[]],[\"name/7\",[7,37.069]],[\"comment/7\",[]],[\"name/8\",[8,50.062]],[\"comment/8\",[]],[\"name/9\",[9,50.062]],[\"comment/9\",[]],[\"name/10\",[10,61.048]],[\"comment/10\",[]],[\"name/11\",[11,52.575]],[\"comment/11\",[]],[\"name/12\",[12,55.94]],[\"comment/12\",[]],[\"name/13\",[13,55.94]],[\"comment/13\",[]],[\"name/14\",[14,55.94]],[\"comment/14\",[]],[\"name/15\",[15,61.048]],[\"comment/15\",[]],[\"name/16\",[16,61.048]],[\"comment/16\",[]],[\"name/17\",[17,55.94]],[\"comment/17\",[]],[\"name/18\",[18,61.048]],[\"comment/18\",[]],[\"name/19\",[19,55.94]],[\"comment/19\",[]],[\"name/20\",[20,55.94]],[\"comment/20\",[]],[\"name/21\",[21,61.048]],[\"comment/21\",[]],[\"name/22\",[22,55.94]],[\"comment/22\",[]],[\"name/23\",[23,55.94]],[\"comment/23\",[]],[\"name/24\",[24,61.048]],[\"comment/24\",[]],[\"name/25\",[25,55.94]],[\"comment/25\",[]],[\"name/26\",[26,55.94]],[\"comment/26\",[]],[\"name/27\",[27,52.575]],[\"comment/27\",[]],[\"name/28\",[28,61.048]],[\"comment/28\",[]],[\"name/29\",[29,61.048]],[\"comment/29\",[]],[\"name/30\",[30,55.94]],[\"comment/30\",[]],[\"name/31\",[31,61.048]],[\"comment/31\",[]],[\"name/32\",[32,61.048]],[\"comment/32\",[]],[\"name/33\",[33,61.048]],[\"comment/33\",[]],[\"name/34\",[34,61.048]],[\"comment/34\",[]],[\"name/35\",[35,61.048]],[\"comment/35\",[]],[\"name/36\",[13,55.94]],[\"comment/36\",[]],[\"name/37\",[36,50.062]],[\"comment/37\",[]],[\"name/38\",[37,55.94]],[\"comment/38\",[]],[\"name/39\",[38,61.048]],[\"comment/39\",[]],[\"name/40\",[7,37.069]],[\"comment/40\",[]],[\"name/41\",[39,61.048]],[\"comment/41\",[]],[\"name/42\",[36,50.062]],[\"comment/42\",[]],[\"name/43\",[37,55.94]],[\"comment/43\",[]],[\"name/44\",[40,61.048]],[\"comment/44\",[]],[\"name/45\",[41,61.048]],[\"comment/45\",[]],[\"name/46\",[12,55.94]],[\"comment/46\",[]],[\"name/47\",[42,61.048]],[\"comment/47\",[]],[\"name/48\",[9,50.062]],[\"comment/48\",[]],[\"name/49\",[43,55.94]],[\"comment/49\",[]],[\"name/50\",[25,55.94]],[\"comment/50\",[]],[\"name/51\",[44,61.048]],[\"comment/51\",[]],[\"name/52\",[45,50.062]],[\"comment/52\",[]],[\"name/53\",[46,50.062]],[\"comment/53\",[]],[\"name/54\",[47,52.575]],[\"comment/54\",[]],[\"name/55\",[48,52.575]],[\"comment/55\",[]],[\"name/56\",[49,52.575]],[\"comment/56\",[]],[\"name/57\",[50,52.575]],[\"comment/57\",[]],[\"name/58\",[51,61.048]],[\"comment/58\",[]],[\"name/59\",[52,61.048]],[\"comment/59\",[]],[\"name/60\",[53,55.94]],[\"comment/60\",[]],[\"name/61\",[54,55.94]],[\"comment/61\",[]],[\"name/62\",[55,61.048]],[\"comment/62\",[]],[\"name/63\",[56,61.048]],[\"comment/63\",[]],[\"name/64\",[57,55.94]],[\"comment/64\",[]],[\"name/65\",[58,61.048]],[\"comment/65\",[]],[\"name/66\",[59,61.048]],[\"comment/66\",[]],[\"name/67\",[60,61.048]],[\"comment/67\",[]],[\"name/68\",[61,61.048]],[\"comment/68\",[]],[\"name/69\",[62,61.048]],[\"comment/69\",[]],[\"name/70\",[63,61.048]],[\"comment/70\",[]],[\"name/71\",[57,55.94]],[\"comment/71\",[]],[\"name/72\",[50,52.575]],[\"comment/72\",[]],[\"name/73\",[1,46.385]],[\"comment/73\",[]],[\"name/74\",[50,52.575]],[\"comment/74\",[]],[\"name/75\",[64,61.048]],[\"comment/75\",[]],[\"name/76\",[19,55.94]],[\"comment/76\",[]],[\"name/77\",[27,52.575]],[\"comment/77\",[]],[\"name/78\",[65,61.048]],[\"comment/78\",[]],[\"name/79\",[66,61.048]],[\"comment/79\",[]],[\"name/80\",[20,55.94]],[\"comment/80\",[]],[\"name/81\",[8,50.062]],[\"comment/81\",[]],[\"name/82\",[1,46.385]],[\"comment/82\",[]],[\"name/83\",[67,44.954]],[\"comment/83\",[]],[\"name/84\",[68,61.048]],[\"comment/84\",[]],[\"name/85\",[69,61.048]],[\"comment/85\",[]],[\"name/86\",[70,55.94]],[\"comment/86\",[]],[\"name/87\",[71,61.048]],[\"comment/87\",[]],[\"name/88\",[72,61.048]],[\"comment/88\",[]],[\"name/89\",[73,61.048]],[\"comment/89\",[]],[\"name/90\",[74,61.048]],[\"comment/90\",[]],[\"name/91\",[75,61.048]],[\"comment/91\",[]],[\"name/92\",[76,61.048]],[\"comment/92\",[]],[\"name/93\",[77,55.94]],[\"comment/93\",[]],[\"name/94\",[78,61.048]],[\"comment/94\",[]],[\"name/95\",[79,61.048]],[\"comment/95\",[]],[\"name/96\",[80,61.048]],[\"comment/96\",[]],[\"name/97\",[81,61.048]],[\"comment/97\",[]],[\"name/98\",[82,61.048]],[\"comment/98\",[]],[\"name/99\",[83,61.048]],[\"comment/99\",[]],[\"name/100\",[84,61.048]],[\"comment/100\",[]],[\"name/101\",[85,61.048]],[\"comment/101\",[]],[\"name/102\",[86,55.94]],[\"comment/102\",[]],[\"name/103\",[87,61.048]],[\"comment/103\",[]],[\"name/104\",[88,61.048]],[\"comment/104\",[]],[\"name/105\",[89,61.048]],[\"comment/105\",[]],[\"name/106\",[90,61.048]],[\"comment/106\",[]],[\"name/107\",[91,61.048]],[\"comment/107\",[]],[\"name/108\",[92,61.048]],[\"comment/108\",[]],[\"name/109\",[93,61.048]],[\"comment/109\",[]],[\"name/110\",[94,61.048]],[\"comment/110\",[]],[\"name/111\",[95,61.048]],[\"comment/111\",[]],[\"name/112\",[96,61.048]],[\"comment/112\",[]],[\"name/113\",[43,55.94]],[\"comment/113\",[]],[\"name/114\",[97,61.048]],[\"comment/114\",[]],[\"name/115\",[98,61.048]],[\"comment/115\",[]],[\"name/116\",[99,61.048]],[\"comment/116\",[]],[\"name/117\",[100,61.048]],[\"comment/117\",[]],[\"name/118\",[101,61.048]],[\"comment/118\",[]],[\"name/119\",[102,61.048]],[\"comment/119\",[]],[\"name/120\",[103,61.048]],[\"comment/120\",[]],[\"name/121\",[104,61.048]],[\"comment/121\",[]],[\"name/122\",[105,61.048]],[\"comment/122\",[]],[\"name/123\",[106,61.048]],[\"comment/123\",[]],[\"name/124\",[107,61.048]],[\"comment/124\",[]],[\"name/125\",[108,61.048]],[\"comment/125\",[]],[\"name/126\",[109,61.048]],[\"comment/126\",[]],[\"name/127\",[110,61.048]],[\"comment/127\",[]],[\"name/128\",[111,61.048]],[\"comment/128\",[]],[\"name/129\",[112,61.048]],[\"comment/129\",[]],[\"name/130\",[113,61.048]],[\"comment/130\",[]],[\"name/131\",[114,61.048]],[\"comment/131\",[]],[\"name/132\",[115,61.048]],[\"comment/132\",[]],[\"name/133\",[116,61.048]],[\"comment/133\",[]],[\"name/134\",[117,61.048]],[\"comment/134\",[]],[\"name/135\",[118,61.048]],[\"comment/135\",[]],[\"name/136\",[119,61.048]],[\"comment/136\",[]],[\"name/137\",[120,61.048]],[\"comment/137\",[]],[\"name/138\",[121,61.048]],[\"comment/138\",[]],[\"name/139\",[122,61.048]],[\"comment/139\",[]],[\"name/140\",[123,61.048]],[\"comment/140\",[]],[\"name/141\",[124,61.048]],[\"comment/141\",[]],[\"name/142\",[125,61.048]],[\"comment/142\",[]],[\"name/143\",[126,61.048]],[\"comment/143\",[]],[\"name/144\",[127,61.048]],[\"comment/144\",[]],[\"name/145\",[128,61.048]],[\"comment/145\",[]],[\"name/146\",[129,61.048]],[\"comment/146\",[]],[\"name/147\",[130,61.048]],[\"comment/147\",[]],[\"name/148\",[131,61.048]],[\"comment/148\",[]],[\"name/149\",[132,61.048]],[\"comment/149\",[]],[\"name/150\",[133,61.048]],[\"comment/150\",[]],[\"name/151\",[134,61.048]],[\"comment/151\",[]],[\"name/152\",[135,61.048]],[\"comment/152\",[]],[\"name/153\",[136,61.048]],[\"comment/153\",[]],[\"name/154\",[137,61.048]],[\"comment/154\",[]],[\"name/155\",[138,61.048]],[\"comment/155\",[]],[\"name/156\",[139,61.048]],[\"comment/156\",[]],[\"name/157\",[140,61.048]],[\"comment/157\",[]],[\"name/158\",[141,61.048]],[\"comment/158\",[]],[\"name/159\",[142,61.048]],[\"comment/159\",[]],[\"name/160\",[143,61.048]],[\"comment/160\",[]],[\"name/161\",[144,61.048]],[\"comment/161\",[]],[\"name/162\",[145,61.048]],[\"comment/162\",[]],[\"name/163\",[146,61.048]],[\"comment/163\",[]],[\"name/164\",[147,61.048]],[\"comment/164\",[]],[\"name/165\",[148,61.048]],[\"comment/165\",[]],[\"name/166\",[149,61.048]],[\"comment/166\",[]],[\"name/167\",[150,61.048]],[\"comment/167\",[]],[\"name/168\",[151,61.048]],[\"comment/168\",[]],[\"name/169\",[152,61.048]],[\"comment/169\",[]],[\"name/170\",[153,61.048]],[\"comment/170\",[]],[\"name/171\",[154,61.048]],[\"comment/171\",[]],[\"name/172\",[155,61.048]],[\"comment/172\",[]],[\"name/173\",[156,61.048]],[\"comment/173\",[]],[\"name/174\",[157,61.048]],[\"comment/174\",[]],[\"name/175\",[158,61.048]],[\"comment/175\",[]],[\"name/176\",[159,61.048]],[\"comment/176\",[]],[\"name/177\",[160,61.048]],[\"comment/177\",[]],[\"name/178\",[161,61.048]],[\"comment/178\",[]],[\"name/179\",[162,61.048]],[\"comment/179\",[]],[\"name/180\",[163,61.048]],[\"comment/180\",[]],[\"name/181\",[164,61.048]],[\"comment/181\",[]],[\"name/182\",[165,61.048]],[\"comment/182\",[]],[\"name/183\",[166,61.048]],[\"comment/183\",[]],[\"name/184\",[167,61.048]],[\"comment/184\",[]],[\"name/185\",[168,61.048]],[\"comment/185\",[]],[\"name/186\",[169,61.048]],[\"comment/186\",[]],[\"name/187\",[170,61.048]],[\"comment/187\",[]],[\"name/188\",[171,61.048]],[\"comment/188\",[]],[\"name/189\",[172,61.048]],[\"comment/189\",[]],[\"name/190\",[173,61.048]],[\"comment/190\",[]],[\"name/191\",[174,61.048]],[\"comment/191\",[]],[\"name/192\",[175,61.048]],[\"comment/192\",[]],[\"name/193\",[176,61.048]],[\"comment/193\",[]],[\"name/194\",[177,61.048]],[\"comment/194\",[]],[\"name/195\",[178,61.048]],[\"comment/195\",[]],[\"name/196\",[179,61.048]],[\"comment/196\",[]],[\"name/197\",[180,61.048]],[\"comment/197\",[]],[\"name/198\",[181,61.048]],[\"comment/198\",[]],[\"name/199\",[182,61.048]],[\"comment/199\",[]],[\"name/200\",[183,61.048]],[\"comment/200\",[]],[\"name/201\",[184,61.048]],[\"comment/201\",[]],[\"name/202\",[185,61.048]],[\"comment/202\",[]],[\"name/203\",[186,61.048]],[\"comment/203\",[]],[\"name/204\",[187,61.048]],[\"comment/204\",[]],[\"name/205\",[188,61.048]],[\"comment/205\",[]],[\"name/206\",[189,61.048]],[\"comment/206\",[]],[\"name/207\",[190,61.048]],[\"comment/207\",[]],[\"name/208\",[191,61.048]],[\"comment/208\",[]],[\"name/209\",[192,61.048]],[\"comment/209\",[]],[\"name/210\",[193,61.048]],[\"comment/210\",[]],[\"name/211\",[194,61.048]],[\"comment/211\",[]],[\"name/212\",[195,61.048]],[\"comment/212\",[]],[\"name/213\",[196,61.048]],[\"comment/213\",[]],[\"name/214\",[197,61.048]],[\"comment/214\",[]],[\"name/215\",[198,61.048]],[\"comment/215\",[]],[\"name/216\",[199,61.048]],[\"comment/216\",[]],[\"name/217\",[200,61.048]],[\"comment/217\",[]],[\"name/218\",[201,61.048]],[\"comment/218\",[]],[\"name/219\",[202,61.048]],[\"comment/219\",[]],[\"name/220\",[203,61.048]],[\"comment/220\",[]],[\"name/221\",[204,61.048]],[\"comment/221\",[]],[\"name/222\",[205,61.048]],[\"comment/222\",[]],[\"name/223\",[206,61.048]],[\"comment/223\",[]],[\"name/224\",[207,61.048]],[\"comment/224\",[]],[\"name/225\",[208,61.048]],[\"comment/225\",[]],[\"name/226\",[209,61.048]],[\"comment/226\",[]],[\"name/227\",[210,61.048]],[\"comment/227\",[]],[\"name/228\",[211,61.048]],[\"comment/228\",[]],[\"name/229\",[212,61.048]],[\"comment/229\",[]],[\"name/230\",[213,61.048]],[\"comment/230\",[]],[\"name/231\",[214,61.048]],[\"comment/231\",[]],[\"name/232\",[215,61.048]],[\"comment/232\",[]],[\"name/233\",[216,61.048]],[\"comment/233\",[]],[\"name/234\",[217,61.048]],[\"comment/234\",[]],[\"name/235\",[218,61.048]],[\"comment/235\",[]],[\"name/236\",[219,61.048]],[\"comment/236\",[]],[\"name/237\",[220,61.048]],[\"comment/237\",[]],[\"name/238\",[221,61.048]],[\"comment/238\",[]],[\"name/239\",[222,61.048]],[\"comment/239\",[]],[\"name/240\",[7,37.069]],[\"comment/240\",[]],[\"name/241\",[223,55.94]],[\"comment/241\",[]],[\"name/242\",[224,55.94]],[\"comment/242\",[]],[\"name/243\",[225,61.048]],[\"comment/243\",[]],[\"name/244\",[226,61.048]],[\"comment/244\",[]],[\"name/245\",[7,37.069]],[\"comment/245\",[]],[\"name/246\",[223,55.94]],[\"comment/246\",[]],[\"name/247\",[224,55.94]],[\"comment/247\",[]],[\"name/248\",[227,61.048]],[\"comment/248\",[]],[\"name/249\",[228,61.048]],[\"comment/249\",[]],[\"name/250\",[229,61.048]],[\"comment/250\",[]],[\"name/251\",[230,61.048]],[\"comment/251\",[]],[\"name/252\",[8,50.062]],[\"comment/252\",[]],[\"name/253\",[231,61.048]],[\"comment/253\",[]],[\"name/254\",[232,61.048]],[\"comment/254\",[]],[\"name/255\",[233,61.048]],[\"comment/255\",[]],[\"name/256\",[234,61.048]],[\"comment/256\",[]],[\"name/257\",[235,61.048]],[\"comment/257\",[]],[\"name/258\",[236,61.048]],[\"comment/258\",[]],[\"name/259\",[1,46.385]],[\"comment/259\",[]],[\"name/260\",[237,61.048]],[\"comment/260\",[]],[\"name/261\",[238,61.048]],[\"comment/261\",[]],[\"name/262\",[239,61.048]],[\"comment/262\",[]],[\"name/263\",[240,61.048]],[\"comment/263\",[]],[\"name/264\",[241,61.048]],[\"comment/264\",[]],[\"name/265\",[242,61.048]],[\"comment/265\",[]],[\"name/266\",[243,61.048]],[\"comment/266\",[]],[\"name/267\",[7,37.069]],[\"comment/267\",[]],[\"name/268\",[244,61.048]],[\"comment/268\",[]],[\"name/269\",[7,37.069]],[\"comment/269\",[]],[\"name/270\",[245,61.048]],[\"comment/270\",[]],[\"name/271\",[7,37.069]],[\"comment/271\",[]],[\"name/272\",[27,52.575]],[\"comment/272\",[]],[\"name/273\",[246,61.048]],[\"comment/273\",[]],[\"name/274\",[247,61.048]],[\"comment/274\",[]],[\"name/275\",[248,61.048]],[\"comment/275\",[]],[\"name/276\",[249,61.048]],[\"comment/276\",[]],[\"name/277\",[250,61.048]],[\"comment/277\",[]],[\"name/278\",[251,61.048]],[\"comment/278\",[]],[\"name/279\",[252,61.048]],[\"comment/279\",[]],[\"name/280\",[253,61.048]],[\"comment/280\",[]],[\"name/281\",[86,55.94]],[\"comment/281\",[]],[\"name/282\",[77,55.94]],[\"comment/282\",[]],[\"name/283\",[254,61.048]],[\"comment/283\",[]],[\"name/284\",[255,61.048]],[\"comment/284\",[]],[\"name/285\",[256,61.048]],[\"comment/285\",[]],[\"name/286\",[257,61.048]],[\"comment/286\",[]],[\"name/287\",[258,61.048]],[\"comment/287\",[]],[\"name/288\",[259,61.048]],[\"comment/288\",[]],[\"name/289\",[260,61.048]],[\"comment/289\",[]],[\"name/290\",[261,61.048]],[\"comment/290\",[]],[\"name/291\",[262,61.048]],[\"comment/291\",[]],[\"name/292\",[263,61.048]],[\"comment/292\",[]],[\"name/293\",[264,61.048]],[\"comment/293\",[]],[\"name/294\",[265,61.048]],[\"comment/294\",[]],[\"name/295\",[266,61.048]],[\"comment/295\",[]],[\"name/296\",[267,61.048]],[\"comment/296\",[]],[\"name/297\",[268,61.048]],[\"comment/297\",[]],[\"name/298\",[269,61.048]],[\"comment/298\",[]],[\"name/299\",[270,61.048]],[\"comment/299\",[]],[\"name/300\",[271,61.048]],[\"comment/300\",[]],[\"name/301\",[272,61.048]],[\"comment/301\",[]],[\"name/302\",[273,61.048]],[\"comment/302\",[]],[\"name/303\",[274,61.048]],[\"comment/303\",[]],[\"name/304\",[275,61.048]],[\"comment/304\",[]],[\"name/305\",[276,61.048]],[\"comment/305\",[]],[\"name/306\",[277,61.048]],[\"comment/306\",[]],[\"name/307\",[278,61.048]],[\"comment/307\",[]],[\"name/308\",[279,61.048]],[\"comment/308\",[]],[\"name/309\",[280,61.048]],[\"comment/309\",[]],[\"name/310\",[281,61.048]],[\"comment/310\",[]],[\"name/311\",[282,61.048]],[\"comment/311\",[]],[\"name/312\",[283,61.048]],[\"comment/312\",[]],[\"name/313\",[284,61.048]],[\"comment/313\",[]],[\"name/314\",[285,61.048]],[\"comment/314\",[]],[\"name/315\",[286,61.048]],[\"comment/315\",[]],[\"name/316\",[287,61.048]],[\"comment/316\",[]],[\"name/317\",[288,46.385]],[\"comment/317\",[]],[\"name/318\",[289,61.048]],[\"comment/318\",[]],[\"name/319\",[11,52.575]],[\"comment/319\",[]],[\"name/320\",[11,52.575]],[\"comment/320\",[]],[\"name/321\",[1,46.385]],[\"comment/321\",[]],[\"name/322\",[290,61.048]],[\"comment/322\",[]],[\"name/323\",[291,61.048]],[\"comment/323\",[]],[\"name/324\",[292,61.048]],[\"comment/324\",[]],[\"name/325\",[293,61.048]],[\"comment/325\",[]],[\"name/326\",[294,61.048]],[\"comment/326\",[]],[\"name/327\",[295,61.048]],[\"comment/327\",[]],[\"name/328\",[296,61.048]],[\"comment/328\",[]],[\"name/329\",[297,55.94]],[\"comment/329\",[]],[\"name/330\",[298,61.048]],[\"comment/330\",[]],[\"name/331\",[7,37.069]],[\"comment/331\",[]],[\"name/332\",[2,50.062]],[\"comment/332\",[]],[\"name/333\",[299,61.048]],[\"comment/333\",[]],[\"name/334\",[300,61.048]],[\"comment/334\",[]],[\"name/335\",[301,61.048]],[\"comment/335\",[]],[\"name/336\",[7,37.069]],[\"comment/336\",[]],[\"name/337\",[2,50.062]],[\"comment/337\",[]],[\"name/338\",[302,61.048]],[\"comment/338\",[]],[\"name/339\",[303,61.048]],[\"comment/339\",[]],[\"name/340\",[7,37.069]],[\"comment/340\",[]],[\"name/341\",[304,52.575]],[\"comment/341\",[]],[\"name/342\",[305,50.062]],[\"comment/342\",[]],[\"name/343\",[306,61.048]],[\"comment/343\",[]],[\"name/344\",[307,61.048]],[\"comment/344\",[]],[\"name/345\",[308,61.048]],[\"comment/345\",[]],[\"name/346\",[7,37.069]],[\"comment/346\",[]],[\"name/347\",[304,52.575]],[\"comment/347\",[]],[\"name/348\",[305,50.062]],[\"comment/348\",[]],[\"name/349\",[2,50.062]],[\"comment/349\",[]],[\"name/350\",[309,61.048]],[\"comment/350\",[]],[\"name/351\",[310,61.048]],[\"comment/351\",[]],[\"name/352\",[311,61.048]],[\"comment/352\",[]],[\"name/353\",[312,61.048]],[\"comment/353\",[]],[\"name/354\",[7,37.069]],[\"comment/354\",[]],[\"name/355\",[304,52.575]],[\"comment/355\",[]],[\"name/356\",[305,50.062]],[\"comment/356\",[]],[\"name/357\",[313,61.048]],[\"comment/357\",[]],[\"name/358\",[314,61.048]],[\"comment/358\",[]],[\"name/359\",[7,37.069]],[\"comment/359\",[]],[\"name/360\",[315,61.048]],[\"comment/360\",[]],[\"name/361\",[316,55.94]],[\"comment/361\",[]],[\"name/362\",[317,61.048]],[\"comment/362\",[]],[\"name/363\",[9,50.062]],[\"comment/363\",[]],[\"name/364\",[22,55.94]],[\"comment/364\",[]],[\"name/365\",[318,61.048]],[\"comment/365\",[]],[\"name/366\",[319,61.048]],[\"comment/366\",[]],[\"name/367\",[320,61.048]],[\"comment/367\",[]],[\"name/368\",[321,61.048]],[\"comment/368\",[]],[\"name/369\",[322,61.048]],[\"comment/369\",[]],[\"name/370\",[323,61.048]],[\"comment/370\",[]],[\"name/371\",[324,61.048]],[\"comment/371\",[]],[\"name/372\",[325,52.575]],[\"comment/372\",[]],[\"name/373\",[326,61.048]],[\"comment/373\",[]],[\"name/374\",[327,61.048]],[\"comment/374\",[]],[\"name/375\",[328,61.048]],[\"comment/375\",[]],[\"name/376\",[329,61.048]],[\"comment/376\",[]],[\"name/377\",[330,55.94]],[\"comment/377\",[]],[\"name/378\",[331,55.94]],[\"comment/378\",[]],[\"name/379\",[332,61.048]],[\"comment/379\",[]],[\"name/380\",[333,61.048]],[\"comment/380\",[]],[\"name/381\",[334,61.048]],[\"comment/381\",[]],[\"name/382\",[335,61.048]],[\"comment/382\",[]],[\"name/383\",[26,55.94]],[\"comment/383\",[]],[\"name/384\",[1,46.385]],[\"comment/384\",[]],[\"name/385\",[3,52.575]],[\"comment/385\",[]],[\"name/386\",[336,55.94]],[\"comment/386\",[]],[\"name/387\",[337,61.048]],[\"comment/387\",[]],[\"name/388\",[338,61.048]],[\"comment/388\",[]],[\"name/389\",[339,61.048]],[\"comment/389\",[]],[\"name/390\",[340,61.048]],[\"comment/390\",[]],[\"name/391\",[341,61.048]],[\"comment/391\",[]],[\"name/392\",[342,61.048]],[\"comment/392\",[]],[\"name/393\",[343,52.575]],[\"comment/393\",[]],[\"name/394\",[344,61.048]],[\"comment/394\",[]],[\"name/395\",[345,50.062]],[\"comment/395\",[]],[\"name/396\",[346,50.062]],[\"comment/396\",[]],[\"name/397\",[347,61.048]],[\"comment/397\",[]],[\"name/398\",[348,61.048]],[\"comment/398\",[]],[\"name/399\",[349,61.048]],[\"comment/399\",[]],[\"name/400\",[350,61.048]],[\"comment/400\",[]],[\"name/401\",[351,61.048]],[\"comment/401\",[]],[\"name/402\",[352,61.048]],[\"comment/402\",[]],[\"name/403\",[336,55.94]],[\"comment/403\",[]],[\"name/404\",[353,55.94]],[\"comment/404\",[]],[\"name/405\",[354,55.94]],[\"comment/405\",[]],[\"name/406\",[355,61.048]],[\"comment/406\",[]],[\"name/407\",[345,50.062]],[\"comment/407\",[]],[\"name/408\",[346,50.062]],[\"comment/408\",[]],[\"name/409\",[67,44.954]],[\"comment/409\",[]],[\"name/410\",[356,61.048]],[\"comment/410\",[]],[\"name/411\",[53,55.94]],[\"comment/411\",[]],[\"name/412\",[357,61.048]],[\"comment/412\",[]],[\"name/413\",[358,61.048]],[\"comment/413\",[]],[\"name/414\",[359,61.048]],[\"comment/414\",[]],[\"name/415\",[360,61.048]],[\"comment/415\",[]],[\"name/416\",[54,55.94]],[\"comment/416\",[]],[\"name/417\",[14,55.94]],[\"comment/417\",[]],[\"name/418\",[361,61.048]],[\"comment/418\",[]],[\"name/419\",[362,61.048]],[\"comment/419\",[]],[\"name/420\",[363,61.048]],[\"comment/420\",[]],[\"name/421\",[364,61.048]],[\"comment/421\",[]],[\"name/422\",[365,61.048]],[\"comment/422\",[]],[\"name/423\",[366,61.048]],[\"comment/423\",[]],[\"name/424\",[367,61.048]],[\"comment/424\",[]],[\"name/425\",[368,61.048]],[\"comment/425\",[]],[\"name/426\",[369,61.048]],[\"comment/426\",[]],[\"name/427\",[370,61.048]],[\"comment/427\",[]],[\"name/428\",[371,36.481]],[\"comment/428\",[]],[\"name/429\",[372,36.481]],[\"comment/429\",[]],[\"name/430\",[373,37.694]],[\"comment/430\",[]],[\"name/431\",[374,37.694]],[\"comment/431\",[]],[\"name/432\",[375,61.048]],[\"comment/432\",[]],[\"name/433\",[376,52.575]],[\"comment/433\",[]],[\"name/434\",[377,50.062]],[\"comment/434\",[]],[\"name/435\",[378,44.954]],[\"comment/435\",[]],[\"name/436\",[379,61.048]],[\"comment/436\",[]],[\"name/437\",[380,52.575]],[\"comment/437\",[]],[\"name/438\",[381,61.048]],[\"comment/438\",[]],[\"name/439\",[382,55.94]],[\"comment/439\",[]],[\"name/440\",[371,36.481]],[\"comment/440\",[]],[\"name/441\",[372,36.481]],[\"comment/441\",[]],[\"name/442\",[373,37.694]],[\"comment/442\",[]],[\"name/443\",[374,37.694]],[\"comment/443\",[]],[\"name/444\",[383,61.048]],[\"comment/444\",[]],[\"name/445\",[384,61.048]],[\"comment/445\",[]],[\"name/446\",[371,36.481]],[\"comment/446\",[]],[\"name/447\",[372,36.481]],[\"comment/447\",[]],[\"name/448\",[373,37.694]],[\"comment/448\",[]],[\"name/449\",[374,37.694]],[\"comment/449\",[]],[\"name/450\",[385,61.048]],[\"comment/450\",[]],[\"name/451\",[371,36.481]],[\"comment/451\",[]],[\"name/452\",[372,36.481]],[\"comment/452\",[]],[\"name/453\",[373,37.694]],[\"comment/453\",[]],[\"name/454\",[374,37.694]],[\"comment/454\",[]],[\"name/455\",[386,61.048]],[\"comment/455\",[]],[\"name/456\",[371,36.481]],[\"comment/456\",[]],[\"name/457\",[372,36.481]],[\"comment/457\",[]],[\"name/458\",[373,37.694]],[\"comment/458\",[]],[\"name/459\",[374,37.694]],[\"comment/459\",[]],[\"name/460\",[387,61.048]],[\"comment/460\",[]],[\"name/461\",[378,44.954]],[\"comment/461\",[]],[\"name/462\",[371,36.481]],[\"comment/462\",[]],[\"name/463\",[372,36.481]],[\"comment/463\",[]],[\"name/464\",[373,37.694]],[\"comment/464\",[]],[\"name/465\",[374,37.694]],[\"comment/465\",[]],[\"name/466\",[388,61.048]],[\"comment/466\",[]],[\"name/467\",[378,44.954]],[\"comment/467\",[]],[\"name/468\",[371,36.481]],[\"comment/468\",[]],[\"name/469\",[372,36.481]],[\"comment/469\",[]],[\"name/470\",[373,37.694]],[\"comment/470\",[]],[\"name/471\",[374,37.694]],[\"comment/471\",[]],[\"name/472\",[389,61.048]],[\"comment/472\",[]],[\"name/473\",[371,36.481]],[\"comment/473\",[]],[\"name/474\",[372,36.481]],[\"comment/474\",[]],[\"name/475\",[373,37.694]],[\"comment/475\",[]],[\"name/476\",[374,37.694]],[\"comment/476\",[]],[\"name/477\",[390,61.048]],[\"comment/477\",[]],[\"name/478\",[371,36.481]],[\"comment/478\",[]],[\"name/479\",[372,36.481]],[\"comment/479\",[]],[\"name/480\",[373,37.694]],[\"comment/480\",[]],[\"name/481\",[374,37.694]],[\"comment/481\",[]],[\"name/482\",[391,61.048]],[\"comment/482\",[]],[\"name/483\",[378,44.954]],[\"comment/483\",[]],[\"name/484\",[371,36.481]],[\"comment/484\",[]],[\"name/485\",[372,36.481]],[\"comment/485\",[]],[\"name/486\",[373,37.694]],[\"comment/486\",[]],[\"name/487\",[374,37.694]],[\"comment/487\",[]],[\"name/488\",[392,61.048]],[\"comment/488\",[]],[\"name/489\",[393,55.94]],[\"comment/489\",[]],[\"name/490\",[394,55.94]],[\"comment/490\",[]],[\"name/491\",[395,61.048]],[\"comment/491\",[]],[\"name/492\",[396,61.048]],[\"comment/492\",[]],[\"name/493\",[397,61.048]],[\"comment/493\",[]],[\"name/494\",[325,52.575]],[\"comment/494\",[]],[\"name/495\",[398,61.048]],[\"comment/495\",[]],[\"name/496\",[399,61.048]],[\"comment/496\",[]],[\"name/497\",[400,61.048]],[\"comment/497\",[]],[\"name/498\",[371,36.481]],[\"comment/498\",[]],[\"name/499\",[372,36.481]],[\"comment/499\",[]],[\"name/500\",[373,37.694]],[\"comment/500\",[]],[\"name/501\",[374,37.694]],[\"comment/501\",[]],[\"name/502\",[401,61.048]],[\"comment/502\",[]],[\"name/503\",[377,50.062]],[\"comment/503\",[]],[\"name/504\",[378,44.954]],[\"comment/504\",[]],[\"name/505\",[371,36.481]],[\"comment/505\",[]],[\"name/506\",[372,36.481]],[\"comment/506\",[]],[\"name/507\",[373,37.694]],[\"comment/507\",[]],[\"name/508\",[374,37.694]],[\"comment/508\",[]],[\"name/509\",[402,61.048]],[\"comment/509\",[]],[\"name/510\",[376,52.575]],[\"comment/510\",[]],[\"name/511\",[378,44.954]],[\"comment/511\",[]],[\"name/512\",[380,52.575]],[\"comment/512\",[]],[\"name/513\",[377,50.062]],[\"comment/513\",[]],[\"name/514\",[403,55.94]],[\"comment/514\",[]],[\"name/515\",[393,55.94]],[\"comment/515\",[]],[\"name/516\",[7,37.069]],[\"comment/516\",[]],[\"name/517\",[372,36.481]],[\"comment/517\",[]],[\"name/518\",[404,61.048]],[\"comment/518\",[]],[\"name/519\",[7,37.069]],[\"comment/519\",[]],[\"name/520\",[372,36.481]],[\"comment/520\",[]],[\"name/521\",[371,36.481]],[\"comment/521\",[]],[\"name/522\",[372,36.481]],[\"comment/522\",[]],[\"name/523\",[373,37.694]],[\"comment/523\",[]],[\"name/524\",[374,37.694]],[\"comment/524\",[]],[\"name/525\",[405,61.048]],[\"comment/525\",[]],[\"name/526\",[378,44.954]],[\"comment/526\",[]],[\"name/527\",[380,52.575]],[\"comment/527\",[]],[\"name/528\",[377,50.062]],[\"comment/528\",[]],[\"name/529\",[371,36.481]],[\"comment/529\",[]],[\"name/530\",[372,36.481]],[\"comment/530\",[]],[\"name/531\",[373,37.694]],[\"comment/531\",[]],[\"name/532\",[374,37.694]],[\"comment/532\",[]],[\"name/533\",[406,61.048]],[\"comment/533\",[]],[\"name/534\",[407,61.048]],[\"comment/534\",[]],[\"name/535\",[354,55.94]],[\"comment/535\",[]],[\"name/536\",[371,36.481]],[\"comment/536\",[]],[\"name/537\",[372,36.481]],[\"comment/537\",[]],[\"name/538\",[373,37.694]],[\"comment/538\",[]],[\"name/539\",[374,37.694]],[\"comment/539\",[]],[\"name/540\",[408,61.048]],[\"comment/540\",[]],[\"name/541\",[371,36.481]],[\"comment/541\",[]],[\"name/542\",[409,61.048]],[\"comment/542\",[]],[\"name/543\",[345,50.062]],[\"comment/543\",[]],[\"name/544\",[346,50.062]],[\"comment/544\",[]],[\"name/545\",[382,55.94]],[\"comment/545\",[]],[\"name/546\",[410,61.048]],[\"comment/546\",[]],[\"name/547\",[411,61.048]],[\"comment/547\",[]],[\"name/548\",[412,61.048]],[\"comment/548\",[]],[\"name/549\",[413,61.048]],[\"comment/549\",[]],[\"name/550\",[414,61.048]],[\"comment/550\",[]],[\"name/551\",[415,61.048]],[\"comment/551\",[]],[\"name/552\",[416,61.048]],[\"comment/552\",[]],[\"name/553\",[417,61.048]],[\"comment/553\",[]],[\"name/554\",[418,61.048]],[\"comment/554\",[]],[\"name/555\",[419,61.048]],[\"comment/555\",[]],[\"name/556\",[420,61.048]],[\"comment/556\",[]],[\"name/557\",[421,61.048]],[\"comment/557\",[]],[\"name/558\",[422,61.048]],[\"comment/558\",[]],[\"name/559\",[423,61.048]],[\"comment/559\",[]],[\"name/560\",[424,61.048]],[\"comment/560\",[]],[\"name/561\",[425,61.048]],[\"comment/561\",[]],[\"name/562\",[371,36.481]],[\"comment/562\",[]],[\"name/563\",[3,52.575]],[\"comment/563\",[]],[\"name/564\",[305,50.062]],[\"comment/564\",[]],[\"name/565\",[426,61.048]],[\"comment/565\",[]],[\"name/566\",[427,61.048]],[\"comment/566\",[]],[\"name/567\",[353,55.94]],[\"comment/567\",[]],[\"name/568\",[428,61.048]],[\"comment/568\",[]],[\"name/569\",[30,55.94]],[\"comment/569\",[]],[\"name/570\",[429,61.048]],[\"comment/570\",[]],[\"name/571\",[430,61.048]],[\"comment/571\",[]],[\"name/572\",[431,61.048]],[\"comment/572\",[]],[\"name/573\",[432,61.048]],[\"comment/573\",[]],[\"name/574\",[316,55.94]],[\"comment/574\",[]],[\"name/575\",[433,61.048]],[\"comment/575\",[]],[\"name/576\",[434,61.048]],[\"comment/576\",[]],[\"name/577\",[435,61.048]],[\"comment/577\",[]],[\"name/578\",[297,55.94]],[\"comment/578\",[]],[\"name/579\",[49,52.575]],[\"comment/579\",[]],[\"name/580\",[45,50.062]],[\"comment/580\",[]],[\"name/581\",[46,50.062]],[\"comment/581\",[]],[\"name/582\",[47,52.575]],[\"comment/582\",[]],[\"name/583\",[48,52.575]],[\"comment/583\",[]],[\"name/584\",[23,55.94]],[\"comment/584\",[]],[\"name/585\",[436,61.048]],[\"comment/585\",[]],[\"name/586\",[437,61.048]],[\"comment/586\",[]],[\"name/587\",[67,44.954]],[\"comment/587\",[]],[\"name/588\",[438,48.055]],[\"comment/588\",[]],[\"name/589\",[439,55.94]],[\"comment/589\",[]],[\"name/590\",[440,61.048]],[\"comment/590\",[]],[\"name/591\",[288,46.385]],[\"comment/591\",[]],[\"name/592\",[441,48.055]],[\"comment/592\",[]],[\"name/593\",[70,55.94]],[\"comment/593\",[]],[\"name/594\",[394,55.94]],[\"comment/594\",[]],[\"name/595\",[442,61.048]],[\"comment/595\",[]],[\"name/596\",[443,52.575]],[\"comment/596\",[]],[\"name/597\",[444,61.048]],[\"comment/597\",[]],[\"name/598\",[330,55.94]],[\"comment/598\",[]],[\"name/599\",[445,61.048]],[\"comment/599\",[]],[\"name/600\",[325,52.575]],[\"comment/600\",[]],[\"name/601\",[331,55.94]],[\"comment/601\",[]],[\"name/602\",[446,61.048]],[\"comment/602\",[]],[\"name/603\",[36,50.062]],[\"comment/603\",[]],[\"name/604\",[447,61.048]],[\"comment/604\",[]],[\"name/605\",[448,61.048]],[\"comment/605\",[]],[\"name/606\",[376,52.575]],[\"comment/606\",[]],[\"name/607\",[8,50.062]],[\"comment/607\",[]],[\"name/608\",[449,61.048]],[\"comment/608\",[]],[\"name/609\",[450,61.048]],[\"comment/609\",[]],[\"name/610\",[451,61.048]],[\"comment/610\",[]],[\"name/611\",[452,61.048]],[\"comment/611\",[]],[\"name/612\",[453,61.048]],[\"comment/612\",[]],[\"name/613\",[454,61.048]],[\"comment/613\",[]],[\"name/614\",[455,61.048]],[\"comment/614\",[]],[\"name/615\",[456,61.048]],[\"comment/615\",[]],[\"name/616\",[457,61.048]],[\"comment/616\",[]],[\"name/617\",[458,61.048]],[\"comment/617\",[]],[\"name/618\",[36,50.062]],[\"comment/618\",[]],[\"name/619\",[438,48.055]],[\"comment/619\",[]],[\"name/620\",[459,61.048]],[\"comment/620\",[]],[\"name/621\",[67,44.954]],[\"comment/621\",[]],[\"name/622\",[438,48.055]],[\"comment/622\",[]],[\"name/623\",[288,46.385]],[\"comment/623\",[]],[\"name/624\",[441,48.055]],[\"comment/624\",[]],[\"name/625\",[460,55.94]],[\"comment/625\",[]],[\"name/626\",[443,52.575]],[\"comment/626\",[]],[\"name/627\",[461,61.048]],[\"comment/627\",[]],[\"name/628\",[67,44.954]],[\"comment/628\",[]],[\"name/629\",[438,48.055]],[\"comment/629\",[]],[\"name/630\",[439,55.94]],[\"comment/630\",[]],[\"name/631\",[462,61.048]],[\"comment/631\",[]],[\"name/632\",[288,46.385]],[\"comment/632\",[]],[\"name/633\",[441,48.055]],[\"comment/633\",[]],[\"name/634\",[460,55.94]],[\"comment/634\",[]],[\"name/635\",[343,52.575]],[\"comment/635\",[]],[\"name/636\",[443,52.575]],[\"comment/636\",[]],[\"name/637\",[403,55.94]],[\"comment/637\",[]],[\"name/638\",[463,61.048]],[\"comment/638\",[]],[\"name/639\",[67,44.954]],[\"comment/639\",[]],[\"name/640\",[438,48.055]],[\"comment/640\",[]],[\"name/641\",[464,61.048]],[\"comment/641\",[]],[\"name/642\",[343,52.575]],[\"comment/642\",[]],[\"name/643\",[288,46.385]],[\"comment/643\",[]],[\"name/644\",[441,48.055]],[\"comment/644\",[]],[\"name/645\",[465,61.048]],[\"comment/645\",[]],[\"name/646\",[466,61.048]],[\"comment/646\",[]],[\"name/647\",[67,44.954]],[\"comment/647\",[]],[\"name/648\",[45,50.062]],[\"comment/648\",[]],[\"name/649\",[46,50.062]],[\"comment/649\",[]],[\"name/650\",[467,61.048]],[\"comment/650\",[]],[\"name/651\",[7,37.069]],[\"comment/651\",[]],[\"name/652\",[468,61.048]],[\"comment/652\",[]],[\"name/653\",[469,61.048]],[\"comment/653\",[]],[\"name/654\",[470,61.048]],[\"comment/654\",[]],[\"name/655\",[288,46.385]],[\"comment/655\",[]],[\"name/656\",[441,48.055]],[\"comment/656\",[]],[\"name/657\",[4,55.94]],[\"comment/657\",[]],[\"name/658\",[45,50.062]],[\"comment/658\",[]],[\"name/659\",[46,50.062]],[\"comment/659\",[]],[\"name/660\",[47,52.575]],[\"comment/660\",[]],[\"name/661\",[49,52.575]],[\"comment/661\",[]],[\"name/662\",[48,52.575]],[\"comment/662\",[]],[\"name/663\",[17,55.94]],[\"comment/663\",[]],[\"name/664\",[9,50.062]],[\"comment/664\",[]],[\"name/665\",[471,61.048]],[\"comment/665\",[]],[\"name/666\",[472,61.048]],[\"comment/666\",[]],[\"name/667\",[473,61.048]],[\"comment/667\",[]],[\"name/668\",[345,50.062]],[\"comment/668\",[]],[\"name/669\",[346,50.062]],[\"comment/669\",[]],[\"name/670\",[474,61.048]],[\"comment/670\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":7,\"name\":{\"7\":{},\"40\":{},\"240\":{},\"245\":{},\"267\":{},\"269\":{},\"271\":{},\"331\":{},\"336\":{},\"340\":{},\"346\":{},\"354\":{},\"359\":{},\"516\":{},\"519\":{},\"651\":{}},\"comment\":{}}],[\"abs\",{\"_index\":93,\"name\":{\"109\":{}},\"comment\":{}}],[\"acos\",{\"_index\":94,\"name\":{\"110\":{}},\"comment\":{}}],[\"acosh\",{\"_index\":95,\"name\":{\"111\":{}},\"comment\":{}}],[\"adapter\",{\"_index\":313,\"name\":{\"357\":{}},\"comment\":{}}],[\"add\",{\"_index\":96,\"name\":{\"112\":{}},\"comment\":{}}],[\"age\",{\"_index\":444,\"name\":{\"597\":{}},\"comment\":{}}],[\"agent\",{\"_index\":294,\"name\":{\"326\":{}},\"comment\":{}}],[\"all\",{\"_index\":43,\"name\":{\"49\":{},\"113\":{}},\"comment\":{}}],[\"alpha\",{\"_index\":263,\"name\":{\"292\":{}},\"comment\":{}}],[\"analyze\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"annotations\",{\"_index\":443,\"name\":{\"596\":{},\"626\":{},\"636\":{}},\"comment\":{}}],[\"antispoof\",{\"_index\":398,\"name\":{\"495\":{}},\"comment\":{}}],[\"any\",{\"_index\":97,\"name\":{\"114\":{}},\"comment\":{}}],[\"anycanvas\",{\"_index\":361,\"name\":{\"418\":{}},\"comment\":{}}],[\"anyimage\",{\"_index\":362,\"name\":{\"419\":{}},\"comment\":{}}],[\"anyvideo\",{\"_index\":363,\"name\":{\"420\":{}},\"comment\":{}}],[\"argmax\",{\"_index\":98,\"name\":{\"115\":{}},\"comment\":{}}],[\"argmin\",{\"_index\":99,\"name\":{\"116\":{}},\"comment\":{}}],[\"array\",{\"_index\":80,\"name\":{\"96\":{}},\"comment\":{}}],[\"arraysync\",{\"_index\":81,\"name\":{\"97\":{}},\"comment\":{}}],[\"as1d\",{\"_index\":102,\"name\":{\"119\":{}},\"comment\":{}}],[\"as2d\",{\"_index\":103,\"name\":{\"120\":{}},\"comment\":{}}],[\"as3d\",{\"_index\":104,\"name\":{\"121\":{}},\"comment\":{}}],[\"as4d\",{\"_index\":105,\"name\":{\"122\":{}},\"comment\":{}}],[\"as5d\",{\"_index\":106,\"name\":{\"123\":{}},\"comment\":{}}],[\"asin\",{\"_index\":107,\"name\":{\"124\":{}},\"comment\":{}}],[\"asinh\",{\"_index\":108,\"name\":{\"125\":{}},\"comment\":{}}],[\"asscalar\",{\"_index\":100,\"name\":{\"117\":{}},\"comment\":{}}],[\"astype\",{\"_index\":101,\"name\":{\"118\":{}},\"comment\":{}}],[\"async\",{\"_index\":428,\"name\":{\"568\":{}},\"comment\":{}}],[\"atan\",{\"_index\":109,\"name\":{\"126\":{}},\"comment\":{}}],[\"atan2\",{\"_index\":110,\"name\":{\"127\":{}},\"comment\":{}}],[\"atanh\",{\"_index\":111,\"name\":{\"128\":{}},\"comment\":{}}],[\"attention\",{\"_index\":395,\"name\":{\"491\":{}},\"comment\":{}}],[\"autobrightness\",{\"_index\":411,\"name\":{\"547\":{}},\"comment\":{}}],[\"avgpool\",{\"_index\":112,\"name\":{\"129\":{}},\"comment\":{}}],[\"backend\",{\"_index\":305,\"name\":{\"342\":{},\"348\":{},\"356\":{},\"564\":{}},\"comment\":{}}],[\"backendenum\",{\"_index\":367,\"name\":{\"424\":{}},\"comment\":{}}],[\"backends\",{\"_index\":295,\"name\":{\"327\":{}},\"comment\":{}}],[\"batchnorm\",{\"_index\":114,\"name\":{\"131\":{}},\"comment\":{}}],[\"batchtospacend\",{\"_index\":113,\"name\":{\"130\":{}},\"comment\":{}}],[\"blur\",{\"_index\":415,\"name\":{\"551\":{}},\"comment\":{}}],[\"body\",{\"_index\":46,\"name\":{\"53\":{},\"581\":{},\"649\":{},\"659\":{}},\"comment\":{}}],[\"bodyannotation\",{\"_index\":334,\"name\":{\"381\":{}},\"comment\":{}}],[\"bodyannotationblazepose\",{\"_index\":453,\"name\":{\"612\":{}},\"comment\":{}}],[\"bodyannotationefficientpose\",{\"_index\":454,\"name\":{\"613\":{}},\"comment\":{}}],[\"bodyconfig\",{\"_index\":401,\"name\":{\"502\":{}},\"comment\":{}}],[\"bodygesture\",{\"_index\":322,\"name\":{\"369\":{}},\"comment\":{}}],[\"bodykeypoint\",{\"_index\":455,\"name\":{\"614\":{}},\"comment\":{}}],[\"bodylabels\",{\"_index\":282,\"name\":{\"311\":{}},\"comment\":{}}],[\"bodylandmark\",{\"_index\":333,\"name\":{\"380\":{}},\"comment\":{}}],[\"bodylandmarkblazepose\",{\"_index\":452,\"name\":{\"611\":{}},\"comment\":{}}],[\"bodylandmarkefficientnet\",{\"_index\":451,\"name\":{\"610\":{}},\"comment\":{}}],[\"bodylandmarkmovenet\",{\"_index\":450,\"name\":{\"609\":{}},\"comment\":{}}],[\"bodylandmarkposenet\",{\"_index\":449,\"name\":{\"608\":{}},\"comment\":{}}],[\"bodypartlabels\",{\"_index\":283,\"name\":{\"312\":{}},\"comment\":{}}],[\"bodyresult\",{\"_index\":459,\"name\":{\"620\":{}},\"comment\":{}}],[\"box\",{\"_index\":288,\"name\":{\"317\":{},\"591\":{},\"623\":{},\"632\":{},\"643\":{},\"655\":{}},\"comment\":{}}],[\"boxraw\",{\"_index\":441,\"name\":{\"592\":{},\"624\":{},\"633\":{},\"644\":{},\"656\":{}},\"comment\":{}}],[\"boxscore\",{\"_index\":439,\"name\":{\"589\":{},\"630\":{}},\"comment\":{}}],[\"brightness\",{\"_index\":412,\"name\":{\"548\":{}},\"comment\":{}}],[\"broadcastto\",{\"_index\":115,\"name\":{\"132\":{}},\"comment\":{}}],[\"browser\",{\"_index\":290,\"name\":{\"322\":{}},\"comment\":{}}],[\"buffer\",{\"_index\":78,\"name\":{\"94\":{}},\"comment\":{}}],[\"buffersync\",{\"_index\":79,\"name\":{\"95\":{}},\"comment\":{}}],[\"bytes\",{\"_index\":85,\"name\":{\"101\":{}},\"comment\":{}}],[\"cachemodels\",{\"_index\":430,\"name\":{\"571\":{}},\"comment\":{}}],[\"cachesensitivity\",{\"_index\":432,\"name\":{\"573\":{}},\"comment\":{}}],[\"canvas\",{\"_index\":9,\"name\":{\"9\":{},\"48\":{},\"363\":{},\"664\":{}},\"comment\":{}}],[\"capabilities\",{\"_index\":340,\"name\":{\"390\":{}},\"comment\":{}}],[\"cast\",{\"_index\":116,\"name\":{\"133\":{}},\"comment\":{}}],[\"ceil\",{\"_index\":117,\"name\":{\"134\":{}},\"comment\":{}}],[\"class\",{\"_index\":464,\"name\":{\"641\":{}},\"comment\":{}}],[\"clipbyvalue\",{\"_index\":118,\"name\":{\"135\":{}},\"comment\":{}}],[\"clone\",{\"_index\":90,\"name\":{\"106\":{}},\"comment\":{}}],[\"color\",{\"_index\":262,\"name\":{\"291\":{}},\"comment\":{}}],[\"compare\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"concat\",{\"_index\":119,\"name\":{\"136\":{}},\"comment\":{}}],[\"config\",{\"_index\":3,\"name\":{\"3\":{},\"385\":{},\"563\":{}},\"comment\":{}}],[\"constraints\",{\"_index\":341,\"name\":{\"391\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":1,\"name\":{\"1\":{},\"73\":{},\"82\":{},\"259\":{},\"321\":{},\"384\":{}},\"comment\":{}}],[\"contrast\",{\"_index\":413,\"name\":{\"549\":{}},\"comment\":{}}],[\"conv1d\",{\"_index\":120,\"name\":{\"137\":{}},\"comment\":{}}],[\"conv2d\",{\"_index\":122,\"name\":{\"139\":{}},\"comment\":{}}],[\"conv2dtranspose\",{\"_index\":121,\"name\":{\"138\":{}},\"comment\":{}}],[\"cos\",{\"_index\":123,\"name\":{\"140\":{}},\"comment\":{}}],[\"cosh\",{\"_index\":124,\"name\":{\"141\":{}},\"comment\":{}}],[\"cpu\",{\"_index\":314,\"name\":{\"358\":{}},\"comment\":{}}],[\"crop\",{\"_index\":355,\"name\":{\"406\":{}},\"comment\":{}}],[\"cumprod\",{\"_index\":125,\"name\":{\"142\":{}},\"comment\":{}}],[\"cumsum\",{\"_index\":126,\"name\":{\"143\":{}},\"comment\":{}}],[\"data\",{\"_index\":82,\"name\":{\"98\":{}},\"comment\":{}}],[\"dataid\",{\"_index\":68,\"name\":{\"84\":{}},\"comment\":{}}],[\"datasync\",{\"_index\":84,\"name\":{\"100\":{}},\"comment\":{}}],[\"datatogpu\",{\"_index\":83,\"name\":{\"99\":{}},\"comment\":{}}],[\"deallocate\",{\"_index\":434,\"name\":{\"576\":{}},\"comment\":{}}],[\"debug\",{\"_index\":353,\"name\":{\"404\":{},\"567\":{}},\"comment\":{}}],[\"default\",{\"_index\":35,\"name\":{\"35\":{}},\"comment\":{}}],[\"defaults\",{\"_index\":436,\"name\":{\"585\":{}},\"comment\":{}}],[\"depthtospace\",{\"_index\":127,\"name\":{\"144\":{}},\"comment\":{}}],[\"depthwiseconv2d\",{\"_index\":128,\"name\":{\"145\":{}},\"comment\":{}}],[\"description\",{\"_index\":397,\"name\":{\"493\":{}},\"comment\":{}}],[\"descriptor\",{\"_index\":40,\"name\":{\"44\":{}},\"comment\":{}}],[\"detect\",{\"_index\":32,\"name\":{\"32\":{}},\"comment\":{}}],[\"detector\",{\"_index\":393,\"name\":{\"489\":{},\"515\":{}},\"comment\":{}}],[\"devices\",{\"_index\":338,\"name\":{\"388\":{}},\"comment\":{}}],[\"dilation2d\",{\"_index\":129,\"name\":{\"146\":{}},\"comment\":{}}],[\"dispose\",{\"_index\":86,\"name\":{\"102\":{},\"281\":{}},\"comment\":{}}],[\"disposeintermediatetensors\",{\"_index\":253,\"name\":{\"280\":{}},\"comment\":{}}],[\"distance\",{\"_index\":36,\"name\":{\"37\":{},\"42\":{},\"603\":{},\"618\":{}},\"comment\":{}}],[\"div\",{\"_index\":131,\"name\":{\"148\":{}},\"comment\":{}}],[\"divnonan\",{\"_index\":130,\"name\":{\"147\":{}},\"comment\":{}}],[\"dot\",{\"_index\":132,\"name\":{\"149\":{}},\"comment\":{}}],[\"draw\",{\"_index\":12,\"name\":{\"12\":{},\"46\":{}},\"comment\":{}}],[\"drawattention\",{\"_index\":273,\"name\":{\"302\":{}},\"comment\":{}}],[\"drawboxes\",{\"_index\":275,\"name\":{\"304\":{}},\"comment\":{}}],[\"drawgaze\",{\"_index\":277,\"name\":{\"306\":{}},\"comment\":{}}],[\"drawgestures\",{\"_index\":274,\"name\":{\"303\":{}},\"comment\":{}}],[\"drawlabels\",{\"_index\":272,\"name\":{\"301\":{}},\"comment\":{}}],[\"drawoptions\",{\"_index\":261,\"name\":{\"290\":{}},\"comment\":{}}],[\"drawpoints\",{\"_index\":271,\"name\":{\"300\":{}},\"comment\":{}}],[\"drawpolygons\",{\"_index\":276,\"name\":{\"305\":{}},\"comment\":{}}],[\"dtype\",{\"_index\":71,\"name\":{\"87\":{}},\"comment\":{}}],[\"element\",{\"_index\":336,\"name\":{\"386\":{},\"403\":{}},\"comment\":{}}],[\"elu\",{\"_index\":133,\"name\":{\"150\":{}},\"comment\":{}}],[\"embedding\",{\"_index\":446,\"name\":{\"602\":{}},\"comment\":{}}],[\"emit\",{\"_index\":28,\"name\":{\"28\":{}},\"comment\":{}}],[\"emotion\",{\"_index\":325,\"name\":{\"372\":{},\"494\":{},\"600\":{}},\"comment\":{}}],[\"empty\",{\"_index\":474,\"name\":{\"670\":{}},\"comment\":{}}],[\"enabled\",{\"_index\":371,\"name\":{\"428\":{},\"440\":{},\"446\":{},\"451\":{},\"456\":{},\"462\":{},\"468\":{},\"473\":{},\"478\":{},\"484\":{},\"498\":{},\"505\":{},\"521\":{},\"529\":{},\"536\":{},\"541\":{},\"562\":{}},\"comment\":{}}],[\"enumerate\",{\"_index\":347,\"name\":{\"397\":{}},\"comment\":{}}],[\"env\",{\"_index\":11,\"name\":{\"11\":{},\"319\":{},\"320\":{}},\"comment\":{}}],[\"equal\",{\"_index\":134,\"name\":{\"151\":{}},\"comment\":{}}],[\"equalization\",{\"_index\":409,\"name\":{\"542\":{}},\"comment\":{}}],[\"erf\",{\"_index\":135,\"name\":{\"152\":{}},\"comment\":{}}],[\"error\",{\"_index\":473,\"name\":{\"667\":{}},\"comment\":{}}],[\"euclideannorm\",{\"_index\":136,\"name\":{\"153\":{}},\"comment\":{}}],[\"events\",{\"_index\":14,\"name\":{\"14\":{},\"417\":{}},\"comment\":{}}],[\"execute\",{\"_index\":250,\"name\":{\"277\":{}},\"comment\":{}}],[\"executeasync\",{\"_index\":251,\"name\":{\"278\":{}},\"comment\":{}}],[\"exp\",{\"_index\":137,\"name\":{\"154\":{}},\"comment\":{}}],[\"expanddims\",{\"_index\":138,\"name\":{\"155\":{}},\"comment\":{}}],[\"expm1\",{\"_index\":139,\"name\":{\"156\":{}},\"comment\":{}}],[\"externalcanvas\",{\"_index\":365,\"name\":{\"422\":{}},\"comment\":{}}],[\"face\",{\"_index\":45,\"name\":{\"52\":{},\"580\":{},\"648\":{},\"658\":{}},\"comment\":{}}],[\"faceantispoofconfig\",{\"_index\":389,\"name\":{\"472\":{}},\"comment\":{}}],[\"faceattentionconfig\",{\"_index\":386,\"name\":{\"455\":{}},\"comment\":{}}],[\"faceconfig\",{\"_index\":392,\"name\":{\"488\":{}},\"comment\":{}}],[\"facedescriptionconfig\",{\"_index\":387,\"name\":{\"460\":{}},\"comment\":{}}],[\"facedetectorconfig\",{\"_index\":375,\"name\":{\"432\":{}},\"comment\":{}}],[\"faceemotionconfig\",{\"_index\":388,\"name\":{\"466\":{}},\"comment\":{}}],[\"facegearconfig\",{\"_index\":391,\"name\":{\"482\":{}},\"comment\":{}}],[\"facegesture\",{\"_index\":321,\"name\":{\"368\":{}},\"comment\":{}}],[\"faceirisconfig\",{\"_index\":385,\"name\":{\"450\":{}},\"comment\":{}}],[\"facelabels\",{\"_index\":281,\"name\":{\"310\":{}},\"comment\":{}}],[\"facelandmark\",{\"_index\":332,\"name\":{\"379\":{}},\"comment\":{}}],[\"facelivenessconfig\",{\"_index\":390,\"name\":{\"477\":{}},\"comment\":{}}],[\"facemeshconfig\",{\"_index\":383,\"name\":{\"444\":{}},\"comment\":{}}],[\"faceresult\",{\"_index\":437,\"name\":{\"586\":{}},\"comment\":{}}],[\"facescore\",{\"_index\":440,\"name\":{\"590\":{}},\"comment\":{}}],[\"facetriangulation\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"faceuvmap\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"fft\",{\"_index\":140,\"name\":{\"157\":{}},\"comment\":{}}],[\"fillpolygons\",{\"_index\":278,\"name\":{\"307\":{}},\"comment\":{}}],[\"filter\",{\"_index\":297,\"name\":{\"329\":{},\"578\":{}},\"comment\":{}}],[\"filterconfig\",{\"_index\":408,\"name\":{\"540\":{}},\"comment\":{}}],[\"find\",{\"_index\":38,\"name\":{\"39\":{}},\"comment\":{}}],[\"finger\",{\"_index\":326,\"name\":{\"373\":{}},\"comment\":{}}],[\"fingercurl\",{\"_index\":327,\"name\":{\"374\":{}},\"comment\":{}}],[\"fingerdirection\",{\"_index\":328,\"name\":{\"375\":{}},\"comment\":{}}],[\"fingerlabels\",{\"_index\":285,\"name\":{\"314\":{}},\"comment\":{}}],[\"fingerscore\",{\"_index\":462,\"name\":{\"631\":{}},\"comment\":{}}],[\"flags\",{\"_index\":316,\"name\":{\"361\":{},\"574\":{}},\"comment\":{}}],[\"flatten\",{\"_index\":141,\"name\":{\"158\":{}},\"comment\":{}}],[\"flip\",{\"_index\":410,\"name\":{\"546\":{}},\"comment\":{}}],[\"floor\",{\"_index\":142,\"name\":{\"159\":{}},\"comment\":{}}],[\"floordiv\",{\"_index\":143,\"name\":{\"160\":{}},\"comment\":{}}],[\"font\",{\"_index\":266,\"name\":{\"295\":{}},\"comment\":{}}],[\"gather\",{\"_index\":144,\"name\":{\"161\":{}},\"comment\":{}}],[\"gear\",{\"_index\":400,\"name\":{\"497\":{}},\"comment\":{}}],[\"gender\",{\"_index\":330,\"name\":{\"377\":{},\"598\":{}},\"comment\":{}}],[\"genderscore\",{\"_index\":445,\"name\":{\"599\":{}},\"comment\":{}}],[\"genericconfig\",{\"_index\":370,\"name\":{\"427\":{}},\"comment\":{}}],[\"gesture\",{\"_index\":49,\"name\":{\"56\":{},\"579\":{},\"661\":{}},\"comment\":{}}],[\"gestureconfig\",{\"_index\":425,\"name\":{\"561\":{}},\"comment\":{}}],[\"gesturelabels\",{\"_index\":287,\"name\":{\"316\":{}},\"comment\":{}}],[\"gestureresult\",{\"_index\":465,\"name\":{\"645\":{}},\"comment\":{}}],[\"gestures\",{\"_index\":470,\"name\":{\"654\":{}},\"comment\":{}}],[\"getintermediatetensors\",{\"_index\":252,\"name\":{\"279\":{}},\"comment\":{}}],[\"gpu\",{\"_index\":302,\"name\":{\"338\":{}},\"comment\":{}}],[\"graphmodel\",{\"_index\":236,\"name\":{\"258\":{}},\"comment\":{}}],[\"greater\",{\"_index\":146,\"name\":{\"163\":{}},\"comment\":{}}],[\"greaterequal\",{\"_index\":145,\"name\":{\"162\":{}},\"comment\":{}}],[\"hand\",{\"_index\":47,\"name\":{\"54\":{},\"582\":{},\"660\":{}},\"comment\":{}}],[\"handconfig\",{\"_index\":402,\"name\":{\"509\":{}},\"comment\":{}}],[\"handgesture\",{\"_index\":323,\"name\":{\"370\":{}},\"comment\":{}}],[\"handlabels\",{\"_index\":284,\"name\":{\"313\":{}},\"comment\":{}}],[\"handresult\",{\"_index\":461,\"name\":{\"627\":{}},\"comment\":{}}],[\"hands\",{\"_index\":467,\"name\":{\"650\":{}},\"comment\":{}}],[\"handtype\",{\"_index\":329,\"name\":{\"376\":{}},\"comment\":{}}],[\"height\",{\"_index\":346,\"name\":{\"396\":{},\"408\":{},\"544\":{},\"669\":{}},\"comment\":{}}],[\"hue\",{\"_index\":417,\"name\":{\"553\":{}},\"comment\":{}}],[\"human\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"id\",{\"_index\":67,\"name\":{\"83\":{},\"409\":{},\"587\":{},\"621\":{},\"628\":{},\"639\":{},\"647\":{}},\"comment\":{}}],[\"ifft\",{\"_index\":147,\"name\":{\"164\":{}},\"comment\":{}}],[\"image\",{\"_index\":22,\"name\":{\"22\":{},\"364\":{}},\"comment\":{}}],[\"imagedata\",{\"_index\":318,\"name\":{\"365\":{}},\"comment\":{}}],[\"imageobjects\",{\"_index\":364,\"name\":{\"421\":{}},\"comment\":{}}],[\"incache\",{\"_index\":357,\"name\":{\"412\":{}},\"comment\":{}}],[\"index\",{\"_index\":39,\"name\":{\"41\":{}},\"comment\":{}}],[\"indices\",{\"_index\":224,\"name\":{\"242\":{},\"247\":{}},\"comment\":{}}],[\"init\",{\"_index\":25,\"name\":{\"25\":{},\"50\":{}},\"comment\":{}}],[\"initial\",{\"_index\":296,\"name\":{\"328\":{}},\"comment\":{}}],[\"input\",{\"_index\":366,\"name\":{\"423\":{}},\"comment\":{}}],[\"inputnodes\",{\"_index\":238,\"name\":{\"261\":{}},\"comment\":{}}],[\"inputs\",{\"_index\":240,\"name\":{\"263\":{}},\"comment\":{}}],[\"iouthreshold\",{\"_index\":380,\"name\":{\"437\":{},\"512\":{},\"527\":{}},\"comment\":{}}],[\"irfft\",{\"_index\":148,\"name\":{\"165\":{}},\"comment\":{}}],[\"iris\",{\"_index\":396,\"name\":{\"492\":{}},\"comment\":{}}],[\"irisgesture\",{\"_index\":324,\"name\":{\"371\":{}},\"comment\":{}}],[\"isdisposed\",{\"_index\":87,\"name\":{\"103\":{}},\"comment\":{}}],[\"isfinite\",{\"_index\":149,\"name\":{\"166\":{}},\"comment\":{}}],[\"isinf\",{\"_index\":150,\"name\":{\"167\":{}},\"comment\":{}}],[\"isnan\",{\"_index\":151,\"name\":{\"168\":{}},\"comment\":{}}],[\"keepinvalid\",{\"_index\":384,\"name\":{\"445\":{}},\"comment\":{}}],[\"kept\",{\"_index\":73,\"name\":{\"89\":{}},\"comment\":{}}],[\"kerasmask\",{\"_index\":75,\"name\":{\"91\":{}},\"comment\":{}}],[\"kernelops\",{\"_index\":52,\"name\":{\"59\":{}},\"comment\":{}}],[\"kernels\",{\"_index\":317,\"name\":{\"362\":{}},\"comment\":{}}],[\"keypoints\",{\"_index\":460,\"name\":{\"625\":{},\"634\":{}},\"comment\":{}}],[\"kodachrome\",{\"_index\":421,\"name\":{\"557\":{}},\"comment\":{}}],[\"label\",{\"_index\":343,\"name\":{\"393\":{},\"635\":{},\"642\":{}},\"comment\":{}}],[\"labelcolor\",{\"_index\":264,\"name\":{\"293\":{}},\"comment\":{}}],[\"landmarks\",{\"_index\":403,\"name\":{\"514\":{},\"637\":{}},\"comment\":{}}],[\"leakyrelu\",{\"_index\":152,\"name\":{\"169\":{}},\"comment\":{}}],[\"left\",{\"_index\":468,\"name\":{\"652\":{}},\"comment\":{}}],[\"less\",{\"_index\":154,\"name\":{\"171\":{}},\"comment\":{}}],[\"lessequal\",{\"_index\":153,\"name\":{\"170\":{}},\"comment\":{}}],[\"lineheight\",{\"_index\":267,\"name\":{\"296\":{}},\"comment\":{}}],[\"linewidth\",{\"_index\":268,\"name\":{\"297\":{}},\"comment\":{}}],[\"list\",{\"_index\":65,\"name\":{\"78\":{}},\"comment\":{}}],[\"live\",{\"_index\":448,\"name\":{\"605\":{}},\"comment\":{}}],[\"liveness\",{\"_index\":399,\"name\":{\"496\":{}},\"comment\":{}}],[\"load\",{\"_index\":27,\"name\":{\"27\":{},\"77\":{},\"272\":{}},\"comment\":{}}],[\"loaded\",{\"_index\":66,\"name\":{\"79\":{}},\"comment\":{}}],[\"loadsync\",{\"_index\":246,\"name\":{\"273\":{}},\"comment\":{}}],[\"localresponsenormalization\",{\"_index\":155,\"name\":{\"172\":{}},\"comment\":{}}],[\"log\",{\"_index\":159,\"name\":{\"176\":{}},\"comment\":{}}],[\"log1p\",{\"_index\":160,\"name\":{\"177\":{}},\"comment\":{}}],[\"logicaland\",{\"_index\":161,\"name\":{\"178\":{}},\"comment\":{}}],[\"logicalnot\",{\"_index\":162,\"name\":{\"179\":{}},\"comment\":{}}],[\"logicalor\",{\"_index\":163,\"name\":{\"180\":{}},\"comment\":{}}],[\"logicalxor\",{\"_index\":164,\"name\":{\"181\":{}},\"comment\":{}}],[\"logsigmoid\",{\"_index\":156,\"name\":{\"173\":{}},\"comment\":{}}],[\"logsoftmax\",{\"_index\":157,\"name\":{\"174\":{}},\"comment\":{}}],[\"logsumexp\",{\"_index\":158,\"name\":{\"175\":{}},\"comment\":{}}],[\"mask\",{\"_index\":381,\"name\":{\"438\":{}},\"comment\":{}}],[\"match\",{\"_index\":13,\"name\":{\"13\":{},\"36\":{}},\"comment\":{}}],[\"matchoptions\",{\"_index\":41,\"name\":{\"45\":{}},\"comment\":{}}],[\"matmul\",{\"_index\":165,\"name\":{\"182\":{}},\"comment\":{}}],[\"max\",{\"_index\":167,\"name\":{\"184\":{}},\"comment\":{}}],[\"maxdetected\",{\"_index\":377,\"name\":{\"434\":{},\"503\":{},\"513\":{},\"528\":{}},\"comment\":{}}],[\"maximum\",{\"_index\":168,\"name\":{\"185\":{}},\"comment\":{}}],[\"maxpool\",{\"_index\":166,\"name\":{\"183\":{}},\"comment\":{}}],[\"mean\",{\"_index\":169,\"name\":{\"186\":{}},\"comment\":{}}],[\"mesh\",{\"_index\":394,\"name\":{\"490\":{},\"594\":{}},\"comment\":{}}],[\"meshraw\",{\"_index\":442,\"name\":{\"595\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":243,\"name\":{\"266\":{}},\"comment\":{}}],[\"min\",{\"_index\":170,\"name\":{\"187\":{}},\"comment\":{}}],[\"minconfidence\",{\"_index\":378,\"name\":{\"435\":{},\"461\":{},\"467\":{},\"483\":{},\"504\":{},\"511\":{},\"526\":{}},\"comment\":{}}],[\"minimum\",{\"_index\":171,\"name\":{\"188\":{}},\"comment\":{}}],[\"minsize\",{\"_index\":379,\"name\":{\"436\":{}},\"comment\":{}}],[\"mirrorpad\",{\"_index\":172,\"name\":{\"189\":{}},\"comment\":{}}],[\"missing\",{\"_index\":55,\"name\":{\"62\":{}},\"comment\":{}}],[\"mod\",{\"_index\":173,\"name\":{\"190\":{}},\"comment\":{}}],[\"mode\",{\"_index\":354,\"name\":{\"405\":{},\"535\":{}},\"comment\":{}}],[\"model\",{\"_index\":315,\"name\":{\"360\":{}},\"comment\":{}}],[\"modelbasepath\",{\"_index\":429,\"name\":{\"570\":{}},\"comment\":{}}],[\"modelinfo\",{\"_index\":356,\"name\":{\"410\":{}},\"comment\":{}}],[\"modelpath\",{\"_index\":372,\"name\":{\"429\":{},\"441\":{},\"447\":{},\"452\":{},\"457\":{},\"463\":{},\"469\":{},\"474\":{},\"479\":{},\"485\":{},\"499\":{},\"506\":{},\"517\":{},\"520\":{},\"522\":{},\"530\":{},\"537\":{}},\"comment\":{}}],[\"models\",{\"_index\":50,\"name\":{\"57\":{},\"72\":{},\"74\":{}},\"comment\":{}}],[\"modelsignature\",{\"_index\":244,\"name\":{\"268\":{}},\"comment\":{}}],[\"modelstats\",{\"_index\":57,\"name\":{\"64\":{},\"71\":{}},\"comment\":{}}],[\"modelstructuredoutputkeys\",{\"_index\":245,\"name\":{\"270\":{}},\"comment\":{}}],[\"modelversion\",{\"_index\":237,\"name\":{\"260\":{}},\"comment\":{}}],[\"mul\",{\"_index\":174,\"name\":{\"191\":{}},\"comment\":{}}],[\"multithread\",{\"_index\":307,\"name\":{\"344\":{}},\"comment\":{}}],[\"name\",{\"_index\":53,\"name\":{\"60\":{},\"411\":{}},\"comment\":{}}],[\"neg\",{\"_index\":175,\"name\":{\"192\":{}},\"comment\":{}}],[\"negative\",{\"_index\":418,\"name\":{\"554\":{}},\"comment\":{}}],[\"next\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"node\",{\"_index\":291,\"name\":{\"323\":{}},\"comment\":{}}],[\"norm\",{\"_index\":176,\"name\":{\"193\":{}},\"comment\":{}}],[\"notequal\",{\"_index\":177,\"name\":{\"194\":{}},\"comment\":{}}],[\"now\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"numdefinedmodels\",{\"_index\":59,\"name\":{\"66\":{}},\"comment\":{}}],[\"numloadedmodels\",{\"_index\":58,\"name\":{\"65\":{}},\"comment\":{}}],[\"object\",{\"_index\":48,\"name\":{\"55\":{},\"583\":{},\"662\":{}},\"comment\":{}}],[\"objectconfig\",{\"_index\":405,\"name\":{\"525\":{}},\"comment\":{}}],[\"objectlabels\",{\"_index\":286,\"name\":{\"315\":{}},\"comment\":{}}],[\"objectresult\",{\"_index\":463,\"name\":{\"638\":{}},\"comment\":{}}],[\"objecttype\",{\"_index\":335,\"name\":{\"382\":{}},\"comment\":{}}],[\"offscreen\",{\"_index\":299,\"name\":{\"333\":{}},\"comment\":{}}],[\"onehot\",{\"_index\":178,\"name\":{\"195\":{}},\"comment\":{}}],[\"oneslike\",{\"_index\":179,\"name\":{\"196\":{}},\"comment\":{}}],[\"ops\",{\"_index\":56,\"name\":{\"63\":{}},\"comment\":{}}],[\"options\",{\"_index\":44,\"name\":{\"51\":{}},\"comment\":{}}],[\"outputnodes\",{\"_index\":239,\"name\":{\"262\":{}},\"comment\":{}}],[\"outputs\",{\"_index\":241,\"name\":{\"264\":{}},\"comment\":{}}],[\"pad\",{\"_index\":180,\"name\":{\"197\":{}},\"comment\":{}}],[\"part\",{\"_index\":456,\"name\":{\"615\":{}},\"comment\":{}}],[\"pause\",{\"_index\":349,\"name\":{\"399\":{}},\"comment\":{}}],[\"paused\",{\"_index\":344,\"name\":{\"394\":{}},\"comment\":{}}],[\"percentageloaded\",{\"_index\":60,\"name\":{\"67\":{}},\"comment\":{}}],[\"perfadd\",{\"_index\":300,\"name\":{\"334\":{}},\"comment\":{}}],[\"performance\",{\"_index\":17,\"name\":{\"17\":{},\"663\":{}},\"comment\":{}}],[\"person\",{\"_index\":42,\"name\":{\"47\":{}},\"comment\":{}}],[\"personresult\",{\"_index\":466,\"name\":{\"646\":{}},\"comment\":{}}],[\"persons\",{\"_index\":472,\"name\":{\"666\":{}},\"comment\":{}}],[\"pixelate\",{\"_index\":424,\"name\":{\"560\":{}},\"comment\":{}}],[\"platform\",{\"_index\":293,\"name\":{\"325\":{}},\"comment\":{}}],[\"play\",{\"_index\":350,\"name\":{\"400\":{}},\"comment\":{}}],[\"point\",{\"_index\":289,\"name\":{\"318\":{}},\"comment\":{}}],[\"pointsize\",{\"_index\":269,\"name\":{\"298\":{}},\"comment\":{}}],[\"polaroid\",{\"_index\":423,\"name\":{\"559\":{}},\"comment\":{}}],[\"pool\",{\"_index\":181,\"name\":{\"198\":{}},\"comment\":{}}],[\"position\",{\"_index\":457,\"name\":{\"616\":{}},\"comment\":{}}],[\"positionraw\",{\"_index\":458,\"name\":{\"617\":{}},\"comment\":{}}],[\"pow\",{\"_index\":182,\"name\":{\"199\":{}},\"comment\":{}}],[\"predict\",{\"_index\":248,\"name\":{\"275\":{}},\"comment\":{}}],[\"predictasync\",{\"_index\":249,\"name\":{\"276\":{}},\"comment\":{}}],[\"prelu\",{\"_index\":183,\"name\":{\"200\":{}},\"comment\":{}}],[\"print\",{\"_index\":89,\"name\":{\"105\":{}},\"comment\":{}}],[\"process\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"prod\",{\"_index\":184,\"name\":{\"201\":{}},\"comment\":{}}],[\"profile\",{\"_index\":31,\"name\":{\"31\":{}},\"comment\":{}}],[\"r0\",{\"_index\":254,\"name\":{\"283\":{}},\"comment\":{}}],[\"r1\",{\"_index\":255,\"name\":{\"284\":{}},\"comment\":{}}],[\"r2\",{\"_index\":256,\"name\":{\"285\":{}},\"comment\":{}}],[\"r3\",{\"_index\":257,\"name\":{\"286\":{}},\"comment\":{}}],[\"r4\",{\"_index\":258,\"name\":{\"287\":{}},\"comment\":{}}],[\"r5\",{\"_index\":259,\"name\":{\"288\":{}},\"comment\":{}}],[\"r6\",{\"_index\":260,\"name\":{\"289\":{}},\"comment\":{}}],[\"race\",{\"_index\":331,\"name\":{\"378\":{},\"601\":{}},\"comment\":{}}],[\"rank\",{\"_index\":77,\"name\":{\"93\":{},\"282\":{}},\"comment\":{}}],[\"ranktype\",{\"_index\":72,\"name\":{\"88\":{}},\"comment\":{}}],[\"ratio\",{\"_index\":407,\"name\":{\"534\":{}},\"comment\":{}}],[\"real\",{\"_index\":447,\"name\":{\"604\":{}},\"comment\":{}}],[\"reciprocal\",{\"_index\":185,\"name\":{\"202\":{}},\"comment\":{}}],[\"relu\",{\"_index\":186,\"name\":{\"203\":{}},\"comment\":{}}],[\"relu6\",{\"_index\":187,\"name\":{\"204\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":309,\"name\":{\"350\":{}},\"comment\":{}}],[\"reset\",{\"_index\":19,\"name\":{\"19\":{},\"76\":{}},\"comment\":{}}],[\"reshape\",{\"_index\":189,\"name\":{\"206\":{}},\"comment\":{}}],[\"reshapeas\",{\"_index\":188,\"name\":{\"205\":{}},\"comment\":{}}],[\"resizebilinear\",{\"_index\":190,\"name\":{\"207\":{}},\"comment\":{}}],[\"resizenearestneighbor\",{\"_index\":191,\"name\":{\"208\":{}},\"comment\":{}}],[\"result\",{\"_index\":4,\"name\":{\"4\":{},\"657\":{}},\"comment\":{}}],[\"return\",{\"_index\":382,\"name\":{\"439\":{},\"545\":{}},\"comment\":{}}],[\"reverse\",{\"_index\":192,\"name\":{\"209\":{}},\"comment\":{}}],[\"rfft\",{\"_index\":193,\"name\":{\"210\":{}},\"comment\":{}}],[\"right\",{\"_index\":469,\"name\":{\"653\":{}},\"comment\":{}}],[\"rotation\",{\"_index\":376,\"name\":{\"433\":{},\"510\":{},\"606\":{}},\"comment\":{}}],[\"round\",{\"_index\":194,\"name\":{\"211\":{}},\"comment\":{}}],[\"roundrect\",{\"_index\":270,\"name\":{\"299\":{}},\"comment\":{}}],[\"rsqrt\",{\"_index\":195,\"name\":{\"212\":{}},\"comment\":{}}],[\"saturation\",{\"_index\":416,\"name\":{\"552\":{}},\"comment\":{}}],[\"save\",{\"_index\":247,\"name\":{\"274\":{}},\"comment\":{}}],[\"scopeid\",{\"_index\":74,\"name\":{\"90\":{}},\"comment\":{}}],[\"score\",{\"_index\":438,\"name\":{\"588\":{},\"619\":{},\"622\":{},\"629\":{},\"640\":{}},\"comment\":{}}],[\"segmentation\",{\"_index\":23,\"name\":{\"23\":{},\"584\":{}},\"comment\":{}}],[\"segmentationconfig\",{\"_index\":406,\"name\":{\"533\":{}},\"comment\":{}}],[\"segmentationenum\",{\"_index\":369,\"name\":{\"426\":{}},\"comment\":{}}],[\"selu\",{\"_index\":196,\"name\":{\"213\":{}},\"comment\":{}}],[\"separableconv2d\",{\"_index\":197,\"name\":{\"214\":{}},\"comment\":{}}],[\"sepia\",{\"_index\":419,\"name\":{\"555\":{}},\"comment\":{}}],[\"settings\",{\"_index\":342,\"name\":{\"392\":{}},\"comment\":{}}],[\"shader\",{\"_index\":310,\"name\":{\"351\":{}},\"comment\":{}}],[\"shadowcolor\",{\"_index\":265,\"name\":{\"294\":{}},\"comment\":{}}],[\"shape\",{\"_index\":69,\"name\":{\"85\":{}},\"comment\":{}}],[\"sharpness\",{\"_index\":414,\"name\":{\"550\":{}},\"comment\":{}}],[\"sigmoid\",{\"_index\":198,\"name\":{\"215\":{}},\"comment\":{}}],[\"sign\",{\"_index\":199,\"name\":{\"216\":{}},\"comment\":{}}],[\"simd\",{\"_index\":306,\"name\":{\"343\":{}},\"comment\":{}}],[\"similarity\",{\"_index\":37,\"name\":{\"38\":{},\"43\":{}},\"comment\":{}}],[\"sin\",{\"_index\":200,\"name\":{\"217\":{}},\"comment\":{}}],[\"sinh\",{\"_index\":201,\"name\":{\"218\":{}},\"comment\":{}}],[\"size\",{\"_index\":70,\"name\":{\"86\":{},\"593\":{}},\"comment\":{}}],[\"sizedesired\",{\"_index\":358,\"name\":{\"413\":{}},\"comment\":{}}],[\"sizefrommanifest\",{\"_index\":359,\"name\":{\"414\":{}},\"comment\":{}}],[\"sizeloadedweights\",{\"_index\":360,\"name\":{\"415\":{}},\"comment\":{}}],[\"skeleton\",{\"_index\":404,\"name\":{\"518\":{}},\"comment\":{}}],[\"skipallowed\",{\"_index\":435,\"name\":{\"577\":{}},\"comment\":{}}],[\"skipframes\",{\"_index\":373,\"name\":{\"430\":{},\"442\":{},\"448\":{},\"453\":{},\"458\":{},\"464\":{},\"470\":{},\"475\":{},\"480\":{},\"486\":{},\"500\":{},\"507\":{},\"523\":{},\"531\":{},\"538\":{}},\"comment\":{}}],[\"skiptime\",{\"_index\":374,\"name\":{\"431\":{},\"443\":{},\"449\":{},\"454\":{},\"459\":{},\"465\":{},\"471\":{},\"476\":{},\"481\":{},\"487\":{},\"501\":{},\"508\":{},\"524\":{},\"532\":{},\"539\":{}},\"comment\":{}}],[\"sleep\",{\"_index\":33,\"name\":{\"33\":{}},\"comment\":{}}],[\"slice\",{\"_index\":202,\"name\":{\"219\":{}},\"comment\":{}}],[\"softmax\",{\"_index\":203,\"name\":{\"220\":{}},\"comment\":{}}],[\"softplus\",{\"_index\":204,\"name\":{\"221\":{}},\"comment\":{}}],[\"softwarekernels\",{\"_index\":433,\"name\":{\"575\":{}},\"comment\":{}}],[\"spacetobatchnd\",{\"_index\":205,\"name\":{\"222\":{}},\"comment\":{}}],[\"split\",{\"_index\":206,\"name\":{\"223\":{}},\"comment\":{}}],[\"sqrt\",{\"_index\":207,\"name\":{\"224\":{}},\"comment\":{}}],[\"square\",{\"_index\":208,\"name\":{\"225\":{}},\"comment\":{}}],[\"squareddifference\",{\"_index\":209,\"name\":{\"226\":{}},\"comment\":{}}],[\"squeeze\",{\"_index\":210,\"name\":{\"227\":{}},\"comment\":{}}],[\"stack\",{\"_index\":211,\"name\":{\"228\":{}},\"comment\":{}}],[\"start\",{\"_index\":348,\"name\":{\"398\":{}},\"comment\":{}}],[\"state\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"stats\",{\"_index\":64,\"name\":{\"75\":{}},\"comment\":{}}],[\"step\",{\"_index\":212,\"name\":{\"229\":{}},\"comment\":{}}],[\"stop\",{\"_index\":351,\"name\":{\"401\":{}},\"comment\":{}}],[\"stream\",{\"_index\":337,\"name\":{\"387\":{}},\"comment\":{}}],[\"stridedslice\",{\"_index\":213,\"name\":{\"230\":{}},\"comment\":{}}],[\"strides\",{\"_index\":76,\"name\":{\"92\":{}},\"comment\":{}}],[\"sub\",{\"_index\":214,\"name\":{\"231\":{}},\"comment\":{}}],[\"sum\",{\"_index\":215,\"name\":{\"232\":{}},\"comment\":{}}],[\"supported\",{\"_index\":304,\"name\":{\"341\":{},\"347\":{},\"355\":{}},\"comment\":{}}],[\"tan\",{\"_index\":216,\"name\":{\"233\":{}},\"comment\":{}}],[\"tanh\",{\"_index\":217,\"name\":{\"234\":{}},\"comment\":{}}],[\"technicolor\",{\"_index\":422,\"name\":{\"558\":{}},\"comment\":{}}],[\"tensor\",{\"_index\":8,\"name\":{\"8\":{},\"81\":{},\"252\":{},\"607\":{}},\"comment\":{}}],[\"tensor1d\",{\"_index\":231,\"name\":{\"253\":{}},\"comment\":{}}],[\"tensor2d\",{\"_index\":232,\"name\":{\"254\":{}},\"comment\":{}}],[\"tensor3d\",{\"_index\":233,\"name\":{\"255\":{}},\"comment\":{}}],[\"tensor4d\",{\"_index\":234,\"name\":{\"256\":{}},\"comment\":{}}],[\"tensorflow\",{\"_index\":301,\"name\":{\"335\":{}},\"comment\":{}}],[\"tensorlike\",{\"_index\":235,\"name\":{\"257\":{}},\"comment\":{}}],[\"tf\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"tfjs\",{\"_index\":298,\"name\":{\"330\":{}},\"comment\":{}}],[\"throwifdisposed\",{\"_index\":88,\"name\":{\"104\":{}},\"comment\":{}}],[\"tile\",{\"_index\":218,\"name\":{\"235\":{}},\"comment\":{}}],[\"timestamp\",{\"_index\":471,\"name\":{\"665\":{}},\"comment\":{}}],[\"tobool\",{\"_index\":219,\"name\":{\"236\":{}},\"comment\":{}}],[\"tofloat\",{\"_index\":220,\"name\":{\"237\":{}},\"comment\":{}}],[\"toint\",{\"_index\":221,\"name\":{\"238\":{}},\"comment\":{}}],[\"topk\",{\"_index\":222,\"name\":{\"239\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":91,\"name\":{\"107\":{}},\"comment\":{}}],[\"totalsizefrommanifest\",{\"_index\":61,\"name\":{\"68\":{}},\"comment\":{}}],[\"totalsizeloading\",{\"_index\":63,\"name\":{\"70\":{}},\"comment\":{}}],[\"totalsizeweights\",{\"_index\":62,\"name\":{\"69\":{}},\"comment\":{}}],[\"track\",{\"_index\":339,\"name\":{\"389\":{}},\"comment\":{}}],[\"transpose\",{\"_index\":225,\"name\":{\"243\":{}},\"comment\":{}}],[\"unique\",{\"_index\":226,\"name\":{\"244\":{}},\"comment\":{}}],[\"unsortedsegmentsum\",{\"_index\":227,\"name\":{\"248\":{}},\"comment\":{}}],[\"unstack\",{\"_index\":228,\"name\":{\"249\":{}},\"comment\":{}}],[\"updatebackend\",{\"_index\":319,\"name\":{\"366\":{}},\"comment\":{}}],[\"updatecpu\",{\"_index\":320,\"name\":{\"367\":{}},\"comment\":{}}],[\"url\",{\"_index\":54,\"name\":{\"61\":{},\"416\":{}},\"comment\":{}}],[\"usecurves\",{\"_index\":280,\"name\":{\"309\":{}},\"comment\":{}}],[\"usedepth\",{\"_index\":279,\"name\":{\"308\":{}},\"comment\":{}}],[\"validate\",{\"_index\":20,\"name\":{\"20\":{},\"80\":{}},\"comment\":{}}],[\"validatemodel\",{\"_index\":51,\"name\":{\"58\":{}},\"comment\":{}}],[\"validatemodels\",{\"_index\":431,\"name\":{\"572\":{}},\"comment\":{}}],[\"values\",{\"_index\":223,\"name\":{\"241\":{},\"246\":{}},\"comment\":{}}],[\"variable\",{\"_index\":92,\"name\":{\"108\":{}},\"comment\":{}}],[\"vendor\",{\"_index\":311,\"name\":{\"352\":{}},\"comment\":{}}],[\"version\",{\"_index\":2,\"name\":{\"2\":{},\"332\":{},\"337\":{},\"349\":{}},\"comment\":{}}],[\"video\",{\"_index\":34,\"name\":{\"34\":{}},\"comment\":{}}],[\"vintage\",{\"_index\":420,\"name\":{\"556\":{}},\"comment\":{}}],[\"warmup\",{\"_index\":30,\"name\":{\"30\":{},\"569\":{}},\"comment\":{}}],[\"warmupenum\",{\"_index\":368,\"name\":{\"425\":{}},\"comment\":{}}],[\"wasm\",{\"_index\":303,\"name\":{\"339\":{}},\"comment\":{}}],[\"wasmpath\",{\"_index\":426,\"name\":{\"565\":{}},\"comment\":{}}],[\"wasmplatformfetch\",{\"_index\":427,\"name\":{\"566\":{}},\"comment\":{}}],[\"webcam\",{\"_index\":26,\"name\":{\"26\":{},\"383\":{}},\"comment\":{}}],[\"webcamconfig\",{\"_index\":352,\"name\":{\"402\":{}},\"comment\":{}}],[\"webgl\",{\"_index\":308,\"name\":{\"345\":{}},\"comment\":{}}],[\"webgpu\",{\"_index\":312,\"name\":{\"353\":{}},\"comment\":{}}],[\"weights\",{\"_index\":242,\"name\":{\"265\":{}},\"comment\":{}}],[\"where\",{\"_index\":229,\"name\":{\"250\":{}},\"comment\":{}}],[\"width\",{\"_index\":345,\"name\":{\"395\":{},\"407\":{},\"543\":{},\"668\":{}},\"comment\":{}}],[\"worker\",{\"_index\":292,\"name\":{\"324\":{}},\"comment\":{}}],[\"zeroslike\",{\"_index\":230,\"name\":{\"251\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ 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 496e66f2..07a385b7 100644 --- a/typedoc/assets/style.css +++ b/typedoc/assets/style.css @@ -6,17 +6,36 @@ --light-color-background-warning: #e6e600; --light-color-icon-background: var(--light-color-background); --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); --light-color-text: #222; - --light-color-text-aside: #707070; - --light-color-link: #4da6ff; - --light-color-ts: #db1373; - --light-color-ts-interface: #139d2c; - --light-color-ts-enum: #9c891a; - --light-color-ts-class: #2484e5; + --light-color-text-aside: #6e6e6e; + --light-color-link: #1f70c2; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; --light-color-ts-function: #572be7; - --light-color-ts-namespace: #b111c9; - --light-color-ts-private: #707070; - --light-color-ts-variable: #4d68ff; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: var(--light-color-ts-variable); + --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --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-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; @@ -27,17 +46,36 @@ --dark-color-warning-text: #222; --dark-color-icon-background: var(--dark-color-background-secondary); --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; --dark-color-text: #f5f5f5; --dark-color-text-aside: #dddddd; --dark-color-link: #00aff4; - --dark-color-ts: #ff6492; - --dark-color-ts-interface: #6cff87; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); --dark-color-ts-enum: #f4d93e; - --dark-color-ts-class: #61b0ff; - --dark-color-ts-function: #9772ff; - --dark-color-ts-namespace: #e14dff; - --dark-color-ts-private: #e2e2e2; - --dark-color-ts-variable: #4d68ff; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: var(--dark-color-ts-variable); + --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --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-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; } @@ -50,17 +88,35 @@ --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --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); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -74,17 +130,35 @@ --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --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); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } @@ -105,17 +179,35 @@ body { --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --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); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -127,17 +219,35 @@ body { --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --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); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } @@ -156,6 +266,16 @@ h6 { line-height: 1.2; } +h1 > a, +h2 > a, +h3 > a, +h4 > a, +h5 > a, +h6 > a { + text-decoration: none; + color: var(--color-text); +} + h1 { font-size: 1.875rem; margin: 0.67rem 0; @@ -190,12 +310,6 @@ h6 { text-transform: uppercase; } -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - dl, menu, ol, @@ -208,26 +322,10 @@ dd { } .container { - max-width: 1600px; + max-width: 1700px; padding: 0 2rem; } -@media (min-width: 640px) { - .container { - padding: 0 4rem; - } -} -@media (min-width: 1200px) { - .container { - padding: 0 8rem; - } -} -@media (min-width: 1600px) { - .container { - padding: 0 12rem; - } -} - /* Footer */ .tsd-generator { border-top: 1px solid var(--color-accent); @@ -243,26 +341,9 @@ dd { } .container-main { - display: flex; - justify-content: space-between; - position: relative; margin: 0 auto; -} - -.col-4, -.col-8 { - box-sizing: border-box; - float: left; - padding: 2rem 1rem; -} - -.col-4 { - flex: 0 0 25%; -} -.col-8 { - flex: 1 0; - flex-wrap: wrap; - padding-left: 0; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); } @keyframes fade-in { @@ -305,22 +386,6 @@ dd { opacity: 0; } } -@keyframes shift-to-left { - from { - transform: translate(0, 0); - } - to { - transform: translate(-25%, 0); - } -} -@keyframes unshift-to-left { - from { - transform: translate(-25%, 0); - } - to { - transform: translate(0, 0); - } -} @keyframes pop-in-from-right { from { transform: translate(100%, 0); @@ -369,13 +434,29 @@ pre { } pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; padding: 10px; - border: 0.1em solid var(--color-accent); + border: 1px solid var(--color-accent); } pre code { padding: 0; font-size: 100%; } +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} blockquote { margin: 1em 0; @@ -391,13 +472,12 @@ blockquote { padding: 0 0 0 20px; margin: 0; } -.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, +.tsd-typography h4, .tsd-typography h5, .tsd-typography h6 { font-size: 1em; - margin: 0; } .tsd-typography h5, .tsd-typography h6 { @@ -408,90 +488,18 @@ blockquote { .tsd-typography ol { margin: 1em 0; } - -@media (max-width: 1024px) { - html .col-content { - float: none; - max-width: 100%; - width: 100%; - padding-top: 3rem; - } - html .col-menu { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - max-width: 25rem; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-menu > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu :is(header, footer, .col-content) { - animation: shift-to-left 0.4s; - } - - .to-has-menu .col-menu { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu :is(header, footer, .col-content) { - animation: unshift-to-left 0.4s; - } - - .from-has-menu .col-menu { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu :is(header, footer, .col-content) { - transform: translate(-25%, 0); - } - .has-menu .col-menu { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); } .tsd-breadcrumb { @@ -672,43 +680,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { -o-page-break-inside: avoid; page-break-inside: avoid; } -.tsd-index-panel a, -.tsd-index-panel a.tsd-parent-kind-module { - color: var(--color-ts); -} -.tsd-index-panel a.tsd-parent-kind-interface { - color: var(--color-ts-interface); -} -.tsd-index-panel a.tsd-parent-kind-enum { - color: var(--color-ts-enum); -} -.tsd-index-panel a.tsd-parent-kind-class { - color: var(--color-ts-class); -} -.tsd-index-panel a.tsd-kind-module { - color: var(--color-ts-namespace); -} -.tsd-index-panel a.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-index-panel a.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-index-panel a.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-index-panel a.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-index-panel a.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-index-panel a.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-index-panel a.tsd-is-private { - color: var(--color-ts-private); -} .tsd-flag { display: inline-block; @@ -723,7 +694,7 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-anchor { - position: absolute; + position: relative; top: -100px; } @@ -737,108 +708,64 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-bottom: 0; border-bottom: none; } -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind="Interface"] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind="Enum"] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind="Class"] { - color: var(--color-ts-class); -} -.tsd-member [data-tsd-kind="Private"] { - color: var(--color-ts-private); -} -.tsd-navigation a { - display: block; - margin: 0.4rem 0; - border-left: 2px solid transparent; +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.5rem); +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: inline-flex; + align-items: center; + padding: 0.25rem; color: var(--color-text); text-decoration: none; - transition: border-left-color 0.1s; + box-sizing: border-box; } -.tsd-navigation a:hover { +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { text-decoration: underline; } -.tsd-navigation ul { - margin: 0; +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; padding: 0; list-style: none; } -.tsd-navigation li { +.tsd-navigation li, +.tsd-page-navigation li { padding: 0; + max-width: 100%; } - -.tsd-navigation.primary .tsd-accordion-details > ul { - margin-top: 0.75rem; +.tsd-nested-navigation { + margin-left: 3rem; } -.tsd-navigation.primary a { - padding: 0.75rem 0.5rem; - margin: 0; +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; } -.tsd-navigation.primary ul li a { - margin-left: 0.5rem; -} -.tsd-navigation.primary ul li li a { +.tsd-small-nested-navigation { margin-left: 1.5rem; } -.tsd-navigation.primary ul li li li a { - margin-left: 2.5rem; -} -.tsd-navigation.primary ul li li li li a { - margin-left: 3.5rem; -} -.tsd-navigation.primary ul li li li li li a { - margin-left: 4.5rem; -} -.tsd-navigation.primary ul li li li li li li a { - margin-left: 5.5rem; -} -.tsd-navigation.primary li.current > a { - border-left: 0.15rem var(--color-text) solid; -} -.tsd-navigation.primary li.selected > a { - font-weight: bold; - border-left: 0.2rem var(--color-text) solid; -} -.tsd-navigation.primary ul li a:hover { - border-left: 0.2rem var(--color-text-aside) solid; -} -.tsd-navigation.primary li.globals + li > span, -.tsd-navigation.primary li.globals + li > a { - padding-top: 20px; +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; } -.tsd-navigation.secondary.tsd-navigation--toolbar-hide { - max-height: calc(100vh - 1rem); - top: 0.5rem; +.tsd-nested-navigation > li > a, +.tsd-nested-navigation > li > span { + width: calc(100% - 1.75rem - 0.5rem); } -.tsd-navigation.secondary > ul { - display: inline; - padding-right: 0.5rem; - transition: opacity 0.2s; -} -.tsd-navigation.secondary ul li a { - padding-left: 0; -} -.tsd-navigation.secondary ul li li a { - padding-left: 1.1rem; -} -.tsd-navigation.secondary ul li li li a { - padding-left: 2.2rem; -} -.tsd-navigation.secondary ul li li li li a { - padding-left: 3.3rem; -} -.tsd-navigation.secondary ul li li li li li a { - padding-left: 4.4rem; -} -.tsd-navigation.secondary ul li li li li li li a { - padding-left: 5.5rem; + +.tsd-page-navigation ul { + padding-left: 1.75rem; } #tsd-sidebar-links a { @@ -851,41 +778,40 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } a.tsd-index-link { - margin: 0.25rem 0; + padding: 0.25rem 0 !important; font-size: 1rem; line-height: 1.25rem; display: inline-flex; align-items: center; + color: var(--color-text); } -.tsd-accordion-summary > h1, -.tsd-accordion-summary > h2, -.tsd-accordion-summary > h3, -.tsd-accordion-summary > h4, -.tsd-accordion-summary > h5 { - display: inline-flex; - align-items: center; - vertical-align: middle; - margin-bottom: 0; +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -} -.tsd-accordion-summary { - display: block; + cursor: pointer; } +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} .tsd-accordion-summary > * { margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; } -.tsd-accordion-summary::-webkit-details-marker { - display: none; -} -.tsd-index-accordion .tsd-accordion-summary svg { - margin-right: 0.25rem; +.tsd-index-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -910,34 +836,6 @@ a.tsd-index-link { margin-right: 0.8rem; } -@media (min-width: 1025px) { - .col-content { - margin: 2rem auto; - } - - .menu-sticky-wrap { - position: sticky; - height: calc(100vh - 2rem); - top: 4rem; - right: 0; - padding: 0 1.5rem; - padding-top: 1rem; - margin-top: 3rem; - transition: 0.3s ease-in-out; - transition-property: top, padding-top, padding, height; - overflow-y: auto; - } - .col-menu { - border-left: 1px solid var(--color-accent); - } - .col-menu--hide { - top: 1rem; - } - .col-menu .tsd-navigation:not(:last-child) { - padding-bottom: 1.75rem; - } -} - .tsd-panel { margin-bottom: 2.5rem; } @@ -1018,8 +916,9 @@ a.tsd-index-link { box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } #tsd-search .results li { - padding: 0 10px; background-color: var(--color-background); + line-height: initial; + padding: 4px; } #tsd-search .results li:nth-child(even) { background-color: var(--color-background-secondary); @@ -1027,12 +926,15 @@ a.tsd-index-link { #tsd-search .results li.state { display: none; } -#tsd-search .results li.current, -#tsd-search .results li:hover { +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { background-color: var(--color-accent); } #tsd-search .results a { - display: block; + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; } #tsd-search .results a:before { top: 10px; @@ -1088,6 +990,11 @@ a.tsd-index-link { overflow-x: auto; } +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + .tsd-signature-symbol { color: var(--color-text-aside); font-weight: normal; @@ -1143,7 +1050,7 @@ ul.tsd-type-parameter-list h5 { } .tsd-page-toolbar { - position: fixed; + position: sticky; z-index: 1; top: 0; left: 0; @@ -1183,16 +1090,14 @@ ul.tsd-type-parameter-list h5 { padding: 12px 0; } -.tsd-page-toolbar--hide { - transform: translateY(-100%); -} - .tsd-widget { display: inline-block; overflow: hidden; opacity: 0.8; height: 40px; - transition: opacity 0.1s, background-color 0.2s; + transition: + opacity 0.1s, + background-color 0.2s; vertical-align: bottom; cursor: pointer; } @@ -1214,12 +1119,6 @@ ul.tsd-type-parameter-list h5 { .tsd-widget.menu { display: none; } -@media (max-width: 1024px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } -} input[type="checkbox"] + .tsd-widget:before { background-position: -120px 0; } @@ -1250,7 +1149,7 @@ img { } .deprecated { - text-decoration: line-through; + text-decoration: line-through !important; } .warning { @@ -1259,6 +1158,78 @@ img { background: var(--color-background-warning); } +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-literal { + color: var(--color-ts-type-literal); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + * { scrollbar-width: thin; scrollbar-color: var(--color-accent) var(--color-icon-background); @@ -1277,3 +1248,147 @@ img { border-radius: 999rem; border: 0.25rem solid var(--color-icon-background); } + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem 0; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/typedoc/classes/Env.html b/typedoc/classes/Env.html index 375e40fe..10463c21 100644 --- a/typedoc/classes/Env.html +++ b/typedoc/classes/Env.html @@ -1,379 +1,44 @@ -Env | @vladmandic/human - v3.1.2
-
- -
-
-
- -
-

Env class that holds detected capabilities

-
-
-

Hierarchy

-
    -
  • Env
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Accessors

-
-
-

Methods

-
-
-

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?

-
-
- -
initial: boolean
-

Has any work been performed so far

-
-
- -
kernels: string[] = []
-

List of supported kernels for current backend

-
-
- -
node: boolean
-

Running in NodeJS

-
-
- -
offscreen: undefined | boolean
-

Is offscreenCanvas supported?

-
-
- -
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

-
- -
    -
  • get Canvas(): undefined
  • -
  • -

    Returns undefined

  • -
  • set Canvas(val: undefined): void
  • -
  • -
    -

    Parameters

    -
      -
    • -
      val: undefined
    -

    Returns void

-
- -
    -
  • get Image(): undefined
  • -
  • -

    Returns undefined

  • -
  • set Image(val: undefined): void
  • -
  • -
    -

    Parameters

    -
      -
    • -
      val: undefined
    -

    Returns void

-
- -
    -
  • get ImageData(): undefined
  • -
  • -

    Returns undefined

  • -
  • set ImageData(val: undefined): void
  • -
  • -
    -

    Parameters

    -
      -
    • -
      val: undefined
    -

    Returns void

-
-

Methods

-
- -
    - -
  • -

    update backend information

    -
    -

    Returns Promise<void>

-
- -
    - -
  • -

    update cpu information

    -
    -

    Returns void

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

Env class that holds detected capabilities

+

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?

+
initial: boolean

Has any work been performed so far

+
kernels: string[] = []

List of supported kernels for current backend

+
node: boolean

Running in NodeJS

+
offscreen: undefined | boolean

Is offscreenCanvas supported?

+
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

  • update backend information

    +

    Returns Promise<void>

\ No newline at end of file diff --git a/typedoc/classes/GraphModel.html b/typedoc/classes/GraphModel.html index c35a155f..4967f6cf 100644 --- a/typedoc/classes/GraphModel.html +++ b/typedoc/classes/GraphModel.html @@ -1,361 +1,69 @@ -GraphModel | @vladmandic/human - v3.1.2
-
- -
-
-
-
- -

Class GraphModel<ModelURL>

-
-

A tf.GraphModel is a directed, acyclic graph built from a +GraphModel | @vladmandic/human - v3.2.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 the command line converter tool and loaded via tf.loadGraphModel.

- -

Doc

-
-

Type Parameters

-
    -
  • -

    ModelURL extends Url = string | io.IOHandler

-
-

Hierarchy

-
    -
  • GraphModel
-
-

Implements

-
    -
  • InferenceModel
-
-
-
- -
-
-

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.

          - -

          Doc

          -

          Returns void

        -
        - -
          - -
        • -

          Dispose intermediate tensors for model debugging mode (flag +

          Doc

        Type Parameters

        • ModelURL extends Url = string | io.IOHandler

        Implements

        • InferenceModel

        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 KEEP_INTERMEDIATE_TENSORS is true).

                - -

                Doc

                -

                Returns void

              -
              - -
                - -
              • -

                Executes inference for the model for given input tensors.

                - -

                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

                -
                -

                Parameters

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

                  tensor, tensor array or tensor map of the inputs for the +

                  Returns void

                  Doc

              • 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 +

                • Optional outputs: 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 Tensor<Rank> | Tensor<Rank>[]

              -
              - -
                - -
              • -

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

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

              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

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

                - -

                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

                -
                -

                Parameters

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

                  tensor, tensor array or tensor map of the inputs for the +

                  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 +

                  • Optional outputs: 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>[]>

              -
              - -
                - -
              • -

                Get intermediate tensors for model debugging mode (flag +

              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 KEEP_INTERMEDIATE_TENSORS is true).

                - -

                Doc

                -

                Returns NamedTensorsMap

              -
              - -
                - -
              • -

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

                Returns NamedTensorsMap

                Doc

              • 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.

                - -

                Doc

                -
                -

                Parameters

                -
                  -
                • -
                  artifacts: ModelArtifacts
                -

                Returns boolean

              -
              - -
                - -
              • -

                Execute the inference for the input tensors.

                - -

                See

                inputNodes

                -

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

                -

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

                -

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

                - -

                Returns

                Inference result tensors. If the model is converted and it +

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

                - -

                Doc

              -
              -

              Parameters

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

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

                -
              -

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

              -
              - -
                - -
              • -

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

                - -

                See

                inputNodes

                +

                See

                GraphModel.inputNodes

                You can also feed any intermediate nodes using the NamedTensorMap as the input type. For example, given the graph InputNode => Intermediate => OutputNode, @@ -368,33 +76,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].

                - -

                Returns

                A Promise of inference result tensors. If the model is converted +

                Doc

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

                - -

                Doc

                -
                -

                Parameters

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

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

                  -
                -

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

              -
              - -
                - -
              • -

                Save the configuration and/or weights of the GraphModel.

                +

                See

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

                +

                Doc

              • 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 @@ -411,72 +115,11 @@ as URL-like string shortcuts, such as 'localstorage://' and 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(); -
                - -

                Returns

                A Promise of SaveResult, which summarizes the result of + +

                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.

                  +

                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

                -
                -

                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.

                  -
                -

                Returns Promise<SaveResult>

              - -
              \ No newline at end of file +

              Doc

              \ No newline at end of file diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html index de7fe207..9e569961 100644 --- a/typedoc/classes/Human.html +++ b/typedoc/classes/Human.html @@ -1,138 +1,57 @@ -Human | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              - -
              -

              Human* library main class

              +Human | @vladmandic/human - v3.2.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
              • +
              • Configuration object definition: Config
              • +
              • Results object definition: Result
              • +
              • Possible inputs: Input
              - -

              Param

              Config

              - -

              Returns

              instance of Human

              -
              -
              -

              Hierarchy

              -
                -
              • Human
              -
              -
              -
              - -
              -
              -

              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

              +

              Param: userConfig

              Config

              +

              Returns

              instance of Human

              +

              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

              -
              -
              - -
              draw: draw = draw
              -

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

              +
              draw: draw = draw

              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 DrawOptions
              • +
              • options: are global settings for all draw operations, can be overriden for each draw method DrawOptions
              • face, body, hand, gesture, object, person: draws detected results as overlays on canvas
              -
              -
              - -
              env: Env = env
              -

              Object containing environment information used for diagnostics

              -
              -
              - -
              events: undefined | EventTarget
              -

              Container for events dispatched by Human +

              env: Env = env

              Object containing environment information used for diagnostics

              +
              events: undefined | EventTarget

              Container for events dispatched by Human Possible events:

              • create: triggered when Human object is instantiated
              • @@ -142,125 +61,34 @@ Possible events:

              • warmup: triggered when warmup is complete
              • error: triggered on some errors
              -
              -
              - -
              faceTriangulation: number[]
              -

              Reference face triangualtion array of 468 points, used for triangle references between points

              -
              -
              - -
              faceUVMap: [number, number][]
              -

              Refernce UV map of 468 values, used for 3D mapping of the face mesh

              -
              -
              - -
              match: match = match
              -

              Face Matching

              +
              faceTriangulation: number[]

              Reference face triangualtion array of 468 points, used for triangle references between points

              +
              faceUVMap: [number, number][]

              Refernce UV map of 468 values, used for 3D mapping of the face mesh

              +
              match: match = match

              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
              -
              -
              - -
              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

              +
              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

              • Can be accessed anytime after initial detection
              -
              -
              - -
              state: string
              -

              Current state of Human library

              +
              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'
              -
              -
              - -
              tf: any
              -

              Instance of TensorFlow/JS used by Human

              +
              tf: any

              Instance of TensorFlow/JS used by Human

              • Can be embedded or externally provided TFJS API
              -
              -
              - -
              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

              -
              - -
              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

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

                • 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
                -
                -
                -

                Parameters

                -
                -

                Returns Promise<number>

              Parameters

              Returns Promise<number>

              -
              - -
              -
              - -
                - -
              • -

                emit event

                -
                -
                -

                Parameters

                -
                  -
                • -
                  event: string
                -

                Returns void

              -
              - -
                - -
              • -

                Process input as return canvas and tensor

                -
                -
                -

                Parameters

                -
              • emit event

                +

                Parameters

                • event: string

                Returns void

              • Process input as return canvas and tensor

                +

                Parameters

                • input: Input

                  any input Input

                  +
                • getTensor: boolean = false

                  should image processing also return tensor or just canvas Returns object with tensor and canvas

                  -
                -

                Returns Promise<{
                    canvas: null | AnyCanvas;
                    tensor: null | Tensor4D;
                }>

              -
              - -
                - -
              • -

                Explicit backend initialization

                +

              Returns Promise<{
                  canvas: null | AnyCanvas;
                  tensor: null | Tensor4D;
              }>

              • 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
                -
                -

                Returns Promise<void>

              -
              - -
                - -
              • -

                Load method preloads all configured models on-demand

                +

                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
                -
                -
                -

                Parameters

                -
                -

                Returns Promise<void>

              -
              - -
                - -
              • -

                Runs interpolation using last known result and returns smoothened result +

                Parameters

                Returns Promise<void>

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

                - -

                Returns

                result - Result

                -
                -
                -

                Parameters

                -
                  -
                • -
                  result: Result = ...
                  -

                  Result optional use specific result set to run interpolation on

                  -
                -

                Returns Result

              -
              - -
                - -
              • -

                Utility wrapper for performance.now()

                -
                -

                Returns number

              -
              - -
                - -
              • -

                Run detect with tensorflow profiling

                +

                Parameters

                • result: Result = ...

                  Result optional use specific result set to run interpolation on

                  +

                Returns Result

                result - Result

                +
              • Utility wrapper for performance.now()

                +

                Returns number

              • 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
                -
                -
                -

                Parameters

                -
                  -
                • -
                  input: Input
                • -
                • -
                  Optional userConfig: Partial<Config>
                -

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

              -
              - -
                - -
              • -

                Reset configuration to default values

                -
                -

                Returns void

              -
              - -
                - -
              • -

                Segmentation method takes any input and returns RGBA tensor +

                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

                -
              -
              - -
                - -
              • -

                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

                -
                  -
                • -
                  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

                  -
                -

                Returns Promise<void>

              -
              - -
                - -
              • -

                Warmup method pre-initializes all configured models for faster inference

                +
              • Optional userConfig: 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

                • 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

                  +

                Returns Promise<void>

              • Warmup method pre-initializes all configured models for faster inference

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

                Returns

                result - Result

                -
                -
                -

                Parameters

                -
                -

                Returns Promise<undefined | Result>

              - -
              \ No newline at end of file +

              Parameters

              Returns Promise<undefined | Result>

              result - Result

              +
              \ No newline at end of file diff --git a/typedoc/classes/Tensor-1.html b/typedoc/classes/Tensor-1.html index 01cdaa7e..a9c94d3b 100644 --- a/typedoc/classes/Tensor-1.html +++ b/typedoc/classes/Tensor-1.html @@ -1,22 +1,4 @@ -Tensor | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Class Tensor<R>

              -
              -

              A tf.Tensor object represents an immutable, multidimensional array of +Tensor | @vladmandic/human - v3.2.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 @@ -24,1306 +6,202 @@ 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

              -
              -
              -

              Hierarchy

              -
                -
              • Tensor
              -
              -

              Implements

              -
                -
              • TensorInfo
              -
              -
              -
              - -
              -
              -

              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 +

              Doc

              Type Parameters

              Implements

              • TensorInfo

              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

                -
                  -
                • -
                  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
                • 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 asynchronously.

                - -

                Doc

                -

                Returns Promise<ArrayMap[R]>

              -
              - -
                - -
              • -

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

                Returns Promise<ArrayMap[R]>

                Doc

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

                - -

                Doc

                -

                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

                -
                -

                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

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  filterSize: number | [number, number]
                • -
                • -
                  strides: number | [number, number]
                • -
                • -
                  pad: number | "valid" | "same" | ExplicitPadding
                • -
                • -
                  Optional dimRoundingMode: "round" | "floor" | "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.

                - -

                Doc

                -
                -

                Type Parameters

                -
                  -
                • -

                  D extends keyof DataTypeMap = "float32"

                -

                Returns Promise<TensorBuffer<R, D>>

              -
              - -
                - -
              • -

                Returns a tf.TensorBuffer that holds the underlying data.

                - -

                Doc

                -
                -

                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.

                - -

                Doc

                -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  tensors: T | (TensorLike | T)[]
                • -
                • -
                  Optional axis: number
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  filter: Tensor3D | TensorLike3D
                • -
                • -
                  stride: number
                • -
                • -
                  pad: number | "valid" | "same" | ExplicitPadding
                • -
                • -
                  Optional dataFormat: "NWC" | "NCW"
                • -
                • -
                  Optional dilation: number
                • -
                • -
                  Optional dimRoundingMode: "round" | "floor" | "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: "round" | "floor" | "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: "round" | "floor" | "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]

                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

                • tensors: T | (TensorLike | T)[]
                • Optional axis: number

                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 promise of TypedArray that resolves when the computation has finished.

                - -

                Doc

                -
                -

                Type Parameters

                -
                  -
                • -

                  D extends keyof DataTypeMap = NumericDataType

                -

                Returns Promise<DataTypeMap[D]>

              -
              - -
                - -
              • -

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

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns Promise<DataTypeMap[D]>

                Doc

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

                - -

                Doc

                -
                -

                Type Parameters

                -
                  -
                • -

                  D extends keyof DataTypeMap = NumericDataType

                -

                Returns DataTypeMap[D]

              -
              - -
                - -
              • -

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

                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() 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.

                - -

                Returns

                For WebGL backend, a GPUData contains the new texture and +

                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, @@ -1331,2235 +209,10 @@ parameter, so can not use a user-defined size to create the buffer.

                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

              -
              -

              Parameters

              -
                -
              • -
                Optional options: DataToGPUWebGLOption
              -

              Returns GPUData

              -
              - -
                - -
              • -
                -

                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: "round" | "floor" | "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.

                - -

                Doc

                -

                Returns void

              -
              - -
              -
              - -
              -
              - -
              -
              - -
                - -
              • -
                -

                Type 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

                -
                -

                Returns Tensor1D

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              - -
              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  this: T
                • -
                • -
                  indices: Tensor<Rank> | TensorLike
                • -
                • -
                  Optional axis: number
                • -
                • -
                  Optional batchDims: number
                -

                Returns T

              -
              - -
              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                -

                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

                -
                  -
                • -
                  alpha: number
                -

                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

                -
                -

                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: "round" | "floor" | "ceil"
                -

                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

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

                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>

              -
              - -
              -
              - -
                - -
              • -
                -

                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: "round" | "floor" | "ceil"
                -

                Returns T

              -
              - -
              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                -

                Returns T

              -
              - -
                - -
              • -

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

                - -

                Doc

                -
                -

                Parameters

                -
                  -
                • -
                  Optional verbose: boolean
                  -

                  Whether to print verbose information about the tensor, + +

                  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

                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

                • 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

              -
              - -
                - -
              • -
                -

                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

                -
                  -
                • -
                  x: T
                -

                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

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -

                Returns T

              -
              - -
                - -
              • -
                -

                Type Parameters

                -
                -
                -

                Parameters

                -
                  -
                • -
                  depthwiseFilter: Tensor4D | TensorLike4D
                • -
                • -
                  pointwiseFilter: Tensor4D | TensorLike
                • -
                • -
                  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

                -
                  -
                • -
                  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.

                - -

                Doc

                -
                -

                Parameters

                -
                  -
                • -
                  Optional verbose: boolean
                -

                Returns string

              -
              - -
                - -
              • -
                -

                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

                -
                  -
                • -
                  this: T
                -

                Returns T

              -
              -
              \ No newline at end of file +

              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

                • x: T

                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

                • 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

                • this: T

                Returns T

              \ No newline at end of file diff --git a/typedoc/classes/WebCam.html b/typedoc/classes/WebCam.html index c4371878..0c9a53c0 100644 --- a/typedoc/classes/WebCam.html +++ b/typedoc/classes/WebCam.html @@ -1,280 +1,35 @@ -WebCam | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              - -
              -

              Hierarchy

              -
                -
              • WebCam
              -
              -
              -
              - -
              -
              -

              Constructors

              -
              -
              -

              Properties

              -
              -
              -

              Accessors

              -
              -
              -

              Methods

              -
              -
              -

              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

                -
                -

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

              -
              - -
              -
              - -
                - -
              • -

                play webcam video method

                -
                -

                Returns Promise<void>

              -
              - -
                - -
              • -

                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 +WebCam | @vladmandic/human - v3.2.0

              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

                +

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

              • 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 diff --git a/typedoc/classes/models.Models.html b/typedoc/classes/models.Models.html index 1fd6cfd3..9012490e 100644 --- a/typedoc/classes/models.Models.html +++ b/typedoc/classes/models.Models.html @@ -1,23 +1,4 @@ -Models | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              - -
              -

              Models class used by Human

              +Models | @vladmandic/human - v3.2.0

              Models class used by Human

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

              Hierarchy

              -
                -
              • Models
              -
              -
              -
              - -
              -
              -

              Constructors

              -
              -
              -

              Properties

              -
              -
              -

              Methods

              -
              -
              -

              Constructors

              -
              - -
              -
              -

              Properties

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

              Methods

              -
              - -
                - -
              • -

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

              -
              - -
                - -
              • -
                -

                Parameters

                -
                  -
                • -
                  Optional instance: Human
                -

                Returns Promise<void>

              -
              - -
              -
              - -
              -
              - -
              -
              - -
                - -
              • -

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

              -
              -
              \ No newline at end of file +

              Constructors

              Properties

              Methods

              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 diff --git a/typedoc/enums/Rank.html b/typedoc/enums/Rank.html index 8b34dc9b..97dae6da 100644 --- a/typedoc/enums/Rank.html +++ b/typedoc/enums/Rank.html @@ -1,105 +1,8 @@ -Rank | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Enumeration Rank

              -
              -
              -
              - -
              -
              -

              Enumeration Members

              -
              R0 -R1 -R2 -R3 -R4 -R5 -R6 -
              -
              -

              Enumeration Members

              -
              - -
              R0: "R0"
              -
              - -
              R1: "R1"
              -
              - -
              R2: "R2"
              -
              - -
              R3: "R3"
              -
              - -
              R4: "R4"
              -
              - -
              R5: "R5"
              -
              - -
              R6: "R6"
              -
              -
              \ No newline at end of file +Rank | @vladmandic/human - v3.2.0

              Enumeration Rank

              Enumeration Members

              R0 +R1 +R2 +R3 +R4 +R5 +R6 +

              Enumeration Members

              R0: "R0"
              R1: "R1"
              R2: "R2"
              R3: "R3"
              R4: "R4"
              R5: "R5"
              R6: "R6"
              \ No newline at end of file diff --git a/typedoc/functions/draw.all.html b/typedoc/functions/draw.all.html index 954dc895..32184279 100644 --- a/typedoc/functions/draw.all.html +++ b/typedoc/functions/draw.all.html @@ -1,71 +1,2 @@ -all | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function all

              -
              -
                - -
              • -

                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.2.0
              • 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 diff --git a/typedoc/functions/draw.body.html b/typedoc/functions/draw.body.html index 2af6eb48..ad200a8f 100644 --- a/typedoc/functions/draw.body.html +++ b/typedoc/functions/draw.body.html @@ -1,71 +1,2 @@ -body | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function body

              -
              -
              -
              -
              \ No newline at end of file +body | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.canvas.html b/typedoc/functions/draw.canvas.html index 8da7cea5..10855f10 100644 --- a/typedoc/functions/draw.canvas.html +++ b/typedoc/functions/draw.canvas.html @@ -1,69 +1,2 @@ -canvas | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function canvas

              -
              -
              -
              -
              \ No newline at end of file +canvas | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.face.html b/typedoc/functions/draw.face.html index d2b3be91..7bab6302 100644 --- a/typedoc/functions/draw.face.html +++ b/typedoc/functions/draw.face.html @@ -1,71 +1,2 @@ -face | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function face

              -
              -
              -
              -
              \ No newline at end of file +face | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.gesture.html b/typedoc/functions/draw.gesture.html index d2d59b7c..1f93639e 100644 --- a/typedoc/functions/draw.gesture.html +++ b/typedoc/functions/draw.gesture.html @@ -1,71 +1,2 @@ -gesture | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function gesture

              -
              -
              -
              -
              \ No newline at end of file +gesture | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.hand.html b/typedoc/functions/draw.hand.html index 5f11afff..966b238a 100644 --- a/typedoc/functions/draw.hand.html +++ b/typedoc/functions/draw.hand.html @@ -1,71 +1,2 @@ -hand | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function hand

              -
              -
              -
              -
              \ No newline at end of file +hand | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.init.html b/typedoc/functions/draw.init.html index 3ea7f2d1..332254fa 100644 --- a/typedoc/functions/draw.init.html +++ b/typedoc/functions/draw.init.html @@ -1,62 +1,2 @@ -init | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function init

              -
              -
                - -
              • -

                sets default label templates for face/body/hand/object/gestures

                -
                -

                Returns void

              -
              -
              \ No newline at end of file +init | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.object.html b/typedoc/functions/draw.object.html index 2a1c6561..1260a263 100644 --- a/typedoc/functions/draw.object.html +++ b/typedoc/functions/draw.object.html @@ -1,71 +1,2 @@ -object | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function object

              -
              -
              -
              -
              \ No newline at end of file +object | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/draw.person.html b/typedoc/functions/draw.person.html index ada92e49..559cea19 100644 --- a/typedoc/functions/draw.person.html +++ b/typedoc/functions/draw.person.html @@ -1,71 +1,2 @@ -person | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function person

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

                +

                Parameters

                Returns void

              \ No newline at end of file diff --git a/typedoc/functions/empty.html b/typedoc/functions/empty.html index 957b5008..727d3451 100644 --- a/typedoc/functions/empty.html +++ b/typedoc/functions/empty.html @@ -1,131 +1 @@ -empty | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +empty | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/functions/match.distance.html b/typedoc/functions/match.distance.html index d305daa7..4606b73b 100644 --- a/typedoc/functions/match.distance.html +++ b/typedoc/functions/match.distance.html @@ -1,74 +1,9 @@ -distance | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function distance

              -
              -
              \ No newline at end of file diff --git a/typedoc/functions/match.find.html b/typedoc/functions/match.find.html index 3d52dc13..076f55a3 100644 --- a/typedoc/functions/match.find.html +++ b/typedoc/functions/match.find.html @@ -1,85 +1,11 @@ -find | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              - -
              -
                - -
              • -

                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 +find | @vladmandic/human - v3.2.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 Returns

                      • index index array index where best match was found or -1 if no matches
                      • 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
              \ No newline at end of file diff --git a/typedoc/functions/match.similarity.html b/typedoc/functions/match.similarity.html index e575ef1c..1cbd094e 100644 --- a/typedoc/functions/match.similarity.html +++ b/typedoc/functions/match.similarity.html @@ -1,37 +1,5 @@ -similarity | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function similarity

              -
              -
                - -
              • -

                Calculates normalized similarity between two face descriptors based on their distance

                -
                -
                -

                Parameters

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

                  calculation options

                  +similarity | @vladmandic/human - v3.2.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 Euclidean distance if order is 2 (default), Minkowski distance algorithm of nth order if order is higher than 2
                      • @@ -42,37 +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

              \ No newline at end of file diff --git a/typedoc/functions/models.validateModel.html b/typedoc/functions/models.validateModel.html index 91f97804..6a24f05f 100644 --- a/typedoc/functions/models.validateModel.html +++ b/typedoc/functions/models.validateModel.html @@ -1,63 +1 @@ -validateModel | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Function validateModel

              -
              -
              -
              -
              \ No newline at end of file +validateModel | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/index.html b/typedoc/index.html index 96caf2ca..893455cd 100644 --- a/typedoc/index.html +++ b/typedoc/index.html @@ -1,230 +1,82 @@ -@vladmandic/human - v3.1.2
              -
              - -
              -
              - -
              -
              \ No newline at end of file +@vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index 365da61b..28439737 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,125 +1,16 @@ -BodyConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface BodyConfig

              -
              -

              Configures all body detection specific options

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              skipFrames: number
              -

              how many max frames to go without re-running model if cached results are acceptable +BodyConfig | @vladmandic/human - v3.2.0

              Interface BodyConfig

              Configures all body detection specific options

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

              Hierarchy

              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

              +
              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/BodyKeypoint.html b/typedoc/interfaces/BodyKeypoint.html index 676c1167..8651bfbd 100644 --- a/typedoc/interfaces/BodyKeypoint.html +++ b/typedoc/interfaces/BodyKeypoint.html @@ -1,108 +1,12 @@ -BodyKeypoint | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface BodyKeypoint

              -
              -

              Body Result keypoints

              -
              -
              -

              Hierarchy

              -
                -
              • BodyKeypoint
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +BodyKeypoint | @vladmandic/human - v3.2.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

              +

              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 8d469ef2..13e865b8 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,117 +1,14 @@ -BodyResult | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface BodyResult

              -
              -

              Body results

              -
              -
              -

              Hierarchy

              -
                -
              • BodyResult
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +BodyResult | @vladmandic/human - v3.2.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

              +
              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 e6587f95..92c85e70 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,282 +1,74 @@ -Config | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface Config

              -
              -

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

              Interface Config

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

              -
              -
              -

              Hierarchy

              -
                -
              • Config
              -
              -
              -
              - -
              -
              -

              Properties

              -
              - -
              async: boolean
              -

              Perform model loading and inference concurrently or sequentially

              +
              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: boolean

              Perform model loading and inference concurrently or sequentially

              default: true

              -
              -
              - -
              backend: BackendEnum
              -

              Backend used for TFJS operations +

              backend: BackendEnum

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

              • Browser: cpu, wasm, webgl, humangl, webgpu
              • NodeJS: cpu, wasm, tensorflow default: webgl for browser and tensorflow for nodejs
              -
              -
              - -
              body: Partial<BodyConfig>
              -

              Body config BodyConfig

              -
              -
              - -
              cacheModels: boolean
              -

              Cache models in IndexDB on first sucessfull load +

              body: Partial<BodyConfig>

              Body config BodyConfig

              +
              cacheModels: boolean

              Cache models in IndexDB on first sucessfull load default: true if indexdb is available (browsers), false if its not (nodejs)

              -
              -
              - -
              cacheSensitivity: number
              -

              Cache sensitivity

              +
              cacheSensitivity: number

              Cache sensitivity

              • values 0..1 where 0.01 means reset cache if input changed more than 1%
              • set to 0 to disable caching

              default: 0.7

              -
              -
              - -
              deallocate: boolean
              -

              Perform immediate garbage collection on deallocated tensors instead of caching them

              -
              -
              - -
              debug: boolean
              -

              Print debug statements to console

              +
              deallocate: boolean

              Perform immediate garbage collection on deallocated tensors instead of caching them

              +
              debug: boolean

              Print debug statements to console

              default: true

              -
              -
              - -
              face: Partial<FaceConfig>
              -

              Face config FaceConfig

              -
              -
              - -
              filter: Partial<FilterConfig>
              -

              Filter config FilterConfig

              -
              -
              - -
              flags: Record<string, unknown>
              -

              Explicit flags passed to initialize TFJS

              -
              -
              - -
              gesture: Partial<GestureConfig>
              -

              Gesture config GestureConfig

              -
              -
              - -
              hand: Partial<HandConfig>
              -

              Hand config HandConfig

              -
              -
              - -
              modelBasePath: string
              -

              Base model path (typically starting with file://, http:// or https://) for all models

              +
              face: Partial<FaceConfig>

              Face config FaceConfig

              +
              filter: Partial<FilterConfig>

              Filter config FilterConfig

              +
              flags: Record<string, unknown>

              Explicit flags passed to initialize TFJS

              +
              gesture: Partial<GestureConfig>

              Gesture config GestureConfig

              +
              hand: Partial<HandConfig>

              Hand config HandConfig

              +
              modelBasePath: string

              Base model path (typically starting with file://, http:// or https://) for all models

              • individual modelPath values are relative to this path

              default: ../models/ for browsers and file://models/ for nodejs

              -
              -
              - -
              object: Partial<ObjectConfig>
              -

              Object config ObjectConfig

              -
              -
              - -
              segmentation: Partial<SegmentationConfig>
              -

              Segmentation config SegmentationConfig

              -
              -
              - -
              skipAllowed: boolean
              -

              Internal Variable

              -
              -
              - -
              softwareKernels: boolean
              -

              Software Kernels +

              object: Partial<ObjectConfig>

              Object config ObjectConfig

              +
              segmentation: Partial<SegmentationConfig>

              Segmentation config SegmentationConfig

              +
              skipAllowed: boolean

              Internal Variable

              +
              softwareKernels: boolean

              Software Kernels Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend

              -
              -
              - -
              validateModels: boolean
              -

              Validate kernel ops used in model during model load +

              validateModels: boolean

              Validate kernel ops used in model during model load default: true any errors will be printed on console but will be treated as non-fatal

              -
              -
              - -
              warmup: WarmupEnum
              -

              What to use for human.warmup()

              +
              warmup: WarmupEnum

              What to use for human.warmup()

              • warmup pre-initializes all models for faster inference but can take significant time on startup
              • used by webgl, humangl and webgpu backends

              default: full

              -
              -
              - -
              wasmPath: string
              -

              Path to *.wasm files if backend is set to wasm

              +
              wasmPath: string

              Path to *.wasm files if backend is set to wasm

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

              -
              -
              - -
              wasmPlatformFetch: boolean
              -

              Force WASM loader to use platform fetch

              +
              wasmPlatformFetch: boolean

              Force WASM loader to use platform fetch

              default: false

              -
              -
              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/DrawOptions.html b/typedoc/interfaces/DrawOptions.html index 72bac76e..6fc64beb 100644 --- a/typedoc/interfaces/DrawOptions.html +++ b/typedoc/interfaces/DrawOptions.html @@ -1,300 +1,57 @@ -DrawOptions | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface DrawOptions

              -
              -

              Draw Options

              +DrawOptions | @vladmandic/human - v3.2.0

              Interface DrawOptions

              Draw Options

              • Accessed via human.draw.options or provided per each draw method as the drawOptions optional parameter
              -
              -
              -

              Hierarchy

              -
                -
              • DrawOptions
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              drawAttention: boolean
              -

              should face attention keypoints be highlighted

              -
              -
              - -
              drawBoxes: boolean
              -

              should draw boxes around detection results?

              -
              -
              - -
              drawGaze: boolean
              -

              should draw gaze arrows?

              -
              -
              - -
              drawGestures: boolean
              -

              should detected gestures be drawn?

              -
              -
              - -
              drawLabels: boolean
              -

              should labels be drawn?

              -
              -
              - -
              drawPoints: boolean
              -

              should points be drawn?

              -
              -
              - -
              drawPolygons: boolean
              -

              should draw polygons from detection points?

              -
              -
              - -
              faceLabels: string
              -

              string template for face labels

              -
              -
              - -
              fillPolygons: boolean
              -

              should fill polygons?

              -
              -
              - -
              fingerLabels: string
              -

              string template for hand labels

              -
              -
              - -
              font: string
              -

              label font

              -
              -
              - -
              gestureLabels: string
              -

              string template for gesture labels

              -
              -
              - -
              handLabels: string
              -

              string template for hand labels

              -
              -
              - -
              labelColor: string
              -

              label color

              -
              -
              - -
              lineHeight: number
              -

              line spacing between labels

              -
              -
              - -
              lineWidth: number
              -

              line width for drawn lines

              -
              -
              - -
              objectLabels: string
              -

              string template for object labels

              -
              -
              - -
              pointSize: number
              -

              size of drawn points

              -
              -
              - -
              roundRect: number
              -

              draw rounded boxes by n pixels

              -
              -
              - -
              shadowColor: string
              -

              label shadow color

              -
              -
              - -
              useCurves: boolean
              -

              should lines be curved?

              -
              -
              - -
              useDepth: boolean
              -

              use z-coordinate when available

              -
              -
              -
              \ No newline at end of file +
              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

              +
              bodyLabels: string

              string template for body labels

              +
              bodyPartLabels: string

              string template for body part labels

              +
              color: string

              draw line color

              +
              drawAttention: boolean

              should face attention keypoints be highlighted

              +
              drawBoxes: boolean

              should draw boxes around detection results?

              +
              drawGaze: boolean

              should draw gaze arrows?

              +
              drawGestures: boolean

              should detected gestures be drawn?

              +
              drawLabels: boolean

              should labels be drawn?

              +
              drawPoints: boolean

              should points be drawn?

              +
              drawPolygons: boolean

              should draw polygons from detection points?

              +
              faceLabels: string

              string template for face labels

              +
              fillPolygons: boolean

              should fill polygons?

              +
              fingerLabels: string

              string template for hand labels

              +
              font: string

              label font

              +
              gestureLabels: string

              string template for gesture labels

              +
              handLabels: string

              string template for hand labels

              +
              labelColor: string

              label color

              +
              lineHeight: number

              line spacing between labels

              +
              lineWidth: number

              line width for drawn lines

              +
              objectLabels: string

              string template for object labels

              +
              pointSize: number

              size of drawn points

              +
              roundRect: number

              draw rounded boxes by n pixels

              +
              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 2590c8a3..47878f32 100644 --- a/typedoc/interfaces/FaceAntiSpoofConfig.html +++ b/typedoc/interfaces/FaceAntiSpoofConfig.html @@ -1,107 +1,12 @@ -FaceAntiSpoofConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceAntiSpoofConfig

              -
              -

              Anti-spoofing part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +FaceAntiSpoofConfig | @vladmandic/human - v3.2.0

              Interface FaceAntiSpoofConfig

              Anti-spoofing part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceAttentionConfig.html b/typedoc/interfaces/FaceAttentionConfig.html index 8485a6f1..53a39f44 100644 --- a/typedoc/interfaces/FaceAttentionConfig.html +++ b/typedoc/interfaces/FaceAttentionConfig.html @@ -1,107 +1,12 @@ -FaceAttentionConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceAttentionConfig

              -
              -

              Attention part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +FaceAttentionConfig | @vladmandic/human - v3.2.0

              Interface FaceAttentionConfig

              Attention part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceConfig.html b/typedoc/interfaces/FaceConfig.html index 90128516..1a970499 100644 --- a/typedoc/interfaces/FaceConfig.html +++ b/typedoc/interfaces/FaceConfig.html @@ -1,170 +1,21 @@ -FaceConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceConfig

              -
              -

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

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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 +FaceConfig | @vladmandic/human - v3.2.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

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceDescriptionConfig.html b/typedoc/interfaces/FaceDescriptionConfig.html index 217e80dd..dcf38738 100644 --- a/typedoc/interfaces/FaceDescriptionConfig.html +++ b/typedoc/interfaces/FaceDescriptionConfig.html @@ -1,119 +1,17 @@ -FaceDescriptionConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceDescriptionConfig

              -
              -

              Description or face embedding part of face configuration

              +FaceDescriptionConfig | @vladmandic/human - v3.2.0

              Interface FaceDescriptionConfig

              Description or face embedding part of face configuration

              • also used by age and gender detection
              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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 +

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceDetectorConfig.html b/typedoc/interfaces/FaceDetectorConfig.html index f9ad333a..3976eb8a 100644 --- a/typedoc/interfaces/FaceDetectorConfig.html +++ b/typedoc/interfaces/FaceDetectorConfig.html @@ -1,172 +1,28 @@ -FaceDetectorConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceDetectorConfig

              -
              -

              Detector part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              minConfidence: number
              -

              minimum confidence for a detected face before results are discarded

              -
              -
              - -
              minSize: number
              -

              minimum size in pixels of a detected face box before resutls are discared

              -
              -
              - -
              modelPath: string
              -

              path to model json file (relative to modelBasePath

              -
              -
              - -
              return: boolean
              -

              should face detection return processed and cropped face tensor that can with an external model for addtional processing? +FaceDetectorConfig | @vladmandic/human - v3.2.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;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              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

              +
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              +
              minSize: number

              minimum size in pixels of a detected face box before resutls are discared

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              return: boolean

              should face detection return processed and cropped face tensor that can with an external model for addtional processing? if enabled it must be manually deallocated to avoid memory leak

              -
              -
              - -
              rotation: boolean
              -

              is face rotation correction performed after detecting face? +

              rotation: boolean

              is face rotation correction performed after detecting face? used to correctly analyze faces under high angles

              -
              -
              - -
              skipFrames: number
              -

              how many max frames to go without re-running model if cached results are acceptable +

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceEmotionConfig.html b/typedoc/interfaces/FaceEmotionConfig.html index 23fda539..a4949780 100644 --- a/typedoc/interfaces/FaceEmotionConfig.html +++ b/typedoc/interfaces/FaceEmotionConfig.html @@ -1,116 +1,14 @@ -FaceEmotionConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceEmotionConfig

              -
              -

              Emotion part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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 +FaceEmotionConfig | @vladmandic/human - v3.2.0

              Interface FaceEmotionConfig

              Emotion part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceGearConfig.html b/typedoc/interfaces/FaceGearConfig.html index 7e0b8a57..5c0f1758 100644 --- a/typedoc/interfaces/FaceGearConfig.html +++ b/typedoc/interfaces/FaceGearConfig.html @@ -1,116 +1,14 @@ -FaceGearConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceGearConfig

              -
              -

              Gear part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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 +FaceGearConfig | @vladmandic/human - v3.2.0

              Interface FaceGearConfig

              Gear part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceIrisConfig.html b/typedoc/interfaces/FaceIrisConfig.html index fc4449b8..b2882d2f 100644 --- a/typedoc/interfaces/FaceIrisConfig.html +++ b/typedoc/interfaces/FaceIrisConfig.html @@ -1,107 +1,12 @@ -FaceIrisConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceIrisConfig

              -
              -

              Iris part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +FaceIrisConfig | @vladmandic/human - v3.2.0

              Interface FaceIrisConfig

              Iris part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceLivenessConfig.html b/typedoc/interfaces/FaceLivenessConfig.html index 06d9e6f6..dc243e37 100644 --- a/typedoc/interfaces/FaceLivenessConfig.html +++ b/typedoc/interfaces/FaceLivenessConfig.html @@ -1,107 +1,12 @@ -FaceLivenessConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceLivenessConfig

              -
              -

              Liveness part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +FaceLivenessConfig | @vladmandic/human - v3.2.0

              Interface FaceLivenessConfig

              Liveness part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceMeshConfig.html b/typedoc/interfaces/FaceMeshConfig.html index 9ec23a60..00fbcd9a 100644 --- a/typedoc/interfaces/FaceMeshConfig.html +++ b/typedoc/interfaces/FaceMeshConfig.html @@ -1,116 +1,14 @@ -FaceMeshConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceMeshConfig

              -
              -

              Mesh part of face configuration

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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 +FaceMeshConfig | @vladmandic/human - v3.2.0

              Interface FaceMeshConfig

              Mesh part of face configuration

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceResult.html b/typedoc/interfaces/FaceResult.html index 6105d494..963159d6 100644 --- a/typedoc/interfaces/FaceResult.html +++ b/typedoc/interfaces/FaceResult.html @@ -1,256 +1,48 @@ -FaceResult | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FaceResult

              -
              -

              Face results

              +FaceResult | @vladmandic/human - v3.2.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
              -
              -
              -

              Hierarchy

              -
                -
              • FaceResult
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              faceScore: number
              -

              mesh score

              -
              -
              - -
              gender?: Gender
              -

              detected gender

              -
              -
              - -
              genderScore?: number
              -

              gender detection score

              -
              -
              - -
              id: number
              -

              face id

              -
              -
              - -
              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

              -
              -
              - -
              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 +
              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?: 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

              +
              id: number

              face id

              +
              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

              +
              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 diff --git a/typedoc/interfaces/FilterConfig.html b/typedoc/interfaces/FilterConfig.html index c656e59a..e3291e14 100644 --- a/typedoc/interfaces/FilterConfig.html +++ b/typedoc/interfaces/FilterConfig.html @@ -1,260 +1,59 @@ -FilterConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface FilterConfig

              -
              -

              Run input through image filters before inference

              +FilterConfig | @vladmandic/human - v3.2.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
              -
              -
              -

              Hierarchy

              -
                -
              • FilterConfig
              -
              -
              -
              - -
              -
              -

              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)

              -
              -
              - -
              enabled: boolean
              -

              are image filters enabled?

              -
              -
              - -
              equalization: boolean
              -

              perform image histogram equalization

              +
              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

              +
              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)

              +
              enabled: boolean

              are image filters enabled?

              +
              equalization: boolean

              perform image histogram equalization

              • equalization is performed on input as a whole and detected face before its passed for further analysis
              -
              -
              - -
              flip: boolean
              -

              flip input as mirror image

              -
              -
              - -
              height: number
              -

              resize input height

              +
              flip: boolean

              flip input as mirror image

              +
              height: number

              resize input height

              • if both width and height are set to 0, there is no resizing
              • if just one is set, second one is scaled automatically
              • if both are set, values are used as-is
              -
              -
              - -
              hue: number
              -

              range: 0 (no change) to 360 (hue rotation in degrees)

              -
              -
              - -
              kodachrome: boolean
              -

              image kodachrome colors

              -
              -
              - -
              negative: boolean
              -

              image negative

              -
              -
              - -
              pixelate: number
              -

              range: 0 (no pixelate) to N (number of pixels to pixelate)

              -
              -
              - -
              polaroid: boolean
              -

              image polaroid camera effect

              -
              -
              - -
              return: boolean
              -

              return processed canvas imagedata in result

              -
              -
              - -
              saturation: number
              -

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

              -
              -
              - -
              sepia: boolean
              -

              image sepia colors

              -
              -
              - -
              sharpness: number
              -

              range: 0 (no sharpening) to 1 (maximum sharpening)

              -
              -
              - -
              technicolor: boolean
              -

              image technicolor colors

              -
              -
              - -
              vintage: boolean
              -

              image vintage colors

              -
              -
              - -
              width: number
              -

              resize input width

              +
              hue: number

              range: 0 (no change) to 360 (hue rotation in degrees)

              +
              kodachrome: boolean

              image kodachrome colors

              +
              negative: boolean

              image negative

              +
              pixelate: number

              range: 0 (no pixelate) to N (number of pixels to pixelate)

              +
              polaroid: boolean

              image polaroid camera effect

              +
              return: boolean

              return processed canvas imagedata in result

              +
              saturation: number

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

              +
              sepia: boolean

              image sepia colors

              +
              sharpness: number

              range: 0 (no sharpening) to 1 (maximum sharpening)

              +
              technicolor: boolean

              image technicolor colors

              +
              vintage: boolean

              image vintage colors

              +
              width: number

              resize input width

              • if both width and height are set to 0, there is no resizing
              • 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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/GenericConfig.html b/typedoc/interfaces/GenericConfig.html index 691eda4c..195be68d 100644 --- a/typedoc/interfaces/GenericConfig.html +++ b/typedoc/interfaces/GenericConfig.html @@ -1,116 +1,12 @@ -GenericConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface GenericConfig

              -
              -

              Generic config type inherited by all module types

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +GenericConfig | @vladmandic/human - v3.2.0

              Interface GenericConfig

              Generic config type inherited by all module types

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

              Hierarchy

              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/GestureConfig.html b/typedoc/interfaces/GestureConfig.html index 72fc3777..7fda63b9 100644 --- a/typedoc/interfaces/GestureConfig.html +++ b/typedoc/interfaces/GestureConfig.html @@ -1,72 +1,4 @@ -GestureConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface GestureConfig

              -
              -

              Controlls gesture detection

              -
              -
              -

              Hierarchy

              -
                -
              • GestureConfig
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              Properties

              -
              - -
              enabled: boolean
              -

              is gesture detection enabled?

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

              Interface GestureConfig

              Controlls gesture detection

              +
              interface GestureConfig {
                  enabled: boolean;
              }

              Properties

              Properties

              enabled: boolean

              is gesture detection enabled?

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/HandConfig.html b/typedoc/interfaces/HandConfig.html index aa338a65..52bca2ca 100644 --- a/typedoc/interfaces/HandConfig.html +++ b/typedoc/interfaces/HandConfig.html @@ -1,180 +1,26 @@ -HandConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface HandConfig

              -
              -

              Configures all hand detection specific options

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              Properties

              -
              - -
              detector: {
                  modelPath?: string;
              }
              -
              -

              Type declaration

              -
                -
              • -
                Optional modelPath?: 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

              -
              -
              - -
              maxDetected: number
              -

              maximum number of detected hands

              -
              -
              - -
              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

                -
              -
              - -
              skipFrames: number
              -

              how many max frames to go without re-running model if cached results are acceptable +HandConfig | @vladmandic/human - v3.2.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

              Properties

              detector: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: 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

              +
              maxDetected: number

              maximum number of detected hands

              +
              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

                +
              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/HandResult.html b/typedoc/interfaces/HandResult.html index 359003a5..75d95d23 100644 --- a/typedoc/interfaces/HandResult.html +++ b/typedoc/interfaces/HandResult.html @@ -1,153 +1,22 @@ -HandResult | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface HandResult

              -
              -

              Hand results

              -
              -
              -

              Hierarchy

              -
                -
              • HandResult
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              fingerScore: number
              -

              hand skelton score

              -
              -
              - -
              id: number
              -

              hand id

              -
              -
              - -
              keypoints: Point[]
              -

              detected hand keypoints

              -
              -
              - -
              label: HandType
              -

              detected hand class

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

              detected hand parts annotated with part gestures

              -
              -
              - -
              score: number
              -

              hand overal score

              -
              -
              -
              \ No newline at end of file +HandResult | @vladmandic/human - v3.2.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

              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

              +
              fingerScore: number

              hand skelton score

              +
              id: number

              hand id

              +
              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 diff --git a/typedoc/interfaces/ModelInfo.html b/typedoc/interfaces/ModelInfo.html index 4840aac6..aca9cd20 100644 --- a/typedoc/interfaces/ModelInfo.html +++ b/typedoc/interfaces/ModelInfo.html @@ -1,102 +1,7 @@ -ModelInfo | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface ModelInfo

              -
              -

              Hierarchy

              -
                -
              • ModelInfo
              -
              -
              -
              - -
              -
              -

              Properties

              -
              - -
              inCache: boolean
              -
              - -
              name: string
              -
              - -
              sizeDesired: number
              -
              - -
              sizeFromManifest: number
              -
              - -
              sizeLoadedWeights: number
              -
              - -
              url: string
              -
              -
              \ No newline at end of file +ModelInfo | @vladmandic/human - v3.2.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 diff --git a/typedoc/interfaces/ObjectConfig.html b/typedoc/interfaces/ObjectConfig.html index 0030336f..b14a0ab2 100644 --- a/typedoc/interfaces/ObjectConfig.html +++ b/typedoc/interfaces/ObjectConfig.html @@ -1,134 +1,18 @@ -ObjectConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface ObjectConfig

              -
              -

              Configures all object detection specific options

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              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 +ObjectConfig | @vladmandic/human - v3.2.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

              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

              +
              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/ObjectResult.html b/typedoc/interfaces/ObjectResult.html index a814bd79..10837b0b 100644 --- a/typedoc/interfaces/ObjectResult.html +++ b/typedoc/interfaces/ObjectResult.html @@ -1,117 +1,14 @@ -ObjectResult | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface ObjectResult

              -
              -

              Object results

              -
              -
              -

              Hierarchy

              -
                -
              • ObjectResult
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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 +ObjectResult | @vladmandic/human - v3.2.0

              Interface ObjectResult

              Object results

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

              Properties

              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 dbb34c70..2fec0a60 100644 --- a/typedoc/interfaces/PersonResult.html +++ b/typedoc/interfaces/PersonResult.html @@ -1,136 +1,19 @@ -PersonResult | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface PersonResult

              -
              -

              Person getter

              +PersonResult | @vladmandic/human - v3.2.0

              Interface PersonResult

              Person getter

              • Triggers combining all individual results into a virtual person object
              -
              -
              -

              Hierarchy

              -
                -
              • PersonResult
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              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

              -
              -
              - - -

              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 +
              interface PersonResult {
                  body: null | BodyResult;
                  box: Box;
                  boxRaw?: Box;
                  face: FaceResult;
                  gestures: GestureResult[];
                  hands: {
                      left: null | HandResult;
                      right: null | HandResult;
                  };
                  id: number;
              }

              Properties

              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

              +

              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 diff --git a/typedoc/interfaces/Result.html b/typedoc/interfaces/Result.html index eb9d6a64..523433ae 100644 --- a/typedoc/interfaces/Result.html +++ b/typedoc/interfaces/Result.html @@ -1,172 +1,27 @@ -Result | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface Result

              -
              -

              Result interface definition for Human library

              +Result | @vladmandic/human - v3.2.0

              Interface Result

              Result interface definition for Human library

              Contains all possible detection results

              -
              -
              -

              Hierarchy

              -
                -
              • Result
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              hand: HandResult[]
              -

              HandResult: detection & analysis results

              -
              -
              - -
              height: number
              -

              Resolution height

              -
              -
              - -
              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

              -
              -
              - -
              width: number
              -

              Resolution width

              -
              -
              -
              \ No newline at end of file +
              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

              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

              +
              hand: HandResult[]

              HandResult: detection & analysis results

              +
              height: number

              Resolution height

              +
              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

              +
              width: number

              Resolution width

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/SegmentationConfig.html b/typedoc/interfaces/SegmentationConfig.html index ebfdf7b8..489b8167 100644 --- a/typedoc/interfaces/SegmentationConfig.html +++ b/typedoc/interfaces/SegmentationConfig.html @@ -1,129 +1,20 @@ -SegmentationConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface SegmentationConfig

              -
              -

              Configures all body segmentation module +SegmentationConfig | @vladmandic/human - v3.2.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

              -
              -
              -

              Hierarchy

              -
              -
              -
              -
              - -
              -
              -

              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

              -
              -
              - -
              skipFrames: number
              -

              how many max frames to go without re-running model if cached results are acceptable +

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

              Hierarchy

              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

              +
              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 +

              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 +
              \ No newline at end of file diff --git a/typedoc/interfaces/WebCamConfig.html b/typedoc/interfaces/WebCamConfig.html index 47daa409..7eece962 100644 --- a/typedoc/interfaces/WebCamConfig.html +++ b/typedoc/interfaces/WebCamConfig.html @@ -1,131 +1,21 @@ -WebCamConfig | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface WebCamConfig

              -
              -

              WebCam configuration

              -
              -
              -

              Hierarchy

              -
                -
              • WebCamConfig
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              Properties

              -
              - -
              crop: boolean
              -

              camera crop mode

              -
              -
              - -
              debug: boolean
              -

              print messages on console

              -
              -
              - -
              element: undefined | string | HTMLVideoElement
              -

              element can be:

              +WebCamConfig | @vladmandic/human - v3.2.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

              Properties

              crop: boolean

              camera crop mode

              +
              debug: boolean

              print messages on console

              +
              element: undefined | string | HTMLVideoElement

              element can be:

              • string which indicates dom element id
              • actual HTMLVideo dom element
              • undefined in which case a new HTMLVideoElement will be created
              -
              -
              - -
              height: number
              -

              desired webcam height

              -
              -
              - -
              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 +
              height: number

              desired webcam height

              +
              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 7e84b185..ad6eca06 100644 --- a/typedoc/interfaces/models.KernelOps.html +++ b/typedoc/interfaces/models.KernelOps.html @@ -1,89 +1,5 @@ -KernelOps | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface KernelOps

              -
              -

              Hierarchy

              -
                -
              • KernelOps
              -
              -
              -
              - -
              -
              -

              Properties

              -
              -
              -

              Properties

              -
              - -
              missing: string[]
              -
              - -
              name: string
              -
              - -
              ops: string[]
              -
              - -
              url: string
              -
              -
              \ No newline at end of file +KernelOps | @vladmandic/human - v3.2.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 diff --git a/typedoc/interfaces/models.ModelStats.html b/typedoc/interfaces/models.ModelStats.html index 99679f69..2c9a6746 100644 --- a/typedoc/interfaces/models.ModelStats.html +++ b/typedoc/interfaces/models.ModelStats.html @@ -1,113 +1,9 @@ -ModelStats | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Interface ModelStats

              -
              -

              structure that holds global stats for currently loaded models

              -
              -
              -

              Hierarchy

              -
                -
              • ModelStats
              -
              -
              -
              - -
              -
              -

              Properties

              -
              - -
              modelStats: ModelInfo[]
              -
              - -
              numDefinedModels: number
              -
              - -
              numLoadedModels: number
              -
              - -
              percentageLoaded: number
              -
              - -
              totalSizeFromManifest: number
              -
              - -
              totalSizeLoading: number
              -
              - -
              totalSizeWeights: number
              -
              -
              \ No newline at end of file +ModelStats | @vladmandic/human - v3.2.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 diff --git a/typedoc/modules/Tensor.html b/typedoc/modules/Tensor.html index 8763f27d..6c25dbef 100644 --- a/typedoc/modules/Tensor.html +++ b/typedoc/modules/Tensor.html @@ -1,262 +1,2 @@ -Tensor | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Namespace Tensor

              -
              -

              Explict reexport of main @tensorflow/tfjs types

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

              Namespace Tensor

              Explict reexport of main @tensorflow/tfjs types

              +
              \ No newline at end of file diff --git a/typedoc/modules/draw.html b/typedoc/modules/draw.html index c61a4425..685a4284 100644 --- a/typedoc/modules/draw.html +++ b/typedoc/modules/draw.html @@ -1,76 +1,12 @@ -draw | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Namespace draw

              -
              -

              Class Human as default export

              -
              -
              -
              -

              Index

              -
              -

              Variables

              -
              -
              -

              Functions

              -
              -
              -
              \ No newline at end of file +draw | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/modules/match.html b/typedoc/modules/match.html index 3f2bf0a9..22f3a84f 100644 --- a/typedoc/modules/match.html +++ b/typedoc/modules/match.html @@ -1,66 +1,7 @@ -match | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Namespace match

              -
              -

              Class Human as default export

              -
              -
              -
              -

              Index

              -
              -

              Type Aliases

              -
              -
              -

              Functions

              -
              -
              -
              \ No newline at end of file +match | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/modules/models.html b/typedoc/modules/models.html index c18cf150..517fa342 100644 --- a/typedoc/modules/models.html +++ b/typedoc/modules/models.html @@ -1,67 +1,6 @@ -models | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Namespace models

              -
              -

              Class Human as default export

              -
              -
              -
              -

              Index

              -
              -

              Classes

              -
              -
              -

              Interfaces

              -
              -
              -

              Functions

              -
              -
              -
              \ No newline at end of file +models | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/AnyCanvas.html b/typedoc/types/AnyCanvas.html index 778859df..da7deb05 100644 --- a/typedoc/types/AnyCanvas.html +++ b/typedoc/types/AnyCanvas.html @@ -1,124 +1,2 @@ -AnyCanvas | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +AnyCanvas | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/AnyImage.html b/typedoc/types/AnyImage.html index 74d38e66..405699f4 100644 --- a/typedoc/types/AnyImage.html +++ b/typedoc/types/AnyImage.html @@ -1,124 +1,2 @@ -AnyImage | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +AnyImage | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/AnyVideo.html b/typedoc/types/AnyVideo.html index ae0408c5..13047668 100644 --- a/typedoc/types/AnyVideo.html +++ b/typedoc/types/AnyVideo.html @@ -1,124 +1,2 @@ -AnyVideo | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +AnyVideo | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/BackendEnum.html b/typedoc/types/BackendEnum.html index 2eaf0c9a..5f14bd02 100644 --- a/typedoc/types/BackendEnum.html +++ b/typedoc/types/BackendEnum.html @@ -1,124 +1,2 @@ -BackendEnum | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BackendEnum | @vladmandic/human - v3.2.0

              Type alias BackendEnum

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

              Possible TensorFlow backends

              +
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotation.html b/typedoc/types/BodyAnnotation.html index f5be9afe..6c32152d 100644 --- a/typedoc/types/BodyAnnotation.html +++ b/typedoc/types/BodyAnnotation.html @@ -1,122 +1 @@ -BodyAnnotation | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BodyAnnotation | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotationBlazePose.html b/typedoc/types/BodyAnnotationBlazePose.html index e1c7d5ed..646dc006 100644 --- a/typedoc/types/BodyAnnotationBlazePose.html +++ b/typedoc/types/BodyAnnotationBlazePose.html @@ -1,122 +1 @@ -BodyAnnotationBlazePose | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BodyAnnotationBlazePose | @vladmandic/human - v3.2.0

              Type alias BodyAnnotationBlazePose

              BodyAnnotationBlazePose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "leftEye" | "rightEye" | "mouth"
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotationEfficientPose.html b/typedoc/types/BodyAnnotationEfficientPose.html index 4debc26c..5e861fb5 100644 --- a/typedoc/types/BodyAnnotationEfficientPose.html +++ b/typedoc/types/BodyAnnotationEfficientPose.html @@ -1,122 +1 @@ -BodyAnnotationEfficientPose | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BodyAnnotationEfficientPose | @vladmandic/human - v3.2.0

              Type alias BodyAnnotationEfficientPose

              BodyAnnotationEfficientPose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "head"
              \ No newline at end of file diff --git a/typedoc/types/BodyGesture.html b/typedoc/types/BodyGesture.html index f6458e76..c59918b5 100644 --- a/typedoc/types/BodyGesture.html +++ b/typedoc/types/BodyGesture.html @@ -1,124 +1,2 @@ -BodyGesture | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BodyGesture | @vladmandic/human - v3.2.0

              Type alias BodyGesture

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

              body gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmark.html b/typedoc/types/BodyLandmark.html index 3d1715e1..1883c907 100644 --- a/typedoc/types/BodyLandmark.html +++ b/typedoc/types/BodyLandmark.html @@ -1,122 +1 @@ -BodyLandmark | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +BodyLandmark | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkBlazePose.html b/typedoc/types/BodyLandmarkBlazePose.html index 0ad8bdad..94bffb55 100644 --- a/typedoc/types/BodyLandmarkBlazePose.html +++ b/typedoc/types/BodyLandmarkBlazePose.html @@ -1,122 +1 @@ -BodyLandmarkBlazePose | @vladmandic/human - v3.1.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.2.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"
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkEfficientNet.html b/typedoc/types/BodyLandmarkEfficientNet.html index dbcceb41..e64f0371 100644 --- a/typedoc/types/BodyLandmarkEfficientNet.html +++ b/typedoc/types/BodyLandmarkEfficientNet.html @@ -1,122 +1 @@ -BodyLandmarkEfficientNet | @vladmandic/human - v3.1.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.2.0

              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 diff --git a/typedoc/types/BodyLandmarkMoveNet.html b/typedoc/types/BodyLandmarkMoveNet.html index 93a9702a..b4945c89 100644 --- a/typedoc/types/BodyLandmarkMoveNet.html +++ b/typedoc/types/BodyLandmarkMoveNet.html @@ -1,122 +1 @@ -BodyLandmarkMoveNet | @vladmandic/human - v3.1.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.2.0

              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 diff --git a/typedoc/types/BodyLandmarkPoseNet.html b/typedoc/types/BodyLandmarkPoseNet.html index 2eb1441a..7079dda8 100644 --- a/typedoc/types/BodyLandmarkPoseNet.html +++ b/typedoc/types/BodyLandmarkPoseNet.html @@ -1,122 +1 @@ -BodyLandmarkPoseNet | @vladmandic/human - v3.1.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.2.0

              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 diff --git a/typedoc/types/Box.html b/typedoc/types/Box.html index c7b178b9..c589e569 100644 --- a/typedoc/types/Box.html +++ b/typedoc/types/Box.html @@ -1,124 +1,2 @@ -Box | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Box | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/Emotion.html b/typedoc/types/Emotion.html index 15f9fe87..2c49fff6 100644 --- a/typedoc/types/Emotion.html +++ b/typedoc/types/Emotion.html @@ -1,122 +1 @@ -Emotion | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Emotion | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/Events.html b/typedoc/types/Events.html index 3b629741..c20368d7 100644 --- a/typedoc/types/Events.html +++ b/typedoc/types/Events.html @@ -1,22 +1,4 @@ -Events | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Type alias Events

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

              Events dispatched by human.events

              +Events | @vladmandic/human - v3.2.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)
              • @@ -24,108 +6,4 @@
              • result: triggered when detection is complete
              • warmup: triggered when warmup is complete
              -
              -
              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/types/ExternalCanvas.html b/typedoc/types/ExternalCanvas.html index cca5bfe7..80a49e6d 100644 --- a/typedoc/types/ExternalCanvas.html +++ b/typedoc/types/ExternalCanvas.html @@ -1,124 +1,2 @@ -ExternalCanvas | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +ExternalCanvas | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/FaceGesture.html b/typedoc/types/FaceGesture.html index 1ca5749c..79ef01e8 100644 --- a/typedoc/types/FaceGesture.html +++ b/typedoc/types/FaceGesture.html @@ -1,124 +1,2 @@ -FaceGesture | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +FaceGesture | @vladmandic/human - v3.2.0

              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 diff --git a/typedoc/types/FaceLandmark.html b/typedoc/types/FaceLandmark.html index de608147..b54b5e14 100644 --- a/typedoc/types/FaceLandmark.html +++ b/typedoc/types/FaceLandmark.html @@ -1,122 +1 @@ -FaceLandmark | @vladmandic/human - v3.1.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.2.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"
              \ No newline at end of file diff --git a/typedoc/types/Finger.html b/typedoc/types/Finger.html index 5ea670a0..751cb01d 100644 --- a/typedoc/types/Finger.html +++ b/typedoc/types/Finger.html @@ -1,122 +1 @@ -Finger | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Finger | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/FingerCurl.html b/typedoc/types/FingerCurl.html index 7adc8ec9..0992ed7c 100644 --- a/typedoc/types/FingerCurl.html +++ b/typedoc/types/FingerCurl.html @@ -1,122 +1 @@ -FingerCurl | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +FingerCurl | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/FingerDirection.html b/typedoc/types/FingerDirection.html index 079b5b3f..34fefa67 100644 --- a/typedoc/types/FingerDirection.html +++ b/typedoc/types/FingerDirection.html @@ -1,122 +1 @@ -FingerDirection | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +FingerDirection | @vladmandic/human - v3.2.0

              Type alias FingerDirection

              FingerDirection: "verticalUp" | "verticalDown" | "horizontalLeft" | "horizontalRight" | "diagonalUpRight" | "diagonalUpLeft" | "diagonalDownRight" | "diagonalDownLeft"
              \ No newline at end of file diff --git a/typedoc/types/Gender.html b/typedoc/types/Gender.html index 16037317..b90a075d 100644 --- a/typedoc/types/Gender.html +++ b/typedoc/types/Gender.html @@ -1,122 +1 @@ -Gender | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Gender | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/GestureResult.html b/typedoc/types/GestureResult.html index 50e479d7..10b96fd2 100644 --- a/typedoc/types/GestureResult.html +++ b/typedoc/types/GestureResult.html @@ -1,129 +1,7 @@ -GestureResult | @vladmandic/human - v3.1.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.2.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
              -
              -
              -
              \ No newline at end of file +

              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 27fc9912..0ac705a0 100644 --- a/typedoc/types/HandGesture.html +++ b/typedoc/types/HandGesture.html @@ -1,124 +1,2 @@ -HandGesture | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +HandGesture | @vladmandic/human - v3.2.0

              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 diff --git a/typedoc/types/HandType.html b/typedoc/types/HandType.html index 44c2aee0..403dee35 100644 --- a/typedoc/types/HandType.html +++ b/typedoc/types/HandType.html @@ -1,122 +1 @@ -HandType | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +HandType | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/ImageObjects.html b/typedoc/types/ImageObjects.html index afa21348..08487788 100644 --- a/typedoc/types/ImageObjects.html +++ b/typedoc/types/ImageObjects.html @@ -1,124 +1,2 @@ -ImageObjects | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +ImageObjects | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/Input.html b/typedoc/types/Input.html index 9ffa2a39..7a631741 100644 --- a/typedoc/types/Input.html +++ b/typedoc/types/Input.html @@ -1,124 +1,2 @@ -Input | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Input | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/IrisGesture.html b/typedoc/types/IrisGesture.html index 50a68205..e02e5692 100644 --- a/typedoc/types/IrisGesture.html +++ b/typedoc/types/IrisGesture.html @@ -1,124 +1,2 @@ -IrisGesture | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +IrisGesture | @vladmandic/human - v3.2.0

              Type alias IrisGesture

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

              iris gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/ObjectType.html b/typedoc/types/ObjectType.html index ba1bb1c5..834dc66c 100644 --- a/typedoc/types/ObjectType.html +++ b/typedoc/types/ObjectType.html @@ -1,122 +1 @@ -ObjectType | @vladmandic/human - v3.1.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.2.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"
              \ No newline at end of file diff --git a/typedoc/types/Point.html b/typedoc/types/Point.html index 692718a0..c754385b 100644 --- a/typedoc/types/Point.html +++ b/typedoc/types/Point.html @@ -1,124 +1,2 @@ -Point | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Point | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/Race.html b/typedoc/types/Race.html index 0fcd75f2..20194777 100644 --- a/typedoc/types/Race.html +++ b/typedoc/types/Race.html @@ -1,122 +1 @@ -Race | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Race | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/SegmentationEnum.html b/typedoc/types/SegmentationEnum.html index 84cc53f2..c37a7629 100644 --- a/typedoc/types/SegmentationEnum.html +++ b/typedoc/types/SegmentationEnum.html @@ -1,124 +1,2 @@ -SegmentationEnum | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +SegmentationEnum | @vladmandic/human - v3.2.0

              Type alias SegmentationEnum

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

              Possible segmentation model behavior

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor1D.html b/typedoc/types/Tensor1D.html index 4b59b63e..0cdce2cd 100644 --- a/typedoc/types/Tensor1D.html +++ b/typedoc/types/Tensor1D.html @@ -1,125 +1,2 @@ -Tensor1D | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Tensor1D | @vladmandic/human - v3.2.0

              Type alias Tensor1D

              Tensor1D: Tensor<R1>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor2D.html b/typedoc/types/Tensor2D.html index f1071ca9..ad27d0bc 100644 --- a/typedoc/types/Tensor2D.html +++ b/typedoc/types/Tensor2D.html @@ -1,125 +1,2 @@ -Tensor2D | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Tensor2D | @vladmandic/human - v3.2.0

              Type alias Tensor2D

              Tensor2D: Tensor<R2>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor3D.html b/typedoc/types/Tensor3D.html index 41b7ea71..6d025b47 100644 --- a/typedoc/types/Tensor3D.html +++ b/typedoc/types/Tensor3D.html @@ -1,125 +1,2 @@ -Tensor3D | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Tensor3D | @vladmandic/human - v3.2.0

              Type alias Tensor3D

              Tensor3D: Tensor<R3>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor4D.html b/typedoc/types/Tensor4D.html index 101bd470..2e45db82 100644 --- a/typedoc/types/Tensor4D.html +++ b/typedoc/types/Tensor4D.html @@ -1,125 +1,2 @@ -Tensor4D | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +Tensor4D | @vladmandic/human - v3.2.0

              Type alias Tensor4D

              Tensor4D: Tensor<R4>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/TensorLike.html b/typedoc/types/TensorLike.html index 54486000..0b63725e 100644 --- a/typedoc/types/TensorLike.html +++ b/typedoc/types/TensorLike.html @@ -1,125 +1,2 @@ -TensorLike | @vladmandic/human - v3.1.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.2.0

              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 diff --git a/typedoc/types/WarmupEnum.html b/typedoc/types/WarmupEnum.html index 76676904..23b40888 100644 --- a/typedoc/types/WarmupEnum.html +++ b/typedoc/types/WarmupEnum.html @@ -1,124 +1,2 @@ -WarmupEnum | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +WarmupEnum | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/match.Descriptor.html b/typedoc/types/match.Descriptor.html index 33f68bd4..2dd7f544 100644 --- a/typedoc/types/match.Descriptor.html +++ b/typedoc/types/match.Descriptor.html @@ -1,53 +1,2 @@ -Descriptor | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Type alias Descriptor

              -
              Descriptor: number[]
              -

              Face descriptor type as number array

              -
              -
              -
              \ No newline at end of file +Descriptor | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/types/match.MatchOptions.html b/typedoc/types/match.MatchOptions.html index 034f6192..8cc745f4 100644 --- a/typedoc/types/match.MatchOptions.html +++ b/typedoc/types/match.MatchOptions.html @@ -1,51 +1 @@ -MatchOptions | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Type alias MatchOptions

              -
              MatchOptions: {
                  max?: number;
                  min?: number;
                  multiplier?: number;
                  order?: number;
                  threshold?: number;
              } | undefined
              -
              -
              \ No newline at end of file +MatchOptions | @vladmandic/human - v3.2.0

              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 diff --git a/typedoc/variables/defaults.html b/typedoc/variables/defaults.html index 8c8a4bcf..b6b89511 100644 --- a/typedoc/variables/defaults.html +++ b/typedoc/variables/defaults.html @@ -1,126 +1,4 @@ -defaults | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Variable defaultsConst

              -
              defaults: Config = ...
              -
              \ No newline at end of file diff --git a/typedoc/variables/draw.options.html b/typedoc/variables/draw.options.html index b867b386..355e4b8c 100644 --- a/typedoc/variables/draw.options.html +++ b/typedoc/variables/draw.options.html @@ -1,58 +1,2 @@ -options | @vladmandic/human - v3.1.2
              -
              - -
              -
              -
              -
              - -

              Variable optionsConst

              -
              options: DrawOptions = ...
              -

              currently set draw options DrawOptions

              -
              -
              -
              \ No newline at end of file +options | @vladmandic/human - v3.2.0
              \ No newline at end of file diff --git a/typedoc/variables/env-1.html b/typedoc/variables/env-1.html index 563e9bb3..689778f1 100644 --- a/typedoc/variables/env-1.html +++ b/typedoc/variables/env-1.html @@ -1,122 +1 @@ -env | @vladmandic/human - v3.1.2
              -
              - -
              - -
              \ No newline at end of file +env | @vladmandic/human - v3.2.0
              \ No newline at end of file