UNPKG

dicomweb-pacs

Version:

A self contained easy to use PACS with DICOMWEB and DIMSE service support

2 lines 907 kB
/*! For license information please see ort.js.LICENSE.txt */
"use strict";var ort=(()=>{var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__esm=(t,e)=>function(){return t&&(e=(0,t[__getOwnPropNames(t)[0]])(t=0)),e},__commonJS=(t,e)=>function(){return e||(0,t[__getOwnPropNames(t)[0]])((e={exports:{}}).exports,e),e.exports},__export=(t,e)=>{for(var n in e)__defProp(t,n,{get:e[n],enumerable:!0})},__copyProps=(t,e,n,r)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let s of __getOwnPropNames(e))__hasOwnProp.call(t,s)||s===n||__defProp(t,s,{get:()=>e[s],enumerable:!(r=__getOwnPropDesc(e,s))||r.enumerable});return t},__toESM=(t,e,n)=>(n=null!=t?__create(__getProtoOf(t)):{},__copyProps(!e&&t&&t.__esModule?n:__defProp(n,"default",{value:t,enumerable:!0}),t)),__toCommonJS=t=>__copyProps(__defProp({},"__esModule",{value:!0}),t),backends,backendsSortedByPriority,registerBackend,resolveBackend,init_backend_impl=__esm({"common/dist/esm/backend-impl.js"(){backends=new Map,backendsSortedByPriority=[],registerBackend=(t,e,n)=>{if(!e||"function"!=typeof e.init||"function"!=typeof e.createInferenceSessionHandler)throw new TypeError("not a valid backend");{const r=backends.get(t);if(void 0===r)backends.set(t,{backend:e,priority:n});else{if(r.priority>n)return;if(r.priority===n&&r.backend!==e)throw new Error(`cannot register backend "${t}" using priority ${n}`)}if(n>=0){const e=backendsSortedByPriority.indexOf(t);-1!==e&&backendsSortedByPriority.splice(e,1);for(let e=0;e<backendsSortedByPriority.length;e++)if(backends.get(backendsSortedByPriority[e]).priority<=n)return void backendsSortedByPriority.splice(e,0,t);backendsSortedByPriority.push(t)}}},resolveBackend=async t=>{const e=0===t.length?backendsSortedByPriority:t,n=[];for(const t of e){const e=backends.get(t);if(e){if(e.initialized)return e.backend;if(e.aborted)continue;const r=!!e.initPromise;try{return r||(e.initPromise=e.backend.init(t)),await e.initPromise,e.initialized=!0,e.backend}catch(s){r||n.push({name:t,err:s}),e.aborted=!0}finally{delete e.initPromise}}}throw new Error(`no available backend found. ERR: ${n.map((t=>`[${t.name}] ${t.err}`)).join(", ")}`)}}}),init_backend=__esm({"common/dist/esm/backend.js"(){init_backend_impl()}}),version,init_version=__esm({"common/dist/esm/version.js"(){version="1.17.1"}}),logLevelValue,env,init_env_impl=__esm({"common/dist/esm/env-impl.js"(){init_version(),logLevelValue="warning",env={wasm:{},webgl:{},webgpu:{},versions:{common:version},set logLevel(t){if(void 0!==t){if("string"!=typeof t||-1===["verbose","info","warning","error","fatal"].indexOf(t))throw new Error(`Unsupported logging level: ${t}`);logLevelValue=t}},get logLevel(){return logLevelValue}},Object.defineProperty(env,"logLevel",{enumerable:!0})}}),env2,init_env=__esm({"common/dist/esm/env.js"(){init_env_impl(),env2=env}}),tensorToDataURL,tensorToImageData,init_tensor_conversion_impl=__esm({"common/dist/esm/tensor-conversion-impl.js"(){tensorToDataURL=(t,e)=>{const n="undefined"!=typeof document?document.createElement("canvas"):new OffscreenCanvas(1,1);n.width=t.dims[3],n.height=t.dims[2];const r=n.getContext("2d");if(null!=r){let s,i;void 0!==e?.tensorLayout&&"NHWC"===e.tensorLayout?(s=t.dims[2],i=t.dims[3]):(s=t.dims[3],i=t.dims[2]);const o=void 0!==e?.format?e.format:"RGB",a=e?.norm;let l,F;void 0===a||void 0===a.mean?l=[255,255,255,255]:"number"==typeof a.mean?l=[a.mean,a.mean,a.mean,a.mean]:(l=[a.mean[0],a.mean[1],a.mean[2],0],void 0!==a.mean[3]&&(l[3]=a.mean[3])),void 0===a||void 0===a.bias?F=[0,0,0,0]:"number"==typeof a.bias?F=[a.bias,a.bias,a.bias,a.bias]:(F=[a.bias[0],a.bias[1],a.bias[2],0],void 0!==a.bias[3]&&(F[3]=a.bias[3]));const U=i*s;let c=0,u=U,Q=2*U,d=-1;"RGBA"===o?(c=0,u=U,Q=2*U,d=3*U):"RGB"===o?(c=0,u=U,Q=2*U):"RBG"===o&&(c=0,Q=U,u=2*U);for(let e=0;e<i;e++)for(let n=0;n<s;n++){const s=(t.data[c++]-F[0])*l[0],i=(t.data[u++]-F[1])*l[1],o=(t.data[Q++]-F[2])*l[2],a=-1===d?255:(t.data[d++]-F[3])*l[3];r.fillStyle="rgba("+s+","+i+","+o+","+a+")",r.fillRect(n,e,1,1)}if("toDataURL"in n)return n.toDataURL();throw new Error("toDataURL is not supported")}throw new Error("Can not access image data")},tensorToImageData=(t,e)=>{const n="undefined"!=typeof document?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d");let r;if(null==n)throw new Error("Can not access image data");{let s,i,o;void 0!==e?.tensorLayout&&"NHWC"===e.tensorLayout?(s=t.dims[2],i=t.dims[1],o=t.dims[3]):(s=t.dims[3],i=t.dims[2],o=t.dims[1]);const a=void 0!==e&&void 0!==e.format?e.format:"RGB",l=e?.norm;let F,U;void 0===l||void 0===l.mean?F=[255,255,255,255]:"number"==typeof l.mean?F=[l.mean,l.mean,l.mean,l.mean]:(F=[l.mean[0],l.mean[1],l.mean[2],255],void 0!==l.mean[3]&&(F[3]=l.mean[3])),void 0===l||void 0===l.bias?U=[0,0,0,0]:"number"==typeof l.bias?U=[l.bias,l.bias,l.bias,l.bias]:(U=[l.bias[0],l.bias[1],l.bias[2],0],void 0!==l.bias[3]&&(U[3]=l.bias[3]));const c=i*s;if(void 0!==e&&(void 0!==e.format&&4===o&&"RGBA"!==e.format||3===o&&"RGB"!==e.format&&"BGR"!==e.format))throw new Error("Tensor format doesn't match input tensor dims");const u=4;let Q=0,d=1,B=2,p=3,g=0,h=c,b=2*c,f=-1;"RGBA"===a?(g=0,h=c,b=2*c,f=3*c):"RGB"===a?(g=0,h=c,b=2*c):"RBG"===a&&(g=0,b=c,h=2*c),r=n.createImageData(s,i);for(let e=0;e<i*s;Q+=u,d+=u,B+=u,p+=u,e++)r.data[Q]=(t.data[g++]-U[0])*F[0],r.data[d]=(t.data[h++]-U[1])*F[1],r.data[B]=(t.data[b++]-U[2])*F[2],r.data[p]=-1===f?255:(t.data[f++]-U[3])*F[3]}return r}}}),bufferToTensor,tensorFromImage,tensorFromTexture,tensorFromGpuBuffer,tensorFromPinnedBuffer,init_tensor_factory_impl=__esm({"common/dist/esm/tensor-factory-impl.js"(){init_tensor_impl(),bufferToTensor=(t,e)=>{if(void 0===t)throw new Error("Image buffer must be defined");if(void 0===e.height||void 0===e.width)throw new Error("Image height and width must be defined");if("NHWC"===e.tensorLayout)throw new Error("NHWC Tensor layout is not supported yet");const{height:n,width:r}=e,s=e.norm??{mean:255,bias:0};let i,o;i="number"==typeof s.mean?[s.mean,s.mean,s.mean,s.mean]:[s.mean[0],s.mean[1],s.mean[2],s.mean[3]??255],o="number"==typeof s.bias?[s.bias,s.bias,s.bias,s.bias]:[s.bias[0],s.bias[1],s.bias[2],s.bias[3]??0];const a=void 0!==e.format?e.format:"RGBA",l=void 0!==e.tensorFormat&&void 0!==e.tensorFormat?e.tensorFormat:"RGB",F=n*r,U="RGBA"===l?new Float32Array(4*F):new Float32Array(3*F);let c=4,u=0,Q=1,d=2,B=3,p=0,g=F,h=2*F,b=-1;"RGB"===a&&(c=3,u=0,Q=1,d=2,B=-1),"RGBA"===l?b=3*F:"RBG"===l?(p=0,h=F,g=2*F):"BGR"===l&&(h=0,g=F,p=2*F);for(let e=0;e<F;e++,u+=c,d+=c,Q+=c,B+=c)U[p++]=(t[u]+o[0])/i[0],U[g++]=(t[Q]+o[1])/i[1],U[h++]=(t[d]+o[2])/i[2],-1!==b&&-1!==B&&(U[b++]=(t[B]+o[3])/i[3]);return new Tensor("float32",U,"RGBA"===l?[1,4,n,r]:[1,3,n,r])},tensorFromImage=async(t,e)=>{const n="undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement,r="undefined"!=typeof ImageData&&t instanceof ImageData,s="undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap,i="string"==typeof t;let o,a=e??{};const l=()=>{if("undefined"!=typeof document)return document.createElement("canvas");if("undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},F=t=>t instanceof HTMLCanvasElement||t instanceof OffscreenCanvas?t.getContext("2d"):null;if(n){const n=l();n.width=t.width,n.height=t.height;const r=F(n);if(null==r)throw new Error("Can not access image data");{let n=t.height,s=t.width;if(void 0!==e&&void 0!==e.resizedHeight&&void 0!==e.resizedWidth&&(n=e.resizedHeight,s=e.resizedWidth),void 0!==e){if(a=e,void 0!==e.tensorFormat)throw new Error("Image input config format must be RGBA for HTMLImageElement");a.tensorFormat="RGBA",a.height=n,a.width=s}else a.tensorFormat="RGBA",a.height=n,a.width=s;r.drawImage(t,0,0),o=r.getImageData(0,0,s,n).data}}else{if(!r){if(s){if(void 0===e)throw new Error("Please provide image config with format for Imagebitmap");const n=l();n.width=t.width,n.height=t.height;const r=F(n);if(null!=r){const e=t.height,n=t.width;return r.drawImage(t,0,0,n,e),o=r.getImageData(0,0,n,e).data,a.height=e,a.width=n,bufferToTensor(o,a)}throw new Error("Can not access image data")}if(i)return new Promise(((e,n)=>{const r=l(),s=F(r);if(!t||!s)return n();const i=new Image;i.crossOrigin="Anonymous",i.src=t,i.onload=()=>{r.width=i.width,r.height=i.height,s.drawImage(i,0,0,r.width,r.height);const t=s.getImageData(0,0,r.width,r.height);a.height=r.height,a.width=r.width,e(bufferToTensor(t.data,a))}}));throw new Error("Input data provided is not supported - aborted tensor creation")}{let n,r;if(void 0!==e&&void 0!==e.resizedWidth&&void 0!==e.resizedHeight?(n=e.resizedHeight,r=e.resizedWidth):(n=t.height,r=t.width),void 0!==e&&(a=e),a.format="RGBA",a.height=n,a.width=r,void 0!==e){const e=l();e.width=r,e.height=n;const s=F(e);if(null==s)throw new Error("Can not access image data");s.putImageData(t,0,0),o=s.getImageData(0,0,r,n).data}else o=t.data}}if(void 0!==o)return bufferToTensor(o,a);throw new Error("Input data provided is not supported - aborted tensor creation")},tensorFromTexture=(t,e)=>{const{width:n,height:r,download:s,dispose:i}=e;return new Tensor({location:"texture",type:"float32",texture:t,dims:[1,r,n,4],download:s,dispose:i})},tensorFromGpuBuffer=(t,e)=>{const{dataType:n,dims:r,download:s,dispose:i}=e;return new Tensor({location:"gpu-buffer",type:n??"float32",gpuBuffer:t,dims:r,download:s,dispose:i})},tensorFromPinnedBuffer=(t,e,n)=>new Tensor({location:"cpu-pinned",type:t,data:e,dims:n??[e.length]})}}),NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP,NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP,isBigIntChecked,checkBigInt,init_tensor_impl_type_mapping=__esm({"common/dist/esm/tensor-impl-type-mapping.js"(){NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["float16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array]]),NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),isBigIntChecked=!1,checkBigInt=()=>{if(!isBigIntChecked){isBigIntChecked=!0;const t="undefined"!=typeof BigInt64Array&&"function"==typeof BigInt64Array.from,e="undefined"!=typeof BigUint64Array&&"function"==typeof BigUint64Array.from;t&&(NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("int64",BigInt64Array),NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array,"int64")),e&&(NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("uint64",BigUint64Array),NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array,"uint64"))}}}}),calculateSize,tensorReshape,init_tensor_utils_impl=__esm({"common/dist/esm/tensor-utils-impl.js"(){init_tensor_impl(),calculateSize=t=>{let e=1;for(let n=0;n<t.length;n++){const r=t[n];if("number"!=typeof r||!Number.isSafeInteger(r))throw new TypeError(`dims[${n}] must be an integer, got: ${r}`);if(r<0)throw new RangeError(`dims[${n}] must be a non-negative integer, got: ${r}`);e*=r}return e},tensorReshape=(t,e)=>{switch(t.location){case"cpu":return new Tensor(t.type,t.data,e);case"cpu-pinned":return new Tensor({location:"cpu-pinned",data:t.data,type:t.type,dims:e});case"texture":return new Tensor({location:"texture",texture:t.texture,type:t.type,dims:e});case"gpu-buffer":return new Tensor({location:"gpu-buffer",gpuBuffer:t.gpuBuffer,type:t.type,dims:e});default:throw new Error(`tensorReshape: tensor location ${t.location} is not supported`)}}}}),Tensor,init_tensor_impl=__esm({"common/dist/esm/tensor-impl.js"(){init_tensor_conversion_impl(),init_tensor_factory_impl(),init_tensor_impl_type_mapping(),init_tensor_utils_impl(),Tensor=class{constructor(t,e,n){let r,s;if(checkBigInt(),"object"==typeof t&&"location"in t)switch(this.dataLocation=t.location,r=t.type,s=t.dims,t.location){case"cpu-pinned":{const e=NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(r);if(!e)throw new TypeError(`unsupported type "${r}" to create tensor from pinned buffer`);if(!(t.data instanceof e))throw new TypeError(`buffer should be of type ${e.name}`);this.cpuData=t.data;break}case"texture":if("float32"!==r)throw new TypeError(`unsupported type "${r}" to create tensor from texture`);this.gpuTextureData=t.texture,this.downloader=t.download,this.disposer=t.dispose;break;case"gpu-buffer":if("float32"!==r&&"float16"!==r&&"int32"!==r&&"int64"!==r&&"uint32"!==r&&"bool"!==r)throw new TypeError(`unsupported type "${r}" to create tensor from gpu buffer`);this.gpuBufferData=t.gpuBuffer,this.downloader=t.download,this.disposer=t.dispose;break;default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let i,o;if("string"==typeof t)if(r=t,o=n,"string"===t){if(!Array.isArray(e))throw new TypeError("A string tensor's data must be a string array.");i=e}else{const n=NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(t);if(void 0===n)throw new TypeError(`Unsupported tensor type: ${t}.`);if(Array.isArray(e)){if("float16"===t)throw new TypeError("Creating a float16 tensor from number array is not supported. Please use Uint16Array as data.");i="uint64"===t||"int64"===t?n.from(e,BigInt):n.from(e)}else{if(!(e instanceof n))throw new TypeError(`A ${r} tensor's data must be type of ${n}`);i=e}}else if(o=e,Array.isArray(t)){if(0===t.length)throw new TypeError("Tensor type cannot be inferred from an empty array.");const e=typeof t[0];if("string"===e)r="string",i=t;else{if("boolean"!==e)throw new TypeError(`Invalid element type of data array: ${e}.`);r="bool",i=Uint8Array.from(t)}}else{const e=NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(t.constructor);if(void 0===e)throw new TypeError(`Unsupported type for tensor data: ${t.constructor}.`);r=e,i=t}if(void 0===o)o=[i.length];else if(!Array.isArray(o))throw new TypeError("A tensor's dims must be a number array");s=o,this.cpuData=i,this.dataLocation="cpu"}const i=calculateSize(s);if(this.cpuData&&i!==this.cpuData.length)throw new Error(`Tensor's size(${i}) does not match data length(${this.cpuData.length}).`);this.type=r,this.dims=s,this.size=i}static async fromImage(t,e){return tensorFromImage(t,e)}static fromTexture(t,e){return tensorFromTexture(t,e)}static fromGpuBuffer(t,e){return tensorFromGpuBuffer(t,e)}static fromPinnedBuffer(t,e,n){return tensorFromPinnedBuffer(t,e,n)}toDataURL(t){return tensorToDataURL(this,t)}toImageData(t){return tensorToImageData(this,t)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}async getData(t){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;const e=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=e,t&&this.disposer&&(this.disposer(),this.disposer=void 0),e}finally{this.isDownloading=!1}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if("none"===this.dataLocation)throw new Error("The tensor is disposed.")}reshape(t){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return tensorReshape(this,t)}}}}),Tensor2,init_tensor=__esm({"common/dist/esm/tensor.js"(){init_tensor_impl(),Tensor2=Tensor}}),TRACE,TRACE_FUNC,TRACE_FUNC_BEGIN,TRACE_FUNC_END,init_trace=__esm({"common/dist/esm/trace.js"(){init_env_impl(),TRACE=(t,e)=>{env.wasm.trace&&console.timeStamp(`${t}::ORT::${e}`)},TRACE_FUNC=(t,e)=>{const n=(new Error).stack?.split(/\r\n|\r|\n/g)||[];let r=!1;for(let s=0;s<n.length;s++){if(r&&!n[s].includes("TRACE_FUNC")){let r=`FUNC_${t}::${n[s].trim().split(" ")[1]}`;return e&&(r+=`::${e}`),void TRACE("CPU",r)}n[s].includes("TRACE_FUNC")&&(r=!0)}},TRACE_FUNC_BEGIN=t=>{env.wasm.trace&&TRACE_FUNC("BEGIN",t)},TRACE_FUNC_END=t=>{env.wasm.trace&&TRACE_FUNC("END",t)}}}),InferenceSession,init_inference_session_impl=__esm({"common/dist/esm/inference-session-impl.js"(){init_backend_impl(),init_tensor(),init_trace(),InferenceSession=class t{constructor(t){this.handler=t}async run(t,e,n){TRACE_FUNC_BEGIN();const r={};let s={};if("object"!=typeof t||null===t||t instanceof Tensor2||Array.isArray(t))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let i=!0;if("object"==typeof e){if(null===e)throw new TypeError("Unexpected argument[1]: cannot be null.");if(e instanceof Tensor2)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(e)){if(0===e.length)throw new TypeError("'fetches' cannot be an empty array.");i=!1;for(const t of e){if("string"!=typeof t)throw new TypeError("'fetches' must be a string array or an object.");if(-1===this.outputNames.indexOf(t))throw new RangeError(`'fetches' contains invalid output name: ${t}.`);r[t]=null}if("object"==typeof n&&null!==n)s=n;else if(void 0!==n)throw new TypeError("'options' must be an object.")}else{let t=!1;const o=Object.getOwnPropertyNames(e);for(const n of this.outputNames)if(-1!==o.indexOf(n)){const s=e[n];(null===s||s instanceof Tensor2)&&(t=!0,i=!1,r[n]=s)}if(t){if("object"==typeof n&&null!==n)s=n;else if(void 0!==n)throw new TypeError("'options' must be an object.")}else s=e}}else if(void 0!==e)throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(const e of this.inputNames)if(void 0===t[e])throw new Error(`input '${e}' is missing in 'feeds'.`);if(i)for(const t of this.outputNames)r[t]=null;const o=await this.handler.run(t,r,s),a={};for(const t in o)if(Object.hasOwnProperty.call(o,t)){const e=o[t];a[t]=e instanceof Tensor2?e:new Tensor2(e.type,e.data,e.dims)}return TRACE_FUNC_END(),a}async release(){return this.handler.dispose()}static async create(e,n,r,s){let i;TRACE_FUNC_BEGIN();let o={};if("string"==typeof e){if(i=e,"object"==typeof n&&null!==n)o=n;else if(void 0!==n)throw new TypeError("'options' must be an object.")}else if(e instanceof Uint8Array){if(i=e,"object"==typeof n&&null!==n)o=n;else if(void 0!==n)throw new TypeError("'options' must be an object.")}else{if(!(e instanceof ArrayBuffer||"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer))throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");{const t=e;let a=0,l=e.byteLength;if("object"==typeof n&&null!==n)o=n;else if("number"==typeof n){if(a=n,!Number.isSafeInteger(a))throw new RangeError("'byteOffset' must be an integer.");if(a<0||a>=t.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${t.byteLength}).`);if(l=e.byteLength-a,"number"==typeof r){if(l=r,!Number.isSafeInteger(l))throw new RangeError("'byteLength' must be an integer.");if(l<=0||a+l>t.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${t.byteLength-a}].`);if("object"==typeof s&&null!==s)o=s;else if(void 0!==s)throw new TypeError("'options' must be an object.")}else if(void 0!==r)throw new TypeError("'byteLength' must be a number.")}else if(void 0!==n)throw new TypeError("'options' must be an object.");i=new Uint8Array(t,a,l)}}const a=(o.executionProviders||[]).map((t=>"string"==typeof t?t:t.name)),l=await resolveBackend(a),F=await l.createInferenceSessionHandler(i,o);return TRACE_FUNC_END(),new t(F)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}}}}),InferenceSession2,init_inference_session=__esm({"common/dist/esm/inference-session.js"(){init_inference_session_impl(),InferenceSession2=InferenceSession}}),init_onnx_value=__esm({"common/dist/esm/onnx-value.js"(){}}),noBackendErrMsg,TrainingSession,init_training_session_impl=__esm({"common/dist/esm/training-session-impl.js"(){init_backend_impl(),init_tensor(),noBackendErrMsg="Training backend could not be resolved. Make sure you're using the correct configuration & WebAssembly files.",TrainingSession=class t{constructor(t,e,n){this.handler=t,this.hasOptimizerModel=e,this.hasEvalModel=n}get trainingInputNames(){return this.handler.inputNames}get trainingOutputNames(){return this.handler.outputNames}get evalInputNames(){if(this.hasEvalModel)return this.handler.evalInputNames;throw new Error("This training session has no evalModel loaded.")}get evalOutputNames(){if(this.hasEvalModel)return this.handler.evalOutputNames;throw new Error("This training session has no evalModel loaded.")}static async create(e,n){const r=e.evalModel||"",s=e.optimizerModel||"",i=n||{},o=(i.executionProviders||[]).map((t=>"string"==typeof t?t:t.name)),a=await resolveBackend(o);if(a.createTrainingSessionHandler){const n=await a.createTrainingSessionHandler(e.checkpointState,e.trainModel,r,s,i);return new t(n,!!e.optimizerModel,!!e.evalModel)}throw new Error(noBackendErrMsg)}typeNarrowingForRunStep(t,e,n,r,s){const i={};let o={};if("object"!=typeof n||null===n||n instanceof Tensor2||Array.isArray(n))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let a=!0;if("object"==typeof r){if(null===r)throw new TypeError("Unexpected argument[1]: cannot be null.");if(r instanceof Tensor2)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(r)){if(0===r.length)throw new TypeError("'fetches' cannot be an empty array.");a=!1;for(const t of r){if("string"!=typeof t)throw new TypeError("'fetches' must be a string array or an object.");if(-1===e.indexOf(t))throw new RangeError(`'fetches' contains invalid output name: ${t}.`);i[t]=null}if("object"==typeof s&&null!==s)o=s;else if(void 0!==s)throw new TypeError("'options' must be an object.")}else{let t=!1;const n=Object.getOwnPropertyNames(r);for(const s of e)if(-1!==n.indexOf(s)){const e=r[s];(null===e||e instanceof Tensor2)&&(t=!0,a=!1,i[s]=e)}if(t){if("object"==typeof s&&null!==s)o=s;else if(void 0!==s)throw new TypeError("'options' must be an object.")}else o=r}}else if(void 0!==r)throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(const e of t)if(void 0===n[e])throw new Error(`input '${e}' is missing in 'feeds'.`);if(a)for(const t of e)i[t]=null;return[i,o]}convertHandlerReturnTypeToMapOfTensors(t){const e={};for(const n in t)if(Object.hasOwnProperty.call(t,n)){const r=t[n];e[n]=r instanceof Tensor2?r:new Tensor2(r.type,r.data,r.dims)}return e}async lazyResetGrad(){await this.handler.lazyResetGrad()}async runTrainStep(t,e,n){const[r,s]=this.typeNarrowingForRunStep(this.trainingInputNames,this.trainingOutputNames,t,e,n),i=await this.handler.runTrainStep(t,r,s);return this.convertHandlerReturnTypeToMapOfTensors(i)}async runOptimizerStep(t){if(!this.hasOptimizerModel)throw new Error("This TrainingSession has no OptimizerModel loaded.");await this.handler.runOptimizerStep(t||{})}async runEvalStep(t,e,n){if(this.hasEvalModel){const[r,s]=this.typeNarrowingForRunStep(this.evalInputNames,this.evalOutputNames,t,e,n),i=await this.handler.runEvalStep(t,r,s);return this.convertHandlerReturnTypeToMapOfTensors(i)}throw new Error("This TrainingSession has no EvalModel loaded.")}async getParametersSize(t=!0){return this.handler.getParametersSize(t)}async loadParametersBuffer(t,e=!0){const n=await this.getParametersSize(e);if(t.length!==4*n)throw new Error("Size of the buffer passed into loadParametersBuffer must match the number of parameters in the model. Please use getParametersSize method to check.");return this.handler.loadParametersBuffer(t,e)}async getContiguousParameters(t=!0){return this.handler.getContiguousParameters(t)}async release(){return this.handler.dispose()}}}}),TrainingSession2,init_training_session=__esm({"common/dist/esm/training-session.js"(){init_training_session_impl(),TrainingSession2=TrainingSession}}),esm_exports={};__export(esm_exports,{InferenceSession:()=>InferenceSession2,TRACE:()=>TRACE,TRACE_FUNC_BEGIN:()=>TRACE_FUNC_BEGIN,TRACE_FUNC_END:()=>TRACE_FUNC_END,Tensor:()=>Tensor2,TrainingSession:()=>TrainingSession2,env:()=>env2,registerBackend:()=>registerBackend});var init_esm=__esm({"common/dist/esm/index.js"(){init_backend(),init_env(),init_inference_session(),init_tensor(),init_trace(),init_onnx_value(),init_training_session()}}),readFile,init_promises=__esm({"nodejs-ignore:node:fs/promises"(){readFile=void 0}}),NoOpLoggerProvider,ConsoleLoggerProvider,SEVERITY_VALUE,LOGGER_PROVIDER_MAP,LOGGER_DEFAULT_CONFIG,LOGGER_CONFIG_MAP,Logger,Event,EventRecord,Profiler,now;function log(t,e,n,r){if(void 0===e)return createCategorizedLogger(t);if(void 0===n)logInternal(t,e,1);else if("number"==typeof n&&void 0===r)logInternal(t,e,n);else if("string"==typeof n&&void 0===r)logInternal(t,n,1,e);else{if("string"!=typeof n||"number"!=typeof r)throw new TypeError("input is valid");logInternal(t,n,r,e)}}function createCategorizedLogger(t){return{verbose:log.verbose.bind(null,t),info:log.info.bind(null,t),warning:log.warning.bind(null,t),error:log.error.bind(null,t),fatal:log.fatal.bind(null,t)}}function logInternal(t,e,n,r){const s=LOGGER_CONFIG_MAP[r||""]||LOGGER_CONFIG_MAP[""];SEVERITY_VALUE[t]<SEVERITY_VALUE[s.minimalSeverity]||(s.logDateTime&&(e=`${(new Date).toISOString()}|${e}`),s.logSourceLocation,LOGGER_PROVIDER_MAP[s.provider].log(t,e,r))}var init_instrument=__esm({"web/lib/onnxjs/instrument.ts"(){NoOpLoggerProvider=class{log(t,e,n){}},ConsoleLoggerProvider=class{log(t,e,n){console.log(`${this.color(t)} ${n?""+n+" ":""}${e}`)}color(t){switch(t){case"verbose":return"v";case"info":return"i";case"warning":return"w";case"error":return"e";case"fatal":return"f";default:throw new Error(`unsupported severity: ${t}`)}}},SEVERITY_VALUE={verbose:1e3,info:2e3,warning:4e3,error:5e3,fatal:6e3},LOGGER_PROVIDER_MAP={none:new NoOpLoggerProvider,console:new ConsoleLoggerProvider},LOGGER_CONFIG_MAP={"":LOGGER_DEFAULT_CONFIG={provider:"console",minimalSeverity:"warning",logDateTime:!0,logSourceLocation:!1}},(t=>{function e(t){LOGGER_CONFIG_MAP={},n("",t||{})}function n(t,n){if("*"===t)e(n);else{const e=LOGGER_CONFIG_MAP[t]||LOGGER_DEFAULT_CONFIG;LOGGER_CONFIG_MAP[t]={provider:n.provider||e.provider,minimalSeverity:n.minimalSeverity||e.minimalSeverity,logDateTime:void 0===n.logDateTime?e.logDateTime:n.logDateTime,logSourceLocation:void 0===n.logSourceLocation?e.logSourceLocation:n.logSourceLocation}}}t.verbose=function(e,n){t("verbose",e,n)},t.info=function(e,n){t("info",e,n)},t.warning=function(e,n){t("warning",e,n)},t.error=function(e,n){t("error",e,n)},t.fatal=function(e,n){t("fatal",e,n)},t.reset=e,t.set=n,t.setWithEnv=function(t){const e={};t.logLevel&&(e.minimalSeverity=t.logLevel),n("",e)}})(log||(log={})),Logger=log,Event=class{constructor(t,e,n,r,s,i){this.category=t,this.name=e,this.startTime=n,this.endCallback=r,this.timer=s,this.ctx=i}async end(){return this.endCallback(this)}async checkTimer(){if(void 0===this.ctx||void 0===this.timer)throw new Error("No webgl timer found");return this.ctx.endTimer(),this.ctx.waitForQueryAndGetTime(this.timer)}},EventRecord=class{constructor(t,e,n,r){this.category=t,this.name=e,this.startTime=n,this.endTime=r}},Profiler=class{constructor(t,e,n){this._started=!1,this._flushPointer=0,this._started=!1,this._maxNumberEvents=void 0===t?1e4:t,this._flushBatchSize=void 0===e?10:e,this._flushIntervalInMilliseconds=void 0===n?5e3:n}static create(t){return void 0===t?new this:new this(t.maxNumberEvents,t.flushBatchSize,t.flushIntervalInMilliseconds)}start(){this._started=!0,this._timingEvents=[],this._flushTime=now(),this._flushPointer=0}stop(){for(this._started=!1;this._flushPointer<this._timingEvents.length;this._flushPointer++)this.logOneEvent(this._timingEvents[this._flushPointer])}event(t,e,n,r){const s=this._started?this.begin(t,e,r):void 0;let i=!1;const o=n();if(o&&"function"==typeof o.then)return i=!0,new Promise(((t,e)=>{o.then((async e=>{s&&await s.end(),t(e)}),(async t=>{s&&await s.end(),e(t)}))}));if(!i&&s){const t=s.end();if(t&&"function"==typeof t.then)return new Promise(((e,n)=>{t.then((()=>{e(o)}),(t=>{n(t)}))}))}return o}begin(t,e,n){if(!this._started)throw new Error("profiler is not started yet");if(void 0===n){const n=now();return this.flush(n),new Event(t,e,n,(t=>this.endSync(t)))}{const r=n.beginTimer();return new Event(t,e,0,(async t=>this.end(t)),r,n)}}async end(t){const e=await t.checkTimer();this._timingEvents.length<this._maxNumberEvents&&(this._timingEvents.push(new EventRecord(t.category,t.name,t.startTime,e)),this.flush(e))}endSync(t){const e=now();this._timingEvents.length<this._maxNumberEvents&&(this._timingEvents.push(new EventRecord(t.category,t.name,t.startTime,e)),this.flush(e))}logOneEvent(t){Logger.verbose(`Profiler.${t.category}`,`${(t.endTime-t.startTime).toFixed(2)}ms on event '${t.name}' at ${t.endTime.toFixed(2)}`)}flush(t){if(this._timingEvents.length-this._flushPointer>=this._flushBatchSize||t-this._flushTime>=this._flushIntervalInMilliseconds){for(const t=this._flushPointer;this._flushPointer<t+this._flushBatchSize&&this._flushPointer<this._timingEvents.length;this._flushPointer++)this.logOneEvent(this._timingEvents[this._flushPointer]);this._flushTime=now()}}get started(){return this._started}},now="undefined"!=typeof performance&&performance.now?()=>performance.now():Date.now}});function resolveOperator(t,e,n){for(const r of n){const n=r[0],s=r[1],i=r[2],o=r[3],a=r[4];if(t.opType===n)for(const t of e)if((t.domain===s||"ai.onnx"===t.domain&&""===s)&&matchSelector(t.version,i))return{opImpl:o,opInit:a}}throw new TypeError(`cannot resolve operator '${t.opType}' with opsets: ${e.map((t=>`${t.domain||"ai.onnx"} v${t.version}`)).join(", ")}`)}function matchSelector(t,e){if(e.endsWith("+")){const n=Number.parseInt(e.substring(0,e.length-1),10);return!isNaN(n)&&n<=t}if(2===e.split("-").length){const n=e.split("-"),r=Number.parseInt(n[0],10),s=Number.parseInt(n[1],10);return!isNaN(r)&&!isNaN(s)&&r<=t&&t<=s}return Number.parseInt(e,10)===t}var init_opset=__esm({"web/lib/onnxjs/opset.ts"(){}}),require_guid=__commonJS({"web/node_modules/guid-typescript/dist/guid.js"(t){t.__esModule=!0;var e=function(){function t(e){if(!e)throw new TypeError("Invalid argument; `value` has no value.");this.value=t.EMPTY,e&&t.isGuid(e)&&(this.value=e)}return t.isGuid=function(e){var n=e.toString();return e&&(e instanceof t||t.validator.test(n))},t.create=function(){return new t([t.gen(2),t.gen(1),t.gen(1),t.gen(1),t.gen(3)].join("-"))},t.createEmpty=function(){return new t("emptyguid")},t.parse=function(e){return new t(e)},t.raw=function(){return[t.gen(2),t.gen(1),t.gen(1),t.gen(1),t.gen(3)].join("-")},t.gen=function(t){for(var e="",n=0;n<t;n++)e+=(65536*(1+Math.random())|0).toString(16).substring(1);return e},t.prototype.equals=function(e){return t.isGuid(e)&&this.value===e.toString()},t.prototype.isEmpty=function(){return this.value===t.EMPTY},t.prototype.toString=function(){return this.value},t.prototype.toJSON=function(){return{value:this.value}},t.validator=new RegExp("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$","i"),t.EMPTY="00000000-0000-0000-0000-000000000000",t}();t.Guid=e}}),wasm,INT_CACHE,UINT_CACHE,pow_dbl,TWO_PWR_16_DBL,TWO_PWR_24_DBL,TWO_PWR_32_DBL,TWO_PWR_64_DBL,TWO_PWR_63_DBL,TWO_PWR_24,ZERO,UZERO,ONE,UONE,NEG_ONE,MAX_VALUE,MAX_UNSIGNED_VALUE,MIN_VALUE,LongPrototype,long_default;function Long(t,e,n){this.low=0|t,this.high=0|e,this.unsigned=!!n}function isLong(t){return!0===(t&&t.__isLong__)}function ctz32(t){var e=Math.clz32(t&-t);return t?31-e:e}function fromInt(t,e){var n,r,s;return e?(s=0<=(t>>>=0)&&t<256)&&(r=UINT_CACHE[t])?r:(n=fromBits(t,0,!0),s&&(UINT_CACHE[t]=n),n):(s=-128<=(t|=0)&&t<128)&&(r=INT_CACHE[t])?r:(n=fromBits(t,t<0?-1:0,!1),s&&(INT_CACHE[t]=n),n)}function fromNumber(t,e){if(isNaN(t))return e?UZERO:ZERO;if(e){if(t<0)return UZERO;if(t>=TWO_PWR_64_DBL)return MAX_UNSIGNED_VALUE}else{if(t<=-TWO_PWR_63_DBL)return MIN_VALUE;if(t+1>=TWO_PWR_63_DBL)return MAX_VALUE}return t<0?fromNumber(-t,e).neg():fromBits(t%TWO_PWR_32_DBL|0,t/TWO_PWR_32_DBL|0,e)}function fromBits(t,e,n){return new Long(t,e,n)}function fromString(t,e,n){if(0===t.length)throw Error("empty string");if("number"==typeof e?(n=e,e=!1):e=!!e,"NaN"===t||"Infinity"===t||"+Infinity"===t||"-Infinity"===t)return e?UZERO:ZERO;if((n=n||10)<2||36<n)throw RangeError("radix");var r;if((r=t.indexOf("-"))>0)throw Error("interior hyphen");if(0===r)return fromString(t.substring(1),e,n).neg();for(var s=fromNumber(pow_dbl(n,8)),i=ZERO,o=0;o<t.length;o+=8){var a=Math.min(8,t.length-o),l=parseInt(t.substring(o,o+a),n);if(a<8){var F=fromNumber(pow_dbl(n,a));i=i.mul(F).add(fromNumber(l))}else i=(i=i.mul(s)).add(fromNumber(l))}return i.unsigned=e,i}function fromValue(t,e){return"number"==typeof t?fromNumber(t,e):"string"==typeof t?fromString(t,e):fromBits(t.low,t.high,"boolean"==typeof e?e:t.unsigned)}var init_long=__esm({"web/node_modules/long/index.js"(){wasm=null;try{wasm=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(t){}Long.prototype.__isLong__,Object.defineProperty(Long.prototype,"__isLong__",{value:!0}),Long.isLong=isLong,INT_CACHE={},UINT_CACHE={},Long.fromInt=fromInt,Long.fromNumber=fromNumber,Long.fromBits=fromBits,pow_dbl=Math.pow,Long.fromString=fromString,Long.fromValue=fromValue,TWO_PWR_63_DBL=(TWO_PWR_64_DBL=(TWO_PWR_32_DBL=(TWO_PWR_16_DBL=65536)*TWO_PWR_16_DBL)*TWO_PWR_32_DBL)/2,TWO_PWR_24=fromInt(TWO_PWR_24_DBL=1<<24),ZERO=fromInt(0),Long.ZERO=ZERO,UZERO=fromInt(0,!0),Long.UZERO=UZERO,ONE=fromInt(1),Long.ONE=ONE,UONE=fromInt(1,!0),Long.UONE=UONE,NEG_ONE=fromInt(-1),Long.NEG_ONE=NEG_ONE,MAX_VALUE=fromBits(-1,2147483647,!1),Long.MAX_VALUE=MAX_VALUE,MAX_UNSIGNED_VALUE=fromBits(-1,-1,!0),Long.MAX_UNSIGNED_VALUE=MAX_UNSIGNED_VALUE,MIN_VALUE=fromBits(0,-2147483648,!1),Long.MIN_VALUE=MIN_VALUE,(LongPrototype=Long.prototype).toInt=function(){return this.unsigned?this.low>>>0:this.low},LongPrototype.toNumber=function(){return this.unsigned?(this.high>>>0)*TWO_PWR_32_DBL+(this.low>>>0):this.high*TWO_PWR_32_DBL+(this.low>>>0)},LongPrototype.toString=function(t){if((t=t||10)<2||36<t)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(MIN_VALUE)){var e=fromNumber(t),n=this.div(e),r=n.mul(e).sub(this);return n.toString(t)+r.toInt().toString(t)}return"-"+this.neg().toString(t)}for(var s=fromNumber(pow_dbl(t,6),this.unsigned),i=this,o="";;){var a=i.div(s),l=(i.sub(a.mul(s)).toInt()>>>0).toString(t);if((i=a).isZero())return l+o;for(;l.length<6;)l="0"+l;o=""+l+o}},LongPrototype.getHighBits=function(){return this.high},LongPrototype.getHighBitsUnsigned=function(){return this.high>>>0},LongPrototype.getLowBits=function(){return this.low},LongPrototype.getLowBitsUnsigned=function(){return this.low>>>0},LongPrototype.getNumBitsAbs=function(){if(this.isNegative())return this.eq(MIN_VALUE)?64:this.neg().getNumBitsAbs();for(var t=0!=this.high?this.high:this.low,e=31;e>0&&!(t&1<<e);e--);return 0!=this.high?e+33:e+1},LongPrototype.isZero=function(){return 0===this.high&&0===this.low},LongPrototype.eqz=LongPrototype.isZero,LongPrototype.isNegative=function(){return!this.unsigned&&this.high<0},LongPrototype.isPositive=function(){return this.unsigned||this.high>=0},LongPrototype.isOdd=function(){return!(1&~this.low)},LongPrototype.isEven=function(){return!(1&this.low)},LongPrototype.equals=function(t){return isLong(t)||(t=fromValue(t)),(this.unsigned===t.unsigned||this.high>>>31!=1||t.high>>>31!=1)&&(this.high===t.high&&this.low===t.low)},LongPrototype.eq=LongPrototype.equals,LongPrototype.notEquals=function(t){return!this.eq(t)},LongPrototype.neq=LongPrototype.notEquals,LongPrototype.ne=LongPrototype.notEquals,LongPrototype.lessThan=function(t){return this.comp(t)<0},LongPrototype.lt=LongPrototype.lessThan,LongPrototype.lessThanOrEqual=function(t){return this.comp(t)<=0},LongPrototype.lte=LongPrototype.lessThanOrEqual,LongPrototype.le=LongPrototype.lessThanOrEqual,LongPrototype.greaterThan=function(t){return this.comp(t)>0},LongPrototype.gt=LongPrototype.greaterThan,LongPrototype.greaterThanOrEqual=function(t){return this.comp(t)>=0},LongPrototype.gte=LongPrototype.greaterThanOrEqual,LongPrototype.ge=LongPrototype.greaterThanOrEqual,LongPrototype.compare=function(t){if(isLong(t)||(t=fromValue(t)),this.eq(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?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},LongPrototype.comp=LongPrototype.compare,LongPrototype.negate=function(){return!this.unsigned&&this.eq(MIN_VALUE)?MIN_VALUE:this.not().add(ONE)},LongPrototype.neg=LongPrototype.negate,LongPrototype.add=function(t){isLong(t)||(t=fromValue(t));var e=this.high>>>16,n=65535&this.high,r=this.low>>>16,s=65535&this.low,i=t.high>>>16,o=65535&t.high,a=t.low>>>16,l=0,F=0,U=0,c=0;return U+=(c+=s+(65535&t.low))>>>16,F+=(U+=r+a)>>>16,l+=(F+=n+o)>>>16,l+=e+i,fromBits((U&=65535)<<16|(c&=65535),(l&=65535)<<16|(F&=65535),this.unsigned)},LongPrototype.subtract=function(t){return isLong(t)||(t=fromValue(t)),this.add(t.neg())},LongPrototype.sub=LongPrototype.subtract,LongPrototype.multiply=function(t){if(this.isZero())return this;if(isLong(t)||(t=fromValue(t)),wasm)return fromBits(wasm.mul(this.low,this.high,t.low,t.high),wasm.get_high(),this.unsigned);if(t.isZero())return this.unsigned?UZERO:ZERO;if(this.eq(MIN_VALUE))return t.isOdd()?MIN_VALUE:ZERO;if(t.eq(MIN_VALUE))return this.isOdd()?MIN_VALUE:ZERO;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(TWO_PWR_24)&&t.lt(TWO_PWR_24))return fromNumber(this.toNumber()*t.toNumber(),this.unsigned);var e=this.high>>>16,n=65535&this.high,r=this.low>>>16,s=65535&this.low,i=t.high>>>16,o=65535&t.high,a=t.low>>>16,l=65535&t.low,F=0,U=0,c=0,u=0;return c+=(u+=s*l)>>>16,U+=(c+=r*l)>>>16,c&=65535,U+=(c+=s*a)>>>16,F+=(U+=n*l)>>>16,U&=65535,F+=(U+=r*a)>>>16,U&=65535,F+=(U+=s*o)>>>16,F+=e*l+n*a+r*o+s*i,fromBits((c&=65535)<<16|(u&=65535),(F&=65535)<<16|(U&=65535),this.unsigned)},LongPrototype.mul=LongPrototype.multiply,LongPrototype.divide=function(t){if(isLong(t)||(t=fromValue(t)),t.isZero())throw Error("division by zero");var e,n,r;if(wasm)return this.unsigned||-2147483648!==this.high||-1!==t.low||-1!==t.high?fromBits((this.unsigned?wasm.div_u:wasm.div_s)(this.low,this.high,t.low,t.high),wasm.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?UZERO:ZERO;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return UZERO;if(t.gt(this.shru(1)))return UONE;r=UZERO}else{if(this.eq(MIN_VALUE))return t.eq(ONE)||t.eq(NEG_ONE)?MIN_VALUE:t.eq(MIN_VALUE)?ONE:(e=this.shr(1).div(t).shl(1)).eq(ZERO)?t.isNegative()?ONE:NEG_ONE:(n=this.sub(t.mul(e)),r=e.add(n.div(t)));if(t.eq(MIN_VALUE))return this.unsigned?UZERO:ZERO;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();r=ZERO}for(n=this;n.gte(t);){e=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var s=Math.ceil(Math.log(e)/Math.LN2),i=s<=48?1:pow_dbl(2,s-48),o=fromNumber(e),a=o.mul(t);a.isNegative()||a.gt(n);)a=(o=fromNumber(e-=i,this.unsigned)).mul(t);o.isZero()&&(o=ONE),r=r.add(o),n=n.sub(a)}return r},LongPrototype.div=LongPrototype.divide,LongPrototype.modulo=function(t){return isLong(t)||(t=fromValue(t)),wasm?fromBits((this.unsigned?wasm.rem_u:wasm.rem_s)(this.low,this.high,t.low,t.high),wasm.get_high(),this.unsigned):this.sub(this.div(t).mul(t))},LongPrototype.mod=LongPrototype.modulo,LongPrototype.rem=LongPrototype.modulo,LongPrototype.not=function(){return fromBits(~this.low,~this.high,this.unsigned)},LongPrototype.countLeadingZeros=function(){return this.high?Math.clz32(this.high):Math.clz32(this.low)+32},LongPrototype.clz=LongPrototype.countLeadingZeros,LongPrototype.countTrailingZeros=function(){return this.low?ctz32(this.low):ctz32(this.high)+32},LongPrototype.ctz=LongPrototype.countTrailingZeros,LongPrototype.and=function(t){return isLong(t)||(t=fromValue(t)),fromBits(this.low&t.low,this.high&t.high,this.unsigned)},LongPrototype.or=function(t){return isLong(t)||(t=fromValue(t)),fromBits(this.low|t.low,this.high|t.high,this.unsigned)},LongPrototype.xor=function(t){return isLong(t)||(t=fromValue(t)),fromBits(this.low^t.low,this.high^t.high,this.unsigned)},LongPrototype.shiftLeft=function(t){return isLong(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?fromBits(this.low<<t,this.high<<t|this.low>>>32-t,this.unsigned):fromBits(0,this.low<<t-32,this.unsigned)},LongPrototype.shl=LongPrototype.shiftLeft,LongPrototype.shiftRight=function(t){return isLong(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?fromBits(this.low>>>t|this.high<<32-t,this.high>>t,this.unsigned):fromBits(this.high>>t-32,this.high>=0?0:-1,this.unsigned)},LongPrototype.shr=LongPrototype.shiftRight,LongPrototype.shiftRightUnsigned=function(t){return isLong(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?fromBits(this.low>>>t|this.high<<32-t,this.high>>>t,this.unsigned):fromBits(32===t?this.high:this.high>>>t-32,0,this.unsigned)},LongPrototype.shru=LongPrototype.shiftRightUnsigned,LongPrototype.shr_u=LongPrototype.shiftRightUnsigned,LongPrototype.rotateLeft=function(t){var e;return isLong(t)&&(t=t.toInt()),0==(t&=63)?this:32===t?fromBits(this.high,this.low,this.unsigned):t<32?(e=32-t,fromBits(this.low<<t|this.high>>>e,this.high<<t|this.low>>>e,this.unsigned)):(e=32-(t-=32),fromBits(this.high<<t|this.low>>>e,this.low<<t|this.high>>>e,this.unsigned))},LongPrototype.rotl=LongPrototype.rotateLeft,LongPrototype.rotateRight=function(t){var e;return isLong(t)&&(t=t.toInt()),0==(t&=63)?this:32===t?fromBits(this.high,this.low,this.unsigned):t<32?(e=32-t,fromBits(this.high<<e|this.low>>>t,this.low<<e|this.high>>>t,this.unsigned)):(e=32-(t-=32),fromBits(this.low<<e|this.high>>>t,this.high<<e|this.low>>>t,this.unsigned))},LongPrototype.rotr=LongPrototype.rotateRight,LongPrototype.toSigned=function(){return this.unsigned?fromBits(this.low,this.high,!1):this},LongPrototype.toUnsigned=function(){return this.unsigned?this:fromBits(this.low,this.high,!0)},LongPrototype.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()},LongPrototype.toBytesLE=function(){var t=this.high,e=this.low;return[255&e,e>>>8&255,e>>>16&255,e>>>24,255&t,t>>>8&255,t>>>16&255,t>>>24]},LongPrototype.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,255&t,e>>>24,e>>>16&255,e>>>8&255,255&e]},Long.fromBytes=function(t,e,n){return n?Long.fromBytesLE(t,e):Long.fromBytesBE(t,e)},Long.fromBytesLE=function(t,e){return new Long(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)},Long.fromBytesBE=function(t,e){return new Long(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)},long_default=Long}}),flatbuffers,init_flatbuffers=__esm({"web/node_modules/flatbuffers/js/flatbuffers.mjs"(){flatbuffers={},flatbuffers.Table,flatbuffers.SIZEOF_SHORT=2,flatbuffers.SIZEOF_INT=4,flatbuffers.FILE_IDENTIFIER_LENGTH=4,flatbuffers.SIZE_PREFIX_LENGTH=4,flatbuffers.Encoding={UTF8_BYTES:1,UTF16_STRING:2},flatbuffers.int32=new Int32Array(2),flatbuffers.float32=new Float32Array(flatbuffers.int32.buffer),flatbuffers.float64=new Float64Array(flatbuffers.int32.buffer),flatbuffers.isLittleEndian=1===new Uint16Array(new Uint8Array([1,0]).buffer)[0],flatbuffers.Long=function(t,e){this.low=0|t,this.high=0|e},flatbuffers.Long.create=function(t,e){return 0==t&&0==e?flatbuffers.Long.ZERO:new flatbuffers.Long(t,e)},flatbuffers.Long.prototype.toFloat64=function(){return(this.low>>>0)+4294967296*this.high},flatbuffers.Long.prototype.equals=function(t){return this.low==t.low&&this.high==t.high},flatbuffers.Long.ZERO=new flatbuffers.Long(0,0),flatbuffers.Builder=function(t){if(t)e=t;else var e=1024;this.bb=flatbuffers.ByteBuffer.allocate(e),this.space=e,this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1},flatbuffers.Builder.prototype.clear=function(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1},flatbuffers.Builder.prototype.forceDefaults=function(t){this.force_defaults=t},flatbuffers.Builder.prototype.dataBuffer=function(){return this.bb},flatbuffers.Builder.prototype.asUint8Array=function(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())},flatbuffers.Builder.prototype.prep=function(t,e){t>this.minalign&&(this.minalign=t);for(var n=1+~(this.bb.capacity()-this.space+e)&t-1;this.space<n+t+e;){var r=this.bb.capacity();this.bb=flatbuffers.Builder.growByteBuffer(this.bb),this.space+=this.bb.capacity()-r}this.pad(n)},flatbuffers.Builder.prototype.pad=function(t){for(var e=0;e<t;e++)this.bb.writeInt8(--this.space,0)},flatbuffers.Builder.prototype.writeInt8=function(t){this.bb.writeInt8(this.space-=1,t)},flatbuffers.Builder.prototype.writeInt16=function(t){this.bb.writeInt16(this.space-=2,t)},flatbuffers.Builder.prototype.writeInt32=function(t){this.bb.writeInt32(this.space-=4,t)},flatbuffers.Builder.prototype.writeInt64=function(t){this.bb.writeInt64(this.space-=8,t)},flatbuffers.Builder.prototype.writeFloat32=function(t){this.bb.writeFloat32(this.space-=4,t)},flatbuffers.Builder.prototype.writeFloat64=function(t){this.bb.writeFloat64(this.space-=8,t)},flatbuffers.Builder.prototype.addInt8=function(t){this.prep(1,0),this.writeInt8(t)},flatbuffers.Builder.prototype.addInt16=function(t){this.prep(2,0),this.writeInt16(t)},flatbuffers.Builder.prototype.addInt32=function(t){this.prep(4,0),this.writeInt32(t)},flatbuffers.Builder.prototype.addInt64=function(t){this.prep(8,0),this.writeInt64(t)},flatbuffers.Builder.prototype.addFloat32=function(t){this.prep(4,0),this.writeFloat32(t)},flatbuffers.Builder.prototype.addFloat64=function(t){this.prep(8,0),this.writeFloat64(t)},flatbuffers.Builder.prototype.addFieldInt8=function(t,e,n){(this.force_defaults||e!=n)&&(this.addInt8(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldInt16=function(t,e,n){(this.force_defaults||e!=n)&&(this.addInt16(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldInt32=function(t,e,n){(this.force_defaults||e!=n)&&(this.addInt32(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldInt64=function(t,e,n){!this.force_defaults&&e.equals(n)||(this.addInt64(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldFloat32=function(t,e,n){(this.force_defaults||e!=n)&&(this.addFloat32(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldFloat64=function(t,e,n){(this.force_defaults||e!=n)&&(this.addFloat64(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldOffset=function(t,e,n){(this.force_defaults||e!=n)&&(this.addOffset(e),this.slot(t))},flatbuffers.Builder.prototype.addFieldStruct=function(t,e,n){e!=n&&(this.nested(e),this.slot(t))},flatbuffers.Builder.prototype.nested=function(t){if(t!=this.offset())throw new Error("FlatBuffers: struct must be serialized inline.")},flatbuffers.Builder.prototype.notNested=function(){if(this.isNested)throw new Error("FlatBuffers: object serialization must not be nested.")},flatbuffers.Builder.prototype.slot=function(t){this.vtable[t]=this.offset()},flatbuffers.Builder.prototype.offset=function(){return this.bb.capacity()-this.space},flatbuffers.Builder.growByteBuffer=function(t){var e=t.capacity();if(3221225472&e)throw new Error("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");var n=e<<1,r=flatbuffers.ByteBuffer.allocate(n);return r.setPosition(n-e),r.bytes().set(t.bytes(),n-e),r},flatbuffers.Builder.prototype.addOffset=function(t){this.prep(flatbuffers.SIZEOF_INT,0),this.writeInt32(this.offset()-t+flatbuffers.SIZEOF_INT)},flatbuffers.Builder.prototype.startObject=function(t){this.notNested(),null==this.vtable&&(this.vtable=[]),this.vtable_in_use=t;for(var e=0;e<t;e++)this.vtable[e]=0;this.isNested=!0,this.object_start=this.offset()},flatbuffers.Builder.prototype.endObject=function(){if(null==this.vtable||!this.isNested)throw new Error("FlatBuffers: endObject called without startObject");this.addInt32(0);for(var t=this.offset(),e=this.vtable_in_use-1;e>=0&&0==this.vtable[e];e--);for(var n=e+1;e>=0;e--)this.addInt16(0!=this.vtable[e]?t-this.vtable[e]:0);this.addInt16(t-this.object_start);var r=(n+2)*flatbuffers.SIZEOF_SHORT;this.addInt16(r);var s=0,i=this.space;t:for(e=0;e<this.vtables.length;e++){var o=this.bb.capacity()-this.vtables[e];if(r==this.bb.readInt16(o)){for(var a=flatbuffers.SIZEOF_SHORT;a<r;a+=flatbuffers.SIZEOF_SHORT)if(this.bb.readInt16(i+a)!=this.bb.readInt16(o+a))continue t;s=this.vtables[e];break}}return s?(this.space=this.bb.capacity()-t,this.bb.writeInt32(this.space,s-t)):(this.vtables.push(this.offset()),this.bb.writeInt32(this.bb.capacity()-t,this.offset()-t)),this.isNested=!1,t},flatbuffers.Builder.prototype.finish=function(t,e,n){var r=n?flatbuffers.SIZE_PREFIX_LENGTH:0;if(e){var s=e;if(this.prep(this.minalign,flatbuffers.SIZEOF_INT+flatbuffers.FILE_IDENTIFIER_LENGTH+r),s.length!=flatbuffers.FILE_IDENTIFIER_LENGTH)throw new Error("FlatBuffers: file identifier must be length "+flatbuffers.FILE_IDENTIFIER_LENGTH);for(var i=flatbuffers.FILE_IDENTIFIER_LENGTH-1;i>=0;i--)this.writeInt8(s.charCodeAt(i))}this.prep(this.minalign,flatbuffers.SIZEOF_INT+r),this.addOffset(t),r&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space)},flatbuffers.Builder.prototype.finishSizePrefixed=function(t,e){this.finish(t,e,!0)},flatbuffers.Builder.prototype.requiredField=function(t,e){var n=this.bb.capacity()-t,r=n-this.bb.readInt32(n);if(!(0!=this.bb.readInt16(r+e)))throw new Error("FlatBuffers: field "+e+" must be set")},flatbuffers.Builder.prototype.startVector=function(t,e,n){this.notNested(),this.vector_num_elems=e,this.prep(flatbuffers.SIZEOF_INT,t*e),this.prep(n,t*e)},flatbuffers.Builder.prototype.endVector=function(){return this.writeInt32(this.vector_num_elems),this.offset()},flatbuffers.Builder.prototype.createString=function(t){if(t instanceof Uint8Array)var e=t;else{e=[];for(var n=0;n<t.length;){var r,s=t.charCodeAt(n++);if(s<55296||s>=56320)r=s;else r=(s<<10)+t.charCodeAt(n++)+-56613888;r<128?e.push(r):(r<2048?e.push(r>>6&31|192):(r<65536?e.push(r>>12&15|224):e.push(r>>18&7|240,r>>12&63|128),e.push(r>>6&63|128)),e.push(63&r|128))}}this.addInt8(0),this.startVector(1,e.length,1),this.bb.setPosition(this.space-=e.length);n=0;for(var i=this.space,o=this.bb.bytes();n<e.length;n++)o[i++]=e[n];return this.endVector()},flatbuffers.Builder.prototype.createLong=function(t,e){return flatbuffers.Long.create(t,e)},flatbuffers.ByteBuffer=function(t){this.bytes_=t,this.position_=0},flatbuffers.ByteBuffer.allocate=function(t){return new flatbuffers.ByteBuffer(new Uint8Array(t))},flatbuffers.ByteBuffer.prototype.clear=function(){this.position_=0},flatbuffers.ByteBuffer.prototype.bytes=function(){return this.bytes_},flatbuffers.ByteBuffer.prototype.position=function(){return this.position_},flatbuffers.ByteBuffer.prototype.setPosition=function(t){this.position_=t},flatbuffers.ByteBuffer.prototype.capacity=function(){return this.bytes_.length},flatbuffers.ByteBuffer.prototype.readInt8=function(t){return this.readUint8(t)<<24>>24},flatbuffers.ByteBuffer.prototype.readUint8=function(t){return this.bytes_[t]},flatbuffers.ByteBuffer.prototype.readInt16=function(t){return this.readUint16(t)<<16>>16},flatbuffers.ByteBuffer.prototype.readUint16=function(t){return this.bytes_[t]|this.bytes_[t+1]<<8},flatbuffers.ByteBuffer.prototype.readInt32=function(t){return this.bytes_[t]|this.bytes_[t+1]<<8|this.bytes_[t+2]<<16|this.bytes_[t+3]<<24},flatbuffers.ByteBuffer.prototype.readUint32=function(t){return this.readInt32(t)>>>0},flatbuffers.ByteBuffer.prototype.readInt64=function(t){return new flatbuffers.Long(this.readInt32(t),this.readInt32(t+4))},flatbuffers.ByteBuffer.prototype.readUint64=function(t){return new flatbuffers.Long(this.readUint32(t),this.readUint32(t+4))},flatbuffers.ByteBuffer.prototype.readFloat32=function(t){return flatbuffers.int32[0]=this.readInt32(t),flatbuffers.float32[0]},flatbuffers.ByteBuffer.prototype.readFloat64=function(t){return flatbuffers.int32[flatbuffers.isLittleEndian?0:1]=this.readInt32(t),flatbuffers.int32[flatbuffers.isLittleEndian?1:0]=this.readInt32(t+4),flatbuffers.float64[0]},flatbuffers.ByteBuffer.prototype.writeInt8=function(t,e){this.bytes_[t]=e},flatbuffers.ByteBuffer.prototype.writeUint8=function(t,e){this.bytes_[t]=e},flatbuffers.ByteBuffer.prototype.writeInt16=function(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8},flatbuffers.ByteBuffer.prototype.writeUint16=function(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8},flatbuffers.ByteBuffer.prototype.writeInt32=function(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24},flatbuffers.ByteBuffer.prototype.writeUint32=function(t,e){this.bytes_[t]=e,this.bytes_[t+1]=e>>8,this.bytes_[t+2]=e>>16,this.bytes_[t+3]=e>>24},flatbuffers.ByteBuffer.prototype.writeInt64=function(t,e){this.writeInt32(t,e.low),this.writeInt32(t+4,e.high)},flatbuffers.ByteBuffer.prototype.writeUint64=function(t,e){this.writeUint32(t,e.low),this.writeUint32(t+4,e.high)},flatbuffers.ByteBuffer.prototype.writeFloat32=function(t,e){flatbuffers.float32[0]=e,this.writeInt32(t,flatbuffers.int32[0])},flatbuffers.ByteBuffer.prototype.writeFloat64=function(t,e){flatbuffers.float64[0]=e,this.writeInt32(t,flatbuffers.int32[flatbuffers.isLittleEndian?0:1]),this.writeInt32(t+4,flatbuffers.int32[flatbuffers.isLittleEndian?1:0])},flatbuffers.ByteBuffer.prototype.getBufferIdentifier=function(){if(this.bytes_.length<this.position_+flatbuffers.SIZEOF_INT+flatbuffers.FILE_IDENTIFIER_LENGTH)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");for(var t="",e=0;e<flatbuffers.FILE_IDENTIFIER_LENGTH;e++)t+=String.fromCharCode(this.readInt8(this.position_+flatbuffers.SIZEOF_INT+e));return t},flatbuffers.ByteBuffer.prototype.__offset=function(t,e){var n=t-this.readInt32(t);return e<this.readInt16(n)?this.readInt16(n+e):0},flatbuffers.ByteBuffer.prototype.__union=function(t,e){return t.bb_pos=e+this.readInt32(e),t.bb=this,t},flatbuffers.ByteBuffer.prototype.__string=function(t,e){t+=this.readInt32(t);var n=this.readInt32(t),r="",s=0;if(t+=flatbuffers.SIZEOF_INT,e===flatbuffers.Encoding.UTF8_BYTES)return this.bytes_.subarray(t,t+n);for(;s<n;){var i,o=this.readUint8(t+s++);if(o<192)i=o;else{var a=this.readUint8(t+s++);if(o<224)i=(31&o)<<6|63&a;else{var l=this.readUint8(t+s++);if(o<240)i=(15&o)<<12|(63&a)<<6|63&l;else i=(7&o)<<18|(63&a)<<12|(63&l)<<6|63&this.readUint8(t+s++)}}i<65536?r+=String.fromCharCode(i):(i-=65536,r+=String.fromCharCode(55296+(i>>10),56320+(1023&i)))}return r},flatbuffers.ByteBuffer.prototype.__indirect=function(t){return t+this.readInt32(t)},flatbuffers.ByteBuffer.prototype.__vector=function(t){return t+this.readInt32(t)+flatbuffers.SIZEOF_INT},flatbuffers.ByteBuffer.prototype.__vector_len=function(t){return this.readInt32(t+this.readInt32(t))},flatbuffers.ByteBuffer.prototype.__has_identifier=function(t){if(t.length!=flatbuffers.FILE_IDENTIFIER_LENGTH)throw new Error("FlatBuffers: file identifier must be length "+flatbuffers.FILE_IDENTIFIER_LENGTH);for(var e=0;e<flatbuffers.FILE_IDENTIFIER_LENGTH;e++)if(t.charCodeAt(e)!=this.readInt8(this.position_+flatbuffers.SIZEOF_INT+e))return!1;return!0},flatbuffers.ByteBuffer.prototype.createLong=function(t,e){return flatbuffers.Long.create(t,e)}}}),onnxruntime,init_ort_generated=__esm({"web/lib/onnxjs/ort-schema/flatbuffers/ort-generated.ts"(){init_flatbuffers(),(t=>{let e;(t=>{let e;(t=>{let e;var n;(n=e=t.AttributeType||(t.AttributeType={}))[n.UNDEFINED=0]="UNDEFINED",n[n.FLOAT=1]="FLOAT",n[n.INT=2]="INT",n[n.STRING=3]="STRING",n[n.TENSOR=4]="TENSOR",n[n.GRAPH=5]="GRAPH",n[n.FLOATS=6]="FLOATS",n[n.INTS=7]="INTS",n[n.STRINGS=8]="STRINGS",n[n.TENSORS=9]="TENSORS",n[n.GRAPHS=10]="GRAPHS",n[n.SPARSE_TENSOR=11]="SPARSE_TENSOR",n[n.SPARSE_TENSORS=12]="SPARSE_TENSORS"})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{let e;var n;(n=e=t.DimensionValueType||(t.DimensionValueType={}))[n.UNKNOWN=0]="UNKNOWN",n[n.VALUE=1]="VALUE",n[n.PARAM=2]="PARAM"})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{let e;var n;(n=e=t.TensorDataType||(t.TensorDataType={}))[n.UNDEFINED=0]="UNDEFINED",n[n.FLOAT=1]="FLOAT",n[n.UINT8=2]="UINT8",n[n.INT8=3]="INT8",n[n.UINT16=4]="UINT16",n[n.INT16=5]="INT16",n[n.INT32=6]="INT32",n[n.INT64=7]="INT64",n[n.STRING=8]="STRING",n[n.BOOL=9]="BOOL",n[n.FLOAT16=10]="FLOAT16",n[n.DOUBLE=11]="DOUBLE",n[n.UINT32=12]="UINT32",n[n.UINT64=13]="UINT64",n[n.COMPLEX64=14]="COMPLEX64",n[n.COMPLEX128=15]="COMPLEX128",n[n.BFLOAT16=16]="BFLOAT16",n[n.FLOAT8E4M3FN=17]="FLOAT8E4M3FN",n[n.FLOAT8E4M3FNUZ=18]="FLOAT8E4M3FNUZ",n[n.FLOAT8E5M2=19]="FLOAT8E5M2",n[n.FLOAT8E5M2FNUZ=20]="FLOAT8E5M2FNUZ"})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{let e;var n;(n=e=t.NodeType||(t.NodeType={}))[n.Primitive=0]="Primitive",n[n.Fused=1]="Fused"})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{let e;var n;(n=e=t.TypeInfoValue||(t.TypeInfoValue={}))[n.NONE=0]="NONE",n[n.tensor_type=1]="tensor_type",n[n.sequence_type=2]="sequence_type",n[n.map_type=3]="map_type"})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsShape(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsShape(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}dim(e,n){let r=this.bb.__offset(this.bb_pos,4);return r?(n||new t.experimental.fbs.Dimension).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}dimLength(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__vector_len(this.bb_pos+t):0}static startShape(t){t.startObject(1)}static addDim(t,e){t.addFieldOffset(0,e,0)}static createDimVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startDimVector(t,e){t.startVector(4,e,4)}static endShape(t){return t.endObject()}static createShape(t,e){return n.startShape(t),n.addDim(t,e),n.endShape(t)}}e.Shape=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsDimension(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsDimension(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}value(e){let n=this.bb.__offset(this.bb_pos,4);return n?(e||new t.experimental.fbs.DimensionValue).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}denotation(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}static startDimension(t){t.startObject(2)}static addValue(t,e){t.addFieldOffset(0,e,0)}static addDenotation(t,e){t.addFieldOffset(1,e,0)}static endDimension(t){return t.endObject()}static createDimension(t,e,r){return n.startDimension(t),n.addValue(t,e),n.addDenotation(t,r),n.endDimension(t)}}e.Dimension=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{class e{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsDimensionValue(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsDimensionValue(t,n){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}dimType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt8(this.bb_pos+t):0}dimValue(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readInt64(this.bb_pos+t):this.bb.createLong(0,0)}dimParam(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__string(this.bb_pos+e,t):null}static startDimensionValue(t){t.startObject(3)}static addDimType(t,e){t.addFieldInt8(0,e,0)}static addDimValue(t,e){t.addFieldInt64(1,e,t.createLong(0,0))}static addDimParam(t,e){t.addFieldOffset(2,e,0)}static endDimensionValue(t){return t.endObject()}static createDimensionValue(t,n,r,s){return e.startDimensionValue(t),e.addDimType(t,n),e.addDimValue(t,r),e.addDimParam(t,s),e.endDimensionValue(t)}}t.DimensionValue=e})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsTensorTypeAndShape(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsTensorTypeAndShape(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}elemType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt32(this.bb_pos+t):0}shape(e){let n=this.bb.__offset(this.bb_pos,6);return n?(e||new t.experimental.fbs.Shape).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startTensorTypeAndShape(t){t.startObject(2)}static addElemType(t,e){t.addFieldInt32(0,e,0)}static addShape(t,e){t.addFieldOffset(1,e,0)}static endTensorTypeAndShape(t){return t.endObject()}static createTensorTypeAndShape(t,e,r){return n.startTensorTypeAndShape(t),n.addElemType(t,e),n.addShape(t,r),n.endTensorTypeAndShape(t)}}e.TensorTypeAndShape=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsMapType(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsMapType(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}keyType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt32(this.bb_pos+t):0}valueType(e){let n=this.bb.__offset(this.bb_pos,6);return n?(e||new t.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startMapType(t){t.startObject(2)}static addKeyType(t,e){t.addFieldInt32(0,e,0)}static addValueType(t,e){t.addFieldOffset(1,e,0)}static endMapType(t){return t.endObject()}static createMapType(t,e,r){return n.startMapType(t),n.addKeyType(t,e),n.addValueType(t,r),n.endMapType(t)}}e.MapType=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSequenceType(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSequenceType(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}elemType(e){let n=this.bb.__offset(this.bb_pos,4);return n?(e||new t.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startSequenceType(t){t.startObject(1)}static addElemType(t,e){t.addFieldOffset(0,e,0)}static endSequenceType(t){return t.endObject()}static createSequenceType(t,e){return n.startSequenceType(t),n.addElemType(t,e),n.endSequenceType(t)}}e.SequenceType=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(e=t.fbs||(t.fbs={})).EdgeEnd=class{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}nodeIndex(){return this.bb.readUint32(this.bb_pos)}srcArgIndex(){return this.bb.readInt32(this.bb_pos+4)}dstArgIndex(){return this.bb.readInt32(this.bb_pos+8)}static createEdgeEnd(t,e,n,r){return t.prep(4,12),t.writeInt32(r),t.writeInt32(n),t.writeInt32(e),t.offset()}}})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsNodeEdge(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsNodeEdge(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}nodeIndex(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint32(this.bb_pos+t):0}inputEdges(e,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new t.experimental.fbs.EdgeEnd).__init(this.bb.__vector(this.bb_pos+r)+12*e,this.bb):null}inputEdgesLength(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__vector_len(this.bb_pos+t):0}outputEdges(e,n){let r=this.bb.__offset(this.bb_pos,8);return r?(n||new t.experimental.fbs.EdgeEnd).__init(this.bb.__vector(this.bb_pos+r)+12*e,this.bb):null}outputEdgesLength(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__vector_len(this.bb_pos+t):0}static startNodeEdge(t){t.startObject(3)}static addNodeIndex(t,e){t.addFieldInt32(0,e,0)}static addInputEdges(t,e){t.addFieldOffset(1,e,0)}static startInputEdgesVector(t,e){t.startVector(12,e,4)}static addOutputEdges(t,e){t.addFieldOffset(2,e,0)}static startOutputEdgesVector(t,e){t.startVector(12,e,4)}static endNodeEdge(t){return t.endObject()}static createNodeEdge(t,e,r,s){return n.startNodeEdge(t),n.addNodeIndex(t,e),n.addInputEdges(t,r),n.addOutputEdges(t,s),n.endNodeEdge(t)}}e.NodeEdge=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsNode(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsNode(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}name(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}docString(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}domain(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__string(this.bb_pos+e,t):null}sinceVersion(){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readInt32(this.bb_pos+t):0}index(){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.readUint32(this.bb_pos+t):0}opType(t){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__string(this.bb_pos+e,t):null}type(){let t=this.bb.__offset(this.bb_pos,16);return t?this.bb.readInt32(this.bb_pos+t):0}executionProviderType(t){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__string(this.bb_pos+e,t):null}inputs(t,e){let n=this.bb.__offset(this.bb_pos,20);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}inputsLength(){let t=this.bb.__offset(this.bb_pos,20);return t?this.bb.__vector_len(this.bb_pos+t):0}outputs(t,e){let n=this.bb.__offset(this.bb_pos,22);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}outputsLength(){let t=this.bb.__offset(this.bb_pos,22);return t?this.bb.__vector_len(this.bb_pos+t):0}attributes(e,n){let r=this.bb.__offset(this.bb_pos,24);return r?(n||new t.experimental.fbs.Attribute).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}attributesLength(){let t=this.bb.__offset(this.bb_pos,24);return t?this.bb.__vector_len(this.bb_pos+t):0}inputArgCounts(t){let e=this.bb.__offset(this.bb_pos,26);return e?this.bb.readInt32(this.bb.__vector(this.bb_pos+e)+4*t):0}inputArgCountsLength(){let t=this.bb.__offset(this.bb_pos,26);return t?this.bb.__vector_len(this.bb_pos+t):0}inputArgCountsArray(){let t=this.bb.__offset(this.bb_pos,26);return t?new Int32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+t),this.bb.__vector_len(this.bb_pos+t)):null}implicitInputs(t,e){let n=this.bb.__offset(this.bb_pos,28);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}implicitInputsLength(){let t=this.bb.__offset(this.bb_pos,28);return t?this.bb.__vector_len(this.bb_pos+t):0}static startNode(t){t.startObject(13)}static addName(t,e){t.addFieldOffset(0,e,0)}static addDocString(t,e){t.addFieldOffset(1,e,0)}static addDomain(t,e){t.addFieldOffset(2,e,0)}static addSinceVersion(t,e){t.addFieldInt32(3,e,0)}static addIndex(t,e){t.addFieldInt32(4,e,0)}static addOpType(t,e){t.addFieldOffset(5,e,0)}static addType(t,e){t.addFieldInt32(6,e,0)}static addExecutionProviderType(t,e){t.addFieldOffset(7,e,0)}static addInputs(t,e){t.addFieldOffset(8,e,0)}static createInputsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startInputsVector(t,e){t.startVector(4,e,4)}static addOutputs(t,e){t.addFieldOffset(9,e,0)}static createOutputsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startOutputsVector(t,e){t.startVector(4,e,4)}static addAttributes(t,e){t.addFieldOffset(10,e,0)}static createAttributesVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startAttributesVector(t,e){t.startVector(4,e,4)}static addInputArgCounts(t,e){t.addFieldOffset(11,e,0)}static createInputArgCountsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addInt32(e[n]);return t.endVector()}static startInputArgCountsVector(t,e){t.startVector(4,e,4)}static addImplicitInputs(t,e){t.addFieldOffset(12,e,0)}static createImplicitInputsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startImplicitInputsVector(t,e){t.startVector(4,e,4)}static endNode(t){return t.endObject()}static createNode(t,e,r,s,i,o,a,l,F,U,c,u,Q,d){return n.startNode(t),n.addName(t,e),n.addDocString(t,r),n.addDomain(t,s),n.addSinceVersion(t,i),n.addIndex(t,o),n.addOpType(t,a),n.addType(t,l),n.addExecutionProviderType(t,F),n.addInputs(t,U),n.addOutputs(t,c),n.addAttributes(t,u),n.addInputArgCounts(t,Q),n.addImplicitInputs(t,d),n.endNode(t)}}e.Node=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsValueInfo(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsValueInfo(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}name(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}docString(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}type(e){let n=this.bb.__offset(this.bb_pos,8);return n?(e||new t.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startValueInfo(t){t.startObject(3)}static addName(t,e){t.addFieldOffset(0,e,0)}static addDocString(t,e){t.addFieldOffset(1,e,0)}static addType(t,e){t.addFieldOffset(2,e,0)}static endValueInfo(t){return t.endObject()}static createValueInfo(t,e,r,s){return n.startValueInfo(t),n.addName(t,e),n.addDocString(t,r),n.addType(t,s),n.endValueInfo(t)}}e.ValueInfo=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{class e{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsTypeInfo(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsTypeInfo(t,n){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}denotation(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}valueType(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint8(this.bb_pos+t):0}value(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__union(t,this.bb_pos+e):null}static startTypeInfo(t){t.startObject(3)}static addDenotation(t,e){t.addFieldOffset(0,e,0)}static addValueType(t,e){t.addFieldInt8(1,e,0)}static addValue(t,e){t.addFieldOffset(2,e,0)}static endTypeInfo(t){return t.endObject()}static createTypeInfo(t,n,r,s){return e.startTypeInfo(t),e.addDenotation(t,n),e.addValueType(t,r),e.addValue(t,s),e.endTypeInfo(t)}}t.TypeInfo=e})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{class e{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsOperatorSetId(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsOperatorSetId(t,n){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}domain(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}version(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readInt64(this.bb_pos+t):this.bb.createLong(0,0)}static startOperatorSetId(t){t.startObject(2)}static addDomain(t,e){t.addFieldOffset(0,e,0)}static addVersion(t,e){t.addFieldInt64(1,e,t.createLong(0,0))}static endOperatorSetId(t){return t.endObject()}static createOperatorSetId(t,n,r){return e.startOperatorSetId(t),e.addDomain(t,n),e.addVersion(t,r),e.endOperatorSetId(t)}}t.OperatorSetId=e})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{class e{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsTensor(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsTensor(t,n){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}name(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}docString(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}dims(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readInt64(this.bb.__vector(this.bb_pos+e)+8*t):this.bb.createLong(0,0)}dimsLength(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__vector_len(this.bb_pos+t):0}dataType(){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readInt32(this.bb_pos+t):0}rawData(t){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint8(this.bb.__vector(this.bb_pos+e)+t):0}rawDataLength(){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.__vector_len(this.bb_pos+t):0}rawDataArray(){let t=this.bb.__offset(this.bb_pos,12);return t?new Uint8Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+t),this.bb.__vector_len(this.bb_pos+t)):null}stringData(t,e){let n=this.bb.__offset(this.bb_pos,14);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}stringDataLength(){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.__vector_len(this.bb_pos+t):0}static startTensor(t){t.startObject(6)}static addName(t,e){t.addFieldOffset(0,e,0)}static addDocString(t,e){t.addFieldOffset(1,e,0)}static addDims(t,e){t.addFieldOffset(2,e,0)}static createDimsVector(t,e){t.startVector(8,e.length,8);for(let n=e.length-1;n>=0;n--)t.addInt64(e[n]);return t.endVector()}static startDimsVector(t,e){t.startVector(8,e,8)}static addDataType(t,e){t.addFieldInt32(3,e,0)}static addRawData(t,e){t.addFieldOffset(4,e,0)}static createRawDataVector(t,e){t.startVector(1,e.length,1);for(let n=e.length-1;n>=0;n--)t.addInt8(e[n]);return t.endVector()}static startRawDataVector(t,e){t.startVector(1,e,1)}static addStringData(t,e){t.addFieldOffset(5,e,0)}static createStringDataVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startStringDataVector(t,e){t.startVector(4,e,4)}static endTensor(t){return t.endObject()}static createTensor(t,n,r,s,i,o,a){return e.startTensor(t),e.addName(t,n),e.addDocString(t,r),e.addDims(t,s),e.addDataType(t,i),e.addRawData(t,o),e.addStringData(t,a),e.endTensor(t)}}t.Tensor=e})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSparseTensor(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSparseTensor(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}values(e){let n=this.bb.__offset(this.bb_pos,4);return n?(e||new t.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}indices(e){let n=this.bb.__offset(this.bb_pos,6);return n?(e||new t.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}dims(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readInt64(this.bb.__vector(this.bb_pos+e)+8*t):this.bb.createLong(0,0)}dimsLength(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__vector_len(this.bb_pos+t):0}static startSparseTensor(t){t.startObject(3)}static addValues(t,e){t.addFieldOffset(0,e,0)}static addIndices(t,e){t.addFieldOffset(1,e,0)}static addDims(t,e){t.addFieldOffset(2,e,0)}static createDimsVector(t,e){t.startVector(8,e.length,8);for(let n=e.length-1;n>=0;n--)t.addInt64(e[n]);return t.endVector()}static startDimsVector(t,e){t.startVector(8,e,8)}static endSparseTensor(t){return t.endObject()}static createSparseTensor(t,e,r,s){return n.startSparseTensor(t),n.addValues(t,e),n.addIndices(t,r),n.addDims(t,s),n.endSparseTensor(t)}}e.SparseTensor=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsAttribute(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsAttribute(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}name(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}docString(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__string(this.bb_pos+e,t):null}type(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readInt32(this.bb_pos+t):0}f(){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readFloat32(this.bb_pos+t):0}i(){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.readInt64(this.bb_pos+t):this.bb.createLong(0,0)}s(t){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__string(this.bb_pos+e,t):null}t(e){let n=this.bb.__offset(this.bb_pos,16);return n?(e||new t.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}g(e){let n=this.bb.__offset(this.bb_pos,18);return n?(e||new t.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}floats(t){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.readFloat32(this.bb.__vector(this.bb_pos+e)+4*t):0}floatsLength(){let t=this.bb.__offset(this.bb_pos,20);return t?this.bb.__vector_len(this.bb_pos+t):0}floatsArray(){let t=this.bb.__offset(this.bb_pos,20);return t?new Float32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+t),this.bb.__vector_len(this.bb_pos+t)):null}ints(t){let e=this.bb.__offset(this.bb_pos,22);return e?this.bb.readInt64(this.bb.__vector(this.bb_pos+e)+8*t):this.bb.createLong(0,0)}intsLength(){let t=this.bb.__offset(this.bb_pos,22);return t?this.bb.__vector_len(this.bb_pos+t):0}strings(t,e){let n=this.bb.__offset(this.bb_pos,24);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}stringsLength(){let t=this.bb.__offset(this.bb_pos,24);return t?this.bb.__vector_len(this.bb_pos+t):0}tensors(e,n){let r=this.bb.__offset(this.bb_pos,26);return r?(n||new t.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}tensorsLength(){let t=this.bb.__offset(this.bb_pos,26);return t?this.bb.__vector_len(this.bb_pos+t):0}graphs(e,n){let r=this.bb.__offset(this.bb_pos,28);return r?(n||new t.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}graphsLength(){let t=this.bb.__offset(this.bb_pos,28);return t?this.bb.__vector_len(this.bb_pos+t):0}static startAttribute(t){t.startObject(13)}static addName(t,e){t.addFieldOffset(0,e,0)}static addDocString(t,e){t.addFieldOffset(1,e,0)}static addType(t,e){t.addFieldInt32(2,e,0)}static addF(t,e){t.addFieldFloat32(3,e,0)}static addI(t,e){t.addFieldInt64(4,e,t.createLong(0,0))}static addS(t,e){t.addFieldOffset(5,e,0)}static addT(t,e){t.addFieldOffset(6,e,0)}static addG(t,e){t.addFieldOffset(7,e,0)}static addFloats(t,e){t.addFieldOffset(8,e,0)}static createFloatsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addFloat32(e[n]);return t.endVector()}static startFloatsVector(t,e){t.startVector(4,e,4)}static addInts(t,e){t.addFieldOffset(9,e,0)}static createIntsVector(t,e){t.startVector(8,e.length,8);for(let n=e.length-1;n>=0;n--)t.addInt64(e[n]);return t.endVector()}static startIntsVector(t,e){t.startVector(8,e,8)}static addStrings(t,e){t.addFieldOffset(10,e,0)}static createStringsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startStringsVector(t,e){t.startVector(4,e,4)}static addTensors(t,e){t.addFieldOffset(11,e,0)}static createTensorsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startTensorsVector(t,e){t.startVector(4,e,4)}static addGraphs(t,e){t.addFieldOffset(12,e,0)}static createGraphsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startGraphsVector(t,e){t.startVector(4,e,4)}static endAttribute(t){return t.endObject()}static createAttribute(t,e,r,s,i,o,a,l,F,U,c,u,Q,d){return n.startAttribute(t),n.addName(t,e),n.addDocString(t,r),n.addType(t,s),n.addF(t,i),n.addI(t,o),n.addS(t,a),n.addT(t,l),n.addG(t,F),n.addFloats(t,U),n.addInts(t,c),n.addStrings(t,u),n.addTensors(t,Q),n.addGraphs(t,d),n.endAttribute(t)}}e.Attribute=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsGraph(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsGraph(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}initializers(e,n){let r=this.bb.__offset(this.bb_pos,4);return r?(n||new t.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}initializersLength(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__vector_len(this.bb_pos+t):0}nodeArgs(e,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new t.experimental.fbs.ValueInfo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}nodeArgsLength(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__vector_len(this.bb_pos+t):0}nodes(e,n){let r=this.bb.__offset(this.bb_pos,8);return r?(n||new t.experimental.fbs.Node).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}nodesLength(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__vector_len(this.bb_pos+t):0}maxNodeIndex(){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readUint32(this.bb_pos+t):0}nodeEdges(e,n){let r=this.bb.__offset(this.bb_pos,12);return r?(n||new t.experimental.fbs.NodeEdge).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}nodeEdgesLength(){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.__vector_len(this.bb_pos+t):0}inputs(t,e){let n=this.bb.__offset(this.bb_pos,14);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}inputsLength(){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.__vector_len(this.bb_pos+t):0}outputs(t,e){let n=this.bb.__offset(this.bb_pos,16);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*t,e):null}outputsLength(){let t=this.bb.__offset(this.bb_pos,16);return t?this.bb.__vector_len(this.bb_pos+t):0}sparseInitializers(e,n){let r=this.bb.__offset(this.bb_pos,18);return r?(n||new t.experimental.fbs.SparseTensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}sparseInitializersLength(){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.__vector_len(this.bb_pos+t):0}static startGraph(t){t.startObject(8)}static addInitializers(t,e){t.addFieldOffset(0,e,0)}static createInitializersVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startInitializersVector(t,e){t.startVector(4,e,4)}static addNodeArgs(t,e){t.addFieldOffset(1,e,0)}static createNodeArgsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startNodeArgsVector(t,e){t.startVector(4,e,4)}static addNodes(t,e){t.addFieldOffset(2,e,0)}static createNodesVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startNodesVector(t,e){t.startVector(4,e,4)}static addMaxNodeIndex(t,e){t.addFieldInt32(3,e,0)}static addNodeEdges(t,e){t.addFieldOffset(4,e,0)}static createNodeEdgesVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startNodeEdgesVector(t,e){t.startVector(4,e,4)}static addInputs(t,e){t.addFieldOffset(5,e,0)}static createInputsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startInputsVector(t,e){t.startVector(4,e,4)}static addOutputs(t,e){t.addFieldOffset(6,e,0)}static createOutputsVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startOutputsVector(t,e){t.startVector(4,e,4)}static addSparseInitializers(t,e){t.addFieldOffset(7,e,0)}static createSparseInitializersVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startSparseInitializersVector(t,e){t.startVector(4,e,4)}static endGraph(t){return t.endObject()}static createGraph(t,e,r,s,i,o,a,l,F){return n.startGraph(t),n.addInitializers(t,e),n.addNodeArgs(t,r),n.addNodes(t,s),n.addMaxNodeIndex(t,i),n.addNodeEdges(t,o),n.addInputs(t,a),n.addOutputs(t,l),n.addSparseInitializers(t,F),n.endGraph(t)}}e.Graph=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsModel(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsModel(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}irVersion(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt64(this.bb_pos+t):this.bb.createLong(0,0)}opsetImport(e,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new t.experimental.fbs.OperatorSetId).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}opsetImportLength(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__vector_len(this.bb_pos+t):0}producerName(t){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__string(this.bb_pos+e,t):null}producerVersion(t){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__string(this.bb_pos+e,t):null}domain(t){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__string(this.bb_pos+e,t):null}modelVersion(){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.readInt64(this.bb_pos+t):this.bb.createLong(0,0)}docString(t){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__string(this.bb_pos+e,t):null}graph(e){let n=this.bb.__offset(this.bb_pos,18);return n?(e||new t.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}graphDocString(t){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.__string(this.bb_pos+e,t):null}static startModel(t){t.startObject(9)}static addIrVersion(t,e){t.addFieldInt64(0,e,t.createLong(0,0))}static addOpsetImport(t,e){t.addFieldOffset(1,e,0)}static createOpsetImportVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startOpsetImportVector(t,e){t.startVector(4,e,4)}static addProducerName(t,e){t.addFieldOffset(2,e,0)}static addProducerVersion(t,e){t.addFieldOffset(3,e,0)}static addDomain(t,e){t.addFieldOffset(4,e,0)}static addModelVersion(t,e){t.addFieldInt64(5,e,t.createLong(0,0))}static addDocString(t,e){t.addFieldOffset(6,e,0)}static addGraph(t,e){t.addFieldOffset(7,e,0)}static addGraphDocString(t,e){t.addFieldOffset(8,e,0)}static endModel(t){return t.endObject()}static createModel(t,e,r,s,i,o,a,l,F,U){return n.startModel(t),n.addIrVersion(t,e),n.addOpsetImport(t,r),n.addProducerName(t,s),n.addProducerVersion(t,i),n.addDomain(t,o),n.addModelVersion(t,a),n.addDocString(t,l),n.addGraph(t,F),n.addGraphDocString(t,U),n.endModel(t)}}e.Model=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(t=>{let e;(t=>{class e{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsKernelCreateInfos(t,n){return(n||new e).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsKernelCreateInfos(t,n){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(n||new e).__init(t.readInt32(t.position())+t.position(),t)}nodeIndices(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb.__vector(this.bb_pos+e)+4*t):0}nodeIndicesLength(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__vector_len(this.bb_pos+t):0}nodeIndicesArray(){let t=this.bb.__offset(this.bb_pos,4);return t?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+t),this.bb.__vector_len(this.bb_pos+t)):null}kernelDefHashes(t){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint64(this.bb.__vector(this.bb_pos+e)+8*t):this.bb.createLong(0,0)}kernelDefHashesLength(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__vector_len(this.bb_pos+t):0}static startKernelCreateInfos(t){t.startObject(2)}static addNodeIndices(t,e){t.addFieldOffset(0,e,0)}static createNodeIndicesVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addInt32(e[n]);return t.endVector()}static startNodeIndicesVector(t,e){t.startVector(4,e,4)}static addKernelDefHashes(t,e){t.addFieldOffset(1,e,0)}static createKernelDefHashesVector(t,e){t.startVector(8,e.length,8);for(let n=e.length-1;n>=0;n--)t.addInt64(e[n]);return t.endVector()}static startKernelDefHashesVector(t,e){t.startVector(8,e,8)}static endKernelCreateInfos(t){return t.endObject()}static createKernelCreateInfos(t,n,r){return e.startKernelCreateInfos(t),e.addNodeIndices(t,n),e.addKernelDefHashes(t,r),e.endKernelCreateInfos(t)}}t.KernelCreateInfos=e})(e=t.fbs||(t.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSubGraphSessionState(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSubGraphSessionState(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}graphId(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}sessionState(e){let n=this.bb.__offset(this.bb_pos,6);return n?(e||new t.experimental.fbs.SessionState).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startSubGraphSessionState(t){t.startObject(2)}static addGraphId(t,e){t.addFieldOffset(0,e,0)}static addSessionState(t,e){t.addFieldOffset(1,e,0)}static endSubGraphSessionState(t){let e=t.endObject();return t.requiredField(e,4),e}static createSubGraphSessionState(t,e,r){return n.startSubGraphSessionState(t),n.addGraphId(t,e),n.addSessionState(t,r),n.endSubGraphSessionState(t)}}e.SubGraphSessionState=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsSessionState(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsSessionState(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}kernels(e){let n=this.bb.__offset(this.bb_pos,4);return n?(e||new t.experimental.fbs.KernelCreateInfos).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}subGraphSessionStates(e,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new t.experimental.fbs.SubGraphSessionState).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*e),this.bb):null}subGraphSessionStatesLength(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__vector_len(this.bb_pos+t):0}static startSessionState(t){t.startObject(2)}static addKernels(t,e){t.addFieldOffset(0,e,0)}static addSubGraphSessionStates(t,e){t.addFieldOffset(1,e,0)}static createSubGraphSessionStatesVector(t,e){t.startVector(4,e.length,4);for(let n=e.length-1;n>=0;n--)t.addOffset(e[n]);return t.endVector()}static startSubGraphSessionStatesVector(t,e){t.startVector(4,e,4)}static endSessionState(t){return t.endObject()}static createSessionState(t,e,r){return n.startSessionState(t),n.addKernels(t,e),n.addSubGraphSessionStates(t,r),n.endSessionState(t)}}e.SessionState=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={})),(t=>{let e;(e=>{let n;(e=>{class n{constructor(){this.bb=null,this.bb_pos=0}__init(t,e){return this.bb_pos=t,this.bb=e,this}static getRootAsInferenceSession(t,e){return(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static getSizePrefixedRootAsInferenceSession(t,e){return t.setPosition(t.position()+flatbuffers.SIZE_PREFIX_LENGTH),(e||new n).__init(t.readInt32(t.position())+t.position(),t)}static bufferHasIdentifier(t){return t.__has_identifier("ORTM")}ortVersion(t){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__string(this.bb_pos+e,t):null}model(e){let n=this.bb.__offset(this.bb_pos,6);return n?(e||new t.experimental.fbs.Model).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}sessionState(e){let n=this.bb.__offset(this.bb_pos,8);return n?(e||new t.experimental.fbs.SessionState).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startInferenceSession(t){t.startObject(3)}static addOrtVersion(t,e){t.addFieldOffset(0,e,0)}static addModel(t,e){t.addFieldOffset(1,e,0)}static addSessionState(t,e){t.addFieldOffset(2,e,0)}static endInferenceSession(t){return t.endObject()}static finishInferenceSessionBuffer(t,e){t.finish(e,"ORTM")}static finishSizePrefixedInferenceSessionBuffer(t,e){t.finish(e,"ORTM",!0)}static createInferenceSession(t,e,r,s){return n.startInferenceSession(t),n.addOrtVersion(t,e),n.addModel(t,r),n.addSessionState(t,s),n.endInferenceSession(t)}}e.InferenceSession=n})(n=e.fbs||(e.fbs={}))})(e=t.experimental||(t.experimental={}))})(onnxruntime||(onnxruntime={}))}}),require_aspromise=__commonJS({"web/node_modules/@protobufjs/aspromise/index.js"(t,e){e.exports=function(t,e){var n=new Array(arguments.length-1),r=0,s=2,i=!0;for(;s<arguments.length;)n[r++]=arguments[s++];return new Promise((function(s,o){n[r]=function(t){if(i)if(i=!1,t)o(t);else{for(var e=new Array(arguments.length-1),n=0;n<e.length;)e[n++]=arguments[n];s.apply(null,e)}};try{t.apply(e||null,n)}catch(t){i&&(i=!1,o(t))}}))}}}),require_base64=__commonJS({"web/node_modules/@protobufjs/base64/index.js"(t){var e=t;e.length=function(t){var e=t.length;if(!e)return 0;for(var n=0;--e%4>1&&"="===t.charAt(e);)++n;return Math.ceil(3*t.length)/4-n};var n,r=new Array(64),s=new Array(123);for(n=0;n<64;)s[r[n]=n<26?n+65:n<52?n+71:n<62?n-4:n-59|43]=n++;e.encode=function(t,e,n){for(var s,i=null,o=[],a=0,l=0;e<n;){var F=t[e++];switch(l){case 0:o[a++]=r[F>>2],s=(3&F)<<4,l=1;break;case 1:o[a++]=r[s|F>>4],s=(15&F)<<2,l=2;break;case 2:o[a++]=r[s|F>>6],o[a++]=r[63&F],l=0}a>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,o)),a=0)}return l&&(o[a++]=r[s],o[a++]=61,1===l&&(o[a++]=61)),i?(a&&i.push(String.fromCharCode.apply(String,o.slice(0,a))),i.join("")):String.fromCharCode.apply(String,o.slice(0,a))};var i="invalid encoding";e.decode=function(t,e,n){for(var r,o=n,a=0,l=0;l<t.length;){var F=t.charCodeAt(l++);if(61===F&&a>1)break;if(void 0===(F=s[F]))throw Error(i);switch(a){case 0:r=F,a=1;break;case 1:e[n++]=r<<2|(48&F)>>4,r=F,a=2;break;case 2:e[n++]=(15&r)<<4|(60&F)>>2,r=F,a=3;break;case 3:e[n++]=(3&r)<<6|F,a=0}}if(1===a)throw Error(i);return n-o},e.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)}}}),require_eventemitter=__commonJS({"web/node_modules/@protobufjs/eventemitter/index.js"(t,e){function n(){this._listeners={}}e.exports=n,n.prototype.on=function(t,e,n){return(this._listeners[t]||(this._listeners[t]=[])).push({fn:e,ctx:n||this}),this},n.prototype.off=function(t,e){if(void 0===t)this._listeners={};else if(void 0===e)this._listeners[t]=[];else for(var n=this._listeners[t],r=0;r<n.length;)n[r].fn===e?n.splice(r,1):++r;return this},n.prototype.emit=function(t){var e=this._listeners[t];if(e){for(var n=[],r=1;r<arguments.length;)n.push(arguments[r++]);for(r=0;r<e.length;)e[r].fn.apply(e[r++].ctx,n)}return this}}}),require_float=__commonJS({"web/node_modules/@protobufjs/float/index.js"(t,e){function n(t){return"undefined"!=typeof Float32Array?function(){var e=new Float32Array([-0]),n=new Uint8Array(e.buffer),r=128===n[3];function s(t,r,s){e[0]=t,r[s]=n[0],r[s+1]=n[1],r[s+2]=n[2],r[s+3]=n[3]}function i(t,r,s){e[0]=t,r[s]=n[3],r[s+1]=n[2],r[s+2]=n[1],r[s+3]=n[0]}function o(t,r){return n[0]=t[r],n[1]=t[r+1],n[2]=t[r+2],n[3]=t[r+3],e[0]}function a(t,r){return n[3]=t[r],n[2]=t[r+1],n[1]=t[r+2],n[0]=t[r+3],e[0]}t.writeFloatLE=r?s:i,t.writeFloatBE=r?i:s,t.readFloatLE=r?o:a,t.readFloatBE=r?a:o}():function(){function e(t,e,n,r){var s=e<0?1:0;if(s&&(e=-e),0===e)t(1/e>0?0:2147483648,n,r);else if(isNaN(e))t(2143289344,n,r);else if(e>34028234663852886e22)t((s<<31|2139095040)>>>0,n,r);else if(e<11754943508222875e-54)t((s<<31|Math.round(e/1401298464324817e-60))>>>0,n,r);else{var i=Math.floor(Math.log(e)/Math.LN2);t((s<<31|i+127<<23|8388607&Math.round(e*Math.pow(2,-i)*8388608))>>>0,n,r)}}function n(t,e,n){var r=t(e,n),s=2*(r>>31)+1,i=r>>>23&255,o=8388607&r;return 255===i?o?NaN:s*(1/0):0===i?1401298464324817e-60*s*o:s*Math.pow(2,i-150)*(o+8388608)}t.writeFloatLE=e.bind(null,r),t.writeFloatBE=e.bind(null,s),t.readFloatLE=n.bind(null,i),t.readFloatBE=n.bind(null,o)}(),"undefined"!=typeof Float64Array?function(){var e=new Float64Array([-0]),n=new Uint8Array(e.buffer),r=128===n[7];function s(t,r,s){e[0]=t,r[s]=n[0],r[s+1]=n[1],r[s+2]=n[2],r[s+3]=n[3],r[s+4]=n[4],r[s+5]=n[5],r[s+6]=n[6],r[s+7]=n[7]}function i(t,r,s){e[0]=t,r[s]=n[7],r[s+1]=n[6],r[s+2]=n[5],r[s+3]=n[4],r[s+4]=n[3],r[s+5]=n[2],r[s+6]=n[1],r[s+7]=n[0]}function o(t,r){return n[0]=t[r],n[1]=t[r+1],n[2]=t[r+2],n[3]=t[r+3],n[4]=t[r+4],n[5]=t[r+5],n[6]=t[r+6],n[7]=t[r+7],e[0]}function a(t,r){return n[7]=t[r],n[6]=t[r+1],n[5]=t[r+2],n[4]=t[r+3],n[3]=t[r+4],n[2]=t[r+5],n[1]=t[r+6],n[0]=t[r+7],e[0]}t.writeDoubleLE=r?s:i,t.writeDoubleBE=r?i:s,t.readDoubleLE=r?o:a,t.readDoubleBE=r?a:o}():function(){function e(t,e,n,r,s,i){var o=r<0?1:0;if(o&&(r=-r),0===r)t(0,s,i+e),t(1/r>0?0:2147483648,s,i+n);else if(isNaN(r))t(0,s,i+e),t(2146959360,s,i+n);else if(r>17976931348623157e292)t(0,s,i+e),t((o<<31|2146435072)>>>0,s,i+n);else{var a;if(r<22250738585072014e-324)t((a=r/5e-324)>>>0,s,i+e),t((o<<31|a/4294967296)>>>0,s,i+n);else{var l=Math.floor(Math.log(r)/Math.LN2);1024===l&&(l=1023),t(4503599627370496*(a=r*Math.pow(2,-l))>>>0,s,i+e),t((o<<31|l+1023<<20|1048576*a&1048575)>>>0,s,i+n)}}}function n(t,e,n,r,s){var i=t(r,s+e),o=t(r,s+n),a=2*(o>>31)+1,l=o>>>20&2047,F=4294967296*(1048575&o)+i;return 2047===l?F?NaN:a*(1/0):0===l?5e-324*a*F:a*Math.pow(2,l-1075)*(F+4503599627370496)}t.writeDoubleLE=e.bind(null,r,0,4),t.writeDoubleBE=e.bind(null,s,4,0),t.readDoubleLE=n.bind(null,i,0,4),t.readDoubleBE=n.bind(null,o,4,0)}(),t}function r(t,e,n){e[n]=255&t,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24}function s(t,e,n){e[n]=t>>>24,e[n+1]=t>>>16&255,e[n+2]=t>>>8&255,e[n+3]=255&t}function i(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24)>>>0}function o(t,e){return(t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3])>>>0}e.exports=n(n)}}),require_inquire=__commonJS({"web/node_modules/@protobufjs/inquire/index.js"(exports,module){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(t){}return null}module.exports=inquire}}),require_utf8=__commonJS({"web/node_modules/@protobufjs/utf8/index.js"(t){var e=t;e.length=function(t){for(var e=0,n=0,r=0;r<t.length;++r)(n=t.charCodeAt(r))<128?e+=1:n<2048?e+=2:55296==(64512&n)&&56320==(64512&t.charCodeAt(r+1))?(++r,e+=4):e+=3;return e},e.read=function(t,e,n){if(n-e<1)return"";for(var r,s=null,i=[],o=0;e<n;)(r=t[e++])<128?i[o++]=r:r>191&&r<224?i[o++]=(31&r)<<6|63&t[e++]:r>239&&r<365?(r=((7&r)<<18|(63&t[e++])<<12|(63&t[e++])<<6|63&t[e++])-65536,i[o++]=55296+(r>>10),i[o++]=56320+(1023&r)):i[o++]=(15&r)<<12|(63&t[e++])<<6|63&t[e++],o>8191&&((s||(s=[])).push(String.fromCharCode.apply(String,i)),o=0);return s?(o&&s.push(String.fromCharCode.apply(String,i.slice(0,o))),s.join("")):String.fromCharCode.apply(String,i.slice(0,o))},e.write=function(t,e,n){for(var r,s,i=n,o=0;o<t.length;++o)(r=t.charCodeAt(o))<128?e[n++]=r:r<2048?(e[n++]=r>>6|192,e[n++]=63&r|128):55296==(64512&r)&&56320==(64512&(s=t.charCodeAt(o+1)))?(r=65536+((1023&r)<<10)+(1023&s),++o,e[n++]=r>>18|240,e[n++]=r>>12&63|128,e[n++]=r>>6&63|128,e[n++]=63&r|128):(e[n++]=r>>12|224,e[n++]=r>>6&63|128,e[n++]=63&r|128);return n-i}}}),require_pool=__commonJS({"web/node_modules/@protobufjs/pool/index.js"(t,e){e.exports=function(t,e,n){var r=n||8192,s=r>>>1,i=null,o=r;return function(n){if(n<1||n>s)return t(n);o+n>r&&(i=t(r),o=0);var a=e.call(i,o,o+=n);return 7&o&&(o=1+(7|o)),a}}}}),require_longbits=__commonJS({"web/node_modules/protobufjs/src/util/longbits.js"(t,e){e.exports=r;var n=require_minimal();function r(t,e){this.lo=t>>>0,this.hi=e>>>0}var s=r.zero=new r(0,0);s.toNumber=function(){return 0},s.zzEncode=s.zzDecode=function(){return this},s.length=function(){return 1};var i=r.zeroHash="\0\0\0\0\0\0\0\0";r.fromNumber=function(t){if(0===t)return s;var e=t<0;e&&(t=-t);var n=t>>>0,i=(t-n)/4294967296>>>0;return e&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new r(n,i)},r.from=function(t){if("number"==typeof t)return r.fromNumber(t);if(n.isString(t)){if(!n.Long)return r.fromNumber(parseInt(t,10));t=n.Long.fromString(t)}return t.low||t.high?new r(t.low>>>0,t.high>>>0):s},r.prototype.toNumber=function(t){if(!t&&this.hi>>>31){var e=1+~this.lo>>>0,n=~this.hi>>>0;return e||(n=n+1>>>0),-(e+4294967296*n)}return this.lo+4294967296*this.hi},r.prototype.toLong=function(t){return n.Long?new n.Long(0|this.lo,0|this.hi,Boolean(t)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(t)}};var o=String.prototype.charCodeAt;r.fromHash=function(t){return t===i?s:new r((o.call(t,0)|o.call(t,1)<<8|o.call(t,2)<<16|o.call(t,3)<<24)>>>0,(o.call(t,4)|o.call(t,5)<<8|o.call(t,6)<<16|o.call(t,7)<<24)>>>0)},r.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},r.prototype.zzEncode=function(){var t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this},r.prototype.zzDecode=function(){var t=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this},r.prototype.length=function(){var t=this.lo,e=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===e?t<16384?t<128?1:2:t<2097152?3:4:e<16384?e<128?5:6:e<2097152?7:8:n<128?9:10}}}),require_minimal=__commonJS({"web/node_modules/protobufjs/src/util/minimal.js"(t){var e=t;function n(t,e,n){for(var r=Object.keys(e),s=0;s<r.length;++s)void 0!==t[r[s]]&&n||(t[r[s]]=e[r[s]]);return t}function r(t){function e(t,r){if(!(this instanceof e))return new e(t,r);Object.defineProperty(this,"message",{get:function(){return t}}),Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:(new Error).stack||""}),r&&n(this,r)}return e.prototype=Object.create(Error.prototype,{constructor:{value:e,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return t},set:void 0,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),e}e.asPromise=require_aspromise(),e.base64=require_base64(),e.EventEmitter=require_eventemitter(),e.float=require_float(),e.inquire=require_inquire(),e.utf8=require_utf8(),e.pool=require_pool(),e.LongBits=require_longbits(),e.isNode=Boolean("undefined"!=typeof global&&global&&global.process&&global.process.versions&&global.process.versions.node),e.global=e.isNode&&global||"undefined"!=typeof window&&window||"undefined"!=typeof self&&self||t,e.emptyArray=Object.freeze?Object.freeze([]):[],e.emptyObject=Object.freeze?Object.freeze({}):{},e.isInteger=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},e.isString=function(t){return"string"==typeof t||t instanceof String},e.isObject=function(t){return t&&"object"==typeof t},e.isset=e.isSet=function(t,e){var n=t[e];return!(null==n||!t.hasOwnProperty(e))&&("object"!=typeof n||(Array.isArray(n)?n.length:Object.keys(n).length)>0)},e.Buffer=function(){try{var t=e.inquire("buffer").Buffer;return t.prototype.utf8Write?t:null}catch(t){return null}}(),e._Buffer_from=null,e._Buffer_allocUnsafe=null,e.newBuffer=function(t){return"number"==typeof t?e.Buffer?e._Buffer_allocUnsafe(t):new e.Array(t):e.Buffer?e._Buffer_from(t):"undefined"==typeof Uint8Array?t:new Uint8Array(t)},e.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,e.Long=e.global.dcodeIO&&e.global.dcodeIO.Long||e.global.Long||e.inquire("long"),e.key2Re=/^true|false|0|1$/,e.key32Re=/^-?(?:0|[1-9][0-9]*)$/,e.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,e.longToHash=function(t){return t?e.LongBits.from(t).toHash():e.LongBits.zeroHash},e.longFromHash=function(t,n){var r=e.LongBits.fromHash(t);return e.Long?e.Long.fromBits(r.lo,r.hi,n):r.toNumber(Boolean(n))},e.merge=n,e.lcFirst=function(t){return t.charAt(0).toLowerCase()+t.substring(1)},e.newError=r,e.ProtocolError=r("ProtocolError"),e.oneOfGetter=function(t){for(var e={},n=0;n<t.length;++n)e[t[n]]=1;return function(){for(var t=Object.keys(this),n=t.length-1;n>-1;--n)if(1===e[t[n]]&&void 0!==this[t[n]]&&null!==this[t[n]])return t[n]}},e.oneOfSetter=function(t){return function(e){for(var n=0;n<t.length;++n)t[n]!==e&&delete this[t[n]]}},e.toJSONOptions={longs:String,enums:String,bytes:String,json:!0},e._configure=function(){var t=e.Buffer;t?(e._Buffer_from=t.from!==Uint8Array.from&&t.from||function(e,n){return new t(e,n)},e._Buffer_allocUnsafe=t.allocUnsafe||function(e){return new t(e)}):e._Buffer_from=e._Buffer_allocUnsafe=null}}}),require_writer=__commonJS({"web/node_modules/protobufjs/src/writer.js"(t,e){e.exports=U;var n,r=require_minimal(),s=r.LongBits,i=r.base64,o=r.utf8;function a(t,e,n){this.fn=t,this.len=e,this.next=void 0,this.val=n}function l(){}function F(t){this.head=t.head,this.tail=t.tail,this.len=t.len,this.next=t.states}function U(){this.len=0,this.head=new a(l,0,0),this.tail=this.head,this.states=null}var c=function(){return r.Buffer?function(){return(U.create=function(){return new n})()}:function(){return new U}};function u(t,e,n){e[n]=255&t}function Q(t,e){this.len=t,this.next=void 0,this.val=e}function d(t,e,n){for(;t.hi;)e[n++]=127&t.lo|128,t.lo=(t.lo>>>7|t.hi<<25)>>>0,t.hi>>>=7;for(;t.lo>127;)e[n++]=127&t.lo|128,t.lo=t.lo>>>7;e[n++]=t.lo}function B(t,e,n){e[n]=255&t,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24}U.create=c(),U.alloc=function(t){return new r.Array(t)},r.Array!==Array&&(U.alloc=r.pool(U.alloc,r.Array.prototype.subarray)),U.prototype._push=function(t,e,n){return this.tail=this.tail.next=new a(t,e,n),this.len+=e,this},Q.prototype=Object.create(a.prototype),Q.prototype.fn=function(t,e,n){for(;t>127;)e[n++]=127&t|128,t>>>=7;e[n]=t},U.prototype.uint32=function(t){return this.len+=(this.tail=this.tail.next=new Q((t>>>=0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this},U.prototype.int32=function(t){return t<0?this._push(d,10,s.fromNumber(t)):this.uint32(t)},U.prototype.sint32=function(t){return this.uint32((t<<1^t>>31)>>>0)},U.prototype.uint64=function(t){var e=s.from(t);return this._push(d,e.length(),e)},U.prototype.int64=U.prototype.uint64,U.prototype.sint64=function(t){var e=s.from(t).zzEncode();return this._push(d,e.length(),e)},U.prototype.bool=function(t){return this._push(u,1,t?1:0)},U.prototype.fixed32=function(t){return this._push(B,4,t>>>0)},U.prototype.sfixed32=U.prototype.fixed32,U.prototype.fixed64=function(t){var e=s.from(t);return this._push(B,4,e.lo)._push(B,4,e.hi)},U.prototype.sfixed64=U.prototype.fixed64,U.prototype.float=function(t){return this._push(r.float.writeFloatLE,4,t)},U.prototype.double=function(t){return this._push(r.float.writeDoubleLE,8,t)};var p=r.Array.prototype.set?function(t,e,n){e.set(t,n)}:function(t,e,n){for(var r=0;r<t.length;++r)e[n+r]=t[r]};U.prototype.bytes=function(t){var e=t.length>>>0;if(!e)return this._push(u,1,0);if(r.isString(t)){var n=U.alloc(e=i.length(t));i.decode(t,n,0),t=n}return this.uint32(e)._push(p,e,t)},U.prototype.string=function(t){var e=o.length(t);return e?this.uint32(e)._push(o.write,e,t):this._push(u,1,0)},U.prototype.fork=function(){return this.states=new F(this),this.head=this.tail=new a(l,0,0),this.len=0,this},U.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new a(l,0,0),this.len=0),this},U.prototype.ldelim=function(){var t=this.head,e=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=t.next,this.tail=e,this.len+=n),this},U.prototype.finish=function(){for(var t=this.head.next,e=this.constructor.alloc(this.len),n=0;t;)t.fn(t.val,e,n),n+=t.len,t=t.next;return e},U._configure=function(t){n=t,U.create=c(),n._configure()}}}),require_writer_buffer=__commonJS({"web/node_modules/protobufjs/src/writer_buffer.js"(t,e){e.exports=s;var n=require_writer();(s.prototype=Object.create(n.prototype)).constructor=s;var r=require_minimal();function s(){n.call(this)}function i(t,e,n){t.length<40?r.utf8.write(t,e,n):e.utf8Write?e.utf8Write(t,n):e.write(t,n)}s._configure=function(){s.alloc=r._Buffer_allocUnsafe,s.writeBytesBuffer=r.Buffer&&r.Buffer.prototype instanceof Uint8Array&&"set"===r.Buffer.prototype.set.name?function(t,e,n){e.set(t,n)}:function(t,e,n){if(t.copy)t.copy(e,n,0,t.length);else for(var r=0;r<t.length;)e[n++]=t[r++]}},s.prototype.bytes=function(t){r.isString(t)&&(t=r._Buffer_from(t,"base64"));var e=t.length>>>0;return this.uint32(e),e&&this._push(s.writeBytesBuffer,e,t),this},s.prototype.string=function(t){var e=r.Buffer.byteLength(t);return this.uint32(e),e&&this._push(i,e,t),this},s._configure()}}),require_reader=__commonJS({"web/node_modules/protobufjs/src/reader.js"(t,e){e.exports=a;var n,r=require_minimal(),s=r.LongBits,i=r.utf8;function o(t,e){return RangeError("index out of range: "+t.pos+" + "+(e||1)+" > "+t.len)}function a(t){this.buf=t,this.pos=0,this.len=t.length}var l,F="undefined"!=typeof Uint8Array?function(t){if(t instanceof Uint8Array||Array.isArray(t))return new a(t);throw Error("illegal buffer")}:function(t){if(Array.isArray(t))return new a(t);throw Error("illegal buffer")},U=function(){return r.Buffer?function(t){return(a.create=function(t){return r.Buffer.isBuffer(t)?new n(t):F(t)})(t)}:F};function c(){var t=new s(0,0),e=0;if(!(this.len-this.pos>4)){for(;e<3;++e){if(this.pos>=this.len)throw o(this);if(t.lo=(t.lo|(127&this.buf[this.pos])<<7*e)>>>0,this.buf[this.pos++]<128)return t}return t.lo=(t.lo|(127&this.buf[this.pos++])<<7*e)>>>0,t}for(;e<4;++e)if(t.lo=(t.lo|(127&this.buf[this.pos])<<7*e)>>>0,this.buf[this.pos++]<128)return t;if(t.lo=(t.lo|(127&this.buf[this.pos])<<28)>>>0,t.hi=(t.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return t;if(e=0,this.len-this.pos>4){for(;e<5;++e)if(t.hi=(t.hi|(127&this.buf[this.pos])<<7*e+3)>>>0,this.buf[this.pos++]<128)return t}else for(;e<5;++e){if(this.pos>=this.len)throw o(this);if(t.hi=(t.hi|(127&this.buf[this.pos])<<7*e+3)>>>0,this.buf[this.pos++]<128)return t}throw Error("invalid varint encoding")}function u(t,e){return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0}function Q(){if(this.pos+8>this.len)throw o(this,8);return new s(u(this.buf,this.pos+=4),u(this.buf,this.pos+=4))}a.create=U(),a.prototype._slice=r.Array.prototype.subarray||r.Array.prototype.slice,a.prototype.uint32=(l=4294967295,function(){if(l=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return l;if((this.pos+=5)>this.len)throw this.pos=this.len,o(this,10);return l}),a.prototype.int32=function(){return 0|this.uint32()},a.prototype.sint32=function(){var t=this.uint32();return t>>>1^-(1&t)},a.prototype.bool=function(){return 0!==this.uint32()},a.prototype.fixed32=function(){if(this.pos+4>this.len)throw o(this,4);return u(this.buf,this.pos+=4)},a.prototype.sfixed32=function(){if(this.pos+4>this.len)throw o(this,4);return 0|u(this.buf,this.pos+=4)},a.prototype.float=function(){if(this.pos+4>this.len)throw o(this,4);var t=r.float.readFloatLE(this.buf,this.pos);return this.pos+=4,t},a.prototype.double=function(){if(this.pos+8>this.len)throw o(this,4);var t=r.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,t},a.prototype.bytes=function(){var t=this.uint32(),e=this.pos,n=this.pos+t;if(n>this.len)throw o(this,t);return this.pos+=t,Array.isArray(this.buf)?this.buf.slice(e,n):e===n?new this.buf.constructor(0):this._slice.call(this.buf,e,n)},a.prototype.string=function(){var t=this.bytes();return i.read(t,0,t.length)},a.prototype.skip=function(t){if("number"==typeof t){if(this.pos+t>this.len)throw o(this,t);this.pos+=t}else do{if(this.pos>=this.len)throw o(this)}while(128&this.buf[this.pos++]);return this},a.prototype.skipType=function(t){switch(t){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(t=7&this.uint32());)this.skipType(t);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+t+" at offset "+this.pos)}return this},a._configure=function(t){n=t,a.create=U(),n._configure();var e=r.Long?"toLong":"toNumber";r.merge(a.prototype,{int64:function(){return c.call(this)[e](!1)},uint64:function(){return c.call(this)[e](!0)},sint64:function(){return c.call(this).zzDecode()[e](!1)},fixed64:function(){return Q.call(this)[e](!0)},sfixed64:function(){return Q.call(this)[e](!1)}})}}}),require_reader_buffer=__commonJS({"web/node_modules/protobufjs/src/reader_buffer.js"(t,e){e.exports=s;var n=require_reader();(s.prototype=Object.create(n.prototype)).constructor=s;var r=require_minimal();function s(t){n.call(this,t)}s._configure=function(){r.Buffer&&(s.prototype._slice=r.Buffer.prototype.slice)},s.prototype.string=function(){var t=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+t,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+t,this.len))},s._configure()}}),require_service=__commonJS({"web/node_modules/protobufjs/src/rpc/service.js"(t,e){e.exports=r;var n=require_minimal();function r(t,e,r){if("function"!=typeof t)throw TypeError("rpcImpl must be a function");n.EventEmitter.call(this),this.rpcImpl=t,this.requestDelimited=Boolean(e),this.responseDelimited=Boolean(r)}(r.prototype=Object.create(n.EventEmitter.prototype)).constructor=r,r.prototype.rpcCall=function t(e,r,s,i,o){if(!i)throw TypeError("request must be specified");var a=this;if(!o)return n.asPromise(t,a,e,r,s,i);if(a.rpcImpl)try{return a.rpcImpl(e,r[a.requestDelimited?"encodeDelimited":"encode"](i).finish(),(function(t,n){if(t)return a.emit("error",t,e),o(t);if(null!==n){if(!(n instanceof s))try{n=s[a.responseDelimited?"decodeDelimited":"decode"](n)}catch(t){return a.emit("error",t,e),o(t)}return a.emit("data",n,e),o(null,n)}a.end(!0)}))}catch(t){return a.emit("error",t,e),void setTimeout((function(){o(t)}),0)}else setTimeout((function(){o(Error("already ended"))}),0)},r.prototype.end=function(t){return this.rpcImpl&&(t||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}}}),require_rpc=__commonJS({"web/node_modules/protobufjs/src/rpc.js"(t){t.Service=require_service()}}),require_roots=__commonJS({"web/node_modules/protobufjs/src/roots.js"(t,e){e.exports={}}}),require_index_minimal=__commonJS({"web/node_modules/protobufjs/src/index-minimal.js"(t){var e=t;function n(){e.util._configure(),e.Writer._configure(e.BufferWriter),e.Reader._configure(e.BufferReader)}e.build="minimal",e.Writer=require_writer(),e.BufferWriter=require_writer_buffer(),e.Reader=require_reader(),e.BufferReader=require_reader_buffer(),e.util=require_minimal(),e.rpc=require_rpc(),e.roots=require_roots(),e.configure=n,n()}}),require_minimal2=__commonJS({"web/node_modules/protobufjs/minimal.js"(t,e){e.exports=require_index_minimal()}}),require_onnx=__commonJS({"web/lib/onnxjs/ort-schema/protobuf/onnx.js"(t,e){var n,r,s,i=require_minimal2(),o=i.Reader,a=i.Writer,l=i.util,F=i.roots.default||(i.roots.default={});F.onnx=((s={}).Version=(n={},(r=Object.create(n))[n[0]="_START_VERSION"]=0,r[n[1]="IR_VERSION_2017_10_10"]=1,r[n[2]="IR_VERSION_2017_10_30"]=2,r[n[3]="IR_VERSION_2017_11_3"]=3,r[n[4]="IR_VERSION_2019_1_22"]=4,r[n[5]="IR_VERSION_2019_3_18"]=5,r[n[6]="IR_VERSION_2019_9_19"]=6,r[n[7]="IR_VERSION_2020_5_8"]=7,r[n[8]="IR_VERSION_2021_7_30"]=8,r[n[9]="IR_VERSION"]=9,r),s.AttributeProto=function(){function t(t){if(this.floats=[],this.ints=[],this.strings=[],this.tensors=[],this.graphs=[],this.sparseTensors=[],this.typeProtos=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.name="",t.prototype.refAttrName="",t.prototype.docString="",t.prototype.type=0,t.prototype.f=0,t.prototype.i=l.Long?l.Long.fromBits(0,0,!1):0,t.prototype.s=l.newBuffer([]),t.prototype.t=null,t.prototype.g=null,t.prototype.sparseTensor=null,t.prototype.tp=null,t.prototype.floats=l.emptyArray,t.prototype.ints=l.emptyArray,t.prototype.strings=l.emptyArray,t.prototype.tensors=l.emptyArray,t.prototype.graphs=l.emptyArray,t.prototype.sparseTensors=l.emptyArray,t.prototype.typeProtos=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(10).string(t.name),null!=t.f&&Object.hasOwnProperty.call(t,"f")&&e.uint32(21).float(t.f),null!=t.i&&Object.hasOwnProperty.call(t,"i")&&e.uint32(24).int64(t.i),null!=t.s&&Object.hasOwnProperty.call(t,"s")&&e.uint32(34).bytes(t.s),null!=t.t&&Object.hasOwnProperty.call(t,"t")&&F.onnx.TensorProto.encode(t.t,e.uint32(42).fork()).ldelim(),null!=t.g&&Object.hasOwnProperty.call(t,"g")&&F.onnx.GraphProto.encode(t.g,e.uint32(50).fork()).ldelim(),null!=t.floats&&t.floats.length){e.uint32(58).fork();for(var n=0;n<t.floats.length;++n)e.float(t.floats[n]);e.ldelim()}if(null!=t.ints&&t.ints.length){for(e.uint32(66).fork(),n=0;n<t.ints.length;++n)e.int64(t.ints[n]);e.ldelim()}if(null!=t.strings&&t.strings.length)for(n=0;n<t.strings.length;++n)e.uint32(74).bytes(t.strings[n]);if(null!=t.tensors&&t.tensors.length)for(n=0;n<t.tensors.length;++n)F.onnx.TensorProto.encode(t.tensors[n],e.uint32(82).fork()).ldelim();if(null!=t.graphs&&t.graphs.length)for(n=0;n<t.graphs.length;++n)F.onnx.GraphProto.encode(t.graphs[n],e.uint32(90).fork()).ldelim();if(null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(106).string(t.docString),null!=t.tp&&Object.hasOwnProperty.call(t,"tp")&&F.onnx.TypeProto.encode(t.tp,e.uint32(114).fork()).ldelim(),null!=t.typeProtos&&t.typeProtos.length)for(n=0;n<t.typeProtos.length;++n)F.onnx.TypeProto.encode(t.typeProtos[n],e.uint32(122).fork()).ldelim();if(null!=t.type&&Object.hasOwnProperty.call(t,"type")&&e.uint32(160).int32(t.type),null!=t.refAttrName&&Object.hasOwnProperty.call(t,"refAttrName")&&e.uint32(170).string(t.refAttrName),null!=t.sparseTensor&&Object.hasOwnProperty.call(t,"sparseTensor")&&F.onnx.SparseTensorProto.encode(t.sparseTensor,e.uint32(178).fork()).ldelim(),null!=t.sparseTensors&&t.sparseTensors.length)for(n=0;n<t.sparseTensors.length;++n)F.onnx.SparseTensorProto.encode(t.sparseTensors[n],e.uint32(186).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.AttributeProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.name=t.string();break;case 21:r.refAttrName=t.string();break;case 13:r.docString=t.string();break;case 20:r.type=t.int32();break;case 2:r.f=t.float();break;case 3:r.i=t.int64();break;case 4:r.s=t.bytes();break;case 5:r.t=F.onnx.TensorProto.decode(t,t.uint32());break;case 6:r.g=F.onnx.GraphProto.decode(t,t.uint32());break;case 22:r.sparseTensor=F.onnx.SparseTensorProto.decode(t,t.uint32());break;case 14:r.tp=F.onnx.TypeProto.decode(t,t.uint32());break;case 7:if(r.floats&&r.floats.length||(r.floats=[]),2==(7&s))for(var i=t.uint32()+t.pos;t.pos<i;)r.floats.push(t.float());else r.floats.push(t.float());break;case 8:if(r.ints&&r.ints.length||(r.ints=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.ints.push(t.int64());else r.ints.push(t.int64());break;case 9:r.strings&&r.strings.length||(r.strings=[]),r.strings.push(t.bytes());break;case 10:r.tensors&&r.tensors.length||(r.tensors=[]),r.tensors.push(F.onnx.TensorProto.decode(t,t.uint32()));break;case 11:r.graphs&&r.graphs.length||(r.graphs=[]),r.graphs.push(F.onnx.GraphProto.decode(t,t.uint32()));break;case 23:r.sparseTensors&&r.sparseTensors.length||(r.sparseTensors=[]),r.sparseTensors.push(F.onnx.SparseTensorProto.decode(t,t.uint32()));break;case 15:r.typeProtos&&r.typeProtos.length||(r.typeProtos=[]),r.typeProtos.push(F.onnx.TypeProto.decode(t,t.uint32()));break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.refAttrName&&t.hasOwnProperty("refAttrName")&&!l.isString(t.refAttrName))return"refAttrName: string expected";if(null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString))return"docString: string expected";if(null!=t.type&&t.hasOwnProperty("type"))switch(t.type){default:return"type: enum value expected";case 0:case 1:case 2:case 3:case 4:case 5:case 11:case 13:case 6:case 7:case 8:case 9:case 10:case 12:case 14:}if(null!=t.f&&t.hasOwnProperty("f")&&"number"!=typeof t.f)return"f: number expected";if(null!=t.i&&t.hasOwnProperty("i")&&!(l.isInteger(t.i)||t.i&&l.isInteger(t.i.low)&&l.isInteger(t.i.high)))return"i: integer|Long expected";if(null!=t.s&&t.hasOwnProperty("s")&&!(t.s&&"number"==typeof t.s.length||l.isString(t.s)))return"s: buffer expected";if(null!=t.t&&t.hasOwnProperty("t")&&(n=F.onnx.TensorProto.verify(t.t)))return"t."+n;if(null!=t.g&&t.hasOwnProperty("g")&&(n=F.onnx.GraphProto.verify(t.g)))return"g."+n;if(null!=t.sparseTensor&&t.hasOwnProperty("sparseTensor")&&(n=F.onnx.SparseTensorProto.verify(t.sparseTensor)))return"sparseTensor."+n;if(null!=t.tp&&t.hasOwnProperty("tp")&&(n=F.onnx.TypeProto.verify(t.tp)))return"tp."+n;if(null!=t.floats&&t.hasOwnProperty("floats")){if(!Array.isArray(t.floats))return"floats: array expected";for(var e=0;e<t.floats.length;++e)if("number"!=typeof t.floats[e])return"floats: number[] expected"}if(null!=t.ints&&t.hasOwnProperty("ints")){if(!Array.isArray(t.ints))return"ints: array expected";for(e=0;e<t.ints.length;++e)if(!(l.isInteger(t.ints[e])||t.ints[e]&&l.isInteger(t.ints[e].low)&&l.isInteger(t.ints[e].high)))return"ints: integer|Long[] expected"}if(null!=t.strings&&t.hasOwnProperty("strings")){if(!Array.isArray(t.strings))return"strings: array expected";for(e=0;e<t.strings.length;++e)if(!(t.strings[e]&&"number"==typeof t.strings[e].length||l.isString(t.strings[e])))return"strings: buffer[] expected"}if(null!=t.tensors&&t.hasOwnProperty("tensors")){if(!Array.isArray(t.tensors))return"tensors: array expected";for(e=0;e<t.tensors.length;++e)if(n=F.onnx.TensorProto.verify(t.tensors[e]))return"tensors."+n}if(null!=t.graphs&&t.hasOwnProperty("graphs")){if(!Array.isArray(t.graphs))return"graphs: array expected";for(e=0;e<t.graphs.length;++e)if(n=F.onnx.GraphProto.verify(t.graphs[e]))return"graphs."+n}if(null!=t.sparseTensors&&t.hasOwnProperty("sparseTensors")){if(!Array.isArray(t.sparseTensors))return"sparseTensors: array expected";for(e=0;e<t.sparseTensors.length;++e)if(n=F.onnx.SparseTensorProto.verify(t.sparseTensors[e]))return"sparseTensors."+n}if(null!=t.typeProtos&&t.hasOwnProperty("typeProtos")){if(!Array.isArray(t.typeProtos))return"typeProtos: array expected";for(e=0;e<t.typeProtos.length;++e){var n;if(n=F.onnx.TypeProto.verify(t.typeProtos[e]))return"typeProtos."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.AttributeProto)return t;var e=new F.onnx.AttributeProto;switch(null!=t.name&&(e.name=String(t.name)),null!=t.refAttrName&&(e.refAttrName=String(t.refAttrName)),null!=t.docString&&(e.docString=String(t.docString)),t.type){default:if("number"==typeof t.type){e.type=t.type;break}break;case"UNDEFINED":case 0:e.type=0;break;case"FLOAT":case 1:e.type=1;break;case"INT":case 2:e.type=2;break;case"STRING":case 3:e.type=3;break;case"TENSOR":case 4:e.type=4;break;case"GRAPH":case 5:e.type=5;break;case"SPARSE_TENSOR":case 11:e.type=11;break;case"TYPE_PROTO":case 13:e.type=13;break;case"FLOATS":case 6:e.type=6;break;case"INTS":case 7:e.type=7;break;case"STRINGS":case 8:e.type=8;break;case"TENSORS":case 9:e.type=9;break;case"GRAPHS":case 10:e.type=10;break;case"SPARSE_TENSORS":case 12:e.type=12;break;case"TYPE_PROTOS":case 14:e.type=14}if(null!=t.f&&(e.f=Number(t.f)),null!=t.i&&(l.Long?(e.i=l.Long.fromValue(t.i)).unsigned=!1:"string"==typeof t.i?e.i=parseInt(t.i,10):"number"==typeof t.i?e.i=t.i:"object"==typeof t.i&&(e.i=new l.LongBits(t.i.low>>>0,t.i.high>>>0).toNumber())),null!=t.s&&("string"==typeof t.s?l.base64.decode(t.s,e.s=l.newBuffer(l.base64.length(t.s)),0):t.s.length>=0&&(e.s=t.s)),null!=t.t){if("object"!=typeof t.t)throw TypeError(".onnx.AttributeProto.t: object expected");e.t=F.onnx.TensorProto.fromObject(t.t)}if(null!=t.g){if("object"!=typeof t.g)throw TypeError(".onnx.AttributeProto.g: object expected");e.g=F.onnx.GraphProto.fromObject(t.g)}if(null!=t.sparseTensor){if("object"!=typeof t.sparseTensor)throw TypeError(".onnx.AttributeProto.sparseTensor: object expected");e.sparseTensor=F.onnx.SparseTensorProto.fromObject(t.sparseTensor)}if(null!=t.tp){if("object"!=typeof t.tp)throw TypeError(".onnx.AttributeProto.tp: object expected");e.tp=F.onnx.TypeProto.fromObject(t.tp)}if(t.floats){if(!Array.isArray(t.floats))throw TypeError(".onnx.AttributeProto.floats: array expected");e.floats=[];for(var n=0;n<t.floats.length;++n)e.floats[n]=Number(t.floats[n])}if(t.ints){if(!Array.isArray(t.ints))throw TypeError(".onnx.AttributeProto.ints: array expected");for(e.ints=[],n=0;n<t.ints.length;++n)l.Long?(e.ints[n]=l.Long.fromValue(t.ints[n])).unsigned=!1:"string"==typeof t.ints[n]?e.ints[n]=parseInt(t.ints[n],10):"number"==typeof t.ints[n]?e.ints[n]=t.ints[n]:"object"==typeof t.ints[n]&&(e.ints[n]=new l.LongBits(t.ints[n].low>>>0,t.ints[n].high>>>0).toNumber())}if(t.strings){if(!Array.isArray(t.strings))throw TypeError(".onnx.AttributeProto.strings: array expected");for(e.strings=[],n=0;n<t.strings.length;++n)"string"==typeof t.strings[n]?l.base64.decode(t.strings[n],e.strings[n]=l.newBuffer(l.base64.length(t.strings[n])),0):t.strings[n].length>=0&&(e.strings[n]=t.strings[n])}if(t.tensors){if(!Array.isArray(t.tensors))throw TypeError(".onnx.AttributeProto.tensors: array expected");for(e.tensors=[],n=0;n<t.tensors.length;++n){if("object"!=typeof t.tensors[n])throw TypeError(".onnx.AttributeProto.tensors: object expected");e.tensors[n]=F.onnx.TensorProto.fromObject(t.tensors[n])}}if(t.graphs){if(!Array.isArray(t.graphs))throw TypeError(".onnx.AttributeProto.graphs: array expected");for(e.graphs=[],n=0;n<t.graphs.length;++n){if("object"!=typeof t.graphs[n])throw TypeError(".onnx.AttributeProto.graphs: object expected");e.graphs[n]=F.onnx.GraphProto.fromObject(t.graphs[n])}}if(t.sparseTensors){if(!Array.isArray(t.sparseTensors))throw TypeError(".onnx.AttributeProto.sparseTensors: array expected");for(e.sparseTensors=[],n=0;n<t.sparseTensors.length;++n){if("object"!=typeof t.sparseTensors[n])throw TypeError(".onnx.AttributeProto.sparseTensors: object expected");e.sparseTensors[n]=F.onnx.SparseTensorProto.fromObject(t.sparseTensors[n])}}if(t.typeProtos){if(!Array.isArray(t.typeProtos))throw TypeError(".onnx.AttributeProto.typeProtos: array expected");for(e.typeProtos=[],n=0;n<t.typeProtos.length;++n){if("object"!=typeof t.typeProtos[n])throw TypeError(".onnx.AttributeProto.typeProtos: object expected");e.typeProtos[n]=F.onnx.TypeProto.fromObject(t.typeProtos[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.floats=[],n.ints=[],n.strings=[],n.tensors=[],n.graphs=[],n.typeProtos=[],n.sparseTensors=[]),e.defaults){if(n.name="",n.f=0,l.Long){var r=new l.Long(0,0,!1);n.i=e.longs===String?r.toString():e.longs===Number?r.toNumber():r}else n.i=e.longs===String?"0":0;e.bytes===String?n.s="":(n.s=[],e.bytes!==Array&&(n.s=l.newBuffer(n.s))),n.t=null,n.g=null,n.docString="",n.tp=null,n.type=e.enums===String?"UNDEFINED":0,n.refAttrName="",n.sparseTensor=null}if(null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),null!=t.f&&t.hasOwnProperty("f")&&(n.f=e.json&&!isFinite(t.f)?String(t.f):t.f),null!=t.i&&t.hasOwnProperty("i")&&("number"==typeof t.i?n.i=e.longs===String?String(t.i):t.i:n.i=e.longs===String?l.Long.prototype.toString.call(t.i):e.longs===Number?new l.LongBits(t.i.low>>>0,t.i.high>>>0).toNumber():t.i),null!=t.s&&t.hasOwnProperty("s")&&(n.s=e.bytes===String?l.base64.encode(t.s,0,t.s.length):e.bytes===Array?Array.prototype.slice.call(t.s):t.s),null!=t.t&&t.hasOwnProperty("t")&&(n.t=F.onnx.TensorProto.toObject(t.t,e)),null!=t.g&&t.hasOwnProperty("g")&&(n.g=F.onnx.GraphProto.toObject(t.g,e)),t.floats&&t.floats.length){n.floats=[];for(var s=0;s<t.floats.length;++s)n.floats[s]=e.json&&!isFinite(t.floats[s])?String(t.floats[s]):t.floats[s]}if(t.ints&&t.ints.length)for(n.ints=[],s=0;s<t.ints.length;++s)"number"==typeof t.ints[s]?n.ints[s]=e.longs===String?String(t.ints[s]):t.ints[s]:n.ints[s]=e.longs===String?l.Long.prototype.toString.call(t.ints[s]):e.longs===Number?new l.LongBits(t.ints[s].low>>>0,t.ints[s].high>>>0).toNumber():t.ints[s];if(t.strings&&t.strings.length)for(n.strings=[],s=0;s<t.strings.length;++s)n.strings[s]=e.bytes===String?l.base64.encode(t.strings[s],0,t.strings[s].length):e.bytes===Array?Array.prototype.slice.call(t.strings[s]):t.strings[s];if(t.tensors&&t.tensors.length)for(n.tensors=[],s=0;s<t.tensors.length;++s)n.tensors[s]=F.onnx.TensorProto.toObject(t.tensors[s],e);if(t.graphs&&t.graphs.length)for(n.graphs=[],s=0;s<t.graphs.length;++s)n.graphs[s]=F.onnx.GraphProto.toObject(t.graphs[s],e);if(null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),null!=t.tp&&t.hasOwnProperty("tp")&&(n.tp=F.onnx.TypeProto.toObject(t.tp,e)),t.typeProtos&&t.typeProtos.length)for(n.typeProtos=[],s=0;s<t.typeProtos.length;++s)n.typeProtos[s]=F.onnx.TypeProto.toObject(t.typeProtos[s],e);if(null!=t.type&&t.hasOwnProperty("type")&&(n.type=e.enums===String?void 0===F.onnx.AttributeProto.AttributeType[t.type]?t.type:F.onnx.AttributeProto.AttributeType[t.type]:t.type),null!=t.refAttrName&&t.hasOwnProperty("refAttrName")&&(n.refAttrName=t.refAttrName),null!=t.sparseTensor&&t.hasOwnProperty("sparseTensor")&&(n.sparseTensor=F.onnx.SparseTensorProto.toObject(t.sparseTensor,e)),t.sparseTensors&&t.sparseTensors.length)for(n.sparseTensors=[],s=0;s<t.sparseTensors.length;++s)n.sparseTensors[s]=F.onnx.SparseTensorProto.toObject(t.sparseTensors[s],e);return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.AttributeProto"},t.AttributeType=function(){var t={},e=Object.create(t);return e[t[0]="UNDEFINED"]=0,e[t[1]="FLOAT"]=1,e[t[2]="INT"]=2,e[t[3]="STRING"]=3,e[t[4]="TENSOR"]=4,e[t[5]="GRAPH"]=5,e[t[11]="SPARSE_TENSOR"]=11,e[t[13]="TYPE_PROTO"]=13,e[t[6]="FLOATS"]=6,e[t[7]="INTS"]=7,e[t[8]="STRINGS"]=8,e[t[9]="TENSORS"]=9,e[t[10]="GRAPHS"]=10,e[t[12]="SPARSE_TENSORS"]=12,e[t[14]="TYPE_PROTOS"]=14,e}(),t}(),s.ValueInfoProto=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.name="",t.prototype.type=null,t.prototype.docString="",t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(10).string(t.name),null!=t.type&&Object.hasOwnProperty.call(t,"type")&&F.onnx.TypeProto.encode(t.type,e.uint32(18).fork()).ldelim(),null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(26).string(t.docString),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.ValueInfoProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.name=t.string();break;case 2:r.type=F.onnx.TypeProto.decode(t,t.uint32());break;case 3:r.docString=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.type&&t.hasOwnProperty("type")){var e=F.onnx.TypeProto.verify(t.type);if(e)return"type."+e}return null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString)?"docString: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.ValueInfoProto)return t;var e=new F.onnx.ValueInfoProto;if(null!=t.name&&(e.name=String(t.name)),null!=t.type){if("object"!=typeof t.type)throw TypeError(".onnx.ValueInfoProto.type: object expected");e.type=F.onnx.TypeProto.fromObject(t.type)}return null!=t.docString&&(e.docString=String(t.docString)),e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.name="",n.type=null,n.docString=""),null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),null!=t.type&&t.hasOwnProperty("type")&&(n.type=F.onnx.TypeProto.toObject(t.type,e)),null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.ValueInfoProto"},t}(),s.NodeProto=function(){function t(t){if(this.input=[],this.output=[],this.attribute=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.input=l.emptyArray,t.prototype.output=l.emptyArray,t.prototype.name="",t.prototype.opType="",t.prototype.domain="",t.prototype.attribute=l.emptyArray,t.prototype.docString="",t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.input&&t.input.length)for(var n=0;n<t.input.length;++n)e.uint32(10).string(t.input[n]);if(null!=t.output&&t.output.length)for(n=0;n<t.output.length;++n)e.uint32(18).string(t.output[n]);if(null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(26).string(t.name),null!=t.opType&&Object.hasOwnProperty.call(t,"opType")&&e.uint32(34).string(t.opType),null!=t.attribute&&t.attribute.length)for(n=0;n<t.attribute.length;++n)F.onnx.AttributeProto.encode(t.attribute[n],e.uint32(42).fork()).ldelim();return null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(50).string(t.docString),null!=t.domain&&Object.hasOwnProperty.call(t,"domain")&&e.uint32(58).string(t.domain),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.NodeProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.input&&r.input.length||(r.input=[]),r.input.push(t.string());break;case 2:r.output&&r.output.length||(r.output=[]),r.output.push(t.string());break;case 3:r.name=t.string();break;case 4:r.opType=t.string();break;case 7:r.domain=t.string();break;case 5:r.attribute&&r.attribute.length||(r.attribute=[]),r.attribute.push(F.onnx.AttributeProto.decode(t,t.uint32()));break;case 6:r.docString=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.input&&t.hasOwnProperty("input")){if(!Array.isArray(t.input))return"input: array expected";for(var e=0;e<t.input.length;++e)if(!l.isString(t.input[e]))return"input: string[] expected"}if(null!=t.output&&t.hasOwnProperty("output")){if(!Array.isArray(t.output))return"output: array expected";for(e=0;e<t.output.length;++e)if(!l.isString(t.output[e]))return"output: string[] expected"}if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.opType&&t.hasOwnProperty("opType")&&!l.isString(t.opType))return"opType: string expected";if(null!=t.domain&&t.hasOwnProperty("domain")&&!l.isString(t.domain))return"domain: string expected";if(null!=t.attribute&&t.hasOwnProperty("attribute")){if(!Array.isArray(t.attribute))return"attribute: array expected";for(e=0;e<t.attribute.length;++e){var n=F.onnx.AttributeProto.verify(t.attribute[e]);if(n)return"attribute."+n}}return null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString)?"docString: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.NodeProto)return t;var e=new F.onnx.NodeProto;if(t.input){if(!Array.isArray(t.input))throw TypeError(".onnx.NodeProto.input: array expected");e.input=[];for(var n=0;n<t.input.length;++n)e.input[n]=String(t.input[n])}if(t.output){if(!Array.isArray(t.output))throw TypeError(".onnx.NodeProto.output: array expected");for(e.output=[],n=0;n<t.output.length;++n)e.output[n]=String(t.output[n])}if(null!=t.name&&(e.name=String(t.name)),null!=t.opType&&(e.opType=String(t.opType)),null!=t.domain&&(e.domain=String(t.domain)),t.attribute){if(!Array.isArray(t.attribute))throw TypeError(".onnx.NodeProto.attribute: array expected");for(e.attribute=[],n=0;n<t.attribute.length;++n){if("object"!=typeof t.attribute[n])throw TypeError(".onnx.NodeProto.attribute: object expected");e.attribute[n]=F.onnx.AttributeProto.fromObject(t.attribute[n])}}return null!=t.docString&&(e.docString=String(t.docString)),e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.input=[],n.output=[],n.attribute=[]),e.defaults&&(n.name="",n.opType="",n.docString="",n.domain=""),t.input&&t.input.length){n.input=[];for(var r=0;r<t.input.length;++r)n.input[r]=t.input[r]}if(t.output&&t.output.length)for(n.output=[],r=0;r<t.output.length;++r)n.output[r]=t.output[r];if(null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),null!=t.opType&&t.hasOwnProperty("opType")&&(n.opType=t.opType),t.attribute&&t.attribute.length)for(n.attribute=[],r=0;r<t.attribute.length;++r)n.attribute[r]=F.onnx.AttributeProto.toObject(t.attribute[r],e);return null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),null!=t.domain&&t.hasOwnProperty("domain")&&(n.domain=t.domain),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.NodeProto"},t}(),s.TrainingInfoProto=function(){function t(t){if(this.initializationBinding=[],this.updateBinding=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.initialization=null,t.prototype.algorithm=null,t.prototype.initializationBinding=l.emptyArray,t.prototype.updateBinding=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.initialization&&Object.hasOwnProperty.call(t,"initialization")&&F.onnx.GraphProto.encode(t.initialization,e.uint32(10).fork()).ldelim(),null!=t.algorithm&&Object.hasOwnProperty.call(t,"algorithm")&&F.onnx.GraphProto.encode(t.algorithm,e.uint32(18).fork()).ldelim(),null!=t.initializationBinding&&t.initializationBinding.length)for(var n=0;n<t.initializationBinding.length;++n)F.onnx.StringStringEntryProto.encode(t.initializationBinding[n],e.uint32(26).fork()).ldelim();if(null!=t.updateBinding&&t.updateBinding.length)for(n=0;n<t.updateBinding.length;++n)F.onnx.StringStringEntryProto.encode(t.updateBinding[n],e.uint32(34).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TrainingInfoProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.initialization=F.onnx.GraphProto.decode(t,t.uint32());break;case 2:r.algorithm=F.onnx.GraphProto.decode(t,t.uint32());break;case 3:r.initializationBinding&&r.initializationBinding.length||(r.initializationBinding=[]),r.initializationBinding.push(F.onnx.StringStringEntryProto.decode(t,t.uint32()));break;case 4:r.updateBinding&&r.updateBinding.length||(r.updateBinding=[]),r.updateBinding.push(F.onnx.StringStringEntryProto.decode(t,t.uint32()));break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.initialization&&t.hasOwnProperty("initialization")&&(n=F.onnx.GraphProto.verify(t.initialization)))return"initialization."+n;if(null!=t.algorithm&&t.hasOwnProperty("algorithm")&&(n=F.onnx.GraphProto.verify(t.algorithm)))return"algorithm."+n;if(null!=t.initializationBinding&&t.hasOwnProperty("initializationBinding")){if(!Array.isArray(t.initializationBinding))return"initializationBinding: array expected";for(var e=0;e<t.initializationBinding.length;++e)if(n=F.onnx.StringStringEntryProto.verify(t.initializationBinding[e]))return"initializationBinding."+n}if(null!=t.updateBinding&&t.hasOwnProperty("updateBinding")){if(!Array.isArray(t.updateBinding))return"updateBinding: array expected";for(e=0;e<t.updateBinding.length;++e){var n;if(n=F.onnx.StringStringEntryProto.verify(t.updateBinding[e]))return"updateBinding."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.TrainingInfoProto)return t;var e=new F.onnx.TrainingInfoProto;if(null!=t.initialization){if("object"!=typeof t.initialization)throw TypeError(".onnx.TrainingInfoProto.initialization: object expected");e.initialization=F.onnx.GraphProto.fromObject(t.initialization)}if(null!=t.algorithm){if("object"!=typeof t.algorithm)throw TypeError(".onnx.TrainingInfoProto.algorithm: object expected");e.algorithm=F.onnx.GraphProto.fromObject(t.algorithm)}if(t.initializationBinding){if(!Array.isArray(t.initializationBinding))throw TypeError(".onnx.TrainingInfoProto.initializationBinding: array expected");e.initializationBinding=[];for(var n=0;n<t.initializationBinding.length;++n){if("object"!=typeof t.initializationBinding[n])throw TypeError(".onnx.TrainingInfoProto.initializationBinding: object expected");e.initializationBinding[n]=F.onnx.StringStringEntryProto.fromObject(t.initializationBinding[n])}}if(t.updateBinding){if(!Array.isArray(t.updateBinding))throw TypeError(".onnx.TrainingInfoProto.updateBinding: array expected");for(e.updateBinding=[],n=0;n<t.updateBinding.length;++n){if("object"!=typeof t.updateBinding[n])throw TypeError(".onnx.TrainingInfoProto.updateBinding: object expected");e.updateBinding[n]=F.onnx.StringStringEntryProto.fromObject(t.updateBinding[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.initializationBinding=[],n.updateBinding=[]),e.defaults&&(n.initialization=null,n.algorithm=null),null!=t.initialization&&t.hasOwnProperty("initialization")&&(n.initialization=F.onnx.GraphProto.toObject(t.initialization,e)),null!=t.algorithm&&t.hasOwnProperty("algorithm")&&(n.algorithm=F.onnx.GraphProto.toObject(t.algorithm,e)),t.initializationBinding&&t.initializationBinding.length){n.initializationBinding=[];for(var r=0;r<t.initializationBinding.length;++r)n.initializationBinding[r]=F.onnx.StringStringEntryProto.toObject(t.initializationBinding[r],e)}if(t.updateBinding&&t.updateBinding.length)for(n.updateBinding=[],r=0;r<t.updateBinding.length;++r)n.updateBinding[r]=F.onnx.StringStringEntryProto.toObject(t.updateBinding[r],e);return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TrainingInfoProto"},t}(),s.ModelProto=function(){function t(t){if(this.opsetImport=[],this.metadataProps=[],this.trainingInfo=[],this.functions=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.irVersion=l.Long?l.Long.fromBits(0,0,!1):0,t.prototype.opsetImport=l.emptyArray,t.prototype.producerName="",t.prototype.producerVersion="",t.prototype.domain="",t.prototype.modelVersion=l.Long?l.Long.fromBits(0,0,!1):0,t.prototype.docString="",t.prototype.graph=null,t.prototype.metadataProps=l.emptyArray,t.prototype.trainingInfo=l.emptyArray,t.prototype.functions=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.irVersion&&Object.hasOwnProperty.call(t,"irVersion")&&e.uint32(8).int64(t.irVersion),null!=t.producerName&&Object.hasOwnProperty.call(t,"producerName")&&e.uint32(18).string(t.producerName),null!=t.producerVersion&&Object.hasOwnProperty.call(t,"producerVersion")&&e.uint32(26).string(t.producerVersion),null!=t.domain&&Object.hasOwnProperty.call(t,"domain")&&e.uint32(34).string(t.domain),null!=t.modelVersion&&Object.hasOwnProperty.call(t,"modelVersion")&&e.uint32(40).int64(t.modelVersion),null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(50).string(t.docString),null!=t.graph&&Object.hasOwnProperty.call(t,"graph")&&F.onnx.GraphProto.encode(t.graph,e.uint32(58).fork()).ldelim(),null!=t.opsetImport&&t.opsetImport.length)for(var n=0;n<t.opsetImport.length;++n)F.onnx.OperatorSetIdProto.encode(t.opsetImport[n],e.uint32(66).fork()).ldelim();if(null!=t.metadataProps&&t.metadataProps.length)for(n=0;n<t.metadataProps.length;++n)F.onnx.StringStringEntryProto.encode(t.metadataProps[n],e.uint32(114).fork()).ldelim();if(null!=t.trainingInfo&&t.trainingInfo.length)for(n=0;n<t.trainingInfo.length;++n)F.onnx.TrainingInfoProto.encode(t.trainingInfo[n],e.uint32(162).fork()).ldelim();if(null!=t.functions&&t.functions.length)for(n=0;n<t.functions.length;++n)F.onnx.FunctionProto.encode(t.functions[n],e.uint32(202).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.ModelProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.irVersion=t.int64();break;case 8:r.opsetImport&&r.opsetImport.length||(r.opsetImport=[]),r.opsetImport.push(F.onnx.OperatorSetIdProto.decode(t,t.uint32()));break;case 2:r.producerName=t.string();break;case 3:r.producerVersion=t.string();break;case 4:r.domain=t.string();break;case 5:r.modelVersion=t.int64();break;case 6:r.docString=t.string();break;case 7:r.graph=F.onnx.GraphProto.decode(t,t.uint32());break;case 14:r.metadataProps&&r.metadataProps.length||(r.metadataProps=[]),r.metadataProps.push(F.onnx.StringStringEntryProto.decode(t,t.uint32()));break;case 20:r.trainingInfo&&r.trainingInfo.length||(r.trainingInfo=[]),r.trainingInfo.push(F.onnx.TrainingInfoProto.decode(t,t.uint32()));break;case 25:r.functions&&r.functions.length||(r.functions=[]),r.functions.push(F.onnx.FunctionProto.decode(t,t.uint32()));break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.irVersion&&t.hasOwnProperty("irVersion")&&!(l.isInteger(t.irVersion)||t.irVersion&&l.isInteger(t.irVersion.low)&&l.isInteger(t.irVersion.high)))return"irVersion: integer|Long expected";if(null!=t.opsetImport&&t.hasOwnProperty("opsetImport")){if(!Array.isArray(t.opsetImport))return"opsetImport: array expected";for(var e=0;e<t.opsetImport.length;++e)if(n=F.onnx.OperatorSetIdProto.verify(t.opsetImport[e]))return"opsetImport."+n}if(null!=t.producerName&&t.hasOwnProperty("producerName")&&!l.isString(t.producerName))return"producerName: string expected";if(null!=t.producerVersion&&t.hasOwnProperty("producerVersion")&&!l.isString(t.producerVersion))return"producerVersion: string expected";if(null!=t.domain&&t.hasOwnProperty("domain")&&!l.isString(t.domain))return"domain: string expected";if(null!=t.modelVersion&&t.hasOwnProperty("modelVersion")&&!(l.isInteger(t.modelVersion)||t.modelVersion&&l.isInteger(t.modelVersion.low)&&l.isInteger(t.modelVersion.high)))return"modelVersion: integer|Long expected";if(null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString))return"docString: string expected";if(null!=t.graph&&t.hasOwnProperty("graph")&&(n=F.onnx.GraphProto.verify(t.graph)))return"graph."+n;if(null!=t.metadataProps&&t.hasOwnProperty("metadataProps")){if(!Array.isArray(t.metadataProps))return"metadataProps: array expected";for(e=0;e<t.metadataProps.length;++e)if(n=F.onnx.StringStringEntryProto.verify(t.metadataProps[e]))return"metadataProps."+n}if(null!=t.trainingInfo&&t.hasOwnProperty("trainingInfo")){if(!Array.isArray(t.trainingInfo))return"trainingInfo: array expected";for(e=0;e<t.trainingInfo.length;++e)if(n=F.onnx.TrainingInfoProto.verify(t.trainingInfo[e]))return"trainingInfo."+n}if(null!=t.functions&&t.hasOwnProperty("functions")){if(!Array.isArray(t.functions))return"functions: array expected";for(e=0;e<t.functions.length;++e){var n;if(n=F.onnx.FunctionProto.verify(t.functions[e]))return"functions."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.ModelProto)return t;var e=new F.onnx.ModelProto;if(null!=t.irVersion&&(l.Long?(e.irVersion=l.Long.fromValue(t.irVersion)).unsigned=!1:"string"==typeof t.irVersion?e.irVersion=parseInt(t.irVersion,10):"number"==typeof t.irVersion?e.irVersion=t.irVersion:"object"==typeof t.irVersion&&(e.irVersion=new l.LongBits(t.irVersion.low>>>0,t.irVersion.high>>>0).toNumber())),t.opsetImport){if(!Array.isArray(t.opsetImport))throw TypeError(".onnx.ModelProto.opsetImport: array expected");e.opsetImport=[];for(var n=0;n<t.opsetImport.length;++n){if("object"!=typeof t.opsetImport[n])throw TypeError(".onnx.ModelProto.opsetImport: object expected");e.opsetImport[n]=F.onnx.OperatorSetIdProto.fromObject(t.opsetImport[n])}}if(null!=t.producerName&&(e.producerName=String(t.producerName)),null!=t.producerVersion&&(e.producerVersion=String(t.producerVersion)),null!=t.domain&&(e.domain=String(t.domain)),null!=t.modelVersion&&(l.Long?(e.modelVersion=l.Long.fromValue(t.modelVersion)).unsigned=!1:"string"==typeof t.modelVersion?e.modelVersion=parseInt(t.modelVersion,10):"number"==typeof t.modelVersion?e.modelVersion=t.modelVersion:"object"==typeof t.modelVersion&&(e.modelVersion=new l.LongBits(t.modelVersion.low>>>0,t.modelVersion.high>>>0).toNumber())),null!=t.docString&&(e.docString=String(t.docString)),null!=t.graph){if("object"!=typeof t.graph)throw TypeError(".onnx.ModelProto.graph: object expected");e.graph=F.onnx.GraphProto.fromObject(t.graph)}if(t.metadataProps){if(!Array.isArray(t.metadataProps))throw TypeError(".onnx.ModelProto.metadataProps: array expected");for(e.metadataProps=[],n=0;n<t.metadataProps.length;++n){if("object"!=typeof t.metadataProps[n])throw TypeError(".onnx.ModelProto.metadataProps: object expected");e.metadataProps[n]=F.onnx.StringStringEntryProto.fromObject(t.metadataProps[n])}}if(t.trainingInfo){if(!Array.isArray(t.trainingInfo))throw TypeError(".onnx.ModelProto.trainingInfo: array expected");for(e.trainingInfo=[],n=0;n<t.trainingInfo.length;++n){if("object"!=typeof t.trainingInfo[n])throw TypeError(".onnx.ModelProto.trainingInfo: object expected");e.trainingInfo[n]=F.onnx.TrainingInfoProto.fromObject(t.trainingInfo[n])}}if(t.functions){if(!Array.isArray(t.functions))throw TypeError(".onnx.ModelProto.functions: array expected");for(e.functions=[],n=0;n<t.functions.length;++n){if("object"!=typeof t.functions[n])throw TypeError(".onnx.ModelProto.functions: object expected");e.functions[n]=F.onnx.FunctionProto.fromObject(t.functions[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.opsetImport=[],n.metadataProps=[],n.trainingInfo=[],n.functions=[]),e.defaults){if(l.Long){var r=new l.Long(0,0,!1);n.irVersion=e.longs===String?r.toString():e.longs===Number?r.toNumber():r}else n.irVersion=e.longs===String?"0":0;n.producerName="",n.producerVersion="",n.domain="",l.Long?(r=new l.Long(0,0,!1),n.modelVersion=e.longs===String?r.toString():e.longs===Number?r.toNumber():r):n.modelVersion=e.longs===String?"0":0,n.docString="",n.graph=null}if(null!=t.irVersion&&t.hasOwnProperty("irVersion")&&("number"==typeof t.irVersion?n.irVersion=e.longs===String?String(t.irVersion):t.irVersion:n.irVersion=e.longs===String?l.Long.prototype.toString.call(t.irVersion):e.longs===Number?new l.LongBits(t.irVersion.low>>>0,t.irVersion.high>>>0).toNumber():t.irVersion),null!=t.producerName&&t.hasOwnProperty("producerName")&&(n.producerName=t.producerName),null!=t.producerVersion&&t.hasOwnProperty("producerVersion")&&(n.producerVersion=t.producerVersion),null!=t.domain&&t.hasOwnProperty("domain")&&(n.domain=t.domain),null!=t.modelVersion&&t.hasOwnProperty("modelVersion")&&("number"==typeof t.modelVersion?n.modelVersion=e.longs===String?String(t.modelVersion):t.modelVersion:n.modelVersion=e.longs===String?l.Long.prototype.toString.call(t.modelVersion):e.longs===Number?new l.LongBits(t.modelVersion.low>>>0,t.modelVersion.high>>>0).toNumber():t.modelVersion),null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),null!=t.graph&&t.hasOwnProperty("graph")&&(n.graph=F.onnx.GraphProto.toObject(t.graph,e)),t.opsetImport&&t.opsetImport.length){n.opsetImport=[];for(var s=0;s<t.opsetImport.length;++s)n.opsetImport[s]=F.onnx.OperatorSetIdProto.toObject(t.opsetImport[s],e)}if(t.metadataProps&&t.metadataProps.length)for(n.metadataProps=[],s=0;s<t.metadataProps.length;++s)n.metadataProps[s]=F.onnx.StringStringEntryProto.toObject(t.metadataProps[s],e);if(t.trainingInfo&&t.trainingInfo.length)for(n.trainingInfo=[],s=0;s<t.trainingInfo.length;++s)n.trainingInfo[s]=F.onnx.TrainingInfoProto.toObject(t.trainingInfo[s],e);if(t.functions&&t.functions.length)for(n.functions=[],s=0;s<t.functions.length;++s)n.functions[s]=F.onnx.FunctionProto.toObject(t.functions[s],e);return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.ModelProto"},t}(),s.StringStringEntryProto=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.key="",t.prototype.value="",t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.key&&Object.hasOwnProperty.call(t,"key")&&e.uint32(10).string(t.key),null!=t.value&&Object.hasOwnProperty.call(t,"value")&&e.uint32(18).string(t.value),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.StringStringEntryProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.key=t.string();break;case 2:r.value=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){return"object"!=typeof t||null===t?"object expected":null!=t.key&&t.hasOwnProperty("key")&&!l.isString(t.key)?"key: string expected":null!=t.value&&t.hasOwnProperty("value")&&!l.isString(t.value)?"value: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.StringStringEntryProto)return t;var e=new F.onnx.StringStringEntryProto;return null!=t.key&&(e.key=String(t.key)),null!=t.value&&(e.value=String(t.value)),e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.key="",n.value=""),null!=t.key&&t.hasOwnProperty("key")&&(n.key=t.key),null!=t.value&&t.hasOwnProperty("value")&&(n.value=t.value),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.StringStringEntryProto"},t}(),s.TensorAnnotation=function(){function t(t){if(this.quantParameterTensorNames=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.tensorName="",t.prototype.quantParameterTensorNames=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.tensorName&&Object.hasOwnProperty.call(t,"tensorName")&&e.uint32(10).string(t.tensorName),null!=t.quantParameterTensorNames&&t.quantParameterTensorNames.length)for(var n=0;n<t.quantParameterTensorNames.length;++n)F.onnx.StringStringEntryProto.encode(t.quantParameterTensorNames[n],e.uint32(18).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TensorAnnotation;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.tensorName=t.string();break;case 2:r.quantParameterTensorNames&&r.quantParameterTensorNames.length||(r.quantParameterTensorNames=[]),r.quantParameterTensorNames.push(F.onnx.StringStringEntryProto.decode(t,t.uint32()));break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.tensorName&&t.hasOwnProperty("tensorName")&&!l.isString(t.tensorName))return"tensorName: string expected";if(null!=t.quantParameterTensorNames&&t.hasOwnProperty("quantParameterTensorNames")){if(!Array.isArray(t.quantParameterTensorNames))return"quantParameterTensorNames: array expected";for(var e=0;e<t.quantParameterTensorNames.length;++e){var n=F.onnx.StringStringEntryProto.verify(t.quantParameterTensorNames[e]);if(n)return"quantParameterTensorNames."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.TensorAnnotation)return t;var e=new F.onnx.TensorAnnotation;if(null!=t.tensorName&&(e.tensorName=String(t.tensorName)),t.quantParameterTensorNames){if(!Array.isArray(t.quantParameterTensorNames))throw TypeError(".onnx.TensorAnnotation.quantParameterTensorNames: array expected");e.quantParameterTensorNames=[];for(var n=0;n<t.quantParameterTensorNames.length;++n){if("object"!=typeof t.quantParameterTensorNames[n])throw TypeError(".onnx.TensorAnnotation.quantParameterTensorNames: object expected");e.quantParameterTensorNames[n]=F.onnx.StringStringEntryProto.fromObject(t.quantParameterTensorNames[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.quantParameterTensorNames=[]),e.defaults&&(n.tensorName=""),null!=t.tensorName&&t.hasOwnProperty("tensorName")&&(n.tensorName=t.tensorName),t.quantParameterTensorNames&&t.quantParameterTensorNames.length){n.quantParameterTensorNames=[];for(var r=0;r<t.quantParameterTensorNames.length;++r)n.quantParameterTensorNames[r]=F.onnx.StringStringEntryProto.toObject(t.quantParameterTensorNames[r],e)}return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TensorAnnotation"},t}(),s.GraphProto=function(){function t(t){if(this.node=[],this.initializer=[],this.sparseInitializer=[],this.input=[],this.output=[],this.valueInfo=[],this.quantizationAnnotation=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.node=l.emptyArray,t.prototype.name="",t.prototype.initializer=l.emptyArray,t.prototype.sparseInitializer=l.emptyArray,t.prototype.docString="",t.prototype.input=l.emptyArray,t.prototype.output=l.emptyArray,t.prototype.valueInfo=l.emptyArray,t.prototype.quantizationAnnotation=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.node&&t.node.length)for(var n=0;n<t.node.length;++n)F.onnx.NodeProto.encode(t.node[n],e.uint32(10).fork()).ldelim();if(null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(18).string(t.name),null!=t.initializer&&t.initializer.length)for(n=0;n<t.initializer.length;++n)F.onnx.TensorProto.encode(t.initializer[n],e.uint32(42).fork()).ldelim();if(null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(82).string(t.docString),null!=t.input&&t.input.length)for(n=0;n<t.input.length;++n)F.onnx.ValueInfoProto.encode(t.input[n],e.uint32(90).fork()).ldelim();if(null!=t.output&&t.output.length)for(n=0;n<t.output.length;++n)F.onnx.ValueInfoProto.encode(t.output[n],e.uint32(98).fork()).ldelim();if(null!=t.valueInfo&&t.valueInfo.length)for(n=0;n<t.valueInfo.length;++n)F.onnx.ValueInfoProto.encode(t.valueInfo[n],e.uint32(106).fork()).ldelim();if(null!=t.quantizationAnnotation&&t.quantizationAnnotation.length)for(n=0;n<t.quantizationAnnotation.length;++n)F.onnx.TensorAnnotation.encode(t.quantizationAnnotation[n],e.uint32(114).fork()).ldelim();if(null!=t.sparseInitializer&&t.sparseInitializer.length)for(n=0;n<t.sparseInitializer.length;++n)F.onnx.SparseTensorProto.encode(t.sparseInitializer[n],e.uint32(122).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.GraphProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.node&&r.node.length||(r.node=[]),r.node.push(F.onnx.NodeProto.decode(t,t.uint32()));break;case 2:r.name=t.string();break;case 5:r.initializer&&r.initializer.length||(r.initializer=[]),r.initializer.push(F.onnx.TensorProto.decode(t,t.uint32()));break;case 15:r.sparseInitializer&&r.sparseInitializer.length||(r.sparseInitializer=[]),r.sparseInitializer.push(F.onnx.SparseTensorProto.decode(t,t.uint32()));break;case 10:r.docString=t.string();break;case 11:r.input&&r.input.length||(r.input=[]),r.input.push(F.onnx.ValueInfoProto.decode(t,t.uint32()));break;case 12:r.output&&r.output.length||(r.output=[]),r.output.push(F.onnx.ValueInfoProto.decode(t,t.uint32()));break;case 13:r.valueInfo&&r.valueInfo.length||(r.valueInfo=[]),r.valueInfo.push(F.onnx.ValueInfoProto.decode(t,t.uint32()));break;case 14:r.quantizationAnnotation&&r.quantizationAnnotation.length||(r.quantizationAnnotation=[]),r.quantizationAnnotation.push(F.onnx.TensorAnnotation.decode(t,t.uint32()));break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.node&&t.hasOwnProperty("node")){if(!Array.isArray(t.node))return"node: array expected";for(var e=0;e<t.node.length;++e)if(n=F.onnx.NodeProto.verify(t.node[e]))return"node."+n}if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.initializer&&t.hasOwnProperty("initializer")){if(!Array.isArray(t.initializer))return"initializer: array expected";for(e=0;e<t.initializer.length;++e)if(n=F.onnx.TensorProto.verify(t.initializer[e]))return"initializer."+n}if(null!=t.sparseInitializer&&t.hasOwnProperty("sparseInitializer")){if(!Array.isArray(t.sparseInitializer))return"sparseInitializer: array expected";for(e=0;e<t.sparseInitializer.length;++e)if(n=F.onnx.SparseTensorProto.verify(t.sparseInitializer[e]))return"sparseInitializer."+n}if(null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString))return"docString: string expected";if(null!=t.input&&t.hasOwnProperty("input")){if(!Array.isArray(t.input))return"input: array expected";for(e=0;e<t.input.length;++e)if(n=F.onnx.ValueInfoProto.verify(t.input[e]))return"input."+n}if(null!=t.output&&t.hasOwnProperty("output")){if(!Array.isArray(t.output))return"output: array expected";for(e=0;e<t.output.length;++e)if(n=F.onnx.ValueInfoProto.verify(t.output[e]))return"output."+n}if(null!=t.valueInfo&&t.hasOwnProperty("valueInfo")){if(!Array.isArray(t.valueInfo))return"valueInfo: array expected";for(e=0;e<t.valueInfo.length;++e)if(n=F.onnx.ValueInfoProto.verify(t.valueInfo[e]))return"valueInfo."+n}if(null!=t.quantizationAnnotation&&t.hasOwnProperty("quantizationAnnotation")){if(!Array.isArray(t.quantizationAnnotation))return"quantizationAnnotation: array expected";for(e=0;e<t.quantizationAnnotation.length;++e){var n;if(n=F.onnx.TensorAnnotation.verify(t.quantizationAnnotation[e]))return"quantizationAnnotation."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.GraphProto)return t;var e=new F.onnx.GraphProto;if(t.node){if(!Array.isArray(t.node))throw TypeError(".onnx.GraphProto.node: array expected");e.node=[];for(var n=0;n<t.node.length;++n){if("object"!=typeof t.node[n])throw TypeError(".onnx.GraphProto.node: object expected");e.node[n]=F.onnx.NodeProto.fromObject(t.node[n])}}if(null!=t.name&&(e.name=String(t.name)),t.initializer){if(!Array.isArray(t.initializer))throw TypeError(".onnx.GraphProto.initializer: array expected");for(e.initializer=[],n=0;n<t.initializer.length;++n){if("object"!=typeof t.initializer[n])throw TypeError(".onnx.GraphProto.initializer: object expected");e.initializer[n]=F.onnx.TensorProto.fromObject(t.initializer[n])}}if(t.sparseInitializer){if(!Array.isArray(t.sparseInitializer))throw TypeError(".onnx.GraphProto.sparseInitializer: array expected");for(e.sparseInitializer=[],n=0;n<t.sparseInitializer.length;++n){if("object"!=typeof t.sparseInitializer[n])throw TypeError(".onnx.GraphProto.sparseInitializer: object expected");e.sparseInitializer[n]=F.onnx.SparseTensorProto.fromObject(t.sparseInitializer[n])}}if(null!=t.docString&&(e.docString=String(t.docString)),t.input){if(!Array.isArray(t.input))throw TypeError(".onnx.GraphProto.input: array expected");for(e.input=[],n=0;n<t.input.length;++n){if("object"!=typeof t.input[n])throw TypeError(".onnx.GraphProto.input: object expected");e.input[n]=F.onnx.ValueInfoProto.fromObject(t.input[n])}}if(t.output){if(!Array.isArray(t.output))throw TypeError(".onnx.GraphProto.output: array expected");for(e.output=[],n=0;n<t.output.length;++n){if("object"!=typeof t.output[n])throw TypeError(".onnx.GraphProto.output: object expected");e.output[n]=F.onnx.ValueInfoProto.fromObject(t.output[n])}}if(t.valueInfo){if(!Array.isArray(t.valueInfo))throw TypeError(".onnx.GraphProto.valueInfo: array expected");for(e.valueInfo=[],n=0;n<t.valueInfo.length;++n){if("object"!=typeof t.valueInfo[n])throw TypeError(".onnx.GraphProto.valueInfo: object expected");e.valueInfo[n]=F.onnx.ValueInfoProto.fromObject(t.valueInfo[n])}}if(t.quantizationAnnotation){if(!Array.isArray(t.quantizationAnnotation))throw TypeError(".onnx.GraphProto.quantizationAnnotation: array expected");for(e.quantizationAnnotation=[],n=0;n<t.quantizationAnnotation.length;++n){if("object"!=typeof t.quantizationAnnotation[n])throw TypeError(".onnx.GraphProto.quantizationAnnotation: object expected");e.quantizationAnnotation[n]=F.onnx.TensorAnnotation.fromObject(t.quantizationAnnotation[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.node=[],n.initializer=[],n.input=[],n.output=[],n.valueInfo=[],n.quantizationAnnotation=[],n.sparseInitializer=[]),e.defaults&&(n.name="",n.docString=""),t.node&&t.node.length){n.node=[];for(var r=0;r<t.node.length;++r)n.node[r]=F.onnx.NodeProto.toObject(t.node[r],e)}if(null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),t.initializer&&t.initializer.length)for(n.initializer=[],r=0;r<t.initializer.length;++r)n.initializer[r]=F.onnx.TensorProto.toObject(t.initializer[r],e);if(null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),t.input&&t.input.length)for(n.input=[],r=0;r<t.input.length;++r)n.input[r]=F.onnx.ValueInfoProto.toObject(t.input[r],e);if(t.output&&t.output.length)for(n.output=[],r=0;r<t.output.length;++r)n.output[r]=F.onnx.ValueInfoProto.toObject(t.output[r],e);if(t.valueInfo&&t.valueInfo.length)for(n.valueInfo=[],r=0;r<t.valueInfo.length;++r)n.valueInfo[r]=F.onnx.ValueInfoProto.toObject(t.valueInfo[r],e);if(t.quantizationAnnotation&&t.quantizationAnnotation.length)for(n.quantizationAnnotation=[],r=0;r<t.quantizationAnnotation.length;++r)n.quantizationAnnotation[r]=F.onnx.TensorAnnotation.toObject(t.quantizationAnnotation[r],e);if(t.sparseInitializer&&t.sparseInitializer.length)for(n.sparseInitializer=[],r=0;r<t.sparseInitializer.length;++r)n.sparseInitializer[r]=F.onnx.SparseTensorProto.toObject(t.sparseInitializer[r],e);return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.GraphProto"},t}(),s.TensorProto=function(){function t(t){if(this.dims=[],this.floatData=[],this.int32Data=[],this.stringData=[],this.int64Data=[],this.externalData=[],this.doubleData=[],this.uint64Data=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.dims=l.emptyArray,t.prototype.dataType=0,t.prototype.segment=null,t.prototype.floatData=l.emptyArray,t.prototype.int32Data=l.emptyArray,t.prototype.stringData=l.emptyArray,t.prototype.int64Data=l.emptyArray,t.prototype.name="",t.prototype.docString="",t.prototype.rawData=l.newBuffer([]),t.prototype.externalData=l.emptyArray,t.prototype.dataLocation=0,t.prototype.doubleData=l.emptyArray,t.prototype.uint64Data=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.dims&&t.dims.length){e.uint32(10).fork();for(var n=0;n<t.dims.length;++n)e.int64(t.dims[n]);e.ldelim()}if(null!=t.dataType&&Object.hasOwnProperty.call(t,"dataType")&&e.uint32(16).int32(t.dataType),null!=t.segment&&Object.hasOwnProperty.call(t,"segment")&&F.onnx.TensorProto.Segment.encode(t.segment,e.uint32(26).fork()).ldelim(),null!=t.floatData&&t.floatData.length){for(e.uint32(34).fork(),n=0;n<t.floatData.length;++n)e.float(t.floatData[n]);e.ldelim()}if(null!=t.int32Data&&t.int32Data.length){for(e.uint32(42).fork(),n=0;n<t.int32Data.length;++n)e.int32(t.int32Data[n]);e.ldelim()}if(null!=t.stringData&&t.stringData.length)for(n=0;n<t.stringData.length;++n)e.uint32(50).bytes(t.stringData[n]);if(null!=t.int64Data&&t.int64Data.length){for(e.uint32(58).fork(),n=0;n<t.int64Data.length;++n)e.int64(t.int64Data[n]);e.ldelim()}if(null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(66).string(t.name),null!=t.rawData&&Object.hasOwnProperty.call(t,"rawData")&&e.uint32(74).bytes(t.rawData),null!=t.doubleData&&t.doubleData.length){for(e.uint32(82).fork(),n=0;n<t.doubleData.length;++n)e.double(t.doubleData[n]);e.ldelim()}if(null!=t.uint64Data&&t.uint64Data.length){for(e.uint32(90).fork(),n=0;n<t.uint64Data.length;++n)e.uint64(t.uint64Data[n]);e.ldelim()}if(null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(98).string(t.docString),null!=t.externalData&&t.externalData.length)for(n=0;n<t.externalData.length;++n)F.onnx.StringStringEntryProto.encode(t.externalData[n],e.uint32(106).fork()).ldelim();return null!=t.dataLocation&&Object.hasOwnProperty.call(t,"dataLocation")&&e.uint32(112).int32(t.dataLocation),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TensorProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:if(r.dims&&r.dims.length||(r.dims=[]),2==(7&s))for(var i=t.uint32()+t.pos;t.pos<i;)r.dims.push(t.int64());else r.dims.push(t.int64());break;case 2:r.dataType=t.int32();break;case 3:r.segment=F.onnx.TensorProto.Segment.decode(t,t.uint32());break;case 4:if(r.floatData&&r.floatData.length||(r.floatData=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.floatData.push(t.float());else r.floatData.push(t.float());break;case 5:if(r.int32Data&&r.int32Data.length||(r.int32Data=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.int32Data.push(t.int32());else r.int32Data.push(t.int32());break;case 6:r.stringData&&r.stringData.length||(r.stringData=[]),r.stringData.push(t.bytes());break;case 7:if(r.int64Data&&r.int64Data.length||(r.int64Data=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.int64Data.push(t.int64());else r.int64Data.push(t.int64());break;case 8:r.name=t.string();break;case 12:r.docString=t.string();break;case 9:r.rawData=t.bytes();break;case 13:r.externalData&&r.externalData.length||(r.externalData=[]),r.externalData.push(F.onnx.StringStringEntryProto.decode(t,t.uint32()));break;case 14:r.dataLocation=t.int32();break;case 10:if(r.doubleData&&r.doubleData.length||(r.doubleData=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.doubleData.push(t.double());else r.doubleData.push(t.double());break;case 11:if(r.uint64Data&&r.uint64Data.length||(r.uint64Data=[]),2==(7&s))for(i=t.uint32()+t.pos;t.pos<i;)r.uint64Data.push(t.uint64());else r.uint64Data.push(t.uint64());break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.dims&&t.hasOwnProperty("dims")){if(!Array.isArray(t.dims))return"dims: array expected";for(var e=0;e<t.dims.length;++e)if(!(l.isInteger(t.dims[e])||t.dims[e]&&l.isInteger(t.dims[e].low)&&l.isInteger(t.dims[e].high)))return"dims: integer|Long[] expected"}if(null!=t.dataType&&t.hasOwnProperty("dataType")&&!l.isInteger(t.dataType))return"dataType: integer expected";if(null!=t.segment&&t.hasOwnProperty("segment")&&(n=F.onnx.TensorProto.Segment.verify(t.segment)))return"segment."+n;if(null!=t.floatData&&t.hasOwnProperty("floatData")){if(!Array.isArray(t.floatData))return"floatData: array expected";for(e=0;e<t.floatData.length;++e)if("number"!=typeof t.floatData[e])return"floatData: number[] expected"}if(null!=t.int32Data&&t.hasOwnProperty("int32Data")){if(!Array.isArray(t.int32Data))return"int32Data: array expected";for(e=0;e<t.int32Data.length;++e)if(!l.isInteger(t.int32Data[e]))return"int32Data: integer[] expected"}if(null!=t.stringData&&t.hasOwnProperty("stringData")){if(!Array.isArray(t.stringData))return"stringData: array expected";for(e=0;e<t.stringData.length;++e)if(!(t.stringData[e]&&"number"==typeof t.stringData[e].length||l.isString(t.stringData[e])))return"stringData: buffer[] expected"}if(null!=t.int64Data&&t.hasOwnProperty("int64Data")){if(!Array.isArray(t.int64Data))return"int64Data: array expected";for(e=0;e<t.int64Data.length;++e)if(!(l.isInteger(t.int64Data[e])||t.int64Data[e]&&l.isInteger(t.int64Data[e].low)&&l.isInteger(t.int64Data[e].high)))return"int64Data: integer|Long[] expected"}if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString))return"docString: string expected";if(null!=t.rawData&&t.hasOwnProperty("rawData")&&!(t.rawData&&"number"==typeof t.rawData.length||l.isString(t.rawData)))return"rawData: buffer expected";if(null!=t.externalData&&t.hasOwnProperty("externalData")){if(!Array.isArray(t.externalData))return"externalData: array expected";for(e=0;e<t.externalData.length;++e){var n;if(n=F.onnx.StringStringEntryProto.verify(t.externalData[e]))return"externalData."+n}}if(null!=t.dataLocation&&t.hasOwnProperty("dataLocation"))switch(t.dataLocation){default:return"dataLocation: enum value expected";case 0:case 1:}if(null!=t.doubleData&&t.hasOwnProperty("doubleData")){if(!Array.isArray(t.doubleData))return"doubleData: array expected";for(e=0;e<t.doubleData.length;++e)if("number"!=typeof t.doubleData[e])return"doubleData: number[] expected"}if(null!=t.uint64Data&&t.hasOwnProperty("uint64Data")){if(!Array.isArray(t.uint64Data))return"uint64Data: array expected";for(e=0;e<t.uint64Data.length;++e)if(!(l.isInteger(t.uint64Data[e])||t.uint64Data[e]&&l.isInteger(t.uint64Data[e].low)&&l.isInteger(t.uint64Data[e].high)))return"uint64Data: integer|Long[] expected"}return null},t.fromObject=function(t){if(t instanceof F.onnx.TensorProto)return t;var e=new F.onnx.TensorProto;if(t.dims){if(!Array.isArray(t.dims))throw TypeError(".onnx.TensorProto.dims: array expected");e.dims=[];for(var n=0;n<t.dims.length;++n)l.Long?(e.dims[n]=l.Long.fromValue(t.dims[n])).unsigned=!1:"string"==typeof t.dims[n]?e.dims[n]=parseInt(t.dims[n],10):"number"==typeof t.dims[n]?e.dims[n]=t.dims[n]:"object"==typeof t.dims[n]&&(e.dims[n]=new l.LongBits(t.dims[n].low>>>0,t.dims[n].high>>>0).toNumber())}if(null!=t.dataType&&(e.dataType=0|t.dataType),null!=t.segment){if("object"!=typeof t.segment)throw TypeError(".onnx.TensorProto.segment: object expected");e.segment=F.onnx.TensorProto.Segment.fromObject(t.segment)}if(t.floatData){if(!Array.isArray(t.floatData))throw TypeError(".onnx.TensorProto.floatData: array expected");for(e.floatData=[],n=0;n<t.floatData.length;++n)e.floatData[n]=Number(t.floatData[n])}if(t.int32Data){if(!Array.isArray(t.int32Data))throw TypeError(".onnx.TensorProto.int32Data: array expected");for(e.int32Data=[],n=0;n<t.int32Data.length;++n)e.int32Data[n]=0|t.int32Data[n]}if(t.stringData){if(!Array.isArray(t.stringData))throw TypeError(".onnx.TensorProto.stringData: array expected");for(e.stringData=[],n=0;n<t.stringData.length;++n)"string"==typeof t.stringData[n]?l.base64.decode(t.stringData[n],e.stringData[n]=l.newBuffer(l.base64.length(t.stringData[n])),0):t.stringData[n].length>=0&&(e.stringData[n]=t.stringData[n])}if(t.int64Data){if(!Array.isArray(t.int64Data))throw TypeError(".onnx.TensorProto.int64Data: array expected");for(e.int64Data=[],n=0;n<t.int64Data.length;++n)l.Long?(e.int64Data[n]=l.Long.fromValue(t.int64Data[n])).unsigned=!1:"string"==typeof t.int64Data[n]?e.int64Data[n]=parseInt(t.int64Data[n],10):"number"==typeof t.int64Data[n]?e.int64Data[n]=t.int64Data[n]:"object"==typeof t.int64Data[n]&&(e.int64Data[n]=new l.LongBits(t.int64Data[n].low>>>0,t.int64Data[n].high>>>0).toNumber())}if(null!=t.name&&(e.name=String(t.name)),null!=t.docString&&(e.docString=String(t.docString)),null!=t.rawData&&("string"==typeof t.rawData?l.base64.decode(t.rawData,e.rawData=l.newBuffer(l.base64.length(t.rawData)),0):t.rawData.length>=0&&(e.rawData=t.rawData)),t.externalData){if(!Array.isArray(t.externalData))throw TypeError(".onnx.TensorProto.externalData: array expected");for(e.externalData=[],n=0;n<t.externalData.length;++n){if("object"!=typeof t.externalData[n])throw TypeError(".onnx.TensorProto.externalData: object expected");e.externalData[n]=F.onnx.StringStringEntryProto.fromObject(t.externalData[n])}}switch(t.dataLocation){default:if("number"==typeof t.dataLocation){e.dataLocation=t.dataLocation;break}break;case"DEFAULT":case 0:e.dataLocation=0;break;case"EXTERNAL":case 1:e.dataLocation=1}if(t.doubleData){if(!Array.isArray(t.doubleData))throw TypeError(".onnx.TensorProto.doubleData: array expected");for(e.doubleData=[],n=0;n<t.doubleData.length;++n)e.doubleData[n]=Number(t.doubleData[n])}if(t.uint64Data){if(!Array.isArray(t.uint64Data))throw TypeError(".onnx.TensorProto.uint64Data: array expected");for(e.uint64Data=[],n=0;n<t.uint64Data.length;++n)l.Long?(e.uint64Data[n]=l.Long.fromValue(t.uint64Data[n])).unsigned=!0:"string"==typeof t.uint64Data[n]?e.uint64Data[n]=parseInt(t.uint64Data[n],10):"number"==typeof t.uint64Data[n]?e.uint64Data[n]=t.uint64Data[n]:"object"==typeof t.uint64Data[n]&&(e.uint64Data[n]=new l.LongBits(t.uint64Data[n].low>>>0,t.uint64Data[n].high>>>0).toNumber(!0))}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.dims=[],n.floatData=[],n.int32Data=[],n.stringData=[],n.int64Data=[],n.doubleData=[],n.uint64Data=[],n.externalData=[]),e.defaults&&(n.dataType=0,n.segment=null,n.name="",e.bytes===String?n.rawData="":(n.rawData=[],e.bytes!==Array&&(n.rawData=l.newBuffer(n.rawData))),n.docString="",n.dataLocation=e.enums===String?"DEFAULT":0),t.dims&&t.dims.length){n.dims=[];for(var r=0;r<t.dims.length;++r)"number"==typeof t.dims[r]?n.dims[r]=e.longs===String?String(t.dims[r]):t.dims[r]:n.dims[r]=e.longs===String?l.Long.prototype.toString.call(t.dims[r]):e.longs===Number?new l.LongBits(t.dims[r].low>>>0,t.dims[r].high>>>0).toNumber():t.dims[r]}if(null!=t.dataType&&t.hasOwnProperty("dataType")&&(n.dataType=t.dataType),null!=t.segment&&t.hasOwnProperty("segment")&&(n.segment=F.onnx.TensorProto.Segment.toObject(t.segment,e)),t.floatData&&t.floatData.length)for(n.floatData=[],r=0;r<t.floatData.length;++r)n.floatData[r]=e.json&&!isFinite(t.floatData[r])?String(t.floatData[r]):t.floatData[r];if(t.int32Data&&t.int32Data.length)for(n.int32Data=[],r=0;r<t.int32Data.length;++r)n.int32Data[r]=t.int32Data[r];if(t.stringData&&t.stringData.length)for(n.stringData=[],r=0;r<t.stringData.length;++r)n.stringData[r]=e.bytes===String?l.base64.encode(t.stringData[r],0,t.stringData[r].length):e.bytes===Array?Array.prototype.slice.call(t.stringData[r]):t.stringData[r];if(t.int64Data&&t.int64Data.length)for(n.int64Data=[],r=0;r<t.int64Data.length;++r)"number"==typeof t.int64Data[r]?n.int64Data[r]=e.longs===String?String(t.int64Data[r]):t.int64Data[r]:n.int64Data[r]=e.longs===String?l.Long.prototype.toString.call(t.int64Data[r]):e.longs===Number?new l.LongBits(t.int64Data[r].low>>>0,t.int64Data[r].high>>>0).toNumber():t.int64Data[r];if(null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),null!=t.rawData&&t.hasOwnProperty("rawData")&&(n.rawData=e.bytes===String?l.base64.encode(t.rawData,0,t.rawData.length):e.bytes===Array?Array.prototype.slice.call(t.rawData):t.rawData),t.doubleData&&t.doubleData.length)for(n.doubleData=[],r=0;r<t.doubleData.length;++r)n.doubleData[r]=e.json&&!isFinite(t.doubleData[r])?String(t.doubleData[r]):t.doubleData[r];if(t.uint64Data&&t.uint64Data.length)for(n.uint64Data=[],r=0;r<t.uint64Data.length;++r)"number"==typeof t.uint64Data[r]?n.uint64Data[r]=e.longs===String?String(t.uint64Data[r]):t.uint64Data[r]:n.uint64Data[r]=e.longs===String?l.Long.prototype.toString.call(t.uint64Data[r]):e.longs===Number?new l.LongBits(t.uint64Data[r].low>>>0,t.uint64Data[r].high>>>0).toNumber(!0):t.uint64Data[r];if(null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),t.externalData&&t.externalData.length)for(n.externalData=[],r=0;r<t.externalData.length;++r)n.externalData[r]=F.onnx.StringStringEntryProto.toObject(t.externalData[r],e);return null!=t.dataLocation&&t.hasOwnProperty("dataLocation")&&(n.dataLocation=e.enums===String?void 0===F.onnx.TensorProto.DataLocation[t.dataLocation]?t.dataLocation:F.onnx.TensorProto.DataLocation[t.dataLocation]:t.dataLocation),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TensorProto"},t.DataType=function(){var t={},e=Object.create(t);return e[t[0]="UNDEFINED"]=0,e[t[1]="FLOAT"]=1,e[t[2]="UINT8"]=2,e[t[3]="INT8"]=3,e[t[4]="UINT16"]=4,e[t[5]="INT16"]=5,e[t[6]="INT32"]=6,e[t[7]="INT64"]=7,e[t[8]="STRING"]=8,e[t[9]="BOOL"]=9,e[t[10]="FLOAT16"]=10,e[t[11]="DOUBLE"]=11,e[t[12]="UINT32"]=12,e[t[13]="UINT64"]=13,e[t[14]="COMPLEX64"]=14,e[t[15]="COMPLEX128"]=15,e[t[16]="BFLOAT16"]=16,e[t[17]="FLOAT8E4M3FN"]=17,e[t[18]="FLOAT8E4M3FNUZ"]=18,e[t[19]="FLOAT8E5M2"]=19,e[t[20]="FLOAT8E5M2FNUZ"]=20,e}(),t.Segment=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.begin=l.Long?l.Long.fromBits(0,0,!1):0,t.prototype.end=l.Long?l.Long.fromBits(0,0,!1):0,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.begin&&Object.hasOwnProperty.call(t,"begin")&&e.uint32(8).int64(t.begin),null!=t.end&&Object.hasOwnProperty.call(t,"end")&&e.uint32(16).int64(t.end),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TensorProto.Segment;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.begin=t.int64();break;case 2:r.end=t.int64();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){return"object"!=typeof t||null===t?"object expected":null!=t.begin&&t.hasOwnProperty("begin")&&!(l.isInteger(t.begin)||t.begin&&l.isInteger(t.begin.low)&&l.isInteger(t.begin.high))?"begin: integer|Long expected":null!=t.end&&t.hasOwnProperty("end")&&!(l.isInteger(t.end)||t.end&&l.isInteger(t.end.low)&&l.isInteger(t.end.high))?"end: integer|Long expected":null},t.fromObject=function(t){if(t instanceof F.onnx.TensorProto.Segment)return t;var e=new F.onnx.TensorProto.Segment;return null!=t.begin&&(l.Long?(e.begin=l.Long.fromValue(t.begin)).unsigned=!1:"string"==typeof t.begin?e.begin=parseInt(t.begin,10):"number"==typeof t.begin?e.begin=t.begin:"object"==typeof t.begin&&(e.begin=new l.LongBits(t.begin.low>>>0,t.begin.high>>>0).toNumber())),null!=t.end&&(l.Long?(e.end=l.Long.fromValue(t.end)).unsigned=!1:"string"==typeof t.end?e.end=parseInt(t.end,10):"number"==typeof t.end?e.end=t.end:"object"==typeof t.end&&(e.end=new l.LongBits(t.end.low>>>0,t.end.high>>>0).toNumber())),e},t.toObject=function(t,e){e||(e={});var n={};if(e.defaults){if(l.Long){var r=new l.Long(0,0,!1);n.begin=e.longs===String?r.toString():e.longs===Number?r.toNumber():r}else n.begin=e.longs===String?"0":0;l.Long?(r=new l.Long(0,0,!1),n.end=e.longs===String?r.toString():e.longs===Number?r.toNumber():r):n.end=e.longs===String?"0":0}return null!=t.begin&&t.hasOwnProperty("begin")&&("number"==typeof t.begin?n.begin=e.longs===String?String(t.begin):t.begin:n.begin=e.longs===String?l.Long.prototype.toString.call(t.begin):e.longs===Number?new l.LongBits(t.begin.low>>>0,t.begin.high>>>0).toNumber():t.begin),null!=t.end&&t.hasOwnProperty("end")&&("number"==typeof t.end?n.end=e.longs===String?String(t.end):t.end:n.end=e.longs===String?l.Long.prototype.toString.call(t.end):e.longs===Number?new l.LongBits(t.end.low>>>0,t.end.high>>>0).toNumber():t.end),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TensorProto.Segment"},t}(),t.DataLocation=function(){var t={},e=Object.create(t);return e[t[0]="DEFAULT"]=0,e[t[1]="EXTERNAL"]=1,e}(),t}(),s.SparseTensorProto=function(){function t(t){if(this.dims=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.values=null,t.prototype.indices=null,t.prototype.dims=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.values&&Object.hasOwnProperty.call(t,"values")&&F.onnx.TensorProto.encode(t.values,e.uint32(10).fork()).ldelim(),null!=t.indices&&Object.hasOwnProperty.call(t,"indices")&&F.onnx.TensorProto.encode(t.indices,e.uint32(18).fork()).ldelim(),null!=t.dims&&t.dims.length){e.uint32(26).fork();for(var n=0;n<t.dims.length;++n)e.int64(t.dims[n]);e.ldelim()}return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.SparseTensorProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.values=F.onnx.TensorProto.decode(t,t.uint32());break;case 2:r.indices=F.onnx.TensorProto.decode(t,t.uint32());break;case 3:if(r.dims&&r.dims.length||(r.dims=[]),2==(7&s))for(var i=t.uint32()+t.pos;t.pos<i;)r.dims.push(t.int64());else r.dims.push(t.int64());break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";var e;if(null!=t.values&&t.hasOwnProperty("values")&&(e=F.onnx.TensorProto.verify(t.values)))return"values."+e;if(null!=t.indices&&t.hasOwnProperty("indices")&&(e=F.onnx.TensorProto.verify(t.indices)))return"indices."+e;if(null!=t.dims&&t.hasOwnProperty("dims")){if(!Array.isArray(t.dims))return"dims: array expected";for(var n=0;n<t.dims.length;++n)if(!(l.isInteger(t.dims[n])||t.dims[n]&&l.isInteger(t.dims[n].low)&&l.isInteger(t.dims[n].high)))return"dims: integer|Long[] expected"}return null},t.fromObject=function(t){if(t instanceof F.onnx.SparseTensorProto)return t;var e=new F.onnx.SparseTensorProto;if(null!=t.values){if("object"!=typeof t.values)throw TypeError(".onnx.SparseTensorProto.values: object expected");e.values=F.onnx.TensorProto.fromObject(t.values)}if(null!=t.indices){if("object"!=typeof t.indices)throw TypeError(".onnx.SparseTensorProto.indices: object expected");e.indices=F.onnx.TensorProto.fromObject(t.indices)}if(t.dims){if(!Array.isArray(t.dims))throw TypeError(".onnx.SparseTensorProto.dims: array expected");e.dims=[];for(var n=0;n<t.dims.length;++n)l.Long?(e.dims[n]=l.Long.fromValue(t.dims[n])).unsigned=!1:"string"==typeof t.dims[n]?e.dims[n]=parseInt(t.dims[n],10):"number"==typeof t.dims[n]?e.dims[n]=t.dims[n]:"object"==typeof t.dims[n]&&(e.dims[n]=new l.LongBits(t.dims[n].low>>>0,t.dims[n].high>>>0).toNumber())}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.dims=[]),e.defaults&&(n.values=null,n.indices=null),null!=t.values&&t.hasOwnProperty("values")&&(n.values=F.onnx.TensorProto.toObject(t.values,e)),null!=t.indices&&t.hasOwnProperty("indices")&&(n.indices=F.onnx.TensorProto.toObject(t.indices,e)),t.dims&&t.dims.length){n.dims=[];for(var r=0;r<t.dims.length;++r)"number"==typeof t.dims[r]?n.dims[r]=e.longs===String?String(t.dims[r]):t.dims[r]:n.dims[r]=e.longs===String?l.Long.prototype.toString.call(t.dims[r]):e.longs===Number?new l.LongBits(t.dims[r].low>>>0,t.dims[r].high>>>0).toNumber():t.dims[r]}return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.SparseTensorProto"},t}(),s.TensorShapeProto=function(){function t(t){if(this.dim=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.dim=l.emptyArray,t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.dim&&t.dim.length)for(var n=0;n<t.dim.length;++n)F.onnx.TensorShapeProto.Dimension.encode(t.dim[n],e.uint32(10).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TensorShapeProto;t.pos<n;){var s=t.uint32();s>>>3==1?(r.dim&&r.dim.length||(r.dim=[]),r.dim.push(F.onnx.TensorShapeProto.Dimension.decode(t,t.uint32()))):t.skipType(7&s)}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.dim&&t.hasOwnProperty("dim")){if(!Array.isArray(t.dim))return"dim: array expected";for(var e=0;e<t.dim.length;++e){var n=F.onnx.TensorShapeProto.Dimension.verify(t.dim[e]);if(n)return"dim."+n}}return null},t.fromObject=function(t){if(t instanceof F.onnx.TensorShapeProto)return t;var e=new F.onnx.TensorShapeProto;if(t.dim){if(!Array.isArray(t.dim))throw TypeError(".onnx.TensorShapeProto.dim: array expected");e.dim=[];for(var n=0;n<t.dim.length;++n){if("object"!=typeof t.dim[n])throw TypeError(".onnx.TensorShapeProto.dim: object expected");e.dim[n]=F.onnx.TensorShapeProto.Dimension.fromObject(t.dim[n])}}return e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.dim=[]),t.dim&&t.dim.length){n.dim=[];for(var r=0;r<t.dim.length;++r)n.dim[r]=F.onnx.TensorShapeProto.Dimension.toObject(t.dim[r],e)}return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TensorShapeProto"},t.Dimension=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}var e;return t.prototype.dimValue=null,t.prototype.dimParam=null,t.prototype.denotation="",Object.defineProperty(t.prototype,"value",{get:l.oneOfGetter(e=["dimValue","dimParam"]),set:l.oneOfSetter(e)}),t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.dimValue&&Object.hasOwnProperty.call(t,"dimValue")&&e.uint32(8).int64(t.dimValue),null!=t.dimParam&&Object.hasOwnProperty.call(t,"dimParam")&&e.uint32(18).string(t.dimParam),null!=t.denotation&&Object.hasOwnProperty.call(t,"denotation")&&e.uint32(26).string(t.denotation),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TensorShapeProto.Dimension;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.dimValue=t.int64();break;case 2:r.dimParam=t.string();break;case 3:r.denotation=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";var e={};if(null!=t.dimValue&&t.hasOwnProperty("dimValue")&&(e.value=1,!(l.isInteger(t.dimValue)||t.dimValue&&l.isInteger(t.dimValue.low)&&l.isInteger(t.dimValue.high))))return"dimValue: integer|Long expected";if(null!=t.dimParam&&t.hasOwnProperty("dimParam")){if(1===e.value)return"value: multiple values";if(e.value=1,!l.isString(t.dimParam))return"dimParam: string expected"}return null!=t.denotation&&t.hasOwnProperty("denotation")&&!l.isString(t.denotation)?"denotation: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.TensorShapeProto.Dimension)return t;var e=new F.onnx.TensorShapeProto.Dimension;return null!=t.dimValue&&(l.Long?(e.dimValue=l.Long.fromValue(t.dimValue)).unsigned=!1:"string"==typeof t.dimValue?e.dimValue=parseInt(t.dimValue,10):"number"==typeof t.dimValue?e.dimValue=t.dimValue:"object"==typeof t.dimValue&&(e.dimValue=new l.LongBits(t.dimValue.low>>>0,t.dimValue.high>>>0).toNumber())),null!=t.dimParam&&(e.dimParam=String(t.dimParam)),null!=t.denotation&&(e.denotation=String(t.denotation)),e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.denotation=""),null!=t.dimValue&&t.hasOwnProperty("dimValue")&&("number"==typeof t.dimValue?n.dimValue=e.longs===String?String(t.dimValue):t.dimValue:n.dimValue=e.longs===String?l.Long.prototype.toString.call(t.dimValue):e.longs===Number?new l.LongBits(t.dimValue.low>>>0,t.dimValue.high>>>0).toNumber():t.dimValue,e.oneofs&&(n.value="dimValue")),null!=t.dimParam&&t.hasOwnProperty("dimParam")&&(n.dimParam=t.dimParam,e.oneofs&&(n.value="dimParam")),null!=t.denotation&&t.hasOwnProperty("denotation")&&(n.denotation=t.denotation),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TensorShapeProto.Dimension"},t}(),t}(),s.TypeProto=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}var e;return t.prototype.tensorType=null,t.prototype.sequenceType=null,t.prototype.mapType=null,t.prototype.optionalType=null,t.prototype.sparseTensorType=null,t.prototype.denotation="",Object.defineProperty(t.prototype,"value",{get:l.oneOfGetter(e=["tensorType","sequenceType","mapType","optionalType","sparseTensorType"]),set:l.oneOfSetter(e)}),t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.tensorType&&Object.hasOwnProperty.call(t,"tensorType")&&F.onnx.TypeProto.Tensor.encode(t.tensorType,e.uint32(10).fork()).ldelim(),null!=t.sequenceType&&Object.hasOwnProperty.call(t,"sequenceType")&&F.onnx.TypeProto.Sequence.encode(t.sequenceType,e.uint32(34).fork()).ldelim(),null!=t.mapType&&Object.hasOwnProperty.call(t,"mapType")&&F.onnx.TypeProto.Map.encode(t.mapType,e.uint32(42).fork()).ldelim(),null!=t.denotation&&Object.hasOwnProperty.call(t,"denotation")&&e.uint32(50).string(t.denotation),null!=t.sparseTensorType&&Object.hasOwnProperty.call(t,"sparseTensorType")&&F.onnx.TypeProto.SparseTensor.encode(t.sparseTensorType,e.uint32(66).fork()).ldelim(),null!=t.optionalType&&Object.hasOwnProperty.call(t,"optionalType")&&F.onnx.TypeProto.Optional.encode(t.optionalType,e.uint32(74).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.tensorType=F.onnx.TypeProto.Tensor.decode(t,t.uint32());break;case 4:r.sequenceType=F.onnx.TypeProto.Sequence.decode(t,t.uint32());break;case 5:r.mapType=F.onnx.TypeProto.Map.decode(t,t.uint32());break;case 9:r.optionalType=F.onnx.TypeProto.Optional.decode(t,t.uint32());break;case 8:r.sparseTensorType=F.onnx.TypeProto.SparseTensor.decode(t,t.uint32());break;case 6:r.denotation=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";var e={};if(null!=t.tensorType&&t.hasOwnProperty("tensorType")&&(e.value=1,n=F.onnx.TypeProto.Tensor.verify(t.tensorType)))return"tensorType."+n;if(null!=t.sequenceType&&t.hasOwnProperty("sequenceType")){if(1===e.value)return"value: multiple values";if(e.value=1,n=F.onnx.TypeProto.Sequence.verify(t.sequenceType))return"sequenceType."+n}if(null!=t.mapType&&t.hasOwnProperty("mapType")){if(1===e.value)return"value: multiple values";if(e.value=1,n=F.onnx.TypeProto.Map.verify(t.mapType))return"mapType."+n}if(null!=t.optionalType&&t.hasOwnProperty("optionalType")){if(1===e.value)return"value: multiple values";if(e.value=1,n=F.onnx.TypeProto.Optional.verify(t.optionalType))return"optionalType."+n}if(null!=t.sparseTensorType&&t.hasOwnProperty("sparseTensorType")){if(1===e.value)return"value: multiple values";var n;if(e.value=1,n=F.onnx.TypeProto.SparseTensor.verify(t.sparseTensorType))return"sparseTensorType."+n}return null!=t.denotation&&t.hasOwnProperty("denotation")&&!l.isString(t.denotation)?"denotation: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto)return t;var e=new F.onnx.TypeProto;if(null!=t.tensorType){if("object"!=typeof t.tensorType)throw TypeError(".onnx.TypeProto.tensorType: object expected");e.tensorType=F.onnx.TypeProto.Tensor.fromObject(t.tensorType)}if(null!=t.sequenceType){if("object"!=typeof t.sequenceType)throw TypeError(".onnx.TypeProto.sequenceType: object expected");e.sequenceType=F.onnx.TypeProto.Sequence.fromObject(t.sequenceType)}if(null!=t.mapType){if("object"!=typeof t.mapType)throw TypeError(".onnx.TypeProto.mapType: object expected");e.mapType=F.onnx.TypeProto.Map.fromObject(t.mapType)}if(null!=t.optionalType){if("object"!=typeof t.optionalType)throw TypeError(".onnx.TypeProto.optionalType: object expected");e.optionalType=F.onnx.TypeProto.Optional.fromObject(t.optionalType)}if(null!=t.sparseTensorType){if("object"!=typeof t.sparseTensorType)throw TypeError(".onnx.TypeProto.sparseTensorType: object expected");e.sparseTensorType=F.onnx.TypeProto.SparseTensor.fromObject(t.sparseTensorType)}return null!=t.denotation&&(e.denotation=String(t.denotation)),e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.denotation=""),null!=t.tensorType&&t.hasOwnProperty("tensorType")&&(n.tensorType=F.onnx.TypeProto.Tensor.toObject(t.tensorType,e),e.oneofs&&(n.value="tensorType")),null!=t.sequenceType&&t.hasOwnProperty("sequenceType")&&(n.sequenceType=F.onnx.TypeProto.Sequence.toObject(t.sequenceType,e),e.oneofs&&(n.value="sequenceType")),null!=t.mapType&&t.hasOwnProperty("mapType")&&(n.mapType=F.onnx.TypeProto.Map.toObject(t.mapType,e),e.oneofs&&(n.value="mapType")),null!=t.denotation&&t.hasOwnProperty("denotation")&&(n.denotation=t.denotation),null!=t.sparseTensorType&&t.hasOwnProperty("sparseTensorType")&&(n.sparseTensorType=F.onnx.TypeProto.SparseTensor.toObject(t.sparseTensorType,e),e.oneofs&&(n.value="sparseTensorType")),null!=t.optionalType&&t.hasOwnProperty("optionalType")&&(n.optionalType=F.onnx.TypeProto.Optional.toObject(t.optionalType,e),e.oneofs&&(n.value="optionalType")),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto"},t.Tensor=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.elemType=0,t.prototype.shape=null,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.elemType&&Object.hasOwnProperty.call(t,"elemType")&&e.uint32(8).int32(t.elemType),null!=t.shape&&Object.hasOwnProperty.call(t,"shape")&&F.onnx.TensorShapeProto.encode(t.shape,e.uint32(18).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto.Tensor;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.elemType=t.int32();break;case 2:r.shape=F.onnx.TensorShapeProto.decode(t,t.uint32());break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.elemType&&t.hasOwnProperty("elemType")&&!l.isInteger(t.elemType))return"elemType: integer expected";if(null!=t.shape&&t.hasOwnProperty("shape")){var e=F.onnx.TensorShapeProto.verify(t.shape);if(e)return"shape."+e}return null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto.Tensor)return t;var e=new F.onnx.TypeProto.Tensor;if(null!=t.elemType&&(e.elemType=0|t.elemType),null!=t.shape){if("object"!=typeof t.shape)throw TypeError(".onnx.TypeProto.Tensor.shape: object expected");e.shape=F.onnx.TensorShapeProto.fromObject(t.shape)}return e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.elemType=0,n.shape=null),null!=t.elemType&&t.hasOwnProperty("elemType")&&(n.elemType=t.elemType),null!=t.shape&&t.hasOwnProperty("shape")&&(n.shape=F.onnx.TensorShapeProto.toObject(t.shape,e)),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto.Tensor"},t}(),t.Sequence=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.elemType=null,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.elemType&&Object.hasOwnProperty.call(t,"elemType")&&F.onnx.TypeProto.encode(t.elemType,e.uint32(10).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto.Sequence;t.pos<n;){var s=t.uint32();s>>>3==1?r.elemType=F.onnx.TypeProto.decode(t,t.uint32()):t.skipType(7&s)}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.elemType&&t.hasOwnProperty("elemType")){var e=F.onnx.TypeProto.verify(t.elemType);if(e)return"elemType."+e}return null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto.Sequence)return t;var e=new F.onnx.TypeProto.Sequence;if(null!=t.elemType){if("object"!=typeof t.elemType)throw TypeError(".onnx.TypeProto.Sequence.elemType: object expected");e.elemType=F.onnx.TypeProto.fromObject(t.elemType)}return e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.elemType=null),null!=t.elemType&&t.hasOwnProperty("elemType")&&(n.elemType=F.onnx.TypeProto.toObject(t.elemType,e)),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto.Sequence"},t}(),t.Map=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.keyType=0,t.prototype.valueType=null,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.keyType&&Object.hasOwnProperty.call(t,"keyType")&&e.uint32(8).int32(t.keyType),null!=t.valueType&&Object.hasOwnProperty.call(t,"valueType")&&F.onnx.TypeProto.encode(t.valueType,e.uint32(18).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto.Map;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.keyType=t.int32();break;case 2:r.valueType=F.onnx.TypeProto.decode(t,t.uint32());break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.keyType&&t.hasOwnProperty("keyType")&&!l.isInteger(t.keyType))return"keyType: integer expected";if(null!=t.valueType&&t.hasOwnProperty("valueType")){var e=F.onnx.TypeProto.verify(t.valueType);if(e)return"valueType."+e}return null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto.Map)return t;var e=new F.onnx.TypeProto.Map;if(null!=t.keyType&&(e.keyType=0|t.keyType),null!=t.valueType){if("object"!=typeof t.valueType)throw TypeError(".onnx.TypeProto.Map.valueType: object expected");e.valueType=F.onnx.TypeProto.fromObject(t.valueType)}return e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.keyType=0,n.valueType=null),null!=t.keyType&&t.hasOwnProperty("keyType")&&(n.keyType=t.keyType),null!=t.valueType&&t.hasOwnProperty("valueType")&&(n.valueType=F.onnx.TypeProto.toObject(t.valueType,e)),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto.Map"},t}(),t.Optional=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.elemType=null,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.elemType&&Object.hasOwnProperty.call(t,"elemType")&&F.onnx.TypeProto.encode(t.elemType,e.uint32(10).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto.Optional;t.pos<n;){var s=t.uint32();s>>>3==1?r.elemType=F.onnx.TypeProto.decode(t,t.uint32()):t.skipType(7&s)}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.elemType&&t.hasOwnProperty("elemType")){var e=F.onnx.TypeProto.verify(t.elemType);if(e)return"elemType."+e}return null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto.Optional)return t;var e=new F.onnx.TypeProto.Optional;if(null!=t.elemType){if("object"!=typeof t.elemType)throw TypeError(".onnx.TypeProto.Optional.elemType: object expected");e.elemType=F.onnx.TypeProto.fromObject(t.elemType)}return e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.elemType=null),null!=t.elemType&&t.hasOwnProperty("elemType")&&(n.elemType=F.onnx.TypeProto.toObject(t.elemType,e)),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto.Optional"},t}(),t.SparseTensor=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.elemType=0,t.prototype.shape=null,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.elemType&&Object.hasOwnProperty.call(t,"elemType")&&e.uint32(8).int32(t.elemType),null!=t.shape&&Object.hasOwnProperty.call(t,"shape")&&F.onnx.TensorShapeProto.encode(t.shape,e.uint32(18).fork()).ldelim(),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.TypeProto.SparseTensor;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.elemType=t.int32();break;case 2:r.shape=F.onnx.TensorShapeProto.decode(t,t.uint32());break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.elemType&&t.hasOwnProperty("elemType")&&!l.isInteger(t.elemType))return"elemType: integer expected";if(null!=t.shape&&t.hasOwnProperty("shape")){var e=F.onnx.TensorShapeProto.verify(t.shape);if(e)return"shape."+e}return null},t.fromObject=function(t){if(t instanceof F.onnx.TypeProto.SparseTensor)return t;var e=new F.onnx.TypeProto.SparseTensor;if(null!=t.elemType&&(e.elemType=0|t.elemType),null!=t.shape){if("object"!=typeof t.shape)throw TypeError(".onnx.TypeProto.SparseTensor.shape: object expected");e.shape=F.onnx.TensorShapeProto.fromObject(t.shape)}return e},t.toObject=function(t,e){e||(e={});var n={};return e.defaults&&(n.elemType=0,n.shape=null),null!=t.elemType&&t.hasOwnProperty("elemType")&&(n.elemType=t.elemType),null!=t.shape&&t.hasOwnProperty("shape")&&(n.shape=F.onnx.TensorShapeProto.toObject(t.shape,e)),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.TypeProto.SparseTensor"},t}(),t}(),s.OperatorSetIdProto=function(){function t(t){if(t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.domain="",t.prototype.version=l.Long?l.Long.fromBits(0,0,!1):0,t.create=function(e){return new t(e)},t.encode=function(t,e){return e||(e=a.create()),null!=t.domain&&Object.hasOwnProperty.call(t,"domain")&&e.uint32(10).string(t.domain),null!=t.version&&Object.hasOwnProperty.call(t,"version")&&e.uint32(16).int64(t.version),e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.OperatorSetIdProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.domain=t.string();break;case 2:r.version=t.int64();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){return"object"!=typeof t||null===t?"object expected":null!=t.domain&&t.hasOwnProperty("domain")&&!l.isString(t.domain)?"domain: string expected":null!=t.version&&t.hasOwnProperty("version")&&!(l.isInteger(t.version)||t.version&&l.isInteger(t.version.low)&&l.isInteger(t.version.high))?"version: integer|Long expected":null},t.fromObject=function(t){if(t instanceof F.onnx.OperatorSetIdProto)return t;var e=new F.onnx.OperatorSetIdProto;return null!=t.domain&&(e.domain=String(t.domain)),null!=t.version&&(l.Long?(e.version=l.Long.fromValue(t.version)).unsigned=!1:"string"==typeof t.version?e.version=parseInt(t.version,10):"number"==typeof t.version?e.version=t.version:"object"==typeof t.version&&(e.version=new l.LongBits(t.version.low>>>0,t.version.high>>>0).toNumber())),e},t.toObject=function(t,e){e||(e={});var n={};if(e.defaults)if(n.domain="",l.Long){var r=new l.Long(0,0,!1);n.version=e.longs===String?r.toString():e.longs===Number?r.toNumber():r}else n.version=e.longs===String?"0":0;return null!=t.domain&&t.hasOwnProperty("domain")&&(n.domain=t.domain),null!=t.version&&t.hasOwnProperty("version")&&("number"==typeof t.version?n.version=e.longs===String?String(t.version):t.version:n.version=e.longs===String?l.Long.prototype.toString.call(t.version):e.longs===Number?new l.LongBits(t.version.low>>>0,t.version.high>>>0).toNumber():t.version),n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.OperatorSetIdProto"},t}(),s.OperatorStatus=function(){var t={},e=Object.create(t);return e[t[0]="EXPERIMENTAL"]=0,e[t[1]="STABLE"]=1,e}(),s.FunctionProto=function(){function t(t){if(this.input=[],this.output=[],this.attribute=[],this.attributeProto=[],this.node=[],this.opsetImport=[],t)for(var e=Object.keys(t),n=0;n<e.length;++n)null!=t[e[n]]&&(this[e[n]]=t[e[n]])}return t.prototype.name="",t.prototype.input=l.emptyArray,t.prototype.output=l.emptyArray,t.prototype.attribute=l.emptyArray,t.prototype.attributeProto=l.emptyArray,t.prototype.node=l.emptyArray,t.prototype.docString="",t.prototype.opsetImport=l.emptyArray,t.prototype.domain="",t.create=function(e){return new t(e)},t.encode=function(t,e){if(e||(e=a.create()),null!=t.name&&Object.hasOwnProperty.call(t,"name")&&e.uint32(10).string(t.name),null!=t.input&&t.input.length)for(var n=0;n<t.input.length;++n)e.uint32(34).string(t.input[n]);if(null!=t.output&&t.output.length)for(n=0;n<t.output.length;++n)e.uint32(42).string(t.output[n]);if(null!=t.attribute&&t.attribute.length)for(n=0;n<t.attribute.length;++n)e.uint32(50).string(t.attribute[n]);if(null!=t.node&&t.node.length)for(n=0;n<t.node.length;++n)F.onnx.NodeProto.encode(t.node[n],e.uint32(58).fork()).ldelim();if(null!=t.docString&&Object.hasOwnProperty.call(t,"docString")&&e.uint32(66).string(t.docString),null!=t.opsetImport&&t.opsetImport.length)for(n=0;n<t.opsetImport.length;++n)F.onnx.OperatorSetIdProto.encode(t.opsetImport[n],e.uint32(74).fork()).ldelim();if(null!=t.domain&&Object.hasOwnProperty.call(t,"domain")&&e.uint32(82).string(t.domain),null!=t.attributeProto&&t.attributeProto.length)for(n=0;n<t.attributeProto.length;++n)F.onnx.AttributeProto.encode(t.attributeProto[n],e.uint32(90).fork()).ldelim();return e},t.encodeDelimited=function(t,e){return this.encode(t,e).ldelim()},t.decode=function(t,e){t instanceof o||(t=o.create(t));for(var n=void 0===e?t.len:t.pos+e,r=new F.onnx.FunctionProto;t.pos<n;){var s=t.uint32();switch(s>>>3){case 1:r.name=t.string();break;case 4:r.input&&r.input.length||(r.input=[]),r.input.push(t.string());break;case 5:r.output&&r.output.length||(r.output=[]),r.output.push(t.string());break;case 6:r.attribute&&r.attribute.length||(r.attribute=[]),r.attribute.push(t.string());break;case 11:r.attributeProto&&r.attributeProto.length||(r.attributeProto=[]),r.attributeProto.push(F.onnx.AttributeProto.decode(t,t.uint32()));break;case 7:r.node&&r.node.length||(r.node=[]),r.node.push(F.onnx.NodeProto.decode(t,t.uint32()));break;case 8:r.docString=t.string();break;case 9:r.opsetImport&&r.opsetImport.length||(r.opsetImport=[]),r.opsetImport.push(F.onnx.OperatorSetIdProto.decode(t,t.uint32()));break;case 10:r.domain=t.string();break;default:t.skipType(7&s)}}return r},t.decodeDelimited=function(t){return t instanceof o||(t=new o(t)),this.decode(t,t.uint32())},t.verify=function(t){if("object"!=typeof t||null===t)return"object expected";if(null!=t.name&&t.hasOwnProperty("name")&&!l.isString(t.name))return"name: string expected";if(null!=t.input&&t.hasOwnProperty("input")){if(!Array.isArray(t.input))return"input: array expected";for(var e=0;e<t.input.length;++e)if(!l.isString(t.input[e]))return"input: string[] expected"}if(null!=t.output&&t.hasOwnProperty("output")){if(!Array.isArray(t.output))return"output: array expected";for(e=0;e<t.output.length;++e)if(!l.isString(t.output[e]))return"output: string[] expected"}if(null!=t.attribute&&t.hasOwnProperty("attribute")){if(!Array.isArray(t.attribute))return"attribute: array expected";for(e=0;e<t.attribute.length;++e)if(!l.isString(t.attribute[e]))return"attribute: string[] expected"}if(null!=t.attributeProto&&t.hasOwnProperty("attributeProto")){if(!Array.isArray(t.attributeProto))return"attributeProto: array expected";for(e=0;e<t.attributeProto.length;++e)if(n=F.onnx.AttributeProto.verify(t.attributeProto[e]))return"attributeProto."+n}if(null!=t.node&&t.hasOwnProperty("node")){if(!Array.isArray(t.node))return"node: array expected";for(e=0;e<t.node.length;++e)if(n=F.onnx.NodeProto.verify(t.node[e]))return"node."+n}if(null!=t.docString&&t.hasOwnProperty("docString")&&!l.isString(t.docString))return"docString: string expected";if(null!=t.opsetImport&&t.hasOwnProperty("opsetImport")){if(!Array.isArray(t.opsetImport))return"opsetImport: array expected";for(e=0;e<t.opsetImport.length;++e){var n;if(n=F.onnx.OperatorSetIdProto.verify(t.opsetImport[e]))return"opsetImport."+n}}return null!=t.domain&&t.hasOwnProperty("domain")&&!l.isString(t.domain)?"domain: string expected":null},t.fromObject=function(t){if(t instanceof F.onnx.FunctionProto)return t;var e=new F.onnx.FunctionProto;if(null!=t.name&&(e.name=String(t.name)),t.input){if(!Array.isArray(t.input))throw TypeError(".onnx.FunctionProto.input: array expected");e.input=[];for(var n=0;n<t.input.length;++n)e.input[n]=String(t.input[n])}if(t.output){if(!Array.isArray(t.output))throw TypeError(".onnx.FunctionProto.output: array expected");for(e.output=[],n=0;n<t.output.length;++n)e.output[n]=String(t.output[n])}if(t.attribute){if(!Array.isArray(t.attribute))throw TypeError(".onnx.FunctionProto.attribute: array expected");for(e.attribute=[],n=0;n<t.attribute.length;++n)e.attribute[n]=String(t.attribute[n])}if(t.attributeProto){if(!Array.isArray(t.attributeProto))throw TypeError(".onnx.FunctionProto.attributeProto: array expected");for(e.attributeProto=[],n=0;n<t.attributeProto.length;++n){if("object"!=typeof t.attributeProto[n])throw TypeError(".onnx.FunctionProto.attributeProto: object expected");e.attributeProto[n]=F.onnx.AttributeProto.fromObject(t.attributeProto[n])}}if(t.node){if(!Array.isArray(t.node))throw TypeError(".onnx.FunctionProto.node: array expected");for(e.node=[],n=0;n<t.node.length;++n){if("object"!=typeof t.node[n])throw TypeError(".onnx.FunctionProto.node: object expected");e.node[n]=F.onnx.NodeProto.fromObject(t.node[n])}}if(null!=t.docString&&(e.docString=String(t.docString)),t.opsetImport){if(!Array.isArray(t.opsetImport))throw TypeError(".onnx.FunctionProto.opsetImport: array expected");for(e.opsetImport=[],n=0;n<t.opsetImport.length;++n){if("object"!=typeof t.opsetImport[n])throw TypeError(".onnx.FunctionProto.opsetImport: object expected");e.opsetImport[n]=F.onnx.OperatorSetIdProto.fromObject(t.opsetImport[n])}}return null!=t.domain&&(e.domain=String(t.domain)),e},t.toObject=function(t,e){e||(e={});var n={};if((e.arrays||e.defaults)&&(n.input=[],n.output=[],n.attribute=[],n.node=[],n.opsetImport=[],n.attributeProto=[]),e.defaults&&(n.name="",n.docString="",n.domain=""),null!=t.name&&t.hasOwnProperty("name")&&(n.name=t.name),t.input&&t.input.length){n.input=[];for(var r=0;r<t.input.length;++r)n.input[r]=t.input[r]}if(t.output&&t.output.length)for(n.output=[],r=0;r<t.output.length;++r)n.output[r]=t.output[r];if(t.attribute&&t.attribute.length)for(n.attribute=[],r=0;r<t.attribute.length;++r)n.attribute[r]=t.attribute[r];if(t.node&&t.node.length)for(n.node=[],r=0;r<t.node.length;++r)n.node[r]=F.onnx.NodeProto.toObject(t.node[r],e);if(null!=t.docString&&t.hasOwnProperty("docString")&&(n.docString=t.docString),t.opsetImport&&t.opsetImport.length)for(n.opsetImport=[],r=0;r<t.opsetImport.length;++r)n.opsetImport[r]=F.onnx.OperatorSetIdProto.toObject(t.opsetImport[r],e);if(null!=t.domain&&t.hasOwnProperty("domain")&&(n.domain=t.domain),t.attributeProto&&t.attributeProto.length)for(n.attributeProto=[],r=0;r<t.attributeProto.length;++r)n.attributeProto[r]=F.onnx.AttributeProto.toObject(t.attributeProto[r],e);return n},t.prototype.toJSON=function(){return this.constructor.toObject(this,i.util.toJSONOptions)},t.getTypeUrl=function(t){return void 0===t&&(t="type.googleapis.com"),t+"/onnx.FunctionProto"},t}(),s),e.exports=F}}),import_onnx,ArrayUtil,MatMulUtil,BroadcastUtil,GemmUtil,ProtoUtil,LongUtil,ShapeUtil,SplitUtil,PoolConvUtil,MIN_CLIP,MAX_CLIP;function assert(t,e){if(!t)throw new Error("string"==typeof e?e:e())}function decodeUtf8String(t){return(new TextDecoder).decode(t)}var init_util=__esm({"web/lib/onnxjs/util.ts"(){init_flatbuffers(),init_long(),import_onnx=__toESM(require_onnx()),init_tensor2(),ArrayUtil=class{static arraysEqual(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}},MatMulUtil=class{static preprocessInputShapes(t,e){return[1===t.length?[1,t[0]]:t,1===e.length?[e[0],1]:e]}static postprocessOutputShape(t,e,n){1===e&&t.splice(t.length-2,1),1===n&&t.pop()}static calcMatMulShape(t,e){return t[1]!==e[0]?void 0:[t[0],e[1]]}},BroadcastUtil=class t{static calcShape(t,e,n=!1){const r=t.length,s=e.length;if(0===r)return e;if(0===s)return t;const i=Math.max(t.length,e.length),o=new Array(i);if(n){if(r<2||s<2)return;const n=MatMulUtil.calcMatMulShape([t[r-2],t[r-1]],[e[s-2],e[s-1]]);if(void 0===n)return;[o[i-2],o[i-1]]=n}for(let a=n?3:1;a<=i;a++){const n=r-a<0?1:t[r-a],l=s-a<0?1:e[s-a];if(n!==l&&n>1&&l>1)return;o[i-a]=Math.max(n,l)}return o}static index(e,n){const r=new Array(n.length);return t.fillIndex(e,n,r),r}static fillIndex(t,e,n){const r=t.length-e.length;for(let s=0;s<e.length;s++)n[s]=t[r+s]%e[s]}static calc(e,n,r,s,i){const o=t.calcShape(e.dims,n.dims);if(o){if(s&&!ShapeUtil.areEqual(o,e.dims))return;const a=ShapeUtil.size(o),l=s?e:new Tensor3(o,i||e.type);if(0===o.length)l.set([],r(e.get([]),n.get([])));else{const s=new Array(o.length),i=new Array(e.dims.length),F=new Array(n.dims.length);let U,c=0,u=0,Q=!1,d=!1;0===e.dims.length&&(c=e.get([]),Q=!0),0===n.dims.length&&(u=n.get([]),d=!0);for(let B=0;B<a;B++){U=B;for(let t=o.length-1;t>=0;t--)s[t]=U%o[t],U=Math.floor(U/o[t]);Q||(t.fillIndex(s,e.dims,i),c=e.get(i)),d||(t.fillIndex(s,n.dims,F),u=n.get(F)),l.set(s,r(c,u))}}return l}}static isValidBroadcast(t,e){const n=t.length,r=e.length;if(n>r)return!1;for(let s=1;s<=n;s++)if(1!==t[n-s]&&t[n-s]!==e[r-s])return!1;return!0}static getBroadcastDims(t,e){const n=t.length,r=[];for(let s=0;s<n;s++){const i=n-1-s,o=t[i]||1;(e[e.length-1-s]||1)>1&&1===o&&r.unshift(i)}return r}},GemmUtil=class{static getShapeOfGemmResult(t,e,n,r,s){if(2!==t.length||2!==n.length)throw new Error("shape need to be of size 2");let i,o,a;e?(i=t[1],o=t[0]):(i=t[0],o=t[1]);let l=-1;if(r?(a=n[0],l=1):(a=n[1],l=0),n[l]!==o)throw new Error("dimension mismatch");if(i<=0||a<=0||o<=0)throw new Error("invalid shape specified");if(s&&!BroadcastUtil.isValidBroadcast(s,[i,a]))throw new Error("gemm: invalid bias shape for broadcast");return[i,a,o]}},ProtoUtil=class t{static tensorDataTypeFromProto(t){switch(t){case import_onnx.onnx.TensorProto.DataType.INT8:return"int8";case import_onnx.onnx.TensorProto.DataType.UINT8:return"uint8";case import_onnx.onnx.TensorProto.DataType.BOOL:return"bool";case import_onnx.onnx.TensorProto.DataType.INT16:return"int16";case import_onnx.onnx.TensorProto.DataType.UINT16:return"uint16";case import_onnx.onnx.TensorProto.DataType.INT32:return"int32";case import_onnx.onnx.TensorProto.DataType.UINT32:return"uint32";case import_onnx.onnx.TensorProto.DataType.FLOAT:return"float32";case import_onnx.onnx.TensorProto.DataType.DOUBLE:return"float64";case import_onnx.onnx.TensorProto.DataType.STRING:return"string";case import_onnx.onnx.TensorProto.DataType.INT64:return"int32";case import_onnx.onnx.TensorProto.DataType.UINT64:return"uint32";default:throw new Error(`unsupported data type: ${import_onnx.onnx.TensorProto.DataType[t]}`)}}static tensorDataTypeStringToEnum(t){switch(t){case"int8":return import_onnx.onnx.TensorProto.DataType.INT8;case"uint8":return import_onnx.onnx.TensorProto.DataType.UINT8;case"bool":return import_onnx.onnx.TensorProto.DataType.BOOL;case"int16":return import_onnx.onnx.TensorProto.DataType.INT16;case"uint16":return import_onnx.onnx.TensorProto.DataType.UINT16;case"int32":return import_onnx.onnx.TensorProto.DataType.INT32;case"uint32":return import_onnx.onnx.TensorProto.DataType.UINT32;case"float32":return import_onnx.onnx.TensorProto.DataType.FLOAT;case"float64":return import_onnx.onnx.TensorProto.DataType.DOUBLE;case"string":return import_onnx.onnx.TensorProto.DataType.STRING;case"int64":return import_onnx.onnx.TensorProto.DataType.INT64;case"uint64":return import_onnx.onnx.TensorProto.DataType.UINT64;default:throw new Error(`unsupported data type: ${t}`)}}static tensorDimsFromProto(t){return t.map((t=>long_default.isLong(t)?t.toNumber():t))}static tensorValueTypeFromProto(e){return{tensorType:t.tensorDataTypeFromProto(e.elemType),shape:{dims:t.tensorDimsFromProto(e.shape.dim.map((t=>t.dimValue)))}}}static tensorDimsFromORTFormat(t){const e=[];for(let n=0;n<t.dimsLength();n++)e.push(LongUtil.longToNumber(t.dims(n)));return e}static tensorAttributesFromORTFormat(t){const e=[];for(let n=0;n<t.attributesLength();n++)e.push(t.attributes(n));return e}},LongUtil=class{static longToNumber(t,e){return long_default.isLong(t)?t.toNumber():t instanceof flatbuffers.Long?long_default.fromValue({low:t.low,high:t.high,unsigned:e??!1}).toNumber():t}static isLong(t){return long_default.isLong(t)||t instanceof flatbuffers.Long}},ShapeUtil=class t{static size(e){return t.getSizeFromDimensionRange(e,0,e.length)}static sizeFromDimension(e,n){if(n<0||n>e.length)throw new Error(`invalid dimension of ${n} for sizeFromDimension as Tensor has ${e.length} dimensions.`);return t.getSizeFromDimensionRange(e,n,e.length)}static sizeToDimension(e,n){if(n<0||n>e.length)throw new Error(`invalid dimension of ${n} for sizeToDimension as Tensor has ${e.length} dimensions.`);return t.getSizeFromDimensionRange(e,0,n)}static getSizeFromDimensionRange(t,e,n){let r=1;for(let s=e;s<n;s++){if(t[s]<=0)throw new Error("cannot get valid size from specified dimension range. Most likely the range contains 0 or negative values in them.");r*=t[s]}return r}static computeStrides(t){const e=t.length;if(0===e)return[];if(1===e)return[1];const n=new Array(e);n[e-1]=1,n[e-2]=t[e-1];for(let r=e-3;r>=0;--r)n[r]=n[r+1]*t[r+1];return n}static transpose(t){return t.slice().reverse()}static indicesToOffset(t,e,n){void 0===n&&(n=t.length);let r=0;for(let s=0;s<n;++s)r+=e[s]*t[s];return r}static offsetToIndices(t,e){const n=e.length;if(0===n)return[];if(1===n)return[t*e[0]];const r=new Array(e.length);for(let n=0;n<r.length-1;++n)r[n]=Math.floor(t/e[n]),t-=r[n]*e[n];return r[r.length-1]=t,r}static normalizeAxis(t,e){if(t<-e&&t>=e)throw new Error("unsupported axis for this operation.");return t<0?t+e:t}static normalizeAxes(t,e){return t.map((t=>this.normalizeAxis(t,e)))}static incrementIndex(t,e,n){if(0===e.length||0===t.length)throw new Error("Index incrementing unsupported for scalar Tensor");if(void 0===n)n=e.length;else if(n<=0||n>e.length)throw new Error("Incorrect axis to increment on");for(let r=n-1;r>=0&&(t[r]++,!(t[r]<e[r]));--r)t[r]=0}static calculateReshapedDims(e,n){if(0===n.length){if(0===e.length||1===t.size(e))return[];throw new Error("cannot reshape to a scalar Tensor")}const r=n.length,s=new Array(r);let i=-1,o=1;for(let t=0;t<r;t++){if(n[t]<-1)throw new Error("a dimension in shape hints cannot be less than -1");if(-1===n[t]){if(-1!==i)throw new Error("at most one dimension in shape hints can be -1");i=t}else{if(0===n[t]){if(t>=e.length)throw new Error("the dimension with value zero exceeds the dimension size of the input tensor");s[t]=e[t]}else s[t]=n[t];o*=s[t]}}const a=t.size(e);if(-1!==i){if(a%o!=0)throw new Error(`the input tensor cannot be reshaped to the requested shape. Input shape: [${e}] Output shape: [${n}]`);s[i]=a/o}else if(o!==a)throw new Error("reshapedDims and originalDims don't have matching sizes");return s}static sortBasedOnPerm(t,e){return e?e.map((e=>t[e])):t.slice().reverse()}static padShape(t,e){const n=t.length;return t.map(((t,r)=>t+e[r]+e[r+n]))}static areEqual(t,e){return t.length===e.length&&t.every(((t,n)=>t===e[n]))}static validateDimsAndCalcSize(t){if(t.length>6)throw new TypeError("Only rank 0 to 6 is supported for tensor shape.");let e=1;for(const n of t){if(!Number.isInteger(n))throw new TypeError(`Invalid shape: ${n} is not an integer`);if(n<0||n>2147483647)throw new TypeError(`Invalid shape: length ${n} is not allowed`);e*=n}return e}static flattenShape(t,e){e<0&&(e+=t.length);const n=t.reduce(((t,e)=>t*e),1),r=t.slice(e).reduce(((t,e)=>t*e),1);return[n/r,r]}static squeezeShape(e,n){const r=new Array;n=t.normalizeAxes(n,e.length);for(let t=0;t<e.length;t++){const s=n.indexOf(t)>=0;if(s&&1!==e[t])throw new Error("squeeze an axis of size different than 1");(0===n.length&&e[t]>1||n.length>0&&!s)&&r.push(e[t])}return r}static unsqueezeShape(e,n){const r=new Array(e.length+n.length);r.fill(0);for(let e=0;e<n.length;e++){const s=t.normalizeAxis(n[e],r.length);if(s>=r.length)throw new Error("'axes' has an out of range axis");if(0!==r[s])throw new Error("'axes' has a duplicate axis");r[s]=1}let s=0;for(let t=0;t<r.length;t++)0===r[t]&&(r[t]=e[s++]);if(s!==e.length)throw new Error("the unsqueezed dimension could not be established");return r}},SplitUtil=class t{static splitShape(e,n,r,s){if(0===r.length){if(!s)throw new Error("need to know number of outputs when the 'split' attribute is not specified");t.determineSplit(e[n],s,r)}const i=[],o=[0];for(let t=0;t<r.length;++t){0!==t&&o.push(o[t-1]+r[t-1]);const s=e.slice();s[n]=r[t],i.push(s)}return[i,o]}static determineSplit(t,e,n){if(t%e!=0)throw new Error("cannot split tensor to equal sized parts");for(let r=0;r<e;++r)n.push(t/e)}},PoolConvUtil=class t{static adjustPoolAttributes(t,e,n,r,s,i){if(!t&&n.length!==e.length-2)throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions");if(t)for(let t=0;t<e.length-2;t++)t>=n.length?n.push(e[t+2]):n[t]=e[t+2];for(let t=0;t<n.length;t++)if(t<r.length){if(r[t]<0)throw new Error("strides should be greater than or equal to 1")}else r.push(1);for(let t=0;t<n.length;t++)if(t<s.length){if(s[t]<0)throw new Error("dilations should be greater than or equal to 1")}else s.push(1);for(let t=0;t<2*n.length;t++)if(t<i.length){if(i[t]<0)throw new Error("pad should be greater than or equal to 1")}else i.push(0);for(let t=0;t<n.length;t++){if(n[t]<=0)throw new Error("kernel shapes need to be greater than 0");if(i[t]>=n[t]||i[t+n.length]>=n[t])throw new Error("pads should be smaller than kernel")}}static adjustPadsBasedOnAutoPad(e,n,r,s,i,o){if(o){if(i.length!==2*(e.length-2))throw new Error("length of pads should be twice the length of data dimensions");if(n.length!==e.length-2)throw new Error("length of strides should be the length of data dimensions");if(s.length!==e.length-2)throw new Error("length of kernel shapes should be the length of data dimensions");for(let a=0;a<e.length-2;a++)t.adjustPadAndReturnShape(e[a+2],n[a],r[a],s[a],i,a,a+e.length-2,o)}}static computePoolOutputShape(e,n,r,s,i,o,a){if(n.length<=0)throw new Error("input shape must be of size greater than 0");const l=[n[0],n[1]];return t.computeShapeHelper(e,n,l,r,s,i,o,a),l}static computeConvOutputShape(e,n,r,s,i,o,a){if(e.length<=0||n.length<=0)throw new Error("invalid input tensor dims or invalid filter tensor dims");const l=[e[0],n[0]];return t.computeShapeHelper(!1,e,l,r,s,i,o,a),l}static computeShapeHelper(e,n,r,s,i,o,a,l){if(e)for(let t=0;t<n.length-2;t++)r.push(1);else for(let e=0;e<n.length-2;e++)r.push(t.adjustPadAndReturnShape(n[e+2],s[e],i[e],o[e],a,e,e+n.length-2,l))}static adjustPadAndReturnShape(t,e,n,r,s,i,o,a){const l=n*(r-1)+1;if(!a||"NOTSET"===a)return Math.floor((t+s[i]+s[o]-l)/e+1);switch(a){case"VALID":return s[i]=0,s[o]=0,Math.floor((t-l)/e+1);case"SAME_LOWER":case"SAME_UPPER":if(1!==n)throw new Error("Dilation not supported for SAME_UPPER or SAME_LOWER");{const n=((t+e-1)/e-1)*e+r-t;return s[i]="SAME_LOWER"===a?Math.floor((n+1)/2):Math.floor(n/2),s[o]=n-s[i],Math.floor((t+n-r)/e+1)}default:throw new Error("Unsupported AutoPad type")}}},MIN_CLIP=-34028234663852886e22,MAX_CLIP=34028234663852886e22}}),import_guid_typescript,import_onnx2,ortFbs,Tensor3;function sizeof(t){switch(t){case"bool":case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;case"float64":return 8;default:throw new Error(`cannot calculate sizeof() on type ${t}`)}}function sizeofProto(t){switch(t){case import_onnx2.onnx.TensorProto.DataType.UINT8:case import_onnx2.onnx.TensorProto.DataType.INT8:case import_onnx2.onnx.TensorProto.DataType.BOOL:return 1;case import_onnx2.onnx.TensorProto.DataType.UINT16:case import_onnx2.onnx.TensorProto.DataType.INT16:return 2;case import_onnx2.onnx.TensorProto.DataType.FLOAT:case import_onnx2.onnx.TensorProto.DataType.INT32:case import_onnx2.onnx.TensorProto.DataType.UINT32:return 4;case import_onnx2.onnx.TensorProto.DataType.INT64:case import_onnx2.onnx.TensorProto.DataType.DOUBLE:case import_onnx2.onnx.TensorProto.DataType.UINT64:return 8;default:throw new Error(`cannot calculate sizeof() on type ${import_onnx2.onnx.TensorProto.DataType[t]}`)}}function createView(t,e){return new(dataviewConstructor(e))(t)}function dataviewConstructor(t){switch(t){case"bool":case"uint8":return Uint8Array;case"int8":return Int8Array;case"int16":return Int16Array;case"uint16":return Uint16Array;case"int32":return Int32Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"float32":return Float32Array;case"float64":return Float64Array;default:throw new Error("unspecified error")}}function longToNumber(t,e){if(e===import_onnx2.onnx.TensorProto.DataType.INT64||e===ortFbs.TensorDataType.INT64){if(t.greaterThanOrEqual(2147483648)||t.lessThan(-2147483648))throw new TypeError("int64 is not supported")}else{if(e!==import_onnx2.onnx.TensorProto.DataType.UINT32&&e!==ortFbs.TensorDataType.UINT32&&e!==import_onnx2.onnx.TensorProto.DataType.UINT64&&e!==ortFbs.TensorDataType.UINT64)throw new TypeError(`not a LONG type: ${import_onnx2.onnx.TensorProto.DataType[e]}`);if(t.greaterThanOrEqual(4294967296)||t.lessThan(0))throw new TypeError("uint64 is not supported")}return t.toNumber()}function readProto(t,e,n){switch(e){case import_onnx2.onnx.TensorProto.DataType.BOOL:case import_onnx2.onnx.TensorProto.DataType.UINT8:return t.getUint8(n);case import_onnx2.onnx.TensorProto.DataType.INT8:return t.getInt8(n);case import_onnx2.onnx.TensorProto.DataType.UINT16:return t.getUint16(n,!0);case import_onnx2.onnx.TensorProto.DataType.INT16:return t.getInt16(n,!0);case import_onnx2.onnx.TensorProto.DataType.FLOAT:return t.getFloat32(n,!0);case import_onnx2.onnx.TensorProto.DataType.INT32:return t.getInt32(n,!0);case import_onnx2.onnx.TensorProto.DataType.UINT32:return t.getUint32(n,!0);case import_onnx2.onnx.TensorProto.DataType.INT64:return longToNumber(long_default.fromBits(t.getUint32(n,!0),t.getUint32(n+4,!0),!1),e);case import_onnx2.onnx.TensorProto.DataType.DOUBLE:return t.getFloat64(n,!0);case import_onnx2.onnx.TensorProto.DataType.UINT64:return longToNumber(long_default.fromBits(t.getUint32(n,!0),t.getUint32(n+4,!0),!0),e);default:throw new Error(`cannot read from DataView for type ${import_onnx2.onnx.TensorProto.DataType[e]}`)}}var init_tensor2=__esm({"web/lib/onnxjs/tensor.ts"(){import_guid_typescript=__toESM(require_guid()),init_long(),init_ort_generated(),import_onnx2=__toESM(require_onnx()),init_util(),ortFbs=onnxruntime.experimental.fbs,Tensor3=class t{constructor(t,e,n,r,s,i=import_guid_typescript.Guid.create()){this.dims=t,this.type=e,this.dataProvider=n,this.asyncDataProvider=r,this.cache=s,this.dataId=i,this.size=ShapeUtil.validateDimsAndCalcSize(t);const o=this.size,a=void 0===n&&void 0===r&&void 0===s;if(void 0!==s&&s.length!==o)throw new RangeError("Input dims doesn't match data length.");if("string"===e){if(!(void 0===s||Array.isArray(s)&&s.every((t=>"string"==typeof t))))throw new TypeError("cache should be a string array");a&&(this.cache=new Array(o))}else{if(void 0!==s){const t=dataviewConstructor(e);if(!(s instanceof t))throw new TypeError(`cache should be type ${t.name}`)}if(a){const t=new ArrayBuffer(o*sizeof(e));this.cache=createView(t,e)}}}get data(){if(void 0===this.cache){const t=this.dataProvider(this.dataId);if(t.length!==this.size)throw new Error("Length of data provided by the Data Provider is inconsistent with the dims of this Tensor.");this.cache=t}return this.cache}get stringData(){if("string"!==this.type)throw new TypeError("data type is not string");return this.data}get integerData(){switch(this.type){case"uint8":case"int8":case"uint16":case"int16":case"int32":case"uint32":case"bool":return this.data;default:throw new TypeError("data type is not integer (uint8, int8, uint16, int16, int32, uint32, bool)")}}get floatData(){switch(this.type){case"float32":case"float64":return this.data;default:throw new TypeError("data type is not float (float32, float64)")}}get numberData(){if("string"!==this.type)return this.data;throw new TypeError("type cannot be non-number (string)")}get(t){return this.data[ShapeUtil.indicesToOffset(t,this.strides)]}set(t,e){this.data[ShapeUtil.indicesToOffset(t,this.strides)]=e}async getData(){return void 0===this.cache&&(this.cache=await this.asyncDataProvider(this.dataId)),this.cache}get strides(){return this._strides||(this._strides=ShapeUtil.computeStrides(this.dims)),this._strides}static fromProto(e){if(!e)throw new Error("cannot construct Value from an empty tensor");const n=ProtoUtil.tensorDataTypeFromProto(e.dataType),r=ProtoUtil.tensorDimsFromProto(e.dims),s=new t(r,n);if("string"===n)e.stringData.forEach(((t,e)=>{s.data[e]=decodeUtf8String(t)}));else if(e.rawData&&"number"==typeof e.rawData.byteLength&&e.rawData.byteLength>0){const t=s.data,n=new DataView(e.rawData.buffer,e.rawData.byteOffset,e.rawData.byteLength),r=sizeofProto(e.dataType),i=e.rawData.byteLength/r;if(e.rawData.byteLength%r!=0)throw new Error("invalid buffer length");if(t.length!==i)throw new Error("buffer length mismatch");for(let s=0;s<i;s++){const i=readProto(n,e.dataType,s*r);t[s]=i}}else{let t;switch(e.dataType){case import_onnx2.onnx.TensorProto.DataType.FLOAT:t=e.floatData;break;case import_onnx2.onnx.TensorProto.DataType.INT32:case import_onnx2.onnx.TensorProto.DataType.INT16:case import_onnx2.onnx.TensorProto.DataType.UINT16:case import_onnx2.onnx.TensorProto.DataType.INT8:case import_onnx2.onnx.TensorProto.DataType.UINT8:case import_onnx2.onnx.TensorProto.DataType.BOOL:t=e.int32Data;break;case import_onnx2.onnx.TensorProto.DataType.INT64:t=e.int64Data;break;case import_onnx2.onnx.TensorProto.DataType.DOUBLE:t=e.doubleData;break;case import_onnx2.onnx.TensorProto.DataType.UINT32:case import_onnx2.onnx.TensorProto.DataType.UINT64:t=e.uint64Data;break;default:throw new Error("unspecific error")}if(null==t)throw new Error("failed to populate data from a tensorproto value");const n=s.data;if(n.length!==t.length)throw new Error("array length mismatch");for(let r=0;r<t.length;r++){const s=t[r];long_default.isLong(s)?n[r]=longToNumber(s,e.dataType):n[r]=s}}return s}static fromData(e,n,r){return new t(n,r,void 0,void 0,e)}static fromOrtTensor(e){if(!e)throw new Error("cannot construct Value from an empty tensor");const n=ProtoUtil.tensorDimsFromORTFormat(e),r=ProtoUtil.tensorDataTypeFromProto(e.dataType()),s=new t(n,r);if("string"===r)for(let t=0;t<e.stringDataLength();t++)s.data[t]=e.stringData(t);else if(e.rawDataArray()&&"number"==typeof e.rawDataLength()&&e.rawDataLength()>0){const t=s.data,n=new DataView(e.rawDataArray().buffer,e.rawDataArray().byteOffset,e.rawDataLength()),r=sizeofProto(e.dataType()),i=e.rawDataLength()/r;if(e.rawDataLength()%r!=0)throw new Error("invalid buffer length");if(t.length!==i)throw new Error("buffer length mismatch");for(let s=0;s<i;s++){const i=readProto(n,e.dataType(),s*r);t[s]=i}}return s}}}}),GLSL_ES_2_0,GLSL_ES_3_0;function getGlsl(t){return 1===t?GLSL_ES_2_0:GLSL_ES_3_0}function getVertexShaderSource(t){const e=getGlsl(t);return`${e.version}\n      precision highp float;\n      ${e.attribute} vec3 position;\n      ${e.attribute} vec2 textureCoord;\n\n      ${e.varyingVertex} vec2 TexCoords;\n\n      void main()\n      {\n          gl_Position = vec4(position, 1.0);\n          TexCoords = textureCoord;\n      }`}function getFragShaderPreamble(t){const e=getGlsl(t);return`${e.version}\n    precision highp float;\n    precision highp int;\n    precision highp sampler2D;\n    ${e.varyingFrag} vec2 TexCoords;\n    ${e.outputDeclaration}\n    const vec2 halfCR = vec2(0.5, 0.5);\n\n    // Custom vector types to handle higher dimenalities.\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    int imod(int x, int y) {\n      return x - y * (x / y);\n    }\n\n    `}function getDefaultFragShaderMain(t,e){return`\n  void main() {\n    int indices[${e}];\n    toVec(TexCoords, indices);\n    vec4 result = vec4(process(indices));\n    ${getGlsl(t).output} = result;\n  }\n  `}var init_glsl_source=__esm({"web/lib/onnxjs/backends/webgl/glsl-source.ts"(){GLSL_ES_2_0={version:"",attribute:"attribute",varyingVertex:"varying",varyingFrag:"varying",texture2D:"texture2D",output:"gl_FragColor",outputDeclaration:""},GLSL_ES_3_0={version:"#version 300 es",attribute:"in",varyingVertex:"out",varyingFrag:"in",texture2D:"texture",output:"outputColor",outputDeclaration:"out vec4 outputColor;"}}}),init_types=__esm({"web/lib/onnxjs/backends/webgl/types.ts"(){}});async function repeatedTry(t,e=(t=>0),n){return new Promise(((r,s)=>{let i=0;const o=()=>{if(t())return void r();i++;const a=e(i);null!=n&&i>=n?s():setTimeout(o,a)};o()}))}function generateShaderFuncNameFromInputSamplerName(t){return assert(void 0!==t&&0!==t.length,(()=>"empty string found for sampler name")),"get"+t.charAt(0).toUpperCase()+t.slice(1)}function generateShaderFuncNameFromInputSamplerNameAtOutCoords(t){return assert(void 0!==t&&0!==t.length,(()=>"empty string found for sampler name")),"get"+t.charAt(0).toUpperCase()+t.slice(1)+"AtOutCoords"}function squeezeInputShape(t,e){let n=JSON.parse(JSON.stringify(t));return n=e,n}function getSqueezedParams(t,e){return e.map((e=>t[e])).join(", ")}function getCoordsDataType(t){if(t<=1)return"int";if(2===t)return"ivec2";if(3===t)return"ivec3";if(4===t)return"ivec4";if(5===t)return"ivec5";if(6===t)return"ivec6";throw Error(`GPU for rank ${t} is not yet supported`)}function getGlChannels(t=6){return["x","y","z","w","u","v"].slice(0,t)}var init_utils=__esm({"web/lib/onnxjs/backends/webgl/utils.ts"(){init_util()}});function getVecChannels(t,e){return getGlChannels(e).map((e=>`${t}.${e}`))}function getChannels(t,e){return 1===e?[t]:getVecChannels(t,e)}function unpackFromChannel(){return"\n    float getChannel(vec4 frag, int dim) {\n      int modCoord = imod(dim, 2);\n      return modCoord == 0 ? frag.r : frag.g;\n    }\n\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  "}var init_packing_utils=__esm({"web/lib/onnxjs/backends/webgl/ops/packing-utils.ts"(){init_utils()}}),packProgramMetadata,createPackProgramInfo,createPackProgramInfoLoader;function getOutOfBoundsCondition(t,e,n){if(0===t)return"false";if(1===t)return`rc > ${e[0]}`;let r="";for(let s=t-2;s<t;s++)r+=`${n[s]} >= ${e[s-t+2]}`,s<t-1&&(r+="||");return r}function getOutput(t,e){const n=t.length;if(0===n)return"getA(), 0, 0, 0";if(1===n)return`getA(rc),\n            rc + 1 >= ${t[0]} ? 0. : getA(rc + 1),\n            0, 0`;let r="";if(n>2)for(let t=0;t<n-2;++t)r+=`${e[t]},`;return`getA(${r}r, c),\n          rEdge ? 0. : getA(${r}rp1, c),\n          cEdge ? 0. : getA(${r}r, cp1),\n          rEdge || cEdge ? 0. : getA(${r}rp1, cp1)`}function getSetup(t,e,n,r){if(0===t||1===t)return"";return`\n    int r = ${e[t-2]};\n    int c = ${e[t-1]};\n    int rp1 = ${e[t-2]} + 1;\n    int cp1 = ${e[t-1]} + 1;\n    bool rEdge = rp1 >= ${r};\n    bool cEdge = cp1 >= ${n};\n    `}var init_pack=__esm({"web/lib/onnxjs/backends/webgl/ops/pack.ts"(){init_glsl_source(),init_types(),init_utils(),init_packing_utils(),packProgramMetadata={name:"pack",inputNames:["A"],inputTypes:[1]},createPackProgramInfo=(t,e)=>{const n=getGlsl(t.session.backend.glContext.version),r=e.dims,s=r.length,i=e.dims.length,o=getCoordsDataType(i),a=getChannels("rc",i),l=getSetup(i,a,r[r.length-2],r[r.length-1]);let F;F=0===s?[1,1]:1===s?[r[0],1]:[r[i-1],r[i-2]];const U=getOutOfBoundsCondition(i,F,a),c=getOutput(r,a),u=`\n        void main() {\n          ${o} rc = getOutputCoords();\n\n          if(${U}) {\n            ${n.output} = vec4(0);\n          } else {\n            ${l}\n\n            ${n.output} = vec4(${c});\n          }\n        }\n      `;return{...packProgramMetadata,hasMain:!0,output:{dims:e.dims,type:e.type,textureType:2},shaderSource:u}},createPackProgramInfoLoader=(t,e)=>({...packProgramMetadata,get:()=>createPackProgramInfo(t,e)})}}),createPackedReshape3DProgramMetadata,createPackedReshape3DProgramInfo,createPackedReshape3DProgramInfoLoader;function processDims3D(t){if(0===t.length)return[1,1,1];let e=1;for(let n=0;n<t.length-2;++n)e*=t[n];return[e,t.length>1?t[t.length-2]:1,t[t.length-1]]}function isReshapeCheap(t,e){let n=!1;return n=0===t.length||0===e.length||(t.length<2||e.length<2?t[t.length-1]===e[e.length-1]:t[t.length-1]===e[e.length-1]&&t[t.length-2]===e[e.length-2]),n}function getReshapedInputCoords(t){const e=ShapeUtil.computeStrides(t),n=["b","r","c"],r="index";return`\n    ivec3 inputCoordsFromReshapedOutCoords(int index) {\n      ${e.map(((t,s)=>`${`int ${n[s]} = ${r} / ${t}`}; ${s===e.length-1?`int ${n[s+1]} = ${r} - ${n[s]} * ${t}`:`index -= ${n[s]} * ${t}`};`)).join("")}\n      return ivec3(b, r, c);\n    }\n  `}function getFlattenedIndexFrom3D(t){const e=ShapeUtil.computeStrides(t);return`\n  int getFlattenedIndex(ivec3 coords) {\n    // reverse y, z order\n    return coords.x * ${e[0]} + coords.z * ${e[1]} + coords.y;\n  }\n`}var init_reshape_packed=__esm({"web/lib/onnxjs/backends/webgl/ops/reshape-packed.ts"(){init_util(),init_glsl_source(),init_types(),init_packing_utils(),createPackedReshape3DProgramMetadata=t=>({name:"Reshape (packed)",inputTypes:[2],inputNames:["A"],cacheHint:`${t}`}),createPackedReshape3DProgramInfo=(t,e,n,r)=>{const s=e.dims,i=r;let o="";for(let t=0;t<4;t++){let e="";switch(t){case 0:e="outputCoords = rc;";break;case 1:e="outputCoords = ivec3(rc.x, rc.y+1, rc.z);";break;case 2:e="outputCoords = ivec3(rc.x, rc.y, rc.z+1);";break;case 3:e="outputCoords = ivec3(rc.x, rc.y+1, rc.z+1);";break;default:throw new Error}o+=`\n        ${e}\n        ${t>0?"if(outputCoords.y < rows && outputCoords.z < cols){":""}\n          int flattenedIndex = getFlattenedIndex(outputCoords);\n\n          ivec3 inputRC = inputCoordsFromReshapedOutCoords(flattenedIndex);\n          vec2 innerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n          result[${t}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), innerDims);\n\n        ${t>0?"}":""}\n      `}const a=getGlsl(t.session.backend.glContext.version),l=`\n      ${getReshapedInputCoords(s)}\n      ${getFlattenedIndexFrom3D(i)}\n      ${unpackFromChannel()}\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0.0);\n\n        ivec3 outputCoords;\n        int rows = ${i[2]};\n        int cols = ${i[1]};\n\n        ${o}\n        ${a.output} = result;\n      }\n    `;return{...n,output:{dims:i,type:e.type,textureType:2},shaderSource:l,hasMain:!0}},createPackedReshape3DProgramInfoLoader=(t,e,n)=>{const r=createPackedReshape3DProgramMetadata(n);return{...r,get:()=>createPackedReshape3DProgramInfo(t,e,r,n)}}}}),encodeAsUint8,init_uint8_encode=__esm({"web/lib/onnxjs/backends/webgl/ops/uint8-encode.ts"(){init_glsl_source(),init_types(),encodeAsUint8=(t,e)=>{const n=e.shape,r=getGlsl(t.session.backend.glContext.version),s=`\n    const float FLOAT_MAX = 1.70141184e38;\n    const float FLOAT_MIN = 1.17549435e-38;\n\n    bool isNaN(float val) {\n      return (val < 1.0 || 0.0 < val || val == 0.0) ? false : true;\n    }\n\n    highp vec4 encodeAsUint8(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\n    void main() {\n      float value = ${r.texture2D}(X,TexCoords).r;\n      ${r.output} = encodeAsUint8(value);\n    }`,i={name:"Uint8Encode",inputTypes:[0],inputNames:["X"],output:{dims:n,type:e.tensor.type,textureType:3},shaderSource:s,hasMain:!0};return t.executeProgram(i,[e.tensor])}}}),unpackProgramMetadata,createUnpackProgramInfo,createUnpackProgramInfoLoader;function getSourceCoords(t,e){if(1===t)return"rc";let n="";for(let r=0;r<t;r++)n+=e[r],r<t-1&&(n+=",");return n}var init_unpack=__esm({"web/lib/onnxjs/backends/webgl/ops/unpack.ts"(){init_glsl_source(),init_types(),init_utils(),init_packing_utils(),unpackProgramMetadata={name:"unpack",inputNames:["A"],inputTypes:[2]},createUnpackProgramInfo=(t,e)=>{const n=e.dims.length,r=getChannels("rc",n),s=r.slice(-2),i=getCoordsDataType(n),o=unpackFromChannel(),a=0===e.dims.length?"":getSourceCoords(n,r),l=n<=1?"rc":`vec2(${s.join(",")})`,F=`\n    ${o}\n    void main() {\n      ${i} rc = getOutputCoords();\n\n       // Sample the texture with the coords to get the rgba channel value.\n       vec4 packedInput = getA(${a});\n\n       ${getGlsl(t.session.backend.glContext.version).output} = vec4(getChannel(packedInput, ${l}), 0, 0, 0);\n     }\n   `;return{...unpackProgramMetadata,hasMain:!0,output:{dims:e.dims,type:e.type,textureType:0},shaderSource:F}},createUnpackProgramInfoLoader=(t,e)=>({...unpackProgramMetadata,get:()=>createUnpackProgramInfo(t,e)})}}),RedFloat32DataEncoder,RGBAFloatDataEncoder,Uint8DataEncoder,init_texture_data_encoder=__esm({"web/lib/onnxjs/backends/webgl/texture-data-encoder.ts"(){init_instrument(),RedFloat32DataEncoder=class{constructor(t,e=1){if(1===e)this.internalFormat=t.R32F,this.format=t.RED,this.textureType=t.FLOAT,this.channelSize=e;else{if(4!==e)throw new Error(`Invalid number of channels: ${e}`);this.internalFormat=t.RGBA32F,this.format=t.RGBA,this.textureType=t.FLOAT,this.channelSize=e}}encode(t,e){let n,r;return t.constructor!==Float32Array&&(Logger.warning("Encoder","data was not of type Float32; creating new Float32Array"),r=new Float32Array(t)),e*this.channelSize>t.length?(Logger.warning("Encoder","Source data too small. Allocating larger array"),r=t,n=this.allocate(e*this.channelSize),r.forEach(((t,e)=>n[e]=t))):(r=t,n=r),n}allocate(t){return new Float32Array(4*t)}decode(t,e){if(1===this.channelSize){return t.filter(((t,e)=>e%4==0)).subarray(0,e)}return t.subarray(0,e)}},RGBAFloatDataEncoder=class{constructor(t,e=1,n){if(1!==e&&4!==e)throw new Error(`Invalid number of channels: ${e}`);this.internalFormat=t.RGBA,this.format=t.RGBA,this.channelSize=e,this.textureType=n||t.FLOAT}encode(t,e){let n=t;return 1===this.channelSize&&(Logger.verbose("Encoder","Exploding into a larger array"),n=this.allocate(e),t.forEach(((t,e)=>n[4*e]=t))),n}allocate(t){return new Float32Array(4*t)}decode(t,e){if(1===this.channelSize){return t.filter(((t,e)=>e%4==0)).subarray(0,e)}return t.subarray(0,e)}},Uint8DataEncoder=class{constructor(t,e=1){if(this.channelSize=4,1===e)this.internalFormat=t.ALPHA,this.format=t.ALPHA,this.textureType=t.UNSIGNED_BYTE,this.channelSize=e;else{if(4!==e)throw new Error(`Invalid number of channels: ${e}`);this.internalFormat=t.RGBA,this.format=t.RGBA,this.textureType=t.UNSIGNED_BYTE,this.channelSize=e}}encode(t,e){return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}allocate(t){return new Uint8Array(t*this.channelSize)}decode(t,e){if(t instanceof Uint8Array)return t.subarray(0,e);throw new Error(`Invalid array type: ${t.constructor}`)}}}}),createTextureLayoutFromTextureType,calculateTextureWidthAndHeight,createTextureLayoutFromShape,init_texture_layout=__esm({"web/lib/onnxjs/backends/webgl/texture-layout.ts"(){init_util(),init_types(),createTextureLayoutFromTextureType=(t,e,n)=>{const r=0===n||1===n?1:4,s=2===n,i=1===n||2===n,o=4===n?e.length-1:void 0,a=4===n?e.map(((t,n)=>n===e.length-1?4*t:t)):void 0;return createTextureLayoutFromShape(t,e,r,a,{isPacked:s,reverseWH:i,breakAxis:o})},calculateTextureWidthAndHeight=(t,e,n)=>{const r=createTextureLayoutFromTextureType(t,e,n);return[r.width,r.height]},createTextureLayoutFromShape=(t,e,n=1,r,s)=>{const i=!(!s||!s.isPacked),[o,a]=t.computeTextureWH(i&&r||e,s),l=e.length;let F=e.slice(0);if(0===l&&(F=[1]),1===n)r=e;else if(i){if(4!==n)throw new Error("a packed texture must be 4-channel");r=e,l>0&&(F[l-1]=Math.ceil(F[l-1]/2)),l>1&&(F[l-2]=Math.ceil(F[l-2]/2))}else if(!r)throw new Error("Unpacked shape is needed when using channels > 1");return{width:o,height:a,channels:n,isPacked:i,shape:F,strides:ShapeUtil.computeStrides(F),unpackedShape:r,reversedWH:s&&s.reverseWH}}}}),getProgramInfoUniqueKey,WebGLInferenceHandler,init_inference_handler=__esm({"web/lib/onnxjs/backends/webgl/inference-handler.ts"(){init_instrument(),init_tensor2(),init_util(),init_pack(),init_reshape_packed(),init_uint8_encode(),init_unpack(),init_texture_data_encoder(),init_texture_layout(),init_types(),getProgramInfoUniqueKey=(t,e)=>{const n=e.map((t=>`${t.unpackedShape.join(",")};${t.width}x${t.height}`)).join("_");let r=t.name;return t.cacheHint&&(r+="["+t.cacheHint+"]"),r+=":"+n,r},WebGLInferenceHandler=class{constructor(t){this.session=t,this.packedTextureDataCache=new Map,this.unpackedTextureDataCache=new Map}calculateTextureWidthAndHeight(t,e){return calculateTextureWidthAndHeight(this.session.layoutStrategy,t,e)}executeProgram(t,e){if(e.length<t.inputNames.length)throw new Error(`Input size mustn't be less than ${t.inputNames.length}.`);if(t.inputNames.length!==t.inputTypes.length)throw new Error("input names size does not match input types");const n=[];for(let r=0;r<t.inputNames.length;++r)n[r]=this.getOrCreateTextureData(e[r],t.inputTypes[r]);const r=getProgramInfoUniqueKey(t,n);let s=this.session.programManager.getArtifact(r);const i=s?s.programInfo:"function"==typeof t.get?t.get():t,o=createTextureLayoutFromTextureType(this.session.layoutStrategy,i.output.dims,i.output.textureType),a=this.createTextureData(o,i.output.type);return s||(s=this.session.programManager.build(i,n,a),this.session.programManager.setArtifact(r,s)),this.runProgram(s,n,a),a}run(t,e){return this.executeProgram(t,e).tensor}runProgram(t,e,n){for(let n=0;n<e.length;++n)if(!!e[n].isPacked!=(2===t.programInfo.inputTypes[n]))throw new Error(`input[${n}] property packed inconsistent`);if(!!n.isPacked!=(2===t.programInfo.output.textureType))throw new Error("output property packed inconsistent");this.session.programManager.run(t,e,n)}getOrCreateTextureData(t,e){let n=this.getTextureData(t.dataId,2===e);if(!n&&(n=this.getTextureData(t.dataId,2!==e),n))return 2===e?this.pack(n):this.unpack(n);if(!n){const r=createTextureLayoutFromTextureType(this.session.layoutStrategy,t.dims,e);if(4===e){const n=1,r=4,s=t.dims;if(4===s.length){const i=[s[0],Math.ceil(s[1]*s[2]*s[3]/r)],o=createTextureLayoutFromTextureType(this.session.layoutStrategy,i,e);let a=t.numberData;if(s[1]*s[2]*s[3]%r!=0){const e=s[0],i=s[1]*s[2]*s[3],o=Math.ceil(i*n/r)*r;a=new Float32Array(e*o);for(let r=0;r<e;++r){const e=r*i,s=r*o+r%n*i;a.set(t.numberData.subarray(e,e+i),s)}}return this.createTextureData(o,t.type,a,t,1)}}if(2===e){const e=createTextureLayoutFromShape(this.session.layoutStrategy,t.dims,1,[],{reverseWH:!0}),r=this.createTextureData(e,t.type,t.numberData,t,1);n=this.pack(r)}else n=this.createTextureData(r,t.type,t.numberData,t,1)}return n}createTextureDataFromLayoutBindTensor(t,e,n,r){return this.createTextureData(t,e,n,r,1)}createTextureData(t,e,n,r,s){Logger.verbose("InferenceHandler",`Creating TextureData: layout:[${JSON.stringify(t)}]`);const i=this.session.textureManager.createTextureFromLayout(e,t,n,s);return this.createTextureDataFromTexture(t,e,i,r)}reshapeUnpacked(t,e){const n=this.getOrCreateTextureData(t,0),r={channels:n.channels,height:n.height,width:n.width,shape:0!==e.length?e:[1],strides:ShapeUtil.computeStrides(e),unpackedShape:e};return this.createTextureDataFromTexture(r,t.type,n.texture).tensor}reshapePacked(t,e){const n=this.getOrCreateTextureData(t,2);if(isReshapeCheap(t.dims,e)){const r={channels:n.channels,height:n.height,width:n.width,shape:0!==e.length?e:[1],strides:ShapeUtil.computeStrides(e),unpackedShape:e,isPacked:!0};return this.createTextureDataFromTexture(r,t.type,n.texture).tensor}const r=processDims3D(t.dims),s=processDims3D(e),i=this.reshapePacked(t,r),o=this.run(createPackedReshape3DProgramInfoLoader(this,i,s),[i]);return this.reshapePacked(o,e)}cast(t,e){const n=this.getOrCreateTextureData(t,0);return this.createTextureDataFromTexture(n,e,n.texture).tensor}createTextureDataFromTexture(t,e,n,r,s){const i={...t,tensor:r||new Tensor3(t.unpackedShape,e,(t=>this.readTexture(i)),(async t=>this.readTextureAsync(i)),void 0,s),texture:n};return this.setTextureData(i.tensor.dataId,i,t.isPacked),i}getTextureData(t,e=!1){return this.session.isInitializer(t)?this.session.getTextureData(t,e):e?this.packedTextureDataCache.get(t):this.unpackedTextureDataCache.get(t)}setTextureData(t,e,n=!1){this.session.isInitializer(t)?this.session.setTextureData(t,e,n):(n?this.packedTextureDataCache:this.unpackedTextureDataCache).set(t,e)}isTextureLayoutCached(t,e=!1){return!!this.getTextureData(t.dataId,e)}dispose(){this.session.textureManager.clearActiveTextures(),this.packedTextureDataCache.forEach((t=>this.session.textureManager.releaseTexture(t))),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache.forEach((t=>this.session.textureManager.releaseTexture(t))),this.unpackedTextureDataCache=new Map}readTexture(t){return t.isPacked?this.readTexture(this.unpack(t)):this.session.backend.glContext.isFloat32DownloadSupported?this.session.textureManager.readTexture(t,t.tensor.type,t.channels):this.session.textureManager.readUint8TextureAsFloat(encodeAsUint8(this,t))}async readTextureAsync(t){return t.isPacked?this.readTextureAsync(this.unpack(t)):this.session.backend.glContext.isFloat32DownloadSupported?this.session.textureManager.readTextureAsync(t,t.tensor.type,t.channels):this.session.textureManager.readUint8TextureAsFloat(encodeAsUint8(this,t))}pack(t){return this.executeProgram(createPackProgramInfoLoader(this,t.tensor),[t.tensor])}unpack(t){return this.executeProgram(createUnpackProgramInfoLoader(this,t.tensor),[t.tensor])}}}}),AttributeWithCacheKeyImpl,createAttributeWithCacheKey,init_attribute_with_cache_key=__esm({"web/lib/onnxjs/attribute-with-cache-key.ts"(){AttributeWithCacheKeyImpl=class{constructor(t){Object.assign(this,t)}get cacheKey(){return this.key||(this.key=Object.getOwnPropertyNames(this).sort().map((t=>`${this[t]}`)).join(";")),this.key}},createAttributeWithCacheKey=t=>new AttributeWithCacheKeyImpl(t)}}),batchNormalizationProgramMetadata,batchNormalization,parseBatchNormalizationAttributes,createBatchNormalizationProgramInfo,validateInputs,init_batch_normalization=__esm({"web/lib/onnxjs/backends/webgl/ops/batch-normalization.ts"(){init_attribute_with_cache_key(),init_glsl_source(),init_types(),batchNormalizationProgramMetadata={name:"BatchNormalization",inputNames:["A","Scale","B","Mean","Variance"],inputTypes:[0,0,0,0,0]},batchNormalization=(t,e,n)=>{validateInputs(e);return[t.run({...batchNormalizationProgramMetadata,cacheHint:n.cacheKey,get:()=>createBatchNormalizationProgramInfo(t,e,n)},e)]},parseBatchNormalizationAttributes=t=>{const e=t.attributes.getFloat("epsilon",1e-5),n=t.attributes.getFloat("momentum",.9),r=t.attributes.getInt("spatial",1);return createAttributeWithCacheKey({epsilon:e,momentum:n,spatial:r})},createBatchNormalizationProgramInfo=(t,e,n)=>{const r=getGlsl(t.session.backend.glContext.version),s=e[0].dims.length,[i,o]=t.calculateTextureWidthAndHeight(e[1].dims,0),a=`\n  float process(int[${s}] indices) {\n    vec2 position = offsetToCoords(indices[1], ${i}, ${o});\n    float scale = getColorAsFloat(${r.texture2D}(Scale, position));\n    float mean = getColorAsFloat(${r.texture2D}(Mean, position));\n    float variance = getColorAsFloat(${r.texture2D}(Variance, position));\n    float b = getColorAsFloat(${r.texture2D}(B, position));\n\n    return scale * ( (_A(indices) - mean) / sqrt(variance + float(${n.epsilon})) ) + b;\n  }`;return{...batchNormalizationProgramMetadata,output:{dims:e[0].dims,type:e[0].type,textureType:0},shaderSource:a}},validateInputs=t=>{if(!t||5!==t.length)throw new Error("BatchNormalization requires 5 inputs.");const e=t[0],n=t[1],r=t[2],s=t[3],i=t[4];if(e.dims.length<3||1!==n.dims.length||1!==r.dims.length||1!==s.dims.length||1!==i.dims.length)throw new Error("invalid input shape.");if(n.dims[0]!==e.dims[1]||r.dims[0]!==e.dims[1]||s.dims[0]!==e.dims[1]||i.dims[0]!==e.dims[1])throw new Error("invalid input shape.");if("float32"!==e.type&&"float64"!==e.type||"float32"!==n.type&&"float64"!==n.type||"float32"!==r.type&&"float64"!==r.type||"float32"!==s.type&&"float64"!==s.type||"float32"!==i.type&&"float64"!==i.type)throw new Error("invalid input tensor types.")}}}),GlslContext,GlslLib,GlslLibRoutine,GlslLibRoutineNode,TopologicalSortGlslRoutines,init_glsl_definitions=__esm({"web/lib/onnxjs/backends/webgl/glsl-definitions.ts"(){GlslContext=class{constructor(t,e,n,r){this.glContext=t,this.programInfo=e,this.inputTextureLayouts=n,this.outputTextureLayout=r}},GlslLib=class{constructor(t){this.context=t}},GlslLibRoutine=class{constructor(t,e){this.routineBody=t,this.dependencies=e}},GlslLibRoutineNode=class{constructor(t,e,n){this.name=t,this.dependencies=n||[],e&&(this.routineBody=e)}addDependency(t){t&&this.dependencies.push(t)}},TopologicalSortGlslRoutines=class{static returnOrderedNodes(t){if(!t||0===t.length)return[];if(1===t.length)return t;const e=new Set,n=new Set,r=new Array;return this.createOrderedNodes(t,e,n,r),r}static createOrderedNodes(t,e,n,r){for(let s=0;s<t.length;++s)this.dfsTraverse(t[s],e,n,r)}static dfsTraverse(t,e,n,r){if(!t||n.has(t.name))return;if(e.has(t.name))throw new Error("Cyclic dependency detected. Can't topologically sort routines needed for shader.");e.add(t.name);const s=t.dependencies;if(s&&s.length>0)for(let t=0;t<s.length;++t)this.dfsTraverse(s[t],e,n,r);r.push(t),n.add(t.name),e.delete(t.name)}}}}),createBinaryProgramInfoLoader,createBinaryProgramInfo,add2,and2,div,equal,greater,less,mul,or2,pow,pRelu,sub,xor2;function glslAdd(){const t="add_";return{body:`\n  float ${t}(float a, float b) {\n    return a + b;\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return v1 + v2;\n  }\n  `,name:t,type:0}}function glslDiv(){const t="div_";return{body:`\n  float ${t}(float a, float b) {\n    return a / b;\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return v1 / v2;\n  }\n  `,name:t,type:0}}function glslMul(){const t="mul_";return{body:`\n  float ${t}(float a, float b) {\n    return a * b;\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return v1 * v2;\n  }\n  `,name:t,type:0}}function glslSub(){const t="sub_";return{body:`\n  float ${t}(float a, float b) {\n    return a - b;\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return v1 - v2;\n  }\n  `,name:t,type:0}}function glslEqual(){const t="equal_";return{body:`\n  float ${t}(float a, float b) {\n    return float(a == b);\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return vec4(equal(v1, v2));\n  }\n  `,name:t,type:0}}function glslGreater(){const t="greater_";return{body:`\n  float ${t}(float a, float b) {\n    return float(a > b);\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return vec4( v1.r > v2.r ,\n      v1.g > v2.g,\n      v1.b > v2.b,\n      v1.a > v2.a );\n  }\n  `,name:t,type:0}}function glslLess(){const t="less_";return{body:`\n  float ${t}(float a, float b) {\n    return float(a < b);\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return vec4( v1.r < v2.r ,\n                v1.g < v2.g,\n                v1.b < v2.b,\n                v1.a < v2.a );\n  }\n  `,name:t,type:0}}function glslAnd(){const t="and_";return{body:`\n  float ${t}(float a, float b) {\n    return float( bool(a) && bool(b) );\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    bvec4 b1 = bvec4(v1);\n    bvec4 b2 = bvec4(v2);\n    return vec4( b1.r && b2.r ,\n                b1.g && b2.g,\n                b1.b && b2.b,\n                b1.a && b2.a );\n  }\n  `,name:t,type:0}}function glslOr(){const t="or_";return{body:`\n  float ${t}(float a, float b) {\n    return float( bool(a) || bool(b) );\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    bvec4 b1 = bvec4(v1);\n    bvec4 b2 = bvec4(v2);\n    return vec4( b1.r || b2.r ,\n                b1.g || b2.g,\n                b1.b || b2.b,\n                b1.a || b2.a );\n  }\n  `,name:t,type:0}}function glslXor(){const t="xor_";return{body:`\n  float ${t}(float a, float b) {\n    return float( bool(a) ^^ bool(b) );\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    bvec4 b1 = bvec4(v1);\n    bvec4 b2 = bvec4(v2);\n    return vec4( b1.r ^^ b2.r ,\n                b1.g ^^ b2.g,\n                b1.b ^^ b2.b,\n                b1.a ^^ b2.a );\n  }\n  `,name:t,type:0}}function glslPow(){return glslBuiltinBinary("pow")}function glslPRelu(){const t="prelu_";return{body:`\n  float ${t}(float a, float b) {\n    return a < 0.0 ? a * b: a;\n  }\n  vec4 ${t}(vec4 v1, vec4 v2) {\n    return vec4(\n      v1.r < 0.0 ? v1.r * v2.r: v1.r,\n      v1.g < 0.0 ? v1.g * v2.g: v1.g,\n      v1.b < 0.0 ? v1.b * v2.b: v1.b,\n      v1.a < 0.0 ? v1.a * v2.a: v1.a\n      );\n  }\n  `,name:t,type:0}}function glslBuiltinBinary(t){const e=`${t}_`;return{body:`\n  float ${e}(float a, float b) {\n    return ${t}(a, b);\n  }\n  vec4 ${e}(vec4 v1, vec4 v2) {\n    return ${t}(v1, v2);\n  }\n  `,name:e,type:0}}var init_binary_op=__esm({"web/lib/onnxjs/backends/webgl/ops/binary-op.ts"(){init_util(),init_glsl_definitions(),init_glsl_source(),init_types(),createBinaryProgramInfoLoader=(t,e,n,r=e[0].type,s)=>{const i=t.session.pack?2:0;return{name:n.name,inputNames:["A","B"],inputTypes:[i,i],cacheHint:s,get:()=>createBinaryProgramInfo(t,e,n,r)}},createBinaryProgramInfo=(t,e,n,r=e[0].type)=>{const s=t.session.pack?2:0,i=!ShapeUtil.areEqual(e[0].dims,e[1].dims);let o=e[0].dims;const a=t.session.pack;if(i){const i=BroadcastUtil.calcShape(e[0].dims,e[1].dims,!1);if(!i)throw new Error("Can't perform binary op on the given tensors");o=i;const l=o.length,F=0!==e[0].dims.length?e[0].dims.length:1,U=0!==e[1].dims.length?e[1].dims.length:1,c=0!==e[0].dims.length?"bcastIndices_A(indices, aindices);":"aindices[0] = 0;",u=0!==e[1].dims.length?"bcastIndices_B(indices, bindices);":"bindices[0] = 0;",Q=getGlsl(t.session.backend.glContext.version),d=a?`\n      ${n.body}\n      void main() {\n        vec4 a = getAAtOutCoords();\n        vec4 b = getBAtOutCoords();\n        vec4 result = ${n.name}(a, b);\n        ${Q.output} = result;\n      }`:`\n      ${n.body}\n      float process(int indices[${l}]) {\n        int aindices[${F}];\n        int bindices[${U}];\n        ${c}\n        ${u}\n        return ${n.name}(_A(aindices), _B(bindices));\n      }`;return{name:n.name,inputNames:["A","B"],inputTypes:[s,s],output:{dims:o,type:r,textureType:s},shaderSource:d,hasMain:a}}const l=getGlsl(t.session.backend.glContext.version),F=`\n    ${n.body}\n    void main() {\n      vec4 v1 = ${l.texture2D}(A, TexCoords);\n      vec4 v2 = ${l.texture2D}(B, TexCoords);\n      vec4 result = ${n.name}(v1, v2);\n      ${l.output} = result;\n    }\n    `;return{name:n.name,inputNames:["A","B"],inputTypes:[s,s],output:{dims:e[0].dims,type:r,textureType:s},shaderSource:F,hasMain:!0}},add2=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslAdd()),e)],and2=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslAnd(),"bool"),e)],div=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslDiv()),e)],equal=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslEqual(),"bool"),e)],greater=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslGreater(),"bool"),e)],less=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslLess(),"bool"),e)],mul=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslMul()),e)],or2=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslOr(),"bool"),e)],pow=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslPow()),e)],pRelu=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslPRelu()),e)],sub=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslSub()),e)],xor2=(t,e)=>[t.run(createBinaryProgramInfoLoader(t,e,glslXor(),"bool"),e)]}}),cast,parseCastAttributes,validateInputs2,init_cast=__esm({"web/lib/onnxjs/backends/webgl/ops/cast.ts"(){init_util(),cast=(t,e,n)=>(validateInputs2(e),[t.cast(e[0],n)]),parseCastAttributes=t=>ProtoUtil.tensorDataTypeFromProto(t.attributes.getInt("to")),validateInputs2=t=>{if(!t||1!==t.length)throw new Error("Cast requires 1 input.");if("string"===t[0].type)throw new Error("Invalid input type.")}}}),createPackedConcatProgramMetadata,createPackedConcatProgramInfo,createPackedConcatProgramInfoLoader,getShiftedChannelsSnippet,init_concat_packed=__esm({"web/lib/onnxjs/backends/webgl/ops/concat-packed.ts"(){init_glsl_source(),init_types(),init_utils(),init_packing_utils(),createPackedConcatProgramMetadata=(t,e)=>({name:"Concat (packed)",inputNames:Array.from({length:t},((t,e)=>`X${e}`)),inputTypes:Array(t).fill(2),cacheHint:e}),createPackedConcatProgramInfo=(t,e,n,r)=>{const s=n[0].dims.slice();if(r>=s.length||r<-1*s.length)throw new Error("axis specified for concat doesn't match input dimensionality");r<0&&(r=s.length+r);const i=s.slice(0);for(let t=1;t<n.length;t++){const e=n[t].dims.slice();for(let t=0;t<s.length;t++)if(t===r)i[r]+=e[t];else if(s[t]!==e[t])throw new Error("non concat dimensions must match")}const o=i.length,a=getChannels("coords",o),l=getCoordsDataType(o),F=unpackFromChannel(),U=n.map((t=>t.dims)),c=getGlChannels(o),u=new Array(U.length-1);u[0]=U[0][r];for(let t=1;t<u.length;t++)u[t]=u[t-1]+U[t][r];const Q=c[r],d=c.slice(-2),B=c.join();let p=`if (${Q} < ${u[0]}) {\n        return getChannel(\n            getX0(${B}), vec2(${d.join()}));\n        }`;for(let t=1;t<u.length;t++){const e=u[t-1];p+=`\n            if (${Q} < ${u[t]}  && ${Q} >= ${u[t-1]}) {\n              return getChannel(\n                getX${t}(${getShiftedChannelsSnippet(c,Q,e)}),\n                vec2(${getShiftedChannelsSnippet(d,Q,e)}));\n            }`}const g=u.length,h=u[u.length-1];p+=`\n            return getChannel(\n              getX${g}(${getShiftedChannelsSnippet(c,Q,h)}),\n              vec2(${getShiftedChannelsSnippet(d,Q,h)}));`;const b=getGlsl(t.session.backend.glContext.version),f=`\n          ${F}\n          float getValue(${c.map((t=>"int "+t))}) {\n            ${p}\n          }\n\n          void main() {\n            ${l} coords = getOutputCoords();\n            int lastDim = coords.${c[o-1]};\n            coords.${c[o-1]} = coords.${c[o-2]};\n            coords.${c[o-2]} = lastDim;\n\n            vec4 result = vec4(getValue(${a}), 0., 0., 0.);\n\n            ${a[o-1]} = ${a[o-1]} + 1;\n            if (${a[o-1]} < ${i[o-1]}) {\n              result.g = getValue(${a});\n            }\n\n            ${a[o-2]} = ${a[o-2]} + 1;\n            if (${a[o-2]} < ${i[o-2]}) {\n              result.a = getValue(${a});\n            }\n\n            ${a[o-1]} = ${a[o-1]} - 1;\n            if (${a[o-2]} < ${i[o-2]} &&\n                ${a[o-1]} < ${i[o-1]}) {\n              result.b = getValue(${a});\n            }\n            ${b.output} = result;\n          }\n        `;return{...e,output:{dims:i,type:n[0].type,textureType:2},shaderSource:f,hasMain:!0}},createPackedConcatProgramInfoLoader=(t,e,n)=>{const r=createPackedConcatProgramMetadata(e.length,n.cacheKey);return{...r,get:()=>createPackedConcatProgramInfo(t,r,e,n.axis)}},getShiftedChannelsSnippet=(t,e,n)=>{const r=t.indexOf(e);return t.map(((t,e)=>e===r?`${t} - ${n}`:t)).join()}}}),concat,createUnpackedConcatProgramMetadata,createUnpackedConcatProgramInfo,createUnpackedConcatProgramInfoLoader,getTextureIndexWhereDataResidesLinearSearch,getTextureIndexWhereDataResidesBinarySearch,getFetchDataFromCorrectTextureMethod,getGetSizeInConcatAxisValueFromIndexMethod,parseConcatAttributes,validateInputs3,init_concat=__esm({"web/lib/onnxjs/backends/webgl/ops/concat.ts"(){init_attribute_with_cache_key(),init_types(),init_concat_packed(),concat=(t,e,n)=>{if(validateInputs3(e),t.session.pack&&e[0].dims.length>1){return[t.run(createPackedConcatProgramInfoLoader(t,e,n),e)]}return[t.run(createUnpackedConcatProgramInfoLoader(t,e,n),e)]},createUnpackedConcatProgramMetadata=(t,e)=>({name:"Concat",inputNames:Array.from({length:t},((t,e)=>`X${e}`)),inputTypes:Array(t).fill(0),cacheHint:e}),createUnpackedConcatProgramInfo=(t,e,n,r)=>{const s=n[0].dims.slice();if(r>=s.length||r<-1*s.length)throw new Error("axis specified for concat doesn't match input dimensionality");r<0&&(r=s.length+r);const i=s.slice(0);for(let t=1;t<n.length;t++){const e=n[t].dims.slice();for(let t=0;t<s.length;t++)if(t===r)i[r]+=e[t];else if(s[t]!==e[t])throw new Error("non concat dimensions must match")}const o=i.length,a=new Array(n.length);let l=0;for(let t=0;t<a.length;++t)l+=n[t].dims[r],a[t]=l;let F="";F=n.length<5?getTextureIndexWhereDataResidesLinearSearch(a):getTextureIndexWhereDataResidesBinarySearch(a);const U=`\n        ${getFetchDataFromCorrectTextureMethod(n.length,o)}\n        ${getGetSizeInConcatAxisValueFromIndexMethod(a)}\n        ${F}\n        float process(int indices[${o}]) {\n          int textureIndex = getTextureWhereDataResides (indices[${r}]);\n\n          if(textureIndex != 0) {\n            indices[${r}] = indices[${r}] - int(getSizeInConcatAxisValueFromIndex(textureIndex-int(1)));\n          }\n\n          return fetchDataFromCorrectTexture(textureIndex, indices);\n        }`;return{...e,output:{dims:i,type:n[0].type,textureType:0},shaderSource:U}},createUnpackedConcatProgramInfoLoader=(t,e,n)=>{const r=createUnpackedConcatProgramMetadata(e.length,n.cacheKey);return{...r,get:()=>createUnpackedConcatProgramInfo(t,r,e,n.axis)}},getTextureIndexWhereDataResidesLinearSearch=t=>`int getTextureWhereDataResides(int index) {\n      ${t.map(((t,e)=>`if(index<${t}) {return ${e};}\n`)).join("")}\n    }`,getTextureIndexWhereDataResidesBinarySearch=t=>getTextureIndexWhereDataResidesLinearSearch(t),getFetchDataFromCorrectTextureMethod=(t,e)=>{const n=[`float fetchDataFromCorrectTexture(int textureIndex, int indices[${e}]) {`];for(let e=0;e<t;++e)0===e?n.push(`\tif (textureIndex == ${e}) { return _X${e}(indices); }`):e===t-1?n.push(`\telse { return _X${e}(indices); }`):n.push(`\telse if (textureIndex == ${e}) { return _X${e}(indices); }`);return n.push("\t}"),n.join("\n")},getGetSizeInConcatAxisValueFromIndexMethod=t=>{const e=["int getSizeInConcatAxisValueFromIndex(int index) {"];for(let n=0;n<t.length;++n)0===n?e.push(`\tif (index == ${n}) { return ${t[n]}; }`):n===t.length-1?e.push(`\telse { return ${t[n]}; }`):e.push(`\telse if (index == ${n}) { return ${t[n]}; }`);return e.push("\t}"),e.join("\n")},parseConcatAttributes=t=>createAttributeWithCacheKey({axis:t.attributes.getInt("axis")}),validateInputs3=t=>{if(!t||t.length<1)throw new Error("too few inputs");const e=t[0].type,n=t[0].dims.length;if("string"===e)throw new Error("string tensor is not supported yet");for(const r of t){if(r.type!==e)throw new Error("input tensors should be one type");if(r.dims.length!==n)throw new Error("input tensors should have the same shape")}}}}),createElementwiseProgramInfo,createElementwiseProgramInfoLoader,abs,acos,asin,atan,clip,parseClipAttributes,clipV11,generateClipAttributesFromInputs,ceil,cos,elu,parseEluAttributes,exp,floor,identity,leakyRelu,parseLeakyReluAttributes,log2,neg,not2,relu,sigmoid,sin,sqrt,tan,tanh;function glslAbs(){return glslBuiltinUnary("abs")}function glslAcos(){return glslBuiltinUnary("acos")}function glslAsin(){return glslBuiltinUnary("asin")}function glslAtan(){return glslBuiltinUnary("atan")}function glslCeil(){return glslBuiltinUnary("ceil")}function glslCos(){return glslBuiltinUnary("cos")}function glslElu(t){const e="elu";return{body:`\n  const float alpha = float(${t});\n\n  float ${e}_(float a) {\n    return a >= 0.0 ? a: (exp(a) - 1.0) * alpha;\n  }\n  vec4 ${e}_(vec4 v) {\n    return vec4(${e}_(v.x), ${e}_(v.y), ${e}_(v.z), ${e}_(v.w));\n  }\n  `,name:e,type:0}}function glslExp(){return glslBuiltinUnary("exp")}function glslFloor(){return glslBuiltinUnary("floor")}function glslClip(t,e){const n="clip";return{body:`\n  const float min = float(${t});\n  const float max = float(${e});\n\n  float ${n}_(float a) {\n    return clamp(a, min, max);\n  }\n  vec4 ${n}_(vec4 v) {\n    return clamp(v, min, max);\n  }\n  `,name:n,type:0}}function glslIdentity(){const t="indentity";return{body:`\n  float ${t}_(float a) {\n    return a;\n  }\n  vec4 ${t}_(vec4 v) {\n    return v;\n  }\n  `,name:t,type:0}}function glslLeakyRelu(t){const e="leakyRelu";return{body:`\n  const float alpha = float(${t});\n\n  float ${e}_(float a) {\n    return a < 0.0 ? a * alpha : a;\n  }\n  vec4 ${e}_(vec4 v) {\n    return vec4(${e}_(v.x), ${e}_(v.y), ${e}_(v.z), ${e}_(v.w));\n  }\n  `,name:e,type:0}}function glslLog(){return glslBuiltinUnary("log")}function glslNeg(){const t="neg";return{body:`\n  float ${t}_(float a) {\n    return -a;\n  }\n  vec4 ${t}_(vec4 v) {\n    return -v;\n  }\n  `,name:t,type:0}}function glslNot(){const t="not";return{body:`\n  float ${t}_(float a) {\n    return float( ! bool(a) );\n  }\n  bool ${t}_(bool a) {\n    return !a;\n  }\n  vec4 ${t}_(vec4 v) {\n    return vec4(!bool(v.x), !bool(v.y), !bool(v.z), !bool(v.w));\n  }\n  bvec4 ${t}_(bvec4 v) {\n    return bvec4(!v.x, !v.y, !v.z, !v.w);\n  }\n  `,name:t,type:0}}function glslSin(){return glslBuiltinUnary("sin")}function glslRelu(){const t="relu";return{body:`\n  float ${t}_(float a) {\n    return max( a, 0.0 );\n  }\n  vec4 ${t}_(vec4 v) {\n    return max( v, 0.0 );\n  }\n  `,name:t,type:0}}function glslSigmoid(){const t="sigmoid";return{body:`\n  float ${t}_(float a) {\n    return 1.0 / (1.0 + exp(-a));\n  }\n  vec4 ${t}_(vec4 v) {\n    return 1.0 / (1.0 + exp(-v));\n  }\n  `,name:t,type:0}}function glslSqrt(){return glslBuiltinUnary("sqrt")}function glslTan(){return glslBuiltinUnary("tan")}function glslTanh(){const t="tanh";return{body:`\n  float ${t}_(float a) {\n    a = clamp(a, -10., 10.);\n    a = exp(2.*a);\n    return (a - 1.) / (a + 1.);\n  }\n  vec4 ${t}_(vec4 v) {\n    v = clamp(v, -10., 10.);\n    v = exp(2.*v);\n    return (v - 1.) / (v + 1.);\n  }\n  `,name:t,type:0}}function glslBuiltinUnary(t){return{body:`\n  float ${t}_(float a) {\n    return ${t}(a);\n  }\n  vec4 ${t}_(vec4 v) {\n    return ${t}(v);\n  }\n  `,name:t,type:0}}var init_unary_op=__esm({"web/lib/onnxjs/backends/webgl/ops/unary-op.ts"(){init_attribute_with_cache_key(),init_util(),init_glsl_definitions(),init_glsl_source(),init_types(),createElementwiseProgramInfo=(t,e,n,r)=>{const s=t.session.pack?2:0,i=getGlsl(t.session.backend.glContext.version);return{...e,output:{dims:n.dims,type:n.type,textureType:s},shaderSource:`\n     ${r.body}\n     void main() {\n       vec4 v = ${i.texture2D}(A, TexCoords);\n       v = ${r.name}_(v);\n       ${i.output} = v;\n     }\n     `,hasMain:!0}},createElementwiseProgramInfoLoader=(t,e,n,r)=>{const s=t.session.pack?2:0,i={name:n.name,inputTypes:[s],inputNames:["A"],cacheHint:r};return{...i,get:()=>createElementwiseProgramInfo(t,i,e,n)}},abs=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslAbs()),e)],acos=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslAcos()),e)],asin=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslAsin()),e)],atan=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslAtan()),e)],clip=(t,e,n)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslClip(n.min,n.max),n.cacheKey),e)],parseClipAttributes=t=>createAttributeWithCacheKey({min:t.attributes.getFloat("min",MIN_CLIP),max:t.attributes.getFloat("max",MAX_CLIP)}),clipV11=(t,e)=>{const n=generateClipAttributesFromInputs(t,e);return clip(t,[e[0]],n)},generateClipAttributesFromInputs=(t,e)=>{if(e.length>=3&&(!t.session.isInitializer(e[1].dataId)||!t.session.isInitializer(e[2].dataId)))throw new Error("dynamic clip attributes are not allowed");const n=e.length>=3?e[1].numberData[0]:MIN_CLIP,r=e.length>=3?e[2].numberData[0]:MAX_CLIP;return createAttributeWithCacheKey({min:n,max:r})},ceil=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslCeil()),e)],cos=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslCos()),e)],elu=(t,e,n)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslElu(n.alpha),n.cacheKey),e)],parseEluAttributes=t=>createAttributeWithCacheKey({alpha:t.attributes.getFloat("alpha",1)}),exp=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslExp()),e)],floor=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslFloor()),e)],identity=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslIdentity()),e)],leakyRelu=(t,e,n)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslLeakyRelu(n.alpha),n.cacheKey),e)],parseLeakyReluAttributes=t=>createAttributeWithCacheKey({alpha:t.attributes.getFloat("alpha",.01)}),log2=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslLog()),e)],neg=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslNeg()),e)],not2=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslNot()),e)],relu=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslRelu()),e)],sigmoid=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslSigmoid()),e)],sin=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslSin()),e)],sqrt=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslSqrt()),e)],tan=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslTan()),e)],tanh=(t,e)=>[t.run(createElementwiseProgramInfoLoader(t,e[0],glslTanh()),e)]}}),parseInternalActivationAttributes;function getActivationSnippet(t){let e;switch(t.activation){case"Relu":e=glslRelu();break;case"Sigmoid":e=glslSigmoid();break;case"Clip":e=glslClip(t.clipMin,t.clipMax);break;default:return{activationFunction:"",applyActivation:""}}const n=e.name;return{activationFunction:e.body,applyActivation:`value = ${n}_(value);`}}var init_fuse_utils=__esm({"web/lib/onnxjs/backends/webgl/ops/fuse-utils.ts"(){init_util(),init_unary_op(),parseInternalActivationAttributes=t=>{const e=t.getString("activation","");if("Clip"===e){const[n,r]=t.getFloats("activation_params",[MIN_CLIP,MAX_CLIP]);return{activation:e,clipMax:r,clipMin:n,activationCacheKey:`${e}:${n},${r}`}}return{activation:e,activationCacheKey:e}}}}),createUnpackedGroupedConvProgramMetadata,createUnpackedGroupedConvProgramInfo,createUnpackedGroupedConvProgramInfoLoader,init_conv_grouped=__esm({"web/lib/onnxjs/backends/webgl/ops/conv-grouped.ts"(){init_instrument(),init_glsl_source(),init_types(),init_conv(),init_fuse_utils(),createUnpackedGroupedConvProgramMetadata=(t,e)=>({name:"GroupedConv",inputNames:t?["X","W","Bias"]:["X","W"],inputTypes:t?[0,0,0]:[0,0],cacheHint:e}),createUnpackedGroupedConvProgramInfo=(t,e,n,r)=>{const s=e.length>2?"value += getBias(output_channel);":"",i=e[0].dims.slice(),o=e[1].dims.slice(),a=o[0]/r.group;Logger.verbose("GroupedConv",`autpPad:${r.autoPad}, dilations:${r.dilations}, group:${r.group}, kernelShape:${r.kernelShape}, pads:${r.pads}, strides:${r.strides}`);const l=calculateOutputShape(i,o,r.dilations,r.pads,r.strides),F=getGlsl(t.session.backend.glContext.version),{activationFunction:U,applyActivation:c}=getActivationSnippet(r),u=`\n  const ivec2 strides = ivec2(${r.strides[0]}, ${r.strides[1]});\n  const ivec2 pads = ivec2(${r.pads[0]}, ${r.pads[1]});\n  ${U}\n  void main() {\n    ivec4 coords = getOutputCoords();\n    int batch = coords.x;\n    int output_channel = coords.y;\n    ivec2 xRCCorner = coords.zw * strides - pads;\n    int group_id = output_channel / ${a};\n\n    float value = 0.0;\n    for (int wInChannel = 0; wInChannel < ${o[1]}; wInChannel++) {\n      int input_channel = group_id * ${o[1]} + wInChannel;\n      for (int wHeight = 0; wHeight < ${o[2]}; wHeight++) {\n        int xHeight = xRCCorner.x + wHeight * ${r.dilations[0]};\n\n        if (xHeight < 0 || xHeight >= ${i[2]}) {\n          continue;\n        }\n\n        for (int wWidth = 0; wWidth < ${o[3]}; wWidth++) {\n          int xWidth = xRCCorner.y + wWidth * ${r.dilations[1]};\n          if (xWidth < 0 || xWidth >= ${i[3]}) {\n            continue;\n          }\n\n          float xVal = getX(batch, input_channel, xWidth, xHeight);\n          float wVal = getW(output_channel, wInChannel, wWidth, wHeight);\n          value += xVal*wVal;\n        }\n      }\n    }\n    ${s}\n    ${c}\n    ${F.output} = vec4(value, .0, .0, .0);\n  }\n`;return{...n,output:{dims:l,type:e[0].type,textureType:0},shaderSource:u,hasMain:!0}},createUnpackedGroupedConvProgramInfoLoader=(t,e,n)=>{const r=createUnpackedGroupedConvProgramMetadata(e.length>2,n.cacheKey);return{...r,get:()=>createUnpackedGroupedConvProgramInfo(t,e,r,n)}}}}),createPackedIm2ColProgramMetadata,createPackedIm2ColProgramInfo,createPackedIm2ColProgramInfoLoader,init_im2col_pack=__esm({"web/lib/onnxjs/backends/webgl/ops/im2col-pack.ts"(){init_glsl_source(),init_types(),init_packing_utils(),createPackedIm2ColProgramMetadata=t=>({name:"Im2Col (packed)",inputNames:["A"],inputTypes:[2],cacheHint:t}),createPackedIm2ColProgramInfo=(t,e,n,r,s,i)=>{const o=n.dims,a=r.dims,l=s.length,F=[a[1]*a[2]*a[3],s[2]*s[3]],U=a[2]*a[3],c=unpackFromChannel(),u=getGlsl(t.session.backend.glContext.version);let Q="";for(let t=0;t<=1;t++)for(let e=0;e<=1;e++)Q+=`\n            blockIndex = rc.x + ${e};\n            pos = rc.y + ${t};\n\n            if(blockIndex < ${F[1]} && pos < ${F[0]}) {\n              offsetY = int(blockIndex / (${s[l-1]})) * ${i.strides[0]} -\n                ${i.pads[0]};\n              d0 = offsetY + ${i.dilations[0]} * (imod(pos, ${U}) / ${a[2]});\n\n              if(d0 < ${o[2]} && d0 >= 0) {\n                offsetX = imod(blockIndex, ${s[l-1]}) * ${i.strides[1]} -\n                  ${i.pads[1]};\n                d1 = offsetX + ${i.dilations[1]} * imod(imod(pos, ${U}), ${a[2]});\n\n                if(d1 < ${o[3]} && d1 >= 0) {\n\n                  ch = int(float(pos)/ ${U}.);\n                    innerDims = vec2(d0, d1);\n                    result[${2*t+e}] = getChannel(\n                      getA(0, ch, int(innerDims.x),\n                      int(innerDims.y)), innerDims);\n                }\n              }\n            }\n\n          `;const d=`\n      ${c}\n\n      void main() {\n        ivec2 rc = getOutputCoords();\n          vec4 result = vec4(0.0);\n          int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n          vec2 innerDims;\n          ${Q}\n          ${u.output} = result;\n      }\n            `;return{...e,output:{dims:F,type:n.type,textureType:2},shaderSource:d,hasMain:!0}},createPackedIm2ColProgramInfoLoader=(t,e,n,r,s)=>{const i=createPackedIm2ColProgramMetadata(s.cacheKey);return{...i,get:()=>createPackedIm2ColProgramInfo(t,i,e,n,r,s)}}}}),matMul,parseMatMulAttributes,createMatmulProgramMetadata,validateInputs4;function createMatmulProgramInfo(t,e,n){const r=e[0].dims,s=e[1].dims,i=BroadcastUtil.calcShape(r,s,!0);if(!i)throw new Error("Can't use matmul on the given tensors");const o=getCoordsDataType(i.length),a=getGlChannels(),{activationFunction:l,applyActivation:F}=getActivationSnippet(n),U=e.length>2,c=U?"value += getBiasForMatmul();":"",u=U?`${getBiasForMatmul(o,a,e[2].dims,i,!1)}`:"",Q=i.length,d=r.length,B=s.length,p=`\n    ${l}\n    ${u}\n    float process(int indices[${Q}]) {\n        int a[${d}];\n        int b[${B}];\n        bcastMatmulIndices_A(indices, a);\n        bcastMatmulIndices_B(indices, b);\n\n        float value;\n        for (int k=0; k<${r[r.length-1]}; ++k) {\n            a[${d-1}] = k;\n            b[${B-2}] = k;\n            value += _A(a) * _B(b);\n        }\n        ${c}\n        ${F}\n        return value;\n    }`;return{...t,output:{dims:i,type:e[0].type,textureType:0},shaderSource:p}}function createMatmulProgramInfoLoader(t,e){const n=createMatmulProgramMetadata(t.length>2,e.activationCacheKey);return{...n,get:()=>createMatmulProgramInfo(n,t,e)}}function getBiasForMatmul(t,e,n,r,s){let i="";const o=n.length,a=r.length,l=a-o;i=a<2&&o>0?"coords":n.map(((t,n)=>`coords.${e[n+l]}`)).join(", ");const F=BroadcastUtil.getBroadcastDims(n,r).map((t=>`coords.${e[t+l]} = 0;`)).join("\n");let U="vec4(outputValue.xx, outputValue.yy)";1===ShapeUtil.size(n)&&(U="vec4(outputValue.x)");return s?`\nvec4 getBiasForMatmul() {\n  ${t} coords = getOutputCoords();\n  ${F}\n  vec4 outputValue = getBias(${i});\n  return ${U};\n}`:`\nfloat getBiasForMatmul() {\n  ${t} coords = getOutputCoords();\n  ${F}\n  return getBias(coords.x);\n}`}var init_matmul=__esm({"web/lib/onnxjs/backends/webgl/ops/matmul.ts"(){init_util(),init_types(),init_utils(),init_fuse_utils(),init_matmul_pack(),matMul=(t,e,n)=>(validateInputs4(e),t.session.pack?[t.run(createPackedMatmulProgramInfoLoader(t,e,n),e)]:[t.run(createMatmulProgramInfoLoader(e,n),e)]),parseMatMulAttributes=t=>parseInternalActivationAttributes(t.attributes),createMatmulProgramMetadata=(t,e)=>({name:"MatMul",inputNames:t?["A","B","Bias"]:["A","B"],inputTypes:t?[0,0,0]:[0,0],cacheHint:e}),validateInputs4=t=>{if(!t||2!==t.length)throw new Error("MatMul requires 2 inputs.");if(t[0].dims[t[0].dims.length-1]!==t[1].dims[t[1].dims.length-2])throw new Error("shared dimension does not match.");if("float32"!==t[0].type&&"float64"!==t[0].type||"float32"!==t[1].type&&"float64"!==t[1].type)throw new Error("inputs should be float type");if(t[0].type!==t[1].type)throw new Error("inputs types should match")}}}),createPackedMatmulProgramMetadata,createPackedMatmulProgramInfo,createPackedMatmulProgramInfoLoader;function getBcastSamplerForMatmul(t,e,n,r){let s=[],i=[];const o=n[0].dims,a=n[1].dims,l=o.length,F=a.length,U=r.length,c=U-l,u=U-F;s=o.map(((t,n)=>`coords.${e[n+c]}`)),s[l-1]="i*2",s.join(", "),i=a.map(((t,n)=>`coords.${e[n+u]}`)),i[F-2]="i*2",i.join(", ");const Q=BroadcastUtil.getBroadcastDims(o,r),d=BroadcastUtil.getBroadcastDims(a,r),B=Q.map((t=>`coords.${e[t+c]} = 0;`)).join("\n"),p=d.map((t=>`coords.${e[t+u]} = 0;`)).join("\n"),g=`int lastDim = coords.${e[U-1]};\n  coords.${e[U-1]} = coords.${e[U-2]};\n  coords.${e[U-2]} = lastDim;`;return`\nvec4 getAAtOutCoordsMatmul(int i) {\n  ${t} coords = getOutputCoords();\n  ${g}\n  ${B}\n  vec4 outputValue = getA(${s});\n  return outputValue;\n}\n\nvec4 getBAtOutCoordsMatmul(int i) {\n  ${t} coords = getOutputCoords();\n  ${g}\n  ${p}\n  vec4 outputValue = getB(${i});\n  return outputValue;\n}`}function getA(t,e){let n="";for(let r=0;r<e-2;r++)n+=`rc.${t[r]}, `;return n+=`rc.${t[e-2]}, i*2`,n}function getB(t,e){let n="";for(let r=0;r<e-2;r++)n+=`rc.${t[r]}, `;return n+=`i*2, rc.${t[e-1]}`,n}var init_matmul_pack=__esm({"web/lib/onnxjs/backends/webgl/ops/matmul-pack.ts"(){init_util(),init_glsl_source(),init_types(),init_utils(),init_fuse_utils(),init_matmul(),createPackedMatmulProgramMetadata=(t,e)=>({name:"MatMul (packed)",inputNames:t?["A","B","Bias"]:["A","B"],inputTypes:t?[2,2,2]:[2,2],cacheHint:e}),createPackedMatmulProgramInfo=(t,e,n,r)=>{const s=n.length>2,i=s?"value += getBiasForMatmul();":"",o=n[0].dims,a=n[1].dims,l=BroadcastUtil.calcShape(o,a,!0),F=!ShapeUtil.areEqual(n[0].dims,n[1].dims);if(!l)throw new Error("Can't use matmul on the given tensors");const U=o[o.length-1],c=Math.ceil(U/2),u=o.length,Q=a.length,d=getGlsl(t.session.backend.glContext.version),B=getCoordsDataType(l.length),p=l.length,g=getGlChannels(),{activationFunction:h,applyActivation:b}=getActivationSnippet(r),f=s?`${getBiasForMatmul(B,g,n[2].dims,l,!0)}`:"",m=F?`${getBcastSamplerForMatmul(B,g,n,l)}`:"",x=F?"getAAtOutCoordsMatmul(i)":`getA(${getA(g,u)})`,y=F?"getBAtOutCoordsMatmul(i)":`getB(${getB(g,Q)})`,S=`\n            ${m}\n            ${f}\n            ${h}\n            void main() {\n              ${F?"":`${B} rc =\n          getOutputCoords(); int lastDim = rc.${g[p-1]}; rc.${g[p-1]} =\n          rc.${g[p-2]}; rc.${g[p-2]} = lastDim;\n      `}\n\n              vec4 value = vec4(0);\n              for (int i = 0; i < ${c}; i++) {\n                vec4 a = ${x};\n                vec4 b = ${y};\n\n                value += (a.rrbb * b.rgrg);\n                value += (a.ggaa * b.baba);\n              }\n              ${i}\n              ${b}\n              ${d.output} = value;\n            }`;return{...e,output:{dims:l,type:n[0].type,textureType:2},shaderSource:S,hasMain:!0}},createPackedMatmulProgramInfoLoader=(t,e,n)=>{const r=createPackedMatmulProgramMetadata(e.length>2,n.activationCacheKey);return{...r,get:()=>createPackedMatmulProgramInfo(t,r,e,n)}}}}),conv2DPacked,init_conv_pack=__esm({"web/lib/onnxjs/backends/webgl/ops/conv-pack.ts"(){init_conv(),init_im2col_pack(),init_matmul_pack(),conv2DPacked=(t,e,n)=>{const r=e[0].dims,s=e[1].dims,i=calculateOutputShape(r,s,n.dilations,n.pads,n.strides),o=t.run(createPackedIm2ColProgramInfoLoader(t,e[0],e[1],i,n),[e[0]]),a=t.reshapePacked(e[1],[s[0],s[1]*s[2]*s[3]]),l=3===e.length?[a,o,e[2]]:[a,o],F=t.run(createPackedMatmulProgramInfoLoader(t,l,n),l);return t.reshapePacked(F,i)}}}),createIm2ColProgramMetadata,createIm2ColProgramInfo,createIm2ColProgramInfoLoader,calculateIm2ColDims,init_im2col=__esm({"web/lib/onnxjs/backends/webgl/ops/im2col.ts"(){init_types(),createIm2ColProgramMetadata=t=>({name:"Im2Col",inputNames:["X"],inputTypes:[0],cacheHint:t}),createIm2ColProgramInfo=(t,e,n,r,s,i)=>{const o=n.dims,a=r.dims,l=s.length,F=calculateIm2ColDims(o,a,s,4),U=`\n        const int XC = ${o[1]};\n        const int XH = ${o[2]};\n        const int XW = ${o[3]};\n        const int KH = ${i.kernelShape[0]};\n        const int KW = ${i.kernelShape[1]};\n        const int dilationH = ${i.dilations[0]};\n        const int dilationW = ${i.dilations[1]};\n        const int strideH = ${i.strides[0]};\n        const int strideW = ${i.strides[1]};\n        const int padH = ${i.pads[0]};\n        const int padW = ${i.pads[1]};\n        const int KHKW = KH*KW;\n        const int XCKHKW = XC * KHKW;\n        const int outputChannels = 4;\n        vec4 process(int indices[${l}]) {\n          int b  = indices[0]; // batch size\n          int oh = indices[1] * strideH - padH; //output height\n          int ow = indices[2] * strideW - padW; //output width\n          int p = indices[3] * outputChannels; //patch\n          vec4 value = vec4(0.0);\n          for(int i=0; i < outputChannels; ++i) {\n            if(p < XCKHKW) {\n              int patchC = p / KHKW;\n              int patchH = (p - patchC*KHKW) / KW;\n              int patchW = (p - patchC*KHKW) - patchH * KW;\n              int xh2 = oh + patchH * dilationH;\n              int xw2 = ow + patchW * dilationW;\n              int x[${o.length}];\n              x[0] = b;\n              x[1] = patchC;\n              x[2] = xh2;\n              x[3] = xw2;\n              if(xh2 >= 0 &&\n                  xh2 < XH &&\n                  xw2 >= 0 &&\n                  xw2 < XW) {\n                value[i] = _X(x);\n              }\n            }\n            ++p;\n          }\n          return value;\n        }\n        `;return{...e,output:{dims:F,type:n.type,textureType:4},shaderSource:U}},createIm2ColProgramInfoLoader=(t,e,n,r,s)=>{const i=createIm2ColProgramMetadata(s.cacheKey);return{...i,get:()=>createIm2ColProgramInfo(t,i,e,n,r,s)}},calculateIm2ColDims=(t,e,n,r=4)=>[n[0],n[2],n[3],Math.ceil(t[1]*e[2]*e[3]/r)]}}),createDotProductProgramMetadata,createDotProductProgramInfo,createDotProductProgramInfoLoader,init_dot_product=__esm({"web/lib/onnxjs/backends/webgl/ops/dot-product.ts"(){init_util(),init_glsl_source(),init_types(),init_fuse_utils(),init_im2col(),createDotProductProgramMetadata=(t,e)=>({name:"ConvDotProduct",inputNames:t?["Im2Col","K","B"]:["Im2Col","K"],inputTypes:t?[0,4,0]:[0,4],cacheKey:e.activationCacheKey}),createDotProductProgramInfo=(t,e,n,r,s)=>{const i=n[0].dims,o=n[1].dims,a=[o[0],Math.ceil(i[1]*o[2]*o[3]/4)],l=calculateIm2ColDims(i,o,r),[F,U]=t.calculateTextureWidthAndHeight(a,4),c=ShapeUtil.computeStrides(l),[u,Q]=t.calculateTextureWidthAndHeight(l,4),d=r.length,B=n.length<3?"0.0":"_B(b)",p=Math.ceil(i[1]*o[2]*o[3]/4),{activationFunction:g,applyActivation:h}=getActivationSnippet(s),b=getGlsl(t.session.backend.glContext.version),f=`\n${g}\nfloat process(int indices[${d}]) {\n  int b[1];\n  b[0] = indices[1];\n  int im2col[4];\n  im2col[0] = indices[0];\n  im2col[1] = indices[2];\n  im2col[2] = indices[3];\n  int im2colOffset = im2col[0] * ${c[0]} + im2col[1] * ${c[1]} + im2col[2] * ${c[2]};\n  int kernelOffset = indices[1] * ${a[1]};\n  float value = ${B};\n  for (int i = 0; i < ${p}; ++i) {\n    vec2 im2colCoords = offsetToCoords(im2colOffset, ${u}, ${Q});\n    vec2 kernelCoords = offsetToCoords(kernelOffset, ${F}, ${U});\n    value += dot(${b.texture2D}(Im2Col, im2colCoords), ${b.texture2D}(K, kernelCoords));\n    ++im2colOffset;\n    ++kernelOffset;\n  }\n  ${h}\n  return value;\n}`;return{...e,output:{dims:r,type:n[0].type,textureType:0},shaderSource:f}},createDotProductProgramInfoLoader=(t,e,n,r)=>{const s=createDotProductProgramMetadata(e.length>2,r);return{...s,get:()=>createDotProductProgramInfo(t,s,e,n,r)}}}}),calculateOutputShape,conv,conv2d,conv2DUnpackedPointwise,conv2DUnpacked,getAdjustedConvAttributes,parseConvAttributes,validateInputs5,init_conv=__esm({"web/lib/onnxjs/backends/webgl/ops/conv.ts"(){init_attribute_with_cache_key(),init_util(),init_conv_grouped(),init_conv_pack(),init_dot_product(),init_fuse_utils(),init_im2col(),init_matmul(),calculateOutputShape=(t,e,n,r,s)=>{const i=t[0],o=t.slice(2),a=o.length,l=e[0],F=e.slice(2).map(((t,e)=>t+(t-1)*(n[e]-1))),U=o.map(((t,e)=>t+r[e]+r[e+a])).map(((t,e)=>Math.floor((t-F[e]+s[e])/s[e])));return[i,l].concat(...U)},conv=(t,e,n)=>(validateInputs5(e,n),conv2d(t,e,n)),conv2d=(t,e,n)=>{const r=getAdjustedConvAttributes(n,e),s=t.session.pack,i=1===r.kernelShape[0]&&1===r.kernelShape[1];if(r.group>1){return[t.run(createUnpackedGroupedConvProgramInfoLoader(t,e,r),e)]}return i&&s?[conv2DUnpackedPointwise(t,e,r)]:s&&4===e[0].dims.length&&1===e[0].dims[0]&&!i?[conv2DPacked(t,e,r)]:[conv2DUnpacked(t,e,r)]},conv2DUnpackedPointwise=(t,e,n)=>{const r=e[0].dims,s=e[1].dims,i=calculateOutputShape(r,s,n.dilations,n.pads,n.strides),o=t.reshapeUnpacked(e[0],[r[1],r[2]*r[3]]),a=t.reshapeUnpacked(e[1],[s[0],s[1]]),l=e.length>2?[a,o,e[2]]:[a,o],F=t.run(createMatmulProgramInfoLoader(l,n),l);return t.reshapeUnpacked(F,i)},conv2DUnpacked=(t,e,n)=>{const r=e[0].dims,s=e[1].dims,i=calculateOutputShape(r,s,n.dilations,n.pads,n.strides),o=t.run(createIm2ColProgramInfoLoader(t,e[0],e[1],i,n),[e[0]]),a=3===e.length?[o,e[1],e[2]]:[o,e[1]];return t.run(createDotProductProgramInfoLoader(t,e,i,n),a)},getAdjustedConvAttributes=(t,e)=>{const n=t.kernelShape.slice();if(0===t.kernelShape.length)for(let t=2;t<e[1].dims.length;++t)n.push(e[1].dims[t]);const r=t.pads.slice();PoolConvUtil.adjustPadsBasedOnAutoPad(e[0].dims,t.strides,t.dilations,n,r,t.autoPad);const s=Object.assign({},t);return Object.assign(s,{kernelShape:n,pads:r,cacheKey:t.cacheKey}),s},parseConvAttributes=t=>{const e=t.attributes,n=parseInternalActivationAttributes(e),r=e.getString("auto_pad","NOTSET"),s=e.getInts("dilations",[1,1]),i=e.getInt("group",1),o=e.getInts("kernel_shape",[]),a=e.getInts("pads",[0,0,0,0]),l=e.getInts("strides",[1,1]);return createAttributeWithCacheKey({autoPad:r,dilations:s,group:i,kernelShape:o,pads:a,strides:l,...n})},validateInputs5=(t,e)=>{if(!t||2!==t.length&&3!==t.length)throw new Error("Conv requires 2 or 3 inputs");if(4!==t[0].dims.length||4!==t[1].dims.length)throw new Error("currently only support 2-dimensional conv");if(t[0].dims[1]!==t[1].dims[1]*e.group)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");if(3===t.length&&(1!==t[2].dims.length||t[1].dims[0]!==t[2].dims[0]))throw new Error("invalid bias");const n=t[0].dims.length-2;if(e.dilations.length!==n)throw new Error(`dilations should be ${n}D`);if(e.strides.length!==n)throw new Error(`strides should be ${n}D`);if(e.pads.length!==2*n)throw new Error(`pads should be ${2*n}D`);if(0!==e.kernelShape.length&&e.kernelShape.length!==t[1].dims.length-2)throw new Error("invalid kernel shape");if("float32"!==t[0].type||"float32"!==t[1].type)throw new Error("Conv input(X,W) should be float tensor");if(3===t.length&&"float32"!==t[2].type)throw new Error("Conv input(bias) should be float tensor")}}}),computeTotalPad,distributePadding,calculateOutputShapeAndPads,convTranspose,convTranspose2d,createConvTransposeProgramMetadata,createUnpackedConvTransposeProgramInfo,createUnpackedConvTransposeProgramInfoLoader,convTranspose2DUnpacked,getAdjustedConvTransposeAttributes,parseConvTransposeAttributes,validateInputs6,init_conv_transpose=__esm({"web/lib/onnxjs/backends/webgl/ops/conv-transpose.ts"(){init_attribute_with_cache_key(),init_glsl_source(),init_types(),init_fuse_utils(),computeTotalPad=(t,e,n,r,s,i)=>(t-1)*e+n+(r-1)*s+1-i,distributePadding=(t,e,n,r,s)=>{const i=Math.floor(t/2);"SAME_UPPER"===e?(n[r]=i,n[s]=t-i):"SAME_LOWER"===e&&(n[r]=t-i,n[s]=i)},calculateOutputShapeAndPads=(t,e,n,r,s,i,o,a)=>{const l=t.length-2,F=0===a.length;for(let U=0;U<l;++U){const c=F?t[U+2]*i[U]:a[U],u=computeTotalPad(t[U+2],i[U],s[U],e[U],n[U],c);distributePadding(u,r,s,U,U+l),F&&a.push(i[U]*(t[U+2]-1)+o[U]+(e[U]-1)*n[U]+1-s[U]-s[U+l])}},convTranspose=(t,e,n)=>(validateInputs6(e,n),convTranspose2d(t,e,n)),convTranspose2d=(t,e,n)=>{const r=getAdjustedConvTransposeAttributes(n,e);return[convTranspose2DUnpacked(t,e,r)]},createConvTransposeProgramMetadata=(t,e)=>({name:"ConvTranspose",inputNames:t?["X","W","B"]:["X","W"],inputTypes:t?[0,0,0]:[0,0],cacheHint:e}),createUnpackedConvTransposeProgramInfo=(t,e,n,r)=>{const s=e.length>2?"getB(output_channel)":"0.0",i=e[0].dims,o=e[1].dims,a=o[1],l=o[0]/r.group,F=[e[0].dims[0],e[1].dims[1]*r.group,...r.outputShape],U=getGlsl(t.session.backend.glContext.version),{activationFunction:c,applyActivation:u}=getActivationSnippet(r),Q=`\n  const ivec2 strides = ivec2(${r.strides[0]}, ${r.strides[1]});\n  const ivec2 pads = ivec2(${r.pads[0]}, ${r.pads[1]});\n  ${c}\n  void main() {\n    ivec4 coords = getOutputCoords();\n    int batch = coords.x;\n    int output_channel = coords.y;\n\n    ivec2 loc = coords.zw + pads;\n\n    int group_id = output_channel / ${a};\n    int wOutChannel = output_channel - group_id * ${a};\n\n    float value = ${s};\n    for (int inChannelOffset = 0; inChannelOffset < ${l}; inChannelOffset++) {\n      int input_channel = group_id * ${l} + inChannelOffset;\n      for (int wWOff = 0; wWOff < ${o[2]}; wWOff++) {\n        for (int wHOff = 0; wHOff < ${o[3]}; wHOff++) {\n          ivec2 wOff = ivec2(wWOff * ${r.dilations[0]}, wHOff * ${r.dilations[1]});\n          ivec2 wLoc = loc - wOff;\n          ivec2 wLocIn = wLoc / strides;\n          if (\n            wLocIn * strides == wLoc &&\n            wLocIn.x >= 0 && wLocIn.x < ${i[2]} &&\n            wLocIn.y >= 0 && wLocIn.y < ${i[3]}\n          ) {\n            float xVal = getX(batch, input_channel, wLocIn.y, wLocIn.x);\n            float wVal = getW(input_channel, wOutChannel, wHOff, wWOff);\n            value += xVal * wVal;\n          }\n        }\n      }\n    }\n    ${u}\n    ${U.output} = vec4(value, .0, .0, .0);\n  }\n`;return{...n,output:{dims:F,type:e[0].type,textureType:0},shaderSource:Q,hasMain:!0}},createUnpackedConvTransposeProgramInfoLoader=(t,e,n)=>{const r=createConvTransposeProgramMetadata(e.length>2,n.cacheKey);return{...r,get:()=>createUnpackedConvTransposeProgramInfo(t,e,r,n)}},convTranspose2DUnpacked=(t,e,n)=>t.run(createUnpackedConvTransposeProgramInfoLoader(t,e,n),e),getAdjustedConvTransposeAttributes=(t,e)=>{const n=t.kernelShape.slice();if(0===t.kernelShape.length)for(let t=2;t<e[1].dims.length;++t)n.push(e[1].dims[t]);const r=t.pads.slice(),s=t.outputShape.slice(),i=e[0].dims;calculateOutputShapeAndPads(i,n,t.dilations,t.autoPad,r,t.strides,t.outputPadding,s);const o=Object.assign({},t);return Object.assign(o,{kernelShape:n,pads:r,outputShape:s,cacheKey:t.cacheKey}),o},parseConvTransposeAttributes=t=>{const e=t.attributes,n=parseInternalActivationAttributes(e),r=e.getString("auto_pad","NOTSET"),s=e.getInts("dilations",[1,1]),i=e.getInt("group",1),o=e.getInts("kernel_shape",[]),a=e.getInts("output_padding",[0,0]),l=e.getInts("output_shape",[]),F=e.getInts("pads",[0,0,0,0]),U=e.getInts("strides",[1,1]);return createAttributeWithCacheKey({autoPad:r,dilations:s,group:i,kernelShape:o,outputPadding:a,outputShape:l,pads:F,strides:U,...n})},validateInputs6=(t,e)=>{if(!t||2!==t.length&&3!==t.length)throw new Error("Conv requires 2 or 3 inputs");if(4!==t[0].dims.length||4!==t[1].dims.length)throw new Error("currently only support 2-dimensional conv");if(t[0].dims[1]!==t[1].dims[0])throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");const n=t[1].dims[1]*e.group;if(3===t.length&&(1!==t[2].dims.length||t[2].dims[0]!==n))throw new Error("invalid bias");const r=t[0].dims.length-2;if(e.dilations.length!==r)throw new Error(`dilations should be ${r}D`);if(e.strides.length!==r)throw new Error(`strides should be ${r}D`);if(e.pads.length!==2*r)throw new Error(`pads should be ${2*r}D`);if(e.outputPadding.length!==r)throw new Error(`output_padding should be ${r}D`);if(0!==e.kernelShape.length&&e.kernelShape.length!==t[1].dims.length-2)throw new Error("invalid kernel shape");if(0!==e.outputShape.length&&e.outputShape.length!==t[0].dims.length-2)throw new Error("invalid output shape");if("float32"!==t[0].type||"float32"!==t[1].type)throw new Error("ConvTranspose input(X,W) should be float tensor");if(3===t.length&&"float32"!==t[2].type)throw new Error("ConvTranspose input(bias) should be float tensor")}}}),transposeProgramMetadata,transpose,parseTransposeAttributes,createTransposeProgramInfo,getAdjustedPerm,getOutputShape,getPermFunctionBody,validateInputs7,init_transpose=__esm({"web/lib/onnxjs/backends/webgl/ops/transpose.ts"(){init_attribute_with_cache_key(),init_util(),init_types(),transposeProgramMetadata={name:"Transpose",inputNames:["A"],inputTypes:[0]},transpose=(t,e,n)=>{validateInputs7(e);return[t.run({...transposeProgramMetadata,cacheHint:n.cacheKey,get:()=>createTransposeProgramInfo(t,e[0],n.perm)},e)]},parseTransposeAttributes=t=>createAttributeWithCacheKey({perm:t.attributes.getInts("perm",[])}),createTransposeProgramInfo=(t,e,n)=>{const r=e.dims;n=getAdjustedPerm(r,n);const s=getOutputShape(r,n),i=r.length,o=`\n      ${getPermFunctionBody("perm",n,i)}\n      float process(int indices[${i}]) {\n        int a[${i}];\n        perm(a, indices);\n        return _A(a);\n      }`;return{...transposeProgramMetadata,output:{dims:s,type:e.type,textureType:0},shaderSource:o}},getAdjustedPerm=(t,e)=>(e&&e.length!==t.length&&(e=[...t.keys()].reverse()),e),getOutputShape=(t,e)=>(e=getAdjustedPerm(t,e),ShapeUtil.sortBasedOnPerm(t,e)),getPermFunctionBody=(t,e,n)=>{const r=[];r.push(`void ${t}(out int a[${n}], int src[${n}]) {`);for(let t=0;t<n;++t)r.push(`\ta[${e[t]}]=src[${t}];`);return r.push("\t}"),r.join("\n")},validateInputs7=t=>{if(!t||1!==t.length)throw new Error("Transpose requires 1 input.");if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("input should be float tensor")}}}),depthToSpace,parseDepthToSpaceAttributes,validateInputs8,init_depth_to_space=__esm({"web/lib/onnxjs/backends/webgl/ops/depth-to-space.ts"(){init_transpose(),depthToSpace=(t,e,n)=>{validateInputs8(e);const r=n.blocksize,s=r*r,i="DCR"===n.mode?[0,3,4,1,5,2]:[0,1,4,2,5,3],o="DCR"===n.mode?[e[0].dims[0],r,r,e[0].dims[1]/s,e[0].dims[2],e[0].dims[3]]:[e[0].dims[0],e[0].dims[1]/s,r,r,e[0].dims[2],e[0].dims[3]],a=t.reshapeUnpacked(e[0],o),l={perm:i,cacheKey:`${i}`},[F]=transpose(t,[a],l),U=[e[0].dims[0],e[0].dims[1]/s,e[0].dims[2]*r,e[0].dims[3]*r];return[t.reshapeUnpacked(F,U)]},parseDepthToSpaceAttributes=t=>{const e=t.attributes.getInt("blocksize");if(e<1)throw new Error(`blocksize must be >= 1, but got : ${e} for DepthToSpace`);const n=t.attributes.getString("mode","DCR");if("DCR"!==n&&"CRD"!==n)throw new Error(`unrecognized mode: ${n} for DepthToSpace`);return{mode:n,blocksize:e}},validateInputs8=t=>{if(1!==t.length)throw new Error(`DepthToSpace expect 1 inputs, but got ${t.length}`);if("string"===t[0].type||4!==t[0].dims.length)throw new TypeError("DepthToSpace input should be a 4-D numeric tensor")}}}),flatten,parseFlattenAttributes,validateInputs9,init_flatten=__esm({"web/lib/onnxjs/backends/webgl/ops/flatten.ts"(){init_util(),flatten=(t,e,n)=>{validateInputs9(e,n);const r=ShapeUtil.flattenShape(e[0].dims,n);return[t.reshapeUnpacked(e[0],r)]},parseFlattenAttributes=t=>t.attributes.getInt("axis",1),validateInputs9=(t,e)=>{if(!t||1!==t.length)throw new Error("Flatten requires 1 input.");const n=t[0].dims.length;if(0===n)throw new Error("scalar tensor is not supported.");if(e<-n||e>n)throw new Error("Invalid axis");if("string"===t[0].type)throw new Error("string tensor is not supported.")}}}),NUMBER_TYPES,init_operators=__esm({"web/lib/onnxjs/operators.ts"(){NUMBER_TYPES=["float32","float64","int32","int16","int8","uint16","uint32","uint8"]}}),gather,parseGatherAttributes,gatherProgramMetadata,createGatherProgramInfo,createGatherProgramInfoLoader,validateInputs10,init_gather=__esm({"web/lib/onnxjs/backends/webgl/ops/gather.ts"(){init_attribute_with_cache_key(),init_operators(),init_util(),init_types(),gather=(t,e,n)=>{validateInputs10(e,n.axis);return[t.run(createGatherProgramInfoLoader(t,e,n),e)]},parseGatherAttributes=t=>createAttributeWithCacheKey({axis:t.attributes.getInt("axis",0)}),gatherProgramMetadata={name:"Gather",inputNames:["A","B"],inputTypes:[0,0]},createGatherProgramInfo=(t,e,n,r)=>{const s=n[0].dims.slice(),i=n[1].dims.slice(),o=new Array(s.length+i.length-1);r=ShapeUtil.normalizeAxis(r,s.length);const a=[];for(let t=0;t<o.length;t++)t<r?(o[t]=s[t],a.push(`inputIdx[${t}] = outputIdx[${t}];`)):t<r+i.length?(o[t]=i[t-r],a.push(`indexDataIdx[${t-r}] = outputIdx[${t}];`)):(o[t]=s[t-i.length+1],a.push(`inputIdx[${t-i.length+1}] = outputIdx[${t}];`));const l=`\n      float process(int outputIdx[${o.length||1}]) {\n        int inputIdx[${s.length}];\n        int indexDataIdx[${i.length||1}];\n        indexDataIdx[0] = 0;\n        ${a.join("\n        ")}\n        int idx = int(_B(indexDataIdx));\n        inputIdx[${r}] = idx < 0 ? idx + ${s[r]} : idx;\n        return _A(inputIdx);\n      }`;return{...e,output:{dims:o,type:n[0].type,textureType:0},shaderSource:l}},createGatherProgramInfoLoader=(t,e,n)=>{const r={...gatherProgramMetadata,cacheHint:n.cacheKey};return{...r,get:()=>createGatherProgramInfo(t,r,e,n.axis)}},validateInputs10=(t,e)=>{if(!t||2!==t.length)throw new Error("Gather requires 2 inputs.");const n=t[0].dims.length;if(n<1)throw new Error("Invalid input shape.");if(e<-n||e>n-1)throw new Error("Invalid axis.");if(-1===NUMBER_TYPES.indexOf(t[0].type))throw new Error("Invaid input type.");if("int32"!==t[1].type&&"int16"!==t[1].type)throw new Error("Invaid input type.")}}}),gemm,parseGemmAttributes,parseGemmAttributesV7,parseGemmAttributesV11,createGemmProgramInfoLoader,createGemmProgramInfo,validateInputs11,init_gemm=__esm({"web/lib/onnxjs/backends/webgl/ops/gemm.ts"(){init_attribute_with_cache_key(),init_util(),init_types(),gemm=(t,e,n)=>{validateInputs11(e,n);return[t.run(createGemmProgramInfoLoader(e,n),e)]},parseGemmAttributes=(t,e)=>{const n=0!==t.attributes.getInt("transA",0),r=0!==t.attributes.getInt("transB",0),s=t.attributes.getFloat("alpha",1),i=t.attributes.getFloat("beta",1);return createAttributeWithCacheKey({transA:n,transB:r,alpha:s,beta:i,isOptionalC:e})},parseGemmAttributesV7=t=>parseGemmAttributes(t,!1),parseGemmAttributesV11=t=>parseGemmAttributes(t,!0),createGemmProgramInfoLoader=(t,e)=>{const n={name:"Gemm",inputNames:3===t.length?["A","B","C"]:["A","B"],inputTypes:3===t.length?[0,0,0]:[0,0],key:e.cacheKey};return{...n,get:()=>createGemmProgramInfo(n,t,e)}},createGemmProgramInfo=(t,e,n)=>{const r=e[0].dims.slice(),s=e[1].dims.slice(),[i,o]=GemmUtil.getShapeOfGemmResult(r,n.transA,s,n.transB,3===e.length?e[2].dims:void 0),a=[i,o];if(!a)throw new Error("Can't use gemm on the given tensors");let l=r[r.length-1],F="";n.transA&&(l=r[0]),n.transA&&n.transB?F="value += _A_T(a) * _B_T(b);":n.transA&&!n.transB?F="value += _A_T(a) * _B(b);":!n.transA&&n.transB?F="value += _A(a) * _B_T(b);":n.transA||n.transB||(F="value += _A(a) * _B(b);");const U=a.length,c=`\n      float process(int indices[${U}]) {\n          int a[${U}];\n          int b[${U}];\n          ${3===e.length?`int c[${e[2].dims.length}];`:""}\n\n          copyVec(indices, a);\n          copyVec(indices, b);\n          ${3===e.length?"bcastIndices_C(indices, c);":""}\n\n          float value = 0.0;\n          for (int k=0; k<${l}; ++k) {\n              a[${U-1}] = k;\n              b[${U-2}] = k;\n              ${F}\n          }\n\n          value = value * alpha;\n          ${3===e.length?"value += beta * _C(c);":""}\n          return value;\n      }`;return{...t,output:{dims:a,type:e[0].type,textureType:0},variables:[{name:"alpha",type:"float",data:n.alpha},{name:"beta",type:"float",data:n.beta}],shaderSource:c}},validateInputs11=(t,e)=>{if(!t)throw new Error("Input is missing");if(e.isOptionalC&&(t.length<2||t.length>3))throw new Error("Invaid input shape.");if(!e.isOptionalC&&3!==t.length)throw new Error("Gemm requires 3 inputs");if(3===t.length&&1!==t[2].dims.length&&2!==t[2].dims.length)throw new Error("Invalid input shape of C");if("float32"!==t[0].type&&"float64"!==t[0].type||"float32"!==t[1].type&&"float64"!==t[1].type||3===t.length&&"float32"!==t[2].type&&"float64"!==t[2].type)throw new Error("Invalid input type.");if(t[0].type!==t[1].type||3===t.length&&t[0].type!==t[2].type)throw new Error("Input types are mismatched")}}}),imageScaler,parseImageScalerAttributes,imageScalerProgramMetadata,createImageScalerProgramInfo,createImageScalerProgramInfoLoader,createGetBiasMethod,validateInputs12,init_image_scaler=__esm({"web/lib/onnxjs/backends/webgl/ops/image-scaler.ts"(){init_attribute_with_cache_key(),init_types(),imageScaler=(t,e,n)=>{validateInputs12(e);return[t.run(createImageScalerProgramInfoLoader(t,e,n),e)]},parseImageScalerAttributes=t=>{const e=t.attributes.getFloat("scale"),n=t.attributes.getFloats("bias");return createAttributeWithCacheKey({scale:e,bias:n})},imageScalerProgramMetadata={name:"ImageScaler",inputNames:["X"],inputTypes:[0]},createImageScalerProgramInfo=(t,e,n,r)=>{const s=n[0].dims.slice(),i=s.length,o=`\n      ${createGetBiasMethod(r.bias.length)}\n      float process(int indices[${i}]) {\n        return _X(indices) * scale + getBias(bias, indices[1]);\n      }`;return{...e,output:{dims:s,type:n[0].type,textureType:0},variables:[{name:"bias",type:"float",arrayLength:r.bias.length,data:r.bias},{name:"scale",type:"float",data:r.scale}],shaderSource:o}},createImageScalerProgramInfoLoader=(t,e,n)=>{const r={...imageScalerProgramMetadata,cacheHint:n.cacheKey};return{...r,get:()=>createImageScalerProgramInfo(t,r,e,n)}},createGetBiasMethod=t=>{const e=[`float getBias(float bias[${t}], int channel) {`];for(let n=0;n<t;++n)0===n?e.push(`\tif (channel == ${n}) { return bias[${n}]; }`):n===t-1?e.push(`\telse { return bias[${n}]; }`):e.push(`\telse if (channel == ${n}) { return bias[${n}]; }`);return e.push("\t}"),e.join("\n")},validateInputs12=t=>{if(!t||1!==t.length)throw new Error("ImageScaler requires 1 input.");if(4!==t[0].dims.length)throw new Error("Invalid input shape.");if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("Invalid input type.")}}}),instanceNormalization,parseInstanceNormalizationAttributes,meanAndVarianceProgramMetadata,createMeanAndVarianceProgramInfo,createMeanAndVarianceProgramInfoLoader,computeOutputProgramMetadata,createComputeOutputProgramInfo,createComputeOutputProgramInfoLoader,validateInputs13,init_instance_normalization=__esm({"web/lib/onnxjs/backends/webgl/ops/instance-normalization.ts"(){init_glsl_source(),init_types(),instanceNormalization=(t,e,n)=>{validateInputs13(e);const r=t.run(createMeanAndVarianceProgramInfoLoader(e[0]),e);return[t.run(createComputeOutputProgramInfoLoader(t,e[0],n,r.dims),[e[0],r,e[1],e[2]])]},parseInstanceNormalizationAttributes=t=>t.attributes.getFloat("epsilon",1e-5),meanAndVarianceProgramMetadata={name:"InstanceNormalization_MeanAndVariance",inputNames:["X"],inputTypes:[0]},createMeanAndVarianceProgramInfo=(t,e)=>{const n=e.dims.slice(),r=n[1],s=n[2]*n[3],i=[n[0],r],o=`\n      vec4 process(int[2] indices) {\n        vec4 v = vec4(0.0);\n        int a[4];\n        a[0] = indices[0];\n        a[1] = indices[1];\n        float temp = 0.0;\n        for(int a2=0; a2<${n[2]}; a2++) {\n          a[2] = a2;\n          for(int a3=0; a3<${n[3]}; a3++) {\n            a[3] = a3;\n            float x = _X(a);\n            temp += x;\n          }\n        }\n        float mean = temp / float(${s});\n        temp = 0.0;\n        for(int a2=0; a2<${n[2]}; a2++) {\n          a[2] = a2;\n          for(int a3=0; a3<${n[3]}; a3++) {\n            a[3] = a3;\n            float x = _X(a);\n            temp += (x - mean) * (x - mean);\n          }\n        }\n        v.r = mean;\n        v.g = temp / float(${s});\n\n        return v;\n      }`;return{...t,output:{dims:i,type:e.type,textureType:4},shaderSource:o}},createMeanAndVarianceProgramInfoLoader=t=>({...meanAndVarianceProgramMetadata,get:()=>createMeanAndVarianceProgramInfo(meanAndVarianceProgramMetadata,t)}),computeOutputProgramMetadata={name:"InstanceNormalization_ComputeOutput",inputNames:["X","MeanAndVariance","Scale","B"],inputTypes:[0,4,0,0]},createComputeOutputProgramInfo=(t,e,n,r,s)=>{const i=getGlsl(t.session.backend.glContext.version),[o,a]=t.calculateTextureWidthAndHeight(s,4),[l,F]=[o/4,a],U=`\n      vec4 get_MeanAndVariance(int[2] mv) {\n        int offset = indicesToOffset_MeanAndVariance(mv);\n        vec2 coords = offsetToCoords(offset, ${l}, ${F});\n        return ${i.texture2D}(MeanAndVariance, coords);\n      }\n\n      float process(int[4] indices) {\n        int mv[2];\n        mv[0] = indices[0];\n        mv[1] = indices[1];\n        vec4 mean_and_variance = get_MeanAndVariance(mv);\n        float mean = mean_and_variance.r;\n        float variance = mean_and_variance.g;\n\n        int sb[1];\n        sb[0] = indices[1];\n        float scale = _Scale(sb);\n        float b = _B(sb);\n\n        return scale * (_X(indices) - mean) / sqrt(variance + epsilon) + b;\n      }`;return{...e,output:{dims:n.dims,type:n.type,textureType:0},variables:[{name:"epsilon",type:"float",data:r}],shaderSource:U}},createComputeOutputProgramInfoLoader=(t,e,n,r)=>{const s={...computeOutputProgramMetadata,cacheHint:`${n}`};return{...s,get:()=>createComputeOutputProgramInfo(t,s,e,n,r)}},validateInputs13=t=>{if(!t||3!==t.length)throw new Error("InstanceNormalization requires 3 inputs.");const e=t[0],n=t[1],r=t[2];if(e.dims.length<3||1!==n.dims.length||1!==r.dims.length)throw new Error("Invalid input shape.");if(n.dims[0]!==e.dims[1]||r.dims[0]!==e.dims[1])throw new Error("Input shapes are mismatched.");if("float32"!==e.type&&"float64"!==e.type||"float32"!==n.type&&"float64"!==n.type||"float32"!==r.type&&"float64"!==r.type)throw new Error("Invalid input type.");if(4!==t[0].dims.length)throw new Error("Only support 4-D input shape.")}}}),lrn,parseLrnAttributes,lrnProgramMetadata,validateInputs14;function createLrnProgramInfo(t,e){const n=t[0].dims[1],r=t[0].dims.length,s=-Math.floor((e.size-1)/2),i=Math.ceil((e.size-1)/2),o=`float(${e.alpha}) / float(${e.size})`,a=`\n    float process(int indices[${r}]) {\n        int c = indices[1];\n        float x = _X(indices);\n        float square_sum = 0.0;\n\n        for (int i = ${s}; i <= ${i}; i++) {\n          int idx = c + i;\n          if (c >= 0 && c < ${n}) {\n            indices[1] = idx;\n            float j = _X(indices);\n            square_sum += j * j;\n          }\n        }\n        return x / pow(${`float(${e.bias})`} + ${o} * square_sum, ${`float(${e.beta})`});\n    }`;return{...lrnProgramMetadata,cacheHint:e.cacheKey,output:{dims:t[0].dims,type:t[0].type,textureType:0},shaderSource:a}}function createLrnProgramInfoLoader(t,e){return{...lrnProgramMetadata,cacheHint:e.cacheKey,get:()=>createLrnProgramInfo(t,e)}}var init_lrn=__esm({"web/lib/onnxjs/backends/webgl/ops/lrn.ts"(){init_attribute_with_cache_key(),init_types(),lrn=(t,e,n)=>(validateInputs14(e),[t.run(createLrnProgramInfoLoader(e,n),e)]),parseLrnAttributes=t=>{const e=t.attributes.getFloat("alpha",1e-4),n=t.attributes.getFloat("beta",.75),r=t.attributes.getFloat("bias",1),s=t.attributes.getInt("size");return createAttributeWithCacheKey({alpha:e,beta:n,bias:r,size:s})},lrnProgramMetadata={name:"LRN",inputNames:["X"],inputTypes:[0]},validateInputs14=t=>{if(!t||1!==t.length)throw new Error("LRN requires 1 input.");if(4!==t[0].dims.length)throw new Error('currently only support LRN for input with "NCHW" format');if("float32"!==t[0].type)throw new Error("input should be float type")}}}),padProgramMetadata,padV2,parsePadAttributesV2,padV11,parsePadAttributesV11,generatePadAttributesFromInputs,createPadProgramInfo,validateInputsV2,validateInputsV11,getPadFunction,getPadConstant,getPadReflect,getPadEdge,init_pad=__esm({"web/lib/onnxjs/backends/webgl/ops/pad.ts"(){init_attribute_with_cache_key(),init_util(),init_glsl_source(),init_types(),padProgramMetadata={name:"Pad",inputNames:["A"],inputTypes:[0]},padV2=(t,e,n)=>{validateInputsV2(e);return[t.run({...padProgramMetadata,cacheHint:n.cacheKey,get:()=>createPadProgramInfo(t,e[0],n)},e)]},parsePadAttributesV2=t=>{const e=t.attributes.getString("mode","constant"),n=t.attributes.getFloat("value",0),r=t.attributes.getInts("pads");return createAttributeWithCacheKey({mode:e,value:n,pads:r})},padV11=(t,e,n)=>{validateInputsV11(e);const r=generatePadAttributesFromInputs(t,e,n);return padV2(t,[e[0]],r)},parsePadAttributesV11=t=>t.attributes.getString("mode","constant"),generatePadAttributesFromInputs=(t,e,n)=>{if(!t.session.isInitializer(e[1].dataId)||e.length>=3&&!t.session.isInitializer(e[2].dataId))throw new Error("dynamic pad attributes are not allowed");const r=Array.from(e[1].integerData),s=e.length>=3?e[2].floatData[0]:0;return createAttributeWithCacheKey({mode:n,pads:r,value:s})},createPadProgramInfo=(t,e,n)=>{const r=ShapeUtil.padShape(e.dims.slice(),n.pads),s=r.length,i=`\n      ${getPadFunction(t,e,n)}\n      float process(int[${s}] indices) {\n          return padA(indices);\n      }`;return{name:"Pad",inputNames:["A"],inputTypes:[0],output:{dims:r,type:e.type,textureType:0},shaderSource:i}},validateInputsV2=t=>{if(!t||1!==t.length)throw new Error("Pad requires 1 input");if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("Invalid input type.")},validateInputsV11=t=>{if(!t||2!==t.length&&3!==t.length)throw new Error("Pad requires 2 or 3 inputs");if("int32"!==t[1].type)throw new Error("Invalid input type.");if(t.length>=3&&"string"===t[2].type)throw new Error("Invalid input type.")},getPadFunction=(t,e,n)=>{const r=getGlsl(t.session.backend.glContext.version),[s,i]=t.calculateTextureWidthAndHeight(e.dims,0),o=ShapeUtil.computeStrides(e.dims);switch(n.mode){case"constant":return getPadConstant(r,e.dims,o,s,i,n.pads,n.value);case"reflect":return getPadReflect(r,e.dims,o,s,i,n.pads);case"edge":return getPadEdge(r,e.dims,o,s,i,n.pads);default:throw new Error("Invalid mode")}},getPadConstant=(t,e,n,r,s,i,o)=>{const a=e.length;let l="";for(let t=a-1;t>=0;--t)l+=`\n        k = m[${t}] - ${i[t]};\n        if (k < 0)  return constant;\n        if (k >= ${e[t]}) return constant;\n        offset += k * ${n[t]};\n        `;return`\n      float padA(int m[${a}]) {\n        const float constant = float(${o});\n        int offset = 0;\n        int k = 0;\n        ${l}\n        vec2 coords = offsetToCoords(offset, ${r}, ${s});\n        float value = getColorAsFloat(${t.texture2D}(A, coords));\n        return value;\n      }\n      `},getPadReflect=(t,e,n,r,s,i)=>{const o=e.length;let a="";for(let t=o-1;t>=0;--t)a+=`\n        k = m[${t}] - ${i[t]};\n        if (k < 0) { k = -k; }\n        {\n          const int _2n_1 = ${2*(e[t]-1)};\n          k = int( mod( float(k), float(_2n_1) ) ) ;\n          if(k >= ${e[t]}) { k = _2n_1 - k; }\n        }\n        offset += k * ${n[t]};\n        `;return`\n      float padA(int m[${o}]) {\n        int offset = 0;\n        int k = 0;\n        ${a}\n        vec2 coords = offsetToCoords(offset, ${r}, ${s});\n        float value = getColorAsFloat(${t.texture2D}(A, coords));\n        return value;\n      }\n      `},getPadEdge=(t,e,n,r,s,i)=>{const o=e.length;let a="";for(let t=o-1;t>=0;--t)a+=`\n        k = m[${t}] - ${i[t]};\n        if (k < 0)  k = 0;\n        if (k >= ${e[t]}) k = ${e[t]-1};\n        offset += k * ${n[t]};\n      `;return`\n      float padA(int m[${o}]) {\n        int offset = 0;\n        int k = 0;\n        ${a}\n        vec2 coords = offsetToCoords(offset, ${r}, ${s});\n        float value = getColorAsFloat(${t.texture2D}(A, coords));\n        return value;\n      }\n      `}}}),averagePool,parseAveragePoolAttributes,createAveragePoolProgramInfo,globalAveragePool,parseGlobalAveragePoolAttributes,maxPool,parseMaxPoolAttributes,createMaxPoolProgramInfo,getAdjustedPoolAttributesAndOutputShape,globalMaxPoolAttributes,globalMaxPoolMetadata,globalMaxPool,validateInputs15,generatePoolingCode,copyArray,offsetToIndices,init_pool=__esm({"web/lib/onnxjs/backends/webgl/ops/pool.ts"(){init_attribute_with_cache_key(),init_util(),init_types(),averagePool=(t,e,n)=>{validateInputs15(e);const r={name:"AveragePool",inputNames:["X"],inputTypes:[0],cacheHint:n.cacheKey};return[t.run({...r,get:()=>createAveragePoolProgramInfo(e,r,!1,n)},e)]},parseAveragePoolAttributes=t=>{const e=t.attributes.getString("auto_pad","NOTSET"),n=t.attributes.getInt("ceil_mode",0),r=0!==t.attributes.getInt("count_include_pad",0),s=t.attributes.getInts("kernel_shape"),i=t.attributes.getInts("strides",[]),o=t.attributes.getInts("pads",[]);if(0!==n)throw new Error("using ceil() in shape computation is not yet supported for AveragePool");return createAttributeWithCacheKey({autoPad:e,ceilMode:n,countIncludePad:r,kernelShape:s,strides:i,pads:o})},createAveragePoolProgramInfo=(t,e,n,r)=>{const[s,i]=getAdjustedPoolAttributesAndOutputShape(t,r,n),o=ShapeUtil.size(s.kernelShape);let a="";s.countIncludePad?a+=`value /= float(${o});`:a+=`value /= float(${o} - pad);`;const l=`\n        ${generatePoolingCode(t[0].dims,s,"value += _X(x);",a,"0.0")}\n      `;return{...e,output:{dims:i,type:t[0].type,textureType:0},shaderSource:l}},globalAveragePool=(t,e,n)=>{validateInputs15(e);const r={name:"GlobalAveragePool",inputNames:["X"],inputTypes:[0],cacheHint:`${n.countIncludePad}`};return[t.run({...r,get:()=>createAveragePoolProgramInfo(e,r,!0,n)},e)]},parseGlobalAveragePoolAttributes=t=>{const e=0!==t.attributes.getInt("count_include_pad",0);return createAttributeWithCacheKey({autoPad:"",ceilMode:0,countIncludePad:e,kernelShape:[],strides:[],pads:[]})},maxPool=(t,e,n)=>{validateInputs15(e);const r={name:"MaxPool",inputNames:["X"],inputTypes:[0],cacheHint:n.cacheKey};return[t.run({...r,get:()=>createMaxPoolProgramInfo(e,r,!1,n)},e)]},parseMaxPoolAttributes=t=>{const e=t.attributes.getString("auto_pad","NOTSET"),n=t.attributes.getInt("ceil_mode",0),r=t.attributes.getInts("kernel_shape"),s=t.attributes.getInts("strides",[]),i=t.attributes.getInts("pads",[]),o=t.attributes.getInt("storage_order",0),a=t.attributes.getInts("dilations",[]);if(0!==o)throw new Error("column major storage order is not yet supported for MaxPool");if(0!==n)throw new Error("using ceil() in shape computation is not yet supported for MaxPool");return createAttributeWithCacheKey({autoPad:e,ceilMode:n,countIncludePad:!1,kernelShape:r,strides:s,pads:i,storageOrder:o,dilations:a})},createMaxPoolProgramInfo=(t,e,n,r)=>{const[s,i]=getAdjustedPoolAttributesAndOutputShape(t,r,n),o=`\n      ${generatePoolingCode(t[0].dims,s,"\n      value = max(_X(x), value);\n    ","","-1e5")}\n    `;return{...e,output:{dims:i,type:t[0].type,textureType:0},shaderSource:o}},getAdjustedPoolAttributesAndOutputShape=(t,e,n)=>{const r=t[0].dims.slice(),s=Object.hasOwnProperty.call(e,"dilations"),i=e.kernelShape.slice(),o=e.strides.slice(),a=s?e.dilations.slice():[],l=e.pads.slice();PoolConvUtil.adjustPoolAttributes(n,r,i,o,a,l);const F=PoolConvUtil.computePoolOutputShape(n,r,o,a,i,l,e.autoPad),U=Object.assign({},e);return s?Object.assign(U,{kernelShape:i,strides:o,pads:l,dilations:a,cacheKey:e.cacheKey}):Object.assign(U,{kernelShape:i,strides:o,pads:l,cacheKey:e.cacheKey}),[U,F]},globalMaxPoolAttributes={autoPad:"",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[],cacheKey:""},globalMaxPoolMetadata={name:"GlobalMaxPool",inputNames:["X"],inputTypes:[0]},globalMaxPool=(t,e)=>{validateInputs15(e);return[t.run({...globalMaxPoolMetadata,get:()=>createMaxPoolProgramInfo(e,globalMaxPoolMetadata,!0,globalMaxPoolAttributes)},e)]},validateInputs15=t=>{if(!t||1!==t.length)throw new Error("Pool ops requires 1 input.");if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("Invalid input type.")},generatePoolingCode=(t,e,n,r,s)=>{const i=t.length;if(e.kernelShape.length<=2){const o=e.kernelShape[e.kernelShape.length-1],a=e.strides[e.strides.length-1],l=e.pads[e.pads.length/2-1],F=e.pads[e.pads.length-1],U=t[i-1];let c="",u="",Q="";if(c=l+F!==0?`\n          for (int i = 0; i < ${o}; i++) {\n            x[${i} - 1] = indices[${i} - 1] * ${a} - ${l} + i;\n            if (x[${i} - 1] < 0 || x[${i} - 1] >= ${U}) {\n              pad++;\n              continue;\n            }\n            ${n}\n          }`:`\n          for (int i = 0; i < ${o}; i++) {\n            x[${i} - 1] = indices[${i} - 1] * ${a} - ${l} + i;\n            ${n}\n          }`,2===e.kernelShape.length){const n=e.kernelShape[e.kernelShape.length-2],r=e.strides[e.strides.length-2],s=e.pads[e.pads.length/2-2],a=e.pads[e.pads.length-2],l=t[i-2];u=s+a!==0?`\n            for (int j = 0; j < ${n}; j++) {\n              x[${i} - 2] = indices[${i} - 2] * ${r} - ${s} + j;\n              if (x[${i} - 2] < 0 || x[${i} - 2] >= ${l}) {\n                pad+= ${o};\n                continue;\n              }\n          `:`\n            for (int j = 0; j < ${n}; j++) {\n              x[${i} - 2] = indices[${i} - 2] * ${r} - ${s} + j;\n            `,Q="\n          }\n        "}return`\n        float process(int indices[${i}]) {\n          int x[${i}];\n          copyVec(indices, x);\n\n          float value = ${s};\n          int pad = 0;\n          ${u}\n          ${c}\n          ${Q}\n          ${r}\n          return value;\n        }\n      `}{const o=ShapeUtil.size(e.kernelShape),a=ShapeUtil.computeStrides(e.kernelShape),l=a.length,F=e.pads.length,U=offsetToIndices(l),c=copyArray(t,"inputDims"),u=copyArray(e.pads,"pads"),Q=copyArray(a,"kernelStrides"),d=copyArray(e.strides,"strides");let B="";B=e.pads.reduce(((t,e)=>t+e))?`\n            if (x[j] >= inputDims[j] || x[j] < 0) {\n              pad++;\n              isPad = true;\n              break;\n            }\n          }\n          if (!isPad) {\n            ${n}\n          }`:`\n          }\n          ${n}\n        `;return`\n        ${U}\n        float process(int indices[${i}]) {\n          int x[${i}];\n          copyVec(indices, x);\n          int offset[${l}];\n          int pads[${F}];\n          int inputDims[${i}];\n          int kernelStrides[${l}];\n          int strides[${l}];\n          ${u}\n          ${c}\n          ${d}\n          ${Q}\n\n          float value = ${s};\n          int pad = 0;\n          bool isPad = false;\n          for (int i = 0; i < ${o}; i++) {\n            offsetToIndices(i, kernelStrides, offset);\n            isPad = false;\n            for (int j = ${i} - ${l}; j < ${i}; j++) {\n              x[j] = indices[j] * strides[j - ${i} + ${l}]\n                + offset[j - ${i} + ${l}] - pads[j - 2];\n              ${B}\n          }\n          ${r}\n\n          return value;\n        }\n      `}},copyArray=(t,e)=>{let n="";for(let r=0;r<t.length;r++)n+=`\n      ${e}[${r}] = ${t[r]};\n    `;return n},offsetToIndices=t=>`\n  void offsetToIndices(int offset, int[${t}] strides, out int[${t}] indices) {\n    if (${t} == 0) {\n      return;\n    }\n    for (int i = 0; i < ${t} - 1; ++i) {\n      indices[i] = offset / strides[i];\n      offset -= indices[i] * strides[i];\n    }\n    indices[${t} - 1] = offset;\n  }`}}),reduce,parseReduceAttributes,createReduceProgramInfo,validateInputs16,reduceSum,reduceMean,reduceMax,reduceMin,reduceProd,reduceLogSum,reduceLogSumSquare,init_reduce=__esm({"web/lib/onnxjs/backends/webgl/ops/reduce.ts"(){init_attribute_with_cache_key(),init_operators(),init_util(),init_types(),reduce=(t,e,n,r,s)=>{validateInputs16(e);const i={name:r,inputNames:["A"],inputTypes:[0]};return[t.run({...i,cacheHint:n.cacheKey,get:()=>createReduceProgramInfo(t,e,n,r,s,i)},e)]},parseReduceAttributes=t=>{const e=t.attributes.getInts("axes",[]),n=1===t.attributes.getInt("keepdims",1);return createAttributeWithCacheKey({axes:e,keepDims:n})},createReduceProgramInfo=(t,e,n,r,s,i)=>{const o=[],a=e[0].dims.length||1,l=[],F=ShapeUtil.normalizeAxes(n.axes,e[0].dims.length),U=s(e,F);let c=U[1];for(let t=0;t<e[0].dims.length;t++)F.indexOf(t)>=0||0===F.length?(n.keepDims&&o.push(1),c=`\n          for(int j${t} = 0; j${t} < ${e[0].dims[t]}; j${t}++) {\n            inputIdx[${t}] = j${t};\n            ${c}\n          }`):(l.push(`inputIdx[${t}] = outputIdx[${o.length}];`),o.push(e[0].dims[t]));const u=`\n      float process(int outputIdx[${o.length||1}]) {\n        float value;                 // final result\n        int inputIdx[${a}];      // addressing input data\n        ${l.join("\n")}\n        ${U[0]}       // init ops for reduce max/min\n        ${c}\n        ${U[2]}       // final computation for reduce mean\n        return value;\n      }`;return{...i,output:{dims:o,type:e[0].type,textureType:0},shaderSource:u}},validateInputs16=t=>{if(!t||1!==t.length)throw new Error("Reduce op requires 1 input.");if(-1===NUMBER_TYPES.indexOf(t[0].type))throw new Error("Invalid input type.")},reduceSum=(t,e,n)=>reduce(t,e,n,"ReduceSum",(()=>["value = 0.0;","value += _A(inputIdx);",""])),reduceMean=(t,e,n)=>reduce(t,e,n,"ReduceMean",((t,e)=>{let n=1;for(let r=0;r<t[0].dims.length;r++)(e.indexOf(r)>=0||0===e.length)&&(n*=t[0].dims[r]);return["value = 0.0;","value += _A(inputIdx);",`value /= ${n}.;`]})),reduceMax=(t,e,n)=>reduce(t,e,n,"ReduceMax",((t,e)=>{const n=[];for(let r=0;r<t[0].dims.length;r++)(e.indexOf(r)>=0||0===e.length)&&n.push(`inputIdx[${r}] = 0;`);return[`${n.join("\n")}\nvalue = _A(inputIdx);`,"value = max(value, _A(inputIdx));",""]})),reduceMin=(t,e,n)=>reduce(t,e,n,"ReduceMin",((t,e)=>{const n=[];for(let r=0;r<t[0].dims.length;r++)(e.indexOf(r)>=0||0===e.length)&&n.push(`inputIdx[${r}] = 0;`);return[`${n.join("\n")}\nvalue = _A(inputIdx);`,"value = min(value, _A(inputIdx));",""]})),reduceProd=(t,e,n)=>reduce(t,e,n,"ReduceProd",(()=>["value = 1.0;","value *= _A(inputIdx);",""])),reduceLogSum=(t,e,n)=>reduce(t,e,n,"ReduceLogSum",(()=>["value = 0.0;","value += _A(inputIdx);","value = log(value);"])),reduceLogSumSquare=(t,e,n)=>reduce(t,e,n,"ReduceLogSumSquare",(()=>["float t; value = 0.0;","t = _A(inputIdx); value += t * t;",""]))}}),reshape,init_reshape=__esm({"web/lib/onnxjs/backends/webgl/ops/reshape.ts"(){init_util(),reshape=(t,e)=>{const n=ShapeUtil.calculateReshapedDims(e[0].dims,e[1].integerData);return t.session.pack?[t.reshapePacked(e[0],n)]:[t.reshapeUnpacked(e[0],n)]}}}),upsampleProgramMetadata,upsample,parseUpsampleAttributesV7,parseUpsampleAttributesV9,parseUpsampleAttributes,createUpsampleProgramInfo,validateInputs17,scalesValidation,init_upsample=__esm({"web/lib/onnxjs/backends/webgl/ops/upsample.ts"(){init_attribute_with_cache_key(),init_glsl_source(),init_types(),upsampleProgramMetadata={name:"Upsample",inputNames:["X"],inputTypes:[0]},upsample=(t,e,n)=>{validateInputs17(e,n);return[t.run({...upsampleProgramMetadata,cacheHint:n.cacheKey,get:()=>createUpsampleProgramInfo(t,e,n)},e)]},parseUpsampleAttributesV7=t=>parseUpsampleAttributes(t,7),parseUpsampleAttributesV9=t=>parseUpsampleAttributes(t,9),parseUpsampleAttributes=(t,e)=>{const n=e>=10,r=t.attributes.getString("mode","nearest");if("nearest"!==r&&"linear"!==r&&(e<11||"cubic"!==r))throw new Error(`unrecognized mode: ${r}`);let s=[];e<9&&(s=t.attributes.getFloats("scales"),scalesValidation(s,r,n));const i=t.attributes.getFloat("extrapolation_value",0),o=e>10?t.attributes.getString("coordinate_transformation_mode","half_pixel"):"asymmetric";if(-1===["asymmetric","pytorch_half_pixel","tf_half_pixel_for_nn","align_corners","tf_crop_and_resize","half_pixel"].indexOf(o))throw new Error(`coordinate_transform_mode '${o}' is not supported`);const a="tf_crop_and_resize"===o,l=a,F="nearest"===r&&e>=11?t.attributes.getString("nearest_mode","round_prefer_floor"):"";if(-1===["round_prefer_floor","round_prefer_ceil","floor","ceil",""].indexOf(F))throw new Error(`nearest_mode '${F}' is not supported`);const U=t.attributes.getFloat("cubic_coeff_a",-.75),c=0!==t.attributes.getInt("exclude_outside",0);if(c&&"cubic"!==r)throw new Error("exclude_outside can be set to 1 only when mode is CUBIC.");const u=e<11||"nearest"===r&&"asymmetric"===o&&"floor"===F;let Q=0,d=0,B=0;return e>10?t.inputs.length>2?(Q=1,d=2,B=3):(d=1,B=2):9===e&&(d=1),createAttributeWithCacheKey({opset:e,isResize:n,mode:r,scales:s,extrapolationValue:i,coordinateTransformMode:o,useExtrapolation:l,needRoiInput:a,nearestMode:F,cubicCoefficientA:U,excludeOutside:c,useNearest2xOptimization:u,roiInputIdx:Q,scalesInputIdx:d,sizesInputIdx:B})},createUpsampleProgramInfo=(t,e,n)=>{const r=getGlsl(t.session.backend.glContext.version),[s,i]=t.calculateTextureWidthAndHeight(e[0].dims,0),o=e[0].dims.map(((t,e)=>Math.floor(t*n.scales[e]))),[a,l]=t.calculateTextureWidthAndHeight(o,0),F=o.length,U=new Array(F),c=new Array(F);let u=`\n      int output_pitches[${F}];\n      int input_pitches[${F}];\n      `;for(let t=F-1;t>=0;t--)U[t]=t===F-1?1:U[t+1]*o[t+1],c[t]=t===F-1?1:c[t+1]*e[0].dims[t+1],u+=`\n        output_pitches[${t}] = ${U[t]};\n        input_pitches[${t}] = ${c[t]};\n        `;const Q=`\n      float getInputFloat(int index) {\n        vec2 coords = offsetToCoords(index, ${s}, ${i});\n        float value = getColorAsFloat(${r.texture2D}(X, coords));\n        return value;\n      }\n      `,d="nearest"===n.mode?`\n    ${Q}\n    float process(int indices[${F}]) {\n      int input_index = 0;\n      int output_index = coordsToOffset(TexCoords, ${a}, ${l});\n\n      ${u}\n\n      int d, m;\n      for (int dim = 0; dim < ${F}; ++dim) {\n        d = output_index / output_pitches[dim];\n        m = output_index - d * output_pitches[dim];\n        output_index = m;\n\n        if (scales[dim] != 1 && d > 0) {\n          int d2 = d / scales[dim];\n          m = d - d2 * scales[dim];\n          d = d2;\n        }\n        input_index += input_pitches[dim] * d;\n      }\n\n      return getInputFloat(input_index);\n    }`:4===F?`\n    ${Q}\n    float process(int indices[4]) {\n      int input_index = 0;\n      int output_index = coordsToOffset(TexCoords, ${a}, ${l});\n\n      ${u}\n\n      int m;\n      int index_of_dim0, index_of_dim1, index_of_dim2, index_of_dim3;\n      index_of_dim0 = output_index / output_pitches[0];\n      m = output_index - index_of_dim0 * output_pitches[0];\n      index_of_dim1 = m / output_pitches[1];\n      m = m - index_of_dim1 * output_pitches[1];\n      index_of_dim2 = m / output_pitches[2];\n      m = m - index_of_dim2 * output_pitches[2];\n      index_of_dim3 = m;\n\n      int index_of_input_dim2, index_of_input_dim3, x_offset, y_offset;\n      index_of_input_dim2 = index_of_dim2 / scales[2];\n      y_offset = index_of_dim2 - index_of_input_dim2 * scales[2];\n      index_of_input_dim3 = index_of_dim3 / scales[3];\n      x_offset = index_of_dim3 - index_of_input_dim3 * scales[3];\n\n      input_index = index_of_dim0 * input_pitches[0] +\n            index_of_dim1 * input_pitches[1] +\n            index_of_input_dim2 * input_pitches[2] +\n            index_of_input_dim3;\n\n      float x00 = getInputFloat(input_index);\n      float x10, x01, x11;\n\n      bool end_of_dim2 = false;\n      if (index_of_input_dim2 == (${e[0].dims[2]} - 1)) {\n        // It's the end in dimension 2\n        x01 = x00;\n        end_of_dim2 = true;\n      } else {\n        x01 = getInputFloat(input_index + input_pitches[2]);\n      }\n\n      if (index_of_input_dim3 == (input_pitches[2] - 1)) {\n        // It's the end in dimension 3\n        x10 = x00;\n        x11 = x01;\n      }\n      else {\n        x10 = getInputFloat(input_index + 1);\n        x11 = end_of_dim2 ? x10 : getInputFloat(input_index + input_pitches[2] + 1);\n      }\n\n      float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[2]);\n      float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[2]);\n      return y0 + float(x_offset) * (y1 - y0) / float(scales[3]);\n    }`:`\n    ${Q}\n    float process(int indices[2]) {\n      int input_index = 0;\n      int output_index = coordsToOffset(TexCoords, ${a}, ${l});\n\n      ${u}\n\n      int m;\n      int index_of_dim0, index_of_dim1;\n      index_of_dim0 = output_index / output_pitches[0];\n      m = output_index - index_of_dim0 * output_pitches[0];\n      index_of_dim1 = m;\n\n      int index_of_input_dim0, index_of_input_dim1, x_offset, y_offset;\n      index_of_input_dim0 = index_of_dim0 / scales[0];\n      y_offset = index_of_dim0 - index_of_input_dim0 * scales[0];\n      index_of_input_dim1 = index_of_dim1 / scales[1];\n      x_offset = index_of_dim1 - index_of_input_dim1 * scales[1];\n\n      input_index = index_of_input_dim0 * input_pitches[0] + index_of_input_dim1;\n\n      float x00 = getInputFloat(input_index);\n      float x10, x01, x11;\n\n      bool end_of_dim0 = false;\n      if (index_of_input_dim0 == (${e[0].dims[0]} - 1)) {\n        // It's the end in dimension 0\n        x01 = x00;\n        end_of_dim0 = true;\n      } else {\n        x01 = getInputFloat(input_index + input_pitches[0]);\n      }\n\n      if (index_of_input_dim1 == (input_pitches[0] - 1)) {\n        // It's the end in dimension 1\n        x10 = x00;\n        x11 = x01;\n      }\n      else {\n        x10 = getInputFloat(input_index + 1);\n        x11 = end_of_dim0 ? x10 : getInputFloat(input_index + input_pitches[0] + 1);\n      }\n\n      float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[0]);\n      float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[0]);\n      return y0 + float(x_offset) * (y1 - y0) / float(scales[1]);\n    }`;return{...upsampleProgramMetadata,output:{dims:o,type:e[0].type,textureType:0},shaderSource:d,variables:[{name:"scales",type:"int",arrayLength:n.scales.length,data:n.scales.map((t=>Math.ceil(t)))}]}},validateInputs17=(t,e)=>{if(!t||e.opset<9&&1!==t.length||e.opset>=9&&e.opset<11&&2!==t.length||e.opset>=11&&t.length<2)throw new Error("invalid inputs.");if(e.scales.length>0&&t[0].dims.length!==e.scales.length)throw new Error("Invalid input shape.");if("string"===t[0].type)throw new Error("Invalid input tensor types.")},scalesValidation=(t,e,n)=>{if(n){for(const e of t)if(e<=0)throw new Error("Scale value should be greater than 0.")}else for(const e of t)if(e<1)throw new Error("Scale value should be greater than or equal to 1.");if(!("linear"!==e&&"cubic"!==e||2===t.length||4===t.length&&1===t[0]&&1===t[1]))throw new Error(`'Linear' mode and 'Cubic' mode only support 2-D inputs ('Bilinear', 'Bicubic')         or 4-D inputs with the corresponding outermost 2 scale values being 1         in the ${n?"Resize":"Upsample"} opeartor.`)}}}),resizeProgramMetadata,resize,parseResizeAttributesV10,parseResizeAttributesV11,createPackedResizeProgramInfo,prepareInputs,parseScalesData,parseScalesDataFromOutputSize,init_resize_packed=__esm({"web/lib/onnxjs/backends/webgl/ops/resize-packed.ts"(){init_glsl_source(),init_types(),init_utils(),init_packing_utils(),init_upsample(),resizeProgramMetadata={name:"Resize",inputNames:["A"],inputTypes:[2]},resize=(t,e,n)=>{validateInputs17(e,n);return[t.run({...resizeProgramMetadata,cacheHint:n.cacheKey,get:()=>createPackedResizeProgramInfo(t,e,n)},e)]},parseResizeAttributesV10=t=>parseUpsampleAttributes(t,10),parseResizeAttributesV11=t=>parseUpsampleAttributes(t,11),createPackedResizeProgramInfo=(t,e,n)=>{const r=getGlsl(t.session.backend.glContext.version),[s,i]=prepareInputs(e,n);if(s.every((t=>1===t))&&"tf_crop_and_resize"!==n.coordinateTransformMode)return{...resizeProgramMetadata,output:{dims:i,type:e[0].type,textureType:2},hasMain:!0,shaderSource:`void main() {\n                    vec4 v = ${r.texture2D}(X, TexCoords);\n                    ${r.output} = v;\n                }`};const o=i.length;if(o<2)throw new Error(`output dimension should be at least 2, but got ${o}`);const a=i[o-2],l=i[o-1],F=e[0].dims;if(o!==F.length)throw new Error(`output dimension should match input ${F.length}, but got ${o}`);const U=F[o-2],c=F[o-1],u=s[o-2],Q=s[o-1];let d="";if("linear"!==n.mode)throw new Error(`resize (packed) does not support mode: '${n.mode}'`);switch(n.coordinateTransformMode){case"asymmetric":d="\n                    vec4 getSourceFracIndex(ivec4 coords) {\n                        return vec4(coords) / scaleWHWH;\n                    }\n                ";break;case"half_pixel":d="\n                    vec4 getSourceFracIndex(ivec4 coords) {\n                        return (vec4(coords) + 0.5) / scaleWHWH - 0.5;\n                    }\n                ";break;case"pytorch_half_pixel":d=`\n                    vec4 getSourceFracIndex(ivec4 coords) {\n                        vec4 fcoords = vec4(coords);\n                        return vec4(\n                            ${l}.0 > 1.0 ? (fcoords.x + 0.5) / scaleWHWH.x - 0.5 : 0.0,\n                            ${a}.0 > 1.0 ? (fcoords.y + 0.5) / scaleWHWH.y - 0.5 : 0.0,\n                            ${l}.0 > 1.0 ? (fcoords.z + 0.5) / scaleWHWH.z - 0.5 : 0.0,\n                            ${a}.0 > 1.0 ? (fcoords.w + 0.5) / scaleWHWH.w - 0.5 : 0.0\n                          );\n                    }\n                `;break;case"align_corners":d=`\n                    vec4 getSourceFracIndex(ivec4 coords) {\n                        vec4 resized = vec4(${l}.0 - 1.0, ${a}.0 - 1.0, ${l}.0 - 1.0,\n                            ${a}.0 - 1.0);\n                        vec4 original = vec4(${c}.0 - 1.0, ${U}.0 - 1.0, ${c}.0 - 1.0,\n                            ${U}.0 - 1.0);\n                        vec4 new_scale = original / resized;\n                        return vec4(coords) * new_scale;\n                    }\n                `;break;default:throw new Error(`resize (packed) does not support coordinateTransformMode:                                 '${n.coordinateTransformMode}'`)}const B=getCoordsDataType(o),p=`\n            const vec2 inputWH = vec2(${U}.0, ${c}.0);\n            const vec4 scaleWHWH = vec4(float(${u}), float(${Q}), float(${u}), float(${Q}));\n            ${unpackFromChannel()}\n            ${d}\n            float getAValue(int x10, int r, int c, int d) {\n                return getChannel(getA(x10, r, c, d), vec2(c, d));\n            }\n            void main() {\n                ${B} rc = getOutputCoords();\n\n                int batch = rc[0];\n                int depth = rc[1];\n\n                // retrieve the 4 coordinates that is used in the 4 packed output values.\n                ivec4 coords = ivec4(rc.wz, rc.w + 1, rc.z + 1);\n\n                // calculate the source index in fraction\n                vec4 sourceFrac = getSourceFracIndex(coords);\n\n                // get the lower and upper bound of the 4 values that will be packed into one texel.\n                ivec4 x00 = ivec4(max(sourceFrac.xy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xy)));\n                ivec4 x01 = ivec4(max(sourceFrac.xw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xw)));\n                ivec4 x10 = ivec4(max(sourceFrac.zy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zy)));\n                ivec4 x11 = ivec4(max(sourceFrac.zw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zw)));\n\n                bool hasNextRow = rc.w < ${a-1};\n                bool hasNextCol = rc.z < ${l-1};\n\n                // pack x00, x01, x10, x11's top-left corner into one vec4 structure\n                vec4 topLeft = vec4(\n                    getAValue(batch, depth, x00.x, x00.y),\n                    hasNextCol ? getAValue(batch, depth, x01.x, x01.y) : 0.0,\n                    hasNextRow ? getAValue(batch, depth, x10.x, x10.y) : 0.0,\n                    (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.y) : 0.0);\n\n                // pack x00, x01, x10, x11's top-right corner into one vec4 structure\n                vec4 topRight = vec4(\n                    getAValue(batch, depth, x00.x, x00.w),\n                    hasNextCol ? getAValue(batch, depth, x01.x, x01.w) : 0.0,\n                    hasNextRow ? getAValue(batch, depth, x10.x, x10.w) : 0.0,\n                    (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.w) : 0.0);\n\n                // pack x00, x01, x10, x11's bottom-left corner into one vec4 structure\n                vec4 bottomLeft = vec4(\n                    getAValue(batch, depth, x00.z, x00.y),\n                    hasNextCol ? getAValue(batch, depth, x01.z, x01.y) : 0.0,\n                    hasNextRow ? getAValue(batch, depth, x10.z, x10.y) : 0.0,\n                    (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.y) : 0.0);\n\n                // pack x00, x01, x10, x11's bottom-right corner into one vec4 structure\n                vec4 bottomRight = vec4(\n                    getAValue(batch, depth, x00.z, x00.w),\n                    hasNextCol ? getAValue(batch, depth, x01.z, x01.w) : 0.0,\n                    hasNextRow ? getAValue(batch, depth, x10.z, x10.w) : 0.0,\n                    (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.w) : 0.0);\n\n                // calculate the interpolation fraction on u and v direction\n                vec4 frac = vec4(sourceFrac) - floor(sourceFrac);\n                vec4 clampFrac = clamp(frac, vec4(0.0), vec4(1.0));\n\n                vec4 top = mix(topLeft, topRight, clampFrac.ywyw);\n                vec4 bottom = mix(bottomLeft, bottomRight, clampFrac.ywyw);\n                vec4 newValue = mix(top, bottom, clampFrac.xxzz);\n\n                ${r.output} = vec4(newValue);\n            }\n        `;return{...resizeProgramMetadata,output:{dims:i,type:e[0].type,textureType:2},hasMain:!0,shaderSource:p}},prepareInputs=(t,e)=>{const n=t[0].dims;let r,s=e.scales;if(0===s.length){const i=t[e.scalesInputIdx];if(i&&0!==i.size){if(t[e.sizesInputIdx])throw new Error("Only one of scales or sizes must be provided as input.");s=parseScalesData(i,e.mode,e.isResize)}else{const i=t[e.sizesInputIdx];if(!i||0===i.size)throw new Error("Either scales or sizes MUST be provided as input.");r=Array.from(i.integerData),s=parseScalesDataFromOutputSize(r,n,e.mode,e.isResize)}}else if(t[e.sizesInputIdx])throw new Error("Only one of scales or sizes must be provided as input.");const i=r||n.map(((t,e)=>Math.floor(t*s[e])));return[s,i]},parseScalesData=(t,e,n)=>{const r=Array.from(t.floatData);return scalesValidation(r,e,n),r},parseScalesDataFromOutputSize=(t,e,n,r)=>{const s=e.length,i=new Array(s);for(let n=0,r=s;n<r;n++)if(0===e[n]){if(0!==t[n])throw new Error("Input dim is zero but required output dim is non-zero.");i[n]=1}else i[n]=t[n]/e[n];return scalesValidation(i,n,r),i}}}),shape,validateInputs18,init_shape=__esm({"web/lib/onnxjs/backends/webgl/ops/shape.ts"(){init_tensor2(),shape=(t,e)=>(validateInputs18(e),[new Tensor3([e[0].dims.length],"int32",void 0,void 0,new Int32Array(e[0].dims))]),validateInputs18=t=>{if(!t||1!==t.length)throw new Error("Shape requires 1 input.")}}}),sliceProgramMetadata,slice,parseSliceAttributes,createSliceProgramInfo,validateInputs19,sliceV10,generateSliceAttributesFromInputs,validateInputsV10,init_slice=__esm({"web/lib/onnxjs/backends/webgl/ops/slice.ts"(){init_attribute_with_cache_key(),init_operators(),init_util(),init_types(),sliceProgramMetadata={name:"Slice",inputNames:["A"],inputTypes:[0]},slice=(t,e,n)=>{validateInputs19(e);return[t.run({...sliceProgramMetadata,cacheHint:n.cacheKey,get:()=>createSliceProgramInfo(t,e[0],n)},e)]},parseSliceAttributes=t=>{const e=t.attributes.getInts("starts"),n=t.attributes.getInts("ends"),r=t.attributes.getInts("axes",[]);return createAttributeWithCacheKey({starts:e,ends:n,axes:r})},createSliceProgramInfo=(t,e,n)=>{const r=0===n.axes.length?e.dims.slice(0).map(((t,e)=>e)):n.axes,s=ShapeUtil.normalizeAxes(r,e.dims.length),i=n.starts.map(((t,n)=>t>e.dims[s[n]]-1?e.dims[s[n]]:ShapeUtil.normalizeAxis(t,e.dims[s[n]]))),o=n.ends.map(((t,n)=>t>e.dims[s[n]]-1?e.dims[s[n]]:ShapeUtil.normalizeAxis(t,e.dims[s[n]]))),a=e.dims.slice(),l=[];for(let t=0;t<s.length;t++)a[s[t]]=o[t]-i[t],i[t]>0&&l.push(`outputIdx[${s[t]}] += ${i[t]};`);const F=`\n      float process(int outputIdx[${a.length}]) {\n        ${l.join("\n      ")}\n        return _A(outputIdx);\n      }`;return{...sliceProgramMetadata,output:{dims:a,type:e.type,textureType:0},shaderSource:F}},validateInputs19=t=>{if(!t||1!==t.length)throw new Error("Slice requires 1 input.");if(-1===NUMBER_TYPES.indexOf(t[0].type))throw new Error("Invalid input type.")},sliceV10=(t,e)=>{validateInputsV10(e);const n=generateSliceAttributesFromInputs(t,e);return[t.run({...sliceProgramMetadata,cacheHint:n.cacheKey,get:()=>createSliceProgramInfo(t,e[0],n)},[e[0]])]},generateSliceAttributesFromInputs=(t,e)=>{if(!t.session.isInitializer(e[1].dataId)||!t.session.isInitializer(e[2].dataId)||e.length>=4&&!t.session.isInitializer(e[3].dataId)||e.length>=5&&!t.session.isInitializer(e[4].dataId))throw new Error("dynamic slice attributes are not allowed");if(e.length>=5&&e[4].integerData.some((t=>1!==t)))throw new Error("currently non-1 steps is not supported for Slice");const n=Array.from(e[1].integerData),r=Array.from(e[2].integerData),s=e.length>=4?Array.from(e[3].integerData):[];return{starts:n,ends:r,axes:s,cacheKey:`${s};${n};${r}`}},validateInputsV10=t=>{if(!t||t.length<3||t.length>5)throw new Error("Invalid input number.");if("int32"!==t[1].type||1!==t[1].dims.length)throw new Error("Invalid input type.");if("int32"!==t[2].type||1!==t[2].dims.length)throw new Error("Invalid input type.");if(t.length>=4&&("int32"!==t[3].type||1!==t[3].dims.length))throw new Error("Invalid input type.");if(t.length>=5&&("int32"!==t[4].type||1!==t[4].dims.length))throw new Error("Invalid input type.")}}}),softmaxComputeMaxProgramMetadata,softmaxComputeScaleProgramMetadata,softmaxProgramMetadata,softmax,parseSoftmaxAttributes,parseSoftmaxAttributesV13,softmaxV13,computeSoftmax,createComputeMaxProgramInfo,createComputScaleProgramInfo,createSoftMaxProgramInfo,validateInputs20,init_softmax=__esm({"web/lib/onnxjs/backends/webgl/ops/softmax.ts"(){init_attribute_with_cache_key(),init_util(),init_glsl_source(),init_types(),init_transpose(),softmaxComputeMaxProgramMetadata={name:"SoftmaxComputeMax",inputNames:["A"],inputTypes:[0]},softmaxComputeScaleProgramMetadata={name:"SoftmaxComputeScale",inputNames:["A","Max"],inputTypes:[0,0]},softmaxProgramMetadata={name:"SoftMax",inputNames:["A","Max","Norm"],inputTypes:[0,0,0]},softmax=(t,e,n)=>{validateInputs20(e);const r=e[0].dims.slice(),s=ShapeUtil.normalizeAxis(n.axis,r.length),i=ShapeUtil.sizeToDimension(r,s),o=ShapeUtil.sizeFromDimension(r,s);return computeSoftmax(t,e,n,i,o)},parseSoftmaxAttributes=t=>createAttributeWithCacheKey({axis:t.attributes.getInt("axis",1)}),parseSoftmaxAttributesV13=t=>createAttributeWithCacheKey({axis:t.attributes.getInt("axis",-1)}),softmaxV13=(t,e,n)=>{validateInputs20(e);const r=e[0].dims.slice(),s=ShapeUtil.normalizeAxis(n.axis,r.length),i=r.length,o=s!==i-1,a=[];let l,F=[],U=[];o&&(F=Array.from({length:i}).map(((t,e)=>e)),F[s]=i-1,F[i-1]=s,F.map((t=>a.push(r[t]))),l=createAttributeWithCacheKey({perm:F}),U=transpose(t,e,l));const c=o?ShapeUtil.sizeToDimension(a,i-1):ShapeUtil.sizeToDimension(r,i-1),u=o?ShapeUtil.sizeFromDimension(a,i-1):ShapeUtil.sizeFromDimension(r,i-1),Q=computeSoftmax(t,o?U:e,n,c,u);if(o){return transpose(t,Q,l)}return Q},computeSoftmax=(t,e,n,r,s)=>{const i=createComputeMaxProgramInfo(t,e[0],r,s,[r]),o=t.run({...softmaxComputeMaxProgramMetadata,cacheHint:n.cacheKey,get:()=>i},e),a=createComputScaleProgramInfo(t,e[0],r,s,i.output.dims,[r]),l=t.run({...softmaxComputeScaleProgramMetadata,cacheHint:n.cacheKey,get:()=>a},[e[0],o]),F=createSoftMaxProgramInfo(t,e[0],r,s,i.output.dims,a.output.dims);return[t.run({...softmaxProgramMetadata,cacheHint:n.cacheKey,get:()=>F},[e[0],o,l])]},createComputeMaxProgramInfo=(t,e,n,r,s)=>{const[i,o]=t.calculateTextureWidthAndHeight(e.dims,0),a=s.length;if(n<1||r<1)throw new Error("Logical row count N and feature count D must be greater than or equal to 1");if(1!==s.length)throw new Error("Dimensionality of the output should be 1");if(s[0]!==n)throw new Error("Shape of the output should be equal to logical row count");const l=getGlsl(t.session.backend.glContext.version),F=`\n      float process(int[${a}] indices) {\n        int logical_row_start_offset = indices[0] * ${r};\n\n        float max = getColorAsFloat(${l.texture2D}(A, offsetToCoords(logical_row_start_offset, ${i},\n        ${o} )));\n        for(int i=1; i<${r}; ++i)\n        {\n          float current = getColorAsFloat(${l.texture2D}(A, offsetToCoords(logical_row_start_offset + i,\n            ${i}, ${o})));\n          if(current > max)\n          max = current;\n        }\n\n        return max;\n      }`;return{...softmaxComputeMaxProgramMetadata,output:{dims:s,type:e.type,textureType:0},shaderSource:F}},createComputScaleProgramInfo=(t,e,n,r,s,i)=>{const[o,a]=t.calculateTextureWidthAndHeight(e.dims,0),l=i.length;if(n<1||r<1)throw new Error("Logical row count N and feature count D must be greater than or equal to 1");if(1!==i.length)throw new Error("Dimensionality of the output should be 1");if(i[0]!==n)throw new Error("Shape of the output should be equal to logical row count");if(1!==s.length)throw new Error("Dimensionality of the intermediate results should be 1");if(s[0]!==n)throw new Error("Shape of the intermediate results should be equal to logical row count");const F=`\n      float process(int[${l}] indices) {\n        int logical_row_start_offset = indices[0] * ${r};\n\n        float norm_factor = 0.0;\n        float max = _Max(indices);\n        for(int i=0; i<${r}; ++i)\n        {\n          norm_factor += exp(getColorAsFloat(${getGlsl(t.session.backend.glContext.version).texture2D}(A, offsetToCoords(logical_row_start_offset + i,\n            ${o}, ${a}))) - max);\n        }\n\n        return norm_factor;\n      }`;return{...softmaxComputeScaleProgramMetadata,output:{dims:i,type:e.type,textureType:0},shaderSource:F}},createSoftMaxProgramInfo=(t,e,n,r,s,i)=>{const[o,a]=t.calculateTextureWidthAndHeight(e.dims,0),l=e.dims.length;if(n<1||r<1)throw new Error("Logical row count N and feature count D must be greater than or equal to 1");if(1!==s.length||1!==i.length)throw new Error("Dimensionality of the intermediate results should be 1");if(s[0]!==n||i[0]!==n)throw new Error("Shape of the intermediate results should be equal to logical row count");const F=`\n      float process(int[${l}] indices) {\n\n      // get offset of current logical tensor index from the 2-D texture coordinates (TexCoords)\n      int offset = coordsToOffset(TexCoords, ${o}, ${a});\n\n      //determine the logical row for this index\n      int logical_row_index[1];\n      logical_row_index[0] = offset / ${r};\n\n      float norm_factor = _Norm(logical_row_index);\n\n      // avoid possible division by 0\n      // if norm_facor is 0, all elements are zero\n      // if so, return 0\n      if(norm_factor == 0.0)\n        return 0.0;\n\n      return exp(_A(indices) - _Max(logical_row_index)) / norm_factor;\n    }`;return{...softmaxProgramMetadata,output:{dims:e.dims,type:e.type,textureType:0},shaderSource:F}},validateInputs20=t=>{if(!t||1!==t.length)throw new Error("Softmax requires 1 input.");if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("Invalid input type")}}}),splitProgramMetadata,split,parseSplitAttributes,getProgramCount,createSplitProgramInfo,validateInputs21,init_split=__esm({"web/lib/onnxjs/backends/webgl/ops/split.ts"(){init_attribute_with_cache_key(),init_util(),init_types(),splitProgramMetadata={name:"Split",inputNames:["A"],inputTypes:[0]},split=(t,e,n)=>{validateInputs21(e);const r=ShapeUtil.normalizeAxis(n.axis,e[0].dims.length),s=getProgramCount(t,e,r,n),i=[];for(let o=0;o<s;++o)i.push(t.run({...splitProgramMetadata,cacheHint:`${n.cacheKey};${o}`,get:()=>createSplitProgramInfo(t,e[0],n,r,o)},e));return i},parseSplitAttributes=t=>{const e=t.attributes.getInt("axis",0),n=t.attributes.getInts("split",[]),r=t.outputs.length;return createAttributeWithCacheKey({axis:e,split:n,numOutputs:r})},getProgramCount=(t,e,n,r)=>{const[,s]=SplitUtil.splitShape(e[0].dims,n,r.split,r.numOutputs);return s.length},createSplitProgramInfo=(t,e,n,r,s)=>{const[i,o]=SplitUtil.splitShape(e.dims,r,n.split,n.numOutputs),a=o[s],l=i[s],F=`\n      float process(int indices[${l.length}]) {\n        indices[${r}] += ${a};\n        return _A(indices);\n      }\n    `;return{...splitProgramMetadata,cacheHint:`${n.cacheKey}:${s}`,output:{dims:l,type:e.type,textureType:0},shaderSource:F}},validateInputs21=t=>{if(!t||1!==t.length)throw new Error("Split requires one input.");if("int8"!==t[0].type&&"uint8"!==t[0].type&&"int16"!==t[0].type&&"uint16"!==t[0].type&&"int32"!==t[0].type&&"uint32"!==t[0].type&&"float32"!==t[0].type&&"float64"!==t[0].type&&"bool"!==t[0].type)throw new Error("Invalid input type.")}}}),squeeze,squeezeV13,parseSqueezeAttributes,validateInputs22,validateInputsV13,init_squeeze=__esm({"web/lib/onnxjs/backends/webgl/ops/squeeze.ts"(){init_util(),squeeze=(t,e,n)=>{validateInputs22(e);const r=ShapeUtil.squeezeShape(e[0].dims,n);return[t.reshapeUnpacked(e[0],r)]},squeezeV13=(t,e)=>(validateInputsV13(e),squeeze(t,[e[0]],Array.from(e[1].integerData))),parseSqueezeAttributes=t=>t.attributes.getInts("axes"),validateInputs22=t=>{if(!t||1!==t.length)throw new Error("Squeeze requires 1 input.");if("string"===t[0].type)throw new Error("invalid input tensor types.")},validateInputsV13=t=>{if(!t||2!==t.length)throw new Error("Squeeze requires 2 inputs.");if("int32"!==t[1].type)throw new Error("Invalid input type.")}}}),sum,createSumProgramInfo,validateInputs23,init_sum=__esm({"web/lib/onnxjs/backends/webgl/ops/sum.ts"(){init_glsl_source(),init_types(),sum=(t,e)=>{validateInputs23(e);const n={name:"Sum",inputNames:e.map(((t,e)=>`X${e}`)),inputTypes:new Array(e.length).fill(0)};return[t.run({...n,get:()=>createSumProgramInfo(t,e,n)},e)]},createSumProgramInfo=(t,e,n)=>{const r=getGlsl(t.session.backend.glContext.version),s=e[0].dims.slice(),i=`\n      void main() {\n        vec4 result = ${e.map(((t,e)=>`${r.texture2D}(X${e},TexCoords)`)).join(" + ")};\n        ${r.output} = result;\n      }\n    `;return{...n,output:{dims:s,type:e[0].type,textureType:0},hasMain:!0,shaderSource:i}},validateInputs23=t=>{if(!t||0===t.length)throw new Error("Sum requires inputs.");const e=t[0].dims.length;for(let n=1;n<t.length;n++){if(e!==t[n].dims.length)throw new Error("Input shapes are mismatched.");for(let r=0;r<e;r++)if(t[0].dims[r]!==t[n].dims[r])throw new Error("Input shapes are not matched.")}if("float32"!==t[0].type&&"float64"!==t[0].type)throw new Error("Invalid input type.");for(let e=1;e<t.length;e++)if(t[0].type!==t[e].type)throw new Error("Input types are not matched.")}}}),tile,createTileProgramInfo,validateInputs24,init_tile=__esm({"web/lib/onnxjs/backends/webgl/ops/tile.ts"(){init_operators(),init_types(),tile=(t,e)=>{validateInputs24(e);const n={name:"Tile",inputNames:["A"],inputTypes:[0]};return[t.run({...n,get:()=>createTileProgramInfo(t,e,n)},e)]},createTileProgramInfo=(t,e,n)=>{const r=e[0].dims.slice(),s=new Array(r.length),i=[];for(let t=0;t<r.length;t++)s[t]=r[t]*e[1].numberData[t],i.push(`inputIdx[${t}] = int(mod(float(outputIdx[${t}]), ${r[t]}.));`);const o=s.length,a=`\n      float process(int outputIdx[${o}]) {\n        int inputIdx[${o}];\n        ${i.join("\n")}\n        return _A(inputIdx);\n      }\n    `;return{...n,output:{dims:s,type:e[0].type,textureType:0},shaderSource:a}},validateInputs24=t=>{if(!t||2!==t.length)throw new Error("Tile requires 2 input.");if(1!==t[1].dims.length)throw new Error("The second input shape must 1 dimension.");if(t[1].dims[0]!==t[0].dims.length)throw new Error("Invalid input shape.");if(-1===NUMBER_TYPES.indexOf(t[0].type))throw new Error("Invalid input type.");if("int32"!==t[1].type&&"int16"!==t[1].type)throw new Error("Invalid repeat type.")}}}),unsqueeze,unsqueezeV13,parseUnsqueezeAttributes,validateInputs25,validateInputsV132,init_unsqueeze=__esm({"web/lib/onnxjs/backends/webgl/ops/unsqueeze.ts"(){init_util(),unsqueeze=(t,e,n)=>{validateInputs25(e);const r=ShapeUtil.unsqueezeShape(e[0].dims,n);return[t.reshapeUnpacked(e[0],r)]},unsqueezeV13=(t,e)=>(validateInputsV132(e),unsqueeze(t,[e[0]],Array.from(e[1].integerData))),parseUnsqueezeAttributes=t=>t.attributes.getInts("axes"),validateInputs25=t=>{if(!t||1!==t.length)throw new Error("Unsqueeze requires 1 input.");if("string"===t[0].type)throw new Error("invalid input tensor types.")},validateInputsV132=t=>{if(!t||2!==t.length)throw new Error("Unsqueeze requires 2 inputs.");if("int32"!==t[1].type)throw new Error("Invalid input type.")}}}),WEBGL_OP_RESOLVE_RULES,init_op_resolve_rules=__esm({"web/lib/onnxjs/backends/webgl/op-resolve-rules.ts"(){init_batch_normalization(),init_binary_op(),init_cast(),init_concat(),init_conv(),init_conv_transpose(),init_depth_to_space(),init_flatten(),init_gather(),init_gemm(),init_image_scaler(),init_instance_normalization(),init_lrn(),init_matmul(),init_pad(),init_pool(),init_reduce(),init_reshape(),init_resize_packed(),init_shape(),init_slice(),init_softmax(),init_split(),init_squeeze(),init_sum(),init_tile(),init_transpose(),init_unary_op(),init_unsqueeze(),init_upsample(),WEBGL_OP_RESOLVE_RULES=[["Abs","","6+",abs],["Acos","","7+",acos],["Add","","7+",add2],["And","","7+",and2],["Asin","","7+",asin],["Atan","","7+",atan],["AveragePool","","7+",averagePool,parseAveragePoolAttributes],["BatchNormalization","","7+",batchNormalization,parseBatchNormalizationAttributes],["Cast","","6+",cast,parseCastAttributes],["Ceil","","6+",ceil],["Clip","","6-10",clip,parseClipAttributes],["Clip","","11+",clipV11],["Concat","","4+",concat,parseConcatAttributes],["Conv","","1+",conv,parseConvAttributes],["ConvTranspose","","1+",convTranspose,parseConvTransposeAttributes],["Cos","","7+",cos],["Div","","7+",div],["Dropout","","7+",identity],["DepthToSpace","","1+",depthToSpace,parseDepthToSpaceAttributes],["Equal","","7+",equal],["Elu","","6+",elu,parseEluAttributes],["Exp","","6+",exp],["Flatten","","1+",flatten,parseFlattenAttributes],["Floor","","6+",floor],["FusedConv","com.microsoft","1+",conv,parseConvAttributes],["Gather","","1+",gather,parseGatherAttributes],["Gemm","","7-10",gemm,parseGemmAttributesV7],["Gemm","","11+",gemm,parseGemmAttributesV11],["GlobalAveragePool","","1+",globalAveragePool,parseGlobalAveragePoolAttributes],["GlobalMaxPool","","1+",globalMaxPool],["Greater","","7+",greater],["Identity","","1+",identity],["ImageScaler","","1+",imageScaler,parseImageScalerAttributes],["InstanceNormalization","","6+",instanceNormalization,parseInstanceNormalizationAttributes],["LeakyRelu","","6+",leakyRelu,parseLeakyReluAttributes],["Less","","7+",less],["LRN","","1+",lrn,parseLrnAttributes],["Log","","6+",log2],["MatMul","","1+",matMul,parseMatMulAttributes],["MaxPool","","1+",maxPool,parseMaxPoolAttributes],["Mul","","7+",mul],["Neg","","6+",neg],["Not","","1+",not2],["Or","","7+",or2],["Pad","","2-10",padV2,parsePadAttributesV2],["Pad","","11+",padV11,parsePadAttributesV11],["Pow","","7+",pow],["PRelu","","7+",pRelu],["ReduceLogSum","","1+",reduceLogSum,parseReduceAttributes],["ReduceMax","","1+",reduceMax,parseReduceAttributes],["ReduceMean","","1+",reduceMean,parseReduceAttributes],["ReduceMin","","1+",reduceMin,parseReduceAttributes],["ReduceProd","","1+",reduceProd,parseReduceAttributes],["ReduceSum","","1-12",reduceSum,parseReduceAttributes],["ReduceSumSquare","","1+",reduceLogSumSquare,parseReduceAttributes],["Relu","","6+",relu],["Reshape","","5+",reshape],["Resize","","10",resize,parseResizeAttributesV10],["Resize","","11+",resize,parseResizeAttributesV11],["Shape","","1+",shape],["Sigmoid","","6+",sigmoid],["Sin","","7+",sin],["Slice","","10+",sliceV10],["Slice","","1-9",slice,parseSliceAttributes],["Softmax","","1-12",softmax,parseSoftmaxAttributes],["Softmax","","13+",softmaxV13,parseSoftmaxAttributesV13],["Split","","2-12",split,parseSplitAttributes],["Sqrt","","6+",sqrt],["Squeeze","","1-12",squeeze,parseSqueezeAttributes],["Squeeze","","13+",squeezeV13],["Sub","","7+",sub],["Sum","","6+",sum],["Tan","","7+",tan],["Tanh","","6+",tanh],["Tile","","6+",tile],["Transpose","","1+",transpose,parseTransposeAttributes],["Upsample","","7-8",upsample,parseUpsampleAttributesV7],["Upsample","","9",upsample,parseUpsampleAttributesV9],["Unsqueeze","","1-12",unsqueeze,parseUnsqueezeAttributes],["Unsqueeze","","13+",unsqueezeV13],["Xor","","7+",xor2]]}}),INLINE_FUNC_DEF_REGEX,FUNC_CALL_REGEX;function replaceInlines(t){const e={};let n;for(;null!==(n=INLINE_FUNC_DEF_REGEX.exec(t));){const t=n[3].split(",").map((t=>{const e=t.trim().split(" ");return e&&2===e.length?{type:e[0],name:e[1]}:null})).filter((t=>null!==t));e[n[2]]={params:t,body:n[4]}}for(const r in e){const s=FUNC_CALL_REGEX.replace("__FUNC__",r),i=new RegExp(s,"gm");for(;null!==(n=i.exec(t));){const s=n[1],i=n[2],o=n[3].split(","),a=s?`${s} ${i};`:"";let l=e[r].body,F="";e[r].params.forEach(((t,e)=>{t&&(F+=`${t.type} ${t.name} = ${o[e]};\n`)})),l=`${F}\n ${l}`,l=l.replace("return",`${i} = `);const U=`\n      ${a}\n      {\n        ${l}\n      }\n      `;t=t.replace(n[0],U)}}return t=t.replace(INLINE_FUNC_DEF_REGEX,"")}var init_glsl_function_inliner=__esm({"web/lib/onnxjs/backends/webgl/glsl-function-inliner.ts"(){INLINE_FUNC_DEF_REGEX=/@inline[\s\n\r]+(\w+)[\s\n\r]+([0-9a-zA-Z_]+)\s*\(([^)]*)\)\s*{(([^}]|[\n\r])*)}/gm,FUNC_CALL_REGEX="(\\w+)?\\s+([_0-9a-zA-Z]+)\\s+=\\s+__FUNC__\\((.*)\\)\\s*;"}}),PreferLogicalStrategy;function squeezeShape(t,e){const n=[],r=[],s=null!=e&&Array.isArray(e)&&0===e.length,i=null==e||s?null:parseAxisParam(e,t).sort();let o=0;for(let e=0;e<t.length;++e){if(null!=i){if(i[o]===e&&1!==t[e])throw new Error(`Can't squeeze axis ${e} since its dim '${t[e]}' is not 1`);(null==i[o]||i[o]>e)&&1===t[e]&&(n.push(t[e]),r.push(e)),i[o]<=e&&o++}1!==t[e]&&(n.push(t[e]),r.push(e))}return{newShape:n,keptDims:r}}function parseAxisParam(t,e){const n=e.length;return assert((t=null==t?e.map(((t,e)=>e)):[].concat(t)).every((t=>t>=-n&&t<n)),(()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${t}`)),assert(t.every(isInt),(()=>`All values in axis param must be integers but got axis ${t}`)),t.map((t=>t<0?n+t:t))}function isInt(t){return t%1==0}function sizeFromShape(t){if(0===t.length)return 1;let e=t[0];for(let n=1;n<t.length;n++)e*=t[n];return e}function sizeToSquarishShape(t){const e=Math.ceil(Math.sqrt(t));return[e,Math.ceil(t/e)]}var init_texture_layout_strategy=__esm({"web/lib/onnxjs/backends/webgl/texture-layout-strategy.ts"(){init_instrument(),init_util(),PreferLogicalStrategy=class{constructor(t){this.maxTextureSize=t}computeTextureWH(t,e){const n=this.computeTexture(t,e);return e&&e.isPacked&&(n[0]/=2,n[1]/=2),e&&e.reverseWH?[n[1],n[0]]:n}computeTexture(t,e){const n=e&&e.isPacked;if(0===t.length)return n?[2,2]:[1,1];let r=this.maxTextureSize;if(e&&void 0!==e.breakAxis){const n=e.breakAxis>=t.length?1:t.slice(e.breakAxis).reduce(((t,e)=>t*e)),s=e.breakAxis<=0?1:t.slice(0,e.breakAxis).reduce(((t,e)=>t*e));if(!(n>r||s>r))return[n,s];Logger.verbose("TextureLayout",`Given width/height preferences were unattainable: shape:${t}, breakAxis:${e.breakAxis}`)}let s=t.slice(0);if(n&&(r*=2,s=s.map(((t,e)=>e>=s.length-2?s[e]%2==0?s[e]:s[e]+1:s[e])),1===s.length&&(s=[2,s[0]])),2!==s.length){const t=squeezeShape(s);s=t.newShape}const i=sizeFromShape(s);return s.length<=1&&i<=r?[1,i]:2===s.length&&s[0]<=r&&s[1]<=r?s:3===s.length&&s[0]*s[1]<=r&&s[2]<=r?[s[0]*s[1],s[2]]:3===s.length&&s[0]<=r&&s[1]*s[2]<=r?[s[0],s[1]*s[2]]:4===s.length&&s[0]*s[1]*s[2]<=r&&s[3]<=r?[s[0]*s[1]*s[2],s[3]]:4===s.length&&s[0]<=r&&s[1]*s[2]*s[3]<=r?[s[0],s[1]*s[2]*s[3]]:n?sizeToSquarishShape(i/4).map((t=>2*t)):sizeToSquarishShape(i)}}}}),CoordsGlslLib,init_glsl_coordinate_lib=__esm({"web/lib/onnxjs/backends/webgl/glsl-coordinate-lib.ts"(){init_util(),init_glsl_definitions(),init_glsl_source(),init_texture_layout_strategy(),init_utils(),CoordsGlslLib=class extends GlslLib{constructor(t){super(t)}getFunctions(){return{...this.offsetToCoords(),...this.coordsToOffset(),...this.toVec(),...this.valueFrom(),...this.getCommonUtilFuncs(),...this.getInputsSamplingSnippets(),...this.getOutputSamplingSnippet()}}getCustomTypes(){return{}}offsetToCoords(){return{offsetToCoords:new GlslLibRoutine("\n      vec2 offsetToCoords(int offset, int width, int height) {\n        int t = offset / width;\n        int s = offset - t*width;\n        vec2 coords = (vec2(s,t) + vec2(0.5,0.5)) / vec2(width, height);\n        return coords;\n      }\n      ")}}coordsToOffset(){return{coordsToOffset:new GlslLibRoutine("\n      int coordsToOffset(vec2 coords, int width, int height) {\n        float s = coords.s * float(width);\n        float t = coords.t * float(height);\n        int offset = int(t) * width + int(s);\n        return offset;\n      }\n      ")}}getOutputSamplingSnippet(){const t=this.context.outputTextureLayout;return t.isPacked?this.getPackedOutputSamplingSnippet(t):this.getUnpackedOutputSamplingSnippet(t)}getPackedOutputSamplingSnippet(t){const e=t.unpackedShape,n=[t.width,t.height],r={},s="getOutputCoords";switch(e.length){case 0:r[s]=this.getOutputScalarCoords();break;case 1:r[s]=this.getOutputPacked1DCoords(e,n);break;case 2:r[s]=this.getOutputPacked2DCoords(e,n);break;case 3:r[s]=this.getOutputPacked3DCoords(e,n);break;default:r[s]=this.getOutputPackedNDCoords(e,n)}const i=`\n      void setOutput(vec4 val) {\n        ${getGlsl(this.context.glContext.version).output} = val;\n      }\n    `;return r.floatTextureSetRGBA=new GlslLibRoutine(i),r}getUnpackedOutputSamplingSnippet(t){const e=t.unpackedShape,n=[t.width,t.height],r={},s="getOutputCoords";switch(e.length){case 0:r[s]=this.getOutputScalarCoords();break;case 1:r[s]=this.getOutputUnpacked1DCoords(e,n);break;case 2:r[s]=this.getOutputUnpacked2DCoords(e,n);break;case 3:r[s]=this.getOutputUnpacked3DCoords(e,n);break;case 4:r[s]=this.getOutputUnpacked4DCoords(e,n);break;case 5:r[s]=this.getOutputUnpacked5DCoords(e,n);break;case 6:r[s]=this.getOutputUnpacked6DCoords(e,n);break;default:throw new Error(`Unsupported output dimensionality: ${e.length}`)}const i=`\n        void setOutput(float val) {\n          ${getGlsl(this.context.glContext.version).output} = vec4(val, 0, 0, 0);\n        }\n    `;return r.floatTextureSetR=new GlslLibRoutine(i),r}getOutputScalarCoords(){return new GlslLibRoutine("\n      int getOutputCoords() {\n        return 0;\n      }\n    ")}getOutputPacked1DCoords(t,e){const n=e;let r="";return 1===n[0]?(r=`\n          int getOutputCoords() {\n            return 2 * int(TexCoords.y * ${n[1]}.0);\n          }\n        `,new GlslLibRoutine(r)):1===n[1]?(r=`\n          int getOutputCoords() {\n            return 2 * int(TexCoords.x * ${n[0]}.0);\n          }\n        `,new GlslLibRoutine(r)):(r=`\n        int getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                 vec2(${n[0]}, ${n[1]}));\n          return 2 * (resTexRC.y * ${n[0]} + resTexRC.x);\n        }\n      `,new GlslLibRoutine(r))}getOutputPacked2DCoords(t,e){let n="";if(ArrayUtil.arraysEqual(t,e))return n=`\n        ivec2 getOutputCoords() {\n          return 2 * ivec2(TexCoords.xy * vec2(${e[0]}, ${e[1]}));\n        }\n      `,new GlslLibRoutine(n);const r=e,s=Math.ceil(t[1]/2);return n=`\n        ivec2 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${r[0]}, ${r[1]}));\n\n          int index = resTexRC.y * ${r[0]} + resTexRC.x;\n\n          // reverse r and c order for packed texture\n          int r = imod(index, ${s}) * 2;\n          int c = 2 * (index / ${s});\n\n          return ivec2(r, c);\n        }\n      `,new GlslLibRoutine(n)}getOutputPacked3DCoords(t,e){const n=[e[0],e[1]],r=Math.ceil(t[2]/2),s=r*Math.ceil(t[1]/2);return new GlslLibRoutine(`\n        ivec3 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${n[0]}, ${n[1]}));\n          int index = resTexRC.y * ${n[0]} + resTexRC.x;\n\n          int b = index / ${s};\n          index -= b * ${s};\n\n          // reverse r and c order for packed texture\n          int r = imod(index, ${r}) * 2;\n          int c = 2 * (index / ${r});\n\n          return ivec3(b, r, c);\n        }\n      `)}getOutputPackedNDCoords(t,e){const n=[e[0],e[1]],r=Math.ceil(t[t.length-1]/2),s=r*Math.ceil(t[t.length-2]/2);let i=s,o="",a="b, r, c";for(let e=2;e<t.length-1;e++)i*=t[t.length-e-1],o=`\n      int b${e} = index / ${i};\n      index -= b${e} * ${i};\n    `+o,a=`b${e}, `+a;const l=`\n      ivec${t.length} getOutputCoords() {\n        ivec2 resTexRC = ivec2(TexCoords.xy *\n                              vec2(${n[0]}, ${n[1]}));\n        int index = resTexRC.y * ${n[0]} + resTexRC.x;\n\n        ${o}\n\n        int b = index / ${s};\n        index -= b * ${s};\n\n        // reverse r and c order for packed texture\n        int r = imod(index, ${r}) * 2;\n        int c = 2 * (index / ${r});\n\n        return ivec${t.length}(${a});\n      }\n    `;return new GlslLibRoutine(l)}getOutputUnpacked1DCoords(t,e){const n=`\n        int getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${e[0]}, ${e[1]}));\n          return resTexRC.y * ${e[0]} + resTexRC.x;\n        }\n      `;return new GlslLibRoutine(n)}getOutputUnpacked2DCoords(t,e){const n=`\n        ivec2 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${e[0]}, ${e[1]}));\n          int index = resTexRC.y * ${e[0]} + resTexRC.x;\n          int r = index / ${t[1]};\n          int c = index - r * ${t[1]};\n          return ivec2(r, c);\n        }\n      `;return new GlslLibRoutine(n)}getOutputUnpacked3DCoords(t,e){let n="";const r=t.length;let s=null;r<2&&(s=[]),s=new Array(r-1),s[r-2]=t[r-1];for(let e=r-3;e>=0;--e)s[e]=s[e+1]*t[e+1];const i=["r","c","d"],o=s.map(((t,e)=>`${`int ${i[e]} = index / ${t}`}; ${e===s.length-1?`int ${i[e+1]} = index - ${i[e]} * ${t}`:`index -= ${i[e]} * ${t}`};`)).join("");return n=`\n        ivec3 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${e[0]}, ${e[1]}));\n          int index = resTexRC.y * ${e[0]} + resTexRC.x;\n          ${o}\n          return ivec3(r, c, d);\n        }\n      `,new GlslLibRoutine(n)}getOutputUnpacked4DCoords(t,e){let n="";const r=t.length;let s=null;r<2&&(s=[]),s=new Array(r-1),s[r-2]=t[r-1];for(let e=r-3;e>=0;--e)s[e]=s[e+1]*t[e+1];const i=["r","c","d","d2"],o=s.map(((t,e)=>`${`int ${i[e]} = index / ${t}`}; ${e===s.length-1?`int ${i[e+1]} = index - ${i[e]} * ${t}`:`index -= ${i[e]} * ${t}`};`)).join("");return n=`\n      ivec4 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${e[0]}, ${e[1]}));\n          int index = resTexRC.y * ${e[0]} + resTexRC.x;\n          ${o}\n          return ivec4(r, c, d, d2);\n        }\n      `,new GlslLibRoutine(n)}getOutputUnpacked5DCoords(t,e){let n="";const r=t.length;let s=null;r<2&&(s=[]),s=new Array(r-1),s[r-2]=t[r-1];for(let e=r-3;e>=0;--e)s[e]=s[e+1]*t[e+1];const i=["r","c","d","d2","d3"],o=s.map(((t,e)=>`${`int ${i[e]} = index / ${t}`}; ${e===s.length-1?`int ${i[e+1]} = index - ${i[e]} * ${t}`:`index -= ${i[e]} * ${t}`};`)).join("");return n=`\n      ivec5 getOutputCoords() {\n          ivec2 resTexRC = ivec2(TexCoords.xy *\n                                vec2(${e[0]}, ${e[1]}));\n          int index = resTexRC.y * ${e[0]} + resTexRC.x;\n          ${o}\n          return ivec5(r, c, d, d2, d3);\n        }\n      `,new GlslLibRoutine(n)}getOutputUnpacked6DCoords(t,e){let n="";const r=t.length;let s=null;r<2&&(s=[]),s=new Array(r-1),s[r-2]=t[r-1];for(let e=r-3;e>=0;--e)s[e]=s[e+1]*t[e+1];const i=["r","c","d","d2","d3","d4"],o=s.map(((t,e)=>`${`int ${i[e]} = index / ${t}`}; ${e===s.length-1?`int ${i[e+1]} = index - ${i[e]} * ${t}`:`index -= ${i[e]} * ${t}`};`)).join("");return n=`\n     ivec6 getOutputCoords() {\n         ivec2 resTexRC = ivec2(TexCoords.xy *\n                               vec2(${e[0]}, ${e[1]}));\n         int index = resTexRC.y * ${e[0]} + resTexRC.x;\n         ${o}\n         return ivec6(r, c, d, d2, d3, d4);\n       }\n     `,new GlslLibRoutine(n)}getCommonUtilFuncs(){const t={};let e="uvFromFlat";t[e]=new GlslLibRoutine("\n    vec2 uvFromFlat(int texNumR, int texNumC, int index) {\n      int texC = index / texNumR;\n      int texR = index - texC * texNumR;\n      // TODO: swap texR, texC order in following function so row is corresponding to u and column is corresponding to\n      //       v.\n      return (vec2(texR, texC) + halfCR) / vec2(texNumR, texNumC);\n    }\n    "),e="packedUVfrom1D",t[e]=new GlslLibRoutine("\n      vec2 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      "),e="packedUVfrom2D",t[e]=new GlslLibRoutine("\n      vec2 packedUVfrom2D(int texNumR, int texNumC, int texelsInLogicalRow, 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      "),e="packedUVfrom3D",t[e]=new GlslLibRoutine("\n      vec2 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      "),e="sampleTexture";const n=getGlsl(this.context.glContext.version);return t[e]=new GlslLibRoutine(`\n        float sampleTexture(sampler2D textureSampler, vec2 uv) {\n            return ${n.texture2D}(textureSampler, uv).r;\n        }`),t}getInputsSamplingSnippets(){const t={},e=this.context.outputTextureLayout;return this.context.programInfo.inputNames.forEach(((n,r)=>{const s=this.context.inputTextureLayouts[r],i=generateShaderFuncNameFromInputSamplerName(n);s.isPacked?t[i]=this.getPackedSamplerFromInput(i,n,s):t[i]=this.getUnpackedSamplerFromInput(i,n,s);const o=generateShaderFuncNameFromInputSamplerNameAtOutCoords(n);s.unpackedShape.length<=e.unpackedShape.length&&(s.isPacked?t[o]=this.getPackedSamplerAtOutputCoords(o,s,e,n):t[o]=this.getUnpackedSamplerAtOutputCoords(o,s,e,n))})),t}getPackedSamplerAtOutputCoords(t,e,n,r){const s=e.unpackedShape,i=n.unpackedShape,o=generateShaderFuncNameFromInputSamplerName(r),a=s.length,l=i.length,F=BroadcastUtil.getBroadcastDims(s,i),U=getCoordsDataType(l),c=l-a;let u;const Q=getGlChannels();u=0===a?"":l<2&&F.length>=1?"coords = 0;":F.map((t=>`coords.${Q[t+c]} = 0;`)).join("\n");let d="";d=l<2&&a>0?"coords":s.map(((t,e)=>`coords.${Q[e+c]}`)).join(", ");let B="return outputValue;";const p=1===ShapeUtil.size(s),g=1===ShapeUtil.size(i);if(1!==a||p||g){if(p&&!g)B=1===l?"\n          return vec4(outputValue.x, outputValue.x, 0., 0.);\n        ":"\n          return vec4(outputValue.x);\n        ";else if(F.length){const t=a-2,e=a-1;F.indexOf(t)>-1&&F.indexOf(e)>-1?B="return vec4(outputValue.x);":F.indexOf(t)>-1?B="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":F.indexOf(e)>-1&&(B="return vec4(outputValue.xx, outputValue.zz);")}}else B="\n        return vec4(outputValue.xy, outputValue.xy);\n      ";const h=`\n        int lastDim = coords.${Q[l-1]};\n        coords.${Q[l-1]} = coords.${Q[l-2]};\n        coords.${Q[l-2]} = lastDim;\n      `;return new GlslLibRoutine(`\n      vec4 ${t}() {\n        ${U} coords = getOutputCoords();\n        ${h}\n        ${u}\n        vec4 outputValue = ${o}(${d});\n        ${B}\n      }\n    `,["coordinates.getOutputCoords"])}getUnpackedSamplerAtOutputCoords(t,e,n,r){const s=[n.width,n.height],i=[e.width,e.height],o=e.unpackedShape.length,a=n.unpackedShape.length,l=e.unpackedShape,F=n.unpackedShape,U=generateShaderFuncNameFromInputSamplerName(r);if(o===a&&ArrayUtil.arraysEqual(i,s)){return new GlslLibRoutine(`\n          float ${t}() {\n            return sampleTexture(${r}, TexCoords);\n          }\n        `,["coordinates.sampleTexture"])}const c=getCoordsDataType(a),u=BroadcastUtil.getBroadcastDims(l,F),Q=a-o;let d;const B=getGlChannels();d=0===o?"":a<2&&u.length>=1?"coords = 0;":u.map((t=>`coords.${B[t+Q]} = 0;`)).join("\n");let p="";p=a<2&&o>0?"coords":e.unpackedShape.map(((t,e)=>`coords.${B[e+Q]}`)).join(", ");return new GlslLibRoutine(`\n        float ${t}() {\n          ${c} coords = getOutputCoords();\n          ${d}\n          return ${U}(${p});\n        }\n      `,["coordinates.getOutputCoords"])}getPackedSamplerFromInput(t,e,n){switch(n.unpackedShape.length){case 0:return this.getPackedSamplerScalar(t,e);case 1:return this.getPackedSampler1D(t,e,n);case 2:return this.getPackedSampler2D(t,e,n);case 3:return this.getPackedSampler3D(t,e,n);default:return this.getPackedSamplerND(t,e,n)}}getUnpackedSamplerFromInput(t,e,n){const r=n.unpackedShape;switch(r.length){case 0:return this.getUnpackedSamplerScalar(t,e,n);case 1:return this.getUnpackedSampler1D(t,e,n);case 2:return this.getUnpackedSampler2D(t,e,n);case 3:return this.getUnpackedSampler3D(t,e,n);case 4:return this.getUnpackedSampler4D(t,e,n);case 5:return this.getUnpackedSampler5D(t,e,n);case 6:return this.getUnpackedSampler6D(t,e,n);default:throw new Error(`Unsupported dimension ${r.length}-D`)}}getPackedSamplerScalar(t,e){const n=`\n          vec4 ${t}() {\n            return ${getGlsl(this.context.glContext.version).texture2D}(${e}, halfCR);\n          }\n        `;return new GlslLibRoutine(n)}getPackedSampler1D(t,e,n){const r=[n.width,n.height],s=[r[1],r[0]],i=getGlsl(this.context.glContext.version),o=`vec4 ${t}(int index) {\n      vec2 uv = packedUVfrom1D(\n      ${s[0]}, ${s[1]}, index);\n      return ${i.texture2D}(${e}, uv);\n    }`;return new GlslLibRoutine(o,["coordinates.packedUVfrom1D"])}getPackedSampler2D(t,e,n){const r=n.unpackedShape,s=[n.width,n.height],i=getGlsl(this.context.glContext.version),o=s[0],a=s[1];if(null!=s&&ArrayUtil.arraysEqual(r,s)){const n=`vec4 ${t}(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}.0, ${o}.0);\n        return ${i.texture2D}(${e}, uv);\n      }`;return new GlslLibRoutine(n)}const l=s,F=Math.ceil(r[1]/2),U=`vec4 ${t}(int row, int col) {\n      vec2 uv = packedUVfrom2D(${l[1]}, ${l[0]}, ${F}, row, col);\n      return ${i.texture2D}(${e}, uv);\n    }`;return new GlslLibRoutine(U,["coordinates.packedUVfrom2D"])}getPackedSampler3D(t,e,n){const r=n.unpackedShape,s=[n.width,n.height],i=[s[0],s[1]],o=getGlsl(this.context.glContext.version);if(1===r[0]){const s=r.slice(1),i=[1,2],o=squeezeInputShape(r,s),a=["b","row","col"],l=JSON.parse(JSON.stringify(n));l.unpackedShape=o;const F=this.getPackedSamplerFromInput(t,e,l),U=`${F.routineBody}\n      vec4 ${t}(int b, int row, int col) {\n        return ${t}(${getSqueezedParams(a,i)});\n      } `;return new GlslLibRoutine(U,F.dependencies)}const a=i[0],l=i[1],F=Math.ceil(r[2]/2),U=`vec4 ${t}(int b, int row, int col) {\n      vec2 uv = packedUVfrom3D(\n        ${l}, ${a}, ${F*Math.ceil(r[1]/2)}, ${F}, b, row, col);\n      return ${o.texture2D}(${e}, uv);}`;return new GlslLibRoutine(U,["coordinates.packedUVfrom3D"])}getPackedSamplerND(t,e,n){const r=n.unpackedShape,s=r.length,i=[n.width,n.height],o=getGlsl(this.context.glContext.version),a=[i[0],i[1]],l=a[1],F=a[0],U=Math.ceil(r[s-1]/2);let c=U*Math.ceil(r[s-2]/2),u="int b, int row, int col",Q=`b * ${c} + (row / 2) * ${U} + (col / 2)`;for(let t=2;t<s-1;t++)u=`int b${t}, `+u,c*=r[s-t-1],Q=`b${t} * ${c} + `+Q;const d=`vec4 ${t}(${u}) {\n      int index = ${Q};\n      int texR = index / ${F};\n      int texC = index - texR * ${F};\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${F}, ${l});\n      return ${o.texture2D}(${e}, uv);\n    }`;return new GlslLibRoutine(d)}getUnpackedSamplerScalar(t,e,n){const[r,s]=[n.width,n.height];if(1===r&&1===s){return new GlslLibRoutine(`\n          float ${t}() {\n            return sampleTexture(${e}, halfCR);\n          }\n        `,["coordinates.sampleTexture"])}return new GlslLibRoutine(`\n        float ${t}() {\n          int offset_${e} = coordsToOffset(TexCoords, ${r}, ${s});\n          vec2 uv = uvFromFlat(${r}, ${s}, offset_${e});\n          return sampleTexture(${e}, uv);\n        }\n      `,["coordinates.uvFromFlat","coordinates.sampleTexture","coordinates.coordsToOffset"])}getUnpackedSampler1D(t,e,n){const r=n.width,s=n.height;if(1===s&&1===r){return new GlslLibRoutine(`\n        float ${t}(int index) {\n          return sampleTexture(${e}, halfCR);\n        }\n      `,["coordinates.sampleTexture"])}if(1===s){return new GlslLibRoutine(`\n          float ${t}(int index) {\n            vec2 uv = vec2((float(index) + 0.5) / ${r}.0, 0.5);\n            return sampleTexture(${e}, uv);\n          }\n        `,["coordinates.sampleTexture"])}if(1===r){return new GlslLibRoutine(`\n          float ${t}(int index) {\n            vec2 uv = vec2(0.5, (float(index) + 0.5) / ${s}.0);\n            return sampleTexture(${e}, uv);\n          }\n        `,["coordinates.sampleTexture"])}return new GlslLibRoutine(`\n        float ${t}(int index) {\n          vec2 uv = uvFromFlat(${r}, ${s}, index);\n          return sampleTexture(${e}, uv);\n        }\n      `,["coordinates.uvFromFlat","coordinates.sampleTexture"])}getUnpackedSampler2D(t,e,n){const r=n.unpackedShape,s=[n.height,n.width];if(null!=s&&ArrayUtil.arraysEqual(r,s)){return new GlslLibRoutine(`\n          float ${t}(int row, int col) {\n            vec2 uv = (vec2(row, col) + halfCR) / vec2(${s[1]}.0, ${s[0]}.0);\n            return sampleTexture(${e}, uv);\n          }\n        `,["coordinates.sampleTexture"])}const{newShape:i,keptDims:o}=squeezeShape(r),a=i;if(a.length<r.length){const s=squeezeInputShape(r,a),i=JSON.parse(JSON.stringify(n));i.unpackedShape=s;const l=["col","row"],F=`\n          ${this.getUnpackedSamplerFromInput(t,e,i).routineBody}\n          float ${t}(int row, int col) {\n            return ${t}(${getSqueezedParams(l,o)});\n          }\n        `;return new GlslLibRoutine(F,["coordinates.sampleTexture"])}const l=s[1],F=s[0];if(1===F){const n=`\n          float ${t}(int row, int col) {\n            int offset_${e} = coordsToOffset(TexCoords, ${l}, ${F});\n            float index = dot(vec3(row, col, offset_${e}), vec3(${r[1]}, 1, 1));\n            vec2 uv = vec2(0.5, (index + 0.5) / ${l}.0);\n            return sampleTexture(${e}, uv);\n          }\n        `;return new GlslLibRoutine(n,["coordinates.sampleTexture","coordinates.coordsToOffset"])}if(1===l){const n=`\n          float ${t}(int row, int col) {\n            int offset_${e} = coordsToOffset(TexCoords, ${l}, ${F});\n            float index = dot(vec3(row, col, offset_${e}), vec3(${r[1]}, 1, 1));\n            vec2 uv = vec2((index + 0.5) / ${F}.0, 0.5);\n            return sampleTexture(${e}, uv);\n          }\n        `;return new GlslLibRoutine(n,["coordinates.sampleTexture","coordinates.coordsToOffset"])}const U=`\n        float ${t}(int row, int col) {\n          int index = col * ${r[1]} + row;\n          vec2 uv = uvFromFlat(${l}, ${F}, index);\n          return sampleTexture(${e}, uv);\n        }\n      `;return new GlslLibRoutine(U,["coordinates.uvFromFlat","coordinates.sampleTexture","coordinates.coordsToOffset"])}getUnpackedSampler3D(t,e,n){const r=n.unpackedShape,s=r[1]*r[2],i=r[2],{newShape:o,keptDims:a}=squeezeShape(r),l=o;if(l.length<r.length){const s=squeezeInputShape(r,l),i=["batch","col","row"],o=JSON.parse(JSON.stringify(n));o.unpackedShape=s;const F=this.getUnpackedSamplerFromInput(t,e,o),U=a.reverse(),c=`\n          ${F.routineBody}\n          float ${t}(int batch, int row, int col) {\n            return ${t}(${getSqueezedParams(i,U)});\n          }\n        `;return new GlslLibRoutine(c,F.dependencies)}const F=n.width,U=n.height;return new GlslLibRoutine(`\n          float ${t}(int depth, int row, int col) {\n            // Explicitly use integer operations as dot() only works on floats.\n            int index = depth * ${s} + col * ${i} + row;\n            vec2 uv = uvFromFlat(${F}, ${U}, index);\n            return sampleTexture(${e}, uv);\n          }\n      `,["coordinates.uvFromFlat","coordinates.sampleTexture","coordinates.coordsToOffset"])}getUnpackedSampler4D(t,e,n){const r=n.unpackedShape,s=r[3],i=r[2]*s,o=r[1]*i,a=n.width,l=n.height;return new GlslLibRoutine(`\n        float ${t}(int row, int col, int depth, int depth2) {\n          int index = row * ${o} + col * ${i} +\n              depth2 * ${s} + depth;\n          vec2 uv = uvFromFlat(${a}, ${l}, index);\n          return sampleTexture(${e}, uv);\n        }\n      `,["coordinates.uvFromFlat","coordinates.sampleTexture"])}getUnpackedSampler5D(t,e,n){const r=n.unpackedShape,s=r[4],i=r[3]*s,o=r[2]*i,a=r[1]*o,{newShape:l,keptDims:F}=squeezeShape(r);if(l.length<r.length){const s=squeezeInputShape(r,l),i=["row","col","depth","depth2","depth3"],o=JSON.parse(JSON.stringify(n));o.unpackedShape=s;const a=`\n          ${this.getUnpackedSamplerFromInput(t,e,o).routineBody}\n          float ${t}(int row, int col, int depth, int depth2, int depth3) {\n            return ${t}(${getSqueezedParams(i,F)});\n          }\n        `;return new GlslLibRoutine(a,["coordinates.sampleTexture","coordinates.uvFromFlat"])}const U=n.width,c=n.height;return new GlslLibRoutine(`\n        float ${t}(int row, int col, int depth, int depth2, int depth3) {\n          int index = row * ${a} + col * ${o} + depth * ${i} +\n          depth3 * ${s} + depth2;\n          vec2 uv = uvFromFlat(${U}, ${c}, index);\n          return sampleTexture(${e}, uv);\n        }\n      `,["coordinates.sampleTexture","coordinates.uvFromFlat"])}getUnpackedSampler6D(t,e,n){const r=n.unpackedShape,s=r[5],i=r[4]*s,o=r[3]*i,a=r[2]*o,l=r[1]*a,{newShape:F,keptDims:U}=squeezeShape(r);if(F.length<r.length){const s=squeezeInputShape(r,F),i=["row","col","depth","depth2","depth3","depth4"],o=JSON.parse(JSON.stringify(n));o.unpackedShape=s;const a=`\n            ${this.getUnpackedSamplerFromInput(t,e,o).routineBody}\n            float ${t}(int row, int col, int depth,\n              int depth2, int depth3, int depth4) {\n              return ${t}(${getSqueezedParams(i,U)});\n            }\n          `;return new GlslLibRoutine(a,["coordinates.sampleTexture","coordinates.uvFromFlat"])}const c=n.width,u=n.height;return new GlslLibRoutine(`\n          float ${t}(int row, int col, int depth,\n            int depth2, int depth3, int depth4) {\n            int index = row * ${l} + col * ${a} + depth * ${o} +\n            depth2 * ${i} + depth3 * ${s} + depth4;\n            vec2 uv = uvFromFlat(${c}, ${u}, index);\n            return sampleTexture(${e}, uv);\n          }\n        `,["coordinates.uvFromFlat","coordinates.sampleTexture","coordinates.coordsToOffset"])}toVec(){const t=this.context.outputTextureLayout,e=t.shape.length,n=t.strides,r=t.width,s=t.height,i=[];for(let t=0;t<e-1;++t)i.push(`\n        c[${t}] = offset / ${n[t]};`),i.push(`\n        offset -= c[${t}] * ${n[t]};`);i.push(`\n        c[${e-1}] = offset;`);const o=`\n      void toVec(vec2 texCoords, out int c[${e}]) {\n        int offset = coordsToOffset(texCoords, ${r}, ${s});\n        ${i.join("")}\n      }\n      void toVec(int offset, out int c[${e}]) {\n        ${i.join("")}\n      }\n    `;return{toVec:new GlslLibRoutine(o,["coordinates.coordsToOffset"])}}valueFrom(){const t={};return this.context.programInfo.inputNames.forEach(((e,n)=>{const r=this.context.inputTextureLayouts[n],s=(r.unpackedShape.length>0?r.unpackedShape:r.shape).length;let i=`_${e}`;t[i]=new GlslLibRoutine(this.getValueFromSingle(e,s,r.width,r.height,!1),[`shapeUtils.indicesToOffset${i}`,"coordinates.offsetToCoords","fragcolor.getColorAsFloat"]),i+="_T",t[i]=new GlslLibRoutine(this.getValueFromSingle(e,s,r.width,r.height,!0),[`shapeUtils.indicesToOffset${i}`,"coordinates.offsetToCoords","fragcolor.getColorAsFloat"])})),t}getValueFromSingle(t,e,n,r,s){let i=`_${t}`;s&&(i+="_T");return`\n        float ${i}(int m[${e}]) {\n          int offset = indicesToOffset${i}(m);\n          vec2 coords = offsetToCoords(offset, ${n}, ${r});\n          float value = getColorAsFloat(${getGlsl(this.context.glContext.version).texture2D}(${t}, coords));\n          return value;\n        }\n        `}getPackedValueFrom(t,e,n,r,s){let i=`_${t}_Pack`;s&&(i+="_T");return`\n        vec4 ${i}(int m[${e}]) {\n          int offset = indicesToOffset_${t}(m);\n          vec2 coords = offsetToCoords(offset, ${n}, ${r});\n          return ${getGlsl(this.context.glContext.version).texture2D}(${t}, coords);\n        }\n        `}}}}),EncodingGlslLib,init_glsl_encoding_lib=__esm({"web/lib/onnxjs/backends/webgl/glsl-encoding-lib.ts"(){init_glsl_definitions(),EncodingGlslLib=class t extends GlslLib{constructor(t){super(t)}getFunctions(){return{...this.encodeFloat32(),...this.decodeFloat32()}}getCustomTypes(){return{}}encodeFloat32(){return{encode:new GlslLibRoutine("highp vec4 encode(highp float f) {\n        return vec4(f, 0.0, 0.0, 0.0);\n      }\n        ")}}decodeFloat32(){return{decode:new GlslLibRoutine("highp float decode(highp vec4 rgba) {\n        return rgba.r;\n      }\n        ")}}encodeUint8(){const e=t.isLittleEndian()?"rgba.rgba=rgba.abgr;":"";return{encode:new GlslLibRoutine(`\n      highp vec4 encode(highp float f) {\n        highp float F = abs(f);\n        highp float Sign = step(0.0,-f);\n        highp float Exponent = floor(log2(F));\n        highp float Mantissa = (exp2(- Exponent) * F);\n        Exponent = floor(log2(F) + 127.0) + floor(log2(Mantissa));\n        highp vec4 rgba;\n        rgba[0] = 128.0 * Sign  + floor(Exponent*exp2(-1.0));\n        rgba[1] = 128.0 * mod(Exponent,2.0) + mod(floor(Mantissa*128.0),128.0);\n        rgba[2] = floor(mod(floor(Mantissa*exp2(23.0 -8.0)),exp2(8.0)));\n        rgba[3] = floor(exp2(23.0)*mod(Mantissa,exp2(-15.0)));\n        ${e}\n        rgba = rgba / 255.0; // values need to be normalized to [0,1]\n        return rgba;\n    }\n        `)}}decodeUint8(){const e=t.isLittleEndian()?"rgba.rgba=rgba.abgr;":"";return{decode:new GlslLibRoutine(`\n        highp float decode(highp vec4 rgba) {\n          rgba = rgba * 255.0; // values need to be de-normalized from [0,1] to [0,255]\n          ${e}\n          highp float Sign = 1.0 - step(128.0,rgba[0])*2.0;\n          highp float Exponent = 2.0 * mod(rgba[0],128.0) + step(128.0,rgba[1]) - 127.0;\n          highp float Mantissa = mod(rgba[1],128.0)*65536.0 + rgba[2]*256.0 +rgba[3] + float(0x800000);\n          highp float Result =  Sign * exp2(Exponent) * (Mantissa * exp2(-23.0 ));\n          return Result;\n      }\n        `)}}static isLittleEndian(){const t=new ArrayBuffer(4),e=new Uint32Array(t),n=new Uint8Array(t);if(e[0]=3735928559,239===n[0])return!0;if(222===n[0])return!1;throw new Error("unknown endianness")}}}}),FragColorGlslLib,init_glsl_fragcolor_lib=__esm({"web/lib/onnxjs/backends/webgl/glsl-fragcolor-lib.ts"(){init_glsl_definitions(),init_glsl_source(),FragColorGlslLib=class extends GlslLib{constructor(t){super(t)}getFunctions(){return{...this.setFragColor(),...this.getColorAsFloat()}}getCustomTypes(){return{}}setFragColor(){const t=getGlsl(this.context.glContext.version);return{setFragColor:new GlslLibRoutine(`\n        void setFragColor(float value) {\n            ${t.output} = encode(value);\n        }\n        `,["encoding.encode"])}}getColorAsFloat(){return{getColorAsFloat:new GlslLibRoutine("\n        float getColorAsFloat(vec4 color) {\n            return decode(color);\n        }\n        ",["encoding.decode"])}}}}}),ShapeUtilsGlslLib,init_glsl_shape_utils_lib=__esm({"web/lib/onnxjs/backends/webgl/glsl-shape-utils-lib.ts"(){init_glsl_definitions(),ShapeUtilsGlslLib=class t extends GlslLib{constructor(t){super(t)}getFunctions(){return{...this.bcastIndex(),...this.bcastMatmulIndex(),...this.offsetToIndices(),...this.indicesToOffset(),...this.incrementIndices()}}getCustomTypes(){return{}}bcastIndex(){const t=this.context.outputTextureLayout.shape.length,e={};return this.context.programInfo.inputNames.forEach(((n,r)=>{const s=this.context.inputTextureLayouts[r].unpackedShape;if(s.length<=t){const r=s.length,i=t-r,o=`bcastIndices_${n}`;let a="";for(let t=0;t<r;++t)a+=`\n          realIndices[${t}] = int( mod(float(bcastedIndices[${i+t}]), ${s[t]}.0) );\n          `;const l=`\n        void ${o} (int bcastedIndices[${t}], out int realIndices[${r}]) {\n          ${a}\n        }\n        `;e[o]=new GlslLibRoutine(l)}})),e}bcastMatmulIndex(){const t=this.context.outputTextureLayout.shape.length,e={};return this.context.programInfo.inputNames.forEach(((n,r)=>{const s=this.context.inputTextureLayouts[r].shape;if(!(s.length<2||s.length>t)){const r=s.length,i=t-r,o=`bcastMatmulIndices_${n}`;let a="";for(let t=0;t<r-2;++t)a+=`\n          realIndices[${t}] = int( mod(float(bcastedIndices[${i+t}]), ${s[t]}.0) );\n          `;const l=`\n        void ${o}(int bcastedIndices[${t}], out int realIndices[${r}]) {\n          ${a}\n          realIndices[${r-1}] = bcastedIndices[${t-1}];\n          realIndices[${r-2}] = bcastedIndices[${t-2}];\n        }\n        `;e[o]=new GlslLibRoutine(l)}})),e}indicesToOffset(){const e={};return this.context.programInfo.inputNames.forEach(((n,r)=>{const s=this.context.inputTextureLayouts[r].shape,i=this.context.inputTextureLayouts[r].strides,o=s.length;let a=`indicesToOffset_${n}`;e[a]=new GlslLibRoutine(t.indexToOffsetSingle(a,o,i)),a=`indicesToOffset_${n}_T`,e[a]=new GlslLibRoutine(t.indexToOffsetSingle(a,o,i.slice().reverse()))})),e}static indexToOffsetSingle(t,e,n){let r="";for(let t=e-1;t>=0;--t)r+=`\n        offset += indices[${t}] * ${n[t]};\n        `;return`\n      int ${t}(int indices[${e}]) {\n        int offset = 0;\n        ${r}\n        return offset;\n      }\n      `}offsetToIndices(){const e={};return this.context.programInfo.inputNames.forEach(((n,r)=>{const s=this.context.inputTextureLayouts[r].shape,i=this.context.inputTextureLayouts[r].strides,o=s.length;let a=`offsetToIndices_${n}`;e[a]=new GlslLibRoutine(t.offsetToIndicesSingle(a,o,i)),a=`offsetToIndices_${n}_T`,e[a]=new GlslLibRoutine(t.offsetToIndicesSingle(a,o,i.slice().reverse()))})),e}static offsetToIndicesSingle(t,e,n){const r=[];for(let t=0;t<e-1;++t)r.push(`\n      indices[${t}] = offset / ${n[t]};`),r.push(`\n        offset -= indices[${t}] * ${n[t]};`);return r.push(`\n      indices[${e-1}] = offset;`),`\n      void ${t}(int offset, out int indices[${e}]) {\n        ${r.join("")}\n      }\n      `}incrementIndices(){const t={};return this.context.programInfo.inputNames.forEach(((e,n)=>{const r=this.context.inputTextureLayouts[n].shape,s=r.length,i=`incrementIndices_${e}`;let o="";for(let t=0;t<s;++t)o+=`\n        shape[${t}] = ${r[t]};`;const a=`\n        void ${i}(int axis, out int indices[${s}]) {\n          int shape[${s}];\n          ${o};\n          for(int i = ${s} -1 ; i >= 0; --i) {\n            if(i > axis) continue;\n            indices[i] += 1;\n            if(indices[i] < shape[i]) {\n              break;\n            }\n            indices[i] = 0;\n          }\n        }\n        `;t[i]=new GlslLibRoutine(a)})),t}}}}),VecGlslLib,init_glsl_vec_lib=__esm({"web/lib/onnxjs/backends/webgl/glsl-vec-lib.ts"(){init_glsl_definitions(),VecGlslLib=class extends GlslLib{constructor(t){super(t)}getCustomTypes(){return{}}getFunctions(){return{...this.binaryVecFunctions(),...this.copyVec(),...this.setVecItem(),...this.getVecItem()}}binaryVecFunctions(){const t=this.context.outputTextureLayout.shape.length,e={add:"+=",sub:"-=",mul:"*=",div:"/="},n={};for(const r in e){const s=`${r}Vec`;let i="";for(let n=0;n<t;++n)i+=`\n          dest[${n}] ${e[r]} src[${n}];\n          `;const o=`\n        void ${s}(int src[${t}], out int dest[${t}]) {\n          ${i}\n        }\n        `;n[s]=new GlslLibRoutine(o)}return n}copyVec(){const t=this.context.outputTextureLayout.shape.length;let e="";for(let n=0;n<t;++n)e+=`\n        dest[${n}] = src[${n}];\n        `;return{copyVec:new GlslLibRoutine(`\n      void copyVec(int src[${t}], out int dest[${t}]) {\n        ${e}\n      }\n      `)}}setVecItem(){const t=this.context.outputTextureLayout.shape.length;let e=`\n        if(index < 0)\n            index =${t} + index;\n        if (index == 0)\n            m[0] = value;\n        `;for(let n=1;n<t-1;++n)e+=`\n        else if (index == ${n})\n            m[${n}] = value;\n            `;e+=`\n        else\n            m[${t-1}] = value;\n        `;return{setVecItem:new GlslLibRoutine(`\n      void setVecItem(out int m[${t}], int index, int value) {\n        ${e}\n      }\n        `)}}getVecItem(){const t=this.context.outputTextureLayout.shape.length;let e=`\n        if(index < 0)\n            index = ${t} + index;\n        if (index == 0)\n            return m[0];\n      `;for(let n=1;n<t-1;++n)e+=`\n        else if (index == ${n})\n            return m[${n}];\n      `;e+=`\n        else\n            return m[${t-1}];\n        `;return{getVecItem:new GlslLibRoutine(`\n      int getVecItem(int m[${t}], int index) {\n        ${e}\n      }\n    `)}}}}}),glslRegistry,init_glsl_registered_libs=__esm({"web/lib/onnxjs/backends/webgl/glsl-registered-libs.ts"(){init_glsl_coordinate_lib(),init_glsl_encoding_lib(),init_glsl_fragcolor_lib(),init_glsl_shape_utils_lib(),init_glsl_vec_lib(),glslRegistry={encoding:EncodingGlslLib,fragcolor:FragColorGlslLib,vec:VecGlslLib,shapeUtils:ShapeUtilsGlslLib,coordinates:CoordsGlslLib}}}),GlslPreprocessor,init_glsl_preprocessor=__esm({"web/lib/onnxjs/backends/webgl/glsl-preprocessor.ts"(){init_glsl_definitions(),init_glsl_function_inliner(),init_glsl_registered_libs(),init_glsl_source(),GlslPreprocessor=class{constructor(t,e,n,r){this.libs={},this.glslLibRoutineDependencyGraph={},this.context=new GlslContext(t,e,n,r),Object.keys(glslRegistry).forEach((t=>{const e=new glslRegistry[t](this.context);this.libs[t]=e}));const s=this.glslLibRoutineDependencyGraph;for(const t in this.libs){const e=this.libs[t].getFunctions();for(const n in e){const r=t+"."+n;let i;s[r]?(i=s[r],i.routineBody=e[n].routineBody):(i=new GlslLibRoutineNode(r,e[n].routineBody),s[r]=i);const o=e[n].dependencies;if(o)for(let t=0;t<o.length;++t)if(s[o[t]])i.addDependency(s[o[t]]);else{const e=new GlslLibRoutineNode(o[t]);s[o[t]]=e,i.addDependency(e)}}}}preprocess(){const t=this.context.programInfo;let e=t.shaderSource;return this.context.programInfo.hasMain||(e=`${e}\n      ${getDefaultFragShaderMain(this.context.glContext.version,this.context.outputTextureLayout.shape.length)}`),e=replaceInlines(e),`${getFragShaderPreamble(this.context.glContext.version)}\n    ${this.getUniforms(t.inputNames,t.variables)}\n    ${this.getImports(e)}\n    ${e}`}getImports(t){const e=this.selectGlslLibRoutinesToBeIncluded(t);if(0===e.length)return"";let n="";for(let t=0;t<e.length;++t){if(!e[t].routineBody)throw new Error(`Missing body for the Glsl Library routine: ${e[t].name}`);n+=e[t].routineBody+"\n"}return n}selectGlslLibRoutinesToBeIncluded(t){const e=[];return Object.keys(this.glslLibRoutineDependencyGraph).forEach((n=>{const r=n.split(".")[1];-1!==t.indexOf(r)&&e.push(this.glslLibRoutineDependencyGraph[n])})),TopologicalSortGlslRoutines.returnOrderedNodes(e)}getUniforms(t,e){const n=[];if(t)for(const e of t)n.push(`uniform sampler2D ${e};`);if(e)for(const t of e)n.push(`uniform ${t.type} ${t.name}${t.arrayLength?`[${t.arrayLength}]`:""};`);return n.join("\n")}}}}),ProgramManager,init_program_manager=__esm({"web/lib/onnxjs/backends/webgl/program-manager.ts"(){init_esm(),init_instrument(),init_glsl_preprocessor(),init_glsl_source(),ProgramManager=class{constructor(t,e,n){this.profiler=t,this.glContext=e,this.textureLayoutStrategy=n,this.repo=new Map,this.attributesBound=!1}getArtifact(t){return this.repo.get(t)}setArtifact(t,e){this.repo.set(t,e)}run(t,e,n){this.profiler.event("op",`ProgramManager.run ${t.programInfo.name??"unknown kernel"}`,(()=>{const r=this.glContext.gl,s=t.program;r.useProgram(s);try{this.bindOutput(n),this.attributesBound||this.bindAttributes(t.attribLocations),this.bindUniforms(t.uniformLocations,t.programInfo.variables??[],e)}catch(e){throw Logger.error("ProgramManager",t.programInfo.shaderSource),e}this.profiler.event("backend","GlContext.draw()",(()=>{this.glContext.draw()}))}),this.glContext)}dispose(){this.vertexShader&&this.glContext.deleteShader(this.vertexShader),this.repo.forEach((t=>this.glContext.deleteProgram(t.program)))}build(t,e,n){return this.profiler.event("backend","ProgramManager.build",(()=>{const r=new GlslPreprocessor(this.glContext,t,e,n),s=r.preprocess(),i=this.compile(s);return{programInfo:t,program:i,uniformLocations:this.getUniformLocations(i,r.context.programInfo.inputNames,r.context.programInfo.variables),attribLocations:this.getAttribLocations(i)}}))}compile(t){if(!this.vertexShader){Logger.verbose("ProrgramManager","Compiling and caching Vertex shader for the first time");const t=getVertexShaderSource(this.glContext.version);this.vertexShader=this.glContext.compileShader(t,this.glContext.gl.VERTEX_SHADER)}env2.debug&&Logger.verbose("ProrgramManager",`FragShader:\n${t}\n`);const e=this.glContext.compileShader(t,this.glContext.gl.FRAGMENT_SHADER),n=this.glContext.createProgram(this.vertexShader,e);return this.glContext.deleteShader(e),n}bindOutput(t){const e=t.width,n=t.height;Logger.verbose("ProrgramManager",`Binding output texture to Framebuffer: w/h=${e}/${n}, shape=${t.shape}, type=${t.tensor.type}`),this.glContext.attachFramebuffer(t.texture,e,n)}bindAttributes(t){const e=t.position,n=t.textureCoord;this.glContext.setVertexAttributes(e,n),this.attributesBound=!0}bindUniforms(t,e,n){const r=this.glContext.gl;let s=0;for(const{name:i,type:o,location:a,arrayLength:l}of t){const t=e.find((t=>t.name===i))?.data;if("sampler2D"!==o&&!t)throw new Error(`variable '${i}' does not have data defined in program info`);switch(o){case"sampler2D":this.bindTexture(n[s],a,s),s++;break;case"float":l?r.uniform1fv(a,t):r.uniform1f(a,t);break;case"int":l?r.uniform1iv(a,t):r.uniform1i(a,t);break;default:throw new Error(`Uniform not implemented: ${o}`)}}}bindTexture(t,e,n){this.glContext.bindTextureToUniform(t.texture,n,e)}getAttribLocations(t){return{position:this.getAttribLocation(t,"position"),textureCoord:this.getAttribLocation(t,"textureCoord")}}getUniformLocations(t,e,n){const r=[];if(e)for(const n of e)r.push({name:n,type:"sampler2D",location:this.getUniformLocation(t,n)});if(n)for(const e of n)r.push({...e,location:this.getUniformLocation(t,e.name)});return r}getUniformLocation(t,e){const n=this.glContext.gl.getUniformLocation(t,e);if(null===n)throw new Error(`Uniform ${e} not found.`);return n}getAttribLocation(t,e){return this.glContext.gl.getAttribLocation(t,e)}}}}),TextureManager,init_texture_manager=__esm({"web/lib/onnxjs/backends/webgl/texture-manager.ts"(){init_instrument(),init_texture_data_encoder(),TextureManager=class{constructor(t,e,n,r){this.glContext=t,this.layoutStrategy=e,this.profiler=n,this.config=r,this.pendingRead=new Map,r.reuseTextures&&(this.inUseTextures=new Map,this.idleTextures=new Map,this.textureLookup=new Map)}createTextureFromLayout(t,e,n,r){const s=this.toEncoderType(t),i=this.glContext.getEncoder(s,e.channels||1,r);if(e.isPacked&&1===r)throw new Error("not implemented");const o=e.width,a=e.height;let l,F;if(this.config.reuseTextures){l=`${o}x${a}_${i.format}_${i.internalFormat}_${i.textureType}`,F=this.inUseTextures.get(l),F||(F=[],this.inUseTextures.set(l,F));const e=this.idleTextures.get(l);if(e&&e.length>0){const s=e.pop();return F.push(s),1===r&&this.glContext.updateTexture(s,o,a,i,this.toTextureData(t,n)),s}}Logger.verbose("TextureManager",`Creating new texture of size ${e.width}x${e.height}`);const U=this.glContext.allocateTexture(o,a,i,this.toTextureData(t,n));return this.config.reuseTextures&&(F.push(U),this.textureLookup.set(U,l)),U}readTexture(t,e,n){return n||(n=1),this.profiler.event("backend","TextureManager.readTexture",(()=>{const r=t.shape.reduce(((t,e)=>t*e))*n,s=this.glContext.readTexture(t.texture,t.width,t.height,r,this.toEncoderType(e),n);return this.toTensorData(e,s)}))}async readTextureAsync(t,e,n){const r=t.tensor.dataId;if(n||(n=1),this.pendingRead.has(r)){const t=this.pendingRead.get(r);return new Promise((e=>t?.push(e)))}return this.profiler.event("backend","TextureManager.readTextureAsync",(async()=>{this.pendingRead.set(r,[]);const s=t.shape.reduce(((t,e)=>t*e))*n;await this.glContext.createAndWaitForFence();const i=this.glContext.readTexture(t.texture,t.width,t.height,s,this.toEncoderType(e),n),o=this.toTensorData(e,i),a=this.pendingRead.get(r);return this.pendingRead.delete(r),a?.forEach((t=>t(o))),o}))}readUint8TextureAsFloat(t){return this.profiler.event("backend","TextureManager.readUint8TextureAsFloat",(()=>{const e=t.shape.reduce(((t,e)=>t*e)),n=this.glContext.readTexture(t.texture,t.width,t.height,4*e,"byte",4);return new Float32Array(n.buffer,n.byteOffset,e)}))}releaseTexture(t,e){let n;if(this.config.reuseTextures&&(n=this.textureLookup.get(t.texture),n)){e&&this.textureLookup.delete(n);const r=this.inUseTextures.get(n);if(r){const e=r.indexOf(t.texture);if(-1!==e){r.splice(e,1);let s=this.idleTextures.get(n);s||(s=[],this.idleTextures.set(n,s)),s.push(t.texture)}}}n&&!e||(Logger.verbose("TextureManager",`Deleting texture of size ${t.width}x${t.height}`),this.glContext.deleteTexture(t.texture))}toTensorData(t,e){switch(t){case"int16":return e instanceof Int16Array?e:Int16Array.from(e);case"int32":return e instanceof Int32Array?e:Int32Array.from(e);case"int8":return e instanceof Int8Array?e:Int8Array.from(e);case"uint16":return e instanceof Uint16Array?e:Uint16Array.from(e);case"uint32":return e instanceof Uint32Array?e:Uint32Array.from(e);case"uint8":case"bool":return e instanceof Uint8Array?e:Uint8Array.from(e);case"float32":return e instanceof Float32Array?e:Float32Array.from(e);case"float64":return e instanceof Float64Array?e:Float64Array.from(e);default:throw new Error(`TensorData type ${t} is not supported`)}}toTextureData(t,e){if(e)return e instanceof Float32Array?e:new Float32Array(e)}toEncoderType(t){return"float"}clearActiveTextures(){this.glContext.clearActiveTextures()}}}}),WebGLSessionHandler,init_session_handler=__esm({"web/lib/onnxjs/backends/webgl/session-handler.ts"(){init_instrument(),init_opset(),init_inference_handler(),init_op_resolve_rules(),init_program_manager(),init_texture_layout_strategy(),init_texture_manager(),WebGLSessionHandler=class{constructor(t,e){this.backend=t,this.context=e,this.layoutStrategy=new PreferLogicalStrategy(t.glContext.maxTextureSize),this.programManager=new ProgramManager(this.context.profiler,t.glContext,this.layoutStrategy),this.textureManager=new TextureManager(t.glContext,this.layoutStrategy,this.context.profiler,{reuseTextures:"full"===t.textureCacheMode}),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache=new Map,this.pack=t.pack,this.pack2unpackMap=new Map,this.unpack2packMap=new Map}createInferenceHandler(){return new WebGLInferenceHandler(this)}onGraphInitialized(t){const e=t.getValues().filter((t=>-1===t.from&&t.tensor)).map((t=>t.tensor.dataId));this.initializers=new Set(e)}isInitializer(t){return!!this.initializers&&this.initializers.has(t)}addInitializer(t){this.initializers.add(t)}getTextureData(t,e){return e?this.packedTextureDataCache.get(t):this.unpackedTextureDataCache.get(t)}setTextureData(t,e,n=!1){Logger.verbose("WebGLSessionHandler","Storing Texture data in cache"),n?this.packedTextureDataCache.set(t,e):this.unpackedTextureDataCache.set(t,e)}dispose(){this.programManager.dispose(),this.textureManager.clearActiveTextures(),this.packedTextureDataCache.forEach((t=>this.textureManager.releaseTexture(t,!0))),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache.forEach((t=>this.textureManager.releaseTexture(t,!0))),this.unpackedTextureDataCache=new Map}resolve(t,e,n){const r=resolveOperator(t,e,WEBGL_OP_RESOLVE_RULES);return{impl:r.opImpl,context:r.opInit?r.opInit(t,n):t}}}}}),WebGLContext;function linearSearchLastTrue(t){let e=0;for(;e<t.length;++e){if(!t[e]())break}return e-1}var init_webgl_context=__esm({"web/lib/onnxjs/backends/webgl/webgl-context.ts"(){init_esm(),init_texture_data_encoder(),init_texture_data_encoder(),init_utils(),WebGLContext=class{constructor(t,e){this.frameBufferBound=!1,this.itemsToPoll=[],this.gl=t,this.version=e,this.getExtensions(),this.vertexbuffer=this.createVertexbuffer(),this.framebuffer=this.createFramebuffer(),this.queryVitalParameters()}allocateTexture(t,e,n,r){const s=this.gl,i=s.createTexture();s.bindTexture(s.TEXTURE_2D,i),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE);const o=r?n.encode(r,t*e):null;return s.texImage2D(s.TEXTURE_2D,0,n.internalFormat,t,e,0,n.format,n.textureType,o),this.checkError(),i}updateTexture(t,e,n,r,s){const i=this.gl;i.bindTexture(i.TEXTURE_2D,t);const o=r.encode(s,e*n);i.texSubImage2D(i.TEXTURE_2D,0,0,0,e,n,r.format,r.textureType,o),this.checkError()}attachFramebuffer(t,e,n){const r=this.gl;r.bindTexture(r.TEXTURE_2D,t),r.bindFramebuffer(r.FRAMEBUFFER,this.framebuffer),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0),this.checkError(),r.viewport(0,0,e,n),r.scissor(0,0,e,n)}readTexture(t,e,n,r,s,i){const o=this.gl;i||(i=1),this.frameBufferBound||this.attachFramebuffer(t,e,n);const a=this.getEncoder(s,i),l=a.allocate(e*n);return o.bindTexture(o.TEXTURE_2D,t),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,t,0),o.readPixels(0,0,e,n,o.RGBA,a.textureType,l),this.checkError(),a.decode(l,r)}isFramebufferReady(){return!0}getActiveTexture(){const t=this.gl;return"TEXTURE"+(t.getParameter(this.gl.ACTIVE_TEXTURE)-t.TEXTURE0)}getTextureBinding(){return this.gl.getParameter(this.gl.TEXTURE_BINDING_2D)}getFramebufferBinding(){return this.gl.getParameter(this.gl.FRAMEBUFFER_BINDING)}setVertexAttributes(t,e){const n=this.gl;n.vertexAttribPointer(t,3,n.FLOAT,!1,20,0),n.enableVertexAttribArray(t),-1!==e&&(n.vertexAttribPointer(e,2,n.FLOAT,!1,20,12),n.enableVertexAttribArray(e)),this.checkError()}createProgram(t,e){const n=this.gl,r=n.createProgram();return n.attachShader(r,t),n.attachShader(r,e),n.linkProgram(r),r}compileShader(t,e){const n=this.gl,r=n.createShader(e);if(!r)throw new Error(`createShader() returned null with type ${e}`);if(n.shaderSource(r,t),n.compileShader(r),!1===n.getShaderParameter(r,n.COMPILE_STATUS))throw new Error(`Failed to compile shader: ${n.getShaderInfoLog(r)}\nShader source:\n${t}`);return r}deleteShader(t){this.gl.deleteShader(t)}bindTextureToUniform(t,e,n){const r=this.gl;r.activeTexture(r.TEXTURE0+e),this.checkError(),r.bindTexture(r.TEXTURE_2D,t),this.checkError(),r.uniform1i(n,e),this.checkError()}draw(){this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),this.checkError()}checkError(){if(env2.debug){const t=this.gl,e=t.getError();let n="";switch(e){case t.NO_ERROR:return;case t.INVALID_ENUM:n="INVALID_ENUM";break;case t.INVALID_VALUE:n="INVALID_VALUE";break;case t.INVALID_OPERATION:n="INVALID_OPERATION";break;case t.INVALID_FRAMEBUFFER_OPERATION:n="INVALID_FRAMEBUFFER_OPERATION";break;case t.OUT_OF_MEMORY:n="OUT_OF_MEMORY";break;case t.CONTEXT_LOST_WEBGL:n="CONTEXT_LOST_WEBGL";break;default:n=`Unknown WebGL Error: ${e.toString(16)}`}throw new Error(n)}}deleteTexture(t){this.gl.deleteTexture(t)}deleteProgram(t){this.gl.deleteProgram(t)}getEncoder(t,e,n=0){if(2===this.version)return new RedFloat32DataEncoder(this.gl,e);switch(t){case"float":return 1===n||this.isRenderFloat32Supported?new RGBAFloatDataEncoder(this.gl,e):new RGBAFloatDataEncoder(this.gl,e,this.textureHalfFloatExtension.HALF_FLOAT_OES);case"int":throw new Error("not implemented");case"byte":return new Uint8DataEncoder(this.gl,e);default:throw new Error(`Invalid dataType: ${t}`)}}clearActiveTextures(){const t=this.gl;for(let e=0;e<this.maxTextureImageUnits;++e)t.activeTexture(t.TEXTURE0+e),t.bindTexture(t.TEXTURE_2D,null)}dispose(){if(this.disposed)return;const t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteFramebuffer(this.framebuffer),t.bindBuffer(t.ARRAY_BUFFER,null),t.deleteBuffer(this.vertexbuffer),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),t.finish(),this.disposed=!0}createDefaultGeometry(){return new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0])}createVertexbuffer(){const t=this.gl,e=t.createBuffer();if(!e)throw new Error("createBuffer() returned null");const n=this.createDefaultGeometry();return t.bindBuffer(t.ARRAY_BUFFER,e),t.bufferData(t.ARRAY_BUFFER,n,t.STATIC_DRAW),this.checkError(),e}createFramebuffer(){const t=this.gl.createFramebuffer();if(!t)throw new Error("createFramebuffer returned null");return t}queryVitalParameters(){const t=this.gl;if(this.isFloatTextureAttachableToFrameBuffer=this.checkFloatTextureAttachableToFrameBuffer(),this.isRenderFloat32Supported=this.checkRenderFloat32(),this.isFloat32DownloadSupported=this.checkFloat32Download(),1===this.version&&!this.textureHalfFloatExtension&&!this.isRenderFloat32Supported)throw new Error("both float32 and float16 TextureType are not supported");this.isBlendSupported=!this.isRenderFloat32Supported||this.checkFloat32Blend(),this.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),this.maxTextureImageUnits=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),this.version}getExtensions(){2===this.version?(this.colorBufferFloatExtension=this.gl.getExtension("EXT_color_buffer_float"),this.disjointTimerQueryWebgl2Extension=this.gl.getExtension("EXT_disjoint_timer_query_webgl2")):(this.textureFloatExtension=this.gl.getExtension("OES_texture_float"),this.textureHalfFloatExtension=this.gl.getExtension("OES_texture_half_float"))}checkFloatTextureAttachableToFrameBuffer(){const t=this.gl,e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);const n=2===this.version?t.RGBA32F:t.RGBA;t.texImage2D(t.TEXTURE_2D,0,n,1,1,0,t.RGBA,t.FLOAT,null);const r=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,r),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e,0);const s=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(e),t.deleteFramebuffer(r),s}checkRenderFloat32(){if(2===this.version){if(!this.colorBufferFloatExtension)return!1}else if(!this.textureFloatExtension)return!1;return this.isFloatTextureAttachableToFrameBuffer}checkFloat32Download(){if(2===this.version){if(!this.colorBufferFloatExtension)return!1}else{if(!this.textureFloatExtension)return!1;if(!this.gl.getExtension("WEBGL_color_buffer_float"))return!1}return this.isFloatTextureAttachableToFrameBuffer}checkFloat32Blend(){const t=this.gl;let e,n,r,s,i;try{e=t.createTexture(),n=t.createFramebuffer(),t.bindTexture(t.TEXTURE_2D,e);const o=2===this.version?t.RGBA32F:t.RGBA;return t.texImage2D(t.TEXTURE_2D,0,o,1,1,0,t.RGBA,t.FLOAT,null),t.bindFramebuffer(t.FRAMEBUFFER,n),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e,0),t.enable(t.BLEND),r=t.createShader(t.VERTEX_SHADER),r?(t.shaderSource(r,"void main(){}"),t.compileShader(r),s=t.createShader(t.FRAGMENT_SHADER),!!s&&(t.shaderSource(s,"precision highp float;void main(){gl_FragColor=vec4(0.5);}"),t.compileShader(s),i=t.createProgram(),!!i&&(t.attachShader(i,r),t.attachShader(i,s),t.linkProgram(i),t.useProgram(i),t.drawArrays(t.POINTS,0,1),t.getError()===t.NO_ERROR))):!1}finally{t.disable(t.BLEND),i&&t.deleteProgram(i),r&&t.deleteShader(r),s&&t.deleteShader(s),n&&(t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteFramebuffer(n)),e&&(t.bindTexture(t.TEXTURE_2D,null),t.deleteTexture(e))}}beginTimer(){if(2===this.version&&this.disjointTimerQueryWebgl2Extension){const t=this.gl,e=this.disjointTimerQueryWebgl2Extension,n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}throw new Error("WebGL1 profiling currently not supported.")}endTimer(){if(2!==this.version||!this.disjointTimerQueryWebgl2Extension)throw new Error("WebGL1 profiling currently not supported");{const t=this.gl,e=this.disjointTimerQueryWebgl2Extension;t.endQuery(e.TIME_ELAPSED_EXT)}}isTimerResultAvailable(t){let e=!1,n=!1;if(2!==this.version||!this.disjointTimerQueryWebgl2Extension)throw new Error("WebGL1 profiling currently not supported");{const r=this.gl,s=this.disjointTimerQueryWebgl2Extension;e=r.getQueryParameter(t,r.QUERY_RESULT_AVAILABLE),n=r.getParameter(s.GPU_DISJOINT_EXT)}return e&&!n}getTimerResult(t){let e=0;if(2!==this.version)throw new Error("WebGL1 profiling currently not supported");{const n=this.gl;e=n.getQueryParameter(t,n.QUERY_RESULT),n.deleteQuery(t)}return e/1e6}async waitForQueryAndGetTime(t){return await repeatedTry((()=>this.isTimerResultAvailable(t))),this.getTimerResult(t)}async createAndWaitForFence(){const t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e;const n=t,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);return t.flush(),e=null===r?()=>!0:()=>{const t=n.clientWaitSync(r,0,0);return t===n.ALREADY_SIGNALED||t===n.CONDITION_SATISFIED},{query:r,isFencePassed:e}}async pollFence(t){return new Promise((e=>{this.addItemToPoll((()=>t.isFencePassed()),(()=>e()))}))}pollItems(){const t=linearSearchLastTrue(this.itemsToPoll.map((t=>t.isDoneFn)));for(let e=0;e<=t;++e){const{resolveFn:t}=this.itemsToPoll[e];t()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}async addItemToPoll(t,e){this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),this.itemsToPoll.length>1||await repeatedTry((()=>(this.pollItems(),0===this.itemsToPoll.length)))}}}}),cache;function createWebGLContext(t){let e;if(t&&"webgl2"!==t||!("webgl2"in cache)?t&&"webgl"!==t||!("webgl"in cache)||(e=cache.webgl):e=cache.webgl2,!e)try{e=createNewWebGLContext(createOffscreenCanvas(),t)}catch(n){e=createNewWebGLContext(createCanvas(),t)}t=t||1===e.version?"webgl":"webgl2";const n=e.gl;return cache[t]=e,n.isContextLost()?(delete cache[t],createWebGLContext(t)):(n.disable(n.DEPTH_TEST),n.disable(n.STENCIL_TEST),n.disable(n.BLEND),n.disable(n.DITHER),n.disable(n.POLYGON_OFFSET_FILL),n.disable(n.SAMPLE_COVERAGE),n.enable(n.SCISSOR_TEST),n.enable(n.CULL_FACE),n.cullFace(n.BACK),e)}function createNewWebGLContext(t,e){let n;const r={alpha:!1,depth:!1,antialias:!1,stencil:!1,preserveDrawingBuffer:!1,premultipliedAlpha:!1,failIfMajorPerformanceCaveat:!1};if((!e||"webgl2"===e)&&(n=t.getContext("webgl2",r),n))try{return new WebGLContext(n,2)}catch(t){Logger.warning("GlContextFactory",`failed to create WebGLContext using contextId 'webgl2'. Error: ${t}`)}if((!e||"webgl"===e)&&(n=t.getContext("webgl",r)||t.getContext("experimental-webgl",r),n))try{return new WebGLContext(n,1)}catch(t){Logger.warning("GlContextFactory",`failed to create WebGLContext using contextId 'webgl' or 'experimental-webgl'. Error: ${t}`)}throw new Error("WebGL is not supported")}function createCanvas(){if("undefined"==typeof document)throw new TypeError("failed to create canvas: document is not supported");const t=document.createElement("canvas");return t.width=1,t.height=1,t}function createOffscreenCanvas(){if("undefined"==typeof OffscreenCanvas)throw new TypeError("failed to create offscreen canvas: OffscreenCanvas is not supported");return new OffscreenCanvas(1,1)}var init_webgl_context_factory=__esm({"web/lib/onnxjs/backends/webgl/webgl-context-factory.ts"(){init_instrument(),init_webgl_context(),cache={}}}),WebGLBackend,init_backend_webgl=__esm({"web/lib/onnxjs/backends/backend-webgl.ts"(){init_esm(),init_instrument(),init_session_handler(),init_webgl_context_factory(),WebGLBackend=class{get contextId(){return env2.webgl.contextId}set contextId(t){env2.webgl.contextId=t}get matmulMaxBatchSize(){return env2.webgl.matmulMaxBatchSize}set matmulMaxBatchSize(t){env2.webgl.matmulMaxBatchSize=t}get textureCacheMode(){return env2.webgl.textureCacheMode}set textureCacheMode(t){env2.webgl.textureCacheMode=t}get pack(){return env2.webgl.pack}set pack(t){env2.webgl.pack=t}get async(){return env2.webgl.async}set async(t){env2.webgl.async=t}initialize(){try{return this.glContext=createWebGLContext(this.contextId),"number"!=typeof this.matmulMaxBatchSize&&(this.matmulMaxBatchSize=16),"string"!=typeof this.textureCacheMode&&(this.textureCacheMode="full"),"boolean"!=typeof this.pack&&(this.pack=!1),"boolean"!=typeof this.async&&(this.async=!1),Logger.setWithEnv(env2),env2.webgl.context||Object.defineProperty(env2.webgl,"context",{value:this.glContext.gl}),Logger.verbose("WebGLBackend",`Created WebGLContext: ${typeof this.glContext} with matmulMaxBatchSize: ${this.matmulMaxBatchSize}; textureCacheMode: ${this.textureCacheMode}; pack: ${this.pack}; async: ${this.async}.`),!0}catch(t){return Logger.warning("WebGLBackend",`Unable to initialize WebGLBackend. ${t}`),!1}}createSessionHandler(t){return new WebGLSessionHandler(this,t)}dispose(){this.glContext.dispose()}}}}),backendsCache,backend;async function resolveBackend2(t){if(!t)return resolveBackend2(["webgl"]);{const e="string"==typeof t?[t]:t;for(const t of e){const e=backendsCache.get(t);if(e)return e;const n=await tryLoadBackend(t);if(n)return n}}throw new Error("no available backend to use")}async function tryLoadBackend(t){const e=backend;if(void 0!==e[t]&&isBackend(e[t])){const n=e[t];let r=n.initialize();if("object"==typeof r&&"then"in r&&(r=await r),r)return backendsCache.set(t,n),n}}function isBackend(t){const e=t;return"initialize"in e&&"function"==typeof e.initialize&&"createSessionHandler"in e&&"function"==typeof e.createSessionHandler&&"dispose"in e&&"function"==typeof e.dispose}var init_backend2=__esm({"web/lib/onnxjs/backend.ts"(){init_backend_webgl(),backendsCache=new Map,backend={webgl:new WebGLBackend}}}),KernelOp,ExecutionPlan,init_execution_plan=__esm({"web/lib/onnxjs/execution-plan.ts"(){init_instrument(),KernelOp=class{constructor(t,e){this.op=t,this.node=e}},ExecutionPlan=class{constructor(t,e,n){this.graph=t,this.profiler=n,this.initialize(e)}initialize(t){this.profiler.event("session","ExecutionPlan.initialize",(()=>{const e=this.graph.getNodes();if(e.length!==t.length)throw new Error("The size of nodes and OPs do not match.");this._ops=t.map(((t,n)=>new KernelOp(t,e[n]))),this.reset(),this._starter=[],this._ops.forEach(((t,e)=>{let n=!0;for(const e of t.node.inputs)if(!this._values[e]&&-1===this.graph.getInputIndices().indexOf(e)){n=!1;break}n&&this._starter.push(e)}))}))}reset(){this._values=this.graph.getValues().map((t=>t.tensor))}async execute(t,e){return this.profiler.event("session","ExecutionPlan.execute",(async()=>{this.reset();const n=t.createInferenceHandler(),r=this.graph.getInputIndices();if(e.length!==r.length)throw new Error(`number of input tensors don't match the number of inputs to the model: actual: ${e.length} expected: ${r.length}`);e.forEach(((t,e)=>{const n=r[e];this._values[n]=t}));const s=this._starter.slice(0),i=this.graph.getValues(),o=this.graph.getNodes();let a=0;for(;a<s.length;){const t=s[a++],e=this._ops[t],r=e.node.inputs.map((t=>this._values[t]));if(-1!==r.indexOf(void 0))throw new Error(`unresolved input detected: op: ${e.node}`);const l=r;Logger.verbose("ExecPlan",`Runing op:${e.node.name} (${l.map(((t,n)=>`'${e.node.inputs[n]}': ${t.type}[${t.dims.join(",")}]`)).join(", ")})`);const F=await this.profiler.event("node",e.node.name,(async()=>e.op.impl(n,l,e.op.context)));if(F.length!==e.node.outputs.length)throw new Error("the size of output does not match model definition.");F.forEach(((t,n)=>{const r=e.node.outputs[n];if(this._values[r])throw new Error(`output [${r}] already has value: op:${e.node.name}`);this._values[r]=t}));const U=new Set;F.forEach(((t,n)=>{const r=e.node.outputs[n];for(const t of i[r].to){const e=o[t];let n=!0;for(const t of e.inputs)if(!this._values[t]){n=!1;break}n&&U.add(t)}})),s.push(...U)}const l=[];for(let t=0;t<this.graph.getOutputIndices().length;t++){const e=this.graph.getOutputIndices()[t],n=this._values[e];if(void 0===n)throw new Error(`required output [${e}] does not have value`);0===e?await n.getData():n.data,l.push(n)}return Logger.verbose("ExecPlan","disposing of inferenceHandler"),n.dispose(),l}))}}}}),import_onnx3,ortFbs2,Attribute,init_attribute=__esm({"web/lib/onnxjs/attribute.ts"(){init_ort_generated(),import_onnx3=__toESM(require_onnx()),init_tensor2(),init_util(),ortFbs2=onnxruntime.experimental.fbs,Attribute=class t{constructor(e){if(this._attributes=new Map,null!=e){for(const n of e)n instanceof import_onnx3.onnx.AttributeProto?this._attributes.set(n.name,[t.getValue(n),t.getType(n)]):n instanceof ortFbs2.Attribute&&this._attributes.set(n.name(),[t.getValue(n),t.getType(n)]);if(this._attributes.size<e.length)throw new Error("duplicated attribute names")}}set(t,e,n){this._attributes.set(t,[n,e])}delete(t){this._attributes.delete(t)}getFloat(t,e){return this.get(t,"float",e)}getInt(t,e){return this.get(t,"int",e)}getString(t,e){return this.get(t,"string",e)}getTensor(t,e){return this.get(t,"tensor",e)}getFloats(t,e){return this.get(t,"floats",e)}getInts(t,e){return this.get(t,"ints",e)}getStrings(t,e){return this.get(t,"strings",e)}getTensors(t,e){return this.get(t,"tensors",e)}get(t,e,n){const r=this._attributes.get(t);if(void 0===r){if(void 0!==n)return n;throw new Error(`required attribute not found: ${t}`)}if(r[1]!==e)throw new Error(`type mismatch: expected ${e} but got ${r[1]}`);return r[0]}static getType(t){const e=t instanceof import_onnx3.onnx.AttributeProto?t.type:t.type();switch(e){case import_onnx3.onnx.AttributeProto.AttributeType.FLOAT:return"float";case import_onnx3.onnx.AttributeProto.AttributeType.INT:return"int";case import_onnx3.onnx.AttributeProto.AttributeType.STRING:return"string";case import_onnx3.onnx.AttributeProto.AttributeType.TENSOR:return"tensor";case import_onnx3.onnx.AttributeProto.AttributeType.FLOATS:return"floats";case import_onnx3.onnx.AttributeProto.AttributeType.INTS:return"ints";case import_onnx3.onnx.AttributeProto.AttributeType.STRINGS:return"strings";case import_onnx3.onnx.AttributeProto.AttributeType.TENSORS:return"tensors";default:throw new Error(`attribute type is not supported yet: ${import_onnx3.onnx.AttributeProto.AttributeType[e]}`)}}static getValue(t){const e=t instanceof import_onnx3.onnx.AttributeProto?t.type:t.type();if(e===import_onnx3.onnx.AttributeProto.AttributeType.GRAPH||e===import_onnx3.onnx.AttributeProto.AttributeType.GRAPHS)throw new Error("graph attribute is not supported yet");const n=this.getValueNoCheck(t);if(e===import_onnx3.onnx.AttributeProto.AttributeType.INT&&LongUtil.isLong(n))return LongUtil.longToNumber(n);if(e===import_onnx3.onnx.AttributeProto.AttributeType.INTS){const t=n,e=new Array(t.length);for(let n=0;n<t.length;n++){const r=t[n];e[n]=LongUtil.longToNumber(r)}return e}if(e===import_onnx3.onnx.AttributeProto.AttributeType.TENSOR)return t instanceof import_onnx3.onnx.AttributeProto?Tensor3.fromProto(n):Tensor3.fromOrtTensor(n);if(e===import_onnx3.onnx.AttributeProto.AttributeType.TENSORS){if(t instanceof import_onnx3.onnx.AttributeProto){return n.map((t=>Tensor3.fromProto(t)))}if(t instanceof ortFbs2.Attribute){return n.map((t=>Tensor3.fromOrtTensor(t)))}}if(e===import_onnx3.onnx.AttributeProto.AttributeType.STRING&&t instanceof import_onnx3.onnx.AttributeProto){return decodeUtf8String(n)}if(e===import_onnx3.onnx.AttributeProto.AttributeType.STRINGS&&t instanceof import_onnx3.onnx.AttributeProto){return n.map(decodeUtf8String)}return n}static getValueNoCheck(t){return t instanceof import_onnx3.onnx.AttributeProto?this.getValueNoCheckFromOnnxFormat(t):this.getValueNoCheckFromOrtFormat(t)}static getValueNoCheckFromOnnxFormat(t){switch(t.type){case import_onnx3.onnx.AttributeProto.AttributeType.FLOAT:return t.f;case import_onnx3.onnx.AttributeProto.AttributeType.INT:return t.i;case import_onnx3.onnx.AttributeProto.AttributeType.STRING:return t.s;case import_onnx3.onnx.AttributeProto.AttributeType.TENSOR:return t.t;case import_onnx3.onnx.AttributeProto.AttributeType.GRAPH:return t.g;case import_onnx3.onnx.AttributeProto.AttributeType.FLOATS:return t.floats;case import_onnx3.onnx.AttributeProto.AttributeType.INTS:return t.ints;case import_onnx3.onnx.AttributeProto.AttributeType.STRINGS:return t.strings;case import_onnx3.onnx.AttributeProto.AttributeType.TENSORS:return t.tensors;case import_onnx3.onnx.AttributeProto.AttributeType.GRAPHS:return t.graphs;default:throw new Error(`unsupported attribute type: ${import_onnx3.onnx.AttributeProto.AttributeType[t.type]}`)}}static getValueNoCheckFromOrtFormat(t){switch(t.type()){case ortFbs2.AttributeType.FLOAT:return t.f();case ortFbs2.AttributeType.INT:return t.i();case ortFbs2.AttributeType.STRING:return t.s();case ortFbs2.AttributeType.TENSOR:return t.t();case ortFbs2.AttributeType.GRAPH:return t.g();case ortFbs2.AttributeType.FLOATS:return t.floatsArray();case ortFbs2.AttributeType.INTS:{const e=[];for(let n=0;n<t.intsLength();n++)e.push(t.ints(n));return e}case ortFbs2.AttributeType.STRINGS:{const e=[];for(let n=0;n<t.stringsLength();n++)e.push(t.strings(n));return e}case ortFbs2.AttributeType.TENSORS:{const e=[];for(let n=0;n<t.tensorsLength();n++)e.push(t.tensors(n));return e}default:throw new Error(`unsupported attribute type: ${ortFbs2.AttributeType[t.type()]}`)}}}}}),import_onnx4,ortFbs3,Graph,Value,Node,GraphImpl,init_graph=__esm({"web/lib/onnxjs/graph.ts"(){init_attribute(),init_ort_generated(),import_onnx4=__toESM(require_onnx()),init_tensor2(),init_util(),ortFbs3=onnxruntime.experimental.fbs,Graph={from:(t,e)=>new GraphImpl(t,e)},Value=class{constructor(t){this._from=void 0,this._to=[],this.tensor=void 0,this.type=void 0,t&&(this.type=ProtoUtil.tensorValueTypeFromProto(t.type.tensorType))}get from(){return this._from}get to(){return this._to}},Node=class{constructor(t,e){t instanceof import_onnx4.onnx.NodeProto?(this.name=t.name,this.opType=t.opType,this.attributes=new Attribute(t.attribute)):t instanceof ortFbs3.Node&&(this.name=e??t.name(),this.opType=t.opType(),this.attributes=new Attribute(ProtoUtil.tensorAttributesFromORTFormat(t))),this.inputs=[],this.outputs=[],this.executeNode=!0}},GraphImpl=class{constructor(t,e){if(!t)throw new TypeError("graph is empty");this.buildGraph(t),this.transformGraph(e),this.checkIsAcyclic()}getInputIndices(){return this._allInputIndices}getInputNames(){return this._allInputNames}getOutputIndices(){return this._allOutputIndices}getOutputNames(){return this._allOutputNames}getValues(){return this._allData}getNodes(){return this._nodes}buildGraph(t){if(t instanceof import_onnx4.onnx.GraphProto)this.buildGraphFromOnnxFormat(t);else{if(!(t instanceof ortFbs3.Graph))throw new TypeError("Graph type is not supported.");this.buildGraphFromOrtFormat(t)}}buildGraphFromOnnxFormat(t){const e=new Map;this._allData=[],this._allInputIndices=[],this._allInputNames=[],this._allOutputIndices=[],this._allOutputNames=[],this._nodes=[];const n=new Map;if(!t.input)throw new Error("missing information in graph: input");const r=[];for(const n of t.input){if(e.has(n.name))throw new Error(`duplicated input name: ${n.name}`);const t=this._allData.push(new Value(n))-1;e.set(n.name,t),r.push(n.name)}if(!t.initializer)throw new Error("missing information in graph: initializer");for(const n of t.initializer){let t=e.get(n.name);if(void 0===t){const r=new Value;r.type={shape:{dims:ProtoUtil.tensorDimsFromProto(n.dims)},tensorType:ProtoUtil.tensorDataTypeFromProto(n.dataType)},t=this._allData.push(r)-1,e.set(n.name,t)}this._allData[t]._from=-1,this._allData[t].tensor=Tensor3.fromProto(n)}for(let t=0;t<this._allData.length;t++)this._allData[t].tensor||(this._allInputIndices.push(t),this._allInputNames.push(r[t]));if(!t.output)throw new Error("missing information in graph: output");for(const n of t.output){if(e.has(n.name))throw new Error(`duplicated output name: ${n.name}`);const t=this._allData.push(new Value(n))-1;e.set(n.name,t),this._allOutputIndices.push(t),this._allOutputNames.push(n.name)}if(!t.node)throw new Error("missing information in graph: node");for(const e of t.node){if(!e.name)for(let t=0;;t++){const r=`unnamed_${e.opType}_${t}`;if(!n.has(r)){e.name=r;break}}if(n.has(e.name))throw new Error(`duplicated node name: ${e.name}`);const t=this._nodes.push(new Node(e))-1;n.set(e.name,t)}for(let n=0;n<this._nodes.length;n++){const r=this._nodes[n],s=t.node[n];if(!s.output)throw new Error(`missing output for node: ${s.name}`);for(const t of s.output){let i=e.get(t);if(void 0===i&&(i=this._allData.push(new Value)-1,e.set(t,i)),r.outputs.push(i),void 0!==this._allData[i]._from)throw new Error(`multiple nodes output to one data value: ${i}`);if(this._allData[i]._from=n,"Constant"===s.opType){if(!s.attribute||1!==s.attribute.length||!s.attribute[0].t)throw new Error("missing attributes or missing tensor value in attributes for this Constant operator");if(!s.output||1!==s.output.length)throw new Error("missing output or incorrect number of outputs for this Constant operator");r.outputs.pop(),r.executeNode=!1,this._allData[i]._from=-1,this._allData[i].tensor=Tensor3.fromProto(s.attribute[0].t)}}}for(let n=0;n<this._nodes.length;n++){const r=this._nodes[n],s=t.node[n];if(!s.input)throw new Error(`missing input for node: ${s.name}`);for(const t of s.input){const i=e.get(t);if(void 0===i){if(""===t&&(3===s.input.length||4===s.input.length)&&"Resize"===s.opType)continue;throw new Error(`unrecognized input '${t}' for node: ${s.name}`)}r.inputs.push(i),this._allData[i]._to.push(n)}}return!0}buildGraphFromOrtFormat(t){const e=new Map;this._allData=[],this._allInputIndices=[],this._allInputNames=[],this._allOutputIndices=[],this._allOutputNames=[],this._nodes=[];const n=new Map,r=[];for(let n=0;n<t.inputsLength();n++){const s=t.inputs(n);if(e.has(s))throw new Error(`duplicated input name: ${s}`);for(let n=0;n<t.nodeArgsLength();n++)if(t.nodeArgs(n)?.name()===s){const i=new Value,o=t.nodeArgs(n)?.type()?.valueType();if(o!==ortFbs3.TypeInfoValue.tensor_type)throw new Error("Unexpected value type for the nodeArg.");const a=t.nodeArgs(n).type().value(new ortFbs3.TensorTypeAndShape),l=ProtoUtil.tensorDataTypeFromProto(a.elemType()),F=a.shape(),U=[];for(let t=0;t<F.dimLength();t++)U.push(LongUtil.longToNumber(F.dim(t).value().dimValue()));i.type={shape:{dims:U},tensorType:l};const c=this._allData.push(i)-1;e.set(s,c),r.push(s)}}for(let n=0;n<t.initializersLength();n++){const r=t.initializers(n);let s=e.get(r.name());if(void 0===s){const t=new Value,n=ProtoUtil.tensorDimsFromORTFormat(r),i=ProtoUtil.tensorDataTypeFromProto(r.dataType());t.type={shape:{dims:n},tensorType:i},s=this._allData.push(t)-1,e.set(r.name(),s)}this._allData[s]._from=-1,this._allData[s].tensor=Tensor3.fromOrtTensor(r)}for(let t=0;t<this._allData.length;t++)this._allData[t].tensor||(this._allInputIndices.push(t),this._allInputNames.push(r[t]));for(let n=0;n<t.outputsLength();n++){const r=t.outputs(n);if(e.has(r))throw new Error(`duplicated output name: ${r}`);const s=this._allData.push(new Value)-1;e.set(r,s),this._allOutputIndices.push(s),this._allOutputNames.push(r)}if(!t.nodes)throw new Error("missing information in graph: node");for(let e=0;e<t.nodesLength();e++){const r=t.nodes(e);let s=r.name();if(!s)for(let t=0;s=`unnamed_${r.opType()}_${t}`,n.has(s);t++);if(n.has(s))throw new Error(`duplicated node name: ${s}`);const i=this._nodes.push(new Node(r,s))-1;n.set(s,i)}for(let n=0;n<this._nodes.length;n++){const r=this._nodes[n],s=t.nodes(n);if(null==s)throw new Error(`No node exists at index ${n}`);if(0===s?.outputsLength())throw new Error(`missing output for node: ${s.name}`);for(let t=0;t<s?.outputsLength();t++){const i=s?.outputs(t);let o=e.get(i);if(void 0===o&&(o=this._allData.push(new Value)-1,e.set(i,o)),r.outputs.push(o),void 0!==this._allData[o]._from)throw new Error(`multiple nodes output to one data value: ${o}`);if(this._allData[o]._from=n,"Constant"===s.opType()){if(1!==s.attributesLength()||!s.attributes(0).t())throw new Error("missing attributes or missing tensor value in attributes for this Constant operator");if(1!==s.outputsLength())throw new Error("missing output or incorrect number of outputs for this Constant operator");r.outputs.pop(),r.executeNode=!1,this._allData[o]._from=-1,this._allData[o].tensor=Tensor3.fromOrtTensor(s.attributes(0).t())}}}for(let n=0;n<this._nodes.length;n++){const r=this._nodes[n],s=t.nodes(n);if(0===s.inputsLength())throw new Error(`missing input for node: ${s.name}`);for(let t=0;t<s.inputsLength();t++){const i=s.inputs(t),o=e.get(i);if(void 0===o)throw new Error(`unrecognized input '${i}' for node: ${s.name()}`);r.inputs.push(o),this._allData[o]._to.push(n)}}}checkIsAcyclic(){const t=new Set;this._allInputIndices.forEach((e=>{this._allData[e]._to.forEach((e=>{t.add(e)}))}));const e=Array.from(t),n=new Array(this._nodes.length).fill("white");for(;e.length>0;){const t=e.pop();"gray"===n[t]?n[t]="black":(e.push(t),n[t]="gray",this._nodes[t].outputs.forEach((r=>{const s=this._allData[r];if(void 0!==s.tensor)throw new Error("node outputs should not be initialized");if(s._from!==t)throw new Error("from property of the Value object doesn't match index of Node being processed");s._to.forEach((t=>{if("gray"===n[t])throw new Error("model graph is cyclic");"white"===n[t]&&e.push(t)}))})))}}transformGraph(t){this.removeAllIdentityNodes(),this.removeAllDropoutNodes(),this.fuseConvActivationNodes(),t&&t.transformGraph(this),this.finalizeGraph()}finalizeGraph(){let t=0;const e=new Array(this._nodes.length,0);let n=0;for(let t=0;t<this._nodes.length;t++)e[t]=n,this._nodes[t].executeNode?(n!==t&&(this._nodes[n]=this._nodes[t]),n++):this._nodes[t].outputs.forEach((t=>{this._allData[t]._from=-2}));this._nodes.splice(n,this._nodes.length-n);for(let t=0;t<this._allData.length;t++){const n=this._allData[t];void 0!==n._from&&-1!==n._from&&-2!==n._from&&(n._from=e[n._from]);for(let t=0;t<n._to.length;t++){if(!(n._to[t]>=0))throw new Error("Trying to update a removed node");n._to[t]=e[n._to[t]]}}t=0;for(let e=0;e<this._allData.length;e++)if(-2!==this._allData[e].from||-1!==this._allOutputIndices.indexOf(e+t)){if(t>0){let n=-1;void 0!==this._allData[e].from&&-1!==this._allData[e].from?(n=this._nodes[this._allData[e].from].outputs.indexOf(e+t),-1!==n&&(this._nodes[this._allData[e].from].outputs[n]=e)):(n=this._allInputIndices.indexOf(e+t),-1!==n&&(this._allInputIndices[n]=e)),this._allData[e].to.forEach((r=>{n=this._nodes[r].inputs.indexOf(e+t),-1!==n&&(this._nodes[r].inputs[n]=e)})),0===this._allData[e].to.length&&(n=this._allOutputIndices.indexOf(e+t),-1!==n&&(this._allOutputIndices[n]=e))}}else t++,this._allData.splice(e,1),e--}deleteNode(t){const e=this._nodes[t];if(e.outputs.length>1)for(let t=1;t<e.outputs.length;t++)if(this._allData[e.outputs[t]].to.length>0)throw new Error("Node deletion with more than one output connected to other nodes is not supported. ");e.executeNode=!1;const n=e.inputs[0],r=e.outputs[0],s=this._allData[r].to;for(let n=0;n<e.inputs.length;n++){const r=this._allData[e.inputs[n]].to.indexOf(t);if(-1===r)throw new Error("The Value object doesn't have the current Node in it's 'to' property ");this._allData[e.inputs[n]].to.splice(r,1)}this._allData[r]._to=[];const i=this._allOutputIndices.indexOf(r);if(-1!==i&&(this._allOutputIndices[i]=n),s&&s.length>0)for(const t of s){const e=this._nodes[t].inputs.indexOf(r);if(-1===e)throw new Error("The Node object doesn't have the output Value in it's 'inputs' property ");this._nodes[t].inputs[e]=n,this._allData[n].to.push(t)}}removeAllDropoutNodes(){let t=0;for(const e of this._nodes){if("Dropout"===e.opType){if(1!==e.inputs.length)throw new Error("Dropout nodes should only contain one input. ");if(1!==e.outputs.length&&2!==e.outputs.length)throw new Error("Dropout nodes should contain either 1 or 2 output(s)");if(2===e.outputs.length&&0!==this._allData[e.outputs[1]]._to.length)throw new Error("Dropout nodes's second output should not be referenced by other nodes");this.deleteNode(t)}t++}}removeAllIdentityNodes(){let t=0;for(const e of this._nodes)"Identity"===e.opType&&this.deleteNode(t),t++}isActivation(t){switch(t.opType){case"Relu":case"Sigmoid":case"Clip":return!0;default:return!1}}fuseConvActivationNodes(){for(const t of this._nodes)if("Conv"===t.opType){const e=this._allData[t.outputs[0]]._to;if(1===e.length&&this.isActivation(this._nodes[e[0]])){const n=this._nodes[e[0]];if("Clip"===n.opType)if(1===n.inputs.length)try{t.attributes.set("activation_params","floats",[n.attributes.getFloat("min"),n.attributes.getFloat("max")])}catch(e){t.attributes.set("activation_params","floats",[MIN_CLIP,MAX_CLIP])}else{if(!(n.inputs.length>=3&&void 0!==this._allData[n.inputs[1]].tensor&&void 0!==this._allData[n.inputs[2]].tensor))continue;t.attributes.set("activation_params","floats",[this._allData[n.inputs[1]].tensor.floatData[0],this._allData[n.inputs[2]].tensor.floatData[0]])}t.attributes.set("activation","string",n.opType),this.deleteNode(e[0])}}}}}}),import_onnx5,ortFbs4,Model,init_model=__esm({"web/lib/onnxjs/model.ts"(){init_flatbuffers(),init_graph(),init_ort_generated(),import_onnx5=__toESM(require_onnx()),init_util(),ortFbs4=onnxruntime.experimental.fbs,Model=class{constructor(){}load(t,e,n){if(!n)try{return void this.loadFromOnnxFormat(t,e)}catch(t){if(void 0!==n)throw t}this.loadFromOrtFormat(t,e)}loadFromOnnxFormat(t,e){const n=import_onnx5.onnx.ModelProto.decode(t);if(LongUtil.longToNumber(n.irVersion)<3)throw new Error("only support ONNX model with IR_VERSION>=3");this._opsets=n.opsetImport.map((t=>({domain:t.domain,version:LongUtil.longToNumber(t.version)}))),this._graph=Graph.from(n.graph,e)}loadFromOrtFormat(t,e){const n=new flatbuffers.ByteBuffer(t),r=ortFbs4.InferenceSession.getRootAsInferenceSession(n).model();if(LongUtil.longToNumber(r.irVersion())<3)throw new Error("only support ONNX model with IR_VERSION>=3");this._opsets=[];for(let t=0;t<r.opsetImportLength();t++){const e=r.opsetImport(t);this._opsets.push({domain:e?.domain(),version:LongUtil.longToNumber(e.version())})}this._graph=Graph.from(r.graph(),e)}get graph(){return this._graph}get opsets(){return this._opsets}}}}),Session,init_session=__esm({"web/lib/onnxjs/session.ts"(){init_promises(),init_backend2(),init_execution_plan(),init_instrument(),init_model(),Session=class{constructor(t={}){this._initialized=!1,this.backendHint=t.backendHint,this.profiler=Profiler.create(t.profiler),this.context={profiler:this.profiler,graphInputTypes:[],graphInputDims:[]}}get inputNames(){return this._model.graph.getInputNames()}get outputNames(){return this._model.graph.getOutputNames()}startProfiling(){this.profiler.start()}endProfiling(){this.profiler.stop()}async loadModel(t,e,n){await this.profiler.event("session","Session.loadModel",(async()=>{const r=await resolveBackend2(this.backendHint);if(this.sessionHandler=r.createSessionHandler(this.context),this._model=new Model,"string"==typeof t){const e=t.endsWith(".ort");if("undefined"!=typeof process&&process.versions&&process.versions.node){const n=await readFile(t);this.initialize(n,e)}else{const n=await fetch(t),r=await n.arrayBuffer();this.initialize(new Uint8Array(r),e)}}else if(ArrayBuffer.isView(t))this.initialize(t);else{const r=new Uint8Array(t,e||0,n||t.byteLength);this.initialize(r)}}))}initialize(t,e){if(this._initialized)throw new Error("already initialized");this.profiler.event("session","Session.initialize",(()=>{const n=this.sessionHandler.transformGraph?this.sessionHandler:void 0;this._model.load(t,n,e),this.sessionHandler.onGraphInitialized&&this.sessionHandler.onGraphInitialized(this._model.graph),this.initializeOps(this._model.graph),this._executionPlan=new ExecutionPlan(this._model.graph,this._ops,this.profiler)})),this._initialized=!0}async run(t){if(!this._initialized)throw new Error("session not initialized yet");return this.profiler.event("session","Session.run",(async()=>{const e=this.normalizeAndValidateInputs(t),n=await this._executionPlan.execute(this.sessionHandler,e);return this.createOutput(n)}))}normalizeAndValidateInputs(t){const e=this._model.graph.getInputNames();if(Array.isArray(t)){if(t.length!==e.length)throw new Error(`incorrect input array length: expected ${e.length} but got ${t.length}`)}else{if(t.size!==e.length)throw new Error(`incorrect input map size: expected ${e.length} but got ${t.size}`);const n=new Array(t.size);let r=0;for(let s=0;s<e.length;++s){const i=t.get(e[s]);if(!i)throw new Error(`missing input tensor for: '${name}'`);n[r++]=i}t=n}if(this.context.graphInputTypes&&0!==this.context.graphInputTypes.length&&this.context.graphInputDims&&0!==this.context.graphInputDims.length)this.validateInputTensorDims(this.context.graphInputDims,t,!1);else{const e=this._model.graph.getInputIndices(),n=this._model.graph.getValues(),r=new Array(e.length);for(let s=0;s<e.length;++s){const i=n[e[s]];r[s]=i.type.shape.dims,this.context.graphInputTypes.push(i.type.tensorType),this.context.graphInputDims.push(t[s].dims)}this.validateInputTensorDims(r,t,!0)}return this.validateInputTensorTypes(this.context.graphInputTypes,t),t}validateInputTensorTypes(t,e){for(let n=0;n<e.length;n++){const r=t[n],s=e[n].type;if(r!==s)throw new Error(`input tensor[${n}] check failed: expected type '${r}' but got ${s}`)}}validateInputTensorDims(t,e,n){for(let r=0;r<e.length;r++){const s=t[r],i=e[r].dims;if(!this.compareTensorDims(s,i,n))throw new Error(`input tensor[${r}] check failed: expected shape '[${s.join(",")}]' but got [${i.join(",")}]`)}}compareTensorDims(t,e,n){if(t.length!==e.length)return!1;for(let r=0;r<t.length;++r)if(t[r]!==e[r]&&(!n||0!==t[r]))return!1;return!0}createOutput(t){const e=this._model.graph.getOutputNames();if(t.length!==e.length)throw new Error("expected number of outputs do not match number of generated outputs");const n=new Map;for(let r=0;r<e.length;++r)n.set(e[r],t[r]);return n}initializeOps(t){const e=t.getNodes();this._ops=new Array(e.length);for(let n=0;n<e.length;n++)this._ops[n]=this.sessionHandler.resolve(e[n],this._model.opsets,t)}}}}),OnnxjsSessionHandler,init_session_handler_inference=__esm({"web/lib/onnxjs/session-handler-inference.ts"(){init_esm(),init_tensor2(),OnnxjsSessionHandler=class{constructor(t){this.session=t,this.inputNames=this.session.inputNames,this.outputNames=this.session.outputNames}async dispose(){}async run(t,e,n){const r=new Map;for(const e in t)if(Object.hasOwnProperty.call(t,e)){const n=t[e];r.set(e,new Tensor3(n.dims,n.type,void 0,void 0,n.data))}const s=await this.session.run(r),i={};return s.forEach(((t,e)=>{i[e]=new Tensor2(t.type,t.data,t.dims)})),i}startProfiling(){this.session.startProfiling()}endProfiling(){this.session.endProfiling()}}}}),backend_onnxjs_exports={},OnnxjsBackend,onnxjsBackend;__export(backend_onnxjs_exports,{onnxjsBackend:()=>onnxjsBackend});var init_backend_onnxjs=__esm({"web/lib/backend-onnxjs.ts"(){init_session(),init_session_handler_inference(),onnxjsBackend=new(OnnxjsBackend=class{async init(){}async createInferenceSessionHandler(t,e){const n=new Session(e);return await n.loadModel(t),new OnnxjsSessionHandler(n)}})}}),cpus,init_node_os=__esm({"nodejs-ignore:node:os"(){cpus=void 0}}),join,init_node_path=__esm({"nodejs-ignore:node:path"(){join=void 0}}),fs_exports={},readFile2,readFileSync,createReadStream;__export(fs_exports,{createReadStream:()=>createReadStream,readFile:()=>readFile2,readFileSync:()=>readFileSync});var init_fs=__esm({"nodejs-ignore:fs"(){readFile2=void 0,readFileSync=void 0,createReadStream=void 0}}),path_exports={},join2;__export(path_exports,{join:()=>join2});var init_path=__esm({"nodejs-ignore:path"(){join2=void 0}}),require_ort_wasm=__commonJS({"web/lib/wasm/binding/ort-wasm.js"(t,e){var n,r=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,"undefined"!=typeof __filename&&(n=n||__filename),function(t={}){var e,r,s=t;s.ready=new Promise(((t,n)=>{e=t,r=n}));var i,o,a,l=Object.assign({},s),F="./this.program",U="object"==typeof window,c="function"==typeof importScripts,u="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,Q="";if(u){var d=(init_fs(),__toCommonJS(fs_exports)),B=(init_path(),__toCommonJS(path_exports));Q=c?B.dirname(Q)+"/":__dirname+"/",i=(t,e)=>(t=A(t)?new URL(t):B.normalize(t),d.readFileSync(t,e?void 0:"utf8")),a=t=>((t=i(t,!0)).buffer||(t=new Uint8Array(t)),t),o=(t,e,n,r=!0)=>{t=A(t)?new URL(t):B.normalize(t),d.readFile(t,r?void 0:"utf8",((t,s)=>{t?n(t):e(r?s.buffer:s)}))},!s.thisProgram&&1<process.argv.length&&(F=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),s.inspect=()=>"[Emscripten Module object]"}else(U||c)&&(c?Q=self.location.href:"undefined"!=typeof document&&document.currentScript&&(Q=document.currentScript.src),n&&(Q=n),Q=0!==Q.indexOf("blob:")?Q.substr(0,Q.replace(/[?#].*/,"").lastIndexOf("/")+1):"",i=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.send(null),e.responseText},c&&(a=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),o=(t,e,n)=>{var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?e(r.response):n()},r.onerror=n,r.send(null)});var p=console.log.bind(console),g=console.error.bind(console);Object.assign(s,l),l=null,"object"!=typeof WebAssembly&&G("no native wasm support detected");var h,b,f,m,x,y,S=!1;function I(){var t=h.buffer;s.HEAP8=b=new Int8Array(t),s.HEAP16=new Int16Array(t),s.HEAPU8=f=new Uint8Array(t),s.HEAPU16=new Uint16Array(t),s.HEAP32=m=new Int32Array(t),s.HEAPU32=x=new Uint32Array(t),s.HEAPF32=new Float32Array(t),s.HEAPF64=y=new Float64Array(t)}var L=[],R=[],E=[],C=0,T=null,V=null;function G(t){throw g(t="Aborted("+t+")"),S=!0,t=new WebAssembly.RuntimeError(t+". Build with -sASSERTIONS for more info."),r(t),t}var Z,w=t=>t.startsWith("data:application/octet-stream;base64,"),A=t=>t.startsWith("file://");if(!w(Z="ort-wasm.wasm")){var N=Z;Z=s.locateFile?s.locateFile(N,Q):Q+N}function v(t){if(a)return a(t);throw"both async and sync fetching of the wasm failed"}function W(t,e,n){return function(t){if(U||c){if("function"==typeof fetch&&!A(t))return fetch(t,{credentials:"same-origin"}).then((e=>{if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((()=>v(t)));if(o)return new Promise(((e,n)=>{o(t,(t=>e(new Uint8Array(t))),n)}))}return Promise.resolve().then((()=>v(t)))}(t).then((t=>WebAssembly.instantiate(t,e))).then((t=>t)).then(n,(t=>{g(`failed to asynchronously prepare wasm: ${t}`),G(t)}))}var _,P={919888:(t,e,n,r)=>{if(void 0===s||!s.za)return 1;if((t=Y(t>>>0)).startsWith("./")&&(t=t.substring(2)),!(t=s.za.get(t)))return 2;if((e>>>=0)+(n>>>=0)>t.byteLength)return 3;try{return f.set(t.subarray(e,e+n),r>>>0>>>0),0}catch{return 4}}};function O(t){this.xa=t-24,this.Ha=function(t){x[this.xa+4>>>2>>>0]=t},this.Ga=function(t){x[this.xa+8>>>2>>>0]=t},this.Aa=function(t,e){this.Fa(),this.Ha(t),this.Ga(e)},this.Fa=function(){x[this.xa+16>>>2>>>0]=0}}var k,X="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,D=(t,e,n)=>{var r=(e>>>=0)+n;for(n=e;t[n]&&!(n>=r);)++n;if(16<n-e&&t.buffer&&X)return X.decode(t.subarray(e,n));for(r="";e<n;){var s=t[e++];if(128&s){var i=63&t[e++];if(192==(224&s))r+=String.fromCharCode((31&s)<<6|i);else{var o=63&t[e++];65536>(s=224==(240&s)?(15&s)<<12|i<<6|o:(7&s)<<18|i<<12|o<<6|63&t[e++])?r+=String.fromCharCode(s):(s-=65536,r+=String.fromCharCode(55296|s>>10,56320|1023&s))}}else r+=String.fromCharCode(s)}return r},Y=(t,e)=>(t>>>=0)?D(f,t,e):"",J=t=>{for(var e=0,n=0;n<t.length;++n){var r=t.charCodeAt(n);127>=r?e++:2047>=r?e+=2:55296<=r&&57343>=r?(e+=4,++n):e+=3}return e},H=(t,e,n,r)=>{if(!(0<r))return 0;var s=n>>>=0;r=n+r-1;for(var i=0;i<t.length;++i){var o=t.charCodeAt(i);if(55296<=o&&57343>=o&&(o=65536+((1023&o)<<10)|1023&t.charCodeAt(++i)),127>=o){if(n>=r)break;e[n++>>>0]=o}else{if(2047>=o){if(n+1>=r)break;e[n++>>>0]=192|o>>6}else{if(65535>=o){if(n+2>=r)break;e[n++>>>0]=224|o>>12}else{if(n+3>=r)break;e[n++>>>0]=240|o>>18,e[n++>>>0]=128|o>>12&63}e[n++>>>0]=128|o>>6&63}e[n++>>>0]=128|63&o}}return e[n>>>0]=0,n-s},M=t=>0==t%4&&(0!=t%100||0==t%400),z=[0,31,60,91,121,152,182,213,244,274,305,335],j=[0,31,59,90,120,151,181,212,243,273,304,334],K=t=>{var e=J(t)+1,n=lt(e);return n&&H(t,f,n,e),n},$=[],q={},tt=()=>{if(!k){var t,e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:F||"./this.program"};for(t in q)void 0===q[t]?delete e[t]:e[t]=q[t];var n=[];for(t in e)n.push(`${t}=${e[t]}`);k=n}return k},et=[null,[],[]],nt=[31,29,31,30,31,30,31,31,30,31,30,31],rt=[31,28,31,30,31,30,31,31,30,31,30,31];function st(t,e,n,r){function s(t,e,n){for(t="number"==typeof t?t.toString():t||"";t.length<e;)t=n[0]+t;return t}function i(t,e){return s(t,e,"0")}function o(t,e){function n(t){return 0>t?-1:0<t?1:0}var r;return 0===(r=n(t.getFullYear()-e.getFullYear()))&&0===(r=n(t.getMonth()-e.getMonth()))&&(r=n(t.getDate()-e.getDate())),r}function a(t){switch(t.getDay()){case 0:return new Date(t.getFullYear()-1,11,29);case 1:return t;case 2:return new Date(t.getFullYear(),0,3);case 3:return new Date(t.getFullYear(),0,2);case 4:return new Date(t.getFullYear(),0,1);case 5:return new Date(t.getFullYear()-1,11,31);case 6:return new Date(t.getFullYear()-1,11,30)}}function l(t){var e=t.ta;for(t=new Date(new Date(t.ua+1900,0,1).getTime());0<e;){var n=t.getMonth(),r=(M(t.getFullYear())?nt:rt)[n];if(!(e>r-t.getDate())){t.setDate(t.getDate()+e);break}e-=r-t.getDate()+1,t.setDate(1),11>n?t.setMonth(n+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return n=new Date(t.getFullYear()+1,0,4),e=a(new Date(t.getFullYear(),0,4)),n=a(n),0>=o(e,t)?0>=o(n,t)?t.getFullYear()+1:t.getFullYear():t.getFullYear()-1}t>>>=0,e>>>=0,n>>>=0;var F=x[40+(r>>>=0)>>>2>>>0];for(var U in r={Da:m[r>>>2>>>0],Ca:m[r+4>>>2>>>0],va:m[r+8>>>2>>>0],ya:m[r+12>>>2>>>0],wa:m[r+16>>>2>>>0],ua:m[r+20>>>2>>>0],oa:m[r+24>>>2>>>0],ta:m[r+28>>>2>>>0],Ia:m[r+32>>>2>>>0],Ba:m[r+36>>>2>>>0],Ea:F?Y(F):""},n=Y(n),F={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"})n=n.replace(new RegExp(U,"g"),F[U]);var c="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),u="January February March April May June July August September October November December".split(" ");for(U in F={"%a":t=>c[t.oa].substring(0,3),"%A":t=>c[t.oa],"%b":t=>u[t.wa].substring(0,3),"%B":t=>u[t.wa],"%C":t=>i((t.ua+1900)/100|0,2),"%d":t=>i(t.ya,2),"%e":t=>s(t.ya,2," "),"%g":t=>l(t).toString().substring(2),"%G":t=>l(t),"%H":t=>i(t.va,2),"%I":t=>(0==(t=t.va)?t=12:12<t&&(t-=12),i(t,2)),"%j":t=>{for(var e=0,n=0;n<=t.wa-1;e+=(M(t.ua+1900)?nt:rt)[n++]);return i(t.ya+e,3)},"%m":t=>i(t.wa+1,2),"%M":t=>i(t.Ca,2),"%n":()=>"\n","%p":t=>0<=t.va&&12>t.va?"AM":"PM","%S":t=>i(t.Da,2),"%t":()=>"\t","%u":t=>t.oa||7,"%U":t=>i(Math.floor((t.ta+7-t.oa)/7),2),"%V":t=>{var e=Math.floor((t.ta+7-(t.oa+6)%7)/7);if(2>=(t.oa+371-t.ta-2)%7&&e++,e)53==e&&(4==(n=(t.oa+371-t.ta)%7)||3==n&&M(t.ua)||(e=1));else{e=52;var n=(t.oa+7-t.ta-1)%7;(4==n||5==n&&M(t.ua%400-1))&&e++}return i(e,2)},"%w":t=>t.oa,"%W":t=>i(Math.floor((t.ta+7-(t.oa+6)%7)/7),2),"%y":t=>(t.ua+1900).toString().substring(2),"%Y":t=>t.ua+1900,"%z":t=>{var e=0<=(t=t.Ba);return t=Math.abs(t)/60,(e?"+":"-")+String("0000"+(t/60*100+t%60)).slice(-4)},"%Z":t=>t.Ea,"%%":()=>"%"},n=n.replace(/%%/g,"\0\0"),F)n.includes(U)&&(n=n.replace(new RegExp(U,"g"),F[U](r)));return U=function(t){var e=Array(J(t)+1);return H(t,e,0,e.length),e}(n=n.replace(/\0\0/g,"%")),U.length>e?0:(b.set(U,t>>>0),U.length-1)}var it={a:function(t,e,n){throw new O(t>>>=0).Aa(e>>>0,n>>>0),t},e:function(){return 0},H:function(){},x:function(){},z:function(){},J:function(){return 0},F:function(){},A:function(){},E:function(){},g:function(){},y:function(){},v:function(){},G:function(){},w:function(){},k:()=>1,n:function(t,e,n){t=e+2097152>>>0<4194305-!!t?(t>>>0)+4294967296*e:NaN,n>>>=0,t=new Date(1e3*t),m[n>>>2>>>0]=t.getUTCSeconds(),m[n+4>>>2>>>0]=t.getUTCMinutes(),m[n+8>>>2>>>0]=t.getUTCHours(),m[n+12>>>2>>>0]=t.getUTCDate(),m[n+16>>>2>>>0]=t.getUTCMonth(),m[n+20>>>2>>>0]=t.getUTCFullYear()-1900,m[n+24>>>2>>>0]=t.getUTCDay(),m[n+28>>>2>>>0]=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0},o:function(t,e,n){t=e+2097152>>>0<4194305-!!t?(t>>>0)+4294967296*e:NaN,n>>>=0,t=new Date(1e3*t),m[n>>>2>>>0]=t.getSeconds(),m[n+4>>>2>>>0]=t.getMinutes(),m[n+8>>>2>>>0]=t.getHours(),m[n+12>>>2>>>0]=t.getDate(),m[n+16>>>2>>>0]=t.getMonth(),m[n+20>>>2>>>0]=t.getFullYear()-1900,m[n+24>>>2>>>0]=t.getDay(),m[n+28>>>2>>>0]=(M(t.getFullYear())?z:j)[t.getMonth()]+t.getDate()-1|0,m[n+36>>>2>>>0]=-60*t.getTimezoneOffset(),e=new Date(t.getFullYear(),6,1).getTimezoneOffset();var r=new Date(t.getFullYear(),0,1).getTimezoneOffset();m[n+32>>>2>>>0]=0|(e!=r&&t.getTimezoneOffset()==Math.min(r,e))},p:function(t){t>>>=0;var e=new Date(m[t+20>>>2>>>0]+1900,m[t+16>>>2>>>0],m[t+12>>>2>>>0],m[t+8>>>2>>>0],m[t+4>>>2>>>0],m[t>>>2>>>0],0),n=m[t+32>>>2>>>0],r=e.getTimezoneOffset(),s=new Date(e.getFullYear(),6,1).getTimezoneOffset(),i=new Date(e.getFullYear(),0,1).getTimezoneOffset(),o=Math.min(i,s);return 0>n?m[t+32>>>2>>>0]=Number(s!=i&&o==r):0<n!=(o==r)&&(s=Math.max(i,s),e.setTime(e.getTime()+6e4*((0<n?o:s)-r))),m[t+24>>>2>>>0]=e.getDay(),m[t+28>>>2>>>0]=(M(e.getFullYear())?z:j)[e.getMonth()]+e.getDate()-1|0,m[t>>>2>>>0]=e.getSeconds(),m[t+4>>>2>>>0]=e.getMinutes(),m[t+8>>>2>>>0]=e.getHours(),m[t+12>>>2>>>0]=e.getDate(),m[t+16>>>2>>>0]=e.getMonth(),m[t+20>>>2>>>0]=e.getYear(),t=e.getTime(),isNaN(t)?(m[at()>>>2>>>0]=61,t=-1):t/=1e3,Ut((_=t,1<=+Math.abs(_)?0<_?+Math.floor(_/4294967296)>>>0:~~+Math.ceil((_-+(~~_>>>0))/4294967296)>>>0:0)),t>>>0},l:function(){return-52},m:function(){},t:function(t,e,n){function r(t){return(t=t.toTimeString().match(/\(([A-Za-z ]+)\)$/))?t[1]:"GMT"}n>>>=0;var s=(new Date).getFullYear(),i=new Date(s,0,1),o=new Date(s,6,1);s=i.getTimezoneOffset();var a=o.getTimezoneOffset();x[t>>>0>>>2>>>0]=60*Math.max(s,a),m[e>>>0>>>2>>>0]=Number(s!=a),t=r(i),e=r(o),t=K(t),e=K(e),a<s?(x[n>>>2>>>0]=t,x[n+4>>>2>>>0]=e):(x[n>>>2>>>0]=e,x[n+4>>>2>>>0]=t)},d:()=>{G("")},B:function(t,e,n){t>>>=0,e>>>=0,n>>>=0,$.length=0;for(var r;r=f[e++>>>0];){var s=105!=r;n+=(s&=112!=r)&&n%8?4:0,$.push(112==r?x[n>>>2>>>0]:105==r?m[n>>>2>>>0]:y[n>>>3>>>0]),n+=s?8:4}return P[t].apply(null,$)},h:()=>Date.now(),u:function(){return 4294901760},b:()=>performance.now(),I:function(t,e,n){return e>>>=0,f.copyWithin(t>>>0>>>0,e>>>0,e+(n>>>0)>>>0)},s:function(t){t>>>=0;var e=f.length;if(4294901760<t)return!1;for(var n=1;4>=n;n*=2){var r=e*(1+.2/n);r=Math.min(r,t+100663296);var s=Math;r=Math.max(t,r);t:{s=(s.min.call(s,4294901760,r+(65536-r%65536)%65536)-h.buffer.byteLength+65535)/65536;try{h.grow(s),I();var i=1;break t}catch(t){}i=void 0}if(i)return!0}return!1},C:function(t,e){t>>>=0,e>>>=0;var n=0;return tt().forEach(((r,s)=>{var i=e+n;for(s=x[t+4*s>>>2>>>0]=i,i=0;i<r.length;++i)b[s++>>>0>>>0]=r.charCodeAt(i);b[s>>>0>>>0]=0,n+=r.length+1})),0},D:function(t,e){t>>>=0,e>>>=0;var n=tt();x[t>>>2>>>0]=n.length;var r=0;return n.forEach((t=>r+=t.length+1)),x[e>>>2>>>0]=r,0},f:()=>52,j:function(){return 52},q:function(){return 70},i:function(t,e,n,r){e>>>=0,n>>>=0,r>>>=0;for(var s=0,i=0;i<n;i++){var o=x[e>>>2>>>0],a=x[e+4>>>2>>>0];e+=8;for(var l=0;l<a;l++){var F=f[o+l>>>0],U=et[t];0===F||10===F?((1===t?p:g)(D(U,0)),U.length=0):U.push(F)}s+=a}return x[r>>>2>>>0]=s,0},r:st,c:function(t,e,n,r){return st(t>>>0,e>>>0,n>>>0,r>>>0)}},ot=function(){function t(t){return ot=t.exports,ot=function(){var t=ot;t=Object.assign({},t);var e=t=>()=>t()>>>0,n=t=>e=>t(e)>>>0;return t.la=e(t.la),t.ma=n(t.ma),t.qa=e(t.qa),t.sa=n(t.sa),t}(),h=ot.K,I(),R.unshift(ot.L),0==--C&&(null!==T&&(clearInterval(T),T=null),V&&(t=V,V=null,t())),ot}var e={a:it};if(C++,s.instantiateWasm)try{return s.instantiateWasm(e,t)}catch(t){g(`Module.instantiateWasm callback failed with error: ${t}`),r(t)}return function(t,e){var n=Z;return"function"!=typeof WebAssembly.instantiateStreaming||w(n)||A(n)||u||"function"!=typeof fetch?W(n,t,e):fetch(n,{credentials:"same-origin"}).then((r=>WebAssembly.instantiateStreaming(r,t).then(e,(function(r){return g(`wasm streaming compile failed: ${r}`),g("falling back to ArrayBuffer instantiation"),W(n,t,e)}))))}(e,(function(e){t(e.instance)})).catch(r),{}}();s._OrtInit=(t,e)=>(s._OrtInit=ot.M)(t,e),s._OrtGetLastError=(t,e)=>(s._OrtGetLastError=ot.N)(t,e),s._OrtCreateSessionOptions=(t,e,n,r,i,o,a,l,F,U)=>(s._OrtCreateSessionOptions=ot.O)(t,e,n,r,i,o,a,l,F,U),s._OrtAppendExecutionProvider=(t,e)=>(s._OrtAppendExecutionProvider=ot.P)(t,e),s._OrtAddFreeDimensionOverride=(t,e,n)=>(s._OrtAddFreeDimensionOverride=ot.Q)(t,e,n),s._OrtAddSessionConfigEntry=(t,e,n)=>(s._OrtAddSessionConfigEntry=ot.R)(t,e,n),s._OrtReleaseSessionOptions=t=>(s._OrtReleaseSessionOptions=ot.S)(t),s._OrtCreateSession=(t,e,n)=>(s._OrtCreateSession=ot.T)(t,e,n),s._OrtReleaseSession=t=>(s._OrtReleaseSession=ot.U)(t),s._OrtGetInputOutputCount=(t,e,n)=>(s._OrtGetInputOutputCount=ot.V)(t,e,n),s._OrtGetInputName=(t,e)=>(s._OrtGetInputName=ot.W)(t,e),s._OrtGetOutputName=(t,e)=>(s._OrtGetOutputName=ot.X)(t,e),s._OrtFree=t=>(s._OrtFree=ot.Y)(t),s._OrtCreateTensor=(t,e,n,r,i,o)=>(s._OrtCreateTensor=ot.Z)(t,e,n,r,i,o),s._OrtGetTensorData=(t,e,n,r,i)=>(s._OrtGetTensorData=ot._)(t,e,n,r,i),s._OrtReleaseTensor=t=>(s._OrtReleaseTensor=ot.$)(t),s._OrtCreateRunOptions=(t,e,n,r)=>(s._OrtCreateRunOptions=ot.aa)(t,e,n,r),s._OrtAddRunConfigEntry=(t,e,n)=>(s._OrtAddRunConfigEntry=ot.ba)(t,e,n),s._OrtReleaseRunOptions=t=>(s._OrtReleaseRunOptions=ot.ca)(t),s._OrtCreateBinding=t=>(s._OrtCreateBinding=ot.da)(t),s._OrtBindInput=(t,e,n)=>(s._OrtBindInput=ot.ea)(t,e,n),s._OrtBindOutput=(t,e,n,r)=>(s._OrtBindOutput=ot.fa)(t,e,n,r),s._OrtClearBoundOutputs=t=>(s._OrtClearBoundOutputs=ot.ga)(t),s._OrtReleaseBinding=t=>(s._OrtReleaseBinding=ot.ha)(t),s._OrtRunWithBinding=(t,e,n,r,i)=>(s._OrtRunWithBinding=ot.ia)(t,e,n,r,i),s._OrtRun=(t,e,n,r,i,o,a,l)=>(s._OrtRun=ot.ja)(t,e,n,r,i,o,a,l),s._OrtEndProfiling=t=>(s._OrtEndProfiling=ot.ka)(t);var at=()=>(at=ot.la)(),lt=s._malloc=t=>(lt=s._malloc=ot.ma)(t);s._free=t=>(s._free=ot.na)(t);var Ft,Ut=t=>(Ut=ot.pa)(t),ct=()=>(ct=ot.qa)(),ut=t=>(ut=ot.ra)(t),Qt=t=>(Qt=ot.sa)(t);function dt(){if(!(0<C)){if(s.preRun)for("function"==typeof s.preRun&&(s.preRun=[s.preRun]);s.preRun.length;){var t=s.preRun.shift();L.unshift(t)}for(;0<L.length;)L.shift()(s);if(!(0<C||Ft||(Ft=!0,s.calledRun=!0,S))){for(;0<R.length;)R.shift()(s);for(e(s);0<E.length;)E.shift()(s)}}}return s.stackAlloc=Qt,s.stackSave=ct,s.stackRestore=ut,s.UTF8ToString=Y,s.stringToUTF8=(t,e,n)=>H(t,f,e,n),s.lengthBytesUTF8=J,V=function t(){Ft||dt(),Ft||(V=t)},dt(),t.ready});"object"==typeof t&&"object"==typeof e?e.exports=r:"function"==typeof define&&define.amd&&define([],(()=>r))}}),require_worker_threads=__commonJS({"nodejs-ignore:worker_threads"(){}}),require_perf_hooks=__commonJS({"nodejs-ignore:perf_hooks"(){}}),os_exports={},cpus2;__export(os_exports,{cpus:()=>cpus2});var init_os=__esm({"nodejs-ignore:os"(){cpus2=void 0}}),require_ort_wasm_threaded=__commonJS({"web/lib/wasm/binding/ort-wasm-threaded.js"(t,e){var n,r=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,"undefined"!=typeof __filename&&(n=n||__filename),function(t={}){function e(){return E.buffer!=V.buffer&&v(),V}function r(){return E.buffer!=V.buffer&&v(),G}function s(){return E.buffer!=V.buffer&&v(),Z}function i(){return E.buffer!=V.buffer&&v(),w}function o(){return E.buffer!=V.buffer&&v(),A}var a,l,F=t;F.ready=new Promise(((t,e)=>{a=t,l=e}));var U,c,u,Q=Object.assign({},F),d="./this.program",B=(t,e)=>{throw e},p="object"==typeof window,g="function"==typeof importScripts,h="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,b=F.ENVIRONMENT_IS_PTHREAD||!1,f="";function m(t){return F.locateFile?F.locateFile(t,f):f+t}if(h){var x=(init_fs(),__toCommonJS(fs_exports)),y=(init_path(),__toCommonJS(path_exports));let t;f=g?y.dirname(f)+"/":__dirname+"/",U=(t,e)=>(t=z(t)?new URL(t):y.normalize(t),x.readFileSync(t,e?void 0:"utf8")),u=t=>((t=U(t,!0)).buffer||(t=new Uint8Array(t)),t),c=(t,e,n,r=!0)=>{t=z(t)?new URL(t):y.normalize(t),x.readFile(t,r?void 0:"utf8",((t,s)=>{t?n(t):e(r?s.buffer:s)}))},!F.thisProgram&&1<process.argv.length&&(d=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),B=(t,e)=>{throw process.exitCode=t,e},F.inspect=()=>"[Emscripten Module object]";try{t=require_worker_threads()}catch(t){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),t}global.Worker=t.Worker}else(p||g)&&(g?f=self.location.href:"undefined"!=typeof document&&document.currentScript&&(f=document.currentScript.src),void 0!==n&&n&&(f=n),f=0!==f.indexOf("blob:")?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"",h||(U=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.send(null),e.responseText},g&&(u=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),c=(t,e,n)=>{var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?e(r.response):n()},r.onerror=n,r.send(null)}));h&&"undefined"==typeof performance&&(global.performance=require_perf_hooks().performance);var S=console.log.bind(console),I=console.error.bind(console);h&&(S=(...t)=>x.writeSync(1,t.join(" ")+"\n"),I=(...t)=>x.writeSync(2,t.join(" ")+"\n"));var L=S,R=I;Object.assign(F,Q),Q=null,"object"!=typeof WebAssembly&&J("no native wasm support detected");var E,C,T,V,G,Z,w,A,N=!1;function v(){var t=E.buffer;F.HEAP8=V=new Int8Array(t),F.HEAP16=new Int16Array(t),F.HEAPU8=G=new Uint8Array(t),F.HEAPU16=new Uint16Array(t),F.HEAP32=Z=new Int32Array(t),F.HEAPU32=w=new Uint32Array(t),F.HEAPF32=new Float32Array(t),F.HEAPF64=A=new Float64Array(t)}var W=16777216;if(b)E=F.wasmMemory;else if(F.wasmMemory)E=F.wasmMemory;else if(!((E=new WebAssembly.Memory({initial:W/65536,maximum:65536,shared:!0})).buffer instanceof SharedArrayBuffer))throw R("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"),h&&R("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");v(),W=E.buffer.byteLength;var _=[],P=[],O=[],k=0,X=null,D=null;function Y(){if(0==--k&&(null!==X&&(clearInterval(X),X=null),D)){var t=D;D=null,t()}}function J(t){throw R(t="Aborted("+t+")"),N=!0,T=1,t=new WebAssembly.RuntimeError(t+". Build with -sASSERTIONS for more info."),l(t),t}var H,M=t=>t.startsWith("data:application/octet-stream;base64,"),z=t=>t.startsWith("file://");function j(t){if(u)return u(t);throw"both async and sync fetching of the wasm failed"}function K(t,e,n){return function(t){if(p||g){if("function"==typeof fetch&&!z(t))return fetch(t,{credentials:"same-origin"}).then((e=>{if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((()=>j(t)));if(c)return new Promise(((e,n)=>{c(t,(t=>e(new Uint8Array(t))),n)}))}return Promise.resolve().then((()=>j(t)))}(t).then((t=>WebAssembly.instantiate(t,e))).then((t=>t)).then(n,(t=>{R(`failed to asynchronously prepare wasm: ${t}`),J(t)}))}M(H="ort-wasm-threaded.wasm")||(H=m(H));var $,q={921276:(t,e,n,s)=>{if(void 0===F||!F.cb)return 1;if((t=ot(t>>>0)).startsWith("./")&&(t=t.substring(2)),!(t=F.cb.get(t)))return 2;if(s>>>=0,(e>>>=0)+(n>>>=0)>t.byteLength)return 3;try{return r().set(t.subarray(e,e+n),s>>>0),0}catch{return 4}}};function tt(t){this.name="ExitStatus",this.message=`Program terminated with exit(${t})`,this.status=t}var et=t=>{t.terminate(),t.onmessage=()=>{}},nt=t=>{0==Qt.Pa.length&&(ut(),Qt.Ya(Qt.Pa[0]));var e=Qt.Pa.pop();if(!e)return 6;Qt.Qa.push(e),Qt.Ma[t.Oa]=e,e.Oa=t.Oa;var n={cmd:"run",start_routine:t.kb,arg:t.hb,pthread_ptr:t.Oa};return h&&e.unref(),e.postMessage(n,t.qb),0},rt=0,st="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,it=(t,e,n)=>{var r=(e>>>=0)+n;for(n=e;t[n]&&!(n>=r);)++n;if(16<n-e&&t.buffer&&st)return st.decode(t.buffer instanceof SharedArrayBuffer?t.slice(e,n):t.subarray(e,n));for(r="";e<n;){var s=t[e++];if(128&s){var i=63&t[e++];if(192==(224&s))r+=String.fromCharCode((31&s)<<6|i);else{var o=63&t[e++];65536>(s=224==(240&s)?(15&s)<<12|i<<6|o:(7&s)<<18|i<<12|o<<6|63&t[e++])?r+=String.fromCharCode(s):(s-=65536,r+=String.fromCharCode(55296|s>>10,56320|1023&s))}}else r+=String.fromCharCode(s)}return r},ot=(t,e)=>(t>>>=0)?it(r(),t,e):"",at=t=>{var e=fe();return t=t(),me(e),t};function lt(t,e){var n=arguments.length-2,r=arguments;return at((()=>{for(var s=xe(8*n),i=s>>>3,a=0;a<n;a++){var l=r[2+a];o()[i+a>>>0]=l}return de(t,n,s,e)}))}function Ft(t){if(b)return lt(0,1,t);T=t,0<rt||(Qt.lb(),F.onExit?.(t),N=!0),B(t,new tt(t))}var Ut=t=>{if(T=t,b)throw Bt(t),"unwind";Ft(t)};function ct(){for(var t=F.numThreads;t--;)ut();_.unshift((()=>{k++,function(t){b?t():Promise.all(Qt.Pa.map(Qt.Ya)).then(t)}((()=>Y()))}))}function ut(){var t=m("ort-wasm-threaded.worker.js");t=new Worker(t),Qt.Pa.push(t)}var Qt={Pa:[],Qa:[],bb:[],Ma:{},Wa(){b?(Qt.receiveObjectTransfer=Qt.jb,Qt.threadInitTLS=Qt.ab,Qt.setExitStatus=Qt.$a):ct()},$a:t=>T=t,tb:["$terminateWorker"],lb:()=>{for(var t of Qt.Qa)et(t);for(t of Qt.Pa)et(t);Qt.Pa=[],Qt.Qa=[],Qt.Ma=[]},Za:t=>{var e=t.Oa;delete Qt.Ma[e],Qt.Pa.push(t),Qt.Qa.splice(Qt.Qa.indexOf(t),1),t.Oa=0,Be(e)},jb(){},ab(){Qt.bb.forEach((t=>t()))},Ya:t=>new Promise((e=>{t.onmessage=n=>{var r=(n=n.data).cmd;if(n.targetThread&&n.targetThread!=Ue()){var s=Qt.Ma[n.targetThread];s?s.postMessage(n,n.transferList):R(`Internal error! Worker sent a message "${r}" to target pthread ${n.targetThread}, but that thread no longer exists!`)}else"checkMailbox"===r?Wt():"spawnThread"===r?nt(n):"cleanupThread"===r?Qt.Za(Qt.Ma[n.thread]):"killThread"===r?(n=n.thread,r=Qt.Ma[n],delete Qt.Ma[n],et(r),Be(n),Qt.Qa.splice(Qt.Qa.indexOf(r),1),r.Oa=0):"cancelThread"===r?Qt.Ma[n.thread].postMessage({cmd:"cancel"}):"loaded"===r?(t.loaded=!0,h&&!t.Oa&&t.unref(),e(t)):"alert"===r?alert(`Thread ${n.threadId}: ${n.text}`):"setimmediate"===n.target?t.postMessage(n):"callHandler"===r?F[n.handler](...n.args):r&&R(`worker sent an unknown command ${r}`)},t.onerror=t=>{throw R(`worker sent an error! ${t.filename}:${t.lineno}: ${t.message}`),t},h&&(t.on("message",(e=>t.onmessage({data:e}))),t.on("error",(e=>t.onerror(e))));var r,s=[];for(r of["onExit"])F.hasOwnProperty(r)&&s.push(r);t.postMessage({cmd:"load",handlers:s,urlOrBlob:F.mainScriptUrlOrBlob||n,wasmMemory:E,wasmModule:C})}))};F.PThread=Qt;var dt=t=>{for(;0<t.length;)t.shift()(F)};function Bt(t){if(b)return lt(1,0,t);Ut(t)}F.establishStackSpace=()=>{var t=Ue(),e=i()[t+52>>>2>>>0];t=i()[t+56>>>2>>>0],be(e,e-t),me(e)};var pt,gt=[];function ht(t){this.Va=t-24,this.gb=function(t){i()[this.Va+4>>>2>>>0]=t},this.fb=function(t){i()[this.Va+8>>>2>>>0]=t},this.Wa=function(t,e){this.eb(),this.gb(t),this.fb(e)},this.eb=function(){i()[this.Va+16>>>2>>>0]=0}}function bt(t,e,n,r){return b?lt(2,1,t,e,n,r):ft(t,e,n,r)}function ft(t,e,n,r){if(t>>>=0,e>>>=0,n>>>=0,r>>>=0,"undefined"==typeof SharedArrayBuffer)return R("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var s=[];return b&&0===s.length?bt(t,e,n,r):(t={kb:n,Oa:t,hb:r,qb:s},b?(t.sb="spawnThread",postMessage(t,s),0):nt(t))}function mt(t,e,n){return b?lt(3,1,t,e,n):0}function xt(t,e){if(b)return lt(4,1,t,e)}F.invokeEntryPoint=(t,e)=>{var n=gt[t];n||(t>=gt.length&&(gt.length=t+1),gt[t]=n=pt.get(t)),t=n(e),0<rt?Qt.$a(t):pe(t)};var yt=t=>{for(var e=0,n=0;n<t.length;++n){var r=t.charCodeAt(n);127>=r?e++:2047>=r?e+=2:55296<=r&&57343>=r?(e+=4,++n):e+=3}return e},St=(t,e,n,r)=>{if(!(0<r))return 0;var s=n>>>=0;r=n+r-1;for(var i=0;i<t.length;++i){var o=t.charCodeAt(i);if(55296<=o&&57343>=o&&(o=65536+((1023&o)<<10)|1023&t.charCodeAt(++i)),127>=o){if(n>=r)break;e[n++>>>0]=o}else{if(2047>=o){if(n+1>=r)break;e[n++>>>0]=192|o>>6}else{if(65535>=o){if(n+2>=r)break;e[n++>>>0]=224|o>>12}else{if(n+3>=r)break;e[n++>>>0]=240|o>>18,e[n++>>>0]=128|o>>12&63}e[n++>>>0]=128|o>>6&63}e[n++>>>0]=128|63&o}}return e[n>>>0]=0,n-s},It=(t,e,n)=>St(t,r(),e,n);function Lt(t,e){if(b)return lt(5,1,t,e)}function Rt(t,e,n){if(b)return lt(6,1,t,e,n)}function Et(t,e,n){return b?lt(7,1,t,e,n):0}function Ct(t,e){if(b)return lt(8,1,t,e)}function Tt(t,e,n){if(b)return lt(9,1,t,e,n)}function Vt(t,e,n,r){if(b)return lt(10,1,t,e,n,r)}function Gt(t,e,n,r){if(b)return lt(11,1,t,e,n,r)}function Zt(t,e,n,r){if(b)return lt(12,1,t,e,n,r)}function wt(t){if(b)return lt(13,1,t)}function At(t,e){if(b)return lt(14,1,t,e)}function Nt(t,e,n){if(b)return lt(15,1,t,e,n)}function vt(t){t>>>=0,"function"==typeof Atomics.rb&&(Atomics.rb(s(),t>>>2,t).value.then(Wt),t+=128,Atomics.store(s(),t>>>2,1))}F.__emscripten_thread_mailbox_await=vt;var Wt=()=>{var t=Ue();if(t&&(vt(t),t=ge,!N))try{if(t(),!(0<rt))try{b?pe(T):Ut(T)}catch(t){t instanceof tt||"unwind"==t||B(1,t)}}catch(t){t instanceof tt||"unwind"==t||B(1,t)}};F.checkMailbox=Wt;var _t=[],Pt=t=>0==t%4&&(0!=t%100||0==t%400),Ot=[0,31,60,91,121,152,182,213,244,274,305,335],kt=[0,31,59,90,120,151,181,212,243,273,304,334];function Xt(t,e,n,r,s,i,o,a){return b?lt(16,1,t,e,n,r,s,i,o,a):-52}function Dt(t,e,n,r,s,i,o){if(b)return lt(17,1,t,e,n,r,s,i,o)}var Yt,Jt=t=>{var e=yt(t)+1,n=ce(e);return n&&It(t,n,e),n},Ht=[],Mt={},zt=()=>{if(!Yt){var t,e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:d||"./this.program"};for(t in Mt)void 0===Mt[t]?delete e[t]:e[t]=Mt[t];var n=[];for(t in e)n.push(`${t}=${e[t]}`);Yt=n}return Yt};function jt(t,n){if(b)return lt(18,1,t,n);t>>>=0,n>>>=0;var r=0;return zt().forEach(((s,o)=>{var a=n+r;for(o=i()[t+4*o>>>2>>>0]=a,a=0;a<s.length;++a)e()[o++>>>0>>>0]=s.charCodeAt(a);e()[o>>>0>>>0]=0,r+=s.length+1})),0}function Kt(t,e){if(b)return lt(19,1,t,e);t>>>=0,e>>>=0;var n=zt();i()[t>>>2>>>0]=n.length;var r=0;return n.forEach((t=>r+=t.length+1)),i()[e>>>2>>>0]=r,0}function $t(t){return b?lt(20,1,t):52}function qt(t,e,n,r){return b?lt(21,1,t,e,n,r):52}function te(t,e,n,r,s){return b?lt(22,1,t,e,n,r,s):70}var ee=[null,[],[]];function ne(t,e,n,s){if(b)return lt(23,1,t,e,n,s);e>>>=0,n>>>=0,s>>>=0;for(var o=0,a=0;a<n;a++){var l=i()[e>>>2>>>0],F=i()[e+4>>>2>>>0];e+=8;for(var U=0;U<F;U++){var c=r()[l+U>>>0],u=ee[t];0===c||10===c?((1===t?L:R)(it(u,0)),u.length=0):u.push(c)}o+=F}return i()[s>>>2>>>0]=o,0}var re=[31,29,31,30,31,30,31,31,30,31,30,31],se=[31,28,31,30,31,30,31,31,30,31,30,31];function ie(t,n,r,o){function a(t,e,n){for(t="number"==typeof t?t.toString():t||"";t.length<e;)t=n[0]+t;return t}function l(t,e){return a(t,e,"0")}function F(t,e){function n(t){return 0>t?-1:0<t?1:0}var r;return 0===(r=n(t.getFullYear()-e.getFullYear()))&&0===(r=n(t.getMonth()-e.getMonth()))&&(r=n(t.getDate()-e.getDate())),r}function U(t){switch(t.getDay()){case 0:return new Date(t.getFullYear()-1,11,29);case 1:return t;case 2:return new Date(t.getFullYear(),0,3);case 3:return new Date(t.getFullYear(),0,2);case 4:return new Date(t.getFullYear(),0,1);case 5:return new Date(t.getFullYear()-1,11,31);case 6:return new Date(t.getFullYear()-1,11,30)}}function c(t){var e=t.Ra;for(t=new Date(new Date(t.Sa+1900,0,1).getTime());0<e;){var n=t.getMonth(),r=(Pt(t.getFullYear())?re:se)[n];if(!(e>r-t.getDate())){t.setDate(t.getDate()+e);break}e-=r-t.getDate()+1,t.setDate(1),11>n?t.setMonth(n+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return n=new Date(t.getFullYear()+1,0,4),e=U(new Date(t.getFullYear(),0,4)),n=U(n),0>=F(e,t)?0>=F(n,t)?t.getFullYear()+1:t.getFullYear():t.getFullYear()-1}t>>>=0,n>>>=0,r>>>=0,o>>>=0;var u=i()[o+40>>>2>>>0];for(var Q in o={ob:s()[o>>>2>>>0],nb:s()[o+4>>>2>>>0],Ta:s()[o+8>>>2>>>0],Xa:s()[o+12>>>2>>>0],Ua:s()[o+16>>>2>>>0],Sa:s()[o+20>>>2>>>0],Na:s()[o+24>>>2>>>0],Ra:s()[o+28>>>2>>>0],ub:s()[o+32>>>2>>>0],mb:s()[o+36>>>2>>>0],pb:u?ot(u):""},r=ot(r),u={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"})r=r.replace(new RegExp(Q,"g"),u[Q]);var d="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),B="January February March April May June July August September October November December".split(" ");for(Q in u={"%a":t=>d[t.Na].substring(0,3),"%A":t=>d[t.Na],"%b":t=>B[t.Ua].substring(0,3),"%B":t=>B[t.Ua],"%C":t=>l((t.Sa+1900)/100|0,2),"%d":t=>l(t.Xa,2),"%e":t=>a(t.Xa,2," "),"%g":t=>c(t).toString().substring(2),"%G":t=>c(t),"%H":t=>l(t.Ta,2),"%I":t=>(0==(t=t.Ta)?t=12:12<t&&(t-=12),l(t,2)),"%j":t=>{for(var e=0,n=0;n<=t.Ua-1;e+=(Pt(t.Sa+1900)?re:se)[n++]);return l(t.Xa+e,3)},"%m":t=>l(t.Ua+1,2),"%M":t=>l(t.nb,2),"%n":()=>"\n","%p":t=>0<=t.Ta&&12>t.Ta?"AM":"PM","%S":t=>l(t.ob,2),"%t":()=>"\t","%u":t=>t.Na||7,"%U":t=>l(Math.floor((t.Ra+7-t.Na)/7),2),"%V":t=>{var e=Math.floor((t.Ra+7-(t.Na+6)%7)/7);if(2>=(t.Na+371-t.Ra-2)%7&&e++,e)53==e&&(4==(n=(t.Na+371-t.Ra)%7)||3==n&&Pt(t.Sa)||(e=1));else{e=52;var n=(t.Na+7-t.Ra-1)%7;(4==n||5==n&&Pt(t.Sa%400-1))&&e++}return l(e,2)},"%w":t=>t.Na,"%W":t=>l(Math.floor((t.Ra+7-(t.Na+6)%7)/7),2),"%y":t=>(t.Sa+1900).toString().substring(2),"%Y":t=>t.Sa+1900,"%z":t=>{var e=0<=(t=t.mb);return t=Math.abs(t)/60,(e?"+":"-")+String("0000"+(t/60*100+t%60)).slice(-4)},"%Z":t=>t.pb,"%%":()=>"%"},r=r.replace(/%%/g,"\0\0"),u)r.includes(Q)&&(r=r.replace(new RegExp(Q,"g"),u[Q](o)));return Q=function(t){var e=Array(yt(t)+1);return St(t,e,0,e.length),e}(r=r.replace(/\0\0/g,"%")),Q.length>n?0:(((t,n)=>{e().set(t,n>>>0)})(Q,t),Q.length-1)}Qt.Wa();var oe=[Ft,Bt,bt,mt,xt,Lt,Rt,Et,Ct,Tt,Vt,Gt,Zt,wt,At,Nt,Xt,Dt,jt,Kt,$t,qt,te,ne],ae={b:function(t,e,n){throw new ht(t>>>=0).Wa(e>>>0,n>>>0),t},L:function(t){ue(t>>>0,!g,1,!p,131072,!1),Qt.ab()},j:function(t){t>>>=0,b?postMessage({cmd:"cleanupThread",thread:t}):Qt.Za(Qt.Ma[t])},H:ft,h:mt,S:xt,D:Lt,F:Rt,T:Et,Q:Ct,J:Tt,P:Vt,n:Gt,E:Zt,B:wt,R:At,C:Nt,p:()=>1,z:function(t,e){(t>>>=0)==e>>>0?setTimeout((()=>Wt())):b?postMessage({targetThread:t,cmd:"checkMailbox"}):(t=Qt.Ma[t])&&t.postMessage({cmd:"checkMailbox"})},I:function(t,e,n,r){e>>>=0,_t.length=n,r=r>>>0>>>3;for(var s=0;s<n;s++)_t[s]=o()[r+s>>>0];return t=0>t?q[-t-1]:oe[t],Qt.ib=e,e=t.apply(null,_t),Qt.ib=0,e},K:vt,o:function(t){h&&Qt.Ma[t>>>0].ref()},s:function(t,e,n){t=e+2097152>>>0<4194305-!!t?(t>>>0)+4294967296*e:NaN,n>>>=0,t=new Date(1e3*t),s()[n>>>2>>>0]=t.getUTCSeconds(),s()[n+4>>>2>>>0]=t.getUTCMinutes(),s()[n+8>>>2>>>0]=t.getUTCHours(),s()[n+12>>>2>>>0]=t.getUTCDate(),s()[n+16>>>2>>>0]=t.getUTCMonth(),s()[n+20>>>2>>>0]=t.getUTCFullYear()-1900,s()[n+24>>>2>>>0]=t.getUTCDay(),t=(t.getTime()-Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,s()[n+28>>>2>>>0]=t},t:function(t,e,n){t=e+2097152>>>0<4194305-!!t?(t>>>0)+4294967296*e:NaN,n>>>=0,t=new Date(1e3*t),s()[n>>>2>>>0]=t.getSeconds(),s()[n+4>>>2>>>0]=t.getMinutes(),s()[n+8>>>2>>>0]=t.getHours(),s()[n+12>>>2>>>0]=t.getDate(),s()[n+16>>>2>>>0]=t.getMonth(),s()[n+20>>>2>>>0]=t.getFullYear()-1900,s()[n+24>>>2>>>0]=t.getDay(),e=(Pt(t.getFullYear())?Ot:kt)[t.getMonth()]+t.getDate()-1|0,s()[n+28>>>2>>>0]=e,s()[n+36>>>2>>>0]=-60*t.getTimezoneOffset(),e=new Date(t.getFullYear(),6,1).getTimezoneOffset();var r=new Date(t.getFullYear(),0,1).getTimezoneOffset();t=0|(e!=r&&t.getTimezoneOffset()==Math.min(r,e)),s()[n+32>>>2>>>0]=t},u:function(t){t>>>=0;var e=new Date(s()[t+20>>>2>>>0]+1900,s()[t+16>>>2>>>0],s()[t+12>>>2>>>0],s()[t+8>>>2>>>0],s()[t+4>>>2>>>0],s()[t>>>2>>>0],0),n=s()[t+32>>>2>>>0],r=e.getTimezoneOffset(),i=new Date(e.getFullYear(),6,1).getTimezoneOffset(),o=new Date(e.getFullYear(),0,1).getTimezoneOffset(),a=Math.min(o,i);return 0>n?s()[t+32>>>2>>>0]=Number(i!=o&&a==r):0<n!=(a==r)&&(i=Math.max(o,i),e.setTime(e.getTime()+6e4*((0<n?a:i)-r))),s()[t+24>>>2>>>0]=e.getDay(),n=(Pt(e.getFullYear())?Ot:kt)[e.getMonth()]+e.getDate()-1|0,s()[t+28>>>2>>>0]=n,s()[t>>>2>>>0]=e.getSeconds(),s()[t+4>>>2>>>0]=e.getMinutes(),s()[t+8>>>2>>>0]=e.getHours(),s()[t+12>>>2>>>0]=e.getDate(),s()[t+16>>>2>>>0]=e.getMonth(),s()[t+20>>>2>>>0]=e.getYear(),t=e.getTime(),isNaN(t)?(s()[Fe()>>>2>>>0]=61,t=-1):t/=1e3,he(($=t,1<=+Math.abs($)?0<$?+Math.floor($/4294967296)>>>0:~~+Math.ceil(($-+(~~$>>>0))/4294967296)>>>0:0)),t>>>0},q:Xt,r:Dt,y:function(t,e,n){function r(t){return(t=t.toTimeString().match(/\(([A-Za-z ]+)\)$/))?t[1]:"GMT"}t>>>=0,e>>>=0,n>>>=0;var o=(new Date).getFullYear(),a=new Date(o,0,1),l=new Date(o,6,1);o=a.getTimezoneOffset();var F=l.getTimezoneOffset(),U=Math.max(o,F);i()[t>>>2>>>0]=60*U,s()[e>>>2>>>0]=Number(o!=F),t=r(a),e=r(l),t=Jt(t),e=Jt(e),F<o?(i()[n>>>2>>>0]=t,i()[n+4>>>2>>>0]=e):(i()[n>>>2>>>0]=e,i()[n+4>>>2>>>0]=t)},c:()=>{J("")},O:function(t,e,n){t>>>=0,e>>>=0,n>>>=0,Ht.length=0;for(var a;a=r()[e++>>>0];){var l=105!=a;n+=(l&=112!=a)&&n%8?4:0,Ht.push(112==a?i()[n>>>2>>>0]:105==a?s()[n>>>2>>>0]:o()[n>>>3>>>0]),n+=l?8:4}return q[t].apply(null,Ht)},k:()=>{},i:()=>Date.now(),U:()=>{throw rt+=1,"unwind"},A:function(){return 4294901760},e:()=>performance.timeOrigin+performance.now(),f:()=>h?(init_os(),__toCommonJS(os_exports)).cpus().length:navigator.hardwareConcurrency,x:function(t){t>>>=0;var e=r().length;if(t<=e||4294901760<t)return!1;for(var n=1;4>=n;n*=2){var s=e*(1+.2/n);s=Math.min(s,t+100663296);var i=Math;s=Math.max(t,s);t:{i=(i.min.call(i,4294901760,s+(65536-s%65536)%65536)-E.buffer.byteLength+65535)/65536;try{E.grow(i),v();var o=1;break t}catch(t){}o=void 0}if(o)return!0}return!1},M:jt,N:Kt,G:Ut,g:$t,m:qt,v:te,l:ne,a:E||F.wasmMemory,w:ie,d:function(t,e,n,r){return ie(t>>>0,e>>>0,n>>>0,r>>>0)}},le=function(){function t(t,e){return le=t.exports,le=function(){var t=le;t=Object.assign({},t);var e=t=>()=>t()>>>0,n=t=>e=>t(e)>>>0;return t.va=e(t.va),t.wa=e(t.wa),t.xa=n(t.xa),t.emscripten_main_runtime_thread_id=e(t.emscripten_main_runtime_thread_id),t.Ja=e(t.Ja),t.La=n(t.La),t}(),Qt.bb.push(le.za),pt=le.Aa,P.unshift(le.V),C=e,Y(),le}var e={a:ae};if(k++,F.instantiateWasm)try{return F.instantiateWasm(e,t)}catch(t){R(`Module.instantiateWasm callback failed with error: ${t}`),l(t)}return function(t,e){var n=H;return"function"!=typeof WebAssembly.instantiateStreaming||M(n)||z(n)||h||"function"!=typeof fetch?K(n,t,e):fetch(n,{credentials:"same-origin"}).then((r=>WebAssembly.instantiateStreaming(r,t).then(e,(function(r){return R(`wasm streaming compile failed: ${r}`),R("falling back to ArrayBuffer instantiation"),K(n,t,e)}))))}(e,(function(e){t(e.instance,e.module)})).catch(l),{}}();F._OrtInit=(t,e)=>(F._OrtInit=le.W)(t,e),F._OrtGetLastError=(t,e)=>(F._OrtGetLastError=le.X)(t,e),F._OrtCreateSessionOptions=(t,e,n,r,s,i,o,a,l,U)=>(F._OrtCreateSessionOptions=le.Y)(t,e,n,r,s,i,o,a,l,U),F._OrtAppendExecutionProvider=(t,e)=>(F._OrtAppendExecutionProvider=le.Z)(t,e),F._OrtAddFreeDimensionOverride=(t,e,n)=>(F._OrtAddFreeDimensionOverride=le._)(t,e,n),F._OrtAddSessionConfigEntry=(t,e,n)=>(F._OrtAddSessionConfigEntry=le.$)(t,e,n),F._OrtReleaseSessionOptions=t=>(F._OrtReleaseSessionOptions=le.aa)(t),F._OrtCreateSession=(t,e,n)=>(F._OrtCreateSession=le.ba)(t,e,n),F._OrtReleaseSession=t=>(F._OrtReleaseSession=le.ca)(t),F._OrtGetInputOutputCount=(t,e,n)=>(F._OrtGetInputOutputCount=le.da)(t,e,n),F._OrtGetInputName=(t,e)=>(F._OrtGetInputName=le.ea)(t,e),F._OrtGetOutputName=(t,e)=>(F._OrtGetOutputName=le.fa)(t,e),F._OrtFree=t=>(F._OrtFree=le.ga)(t),F._OrtCreateTensor=(t,e,n,r,s,i)=>(F._OrtCreateTensor=le.ha)(t,e,n,r,s,i),F._OrtGetTensorData=(t,e,n,r,s)=>(F._OrtGetTensorData=le.ia)(t,e,n,r,s),F._OrtReleaseTensor=t=>(F._OrtReleaseTensor=le.ja)(t),F._OrtCreateRunOptions=(t,e,n,r)=>(F._OrtCreateRunOptions=le.ka)(t,e,n,r),F._OrtAddRunConfigEntry=(t,e,n)=>(F._OrtAddRunConfigEntry=le.la)(t,e,n),F._OrtReleaseRunOptions=t=>(F._OrtReleaseRunOptions=le.ma)(t),F._OrtCreateBinding=t=>(F._OrtCreateBinding=le.na)(t),F._OrtBindInput=(t,e,n)=>(F._OrtBindInput=le.oa)(t,e,n),F._OrtBindOutput=(t,e,n,r)=>(F._OrtBindOutput=le.pa)(t,e,n,r),F._OrtClearBoundOutputs=t=>(F._OrtClearBoundOutputs=le.qa)(t),F._OrtReleaseBinding=t=>(F._OrtReleaseBinding=le.ra)(t),F._OrtRunWithBinding=(t,e,n,r,s)=>(F._OrtRunWithBinding=le.sa)(t,e,n,r,s),F._OrtRun=(t,e,n,r,s,i,o,a)=>(F._OrtRun=le.ta)(t,e,n,r,s,i,o,a),F._OrtEndProfiling=t=>(F._OrtEndProfiling=le.ua)(t);var Fe=()=>(Fe=le.va)(),Ue=F._pthread_self=()=>(Ue=F._pthread_self=le.wa)(),ce=F._malloc=t=>(ce=F._malloc=le.xa)(t);F._free=t=>(F._free=le.ya)(t),F.__emscripten_tls_init=()=>(F.__emscripten_tls_init=le.za)();var ue=F.__emscripten_thread_init=(t,e,n,r,s,i)=>(ue=F.__emscripten_thread_init=le.Ba)(t,e,n,r,s,i);F.__emscripten_thread_crashed=()=>(F.__emscripten_thread_crashed=le.Ca)();var Qe,de=(t,e,n,r)=>(de=le.Da)(t,e,n,r),Be=t=>(Be=le.Ea)(t),pe=F.__emscripten_thread_exit=t=>(pe=F.__emscripten_thread_exit=le.Fa)(t),ge=()=>(ge=le.Ga)(),he=t=>(he=le.Ha)(t),be=(t,e)=>(be=le.Ia)(t,e),fe=()=>(fe=le.Ja)(),me=t=>(me=le.Ka)(t),xe=t=>(xe=le.La)(t);function ye(){if(!(0<k))if(b)a(F),b||dt(P),startWorker(F);else{if(F.preRun)for("function"==typeof F.preRun&&(F.preRun=[F.preRun]);F.preRun.length;)_.unshift(F.preRun.shift());dt(_),0<k||Qe||(Qe=!0,F.calledRun=!0,N||(b||dt(P),a(F),b||dt(O)))}}return F.wasmMemory=E,F.stackAlloc=xe,F.stackSave=fe,F.stackRestore=me,F.keepRuntimeAlive=()=>0<rt,F.UTF8ToString=ot,F.stringToUTF8=It,F.lengthBytesUTF8=yt,F.ExitStatus=tt,F.PThread=Qt,D=function t(){Qe||ye(),Qe||(D=t)},ye(),t.ready});"object"==typeof t&&"object"==typeof e?e.exports=r:"function"==typeof define&&define.amd&&define([],(()=>r))}}),require_ort_wasm_threaded_worker=__commonJS({"web/lib/wasm/binding/ort-wasm-threaded.worker.js"(t,e){e.exports='"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");var vm=require("vm");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>vm.runInThisContext(fs.readFileSync(f,"utf8"),{filename:f}),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;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 module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}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)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*is_main=*/0,/*is_runtime=*/0,/*can_block=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){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==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){Module["__emscripten_thread_crashed"]?.();throw ex}}self.onmessage=handleMessage;\n'}}),ortWasmFactory,ortWasmFactoryThreaded,wasm2,initialized,initializing,aborted,isMultiThreadSupported,isSimdSupported,getWasmFileName,initializeWebAssembly,getInstance,init_wasm_factory=__esm({"web/lib/wasm/wasm-factory.ts"(){init_node_path(),ortWasmFactory=require_ort_wasm(),ortWasmFactoryThreaded=require_ort_wasm_threaded(),initialized=!1,initializing=!1,aborted=!1,isMultiThreadSupported=t=>{if(1===t)return!1;if("undefined"==typeof SharedArrayBuffer)return"undefined"==typeof self||self.crossOriginIsolated||console.warn("env.wasm.numThreads is set to "+t+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),!1;"undefined"!=typeof process&&process.versions&&process.versions.node&&console.warn("env.wasm.numThreads is set to "+t+", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios.");try{return"undefined"!=typeof MessageChannel&&(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(t){return!1}},isSimdSupported=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch(t){return!1}},getWasmFileName=(t,e)=>t?e?"ort-wasm-simd-threaded.wasm":"ort-wasm-simd.wasm":e?"ort-wasm-threaded.wasm":"ort-wasm.wasm",initializeWebAssembly=async t=>{if(initialized)return Promise.resolve();if(initializing)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(aborted)throw new Error("previous call to 'initializeWebAssembly()' failed.");initializing=!0;const e=t.initTimeout,n=t.numThreads,r=t.simd,s=isMultiThreadSupported(n),i=r&&isSimdSupported(),o=t.wasmPaths,a="string"==typeof o?o:void 0,l=getWasmFileName(i,s),F="object"==typeof o?o[l]:void 0;let U=!1;const c=[];if(e>0&&c.push(new Promise((t=>{setTimeout((()=>{U=!0,t()}),e)}))),c.push(new Promise(((t,e)=>{const r=s?ortWasmFactoryThreaded:ortWasmFactory,i={locateFile:(t,e)=>{if(s&&t.endsWith(".worker.js")&&"undefined"!=typeof Blob)return URL.createObjectURL(new Blob([require_ort_wasm_threaded_worker()],{type:"text/javascript"}));if(t.endsWith(".wasm")){if(F)return F;const t=a??e;return t+l}return e+t}};if(s)if(i.numThreads=n,"undefined"==typeof Blob)i.mainScriptUrlOrBlob=join(__dirname,"ort-wasm-threaded.js");else{const t=`var ortWasmThreaded=${r.toString()};`;i.mainScriptUrlOrBlob=new Blob([t],{type:"text/javascript"})}r(i).then((e=>{initializing=!1,initialized=!0,wasm2=e,t()}),(t=>{initializing=!1,aborted=!0,e(t)}))}))),await Promise.race(c),U)throw new Error(`WebAssembly backend initializing failed due to timeout: ${e}ms`)},getInstance=()=>{if(initialized&&wasm2)return wasm2;throw new Error("WebAssembly is not initialized yet.")}}}),allocWasmString,iterateExtraOptions,checkLastError,init_wasm_utils=__esm({"web/lib/wasm/wasm-utils.ts"(){init_wasm_factory(),allocWasmString=(t,e)=>{const n=getInstance(),r=n.lengthBytesUTF8(t)+1,s=n._malloc(r);return n.stringToUTF8(t,s,r),e.push(s),s},iterateExtraOptions=(t,e,n,r)=>{if("object"==typeof t&&null!==t){if(n.has(t))throw new Error("Circular reference in options");n.add(t)}Object.entries(t).forEach((([t,s])=>{const i=e?e+t:t;if("object"==typeof s)iterateExtraOptions(s,i+".",n,r);else if("string"==typeof s||"number"==typeof s)r(i,s.toString());else{if("boolean"!=typeof s)throw new Error("Can't handle extra config type: "+typeof s);r(i,s?"1":"0")}}))},checkLastError=t=>{const e=getInstance(),n=e.stackSave();try{const n=e.stackAlloc(8);e._OrtGetLastError(n,n+4);const r=e.HEAP32[n/4],s=e.HEAPU32[n/4+1],i=s?e.UTF8ToString(s):"";throw new Error(`${t} ERROR_CODE: ${r}, ERROR_MESSAGE: ${i}`)}finally{e.stackRestore(n)}}}}),setRunOptions,init_run_options=__esm({"web/lib/wasm/run-options.ts"(){init_wasm_factory(),init_wasm_utils(),setRunOptions=t=>{const e=getInstance();let n=0;const r=[],s=t||{};try{if(void 0===t?.logSeverityLevel)s.logSeverityLevel=2;else if("number"!=typeof t.logSeverityLevel||!Number.isInteger(t.logSeverityLevel)||t.logSeverityLevel<0||t.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${t.logSeverityLevel}`);if(void 0===t?.logVerbosityLevel)s.logVerbosityLevel=0;else if("number"!=typeof t.logVerbosityLevel||!Number.isInteger(t.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${t.logVerbosityLevel}`);void 0===t?.terminate&&(s.terminate=!1);let i=0;return void 0!==t?.tag&&(i=allocWasmString(t.tag,r)),n=e._OrtCreateRunOptions(s.logSeverityLevel,s.logVerbosityLevel,!!s.terminate,i),0===n&&checkLastError("Can't create run options."),void 0!==t?.extra&&iterateExtraOptions(t.extra,"",new WeakSet,((t,s)=>{const i=allocWasmString(t,r),o=allocWasmString(s,r);0!==e._OrtAddRunConfigEntry(n,i,o)&&checkLastError(`Can't set a run config entry: ${t} - ${s}.`)})),[n,r]}catch(t){throw 0!==n&&e._OrtReleaseRunOptions(n),r.forEach((t=>e._free(t))),t}}}}),getGraphOptimzationLevel,getExecutionMode,appendDefaultOptions,setExecutionProviders,setSessionOptions,init_session_options=__esm({"web/lib/wasm/session-options.ts"(){init_wasm_factory(),init_wasm_utils(),getGraphOptimzationLevel=t=>{switch(t){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${t}`)}},getExecutionMode=t=>{switch(t){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${t}`)}},appendDefaultOptions=t=>{t.extra||(t.extra={}),t.extra.session||(t.extra.session={});const e=t.extra.session;e.use_ort_model_bytes_directly||(e.use_ort_model_bytes_directly="1"),t.executionProviders&&t.executionProviders.some((t=>"webgpu"===("string"==typeof t?t:t.name)))&&(t.enableMemPattern=!1)},setExecutionProviders=(t,e,n)=>{for(const r of e){let e="string"==typeof r?r:r.name;switch(e){case"webnn":if(e="WEBNN","string"!=typeof r){const e=r;if(e?.deviceType){const r=allocWasmString("deviceType",n),s=allocWasmString(e.deviceType,n);0!==getInstance()._OrtAddSessionConfigEntry(t,r,s)&&checkLastError(`Can't set a session config entry: 'deviceType' - ${e.deviceType}.`)}if(e?.numThreads){let r=e.numThreads;("number"!=typeof r||!Number.isInteger(r)||r<0)&&(r=0);const s=allocWasmString("numThreads",n),i=allocWasmString(r.toString(),n);0!==getInstance()._OrtAddSessionConfigEntry(t,s,i)&&checkLastError(`Can't set a session config entry: 'numThreads' - ${e.numThreads}.`)}if(e?.powerPreference){const r=allocWasmString("powerPreference",n),s=allocWasmString(e.powerPreference,n);0!==getInstance()._OrtAddSessionConfigEntry(t,r,s)&&checkLastError(`Can't set a session config entry: 'powerPreference' - ${e.powerPreference}.`)}}break;case"webgpu":if(e="JS","string"!=typeof r){const e=r;if(e?.preferredLayout){if("NCHW"!==e.preferredLayout&&"NHWC"!==e.preferredLayout)throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${e.preferredLayout}`);const r=allocWasmString("preferredLayout",n),s=allocWasmString(e.preferredLayout,n);0!==getInstance()._OrtAddSessionConfigEntry(t,r,s)&&checkLastError(`Can't set a session config entry: 'preferredLayout' - ${e.preferredLayout}.`)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${e}`)}const s=allocWasmString(e,n);0!==getInstance()._OrtAppendExecutionProvider(t,s)&&checkLastError(`Can't append execution provider: ${e}.`)}},setSessionOptions=t=>{const e=getInstance();let n=0;const r=[],s=t||{};appendDefaultOptions(s);try{const t=getGraphOptimzationLevel(s.graphOptimizationLevel??"all"),i=getExecutionMode(s.executionMode??"sequential"),o="string"==typeof s.logId?allocWasmString(s.logId,r):0,a=s.logSeverityLevel??2;if(!Number.isInteger(a)||a<0||a>4)throw new Error(`log serverity level is not valid: ${a}`);const l=s.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw new Error(`log verbosity level is not valid: ${l}`);const F="string"==typeof s.optimizedModelFilePath?allocWasmString(s.optimizedModelFilePath,r):0;if(n=e._OrtCreateSessionOptions(t,!!s.enableCpuMemArena,!!s.enableMemPattern,i,!!s.enableProfiling,0,o,a,l,F),0===n&&checkLastError("Can't create session options."),s.executionProviders&&setExecutionProviders(n,s.executionProviders,r),s.freeDimensionOverrides)for(const[t,i]of Object.entries(s.freeDimensionOverrides)){if("string"!=typeof t)throw new Error(`free dimension override name must be a string: ${t}`);if("number"!=typeof i||!Number.isInteger(i)||i<0)throw new Error(`free dimension override value must be a non-negative integer: ${i}`);const s=allocWasmString(t,r);0!==e._OrtAddFreeDimensionOverride(n,s,i)&&checkLastError(`Can't set a free dimension override: ${t} - ${i}.`)}return void 0!==s.extra&&iterateExtraOptions(s.extra,"",new WeakSet,((t,s)=>{const i=allocWasmString(t,r),o=allocWasmString(s,r);0!==e._OrtAddSessionConfigEntry(n,i,o)&&checkLastError(`Can't set a session config entry: ${t} - ${s}.`)})),[n,r]}catch(t){throw 0!==n&&e._OrtReleaseSessionOptions(n),r.forEach((t=>e._free(t))),t}}}}),tensorDataTypeStringToEnum,tensorDataTypeEnumToString,getTensorElementSize,tensorTypeToTypedArrayConstructor,logLevelStringToEnum,isGpuBufferSupportedType,dataLocationStringToEnum,init_wasm_common=__esm({"web/lib/wasm/wasm-common.ts"(){tensorDataTypeStringToEnum=t=>{switch(t){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;default:throw new Error(`unsupported data type: ${t}`)}},tensorDataTypeEnumToString=t=>{switch(t){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";default:throw new Error(`unsupported data type: ${t}`)}},getTensorElementSize=t=>[void 0,4,1,1,2,2,4,8,void 0,1,2,8,4,8,void 0,void 0,void 0][t],tensorTypeToTypedArrayConstructor=t=>{switch(t){case"float16":case"uint16":return Uint16Array;case"float32":return Float32Array;case"uint8":case"bool":return Uint8Array;case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${t}`)}},logLevelStringToEnum=t=>{switch(t){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${t}`)}},isGpuBufferSupportedType=t=>"float32"===t||"int32"===t||"int64"===t||"bool"===t||"float16"===t||"uint32"===t,dataLocationStringToEnum=t=>{switch(t){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;default:throw new Error(`unsupported data location: ${t}`)}}}}),loadFile,init_wasm_utils_load_file=__esm({"web/lib/wasm/wasm-utils-load-file.ts"(){init_fs(),init_promises(),loadFile=async t=>{if("string"!=typeof t)return t instanceof Blob?new Uint8Array(await t.arrayBuffer()):t instanceof Uint8Array?t:new Uint8Array(t);if("undefined"==typeof process||!process.versions||!process.versions.node){const e=await fetch(t);if(!e.ok)throw new Error(`failed to load external data file: ${t}`);const n=e.headers.get("Content-Length"),r=n?parseInt(n,10):0;if(r<1073741824)return new Uint8Array(await e.arrayBuffer());{if(!e.body)throw new Error(`failed to load external data file: ${t}, no response body.`);const n=e.body.getReader();let s;try{s=new ArrayBuffer(r)}catch(t){if(!(t instanceof RangeError))throw t;{const t=Math.ceil(r/65536);s=new WebAssembly.Memory({initial:t,maximum:t}).buffer}}let i=0;for(;;){const{done:t,value:e}=await n.read();if(t)break;const r=e.byteLength;new Uint8Array(s,i,r).set(e),i+=r}return new Uint8Array(s,0,r)}}try{return new Uint8Array(await readFile(t))}catch(e){if("ERR_FS_FILE_TOO_LARGE"===e.code){const e=createReadStream(t),n=[];for await(const t of e)n.push(t);return new Uint8Array(Buffer.concat(n))}throw e}}}}),initOrt,initRuntime,initEp,activeSessions,getSessionInputOutputCount,copyFromExternalBuffer,createSession,releaseSession,prepareInputOutputTensor,run,endProfiling,extractTransferableBuffers,init_wasm_core_impl=__esm({"web/lib/wasm/wasm-core-impl.ts"(){init_run_options(),init_session_options(),init_wasm_common(),init_wasm_factory(),init_wasm_utils(),init_wasm_utils_load_file(),initOrt=(t,e)=>{0!==getInstance()._OrtInit(t,e)&&checkLastError("Can't initialize onnxruntime.")},initRuntime=async t=>{initOrt(t.wasm.numThreads,logLevelStringToEnum(t.logLevel))},initEp=async(t,e)=>{0},activeSessions=new Map,getSessionInputOutputCount=t=>{const e=getInstance(),n=e.stackSave();try{const n=e.stackAlloc(8);return 0!==e._OrtGetInputOutputCount(t,n,n+4)&&checkLastError("Can't get session input/output count."),[e.HEAP32[n/4],e.HEAP32[n/4+1]]}finally{e.stackRestore(n)}},copyFromExternalBuffer=t=>{const e=getInstance(),n=e._malloc(t.byteLength);if(0===n)throw new Error(`Can't create a session. failed to allocate a buffer of size ${t.byteLength}.`);return e.HEAPU8.set(t,n),[n,t.byteLength]},createSession=async(t,e)=>{let n,r;const s=getInstance();Array.isArray(t)?[n,r]=t:t.buffer===s.HEAPU8.buffer?[n,r]=[t.byteOffset,t.byteLength]:[n,r]=copyFromExternalBuffer(t);let i=0,o=0,a=0,l=[];const F=[],U=[];try{if([o,l]=setSessionOptions(e),e?.externalData&&s.mountExternalData){const t=[];for(const n of e.externalData){const e="string"==typeof n?n:n.path;t.push(loadFile("string"==typeof n?n:n.data).then((t=>{s.mountExternalData(e,t)})))}await Promise.all(t)}i=s._OrtCreateSession(n,r,o),0===i&&checkLastError("Can't create a session.");const[t,a]=getSessionInputOutputCount(i),c=[],u=[];for(let e=0;e<t;e++){const t=s._OrtGetInputName(i,e);0===t&&checkLastError("Can't get an input name."),F.push(t),c.push(s.UTF8ToString(t))}for(let t=0;t<a;t++){const e=s._OrtGetOutputName(i,t);0===e&&checkLastError("Can't get an output name."),U.push(e);const n=s.UTF8ToString(e);u.push(n)}let Q=null;return activeSessions.set(i,[i,F,U,Q]),[i,c,u]}catch(t){throw F.forEach((t=>s._OrtFree(t))),U.forEach((t=>s._OrtFree(t))),0!==a&&s._OrtReleaseBinding(a),0!==i&&s._OrtReleaseSession(i),t}finally{s._free(n),0!==o&&s._OrtReleaseSessionOptions(o),l.forEach((t=>s._free(t))),s.unmountExternalData?.()}},releaseSession=t=>{const e=getInstance(),n=activeSessions.get(t);if(!n)throw new Error(`cannot release session. invalid session id: ${t}`);const[r,s,i,o]=n;o&&e._OrtReleaseBinding(o.handle),e.jsepUnregisterBuffers?.(t),s.forEach((t=>e._OrtFree(t))),i.forEach((t=>e._OrtFree(t))),e._OrtReleaseSession(r),activeSessions.delete(t)},prepareInputOutputTensor=(t,e,n,r,s)=>{if(!t)return void e.push(0);const i=getInstance(),o=t[0],a=t[1],l=t[3];let F,U;if("string"===o&&"gpu-buffer"===l)throw new Error("String tensor is not supported on GPU.");if("gpu-buffer"===l){const e=t[2].gpuBuffer,n=getTensorElementSize(tensorDataTypeStringToEnum(o));U=a.reduce(((t,e)=>t*e),1)*n,F=i.jsepRegisterBuffer(r,s,e,U)}else{const e=t[2];if(Array.isArray(e)){U=4*e.length,F=i._malloc(U),n.push(F);let t=F/4;for(let r=0;r<e.length;r++){if("string"!=typeof e[r])throw new TypeError(`tensor data at index ${r} is not a string`);i.HEAPU32[t++]=allocWasmString(e[r],n)}}else U=e.byteLength,F=i._malloc(U),n.push(F),i.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,U),F)}const c=i.stackSave(),u=i.stackAlloc(4*a.length);try{let t=u/4;a.forEach((e=>i.HEAP32[t++]=e));const n=i._OrtCreateTensor(tensorDataTypeStringToEnum(o),F,U,u,a.length,dataLocationStringToEnum(l));0===n&&checkLastError(`Can't create tensor for input/output. session=${r}, index=${s}.`),e.push(n)}finally{i.stackRestore(c)}},run=async(t,e,n,r,s,i)=>{const o=getInstance(),a=activeSessions.get(t);if(!a)throw new Error(`cannot run inference. invalid session id: ${t}`);const[l,F,U,c]=a,u=e.length,Q=r.length;let d=0,B=[];const p=[],g=[],h=[],b=o.stackSave(),f=o.stackAlloc(4*u),m=o.stackAlloc(4*u),x=o.stackAlloc(4*Q),y=o.stackAlloc(4*Q);try{[d,B]=setRunOptions(i);for(let r=0;r<u;r++)prepareInputOutputTensor(n[r],p,h,t,e[r]);for(let e=0;e<Q;e++)prepareInputOutputTensor(s[e],g,h,t,u+r[e]);let a,b=f/4,S=m/4,I=x/4,L=y/4;for(let t=0;t<u;t++)o.HEAPU32[b++]=p[t],o.HEAPU32[S++]=F[e[t]];for(let t=0;t<Q;t++)o.HEAPU32[I++]=g[t],o.HEAPU32[L++]=U[r[t]];0,a=await o._OrtRun(l,m,f,u,y,Q,x,d),0!==a&&checkLastError("failed to call OrtRun().");const R=[];for(let t=0;t<Q;t++){const e=o.HEAPU32[x/4+t];if(e===g[t]){R.push(s[t]);continue}const n=o.stackSave(),i=o.stackAlloc(16);let a,l=!1,F=0;try{0!==o._OrtGetTensorData(e,i,i+4,i+8,i+12)&&checkLastError(`Can't access output tensor data on index ${t}.`);let n=i/4;const s=o.HEAPU32[n++];F=o.HEAPU32[n++];const U=o.HEAPU32[n++],u=o.HEAPU32[n++],Q=[];for(let t=0;t<u;t++)Q.push(o.HEAPU32[U/4+t]);o._OrtFree(U);const d=Q.reduce(((t,e)=>t*e),1);a=tensorDataTypeEnumToString(s);const B=c?.outputPreferredLocations[r[t]];if("string"===a){if("gpu-buffer"===B)throw new Error("String tensor is not supported on GPU.");const t=[];let e=F/4;for(let n=0;n<d;n++){const r=o.HEAPU32[e++],s=n===d-1?void 0:o.HEAPU32[e]-r;t.push(o.UTF8ToString(r,s))}R.push([a,Q,t,"cpu"])}else if("gpu-buffer"===B&&d>0){const t=o.jsepGetBuffer(F),n=getTensorElementSize(s);if(void 0===n||!isGpuBufferSupportedType(a))throw new Error(`Unsupported data type: ${a}`);l=!0,R.push([a,Q,{gpuBuffer:t,download:o.jsepCreateDownloader(t,d*n,a),dispose:()=>{o._OrtReleaseTensor(e)}},"gpu-buffer"])}else{const t=new(tensorTypeToTypedArrayConstructor(a))(d);new Uint8Array(t.buffer,t.byteOffset,t.byteLength).set(o.HEAPU8.subarray(F,F+t.byteLength)),R.push([a,Q,t,"cpu"])}}finally{o.stackRestore(n),"string"===a&&F&&o._free(F),l||o._OrtReleaseTensor(e)}}return c&&o._OrtClearBoundOutputs(c.handle),R}finally{o.stackRestore(b),p.forEach((t=>o._OrtReleaseTensor(t))),g.forEach((t=>o._OrtReleaseTensor(t))),h.forEach((t=>o._free(t))),0!==d&&o._OrtReleaseRunOptions(d),B.forEach((t=>o._free(t)))}},endProfiling=t=>{const e=getInstance(),n=activeSessions.get(t);if(!n)throw new Error("invalid session id");const r=n[0],s=e._OrtEndProfiling(r);0===s&&checkLastError("Can't get an profile file name."),e._OrtFree(s)},extractTransferableBuffers=t=>{const e=[];for(const n of t){const t=n[2];!Array.isArray(t)&&"buffer"in t&&e.push(t.buffer)}return e}}}),require_main=__commonJS({"proxy-worker:./proxy-worker/main"(t,e){e.exports='/*!\n * ONNX Runtime Web v1.17.1\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n"use strict";\n(() => {\n  var __defProp = Object.defineProperty;\n  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n  var __getOwnPropNames = Object.getOwnPropertyNames;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __esm = (fn, res) => function __init() {\n    return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n  };\n  var __commonJS = (cb, mod) => function __require() {\n    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n  };\n  var __export = (target, all) => {\n    for (var name in all)\n      __defProp(target, name, { get: all[name], enumerable: true });\n  };\n  var __copyProps = (to, from, except, desc) => {\n    if (from && typeof from === "object" || typeof from === "function") {\n      for (let key of __getOwnPropNames(from))\n        if (!__hasOwnProp.call(to, key) && key !== except)\n          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n    }\n    return to;\n  };\n  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);\n\n  // nodejs-ignore:fs\n  var fs_exports = {};\n  __export(fs_exports, {\n    createReadStream: () => createReadStream,\n    readFile: () => readFile,\n    readFileSync: () => readFileSync\n  });\n  var readFile, readFileSync, createReadStream;\n  var init_fs = __esm({\n    "nodejs-ignore:fs"() {\n      readFile = void 0;\n      readFileSync = void 0;\n      createReadStream = void 0;\n    }\n  });\n\n  // nodejs-ignore:path\n  var path_exports = {};\n  __export(path_exports, {\n    join: () => join2\n  });\n  var join2;\n  var init_path = __esm({\n    "nodejs-ignore:path"() {\n      join2 = void 0;\n    }\n  });\n\n  // web/lib/wasm/binding/ort-wasm.js\n  var require_ort_wasm = __commonJS({\n    "web/lib/wasm/binding/ort-wasm.js"(exports, module) {\n      "use strict";\n      var ortWasm = (() => {\n        var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;\n        if (typeof __filename !== "undefined")\n          _scriptDir = _scriptDir || __filename;\n        return function(moduleArg = {}) {\n          var f = moduleArg, k, l;\n          f.ready = new Promise((a, b) => {\n            k = a;\n            l = b;\n          });\n          var aa = Object.assign({}, f), ba = "./this.program", ca = "object" == typeof window, q = "function" == typeof importScripts, da = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, v = "", x, z, A;\n          if (da) {\n            var fs = (init_fs(), __toCommonJS(fs_exports)), B = (init_path(), __toCommonJS(path_exports));\n            v = q ? B.dirname(v) + "/" : __dirname + "/";\n            x = (a, b) => {\n              a = C(a) ? new URL(a) : B.normalize(a);\n              return fs.readFileSync(a, b ? void 0 : "utf8");\n            };\n            A = (a) => {\n              a = x(a, true);\n              a.buffer || (a = new Uint8Array(a));\n              return a;\n            };\n            z = (a, b, c, e = true) => {\n              a = C(a) ? new URL(a) : B.normalize(a);\n              fs.readFile(a, e ? void 0 : "utf8", (g, h) => {\n                g ? c(g) : b(e ? h.buffer : h);\n              });\n            };\n            !f.thisProgram && 1 < process.argv.length && (ba = process.argv[1].replace(/\\\\/g, "/"));\n            process.argv.slice(2);\n            f.inspect = () => "[Emscripten Module object]";\n          } else if (ca || q)\n            q ? v = self.location.href : "undefined" != typeof document && document.currentScript && (v = document.currentScript.src), _scriptDir && (v = _scriptDir), 0 !== v.indexOf("blob:") ? v = v.substr(0, v.replace(/[?#].*/, "").lastIndexOf("/") + 1) : v = "", x = (a) => {\n              var b = new XMLHttpRequest();\n              b.open("GET", a, false);\n              b.send(null);\n              return b.responseText;\n            }, q && (A = (a) => {\n              var b = new XMLHttpRequest();\n              b.open("GET", a, false);\n              b.responseType = "arraybuffer";\n              b.send(null);\n              return new Uint8Array(b.response);\n            }), z = (a, b, c) => {\n              var e = new XMLHttpRequest();\n              e.open("GET", a, true);\n              e.responseType = "arraybuffer";\n              e.onload = () => {\n                200 == e.status || 0 == e.status && e.response ? b(e.response) : c();\n              };\n              e.onerror = c;\n              e.send(null);\n            };\n          var ea = console.log.bind(console), D = console.error.bind(console);\n          Object.assign(f, aa);\n          aa = null;\n          "object" != typeof WebAssembly && E("no native wasm support detected");\n          var F, fa = false, G, H, I, J, ha;\n          function ia() {\n            var a = F.buffer;\n            f.HEAP8 = G = new Int8Array(a);\n            f.HEAP16 = new Int16Array(a);\n            f.HEAPU8 = H = new Uint8Array(a);\n            f.HEAPU16 = new Uint16Array(a);\n            f.HEAP32 = I = new Int32Array(a);\n            f.HEAPU32 = J = new Uint32Array(a);\n            f.HEAPF32 = new Float32Array(a);\n            f.HEAPF64 = ha = new Float64Array(a);\n          }\n          var K = [], L = [], ja = [], M = 0, N = null, O = null;\n          function E(a) {\n            a = "Aborted(" + a + ")";\n            D(a);\n            fa = true;\n            a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n            l(a);\n            throw a;\n          }\n          var ka = (a) => a.startsWith("data:application/octet-stream;base64,"), C = (a) => a.startsWith("file://"), P;\n          P = "ort-wasm.wasm";\n          if (!ka(P)) {\n            var la = P;\n            P = f.locateFile ? f.locateFile(la, v) : v + la;\n          }\n          function ma(a) {\n            if (A)\n              return A(a);\n            throw "both async and sync fetching of the wasm failed";\n          }\n          function na(a) {\n            if (ca || q) {\n              if ("function" == typeof fetch && !C(a))\n                return fetch(a, { credentials: "same-origin" }).then((b) => {\n                  if (!b.ok)\n                    throw "failed to load wasm binary file at \'" + a + "\'";\n                  return b.arrayBuffer();\n                }).catch(() => ma(a));\n              if (z)\n                return new Promise((b, c) => {\n                  z(a, (e) => b(new Uint8Array(e)), c);\n                });\n            }\n            return Promise.resolve().then(() => ma(a));\n          }\n          function oa(a, b, c) {\n            return na(a).then((e) => WebAssembly.instantiate(e, b)).then((e) => e).then(c, (e) => {\n              D(`failed to asynchronously prepare wasm: ${e}`);\n              E(e);\n            });\n          }\n          function pa(a, b) {\n            var c = P;\n            return "function" != typeof WebAssembly.instantiateStreaming || ka(c) || C(c) || da || "function" != typeof fetch ? oa(c, a, b) : fetch(c, { credentials: "same-origin" }).then((e) => WebAssembly.instantiateStreaming(e, a).then(b, function(g) {\n              D(`wasm streaming compile failed: ${g}`);\n              D("falling back to ArrayBuffer instantiation");\n              return oa(c, a, b);\n            }));\n          }\n          var Q, qa = { 919888: (a, b, c, e) => {\n            if ("undefined" == typeof f || !f.za)\n              return 1;\n            a = R(a >>> 0);\n            a.startsWith("./") && (a = a.substring(2));\n            a = f.za.get(a);\n            if (!a)\n              return 2;\n            b >>>= 0;\n            c >>>= 0;\n            if (b + c > a.byteLength)\n              return 3;\n            try {\n              return H.set(a.subarray(b, b + c), e >>> 0 >>> 0), 0;\n            } catch {\n              return 4;\n            }\n          } };\n          function ra(a) {\n            this.xa = a - 24;\n            this.Ha = function(b) {\n              J[this.xa + 4 >>> 2 >>> 0] = b;\n            };\n            this.Ga = function(b) {\n              J[this.xa + 8 >>> 2 >>> 0] = b;\n            };\n            this.Aa = function(b, c) {\n              this.Fa();\n              this.Ha(b);\n              this.Ga(c);\n            };\n            this.Fa = function() {\n              J[this.xa + 16 >>> 2 >>> 0] = 0;\n            };\n          }\n          var sa = 0, ta = 0, ua = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, va = (a, b, c) => {\n            b >>>= 0;\n            var e = b + c;\n            for (c = b; a[c] && !(c >= e); )\n              ++c;\n            if (16 < c - b && a.buffer && ua)\n              return ua.decode(a.subarray(b, c));\n            for (e = ""; b < c; ) {\n              var g = a[b++];\n              if (g & 128) {\n                var h = a[b++] & 63;\n                if (192 == (g & 224))\n                  e += String.fromCharCode((g & 31) << 6 | h);\n                else {\n                  var m = a[b++] & 63;\n                  g = 224 == (g & 240) ? (g & 15) << 12 | h << 6 | m : (g & 7) << 18 | h << 12 | m << 6 | a[b++] & 63;\n                  65536 > g ? e += String.fromCharCode(g) : (g -= 65536, e += String.fromCharCode(55296 | g >> 10, 56320 | g & 1023));\n                }\n              } else\n                e += String.fromCharCode(g);\n            }\n            return e;\n          }, R = (a, b) => (a >>>= 0) ? va(H, a, b) : "", S = (a) => {\n            for (var b = 0, c = 0; c < a.length; ++c) {\n              var e = a.charCodeAt(c);\n              127 >= e ? b++ : 2047 >= e ? b += 2 : 55296 <= e && 57343 >= e ? (b += 4, ++c) : b += 3;\n            }\n            return b;\n          }, T = (a, b, c, e) => {\n            c >>>= 0;\n            if (!(0 < e))\n              return 0;\n            var g = c;\n            e = c + e - 1;\n            for (var h = 0; h < a.length; ++h) {\n              var m = a.charCodeAt(h);\n              if (55296 <= m && 57343 >= m) {\n                var r = a.charCodeAt(++h);\n                m = 65536 + ((m & 1023) << 10) | r & 1023;\n              }\n              if (127 >= m) {\n                if (c >= e)\n                  break;\n                b[c++ >>> 0] = m;\n              } else {\n                if (2047 >= m) {\n                  if (c + 1 >= e)\n                    break;\n                  b[c++ >>> 0] = 192 | m >> 6;\n                } else {\n                  if (65535 >= m) {\n                    if (c + 2 >= e)\n                      break;\n                    b[c++ >>> 0] = 224 | m >> 12;\n                  } else {\n                    if (c + 3 >= e)\n                      break;\n                    b[c++ >>> 0] = 240 | m >> 18;\n                    b[c++ >>> 0] = 128 | m >> 12 & 63;\n                  }\n                  b[c++ >>> 0] = 128 | m >> 6 & 63;\n                }\n                b[c++ >>> 0] = 128 | m & 63;\n              }\n            }\n            b[c >>> 0] = 0;\n            return c - g;\n          }, U = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), wa = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], xa = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], Ca = (a) => {\n            var b = S(a) + 1, c = Ba(b);\n            c && T(a, H, c, b);\n            return c;\n          }, V = [], W = {}, Da = () => {\n            if (!X) {\n              var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace(\n                "-",\n                "_"\n              ) + ".UTF-8", _: ba || "./this.program" }, b;\n              for (b in W)\n                void 0 === W[b] ? delete a[b] : a[b] = W[b];\n              var c = [];\n              for (b in a)\n                c.push(`${b}=${a[b]}`);\n              X = c;\n            }\n            return X;\n          }, X, Ea = [null, [], []], Fa = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Ga = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n          function Ha(a) {\n            var b = Array(S(a) + 1);\n            T(a, b, 0, b.length);\n            return b;\n          }\n          function Ia(a, b, c, e) {\n            function g(d, n, p) {\n              for (d = "number" == typeof d ? d.toString() : d || ""; d.length < n; )\n                d = p[0] + d;\n              return d;\n            }\n            function h(d, n) {\n              return g(d, n, "0");\n            }\n            function m(d, n) {\n              function p(ya) {\n                return 0 > ya ? -1 : 0 < ya ? 1 : 0;\n              }\n              var y;\n              0 === (y = p(d.getFullYear() - n.getFullYear())) && 0 === (y = p(d.getMonth() - n.getMonth())) && (y = p(d.getDate() - n.getDate()));\n              return y;\n            }\n            function r(d) {\n              switch (d.getDay()) {\n                case 0:\n                  return new Date(d.getFullYear() - 1, 11, 29);\n                case 1:\n                  return d;\n                case 2:\n                  return new Date(d.getFullYear(), 0, 3);\n                case 3:\n                  return new Date(\n                    d.getFullYear(),\n                    0,\n                    2\n                  );\n                case 4:\n                  return new Date(d.getFullYear(), 0, 1);\n                case 5:\n                  return new Date(d.getFullYear() - 1, 11, 31);\n                case 6:\n                  return new Date(d.getFullYear() - 1, 11, 30);\n              }\n            }\n            function w(d) {\n              var n = d.ta;\n              for (d = new Date(new Date(d.ua + 1900, 0, 1).getTime()); 0 < n; ) {\n                var p = d.getMonth(), y = (U(d.getFullYear()) ? Fa : Ga)[p];\n                if (n > y - d.getDate())\n                  n -= y - d.getDate() + 1, d.setDate(1), 11 > p ? d.setMonth(p + 1) : (d.setMonth(0), d.setFullYear(d.getFullYear() + 1));\n                else {\n                  d.setDate(d.getDate() + n);\n                  break;\n                }\n              }\n              p = new Date(d.getFullYear() + 1, 0, 4);\n              n = r(new Date(\n                d.getFullYear(),\n                0,\n                4\n              ));\n              p = r(p);\n              return 0 >= m(n, d) ? 0 >= m(p, d) ? d.getFullYear() + 1 : d.getFullYear() : d.getFullYear() - 1;\n            }\n            a >>>= 0;\n            b >>>= 0;\n            c >>>= 0;\n            e >>>= 0;\n            var t = J[e + 40 >>> 2 >>> 0];\n            e = { Da: I[e >>> 2 >>> 0], Ca: I[e + 4 >>> 2 >>> 0], va: I[e + 8 >>> 2 >>> 0], ya: I[e + 12 >>> 2 >>> 0], wa: I[e + 16 >>> 2 >>> 0], ua: I[e + 20 >>> 2 >>> 0], oa: I[e + 24 >>> 2 >>> 0], ta: I[e + 28 >>> 2 >>> 0], Ia: I[e + 32 >>> 2 >>> 0], Ba: I[e + 36 >>> 2 >>> 0], Ea: t ? R(t) : "" };\n            c = R(c);\n            t = {\n              "%c": "%a %b %d %H:%M:%S %Y",\n              "%D": "%m/%d/%y",\n              "%F": "%Y-%m-%d",\n              "%h": "%b",\n              "%r": "%I:%M:%S %p",\n              "%R": "%H:%M",\n              "%T": "%H:%M:%S",\n              "%x": "%m/%d/%y",\n              "%X": "%H:%M:%S",\n              "%Ec": "%c",\n              "%EC": "%C",\n              "%Ex": "%m/%d/%y",\n              "%EX": "%H:%M:%S",\n              "%Ey": "%y",\n              "%EY": "%Y",\n              "%Od": "%d",\n              "%Oe": "%e",\n              "%OH": "%H",\n              "%OI": "%I",\n              "%Om": "%m",\n              "%OM": "%M",\n              "%OS": "%S",\n              "%Ou": "%u",\n              "%OU": "%U",\n              "%OV": "%V",\n              "%Ow": "%w",\n              "%OW": "%W",\n              "%Oy": "%y"\n            };\n            for (var u in t)\n              c = c.replace(new RegExp(u, "g"), t[u]);\n            var za = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), Aa = "January February March April May June July August September October November December".split(" ");\n            t = {\n              "%a": (d) => za[d.oa].substring(0, 3),\n              "%A": (d) => za[d.oa],\n              "%b": (d) => Aa[d.wa].substring(0, 3),\n              "%B": (d) => Aa[d.wa],\n              "%C": (d) => h((d.ua + 1900) / 100 | 0, 2),\n              "%d": (d) => h(d.ya, 2),\n              "%e": (d) => g(d.ya, 2, " "),\n              "%g": (d) => w(d).toString().substring(2),\n              "%G": (d) => w(d),\n              "%H": (d) => h(d.va, 2),\n              "%I": (d) => {\n                d = d.va;\n                0 == d ? d = 12 : 12 < d && (d -= 12);\n                return h(d, 2);\n              },\n              "%j": (d) => {\n                for (var n = 0, p = 0; p <= d.wa - 1; n += (U(d.ua + 1900) ? Fa : Ga)[p++])\n                  ;\n                return h(d.ya + n, 3);\n              },\n              "%m": (d) => h(d.wa + 1, 2),\n              "%M": (d) => h(d.Ca, 2),\n              "%n": () => "\\n",\n              "%p": (d) => 0 <= d.va && 12 > d.va ? "AM" : "PM",\n              "%S": (d) => h(d.Da, 2),\n              "%t": () => "\t",\n              "%u": (d) => d.oa || 7,\n              "%U": (d) => h(\n                Math.floor((d.ta + 7 - d.oa) / 7),\n                2\n              ),\n              "%V": (d) => {\n                var n = Math.floor((d.ta + 7 - (d.oa + 6) % 7) / 7);\n                2 >= (d.oa + 371 - d.ta - 2) % 7 && n++;\n                if (n)\n                  53 == n && (p = (d.oa + 371 - d.ta) % 7, 4 == p || 3 == p && U(d.ua) || (n = 1));\n                else {\n                  n = 52;\n                  var p = (d.oa + 7 - d.ta - 1) % 7;\n                  (4 == p || 5 == p && U(d.ua % 400 - 1)) && n++;\n                }\n                return h(n, 2);\n              },\n              "%w": (d) => d.oa,\n              "%W": (d) => h(Math.floor((d.ta + 7 - (d.oa + 6) % 7) / 7), 2),\n              "%y": (d) => (d.ua + 1900).toString().substring(2),\n              "%Y": (d) => d.ua + 1900,\n              "%z": (d) => {\n                d = d.Ba;\n                var n = 0 <= d;\n                d = Math.abs(d) / 60;\n                return (n ? "+" : "-") + String("0000" + (d / 60 * 100 + d % 60)).slice(-4);\n              },\n              "%Z": (d) => d.Ea,\n              "%%": () => "%"\n            };\n            c = c.replace(/%%/g, "\\0\\0");\n            for (u in t)\n              c.includes(u) && (c = c.replace(new RegExp(u, "g"), t[u](e)));\n            c = c.replace(/\\0\\0/g, "%");\n            u = Ha(c);\n            if (u.length > b)\n              return 0;\n            G.set(u, a >>> 0);\n            return u.length - 1;\n          }\n          var La = { a: function(a, b, c) {\n            a >>>= 0;\n            new ra(a).Aa(b >>> 0, c >>> 0);\n            sa = a;\n            ta++;\n            throw sa;\n          }, e: function() {\n            return 0;\n          }, H: function() {\n          }, x: function() {\n          }, z: function() {\n          }, J: function() {\n            return 0;\n          }, F: function() {\n          }, A: function() {\n          }, E: function() {\n          }, g: function() {\n          }, y: function() {\n          }, v: function() {\n          }, G: function() {\n          }, w: function() {\n          }, k: () => 1, n: function(a, b, c) {\n            a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n            c >>>= 0;\n            a = new Date(1e3 * a);\n            I[c >>> 2 >>> 0] = a.getUTCSeconds();\n            I[c + 4 >>> 2 >>> 0] = a.getUTCMinutes();\n            I[c + 8 >>> 2 >>> 0] = a.getUTCHours();\n            I[c + 12 >>> 2 >>> 0] = a.getUTCDate();\n            I[c + 16 >>> 2 >>> 0] = a.getUTCMonth();\n            I[c + 20 >>> 2 >>> 0] = a.getUTCFullYear() - 1900;\n            I[c + 24 >>> 2 >>> 0] = a.getUTCDay();\n            I[c + 28 >>> 2 >>> 0] = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0;\n          }, o: function(a, b, c) {\n            a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n            c >>>= 0;\n            a = new Date(1e3 * a);\n            I[c >>> 2 >>> 0] = a.getSeconds();\n            I[c + 4 >>> 2 >>> 0] = a.getMinutes();\n            I[c + 8 >>> 2 >>> 0] = a.getHours();\n            I[c + 12 >>> 2 >>> 0] = a.getDate();\n            I[c + 16 >>> 2 >>> 0] = a.getMonth();\n            I[c + 20 >>> 2 >>> 0] = a.getFullYear() - 1900;\n            I[c + 24 >>> 2 >>> 0] = a.getDay();\n            I[c + 28 >>> 2 >>> 0] = (U(a.getFullYear()) ? wa : xa)[a.getMonth()] + a.getDate() - 1 | 0;\n            I[c + 36 >>> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n            b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset();\n            var e = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n            I[c + 32 >>> 2 >>> 0] = (b != e && a.getTimezoneOffset() == Math.min(e, b)) | 0;\n          }, p: function(a) {\n            a >>>= 0;\n            var b = new Date(I[a + 20 >>> 2 >>> 0] + 1900, I[a + 16 >>> 2 >>> 0], I[a + 12 >>> 2 >>> 0], I[a + 8 >>> 2 >>> 0], I[a + 4 >>> 2 >>> 0], I[a >>> 2 >>> 0], 0), c = I[a + 32 >>> 2 >>> 0], e = b.getTimezoneOffset(), g = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), m = Math.min(h, g);\n            0 > c ? I[a + 32 >>> 2 >>> 0] = Number(g != h && m == e) : 0 < c != (m == e) && (g = Math.max(h, g), b.setTime(b.getTime() + 6e4 * ((0 < c ? m : g) - e)));\n            I[a + 24 >>> 2 >>> 0] = b.getDay();\n            I[a + 28 >>> 2 >>> 0] = (U(b.getFullYear()) ? wa : xa)[b.getMonth()] + b.getDate() - 1 | 0;\n            I[a >>> 2 >>> 0] = b.getSeconds();\n            I[a + 4 >>> 2 >>> 0] = b.getMinutes();\n            I[a + 8 >>> 2 >>> 0] = b.getHours();\n            I[a + 12 >>> 2 >>> 0] = b.getDate();\n            I[a + 16 >>> 2 >>> 0] = b.getMonth();\n            I[a + 20 >>> 2 >>> 0] = b.getYear();\n            a = b.getTime();\n            isNaN(a) ? (I[Ja() >>> 2 >>> 0] = 61, a = -1) : a /= 1e3;\n            return Ka((Q = a, 1 <= +Math.abs(Q) ? 0 < Q ? +Math.floor(Q / 4294967296) >>> 0 : ~~+Math.ceil((Q - +(~~Q >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0;\n          }, l: function() {\n            return -52;\n          }, m: function() {\n          }, t: function(a, b, c) {\n            function e(w) {\n              return (w = w.toTimeString().match(/\\(([A-Za-z ]+)\\)$/)) ? w[1] : "GMT";\n            }\n            c >>>= 0;\n            var g = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(g, 0, 1), m = new Date(g, 6, 1);\n            g = h.getTimezoneOffset();\n            var r = m.getTimezoneOffset();\n            J[a >>> 0 >>> 2 >>> 0] = 60 * Math.max(g, r);\n            I[b >>> 0 >>> 2 >>> 0] = Number(g != r);\n            a = e(h);\n            b = e(m);\n            a = Ca(a);\n            b = Ca(b);\n            r < g ? (J[c >>> 2 >>> 0] = a, J[c + 4 >>> 2 >>> 0] = b) : (J[c >>> 2 >>> 0] = b, J[c + 4 >>> 2 >>> 0] = a);\n          }, d: () => {\n            E("");\n          }, B: function(a, b, c) {\n            a >>>= 0;\n            b >>>= 0;\n            c >>>= 0;\n            V.length = 0;\n            for (var e; e = H[b++ >>> 0]; ) {\n              var g = 105 != e;\n              g &= 112 != e;\n              c += g && c % 8 ? 4 : 0;\n              V.push(112 == e ? J[c >>> 2 >>> 0] : 105 == e ? I[c >>> 2 >>> 0] : ha[c >>> 3 >>> 0]);\n              c += g ? 8 : 4;\n            }\n            return qa[a].apply(null, V);\n          }, h: () => Date.now(), u: function() {\n            return 4294901760;\n          }, b: () => performance.now(), I: function(a, b, c) {\n            b >>>= 0;\n            return H.copyWithin(a >>> 0 >>> 0, b >>> 0, b + (c >>> 0) >>> 0);\n          }, s: function(a) {\n            a >>>= 0;\n            var b = H.length;\n            if (4294901760 < a)\n              return false;\n            for (var c = 1; 4 >= c; c *= 2) {\n              var e = b * (1 + 0.2 / c);\n              e = Math.min(e, a + 100663296);\n              var g = Math;\n              e = Math.max(a, e);\n              a: {\n                g = (g.min.call(g, 4294901760, e + (65536 - e % 65536) % 65536) - F.buffer.byteLength + 65535) / 65536;\n                try {\n                  F.grow(g);\n                  ia();\n                  var h = 1;\n                  break a;\n                } catch (m) {\n                }\n                h = void 0;\n              }\n              if (h)\n                return true;\n            }\n            return false;\n          }, C: function(a, b) {\n            a >>>= 0;\n            b >>>= 0;\n            var c = 0;\n            Da().forEach((e, g) => {\n              var h = b + c;\n              g = J[a + 4 * g >>> 2 >>> 0] = h;\n              for (h = 0; h < e.length; ++h)\n                G[g++ >>> 0 >>> 0] = e.charCodeAt(h);\n              G[g >>> 0 >>> 0] = 0;\n              c += e.length + 1;\n            });\n            return 0;\n          }, D: function(a, b) {\n            a >>>= 0;\n            b >>>= 0;\n            var c = Da();\n            J[a >>> 2 >>> 0] = c.length;\n            var e = 0;\n            c.forEach((g) => e += g.length + 1);\n            J[b >>> 2 >>> 0] = e;\n            return 0;\n          }, f: () => 52, j: function() {\n            return 52;\n          }, q: function() {\n            return 70;\n          }, i: function(a, b, c, e) {\n            b >>>= 0;\n            c >>>= 0;\n            e >>>= 0;\n            for (var g = 0, h = 0; h < c; h++) {\n              var m = J[b >>> 2 >>> 0], r = J[b + 4 >>> 2 >>> 0];\n              b += 8;\n              for (var w = 0; w < r; w++) {\n                var t = H[m + w >>> 0], u = Ea[a];\n                0 === t || 10 === t ? ((1 === a ? ea : D)(va(u, 0)), u.length = 0) : u.push(t);\n              }\n              g += r;\n            }\n            J[e >>> 2 >>> 0] = g;\n            return 0;\n          }, r: Ia, c: function(a, b, c, e) {\n            return Ia(a >>> 0, b >>> 0, c >>> 0, e >>> 0);\n          } }, Y = function() {\n            function a(c) {\n              Y = c.exports;\n              Y = Ma();\n              F = Y.K;\n              ia();\n              L.unshift(Y.L);\n              M--;\n              0 == M && (null !== N && (clearInterval(N), N = null), O && (c = O, O = null, c()));\n              return Y;\n            }\n            var b = { a: La };\n            M++;\n            if (f.instantiateWasm)\n              try {\n                return f.instantiateWasm(b, a);\n              } catch (c) {\n                D(`Module.instantiateWasm callback failed with error: ${c}`), l(c);\n              }\n            pa(b, function(c) {\n              a(c.instance);\n            }).catch(l);\n            return {};\n          }();\n          f._OrtInit = (a, b) => (f._OrtInit = Y.M)(a, b);\n          f._OrtGetLastError = (a, b) => (f._OrtGetLastError = Y.N)(a, b);\n          f._OrtCreateSessionOptions = (a, b, c, e, g, h, m, r, w, t) => (f._OrtCreateSessionOptions = Y.O)(a, b, c, e, g, h, m, r, w, t);\n          f._OrtAppendExecutionProvider = (a, b) => (f._OrtAppendExecutionProvider = Y.P)(a, b);\n          f._OrtAddFreeDimensionOverride = (a, b, c) => (f._OrtAddFreeDimensionOverride = Y.Q)(a, b, c);\n          f._OrtAddSessionConfigEntry = (a, b, c) => (f._OrtAddSessionConfigEntry = Y.R)(a, b, c);\n          f._OrtReleaseSessionOptions = (a) => (f._OrtReleaseSessionOptions = Y.S)(a);\n          f._OrtCreateSession = (a, b, c) => (f._OrtCreateSession = Y.T)(a, b, c);\n          f._OrtReleaseSession = (a) => (f._OrtReleaseSession = Y.U)(a);\n          f._OrtGetInputOutputCount = (a, b, c) => (f._OrtGetInputOutputCount = Y.V)(a, b, c);\n          f._OrtGetInputName = (a, b) => (f._OrtGetInputName = Y.W)(a, b);\n          f._OrtGetOutputName = (a, b) => (f._OrtGetOutputName = Y.X)(a, b);\n          f._OrtFree = (a) => (f._OrtFree = Y.Y)(a);\n          f._OrtCreateTensor = (a, b, c, e, g, h) => (f._OrtCreateTensor = Y.Z)(a, b, c, e, g, h);\n          f._OrtGetTensorData = (a, b, c, e, g) => (f._OrtGetTensorData = Y._)(a, b, c, e, g);\n          f._OrtReleaseTensor = (a) => (f._OrtReleaseTensor = Y.$)(a);\n          f._OrtCreateRunOptions = (a, b, c, e) => (f._OrtCreateRunOptions = Y.aa)(a, b, c, e);\n          f._OrtAddRunConfigEntry = (a, b, c) => (f._OrtAddRunConfigEntry = Y.ba)(a, b, c);\n          f._OrtReleaseRunOptions = (a) => (f._OrtReleaseRunOptions = Y.ca)(a);\n          f._OrtCreateBinding = (a) => (f._OrtCreateBinding = Y.da)(a);\n          f._OrtBindInput = (a, b, c) => (f._OrtBindInput = Y.ea)(a, b, c);\n          f._OrtBindOutput = (a, b, c, e) => (f._OrtBindOutput = Y.fa)(a, b, c, e);\n          f._OrtClearBoundOutputs = (a) => (f._OrtClearBoundOutputs = Y.ga)(a);\n          f._OrtReleaseBinding = (a) => (f._OrtReleaseBinding = Y.ha)(a);\n          f._OrtRunWithBinding = (a, b, c, e, g) => (f._OrtRunWithBinding = Y.ia)(a, b, c, e, g);\n          f._OrtRun = (a, b, c, e, g, h, m, r) => (f._OrtRun = Y.ja)(a, b, c, e, g, h, m, r);\n          f._OrtEndProfiling = (a) => (f._OrtEndProfiling = Y.ka)(a);\n          var Ja = () => (Ja = Y.la)(), Ba = f._malloc = (a) => (Ba = f._malloc = Y.ma)(a);\n          f._free = (a) => (f._free = Y.na)(a);\n          var Ka = (a) => (Ka = Y.pa)(a), Na = () => (Na = Y.qa)(), Oa = (a) => (Oa = Y.ra)(a), Pa = (a) => (Pa = Y.sa)(a);\n          function Ma() {\n            var a = Y;\n            a = Object.assign({}, a);\n            var b = (e) => () => e() >>> 0, c = (e) => (g) => e(g) >>> 0;\n            a.la = b(a.la);\n            a.ma = c(a.ma);\n            a.qa = b(a.qa);\n            a.sa = c(a.sa);\n            return a;\n          }\n          f.stackAlloc = Pa;\n          f.stackSave = Na;\n          f.stackRestore = Oa;\n          f.UTF8ToString = R;\n          f.stringToUTF8 = (a, b, c) => T(a, H, b, c);\n          f.lengthBytesUTF8 = S;\n          var Z;\n          O = function Qa() {\n            Z || Ra();\n            Z || (O = Qa);\n          };\n          function Ra() {\n            if (!(0 < M)) {\n              if (f.preRun)\n                for ("function" == typeof f.preRun && (f.preRun = [f.preRun]); f.preRun.length; ) {\n                  var a = f.preRun.shift();\n                  K.unshift(a);\n                }\n              for (; 0 < K.length; )\n                K.shift()(f);\n              if (!(0 < M || Z || (Z = true, f.calledRun = true, fa))) {\n                for (; 0 < L.length; )\n                  L.shift()(f);\n                for (k(f); 0 < ja.length; )\n                  ja.shift()(f);\n              }\n            }\n          }\n          Ra();\n          return moduleArg.ready;\n        };\n      })();\n      if (typeof exports === "object" && typeof module === "object")\n        module.exports = ortWasm;\n      else if (typeof define === "function" && define["amd"])\n        define([], () => ortWasm);\n    }\n  });\n\n  // nodejs-ignore:worker_threads\n  var require_worker_threads = __commonJS({\n    "nodejs-ignore:worker_threads"() {\n    }\n  });\n\n  // nodejs-ignore:perf_hooks\n  var require_perf_hooks = __commonJS({\n    "nodejs-ignore:perf_hooks"() {\n    }\n  });\n\n  // nodejs-ignore:os\n  var os_exports = {};\n  __export(os_exports, {\n    cpus: () => cpus\n  });\n  var cpus;\n  var init_os = __esm({\n    "nodejs-ignore:os"() {\n      cpus = void 0;\n    }\n  });\n\n  // web/lib/wasm/binding/ort-wasm-threaded.js\n  var require_ort_wasm_threaded = __commonJS({\n    "web/lib/wasm/binding/ort-wasm-threaded.js"(exports, module) {\n      "use strict";\n      var ortWasmThreaded = (() => {\n        var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;\n        if (typeof __filename !== "undefined")\n          _scriptDir = _scriptDir || __filename;\n        return function(moduleArg = {}) {\n          function aa() {\n            e.buffer != l.buffer && m();\n            return l;\n          }\n          function n() {\n            e.buffer != l.buffer && m();\n            return ba;\n          }\n          function p() {\n            e.buffer != l.buffer && m();\n            return ca;\n          }\n          function r() {\n            e.buffer != l.buffer && m();\n            return da;\n          }\n          function ea() {\n            e.buffer != l.buffer && m();\n            return fa;\n          }\n          var v = moduleArg, ha, x;\n          v.ready = new Promise((a, b) => {\n            ha = a;\n            x = b;\n          });\n          var ia = Object.assign({}, v), ja = "./this.program", z = (a, b) => {\n            throw b;\n          }, ka = "object" == typeof window, A = "function" == typeof importScripts, B = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, D = v.ENVIRONMENT_IS_PTHREAD || false, E = "";\n          function la(a) {\n            return v.locateFile ? v.locateFile(a, E) : E + a;\n          }\n          var ma, G, H;\n          if (B) {\n            var fs = (init_fs(), __toCommonJS(fs_exports)), na = (init_path(), __toCommonJS(path_exports));\n            E = A ? na.dirname(E) + "/" : __dirname + "/";\n            ma = (b, c) => {\n              b = I(b) ? new URL(b) : na.normalize(b);\n              return fs.readFileSync(b, c ? void 0 : "utf8");\n            };\n            H = (b) => {\n              b = ma(b, true);\n              b.buffer || (b = new Uint8Array(b));\n              return b;\n            };\n            G = (b, c, d, g = true) => {\n              b = I(b) ? new URL(b) : na.normalize(b);\n              fs.readFile(b, g ? void 0 : "utf8", (h, k) => {\n                h ? d(h) : c(g ? k.buffer : k);\n              });\n            };\n            !v.thisProgram && 1 < process.argv.length && (ja = process.argv[1].replace(/\\\\/g, "/"));\n            process.argv.slice(2);\n            z = (b, c) => {\n              process.exitCode = b;\n              throw c;\n            };\n            v.inspect = () => "[Emscripten Module object]";\n            let a;\n            try {\n              a = require_worker_threads();\n            } catch (b) {\n              throw console.error(\'The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?\'), b;\n            }\n            global.Worker = a.Worker;\n          } else if (ka || A)\n            A ? E = self.location.href : "undefined" != typeof document && document.currentScript && (E = document.currentScript.src), typeof _scriptDir !== "undefined" && _scriptDir && (E = _scriptDir), 0 !== E.indexOf("blob:") ? E = E.substr(0, E.replace(/[?#].*/, "").lastIndexOf("/") + 1) : E = "", B || (ma = (a) => {\n              var b = new XMLHttpRequest();\n              b.open("GET", a, false);\n              b.send(null);\n              return b.responseText;\n            }, A && (H = (a) => {\n              var b = new XMLHttpRequest();\n              b.open("GET", a, false);\n              b.responseType = "arraybuffer";\n              b.send(null);\n              return new Uint8Array(b.response);\n            }), G = (a, b, c) => {\n              var d = new XMLHttpRequest();\n              d.open("GET", a, true);\n              d.responseType = "arraybuffer";\n              d.onload = () => {\n                200 == d.status || 0 == d.status && d.response ? b(d.response) : c();\n              };\n              d.onerror = c;\n              d.send(null);\n            });\n          B && "undefined" == typeof performance && (global.performance = require_perf_hooks().performance);\n          var oa = console.log.bind(console), pa = console.error.bind(console);\n          B && (oa = (...a) => fs.writeSync(1, a.join(" ") + "\\n"), pa = (...a) => fs.writeSync(2, a.join(" ") + "\\n"));\n          var qa = oa, J = pa;\n          Object.assign(v, ia);\n          ia = null;\n          "object" != typeof WebAssembly && ra("no native wasm support detected");\n          var e, sa, K = false, L, l, ba, ca, da, fa;\n          function m() {\n            var a = e.buffer;\n            v.HEAP8 = l = new Int8Array(a);\n            v.HEAP16 = new Int16Array(a);\n            v.HEAPU8 = ba = new Uint8Array(a);\n            v.HEAPU16 = new Uint16Array(a);\n            v.HEAP32 = ca = new Int32Array(a);\n            v.HEAPU32 = da = new Uint32Array(a);\n            v.HEAPF32 = new Float32Array(a);\n            v.HEAPF64 = fa = new Float64Array(a);\n          }\n          var ta = 16777216;\n          if (D)\n            e = v.wasmMemory;\n          else if (v.wasmMemory)\n            e = v.wasmMemory;\n          else if (e = new WebAssembly.Memory({ initial: ta / 65536, maximum: 65536, shared: true }), !(e.buffer instanceof SharedArrayBuffer))\n            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"), B && J("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory");\n          m();\n          ta = e.buffer.byteLength;\n          var ua = [], va = [], wa = [], M = 0, xa = null, N = null;\n          function ya() {\n            M--;\n            if (0 == M && (null !== xa && (clearInterval(xa), xa = null), N)) {\n              var a = N;\n              N = null;\n              a();\n            }\n          }\n          function ra(a) {\n            a = "Aborted(" + a + ")";\n            J(a);\n            K = true;\n            L = 1;\n            a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n            x(a);\n            throw a;\n          }\n          var za = (a) => a.startsWith("data:application/octet-stream;base64,"), I = (a) => a.startsWith("file://"), O;\n          O = "ort-wasm-threaded.wasm";\n          za(O) || (O = la(O));\n          function Aa(a) {\n            if (H)\n              return H(a);\n            throw "both async and sync fetching of the wasm failed";\n          }\n          function Ba(a) {\n            if (ka || A) {\n              if ("function" == typeof fetch && !I(a))\n                return fetch(a, { credentials: "same-origin" }).then((b) => {\n                  if (!b.ok)\n                    throw "failed to load wasm binary file at \'" + a + "\'";\n                  return b.arrayBuffer();\n                }).catch(() => Aa(a));\n              if (G)\n                return new Promise((b, c) => {\n                  G(a, (d) => b(new Uint8Array(d)), c);\n                });\n            }\n            return Promise.resolve().then(() => Aa(a));\n          }\n          function Ca(a, b, c) {\n            return Ba(a).then((d) => WebAssembly.instantiate(d, b)).then((d) => d).then(c, (d) => {\n              J(`failed to asynchronously prepare wasm: ${d}`);\n              ra(d);\n            });\n          }\n          function Da(a, b) {\n            var c = O;\n            return "function" != typeof WebAssembly.instantiateStreaming || za(c) || I(c) || B || "function" != typeof fetch ? Ca(c, a, b) : fetch(c, { credentials: "same-origin" }).then((d) => WebAssembly.instantiateStreaming(d, a).then(b, function(g) {\n              J(`wasm streaming compile failed: ${g}`);\n              J("falling back to ArrayBuffer instantiation");\n              return Ca(c, a, b);\n            }));\n          }\n          var P, Ea = { 921276: (a, b, c, d) => {\n            if ("undefined" == typeof v || !v.cb)\n              return 1;\n            a = Q(a >>> 0);\n            a.startsWith("./") && (a = a.substring(2));\n            a = v.cb.get(a);\n            if (!a)\n              return 2;\n            b >>>= 0;\n            c >>>= 0;\n            d >>>= 0;\n            if (b + c > a.byteLength)\n              return 3;\n            try {\n              return n().set(a.subarray(b, b + c), d >>> 0), 0;\n            } catch {\n              return 4;\n            }\n          } };\n          function R(a) {\n            this.name = "ExitStatus";\n            this.message = `Program terminated with exit(${a})`;\n            this.status = a;\n          }\n          var Fa = (a) => {\n            a.terminate();\n            a.onmessage = () => {\n            };\n          }, Ha = (a) => {\n            0 == S.Pa.length && (Ga(), S.Ya(S.Pa[0]));\n            var b = S.Pa.pop();\n            if (!b)\n              return 6;\n            S.Qa.push(b);\n            S.Ma[a.Oa] = b;\n            b.Oa = a.Oa;\n            var c = { cmd: "run", start_routine: a.kb, arg: a.hb, pthread_ptr: a.Oa };\n            B && b.unref();\n            b.postMessage(c, a.qb);\n            return 0;\n          }, T = 0, Ia = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Ja = (a, b, c) => {\n            b >>>= 0;\n            var d = b + c;\n            for (c = b; a[c] && !(c >= d); )\n              ++c;\n            if (16 < c - b && a.buffer && Ia)\n              return Ia.decode(a.buffer instanceof SharedArrayBuffer ? a.slice(b, c) : a.subarray(b, c));\n            for (d = ""; b < c; ) {\n              var g = a[b++];\n              if (g & 128) {\n                var h = a[b++] & 63;\n                if (192 == (g & 224))\n                  d += String.fromCharCode((g & 31) << 6 | h);\n                else {\n                  var k = a[b++] & 63;\n                  g = 224 == (g & 240) ? (g & 15) << 12 | h << 6 | k : (g & 7) << 18 | h << 12 | k << 6 | a[b++] & 63;\n                  65536 > g ? d += String.fromCharCode(g) : (g -= 65536, d += String.fromCharCode(55296 | g >> 10, 56320 | g & 1023));\n                }\n              } else\n                d += String.fromCharCode(g);\n            }\n            return d;\n          }, Q = (a, b) => (a >>>= 0) ? Ja(n(), a, b) : "", La = (a) => {\n            var b = Ka();\n            a = a();\n            U(b);\n            return a;\n          };\n          function V(a, b) {\n            var c = arguments.length - 2, d = arguments;\n            return La(() => {\n              for (var g = Ma(8 * c), h = g >>> 3, k = 0; k < c; k++) {\n                var t = d[2 + k];\n                ea()[h + k >>> 0] = t;\n              }\n              return Na(a, c, g, b);\n            });\n          }\n          function Oa(a) {\n            if (D)\n              return V(0, 1, a);\n            L = a;\n            0 < T || (S.lb(), v.onExit?.(a), K = true);\n            z(a, new R(a));\n          }\n          var Qa = (a) => {\n            L = a;\n            if (D)\n              throw Pa(a), "unwind";\n            Oa(a);\n          };\n          function Ra() {\n            for (var a = v.numThreads; a--; )\n              Ga();\n            ua.unshift(() => {\n              M++;\n              Sa(() => ya());\n            });\n          }\n          function Ga() {\n            var a = la("ort-wasm-threaded.worker.js");\n            a = new Worker(a);\n            S.Pa.push(a);\n          }\n          function Sa(a) {\n            D ? a() : Promise.all(S.Pa.map(S.Ya)).then(a);\n          }\n          var S = { Pa: [], Qa: [], bb: [], Ma: {}, Wa() {\n            D ? (S.receiveObjectTransfer = S.jb, S.threadInitTLS = S.ab, S.setExitStatus = S.$a) : Ra();\n          }, $a: (a) => L = a, tb: ["$terminateWorker"], lb: () => {\n            for (var a of S.Qa)\n              Fa(a);\n            for (a of S.Pa)\n              Fa(a);\n            S.Pa = [];\n            S.Qa = [];\n            S.Ma = [];\n          }, Za: (a) => {\n            var b = a.Oa;\n            delete S.Ma[b];\n            S.Pa.push(a);\n            S.Qa.splice(S.Qa.indexOf(a), 1);\n            a.Oa = 0;\n            Ta(b);\n          }, jb() {\n          }, ab() {\n            S.bb.forEach((a) => a());\n          }, Ya: (a) => new Promise((b) => {\n            a.onmessage = (h) => {\n              h = h.data;\n              var k = h.cmd;\n              if (h.targetThread && h.targetThread != W()) {\n                var t = S.Ma[h.targetThread];\n                t ? t.postMessage(h, h.transferList) : J(`Internal error! Worker sent a message "${k}" to target pthread ${h.targetThread}, but that thread no longer exists!`);\n              } else if ("checkMailbox" === k)\n                X();\n              else if ("spawnThread" === k)\n                Ha(h);\n              else if ("cleanupThread" === k)\n                S.Za(S.Ma[h.thread]);\n              else if ("killThread" === k)\n                h = h.thread, k = S.Ma[h], delete S.Ma[h], Fa(k), Ta(h), S.Qa.splice(S.Qa.indexOf(k), 1), k.Oa = 0;\n              else if ("cancelThread" === k)\n                S.Ma[h.thread].postMessage({ cmd: "cancel" });\n              else if ("loaded" === k)\n                a.loaded = true, B && !a.Oa && a.unref(), b(a);\n              else if ("alert" === k)\n                alert(`Thread ${h.threadId}: ${h.text}`);\n              else if ("setimmediate" === h.target)\n                a.postMessage(h);\n              else if ("callHandler" === k)\n                v[h.handler](...h.args);\n              else\n                k && J(`worker sent an unknown command ${k}`);\n            };\n            a.onerror = (h) => {\n              J(`${"worker sent an error!"} ${h.filename}:${h.lineno}: ${h.message}`);\n              throw h;\n            };\n            B && (a.on("message", (h) => a.onmessage({ data: h })), a.on("error", (h) => a.onerror(h)));\n            var c = [], d = ["onExit"], g;\n            for (g of d)\n              v.hasOwnProperty(g) && c.push(g);\n            a.postMessage({ cmd: "load", handlers: c, urlOrBlob: v.mainScriptUrlOrBlob || _scriptDir, wasmMemory: e, wasmModule: sa });\n          }) };\n          v.PThread = S;\n          var Ua = (a) => {\n            for (; 0 < a.length; )\n              a.shift()(v);\n          };\n          v.establishStackSpace = () => {\n            var a = W(), b = r()[a + 52 >>> 2 >>> 0];\n            a = r()[a + 56 >>> 2 >>> 0];\n            Va(b, b - a);\n            U(b);\n          };\n          function Pa(a) {\n            if (D)\n              return V(1, 0, a);\n            Qa(a);\n          }\n          var Wa = [], Xa;\n          v.invokeEntryPoint = (a, b) => {\n            var c = Wa[a];\n            c || (a >= Wa.length && (Wa.length = a + 1), Wa[a] = c = Xa.get(a));\n            a = c(b);\n            0 < T ? S.$a(a) : Ya(a);\n          };\n          function Za(a) {\n            this.Va = a - 24;\n            this.gb = function(b) {\n              r()[this.Va + 4 >>> 2 >>> 0] = b;\n            };\n            this.fb = function(b) {\n              r()[this.Va + 8 >>> 2 >>> 0] = b;\n            };\n            this.Wa = function(b, c) {\n              this.eb();\n              this.gb(b);\n              this.fb(c);\n            };\n            this.eb = function() {\n              r()[this.Va + 16 >>> 2 >>> 0] = 0;\n            };\n          }\n          var $a = 0, ab = 0;\n          function bb(a, b, c, d) {\n            return D ? V(2, 1, a, b, c, d) : cb(a, b, c, d);\n          }\n          function cb(a, b, c, d) {\n            a >>>= 0;\n            b >>>= 0;\n            c >>>= 0;\n            d >>>= 0;\n            if ("undefined" == typeof SharedArrayBuffer)\n              return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6;\n            var g = [];\n            if (D && 0 === g.length)\n              return bb(a, b, c, d);\n            a = { kb: c, Oa: a, hb: d, qb: g };\n            return D ? (a.sb = "spawnThread", postMessage(a, g), 0) : Ha(a);\n          }\n          function db(a, b, c) {\n            return D ? V(3, 1, a, b, c) : 0;\n          }\n          function eb(a, b) {\n            if (D)\n              return V(4, 1, a, b);\n          }\n          var fb = (a) => {\n            for (var b = 0, c = 0; c < a.length; ++c) {\n              var d = a.charCodeAt(c);\n              127 >= d ? b++ : 2047 >= d ? b += 2 : 55296 <= d && 57343 >= d ? (b += 4, ++c) : b += 3;\n            }\n            return b;\n          }, gb = (a, b, c, d) => {\n            c >>>= 0;\n            if (!(0 < d))\n              return 0;\n            var g = c;\n            d = c + d - 1;\n            for (var h = 0; h < a.length; ++h) {\n              var k = a.charCodeAt(h);\n              if (55296 <= k && 57343 >= k) {\n                var t = a.charCodeAt(++h);\n                k = 65536 + ((k & 1023) << 10) | t & 1023;\n              }\n              if (127 >= k) {\n                if (c >= d)\n                  break;\n                b[c++ >>> 0] = k;\n              } else {\n                if (2047 >= k) {\n                  if (c + 1 >= d)\n                    break;\n                  b[c++ >>> 0] = 192 | k >> 6;\n                } else {\n                  if (65535 >= k) {\n                    if (c + 2 >= d)\n                      break;\n                    b[c++ >>> 0] = 224 | k >> 12;\n                  } else {\n                    if (c + 3 >= d)\n                      break;\n                    b[c++ >>> 0] = 240 | k >> 18;\n                    b[c++ >>> 0] = 128 | k >> 12 & 63;\n                  }\n                  b[c++ >>> 0] = 128 | k >> 6 & 63;\n                }\n                b[c++ >>> 0] = 128 | k & 63;\n              }\n            }\n            b[c >>> 0] = 0;\n            return c - g;\n          }, hb = (a, b, c) => gb(a, n(), b, c);\n          function ib(a, b) {\n            if (D)\n              return V(5, 1, a, b);\n          }\n          function jb(a, b, c) {\n            if (D)\n              return V(6, 1, a, b, c);\n          }\n          function kb(a, b, c) {\n            return D ? V(7, 1, a, b, c) : 0;\n          }\n          function lb(a, b) {\n            if (D)\n              return V(8, 1, a, b);\n          }\n          function mb(a, b, c) {\n            if (D)\n              return V(9, 1, a, b, c);\n          }\n          function nb(a, b, c, d) {\n            if (D)\n              return V(10, 1, a, b, c, d);\n          }\n          function ob(a, b, c, d) {\n            if (D)\n              return V(11, 1, a, b, c, d);\n          }\n          function pb(a, b, c, d) {\n            if (D)\n              return V(12, 1, a, b, c, d);\n          }\n          function qb(a) {\n            if (D)\n              return V(13, 1, a);\n          }\n          function rb(a, b) {\n            if (D)\n              return V(14, 1, a, b);\n          }\n          function sb(a, b, c) {\n            if (D)\n              return V(15, 1, a, b, c);\n          }\n          function tb(a) {\n            a >>>= 0;\n            "function" === typeof Atomics.rb && (Atomics.rb(p(), a >>> 2, a).value.then(X), a += 128, Atomics.store(p(), a >>> 2, 1));\n          }\n          v.__emscripten_thread_mailbox_await = tb;\n          var X = () => {\n            var a = W();\n            if (a && (tb(a), a = ub, !K))\n              try {\n                if (a(), !(0 < T))\n                  try {\n                    D ? Ya(L) : Qa(L);\n                  } catch (b) {\n                    b instanceof R || "unwind" == b || z(1, b);\n                  }\n              } catch (b) {\n                b instanceof R || "unwind" == b || z(1, b);\n              }\n          };\n          v.checkMailbox = X;\n          var vb = [], Y = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), wb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], xb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n          function yb(a, b, c, d, g, h, k, t) {\n            return D ? V(16, 1, a, b, c, d, g, h, k, t) : -52;\n          }\n          function zb(a, b, c, d, g, h, k) {\n            if (D)\n              return V(17, 1, a, b, c, d, g, h, k);\n          }\n          var Bb = (a) => {\n            var b = fb(a) + 1, c = Ab(b);\n            c && hb(a, c, b);\n            return c;\n          }, Cb = [], Db = {}, Fb = () => {\n            if (!Eb) {\n              var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: ja || "./this.program" }, b;\n              for (b in Db)\n                void 0 === Db[b] ? delete a[b] : a[b] = Db[b];\n              var c = [];\n              for (b in a)\n                c.push(`${b}=${a[b]}`);\n              Eb = c;\n            }\n            return Eb;\n          }, Eb;\n          function Gb(a, b) {\n            if (D)\n              return V(18, 1, a, b);\n            a >>>= 0;\n            b >>>= 0;\n            var c = 0;\n            Fb().forEach((d, g) => {\n              var h = b + c;\n              g = r()[a + 4 * g >>> 2 >>> 0] = h;\n              for (h = 0; h < d.length; ++h)\n                aa()[g++ >>> 0 >>> 0] = d.charCodeAt(h);\n              aa()[g >>> 0 >>> 0] = 0;\n              c += d.length + 1;\n            });\n            return 0;\n          }\n          function Kb(a, b) {\n            if (D)\n              return V(19, 1, a, b);\n            a >>>= 0;\n            b >>>= 0;\n            var c = Fb();\n            r()[a >>> 2 >>> 0] = c.length;\n            var d = 0;\n            c.forEach((g) => d += g.length + 1);\n            r()[b >>> 2 >>> 0] = d;\n            return 0;\n          }\n          function Lb(a) {\n            return D ? V(20, 1, a) : 52;\n          }\n          function Mb(a, b, c, d) {\n            return D ? V(21, 1, a, b, c, d) : 52;\n          }\n          function Nb(a, b, c, d, g) {\n            return D ? V(22, 1, a, b, c, d, g) : 70;\n          }\n          var Ob = [null, [], []];\n          function Pb(a, b, c, d) {\n            if (D)\n              return V(23, 1, a, b, c, d);\n            b >>>= 0;\n            c >>>= 0;\n            d >>>= 0;\n            for (var g = 0, h = 0; h < c; h++) {\n              var k = r()[b >>> 2 >>> 0], t = r()[b + 4 >>> 2 >>> 0];\n              b += 8;\n              for (var C = 0; C < t; C++) {\n                var w = n()[k + C >>> 0], y = Ob[a];\n                0 === w || 10 === w ? ((1 === a ? qa : J)(Ja(y, 0)), y.length = 0) : y.push(w);\n              }\n              g += t;\n            }\n            r()[d >>> 2 >>> 0] = g;\n            return 0;\n          }\n          var Qb = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Rb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n          function Sb(a) {\n            var b = Array(fb(a) + 1);\n            gb(a, b, 0, b.length);\n            return b;\n          }\n          var Tb = (a, b) => {\n            aa().set(a, b >>> 0);\n          };\n          function Ub(a, b, c, d) {\n            function g(f, q, u) {\n              for (f = "number" == typeof f ? f.toString() : f || ""; f.length < q; )\n                f = u[0] + f;\n              return f;\n            }\n            function h(f, q) {\n              return g(f, q, "0");\n            }\n            function k(f, q) {\n              function u(Hb) {\n                return 0 > Hb ? -1 : 0 < Hb ? 1 : 0;\n              }\n              var F;\n              0 === (F = u(f.getFullYear() - q.getFullYear())) && 0 === (F = u(f.getMonth() - q.getMonth())) && (F = u(f.getDate() - q.getDate()));\n              return F;\n            }\n            function t(f) {\n              switch (f.getDay()) {\n                case 0:\n                  return new Date(f.getFullYear() - 1, 11, 29);\n                case 1:\n                  return f;\n                case 2:\n                  return new Date(f.getFullYear(), 0, 3);\n                case 3:\n                  return new Date(\n                    f.getFullYear(),\n                    0,\n                    2\n                  );\n                case 4:\n                  return new Date(f.getFullYear(), 0, 1);\n                case 5:\n                  return new Date(f.getFullYear() - 1, 11, 31);\n                case 6:\n                  return new Date(f.getFullYear() - 1, 11, 30);\n              }\n            }\n            function C(f) {\n              var q = f.Ra;\n              for (f = new Date(new Date(f.Sa + 1900, 0, 1).getTime()); 0 < q; ) {\n                var u = f.getMonth(), F = (Y(f.getFullYear()) ? Qb : Rb)[u];\n                if (q > F - f.getDate())\n                  q -= F - f.getDate() + 1, f.setDate(1), 11 > u ? f.setMonth(u + 1) : (f.setMonth(0), f.setFullYear(f.getFullYear() + 1));\n                else {\n                  f.setDate(f.getDate() + q);\n                  break;\n                }\n              }\n              u = new Date(f.getFullYear() + 1, 0, 4);\n              q = t(new Date(\n                f.getFullYear(),\n                0,\n                4\n              ));\n              u = t(u);\n              return 0 >= k(q, f) ? 0 >= k(u, f) ? f.getFullYear() + 1 : f.getFullYear() : f.getFullYear() - 1;\n            }\n            a >>>= 0;\n            b >>>= 0;\n            c >>>= 0;\n            d >>>= 0;\n            var w = r()[d + 40 >>> 2 >>> 0];\n            d = { ob: p()[d >>> 2 >>> 0], nb: p()[d + 4 >>> 2 >>> 0], Ta: p()[d + 8 >>> 2 >>> 0], Xa: p()[d + 12 >>> 2 >>> 0], Ua: p()[d + 16 >>> 2 >>> 0], Sa: p()[d + 20 >>> 2 >>> 0], Na: p()[d + 24 >>> 2 >>> 0], Ra: p()[d + 28 >>> 2 >>> 0], ub: p()[d + 32 >>> 2 >>> 0], mb: p()[d + 36 >>> 2 >>> 0], pb: w ? Q(w) : "" };\n            c = Q(c);\n            w = {\n              "%c": "%a %b %d %H:%M:%S %Y",\n              "%D": "%m/%d/%y",\n              "%F": "%Y-%m-%d",\n              "%h": "%b",\n              "%r": "%I:%M:%S %p",\n              "%R": "%H:%M",\n              "%T": "%H:%M:%S",\n              "%x": "%m/%d/%y",\n              "%X": "%H:%M:%S",\n              "%Ec": "%c",\n              "%EC": "%C",\n              "%Ex": "%m/%d/%y",\n              "%EX": "%H:%M:%S",\n              "%Ey": "%y",\n              "%EY": "%Y",\n              "%Od": "%d",\n              "%Oe": "%e",\n              "%OH": "%H",\n              "%OI": "%I",\n              "%Om": "%m",\n              "%OM": "%M",\n              "%OS": "%S",\n              "%Ou": "%u",\n              "%OU": "%U",\n              "%OV": "%V",\n              "%Ow": "%w",\n              "%OW": "%W",\n              "%Oy": "%y"\n            };\n            for (var y in w)\n              c = c.replace(new RegExp(y, "g"), w[y]);\n            var Ib = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), Jb = "January February March April May June July August September October November December".split(" ");\n            w = {\n              "%a": (f) => Ib[f.Na].substring(0, 3),\n              "%A": (f) => Ib[f.Na],\n              "%b": (f) => Jb[f.Ua].substring(0, 3),\n              "%B": (f) => Jb[f.Ua],\n              "%C": (f) => h((f.Sa + 1900) / 100 | 0, 2),\n              "%d": (f) => h(f.Xa, 2),\n              "%e": (f) => g(f.Xa, 2, " "),\n              "%g": (f) => C(f).toString().substring(2),\n              "%G": (f) => C(f),\n              "%H": (f) => h(f.Ta, 2),\n              "%I": (f) => {\n                f = f.Ta;\n                0 == f ? f = 12 : 12 < f && (f -= 12);\n                return h(f, 2);\n              },\n              "%j": (f) => {\n                for (var q = 0, u = 0; u <= f.Ua - 1; q += (Y(f.Sa + 1900) ? Qb : Rb)[u++])\n                  ;\n                return h(f.Xa + q, 3);\n              },\n              "%m": (f) => h(f.Ua + 1, 2),\n              "%M": (f) => h(f.nb, 2),\n              "%n": () => "\\n",\n              "%p": (f) => 0 <= f.Ta && 12 > f.Ta ? "AM" : "PM",\n              "%S": (f) => h(f.ob, 2),\n              "%t": () => "\t",\n              "%u": (f) => f.Na || 7,\n              "%U": (f) => h(Math.floor((f.Ra + 7 - f.Na) / 7), 2),\n              "%V": (f) => {\n                var q = Math.floor((f.Ra + 7 - (f.Na + 6) % 7) / 7);\n                2 >= (f.Na + 371 - f.Ra - 2) % 7 && q++;\n                if (q)\n                  53 == q && (u = (f.Na + 371 - f.Ra) % 7, 4 == u || 3 == u && Y(f.Sa) || (q = 1));\n                else {\n                  q = 52;\n                  var u = (f.Na + 7 - f.Ra - 1) % 7;\n                  (4 == u || 5 == u && Y(f.Sa % 400 - 1)) && q++;\n                }\n                return h(q, 2);\n              },\n              "%w": (f) => f.Na,\n              "%W": (f) => h(Math.floor((f.Ra + 7 - (f.Na + 6) % 7) / 7), 2),\n              "%y": (f) => (f.Sa + 1900).toString().substring(2),\n              "%Y": (f) => f.Sa + 1900,\n              "%z": (f) => {\n                f = f.mb;\n                var q = 0 <= f;\n                f = Math.abs(f) / 60;\n                return (q ? "+" : "-") + String("0000" + (f / 60 * 100 + f % 60)).slice(-4);\n              },\n              "%Z": (f) => f.pb,\n              "%%": () => "%"\n            };\n            c = c.replace(\n              /%%/g,\n              "\\0\\0"\n            );\n            for (y in w)\n              c.includes(y) && (c = c.replace(new RegExp(y, "g"), w[y](d)));\n            c = c.replace(/\\0\\0/g, "%");\n            y = Sb(c);\n            if (y.length > b)\n              return 0;\n            Tb(y, a);\n            return y.length - 1;\n          }\n          S.Wa();\n          var Vb = [Oa, Pa, bb, db, eb, ib, jb, kb, lb, mb, nb, ob, pb, qb, rb, sb, yb, zb, Gb, Kb, Lb, Mb, Nb, Pb], Zb = {\n            b: function(a, b, c) {\n              a >>>= 0;\n              new Za(a).Wa(b >>> 0, c >>> 0);\n              $a = a;\n              ab++;\n              throw $a;\n            },\n            L: function(a) {\n              Wb(a >>> 0, !A, 1, !ka, 131072, false);\n              S.ab();\n            },\n            j: function(a) {\n              a >>>= 0;\n              D ? postMessage({ cmd: "cleanupThread", thread: a }) : S.Za(S.Ma[a]);\n            },\n            H: cb,\n            h: db,\n            S: eb,\n            D: ib,\n            F: jb,\n            T: kb,\n            Q: lb,\n            J: mb,\n            P: nb,\n            n: ob,\n            E: pb,\n            B: qb,\n            R: rb,\n            C: sb,\n            p: () => 1,\n            z: function(a, b) {\n              a >>>= 0;\n              a == b >>> 0 ? setTimeout(() => X()) : D ? postMessage({ targetThread: a, cmd: "checkMailbox" }) : (a = S.Ma[a]) && a.postMessage({ cmd: "checkMailbox" });\n            },\n            I: function(a, b, c, d) {\n              b >>>= 0;\n              vb.length = c;\n              d = d >>> 0 >>> 3;\n              for (var g = 0; g < c; g++)\n                vb[g] = ea()[d + g >>> 0];\n              a = 0 > a ? Ea[-a - 1] : Vb[a];\n              S.ib = b;\n              b = a.apply(null, vb);\n              S.ib = 0;\n              return b;\n            },\n            K: tb,\n            o: function(a) {\n              B && S.Ma[a >>> 0].ref();\n            },\n            s: function(a, b, c) {\n              a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n              c >>>= 0;\n              a = new Date(1e3 * a);\n              p()[c >>> 2 >>> 0] = a.getUTCSeconds();\n              p()[c + 4 >>> 2 >>> 0] = a.getUTCMinutes();\n              p()[c + 8 >>> 2 >>> 0] = a.getUTCHours();\n              p()[c + 12 >>> 2 >>> 0] = a.getUTCDate();\n              p()[c + 16 >>> 2 >>> 0] = a.getUTCMonth();\n              p()[c + 20 >>> 2 >>> 0] = a.getUTCFullYear() - 1900;\n              p()[c + 24 >>> 2 >>> 0] = a.getUTCDay();\n              a = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0;\n              p()[c + 28 >>> 2 >>> 0] = a;\n            },\n            t: function(a, b, c) {\n              a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n              c >>>= 0;\n              a = new Date(1e3 * a);\n              p()[c >>> 2 >>> 0] = a.getSeconds();\n              p()[c + 4 >>> 2 >>> 0] = a.getMinutes();\n              p()[c + 8 >>> 2 >>> 0] = a.getHours();\n              p()[c + 12 >>> 2 >>> 0] = a.getDate();\n              p()[c + 16 >>> 2 >>> 0] = a.getMonth();\n              p()[c + 20 >>> 2 >>> 0] = a.getFullYear() - 1900;\n              p()[c + 24 >>> 2 >>> 0] = a.getDay();\n              b = (Y(a.getFullYear()) ? wb : xb)[a.getMonth()] + a.getDate() - 1 | 0;\n              p()[c + 28 >>> 2 >>> 0] = b;\n              p()[c + 36 >>> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n              b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset();\n              var d = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n              a = (b != d && a.getTimezoneOffset() == Math.min(d, b)) | 0;\n              p()[c + 32 >>> 2 >>> 0] = a;\n            },\n            u: function(a) {\n              a >>>= 0;\n              var b = new Date(p()[a + 20 >>> 2 >>> 0] + 1900, p()[a + 16 >>> 2 >>> 0], p()[a + 12 >>> 2 >>> 0], p()[a + 8 >>> 2 >>> 0], p()[a + 4 >>> 2 >>> 0], p()[a >>> 2 >>> 0], 0), c = p()[a + 32 >>> 2 >>> 0], d = b.getTimezoneOffset(), g = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(\n                b.getFullYear(),\n                0,\n                1\n              ).getTimezoneOffset(), k = Math.min(h, g);\n              0 > c ? p()[a + 32 >>> 2 >>> 0] = Number(g != h && k == d) : 0 < c != (k == d) && (g = Math.max(h, g), b.setTime(b.getTime() + 6e4 * ((0 < c ? k : g) - d)));\n              p()[a + 24 >>> 2 >>> 0] = b.getDay();\n              c = (Y(b.getFullYear()) ? wb : xb)[b.getMonth()] + b.getDate() - 1 | 0;\n              p()[a + 28 >>> 2 >>> 0] = c;\n              p()[a >>> 2 >>> 0] = b.getSeconds();\n              p()[a + 4 >>> 2 >>> 0] = b.getMinutes();\n              p()[a + 8 >>> 2 >>> 0] = b.getHours();\n              p()[a + 12 >>> 2 >>> 0] = b.getDate();\n              p()[a + 16 >>> 2 >>> 0] = b.getMonth();\n              p()[a + 20 >>> 2 >>> 0] = b.getYear();\n              a = b.getTime();\n              isNaN(a) ? (p()[Xb() >>> 2 >>> 0] = 61, a = -1) : a /= 1e3;\n              return Yb((P = a, 1 <= +Math.abs(P) ? 0 < P ? +Math.floor(P / 4294967296) >>> 0 : ~~+Math.ceil((P - +(~~P >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0;\n            },\n            q: yb,\n            r: zb,\n            y: function(a, b, c) {\n              function d(w) {\n                return (w = w.toTimeString().match(/\\(([A-Za-z ]+)\\)$/)) ? w[1] : "GMT";\n              }\n              a >>>= 0;\n              b >>>= 0;\n              c >>>= 0;\n              var g = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(g, 0, 1), k = new Date(g, 6, 1);\n              g = h.getTimezoneOffset();\n              var t = k.getTimezoneOffset(), C = Math.max(g, t);\n              r()[a >>> 2 >>> 0] = 60 * C;\n              p()[b >>> 2 >>> 0] = Number(g != t);\n              a = d(h);\n              b = d(k);\n              a = Bb(a);\n              b = Bb(b);\n              t < g ? (r()[c >>> 2 >>> 0] = a, r()[c + 4 >>> 2 >>> 0] = b) : (r()[c >>> 2 >>> 0] = b, r()[c + 4 >>> 2 >>> 0] = a);\n            },\n            c: () => {\n              ra("");\n            },\n            O: function(a, b, c) {\n              a >>>= 0;\n              b >>>= 0;\n              c >>>= 0;\n              Cb.length = 0;\n              for (var d; d = n()[b++ >>> 0]; ) {\n                var g = 105 != d;\n                g &= 112 != d;\n                c += g && c % 8 ? 4 : 0;\n                Cb.push(112 == d ? r()[c >>> 2 >>> 0] : 105 == d ? p()[c >>> 2 >>> 0] : ea()[c >>> 3 >>> 0]);\n                c += g ? 8 : 4;\n              }\n              return Ea[a].apply(null, Cb);\n            },\n            k: () => {\n            },\n            i: () => Date.now(),\n            U: () => {\n              T += 1;\n              throw "unwind";\n            },\n            A: function() {\n              return 4294901760;\n            },\n            e: () => performance.timeOrigin + performance.now(),\n            f: () => B ? (init_os(), __toCommonJS(os_exports)).cpus().length : navigator.hardwareConcurrency,\n            x: function(a) {\n              a >>>= 0;\n              var b = n().length;\n              if (a <= b || 4294901760 < a)\n                return false;\n              for (var c = 1; 4 >= c; c *= 2) {\n                var d = b * (1 + 0.2 / c);\n                d = Math.min(d, a + 100663296);\n                var g = Math;\n                d = Math.max(a, d);\n                a: {\n                  g = (g.min.call(g, 4294901760, d + (65536 - d % 65536) % 65536) - e.buffer.byteLength + 65535) / 65536;\n                  try {\n                    e.grow(g);\n                    m();\n                    var h = 1;\n                    break a;\n                  } catch (k) {\n                  }\n                  h = void 0;\n                }\n                if (h)\n                  return true;\n              }\n              return false;\n            },\n            M: Gb,\n            N: Kb,\n            G: Qa,\n            g: Lb,\n            m: Mb,\n            v: Nb,\n            l: Pb,\n            a: e || v.wasmMemory,\n            w: Ub,\n            d: function(a, b, c, d) {\n              return Ub(a >>> 0, b >>> 0, c >>> 0, d >>> 0);\n            }\n          }, Z = function() {\n            function a(c, d) {\n              Z = c.exports;\n              Z = $b();\n              S.bb.push(Z.za);\n              Xa = Z.Aa;\n              va.unshift(Z.V);\n              sa = d;\n              ya();\n              return Z;\n            }\n            var b = { a: Zb };\n            M++;\n            if (v.instantiateWasm)\n              try {\n                return v.instantiateWasm(b, a);\n              } catch (c) {\n                J(`Module.instantiateWasm callback failed with error: ${c}`), x(c);\n              }\n            Da(b, function(c) {\n              a(c.instance, c.module);\n            }).catch(x);\n            return {};\n          }();\n          v._OrtInit = (a, b) => (v._OrtInit = Z.W)(a, b);\n          v._OrtGetLastError = (a, b) => (v._OrtGetLastError = Z.X)(a, b);\n          v._OrtCreateSessionOptions = (a, b, c, d, g, h, k, t, C, w) => (v._OrtCreateSessionOptions = Z.Y)(a, b, c, d, g, h, k, t, C, w);\n          v._OrtAppendExecutionProvider = (a, b) => (v._OrtAppendExecutionProvider = Z.Z)(a, b);\n          v._OrtAddFreeDimensionOverride = (a, b, c) => (v._OrtAddFreeDimensionOverride = Z._)(a, b, c);\n          v._OrtAddSessionConfigEntry = (a, b, c) => (v._OrtAddSessionConfigEntry = Z.$)(a, b, c);\n          v._OrtReleaseSessionOptions = (a) => (v._OrtReleaseSessionOptions = Z.aa)(a);\n          v._OrtCreateSession = (a, b, c) => (v._OrtCreateSession = Z.ba)(a, b, c);\n          v._OrtReleaseSession = (a) => (v._OrtReleaseSession = Z.ca)(a);\n          v._OrtGetInputOutputCount = (a, b, c) => (v._OrtGetInputOutputCount = Z.da)(a, b, c);\n          v._OrtGetInputName = (a, b) => (v._OrtGetInputName = Z.ea)(a, b);\n          v._OrtGetOutputName = (a, b) => (v._OrtGetOutputName = Z.fa)(a, b);\n          v._OrtFree = (a) => (v._OrtFree = Z.ga)(a);\n          v._OrtCreateTensor = (a, b, c, d, g, h) => (v._OrtCreateTensor = Z.ha)(a, b, c, d, g, h);\n          v._OrtGetTensorData = (a, b, c, d, g) => (v._OrtGetTensorData = Z.ia)(a, b, c, d, g);\n          v._OrtReleaseTensor = (a) => (v._OrtReleaseTensor = Z.ja)(a);\n          v._OrtCreateRunOptions = (a, b, c, d) => (v._OrtCreateRunOptions = Z.ka)(a, b, c, d);\n          v._OrtAddRunConfigEntry = (a, b, c) => (v._OrtAddRunConfigEntry = Z.la)(a, b, c);\n          v._OrtReleaseRunOptions = (a) => (v._OrtReleaseRunOptions = Z.ma)(a);\n          v._OrtCreateBinding = (a) => (v._OrtCreateBinding = Z.na)(a);\n          v._OrtBindInput = (a, b, c) => (v._OrtBindInput = Z.oa)(a, b, c);\n          v._OrtBindOutput = (a, b, c, d) => (v._OrtBindOutput = Z.pa)(a, b, c, d);\n          v._OrtClearBoundOutputs = (a) => (v._OrtClearBoundOutputs = Z.qa)(a);\n          v._OrtReleaseBinding = (a) => (v._OrtReleaseBinding = Z.ra)(a);\n          v._OrtRunWithBinding = (a, b, c, d, g) => (v._OrtRunWithBinding = Z.sa)(a, b, c, d, g);\n          v._OrtRun = (a, b, c, d, g, h, k, t) => (v._OrtRun = Z.ta)(a, b, c, d, g, h, k, t);\n          v._OrtEndProfiling = (a) => (v._OrtEndProfiling = Z.ua)(a);\n          var Xb = () => (Xb = Z.va)(), W = v._pthread_self = () => (W = v._pthread_self = Z.wa)(), Ab = v._malloc = (a) => (Ab = v._malloc = Z.xa)(a);\n          v._free = (a) => (v._free = Z.ya)(a);\n          v.__emscripten_tls_init = () => (v.__emscripten_tls_init = Z.za)();\n          var Wb = v.__emscripten_thread_init = (a, b, c, d, g, h) => (Wb = v.__emscripten_thread_init = Z.Ba)(a, b, c, d, g, h);\n          v.__emscripten_thread_crashed = () => (v.__emscripten_thread_crashed = Z.Ca)();\n          var Na = (a, b, c, d) => (Na = Z.Da)(a, b, c, d), Ta = (a) => (Ta = Z.Ea)(a), Ya = v.__emscripten_thread_exit = (a) => (Ya = v.__emscripten_thread_exit = Z.Fa)(a), ub = () => (ub = Z.Ga)(), Yb = (a) => (Yb = Z.Ha)(a), Va = (a, b) => (Va = Z.Ia)(a, b), Ka = () => (Ka = Z.Ja)(), U = (a) => (U = Z.Ka)(a), Ma = (a) => (Ma = Z.La)(a);\n          function $b() {\n            var a = Z;\n            a = Object.assign({}, a);\n            var b = (d) => () => d() >>> 0, c = (d) => (g) => d(g) >>> 0;\n            a.va = b(a.va);\n            a.wa = b(a.wa);\n            a.xa = c(a.xa);\n            a.emscripten_main_runtime_thread_id = b(a.emscripten_main_runtime_thread_id);\n            a.Ja = b(a.Ja);\n            a.La = c(a.La);\n            return a;\n          }\n          v.wasmMemory = e;\n          v.stackAlloc = Ma;\n          v.stackSave = Ka;\n          v.stackRestore = U;\n          v.keepRuntimeAlive = () => 0 < T;\n          v.UTF8ToString = Q;\n          v.stringToUTF8 = hb;\n          v.lengthBytesUTF8 = fb;\n          v.ExitStatus = R;\n          v.PThread = S;\n          var ac;\n          N = function bc() {\n            ac || cc();\n            ac || (N = bc);\n          };\n          function cc() {\n            if (!(0 < M))\n              if (D)\n                ha(v), D || Ua(va), startWorker(v);\n              else {\n                if (v.preRun)\n                  for ("function" == typeof v.preRun && (v.preRun = [v.preRun]); v.preRun.length; )\n                    ua.unshift(v.preRun.shift());\n                Ua(ua);\n                0 < M || ac || (ac = true, v.calledRun = true, K || (D || Ua(va), ha(v), D || Ua(wa)));\n              }\n          }\n          cc();\n          return moduleArg.ready;\n        };\n      })();\n      if (typeof exports === "object" && typeof module === "object")\n        module.exports = ortWasmThreaded;\n      else if (typeof define === "function" && define["amd"])\n        define([], () => ortWasmThreaded);\n    }\n  });\n\n  // web/lib/wasm/binding/ort-wasm-threaded.worker.js\n  var require_ort_wasm_threaded_worker = __commonJS({\n    "web/lib/wasm/binding/ort-wasm-threaded.worker.js"(exports, module) {\n      module.exports = \'"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");var vm=require("vm");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>vm.runInThisContext(fs.readFileSync(f,"utf8"),{filename:f}),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;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 module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}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)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*is_main=*/0,/*is_runtime=*/0,/*can_block=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){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==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){Module["__emscripten_thread_crashed"]?.();throw ex}}self.onmessage=handleMessage;\\n\';\n    }\n  });\n\n  // nodejs-ignore:node:path\n  var join = void 0;\n\n  // web/lib/wasm/wasm-factory.ts\n  var ortWasmFactory;\n  if (false) {\n    ortWasmFactory = null;\n  } else {\n    ortWasmFactory = true ? require_ort_wasm() : null;\n  }\n  var ortWasmFactoryThreaded = true ? true ? require_ort_wasm_threaded() : null : ortWasmFactory;\n  var wasm;\n  var initialized = false;\n  var initializing = false;\n  var aborted = false;\n  var isMultiThreadSupported = (numThreads) => {\n    if (numThreads === 1) {\n      return false;\n    }\n    if (typeof SharedArrayBuffer === "undefined") {\n      if (typeof self !== "undefined" && !self.crossOriginIsolated) {\n        console.warn(\n          "env.wasm.numThreads is set to " + numThreads + ", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."\n        );\n      }\n      return false;\n    }\n    if (typeof process !== "undefined" && process.versions && process.versions.node) {\n      console.warn(\n        "env.wasm.numThreads is set to " + numThreads + ", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios."\n      );\n    }\n    try {\n      if (typeof MessageChannel !== "undefined") {\n        new MessageChannel().port1.postMessage(new SharedArrayBuffer(1));\n      }\n      return WebAssembly.validate(new Uint8Array([\n        0,\n        97,\n        115,\n        109,\n        1,\n        0,\n        0,\n        0,\n        1,\n        4,\n        1,\n        96,\n        0,\n        0,\n        3,\n        2,\n        1,\n        0,\n        5,\n        4,\n        1,\n        3,\n        1,\n        1,\n        10,\n        11,\n        1,\n        9,\n        0,\n        65,\n        0,\n        254,\n        16,\n        2,\n        0,\n        26,\n        11\n      ]));\n    } catch (e) {\n      return false;\n    }\n  };\n  var isSimdSupported = () => {\n    try {\n      return WebAssembly.validate(new Uint8Array([\n        0,\n        97,\n        115,\n        109,\n        1,\n        0,\n        0,\n        0,\n        1,\n        4,\n        1,\n        96,\n        0,\n        0,\n        3,\n        2,\n        1,\n        0,\n        10,\n        30,\n        1,\n        28,\n        0,\n        65,\n        0,\n        253,\n        15,\n        253,\n        12,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        253,\n        186,\n        1,\n        26,\n        11\n      ]));\n    } catch (e) {\n      return false;\n    }\n  };\n  var getWasmFileName = (useSimd, useThreads) => {\n    if (useSimd) {\n      if (false) {\n        return "ort-training-wasm-simd.wasm";\n      }\n      return useThreads ? "ort-wasm-simd-threaded.wasm" : "ort-wasm-simd.wasm";\n    } else {\n      return useThreads ? "ort-wasm-threaded.wasm" : "ort-wasm.wasm";\n    }\n  };\n  var initializeWebAssembly = async (flags) => {\n    if (initialized) {\n      return Promise.resolve();\n    }\n    if (initializing) {\n      throw new Error("multiple calls to \'initializeWebAssembly()\' detected.");\n    }\n    if (aborted) {\n      throw new Error("previous call to \'initializeWebAssembly()\' failed.");\n    }\n    initializing = true;\n    const timeout = flags.initTimeout;\n    const numThreads = flags.numThreads;\n    const simd = flags.simd;\n    const useThreads = isMultiThreadSupported(numThreads);\n    const useSimd = simd && isSimdSupported();\n    const wasmPaths = flags.wasmPaths;\n    const wasmPrefixOverride = typeof wasmPaths === "string" ? wasmPaths : void 0;\n    const wasmFileName = getWasmFileName(useSimd, useThreads);\n    const wasmPathOverride = typeof wasmPaths === "object" ? wasmPaths[wasmFileName] : void 0;\n    let isTimeout = false;\n    const tasks = [];\n    if (timeout > 0) {\n      tasks.push(new Promise((resolve) => {\n        setTimeout(() => {\n          isTimeout = true;\n          resolve();\n        }, timeout);\n      }));\n    }\n    tasks.push(new Promise((resolve, reject) => {\n      const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory;\n      const config = {\n        locateFile: (fileName, scriptDirectory) => {\n          if (useThreads && fileName.endsWith(".worker.js") && typeof Blob !== "undefined") {\n            return URL.createObjectURL(new Blob(\n              [\n                // This require() function is handled by esbuild plugin to load file content as string.\n                // eslint-disable-next-line @typescript-eslint/no-require-imports\n                require_ort_wasm_threaded_worker()\n              ],\n              { type: "text/javascript" }\n            ));\n          }\n          if (fileName.endsWith(".wasm")) {\n            if (wasmPathOverride) {\n              return wasmPathOverride;\n            }\n            const prefix = wasmPrefixOverride ?? scriptDirectory;\n            if (false) {\n              if (wasmFileName === "ort-wasm-simd.wasm") {\n                return prefix + "ort-wasm-simd.jsep.wasm";\n              } else if (wasmFileName === "ort-wasm-simd-threaded.wasm") {\n                return prefix + "ort-wasm-simd-threaded.jsep.wasm";\n              }\n            }\n            return prefix + wasmFileName;\n          }\n          return scriptDirectory + fileName;\n        }\n      };\n      if (useThreads) {\n        config.numThreads = numThreads;\n        if (typeof Blob === "undefined") {\n          config.mainScriptUrlOrBlob = join(__dirname, "ort-wasm-threaded.js");\n        } else {\n          const scriptSourceCode = `var ortWasmThreaded=${factory.toString()};`;\n          config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], { type: "text/javascript" });\n        }\n      }\n      factory(config).then(\n        // wasm module initialized successfully\n        (module) => {\n          initializing = false;\n          initialized = true;\n          wasm = module;\n          resolve();\n        },\n        // wasm module failed to initialize\n        (what) => {\n          initializing = false;\n          aborted = true;\n          reject(what);\n        }\n      );\n    }));\n    await Promise.race(tasks);\n    if (isTimeout) {\n      throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`);\n    }\n  };\n  var getInstance = () => {\n    if (initialized && wasm) {\n      return wasm;\n    }\n    throw new Error("WebAssembly is not initialized yet.");\n  };\n\n  // web/lib/wasm/wasm-utils.ts\n  var allocWasmString = (data, allocs) => {\n    const wasm2 = getInstance();\n    const dataLength = wasm2.lengthBytesUTF8(data) + 1;\n    const dataOffset = wasm2._malloc(dataLength);\n    wasm2.stringToUTF8(data, dataOffset, dataLength);\n    allocs.push(dataOffset);\n    return dataOffset;\n  };\n  var iterateExtraOptions = (options, prefix, seen, handler) => {\n    if (typeof options == "object" && options !== null) {\n      if (seen.has(options)) {\n        throw new Error("Circular reference in options");\n      } else {\n        seen.add(options);\n      }\n    }\n    Object.entries(options).forEach(([key, value]) => {\n      const name = prefix ? prefix + key : key;\n      if (typeof value === "object") {\n        iterateExtraOptions(value, name + ".", seen, handler);\n      } else if (typeof value === "string" || typeof value === "number") {\n        handler(name, value.toString());\n      } else if (typeof value === "boolean") {\n        handler(name, value ? "1" : "0");\n      } else {\n        throw new Error(`Can\'t handle extra config type: ${typeof value}`);\n      }\n    });\n  };\n  var checkLastError = (message) => {\n    const wasm2 = getInstance();\n    const stack = wasm2.stackSave();\n    try {\n      const paramsOffset = wasm2.stackAlloc(8);\n      wasm2._OrtGetLastError(paramsOffset, paramsOffset + 4);\n      const errorCode = wasm2.HEAP32[paramsOffset / 4];\n      const errorMessagePointer = wasm2.HEAPU32[paramsOffset / 4 + 1];\n      const errorMessage = errorMessagePointer ? wasm2.UTF8ToString(errorMessagePointer) : "";\n      throw new Error(`${message} ERROR_CODE: ${errorCode}, ERROR_MESSAGE: ${errorMessage}`);\n    } finally {\n      wasm2.stackRestore(stack);\n    }\n  };\n\n  // web/lib/wasm/run-options.ts\n  var setRunOptions = (options) => {\n    const wasm2 = getInstance();\n    let runOptionsHandle = 0;\n    const allocs = [];\n    const runOptions = options || {};\n    try {\n      if (options?.logSeverityLevel === void 0) {\n        runOptions.logSeverityLevel = 2;\n      } else if (typeof options.logSeverityLevel !== "number" || !Number.isInteger(options.logSeverityLevel) || options.logSeverityLevel < 0 || options.logSeverityLevel > 4) {\n        throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);\n      }\n      if (options?.logVerbosityLevel === void 0) {\n        runOptions.logVerbosityLevel = 0;\n      } else if (typeof options.logVerbosityLevel !== "number" || !Number.isInteger(options.logVerbosityLevel)) {\n        throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);\n      }\n      if (options?.terminate === void 0) {\n        runOptions.terminate = false;\n      }\n      let tagDataOffset = 0;\n      if (options?.tag !== void 0) {\n        tagDataOffset = allocWasmString(options.tag, allocs);\n      }\n      runOptionsHandle = wasm2._OrtCreateRunOptions(\n        runOptions.logSeverityLevel,\n        runOptions.logVerbosityLevel,\n        !!runOptions.terminate,\n        tagDataOffset\n      );\n      if (runOptionsHandle === 0) {\n        checkLastError("Can\'t create run options.");\n      }\n      if (options?.extra !== void 0) {\n        iterateExtraOptions(options.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n          const keyDataOffset = allocWasmString(key, allocs);\n          const valueDataOffset = allocWasmString(value, allocs);\n          if (wasm2._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n            checkLastError(`Can\'t set a run config entry: ${key} - ${value}.`);\n          }\n        });\n      }\n      return [runOptionsHandle, allocs];\n    } catch (e) {\n      if (runOptionsHandle !== 0) {\n        wasm2._OrtReleaseRunOptions(runOptionsHandle);\n      }\n      allocs.forEach((alloc) => wasm2._free(alloc));\n      throw e;\n    }\n  };\n\n  // web/lib/wasm/session-options.ts\n  var getGraphOptimzationLevel = (graphOptimizationLevel) => {\n    switch (graphOptimizationLevel) {\n      case "disabled":\n        return 0;\n      case "basic":\n        return 1;\n      case "extended":\n        return 2;\n      case "all":\n        return 99;\n      default:\n        throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`);\n    }\n  };\n  var getExecutionMode = (executionMode) => {\n    switch (executionMode) {\n      case "sequential":\n        return 0;\n      case "parallel":\n        return 1;\n      default:\n        throw new Error(`unsupported execution mode: ${executionMode}`);\n    }\n  };\n  var appendDefaultOptions = (options) => {\n    if (!options.extra) {\n      options.extra = {};\n    }\n    if (!options.extra.session) {\n      options.extra.session = {};\n    }\n    const session = options.extra.session;\n    if (!session.use_ort_model_bytes_directly) {\n      session.use_ort_model_bytes_directly = "1";\n    }\n    if (options.executionProviders && options.executionProviders.some((ep) => (typeof ep === "string" ? ep : ep.name) === "webgpu")) {\n      options.enableMemPattern = false;\n    }\n  };\n  var setExecutionProviders = (sessionOptionsHandle, executionProviders, allocs) => {\n    for (const ep of executionProviders) {\n      let epName = typeof ep === "string" ? ep : ep.name;\n      switch (epName) {\n        case "webnn":\n          epName = "WEBNN";\n          if (typeof ep !== "string") {\n            const webnnOptions = ep;\n            if (webnnOptions?.deviceType) {\n              const keyDataOffset = allocWasmString("deviceType", allocs);\n              const valueDataOffset = allocWasmString(webnnOptions.deviceType, allocs);\n              if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n                checkLastError(`Can\'t set a session config entry: \'deviceType\' - ${webnnOptions.deviceType}.`);\n              }\n            }\n            if (webnnOptions?.numThreads) {\n              let numThreads = webnnOptions.numThreads;\n              if (typeof numThreads != "number" || !Number.isInteger(numThreads) || numThreads < 0) {\n                numThreads = 0;\n              }\n              const keyDataOffset = allocWasmString("numThreads", allocs);\n              const valueDataOffset = allocWasmString(numThreads.toString(), allocs);\n              if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n                checkLastError(`Can\'t set a session config entry: \'numThreads\' - ${webnnOptions.numThreads}.`);\n              }\n            }\n            if (webnnOptions?.powerPreference) {\n              const keyDataOffset = allocWasmString("powerPreference", allocs);\n              const valueDataOffset = allocWasmString(webnnOptions.powerPreference, allocs);\n              if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n                checkLastError(\n                  `Can\'t set a session config entry: \'powerPreference\' - ${webnnOptions.powerPreference}.`\n                );\n              }\n            }\n          }\n          break;\n        case "webgpu":\n          epName = "JS";\n          if (typeof ep !== "string") {\n            const webgpuOptions = ep;\n            if (webgpuOptions?.preferredLayout) {\n              if (webgpuOptions.preferredLayout !== "NCHW" && webgpuOptions.preferredLayout !== "NHWC") {\n                throw new Error(`preferredLayout must be either \'NCHW\' or \'NHWC\': ${webgpuOptions.preferredLayout}`);\n              }\n              const keyDataOffset = allocWasmString("preferredLayout", allocs);\n              const valueDataOffset = allocWasmString(webgpuOptions.preferredLayout, allocs);\n              if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n                checkLastError(\n                  `Can\'t set a session config entry: \'preferredLayout\' - ${webgpuOptions.preferredLayout}.`\n                );\n              }\n            }\n          }\n          break;\n        case "wasm":\n        case "cpu":\n          continue;\n        default:\n          throw new Error(`not supported execution provider: ${epName}`);\n      }\n      const epNameDataOffset = allocWasmString(epName, allocs);\n      if (getInstance()._OrtAppendExecutionProvider(sessionOptionsHandle, epNameDataOffset) !== 0) {\n        checkLastError(`Can\'t append execution provider: ${epName}.`);\n      }\n    }\n  };\n  var setSessionOptions = (options) => {\n    const wasm2 = getInstance();\n    let sessionOptionsHandle = 0;\n    const allocs = [];\n    const sessionOptions = options || {};\n    appendDefaultOptions(sessionOptions);\n    try {\n      const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel ?? "all");\n      const executionMode = getExecutionMode(sessionOptions.executionMode ?? "sequential");\n      const logIdDataOffset = typeof sessionOptions.logId === "string" ? allocWasmString(sessionOptions.logId, allocs) : 0;\n      const logSeverityLevel = sessionOptions.logSeverityLevel ?? 2;\n      if (!Number.isInteger(logSeverityLevel) || logSeverityLevel < 0 || logSeverityLevel > 4) {\n        throw new Error(`log serverity level is not valid: ${logSeverityLevel}`);\n      }\n      const logVerbosityLevel = sessionOptions.logVerbosityLevel ?? 0;\n      if (!Number.isInteger(logVerbosityLevel) || logVerbosityLevel < 0 || logVerbosityLevel > 4) {\n        throw new Error(`log verbosity level is not valid: ${logVerbosityLevel}`);\n      }\n      const optimizedModelFilePathOffset = typeof sessionOptions.optimizedModelFilePath === "string" ? allocWasmString(sessionOptions.optimizedModelFilePath, allocs) : 0;\n      sessionOptionsHandle = wasm2._OrtCreateSessionOptions(\n        graphOptimizationLevel,\n        !!sessionOptions.enableCpuMemArena,\n        !!sessionOptions.enableMemPattern,\n        executionMode,\n        !!sessionOptions.enableProfiling,\n        0,\n        logIdDataOffset,\n        logSeverityLevel,\n        logVerbosityLevel,\n        optimizedModelFilePathOffset\n      );\n      if (sessionOptionsHandle === 0) {\n        checkLastError("Can\'t create session options.");\n      }\n      if (sessionOptions.executionProviders) {\n        setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs);\n      }\n      if (sessionOptions.freeDimensionOverrides) {\n        for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) {\n          if (typeof name !== "string") {\n            throw new Error(`free dimension override name must be a string: ${name}`);\n          }\n          if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {\n            throw new Error(`free dimension override value must be a non-negative integer: ${value}`);\n          }\n          const nameOffset = allocWasmString(name, allocs);\n          if (wasm2._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) {\n            checkLastError(`Can\'t set a free dimension override: ${name} - ${value}.`);\n          }\n        }\n      }\n      if (sessionOptions.extra !== void 0) {\n        iterateExtraOptions(sessionOptions.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n          const keyDataOffset = allocWasmString(key, allocs);\n          const valueDataOffset = allocWasmString(value, allocs);\n          if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n            checkLastError(`Can\'t set a session config entry: ${key} - ${value}.`);\n          }\n        });\n      }\n      return [sessionOptionsHandle, allocs];\n    } catch (e) {\n      if (sessionOptionsHandle !== 0) {\n        wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n      }\n      allocs.forEach((alloc) => wasm2._free(alloc));\n      throw e;\n    }\n  };\n\n  // web/lib/wasm/wasm-common.ts\n  var tensorDataTypeStringToEnum = (type) => {\n    switch (type) {\n      case "int8":\n        return 3 /* int8 */;\n      case "uint8":\n        return 2 /* uint8 */;\n      case "bool":\n        return 9 /* bool */;\n      case "int16":\n        return 5 /* int16 */;\n      case "uint16":\n        return 4 /* uint16 */;\n      case "int32":\n        return 6 /* int32 */;\n      case "uint32":\n        return 12 /* uint32 */;\n      case "float16":\n        return 10 /* float16 */;\n      case "float32":\n        return 1 /* float */;\n      case "float64":\n        return 11 /* double */;\n      case "string":\n        return 8 /* string */;\n      case "int64":\n        return 7 /* int64 */;\n      case "uint64":\n        return 13 /* uint64 */;\n      default:\n        throw new Error(`unsupported data type: ${type}`);\n    }\n  };\n  var tensorDataTypeEnumToString = (typeProto) => {\n    switch (typeProto) {\n      case 3 /* int8 */:\n        return "int8";\n      case 2 /* uint8 */:\n        return "uint8";\n      case 9 /* bool */:\n        return "bool";\n      case 5 /* int16 */:\n        return "int16";\n      case 4 /* uint16 */:\n        return "uint16";\n      case 6 /* int32 */:\n        return "int32";\n      case 12 /* uint32 */:\n        return "uint32";\n      case 10 /* float16 */:\n        return "float16";\n      case 1 /* float */:\n        return "float32";\n      case 11 /* double */:\n        return "float64";\n      case 8 /* string */:\n        return "string";\n      case 7 /* int64 */:\n        return "int64";\n      case 13 /* uint64 */:\n        return "uint64";\n      default:\n        throw new Error(`unsupported data type: ${typeProto}`);\n    }\n  };\n  var getTensorElementSize = (dateType) => [void 0, 4, 1, 1, 2, 2, 4, 8, void 0, 1, 2, 8, 4, 8, void 0, void 0, void 0][dateType];\n  var tensorTypeToTypedArrayConstructor = (type) => {\n    switch (type) {\n      case "float16":\n        return Uint16Array;\n      case "float32":\n        return Float32Array;\n      case "uint8":\n        return Uint8Array;\n      case "int8":\n        return Int8Array;\n      case "uint16":\n        return Uint16Array;\n      case "int16":\n        return Int16Array;\n      case "int32":\n        return Int32Array;\n      case "bool":\n        return Uint8Array;\n      case "float64":\n        return Float64Array;\n      case "uint32":\n        return Uint32Array;\n      case "int64":\n        return BigInt64Array;\n      case "uint64":\n        return BigUint64Array;\n      default:\n        throw new Error(`unsupported type: ${type}`);\n    }\n  };\n  var logLevelStringToEnum = (logLevel) => {\n    switch (logLevel) {\n      case "verbose":\n        return 0;\n      case "info":\n        return 1;\n      case "warning":\n        return 2;\n      case "error":\n        return 3;\n      case "fatal":\n        return 4;\n      default:\n        throw new Error(`unsupported logging level: ${logLevel}`);\n    }\n  };\n  var isGpuBufferSupportedType = (type) => type === "float32" || type === "int32" || type === "int64" || type === "bool" || type === "float16" || type === "uint32";\n  var dataLocationStringToEnum = (location) => {\n    switch (location) {\n      case "none":\n        return 0;\n      case "cpu":\n        return 1;\n      case "cpu-pinned":\n        return 2;\n      case "texture":\n        return 3;\n      case "gpu-buffer":\n        return 4;\n      default:\n        throw new Error(`unsupported data location: ${location}`);\n    }\n  };\n\n  // web/lib/wasm/wasm-utils-load-file.ts\n  init_fs();\n\n  // nodejs-ignore:node:fs/promises\n  var readFile2 = void 0;\n\n  // web/lib/wasm/wasm-utils-load-file.ts\n  var loadFile = async (file) => {\n    if (typeof file === "string") {\n      if (typeof process !== "undefined" && process.versions && process.versions.node) {\n        try {\n          return new Uint8Array(await readFile2(file));\n        } catch (e) {\n          if (e.code === "ERR_FS_FILE_TOO_LARGE") {\n            const stream = createReadStream(file);\n            const chunks = [];\n            for await (const chunk of stream) {\n              chunks.push(chunk);\n            }\n            return new Uint8Array(Buffer.concat(chunks));\n          }\n          throw e;\n        }\n      } else {\n        const response = await fetch(file);\n        if (!response.ok) {\n          throw new Error(`failed to load external data file: ${file}`);\n        }\n        const contentLengthHeader = response.headers.get("Content-Length");\n        const fileSize = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0;\n        if (fileSize < 1073741824) {\n          return new Uint8Array(await response.arrayBuffer());\n        } else {\n          if (!response.body) {\n            throw new Error(`failed to load external data file: ${file}, no response body.`);\n          }\n          const reader = response.body.getReader();\n          let buffer;\n          try {\n            buffer = new ArrayBuffer(fileSize);\n          } catch (e) {\n            if (e instanceof RangeError) {\n              const pages = Math.ceil(fileSize / 65536);\n              buffer = new WebAssembly.Memory({ initial: pages, maximum: pages }).buffer;\n            } else {\n              throw e;\n            }\n          }\n          let offset = 0;\n          while (true) {\n            const { done, value } = await reader.read();\n            if (done) {\n              break;\n            }\n            const chunkSize = value.byteLength;\n            const chunk = new Uint8Array(buffer, offset, chunkSize);\n            chunk.set(value);\n            offset += chunkSize;\n          }\n          return new Uint8Array(buffer, 0, fileSize);\n        }\n      }\n    } else if (file instanceof Blob) {\n      return new Uint8Array(await file.arrayBuffer());\n    } else if (file instanceof Uint8Array) {\n      return file;\n    } else {\n      return new Uint8Array(file);\n    }\n  };\n\n  // web/lib/wasm/wasm-core-impl.ts\n  var initOrt = (numThreads, loggingLevel) => {\n    const errorCode = getInstance()._OrtInit(numThreads, loggingLevel);\n    if (errorCode !== 0) {\n      checkLastError("Can\'t initialize onnxruntime.");\n    }\n  };\n  var initRuntime = async (env) => {\n    initOrt(env.wasm.numThreads, logLevelStringToEnum(env.logLevel));\n  };\n  var initEp = async (env, epName) => {\n    if (false) {\n      if (typeof navigator === "undefined" || !navigator.gpu) {\n        throw new Error("WebGPU is not supported in current environment");\n      }\n      const adapter = await navigator.gpu.requestAdapter();\n      if (!adapter) {\n        throw new Error(\n          \'Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.\'\n        );\n      }\n      if (!env.wasm.simd) {\n        throw new Error(\n          "Not supported for WebGPU=ON and SIMD=OFF. Please set `env.wasm.simd` to true when using `webgpu` EP"\n        );\n      }\n      const initJsep = null.init;\n      await initJsep(getInstance(), env, adapter);\n    }\n  };\n  var activeSessions = /* @__PURE__ */ new Map();\n  var getSessionInputOutputCount = (sessionHandle) => {\n    const wasm2 = getInstance();\n    const stack = wasm2.stackSave();\n    try {\n      const dataOffset = wasm2.stackAlloc(8);\n      const errorCode = wasm2._OrtGetInputOutputCount(sessionHandle, dataOffset, dataOffset + 4);\n      if (errorCode !== 0) {\n        checkLastError("Can\'t get session input/output count.");\n      }\n      return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]];\n    } finally {\n      wasm2.stackRestore(stack);\n    }\n  };\n  var copyFromExternalBuffer = (model) => {\n    const wasm2 = getInstance();\n    const modelDataOffset = wasm2._malloc(model.byteLength);\n    if (modelDataOffset === 0) {\n      throw new Error(`Can\'t create a session. failed to allocate a buffer of size ${model.byteLength}.`);\n    }\n    wasm2.HEAPU8.set(model, modelDataOffset);\n    return [modelDataOffset, model.byteLength];\n  };\n  var createSession = async (modelData, options) => {\n    let modelDataOffset, modelDataLength;\n    const wasm2 = getInstance();\n    if (Array.isArray(modelData)) {\n      [modelDataOffset, modelDataLength] = modelData;\n    } else if (modelData.buffer === wasm2.HEAPU8.buffer) {\n      [modelDataOffset, modelDataLength] = [modelData.byteOffset, modelData.byteLength];\n    } else {\n      [modelDataOffset, modelDataLength] = copyFromExternalBuffer(modelData);\n    }\n    let sessionHandle = 0;\n    let sessionOptionsHandle = 0;\n    let ioBindingHandle = 0;\n    let allocs = [];\n    const inputNamesUTF8Encoded = [];\n    const outputNamesUTF8Encoded = [];\n    try {\n      [sessionOptionsHandle, allocs] = setSessionOptions(options);\n      if (options?.externalData && wasm2.mountExternalData) {\n        const loadingPromises = [];\n        for (const file of options.externalData) {\n          const path = typeof file === "string" ? file : file.path;\n          loadingPromises.push(loadFile(typeof file === "string" ? file : file.data).then((data) => {\n            wasm2.mountExternalData(path, data);\n          }));\n        }\n        await Promise.all(loadingPromises);\n      }\n      sessionHandle = wasm2._OrtCreateSession(modelDataOffset, modelDataLength, sessionOptionsHandle);\n      if (sessionHandle === 0) {\n        checkLastError("Can\'t create a session.");\n      }\n      const [inputCount, outputCount] = getSessionInputOutputCount(sessionHandle);\n      const inputNames = [];\n      const outputNames = [];\n      const outputPreferredLocations = [];\n      for (let i = 0; i < inputCount; i++) {\n        const name = wasm2._OrtGetInputName(sessionHandle, i);\n        if (name === 0) {\n          checkLastError("Can\'t get an input name.");\n        }\n        inputNamesUTF8Encoded.push(name);\n        inputNames.push(wasm2.UTF8ToString(name));\n      }\n      for (let i = 0; i < outputCount; i++) {\n        const name = wasm2._OrtGetOutputName(sessionHandle, i);\n        if (name === 0) {\n          checkLastError("Can\'t get an output name.");\n        }\n        outputNamesUTF8Encoded.push(name);\n        const nameString = wasm2.UTF8ToString(name);\n        outputNames.push(nameString);\n        if (false) {\n          const location = typeof options?.preferredOutputLocation === "string" ? options.preferredOutputLocation : options?.preferredOutputLocation?.[nameString] ?? "cpu";\n          if (location !== "cpu" && location !== "cpu-pinned" && location !== "gpu-buffer") {\n            throw new Error(`Not supported preferred output location: ${location}.`);\n          }\n          outputPreferredLocations.push(location);\n        }\n      }\n      let bindingState = null;\n      if (false) {\n        ioBindingHandle = wasm2._OrtCreateBinding(sessionHandle);\n        if (ioBindingHandle === 0) {\n          checkLastError("Can\'t create IO binding.");\n        }\n        bindingState = {\n          handle: ioBindingHandle,\n          outputPreferredLocations,\n          outputPreferredLocationsEncoded: outputPreferredLocations.map((l) => dataLocationStringToEnum(l))\n        };\n      }\n      activeSessions.set(sessionHandle, [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, bindingState]);\n      return [sessionHandle, inputNames, outputNames];\n    } catch (e) {\n      inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n      outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n      if (ioBindingHandle !== 0) {\n        wasm2._OrtReleaseBinding(ioBindingHandle);\n      }\n      if (sessionHandle !== 0) {\n        wasm2._OrtReleaseSession(sessionHandle);\n      }\n      throw e;\n    } finally {\n      wasm2._free(modelDataOffset);\n      if (sessionOptionsHandle !== 0) {\n        wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n      }\n      allocs.forEach((alloc) => wasm2._free(alloc));\n      wasm2.unmountExternalData?.();\n    }\n  };\n  var releaseSession = (sessionId) => {\n    const wasm2 = getInstance();\n    const session = activeSessions.get(sessionId);\n    if (!session) {\n      throw new Error(`cannot release session. invalid session id: ${sessionId}`);\n    }\n    const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState] = session;\n    if (ioBindingState) {\n      wasm2._OrtReleaseBinding(ioBindingState.handle);\n    }\n    wasm2.jsepUnregisterBuffers?.(sessionId);\n    inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n    outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n    wasm2._OrtReleaseSession(sessionHandle);\n    activeSessions.delete(sessionId);\n  };\n  var prepareInputOutputTensor = (tensor, tensorHandles, allocs, sessionId, index) => {\n    if (!tensor) {\n      tensorHandles.push(0);\n      return;\n    }\n    const wasm2 = getInstance();\n    const dataType = tensor[0];\n    const dims = tensor[1];\n    const location = tensor[3];\n    let rawData;\n    let dataByteLength;\n    if (dataType === "string" && location === "gpu-buffer") {\n      throw new Error("String tensor is not supported on GPU.");\n    }\n    if (location === "gpu-buffer") {\n      const gpuBuffer = tensor[2].gpuBuffer;\n      const elementSizeInBytes = getTensorElementSize(tensorDataTypeStringToEnum(dataType));\n      dataByteLength = dims.reduce((a, b) => a * b, 1) * elementSizeInBytes;\n      rawData = wasm2.jsepRegisterBuffer(sessionId, index, gpuBuffer, dataByteLength);\n    } else {\n      const data = tensor[2];\n      if (Array.isArray(data)) {\n        dataByteLength = 4 * data.length;\n        rawData = wasm2._malloc(dataByteLength);\n        allocs.push(rawData);\n        let dataIndex = rawData / 4;\n        for (let i = 0; i < data.length; i++) {\n          if (typeof data[i] !== "string") {\n            throw new TypeError(`tensor data at index ${i} is not a string`);\n          }\n          wasm2.HEAPU32[dataIndex++] = allocWasmString(data[i], allocs);\n        }\n      } else {\n        dataByteLength = data.byteLength;\n        rawData = wasm2._malloc(dataByteLength);\n        allocs.push(rawData);\n        wasm2.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), rawData);\n      }\n    }\n    const stack = wasm2.stackSave();\n    const dimsOffset = wasm2.stackAlloc(4 * dims.length);\n    try {\n      let dimIndex = dimsOffset / 4;\n      dims.forEach((d) => wasm2.HEAP32[dimIndex++] = d);\n      const tensor2 = wasm2._OrtCreateTensor(\n        tensorDataTypeStringToEnum(dataType),\n        rawData,\n        dataByteLength,\n        dimsOffset,\n        dims.length,\n        dataLocationStringToEnum(location)\n      );\n      if (tensor2 === 0) {\n        checkLastError(`Can\'t create tensor for input/output. session=${sessionId}, index=${index}.`);\n      }\n      tensorHandles.push(tensor2);\n    } finally {\n      wasm2.stackRestore(stack);\n    }\n  };\n  var run = async (sessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => {\n    const wasm2 = getInstance();\n    const session = activeSessions.get(sessionId);\n    if (!session) {\n      throw new Error(`cannot run inference. invalid session id: ${sessionId}`);\n    }\n    const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState] = session;\n    const inputCount = inputIndices.length;\n    const outputCount = outputIndices.length;\n    let runOptionsHandle = 0;\n    let runOptionsAllocs = [];\n    const inputTensorHandles = [];\n    const outputTensorHandles = [];\n    const inputOutputAllocs = [];\n    const beforeRunStack = wasm2.stackSave();\n    const inputValuesOffset = wasm2.stackAlloc(inputCount * 4);\n    const inputNamesOffset = wasm2.stackAlloc(inputCount * 4);\n    const outputValuesOffset = wasm2.stackAlloc(outputCount * 4);\n    const outputNamesOffset = wasm2.stackAlloc(outputCount * 4);\n    try {\n      [runOptionsHandle, runOptionsAllocs] = setRunOptions(options);\n      for (let i = 0; i < inputCount; i++) {\n        prepareInputOutputTensor(inputTensors[i], inputTensorHandles, inputOutputAllocs, sessionId, inputIndices[i]);\n      }\n      for (let i = 0; i < outputCount; i++) {\n        prepareInputOutputTensor(\n          outputTensors[i],\n          outputTensorHandles,\n          inputOutputAllocs,\n          sessionId,\n          inputCount + outputIndices[i]\n        );\n      }\n      let inputValuesIndex = inputValuesOffset / 4;\n      let inputNamesIndex = inputNamesOffset / 4;\n      let outputValuesIndex = outputValuesOffset / 4;\n      let outputNamesIndex = outputNamesOffset / 4;\n      for (let i = 0; i < inputCount; i++) {\n        wasm2.HEAPU32[inputValuesIndex++] = inputTensorHandles[i];\n        wasm2.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]];\n      }\n      for (let i = 0; i < outputCount; i++) {\n        wasm2.HEAPU32[outputValuesIndex++] = outputTensorHandles[i];\n        wasm2.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]];\n      }\n      if (false) {\n        const { handle, outputPreferredLocations, outputPreferredLocationsEncoded } = ioBindingState;\n        if (inputNamesUTF8Encoded.length !== inputCount) {\n          throw new Error(`input count from feeds (${inputCount}) is expected to be always equal to model\'s input count (${inputNamesUTF8Encoded.length}).`);\n        }\n        for (let i = 0; i < inputCount; i++) {\n          const index = inputIndices[i];\n          const errorCode2 = await wasm2._OrtBindInput(handle, inputNamesUTF8Encoded[index], inputTensorHandles[i]);\n          if (errorCode2 !== 0) {\n            checkLastError(`Can\'t bind input[${i}] for session=${sessionId}.`);\n          }\n        }\n        for (let i = 0; i < outputCount; i++) {\n          const index = outputIndices[i];\n          const location = outputTensors[i]?.[3];\n          if (location) {\n            const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], outputTensorHandles[i], 0);\n            if (errorCode2 !== 0) {\n              checkLastError(`Can\'t bind pre-allocated output[${i}] for session=${sessionId}.`);\n            }\n          } else {\n            const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], 0, outputPreferredLocationsEncoded[index]);\n            if (errorCode2 !== 0) {\n              checkLastError(`Can\'t bind output[${i}] to ${outputPreferredLocations[i]} for session=${sessionId}.`);\n            }\n          }\n        }\n      }\n      let errorCode;\n      if (false) {\n        errorCode = await wasm2._OrtRunWithBinding(\n          sessionHandle,\n          ioBindingState.handle,\n          outputCount,\n          outputValuesOffset,\n          runOptionsHandle\n        );\n      } else {\n        errorCode = await wasm2._OrtRun(\n          sessionHandle,\n          inputNamesOffset,\n          inputValuesOffset,\n          inputCount,\n          outputNamesOffset,\n          outputCount,\n          outputValuesOffset,\n          runOptionsHandle\n        );\n      }\n      if (errorCode !== 0) {\n        checkLastError("failed to call OrtRun().");\n      }\n      const output = [];\n      for (let i = 0; i < outputCount; i++) {\n        const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i];\n        if (tensor === outputTensorHandles[i]) {\n          output.push(outputTensors[i]);\n          continue;\n        }\n        const beforeGetTensorDataStack = wasm2.stackSave();\n        const tensorDataOffset = wasm2.stackAlloc(4 * 4);\n        let keepOutputTensor = false;\n        let type, dataOffset = 0;\n        try {\n          const errorCode2 = wasm2._OrtGetTensorData(\n            tensor,\n            tensorDataOffset,\n            tensorDataOffset + 4,\n            tensorDataOffset + 8,\n            tensorDataOffset + 12\n          );\n          if (errorCode2 !== 0) {\n            checkLastError(`Can\'t access output tensor data on index ${i}.`);\n          }\n          let tensorDataIndex = tensorDataOffset / 4;\n          const dataType = wasm2.HEAPU32[tensorDataIndex++];\n          dataOffset = wasm2.HEAPU32[tensorDataIndex++];\n          const dimsOffset = wasm2.HEAPU32[tensorDataIndex++];\n          const dimsLength = wasm2.HEAPU32[tensorDataIndex++];\n          const dims = [];\n          for (let i2 = 0; i2 < dimsLength; i2++) {\n            dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]);\n          }\n          wasm2._OrtFree(dimsOffset);\n          const size = dims.reduce((a, b) => a * b, 1);\n          type = tensorDataTypeEnumToString(dataType);\n          const preferredLocation = ioBindingState?.outputPreferredLocations[outputIndices[i]];\n          if (type === "string") {\n            if (preferredLocation === "gpu-buffer") {\n              throw new Error("String tensor is not supported on GPU.");\n            }\n            const stringData = [];\n            let dataIndex = dataOffset / 4;\n            for (let i2 = 0; i2 < size; i2++) {\n              const offset = wasm2.HEAPU32[dataIndex++];\n              const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset;\n              stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead));\n            }\n            output.push([type, dims, stringData, "cpu"]);\n          } else {\n            if (preferredLocation === "gpu-buffer" && size > 0) {\n              const gpuBuffer = wasm2.jsepGetBuffer(dataOffset);\n              const elementSize = getTensorElementSize(dataType);\n              if (elementSize === void 0 || !isGpuBufferSupportedType(type)) {\n                throw new Error(`Unsupported data type: ${type}`);\n              }\n              keepOutputTensor = true;\n              output.push([\n                type,\n                dims,\n                {\n                  gpuBuffer,\n                  download: wasm2.jsepCreateDownloader(gpuBuffer, size * elementSize, type),\n                  dispose: () => {\n                    wasm2._OrtReleaseTensor(tensor);\n                  }\n                },\n                "gpu-buffer"\n              ]);\n            } else {\n              const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type);\n              const data = new typedArrayConstructor(size);\n              new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength));\n              output.push([type, dims, data, "cpu"]);\n            }\n          }\n        } finally {\n          wasm2.stackRestore(beforeGetTensorDataStack);\n          if (type === "string" && dataOffset) {\n            wasm2._free(dataOffset);\n          }\n          if (!keepOutputTensor) {\n            wasm2._OrtReleaseTensor(tensor);\n          }\n        }\n      }\n      if (ioBindingState) {\n        wasm2._OrtClearBoundOutputs(ioBindingState.handle);\n      }\n      return output;\n    } finally {\n      wasm2.stackRestore(beforeRunStack);\n      inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n      outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n      inputOutputAllocs.forEach((p) => wasm2._free(p));\n      if (runOptionsHandle !== 0) {\n        wasm2._OrtReleaseRunOptions(runOptionsHandle);\n      }\n      runOptionsAllocs.forEach((p) => wasm2._free(p));\n    }\n  };\n  var endProfiling = (sessionId) => {\n    const wasm2 = getInstance();\n    const session = activeSessions.get(sessionId);\n    if (!session) {\n      throw new Error("invalid session id");\n    }\n    const sessionHandle = session[0];\n    const profileFileName = wasm2._OrtEndProfiling(sessionHandle);\n    if (profileFileName === 0) {\n      checkLastError("Can\'t get an profile file name.");\n    }\n    wasm2._OrtFree(profileFileName);\n  };\n  var extractTransferableBuffers = (tensors) => {\n    const buffers = [];\n    for (const tensor of tensors) {\n      const data = tensor[2];\n      if (!Array.isArray(data) && "buffer" in data) {\n        buffers.push(data.buffer);\n      }\n    }\n    return buffers;\n  };\n\n  // web/lib/wasm/proxy-worker/main.ts\n  self.onmessage = (ev) => {\n    const { type, in: message } = ev.data;\n    try {\n      switch (type) {\n        case "init-wasm":\n          initializeWebAssembly(message.wasm).then(\n            () => {\n              initRuntime(message).then(\n                () => {\n                  postMessage({ type });\n                },\n                (err) => {\n                  postMessage({ type, err });\n                }\n              );\n            },\n            (err) => {\n              postMessage({ type, err });\n            }\n          );\n          break;\n        case "init-ep": {\n          const { epName, env } = message;\n          initEp(env, epName).then(\n            () => {\n              postMessage({ type });\n            },\n            (err) => {\n              postMessage({ type, err });\n            }\n          );\n          break;\n        }\n        case "copy-from": {\n          const { buffer } = message;\n          const bufferData = copyFromExternalBuffer(buffer);\n          postMessage({ type, out: bufferData });\n          break;\n        }\n        case "create": {\n          const { model, options } = message;\n          createSession(model, options).then(\n            (sessionMetadata) => {\n              postMessage({ type, out: sessionMetadata });\n            },\n            (err) => {\n              postMessage({ type, err });\n            }\n          );\n          break;\n        }\n        case "release":\n          releaseSession(message);\n          postMessage({ type });\n          break;\n        case "run": {\n          const { sessionId, inputIndices, inputs, outputIndices, options } = message;\n          run(sessionId, inputIndices, inputs, outputIndices, new Array(outputIndices.length).fill(null), options).then(\n            (outputs) => {\n              if (outputs.some((o) => o[3] !== "cpu")) {\n                postMessage({ type, err: "Proxy does not support non-cpu tensor location." });\n              } else {\n                postMessage(\n                  { type, out: outputs },\n                  extractTransferableBuffers(outputs)\n                );\n              }\n            },\n            (err) => {\n              postMessage({ type, err });\n            }\n          );\n          break;\n        }\n        case "end-profiling":\n          endProfiling(message);\n          postMessage({ type });\n          break;\n        default:\n      }\n    } catch (err) {\n      postMessage({ type, err });\n    }\n  };\n})();\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZWpzLWlnbm9yZTpmcyIsICJub2RlanMtaWdub3JlOnBhdGgiLCAiLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS5qcyIsICJub2RlanMtaWdub3JlOndvcmtlcl90aHJlYWRzIiwgIm5vZGVqcy1pZ25vcmU6cGVyZl9ob29rcyIsICJub2RlanMtaWdub3JlOm9zIiwgIi4uL2xpYi93YXNtL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQuanMiLCAiLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanMiLCAibm9kZWpzLWlnbm9yZTpub2RlOnBhdGgiLCAiLi4vbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzIiwgIi4uL2xpYi93YXNtL3dhc20tdXRpbHMudHMiLCAiLi4vbGliL3dhc20vcnVuLW9wdGlvbnMudHMiLCAiLi4vbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzIiwgIi4uL2xpYi93YXNtL3dhc20tY29tbW9uLnRzIiwgIi4uL2xpYi93YXNtL3dhc20tdXRpbHMtbG9hZC1maWxlLnRzIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpmcy9wcm9taXNlcyIsICIuLi9saWIvd2FzbS93YXNtLWNvcmUtaW1wbC50cyIsICIuLi9saWIvd2FzbS9wcm94eS13b3JrZXIvbWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGNvbnN0IHJlYWRGaWxlID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCByZWFkRmlsZVN5bmMgPSB1bmRlZmluZWQ7ZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWRTdHJlYW0gPSB1bmRlZmluZWQ7IiwgImV4cG9ydCBjb25zdCBqb2luID0gdW5kZWZpbmVkOyIsICJcbnZhciBvcnRXYXNtID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykgX3NjcmlwdERpciA9IF9zY3JpcHREaXIgfHwgX19maWxlbmFtZTtcbiAgcmV0dXJuIChcbmZ1bmN0aW9uKG1vZHVsZUFyZyA9IHt9KSB7XG5cbnZhciBmPW1vZHVsZUFyZyxrLGw7Zi5yZWFkeT1uZXcgUHJvbWlzZSgoYSxiKT0+e2s9YTtsPWJ9KTt2YXIgYWE9T2JqZWN0LmFzc2lnbih7fSxmKSxiYT1cIi4vdGhpcy5wcm9ncmFtXCIsY2E9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyxxPVwiZnVuY3Rpb25cIj09dHlwZW9mIGltcG9ydFNjcmlwdHMsZGE9XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLHY9XCJcIix4LHosQTtcbmlmKGRhKXt2YXIgZnM9cmVxdWlyZShcImZzXCIpLEI9cmVxdWlyZShcInBhdGhcIik7dj1xP0IuZGlybmFtZSh2KStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7eD0oYSxiKT0+e2E9QyhhKT9uZXcgVVJMKGEpOkIubm9ybWFsaXplKGEpO3JldHVybiBmcy5yZWFkRmlsZVN5bmMoYSxiP3ZvaWQgMDpcInV0ZjhcIil9O0E9YT0+e2E9eChhLCEwKTthLmJ1ZmZlcnx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpO3JldHVybiBhfTt6PShhLGIsYyxlPSEwKT0+e2E9QyhhKT9uZXcgVVJMKGEpOkIubm9ybWFsaXplKGEpO2ZzLnJlYWRGaWxlKGEsZT92b2lkIDA6XCJ1dGY4XCIsKGcsaCk9PntnP2MoZyk6YihlP2guYnVmZmVyOmgpfSl9OyFmLnRoaXNQcm9ncmFtJiYxPHByb2Nlc3MuYXJndi5sZW5ndGgmJihiYT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFxcXC9nLFwiL1wiKSk7cHJvY2Vzcy5hcmd2LnNsaWNlKDIpO2YuaW5zcGVjdD0oKT0+XCJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XVwifWVsc2UgaWYoY2F8fHEpcT92PVxuc2VsZi5sb2NhdGlvbi5ocmVmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKHY9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLF9zY3JpcHREaXImJih2PV9zY3JpcHREaXIpLDAhPT12LmluZGV4T2YoXCJibG9iOlwiKT92PXYuc3Vic3RyKDAsdi5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKTp2PVwiXCIseD1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2Iuc2VuZChudWxsKTtyZXR1cm4gYi5yZXNwb25zZVRleHR9LHEmJihBPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2Iuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYi5yZXNwb25zZSl9KSx6PShhLGIsYyk9Pnt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5vcGVuKFwiR0VUXCIsYSwhMCk7ZS5yZXNwb25zZVR5cGU9XG5cImFycmF5YnVmZmVyXCI7ZS5vbmxvYWQ9KCk9PnsyMDA9PWUuc3RhdHVzfHwwPT1lLnN0YXR1cyYmZS5yZXNwb25zZT9iKGUucmVzcG9uc2UpOmMoKX07ZS5vbmVycm9yPWM7ZS5zZW5kKG51bGwpfTt2YXIgZWE9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxEPWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGYsYWEpO2FhPW51bGw7XCJvYmplY3RcIiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZFKFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTt2YXIgRixmYT0hMSxHLEgsSSxKLGhhO1xuZnVuY3Rpb24gaWEoKXt2YXIgYT1GLmJ1ZmZlcjtmLkhFQVA4PUc9bmV3IEludDhBcnJheShhKTtmLkhFQVAxNj1uZXcgSW50MTZBcnJheShhKTtmLkhFQVBVOD1IPW5ldyBVaW50OEFycmF5KGEpO2YuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYSk7Zi5IRUFQMzI9ST1uZXcgSW50MzJBcnJheShhKTtmLkhFQVBVMzI9Sj1uZXcgVWludDMyQXJyYXkoYSk7Zi5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYSk7Zi5IRUFQRjY0PWhhPW5ldyBGbG9hdDY0QXJyYXkoYSl9dmFyIEs9W10sTD1bXSxqYT1bXSxNPTAsTj1udWxsLE89bnVsbDtmdW5jdGlvbiBFKGEpe2E9XCJBYm9ydGVkKFwiK2ErXCIpXCI7RChhKTtmYT0hMDthPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYStcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7bChhKTt0aHJvdyBhO31cbnZhciBrYT1hPT5hLnN0YXJ0c1dpdGgoXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCIpLEM9YT0+YS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSxQO1A9XCJvcnQtd2FzbS53YXNtXCI7aWYoIWthKFApKXt2YXIgbGE9UDtQPWYubG9jYXRlRmlsZT9mLmxvY2F0ZUZpbGUobGEsdik6ditsYX1mdW5jdGlvbiBtYShhKXtpZihBKXJldHVybiBBKGEpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO31cbmZ1bmN0aW9uIG5hKGEpe2lmKGNhfHxxKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBmZXRjaCYmIUMoYSkpcmV0dXJuIGZldGNoKGEse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oYj0+e2lmKCFiLm9rKXRocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIithK1wiJ1wiO3JldHVybiBiLmFycmF5QnVmZmVyKCl9KS5jYXRjaCgoKT0+bWEoYSkpO2lmKHopcmV0dXJuIG5ldyBQcm9taXNlKChiLGMpPT57eihhLGU9PmIobmV3IFVpbnQ4QXJyYXkoZSkpLGMpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm1hKGEpKX1mdW5jdGlvbiBvYShhLGIsYyl7cmV0dXJuIG5hKGEpLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZSxiKSkudGhlbihlPT5lKS50aGVuKGMsZT0+e0QoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7ZX1gKTtFKGUpfSl9XG5mdW5jdGlvbiBwYShhLGIpe3ZhciBjPVA7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fGthKGMpfHxDKGMpfHxkYXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/b2EoYyxhLGIpOmZldGNoKGMse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZSxhKS50aGVuKGIsZnVuY3Rpb24oZyl7RChgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7Z31gKTtEKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7cmV0dXJuIG9hKGMsYSxiKX0pKX1cbnZhciBRLHFhPXs5MTk4ODg6KGEsYixjLGUpPT57aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGZ8fCFmLnphKXJldHVybiAxO2E9UihhPj4+MCk7YS5zdGFydHNXaXRoKFwiLi9cIikmJihhPWEuc3Vic3RyaW5nKDIpKTthPWYuemEuZ2V0KGEpO2lmKCFhKXJldHVybiAyO2I+Pj49MDtjPj4+PTA7aWYoYitjPmEuYnl0ZUxlbmd0aClyZXR1cm4gMzt0cnl7cmV0dXJuIEguc2V0KGEuc3ViYXJyYXkoYixiK2MpLGU+Pj4wPj4+MCksMH1jYXRjaHtyZXR1cm4gNH19fTtmdW5jdGlvbiByYShhKXt0aGlzLnhhPWEtMjQ7dGhpcy5IYT1mdW5jdGlvbihiKXtKW3RoaXMueGErND4+PjI+Pj4wXT1ifTt0aGlzLkdhPWZ1bmN0aW9uKGIpe0pbdGhpcy54YSs4Pj4+Mj4+PjBdPWJ9O3RoaXMuQWE9ZnVuY3Rpb24oYixjKXt0aGlzLkZhKCk7dGhpcy5IYShiKTt0aGlzLkdhKGMpfTt0aGlzLkZhPWZ1bmN0aW9uKCl7Slt0aGlzLnhhKzE2Pj4+Mj4+PjBdPTB9fVxudmFyIHNhPTAsdGE9MCx1YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp2b2lkIDAsdmE9KGEsYixjKT0+e2I+Pj49MDt2YXIgZT1iK2M7Zm9yKGM9YjthW2NdJiYhKGM+PWUpOykrK2M7aWYoMTY8Yy1iJiZhLmJ1ZmZlciYmdWEpcmV0dXJuIHVhLmRlY29kZShhLnN1YmFycmF5KGIsYykpO2ZvcihlPVwiXCI7YjxjOyl7dmFyIGc9YVtiKytdO2lmKGcmMTI4KXt2YXIgaD1hW2IrK10mNjM7aWYoMTkyPT0oZyYyMjQpKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGcmMzEpPDw2fGgpO2Vsc2V7dmFyIG09YVtiKytdJjYzO2c9MjI0PT0oZyYyNDApPyhnJjE1KTw8MTJ8aDw8NnxtOihnJjcpPDwxOHxoPDwxMnxtPDw2fGFbYisrXSY2Mzs2NTUzNj5nP2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoZyk6KGctPTY1NTM2LGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Zz4+MTAsNTYzMjB8ZyYxMDIzKSl9fWVsc2UgZSs9U3RyaW5nLmZyb21DaGFyQ29kZShnKX1yZXR1cm4gZX0sXG5SPShhLGIpPT4oYT4+Pj0wKT92YShILGEsYik6XCJcIixTPWE9Pntmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBlPWEuY2hhckNvZGVBdChjKTsxMjc+PWU/YisrOjIwNDc+PWU/Yis9Mjo1NTI5Njw9ZSYmNTczNDM+PWU/KGIrPTQsKytjKTpiKz0zfXJldHVybiBifSxUPShhLGIsYyxlKT0+e2M+Pj49MDtpZighKDA8ZSkpcmV0dXJuIDA7dmFyIGc9YztlPWMrZS0xO2Zvcih2YXIgaD0wO2g8YS5sZW5ndGg7KytoKXt2YXIgbT1hLmNoYXJDb2RlQXQoaCk7aWYoNTUyOTY8PW0mJjU3MzQzPj1tKXt2YXIgcj1hLmNoYXJDb2RlQXQoKytoKTttPTY1NTM2KygobSYxMDIzKTw8MTApfHImMTAyM31pZigxMjc+PW0pe2lmKGM+PWUpYnJlYWs7YltjKys+Pj4wXT1tfWVsc2V7aWYoMjA0Nz49bSl7aWYoYysxPj1lKWJyZWFrO2JbYysrPj4+MF09MTkyfG0+PjZ9ZWxzZXtpZig2NTUzNT49bSl7aWYoYysyPj1lKWJyZWFrO2JbYysrPj4+MF09MjI0fG0+PjEyfWVsc2V7aWYoYyszPj1cbmUpYnJlYWs7YltjKys+Pj4wXT0yNDB8bT4+MTg7YltjKys+Pj4wXT0xMjh8bT4+MTImNjN9YltjKys+Pj4wXT0xMjh8bT4+NiY2M31iW2MrKz4+PjBdPTEyOHxtJjYzfX1iW2M+Pj4wXT0wO3JldHVybiBjLWd9LFU9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSx3YT1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx4YT1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxDYT1hPT57dmFyIGI9UyhhKSsxLGM9QmEoYik7YyYmVChhLEgsYyxiKTtyZXR1cm4gY30sVj1bXSxXPXt9LERhPSgpPT57aWYoIVgpe3ZhciBhPXtVU0VSOlwid2ViX3VzZXJcIixMT0dOQU1FOlwid2ViX3VzZXJcIixQQVRIOlwiL1wiLFBXRDpcIi9cIixIT01FOlwiL2hvbWUvd2ViX3VzZXJcIixMQU5HOihcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHxcIkNcIikucmVwbGFjZShcIi1cIixcblwiX1wiKStcIi5VVEYtOFwiLF86YmF8fFwiLi90aGlzLnByb2dyYW1cIn0sYjtmb3IoYiBpbiBXKXZvaWQgMD09PVdbYl0/ZGVsZXRlIGFbYl06YVtiXT1XW2JdO3ZhciBjPVtdO2ZvcihiIGluIGEpYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtYPWN9cmV0dXJuIFh9LFgsRWE9W251bGwsW10sW11dLEZhPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sR2E9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiBIYShhKXt2YXIgYj1BcnJheShTKGEpKzEpO1QoYSxiLDAsYi5sZW5ndGgpO3JldHVybiBifVxuZnVuY3Rpb24gSWEoYSxiLGMsZSl7ZnVuY3Rpb24gZyhkLG4scCl7Zm9yKGQ9XCJudW1iZXJcIj09dHlwZW9mIGQ/ZC50b1N0cmluZygpOmR8fFwiXCI7ZC5sZW5ndGg8bjspZD1wWzBdK2Q7cmV0dXJuIGR9ZnVuY3Rpb24gaChkLG4pe3JldHVybiBnKGQsbixcIjBcIil9ZnVuY3Rpb24gbShkLG4pe2Z1bmN0aW9uIHAoeWEpe3JldHVybiAwPnlhPy0xOjA8eWE/MTowfXZhciB5OzA9PT0oeT1wKGQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpKSYmMD09PSh5PXAoZC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSkpJiYoeT1wKGQuZ2V0RGF0ZSgpLW4uZ2V0RGF0ZSgpKSk7cmV0dXJuIHl9ZnVuY3Rpb24gcihkKXtzd2l0Y2goZC5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBkO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksXG4wLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIHcoZCl7dmFyIG49ZC50YTtmb3IoZD1uZXcgRGF0ZSgobmV3IERhdGUoZC51YSsxOTAwLDAsMSkpLmdldFRpbWUoKSk7MDxuOyl7dmFyIHA9ZC5nZXRNb250aCgpLHk9KFUoZC5nZXRGdWxsWWVhcigpKT9GYTpHYSlbcF07aWYobj55LWQuZ2V0RGF0ZSgpKW4tPXktZC5nZXREYXRlKCkrMSxkLnNldERhdGUoMSksMTE+cD9kLnNldE1vbnRoKHArMSk6KGQuc2V0TW9udGgoMCksZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkrMSkpO2Vsc2V7ZC5zZXREYXRlKGQuZ2V0RGF0ZSgpK24pO2JyZWFrfX1wPW5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSsxLDAsNCk7bj1yKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSxcbjAsNCkpO3A9cihwKTtyZXR1cm4gMD49bShuLGQpPzA+PW0ocCxkKT9kLmdldEZ1bGxZZWFyKCkrMTpkLmdldEZ1bGxZZWFyKCk6ZC5nZXRGdWxsWWVhcigpLTF9YT4+Pj0wO2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO3ZhciB0PUpbZSs0MD4+PjI+Pj4wXTtlPXtEYTpJW2U+Pj4yPj4+MF0sQ2E6SVtlKzQ+Pj4yPj4+MF0sdmE6SVtlKzg+Pj4yPj4+MF0seWE6SVtlKzEyPj4+Mj4+PjBdLHdhOklbZSsxNj4+PjI+Pj4wXSx1YTpJW2UrMjA+Pj4yPj4+MF0sb2E6SVtlKzI0Pj4+Mj4+PjBdLHRhOklbZSsyOD4+PjI+Pj4wXSxJYTpJW2UrMzI+Pj4yPj4+MF0sQmE6SVtlKzM2Pj4+Mj4+PjBdLEVhOnQ/Uih0KTpcIlwifTtjPVIoYyk7dD17XCIlY1wiOlwiJWEgJWIgJWQgJUg6JU06JVMgJVlcIixcIiVEXCI6XCIlbS8lZC8leVwiLFwiJUZcIjpcIiVZLSVtLSVkXCIsXCIlaFwiOlwiJWJcIixcIiVyXCI6XCIlSTolTTolUyAlcFwiLFwiJVJcIjpcIiVIOiVNXCIsXCIlVFwiOlwiJUg6JU06JVNcIixcIiV4XCI6XCIlbS8lZC8leVwiLFwiJVhcIjpcIiVIOiVNOiVTXCIsXG5cIiVFY1wiOlwiJWNcIixcIiVFQ1wiOlwiJUNcIixcIiVFeFwiOlwiJW0vJWQvJXlcIixcIiVFWFwiOlwiJUg6JU06JVNcIixcIiVFeVwiOlwiJXlcIixcIiVFWVwiOlwiJVlcIixcIiVPZFwiOlwiJWRcIixcIiVPZVwiOlwiJWVcIixcIiVPSFwiOlwiJUhcIixcIiVPSVwiOlwiJUlcIixcIiVPbVwiOlwiJW1cIixcIiVPTVwiOlwiJU1cIixcIiVPU1wiOlwiJVNcIixcIiVPdVwiOlwiJXVcIixcIiVPVVwiOlwiJVVcIixcIiVPVlwiOlwiJVZcIixcIiVPd1wiOlwiJXdcIixcIiVPV1wiOlwiJVdcIixcIiVPeVwiOlwiJXlcIn07Zm9yKHZhciB1IGluIHQpYz1jLnJlcGxhY2UobmV3IFJlZ0V4cCh1LFwiZ1wiKSx0W3VdKTt2YXIgemE9XCJTdW5kYXkgTW9uZGF5IFR1ZXNkYXkgV2VkbmVzZGF5IFRodXJzZGF5IEZyaWRheSBTYXR1cmRheVwiLnNwbGl0KFwiIFwiKSxBYT1cIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIik7dD17XCIlYVwiOmQ9PnphW2Qub2FdLnN1YnN0cmluZygwLDMpLFwiJUFcIjpkPT56YVtkLm9hXSxcblwiJWJcIjpkPT5BYVtkLndhXS5zdWJzdHJpbmcoMCwzKSxcIiVCXCI6ZD0+QWFbZC53YV0sXCIlQ1wiOmQ9PmgoKGQudWErMTkwMCkvMTAwfDAsMiksXCIlZFwiOmQ9PmgoZC55YSwyKSxcIiVlXCI6ZD0+ZyhkLnlhLDIsXCIgXCIpLFwiJWdcIjpkPT53KGQpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJUdcIjpkPT53KGQpLFwiJUhcIjpkPT5oKGQudmEsMiksXCIlSVwiOmQ9PntkPWQudmE7MD09ZD9kPTEyOjEyPGQmJihkLT0xMik7cmV0dXJuIGgoZCwyKX0sXCIlalwiOmQ9Pntmb3IodmFyIG49MCxwPTA7cDw9ZC53YS0xO24rPShVKGQudWErMTkwMCk/RmE6R2EpW3ArK10pO3JldHVybiBoKGQueWErbiwzKX0sXCIlbVwiOmQ9PmgoZC53YSsxLDIpLFwiJU1cIjpkPT5oKGQuQ2EsMiksXCIlblwiOigpPT5cIlxcblwiLFwiJXBcIjpkPT4wPD1kLnZhJiYxMj5kLnZhP1wiQU1cIjpcIlBNXCIsXCIlU1wiOmQ9PmgoZC5EYSwyKSxcIiV0XCI6KCk9PlwiXFx0XCIsXCIldVwiOmQ9PmQub2F8fDcsXCIlVVwiOmQ9PmgoTWF0aC5mbG9vcigoZC50YSs3LWQub2EpLzcpLFxuMiksXCIlVlwiOmQ9Pnt2YXIgbj1NYXRoLmZsb29yKChkLnRhKzctKGQub2ErNiklNykvNyk7Mj49KGQub2ErMzcxLWQudGEtMiklNyYmbisrO2lmKG4pNTM9PW4mJihwPShkLm9hKzM3MS1kLnRhKSU3LDQ9PXB8fDM9PXAmJlUoZC51YSl8fChuPTEpKTtlbHNle249NTI7dmFyIHA9KGQub2ErNy1kLnRhLTEpJTc7KDQ9PXB8fDU9PXAmJlUoZC51YSU0MDAtMSkpJiZuKyt9cmV0dXJuIGgobiwyKX0sXCIld1wiOmQ9PmQub2EsXCIlV1wiOmQ9PmgoTWF0aC5mbG9vcigoZC50YSs3LShkLm9hKzYpJTcpLzcpLDIpLFwiJXlcIjpkPT4oZC51YSsxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcIiVZXCI6ZD0+ZC51YSsxOTAwLFwiJXpcIjpkPT57ZD1kLkJhO3ZhciBuPTA8PWQ7ZD1NYXRoLmFicyhkKS82MDtyZXR1cm4obj9cIitcIjpcIi1cIikrU3RyaW5nKFwiMDAwMFwiKyhkLzYwKjEwMCtkJTYwKSkuc2xpY2UoLTQpfSxcIiVaXCI6ZD0+ZC5FYSxcIiUlXCI6KCk9PlwiJVwifTtjPWMucmVwbGFjZSgvJSUvZyxcIlxceDAwXFx4MDBcIik7XG5mb3IodSBpbiB0KWMuaW5jbHVkZXModSkmJihjPWMucmVwbGFjZShuZXcgUmVnRXhwKHUsXCJnXCIpLHRbdV0oZSkpKTtjPWMucmVwbGFjZSgvXFwwXFwwL2csXCIlXCIpO3U9SGEoYyk7aWYodS5sZW5ndGg+YilyZXR1cm4gMDtHLnNldCh1LGE+Pj4wKTtyZXR1cm4gdS5sZW5ndGgtMX1cbnZhciBMYT17YTpmdW5jdGlvbihhLGIsYyl7YT4+Pj0wOyhuZXcgcmEoYSkpLkFhKGI+Pj4wLGM+Pj4wKTtzYT1hO3RhKys7dGhyb3cgc2E7fSxlOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LEg6ZnVuY3Rpb24oKXt9LHg6ZnVuY3Rpb24oKXt9LHo6ZnVuY3Rpb24oKXt9LEo6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRjpmdW5jdGlvbigpe30sQTpmdW5jdGlvbigpe30sRTpmdW5jdGlvbigpe30sZzpmdW5jdGlvbigpe30seTpmdW5jdGlvbigpe30sdjpmdW5jdGlvbigpe30sRzpmdW5jdGlvbigpe30sdzpmdW5jdGlvbigpe30sazooKT0+MSxuOmZ1bmN0aW9uKGEsYixjKXthPWIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWE/KGE+Pj4wKSs0Mjk0OTY3Mjk2KmI6TmFOO2M+Pj49MDthPW5ldyBEYXRlKDFFMyphKTtJW2M+Pj4yPj4+MF09YS5nZXRVVENTZWNvbmRzKCk7SVtjKzQ+Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7SVtjKzg+Pj4yPj4+MF09YS5nZXRVVENIb3VycygpO0lbYysxMj4+PlxuMj4+PjBdPWEuZ2V0VVRDRGF0ZSgpO0lbYysxNj4+PjI+Pj4wXT1hLmdldFVUQ01vbnRoKCk7SVtjKzIwPj4+Mj4+PjBdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO0lbYysyND4+PjI+Pj4wXT1hLmdldFVUQ0RheSgpO0lbYysyOD4+PjI+Pj4wXT0oYS5nZXRUaW1lKCktRGF0ZS5VVEMoYS5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSkvODY0RTV8MH0sbzpmdW5jdGlvbihhLGIsYyl7YT1iKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFhPyhhPj4+MCkrNDI5NDk2NzI5NipiOk5hTjtjPj4+PTA7YT1uZXcgRGF0ZSgxRTMqYSk7SVtjPj4+Mj4+PjBdPWEuZ2V0U2Vjb25kcygpO0lbYys0Pj4+Mj4+PjBdPWEuZ2V0TWludXRlcygpO0lbYys4Pj4+Mj4+PjBdPWEuZ2V0SG91cnMoKTtJW2MrMTI+Pj4yPj4+MF09YS5nZXREYXRlKCk7SVtjKzE2Pj4+Mj4+PjBdPWEuZ2V0TW9udGgoKTtJW2MrMjA+Pj4yPj4+MF09YS5nZXRGdWxsWWVhcigpLTE5MDA7SVtjKzI0Pj4+Mj4+PjBdPWEuZ2V0RGF5KCk7XG5JW2MrMjg+Pj4yPj4+MF09KFUoYS5nZXRGdWxsWWVhcigpKT93YTp4YSlbYS5nZXRNb250aCgpXSthLmdldERhdGUoKS0xfDA7SVtjKzM2Pj4+Mj4+PjBdPS0oNjAqYS5nZXRUaW1lem9uZU9mZnNldCgpKTtiPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZT0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCk7SVtjKzMyPj4+Mj4+PjBdPShiIT1lJiZhLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKGUsYikpfDB9LHA6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPW5ldyBEYXRlKElbYSsyMD4+PjI+Pj4wXSsxOTAwLElbYSsxNj4+PjI+Pj4wXSxJW2ErMTI+Pj4yPj4+MF0sSVthKzg+Pj4yPj4+MF0sSVthKzQ+Pj4yPj4+MF0sSVthPj4+Mj4+PjBdLDApLGM9SVthKzMyPj4+Mj4+PjBdLGU9Yi5nZXRUaW1lem9uZU9mZnNldCgpLGc9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSw2LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLFxuaD0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksbT1NYXRoLm1pbihoLGcpOzA+Yz9JW2ErMzI+Pj4yPj4+MF09TnVtYmVyKGchPWgmJm09PWUpOjA8YyE9KG09PWUpJiYoZz1NYXRoLm1heChoLGcpLGIuc2V0VGltZShiLmdldFRpbWUoKSs2RTQqKCgwPGM/bTpnKS1lKSkpO0lbYSsyND4+PjI+Pj4wXT1iLmdldERheSgpO0lbYSsyOD4+PjI+Pj4wXT0oVShiLmdldEZ1bGxZZWFyKCkpP3dhOnhhKVtiLmdldE1vbnRoKCldK2IuZ2V0RGF0ZSgpLTF8MDtJW2E+Pj4yPj4+MF09Yi5nZXRTZWNvbmRzKCk7SVthKzQ+Pj4yPj4+MF09Yi5nZXRNaW51dGVzKCk7SVthKzg+Pj4yPj4+MF09Yi5nZXRIb3VycygpO0lbYSsxMj4+PjI+Pj4wXT1iLmdldERhdGUoKTtJW2ErMTY+Pj4yPj4+MF09Yi5nZXRNb250aCgpO0lbYSsyMD4+PjI+Pj4wXT1iLmdldFllYXIoKTthPWIuZ2V0VGltZSgpO2lzTmFOKGEpPyhJW0phKCk+Pj4yPj4+MF09NjEsYT0tMSk6XG5hLz0xRTM7cmV0dXJuIEthKChRPWEsMTw9K01hdGguYWJzKFEpPzA8UT8rTWF0aC5mbG9vcihRLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFEtKyh+flE+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApKSxhPj4+MH0sbDpmdW5jdGlvbigpe3JldHVybi01Mn0sbTpmdW5jdGlvbigpe30sdDpmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZSh3KXtyZXR1cm4odz13LnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpP3dbMV06XCJHTVRcIn1jPj4+PTA7dmFyIGc9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGg9bmV3IERhdGUoZywwLDEpLG09bmV3IERhdGUoZyw2LDEpO2c9aC5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciByPW0uZ2V0VGltZXpvbmVPZmZzZXQoKTtKW2E+Pj4wPj4+Mj4+PjBdPTYwKk1hdGgubWF4KGcscik7SVtiPj4+MD4+PjI+Pj4wXT1OdW1iZXIoZyE9cik7YT1lKGgpO2I9ZShtKTthPUNhKGEpO2I9Q2EoYik7cjxnPyhKW2M+Pj4yPj4+MF09XG5hLEpbYys0Pj4+Mj4+PjBdPWIpOihKW2M+Pj4yPj4+MF09YixKW2MrND4+PjI+Pj4wXT1hKX0sZDooKT0+e0UoXCJcIil9LEI6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDtiPj4+PTA7Yz4+Pj0wO1YubGVuZ3RoPTA7Zm9yKHZhciBlO2U9SFtiKys+Pj4wXTspe3ZhciBnPTEwNSE9ZTtnJj0xMTIhPWU7Yys9ZyYmYyU4PzQ6MDtWLnB1c2goMTEyPT1lP0pbYz4+PjI+Pj4wXToxMDU9PWU/SVtjPj4+Mj4+PjBdOmhhW2M+Pj4zPj4+MF0pO2MrPWc/ODo0fXJldHVybiBxYVthXS5hcHBseShudWxsLFYpfSxoOigpPT5EYXRlLm5vdygpLHU6ZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDkwMTc2MH0sYjooKT0+cGVyZm9ybWFuY2Uubm93KCksSTpmdW5jdGlvbihhLGIsYyl7Yj4+Pj0wO3JldHVybiBILmNvcHlXaXRoaW4oYT4+PjA+Pj4wLGI+Pj4wLGIrKGM+Pj4wKT4+PjApfSxzOmZ1bmN0aW9uKGEpe2E+Pj49MDt2YXIgYj1ILmxlbmd0aDtpZig0Mjk0OTAxNzYwPGEpcmV0dXJuITE7Zm9yKHZhciBjPVxuMTs0Pj1jO2MqPTIpe3ZhciBlPWIqKDErLjIvYyk7ZT1NYXRoLm1pbihlLGErMTAwNjYzMjk2KTt2YXIgZz1NYXRoO2U9TWF0aC5tYXgoYSxlKTthOntnPShnLm1pbi5jYWxsKGcsNDI5NDkwMTc2MCxlKyg2NTUzNi1lJTY1NTM2KSU2NTUzNiktRi5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e0YuZ3JvdyhnKTtpYSgpO3ZhciBoPTE7YnJlYWsgYX1jYXRjaChtKXt9aD12b2lkIDB9aWYoaClyZXR1cm4hMH1yZXR1cm4hMX0sQzpmdW5jdGlvbihhLGIpe2E+Pj49MDtiPj4+PTA7dmFyIGM9MDtEYSgpLmZvckVhY2goKGUsZyk9Pnt2YXIgaD1iK2M7Zz1KW2ErNCpnPj4+Mj4+PjBdPWg7Zm9yKGg9MDtoPGUubGVuZ3RoOysraClHW2crKz4+PjA+Pj4wXT1lLmNoYXJDb2RlQXQoaCk7R1tnPj4+MD4+PjBdPTA7Yys9ZS5sZW5ndGgrMX0pO3JldHVybiAwfSxEOmZ1bmN0aW9uKGEsYil7YT4+Pj0wO2I+Pj49MDt2YXIgYz1EYSgpO0pbYT4+PjI+Pj4wXT1jLmxlbmd0aDt2YXIgZT1cbjA7Yy5mb3JFYWNoKGc9PmUrPWcubGVuZ3RoKzEpO0pbYj4+PjI+Pj4wXT1lO3JldHVybiAwfSxmOigpPT41MixqOmZ1bmN0aW9uKCl7cmV0dXJuIDUyfSxxOmZ1bmN0aW9uKCl7cmV0dXJuIDcwfSxpOmZ1bmN0aW9uKGEsYixjLGUpe2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO2Zvcih2YXIgZz0wLGg9MDtoPGM7aCsrKXt2YXIgbT1KW2I+Pj4yPj4+MF0scj1KW2IrND4+PjI+Pj4wXTtiKz04O2Zvcih2YXIgdz0wO3c8cjt3Kyspe3ZhciB0PUhbbSt3Pj4+MF0sdT1FYVthXTswPT09dHx8MTA9PT10PygoMT09PWE/ZWE6RCkodmEodSwwKSksdS5sZW5ndGg9MCk6dS5wdXNoKHQpfWcrPXJ9SltlPj4+Mj4+PjBdPWc7cmV0dXJuIDB9LHI6SWEsYzpmdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gSWEoYT4+PjAsYj4+PjAsYz4+PjAsZT4+PjApfX0sWT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7WT1jLmV4cG9ydHM7WT1NYSgpO0Y9WS5LO2lhKCk7TC51bnNoaWZ0KFkuTCk7TS0tOzA9PU0mJihudWxsIT09XG5OJiYoY2xlYXJJbnRlcnZhbChOKSxOPW51bGwpLE8mJihjPU8sTz1udWxsLGMoKSkpO3JldHVybiBZfXZhciBiPXthOkxhfTtNKys7aWYoZi5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBmLmluc3RhbnRpYXRlV2FzbShiLGEpfWNhdGNoKGMpe0QoYE1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICR7Y31gKSxsKGMpfXBhKGIsZnVuY3Rpb24oYyl7YShjLmluc3RhbmNlKX0pLmNhdGNoKGwpO3JldHVybnt9fSgpO2YuX09ydEluaXQ9KGEsYik9PihmLl9PcnRJbml0PVkuTSkoYSxiKTtmLl9PcnRHZXRMYXN0RXJyb3I9KGEsYik9PihmLl9PcnRHZXRMYXN0RXJyb3I9WS5OKShhLGIpO2YuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPShhLGIsYyxlLGcsaCxtLHIsdyx0KT0+KGYuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPVkuTykoYSxiLGMsZSxnLGgsbSxyLHcsdCk7XG5mLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj0oYSxiKT0+KGYuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPVkuUCkoYSxiKTtmLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9KGEsYixjKT0+KGYuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT1ZLlEpKGEsYixjKTtmLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9KGEsYixjKT0+KGYuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeT1ZLlIpKGEsYixjKTtmLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9YT0+KGYuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1ZLlMpKGEpO2YuX09ydENyZWF0ZVNlc3Npb249KGEsYixjKT0+KGYuX09ydENyZWF0ZVNlc3Npb249WS5UKShhLGIsYyk7Zi5fT3J0UmVsZWFzZVNlc3Npb249YT0+KGYuX09ydFJlbGVhc2VTZXNzaW9uPVkuVSkoYSk7Zi5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD0oYSxiLGMpPT4oZi5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD1ZLlYpKGEsYixjKTtcbmYuX09ydEdldElucHV0TmFtZT0oYSxiKT0+KGYuX09ydEdldElucHV0TmFtZT1ZLlcpKGEsYik7Zi5fT3J0R2V0T3V0cHV0TmFtZT0oYSxiKT0+KGYuX09ydEdldE91dHB1dE5hbWU9WS5YKShhLGIpO2YuX09ydEZyZWU9YT0+KGYuX09ydEZyZWU9WS5ZKShhKTtmLl9PcnRDcmVhdGVUZW5zb3I9KGEsYixjLGUsZyxoKT0+KGYuX09ydENyZWF0ZVRlbnNvcj1ZLlopKGEsYixjLGUsZyxoKTtmLl9PcnRHZXRUZW5zb3JEYXRhPShhLGIsYyxlLGcpPT4oZi5fT3J0R2V0VGVuc29yRGF0YT1ZLl8pKGEsYixjLGUsZyk7Zi5fT3J0UmVsZWFzZVRlbnNvcj1hPT4oZi5fT3J0UmVsZWFzZVRlbnNvcj1ZLiQpKGEpO2YuX09ydENyZWF0ZVJ1bk9wdGlvbnM9KGEsYixjLGUpPT4oZi5fT3J0Q3JlYXRlUnVuT3B0aW9ucz1ZLmFhKShhLGIsYyxlKTtmLl9PcnRBZGRSdW5Db25maWdFbnRyeT0oYSxiLGMpPT4oZi5fT3J0QWRkUnVuQ29uZmlnRW50cnk9WS5iYSkoYSxiLGMpO1xuZi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9YT0+KGYuX09ydFJlbGVhc2VSdW5PcHRpb25zPVkuY2EpKGEpO2YuX09ydENyZWF0ZUJpbmRpbmc9YT0+KGYuX09ydENyZWF0ZUJpbmRpbmc9WS5kYSkoYSk7Zi5fT3J0QmluZElucHV0PShhLGIsYyk9PihmLl9PcnRCaW5kSW5wdXQ9WS5lYSkoYSxiLGMpO2YuX09ydEJpbmRPdXRwdXQ9KGEsYixjLGUpPT4oZi5fT3J0QmluZE91dHB1dD1ZLmZhKShhLGIsYyxlKTtmLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1hPT4oZi5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9WS5nYSkoYSk7Zi5fT3J0UmVsZWFzZUJpbmRpbmc9YT0+KGYuX09ydFJlbGVhc2VCaW5kaW5nPVkuaGEpKGEpO2YuX09ydFJ1bldpdGhCaW5kaW5nPShhLGIsYyxlLGcpPT4oZi5fT3J0UnVuV2l0aEJpbmRpbmc9WS5pYSkoYSxiLGMsZSxnKTtmLl9PcnRSdW49KGEsYixjLGUsZyxoLG0scik9PihmLl9PcnRSdW49WS5qYSkoYSxiLGMsZSxnLGgsbSxyKTtcbmYuX09ydEVuZFByb2ZpbGluZz1hPT4oZi5fT3J0RW5kUHJvZmlsaW5nPVkua2EpKGEpO3ZhciBKYT0oKT0+KEphPVkubGEpKCksQmE9Zi5fbWFsbG9jPWE9PihCYT1mLl9tYWxsb2M9WS5tYSkoYSk7Zi5fZnJlZT1hPT4oZi5fZnJlZT1ZLm5hKShhKTt2YXIgS2E9YT0+KEthPVkucGEpKGEpLE5hPSgpPT4oTmE9WS5xYSkoKSxPYT1hPT4oT2E9WS5yYSkoYSksUGE9YT0+KFBhPVkuc2EpKGEpO2Z1bmN0aW9uIE1hKCl7dmFyIGE9WTthPU9iamVjdC5hc3NpZ24oe30sYSk7dmFyIGI9ZT0+KCk9PmUoKT4+PjAsYz1lPT5nPT5lKGcpPj4+MDthLmxhPWIoYS5sYSk7YS5tYT1jKGEubWEpO2EucWE9YihhLnFhKTthLnNhPWMoYS5zYSk7cmV0dXJuIGF9Zi5zdGFja0FsbG9jPVBhO2Yuc3RhY2tTYXZlPU5hO2Yuc3RhY2tSZXN0b3JlPU9hO2YuVVRGOFRvU3RyaW5nPVI7Zi5zdHJpbmdUb1VURjg9KGEsYixjKT0+VChhLEgsYixjKTtmLmxlbmd0aEJ5dGVzVVRGOD1TO3ZhciBaO1xuTz1mdW5jdGlvbiBRYSgpe1p8fFJhKCk7Wnx8KE89UWEpfTtmdW5jdGlvbiBSYSgpe2lmKCEoMDxNKSl7aWYoZi5wcmVSdW4pZm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIGYucHJlUnVuJiYoZi5wcmVSdW49W2YucHJlUnVuXSk7Zi5wcmVSdW4ubGVuZ3RoOyl7dmFyIGE9Zi5wcmVSdW4uc2hpZnQoKTtLLnVuc2hpZnQoYSl9Zm9yKDswPEsubGVuZ3RoOylLLnNoaWZ0KCkoZik7aWYoISgwPE18fFp8fChaPSEwLGYuY2FsbGVkUnVuPSEwLGZhKSkpe2Zvcig7MDxMLmxlbmd0aDspTC5zaGlmdCgpKGYpO2ZvcihrKGYpOzA8amEubGVuZ3RoOylqYS5zaGlmdCgpKGYpfX19UmEoKTtcblxuXG4gIHJldHVybiBtb2R1bGVBcmcucmVhZHlcbn1cbik7XG59KSgpO1xuO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxuICBkZWZpbmUoW10sICgpID0+IG9ydFdhc20pO1xuIiwgIiIsICIiLCAiZXhwb3J0IGNvbnN0IGNwdXMgPSB1bmRlZmluZWQ7IiwgIlxudmFyIG9ydFdhc21UaHJlYWRlZCA9ICgoKSA9PiB7XG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIF9zY3JpcHREaXIgPSBfc2NyaXB0RGlyIHx8IF9fZmlsZW5hbWU7XG4gIHJldHVybiAoXG5mdW5jdGlvbihtb2R1bGVBcmcgPSB7fSkge1xuXG5mdW5jdGlvbiBhYSgpe2UuYnVmZmVyIT1sLmJ1ZmZlciYmbSgpO3JldHVybiBsfWZ1bmN0aW9uIG4oKXtlLmJ1ZmZlciE9bC5idWZmZXImJm0oKTtyZXR1cm4gYmF9ZnVuY3Rpb24gcCgpe2UuYnVmZmVyIT1sLmJ1ZmZlciYmbSgpO3JldHVybiBjYX1mdW5jdGlvbiByKCl7ZS5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGRhfWZ1bmN0aW9uIGVhKCl7ZS5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGZhfXZhciB2PW1vZHVsZUFyZyxoYSx4O3YucmVhZHk9bmV3IFByb21pc2UoKGEsYik9PntoYT1hO3g9Yn0pO1xudmFyIGlhPU9iamVjdC5hc3NpZ24oe30sdiksamE9XCIuL3RoaXMucHJvZ3JhbVwiLHo9KGEsYik9Pnt0aHJvdyBiO30sa2E9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyxBPVwiZnVuY3Rpb25cIj09dHlwZW9mIGltcG9ydFNjcmlwdHMsQj1cIm9iamVjdFwiPT10eXBlb2YgcHJvY2VzcyYmXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMmJlwic3RyaW5nXCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUsRD12LkVOVklST05NRU5UX0lTX1BUSFJFQUR8fCExLEU9XCJcIjtmdW5jdGlvbiBsYShhKXtyZXR1cm4gdi5sb2NhdGVGaWxlP3YubG9jYXRlRmlsZShhLEUpOkUrYX12YXIgbWEsRyxIO1xuaWYoQil7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKSxuYT1yZXF1aXJlKFwicGF0aFwiKTtFPUE/bmEuZGlybmFtZShFKStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7bWE9KGIsYyk9PntiPUkoYik/bmV3IFVSTChiKTpuYS5ub3JtYWxpemUoYik7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhiLGM/dm9pZCAwOlwidXRmOFwiKX07SD1iPT57Yj1tYShiLCEwKTtiLmJ1ZmZlcnx8KGI9bmV3IFVpbnQ4QXJyYXkoYikpO3JldHVybiBifTtHPShiLGMsZCxnPSEwKT0+e2I9SShiKT9uZXcgVVJMKGIpOm5hLm5vcm1hbGl6ZShiKTtmcy5yZWFkRmlsZShiLGc/dm9pZCAwOlwidXRmOFwiLChoLGspPT57aD9kKGgpOmMoZz9rLmJ1ZmZlcjprKX0pfTshdi50aGlzUHJvZ3JhbSYmMTxwcm9jZXNzLmFyZ3YubGVuZ3RoJiYoamE9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpO3Byb2Nlc3MuYXJndi5zbGljZSgyKTt6PShiLGMpPT57cHJvY2Vzcy5leGl0Q29kZT1iO3Rocm93IGM7fTt2Lmluc3BlY3Q9KCk9PlwiW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF1cIjtcbmxldCBhO3RyeXthPXJlcXVpcmUoXCJ3b3JrZXJfdGhyZWFkc1wiKX1jYXRjaChiKXt0aHJvdyBjb25zb2xlLmVycm9yKCdUaGUgXCJ3b3JrZXJfdGhyZWFkc1wiIG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgbm9kZS5qcyBidWlsZCAtIHBlcmhhcHMgYSBuZXdlciB2ZXJzaW9uIGlzIG5lZWRlZD8nKSxiO31nbG9iYWwuV29ya2VyPWEuV29ya2VyfWVsc2UgaWYoa2F8fEEpQT9FPXNlbGYubG9jYXRpb24uaHJlZjpcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihFPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwodHlwZW9mIF9zY3JpcHREaXIgIT09IFwidW5kZWZpbmVkXCIgJiYgX3NjcmlwdERpcikmJihFPV9zY3JpcHREaXIpLDAhPT1FLmluZGV4T2YoXCJibG9iOlwiKT9FPUUuc3Vic3RyKDAsRS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKTpFPVwiXCIsQnx8KG1hPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5zZW5kKG51bGwpO1xucmV0dXJuIGIucmVzcG9uc2VUZXh0fSxBJiYoSD1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2IucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtiLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIucmVzcG9uc2UpfSksRz0oYSxiLGMpPT57dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEsITApO2QucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtkLm9ubG9hZD0oKT0+ezIwMD09ZC5zdGF0dXN8fDA9PWQuc3RhdHVzJiZkLnJlc3BvbnNlP2IoZC5yZXNwb25zZSk6YygpfTtkLm9uZXJyb3I9YztkLnNlbmQobnVsbCl9KTtCJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJihnbG9iYWwucGVyZm9ybWFuY2U9cmVxdWlyZShcInBlcmZfaG9va3NcIikucGVyZm9ybWFuY2UpO3ZhciBvYT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHBhPWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbkImJihvYT0oLi4uYSk9PmZzLndyaXRlU3luYygxLGEuam9pbihcIiBcIikrXCJcXG5cIikscGE9KC4uLmEpPT5mcy53cml0ZVN5bmMoMixhLmpvaW4oXCIgXCIpK1wiXFxuXCIpKTt2YXIgcWE9b2EsSj1wYTtPYmplY3QuYXNzaWduKHYsaWEpO2lhPW51bGw7XCJvYmplY3RcIiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZyYShcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIik7dmFyIGUsc2EsSz0hMSxMLGwsYmEsY2EsZGEsZmE7ZnVuY3Rpb24gbSgpe3ZhciBhPWUuYnVmZmVyO3YuSEVBUDg9bD1uZXcgSW50OEFycmF5KGEpO3YuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGEpO3YuSEVBUFU4PWJhPW5ldyBVaW50OEFycmF5KGEpO3YuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYSk7di5IRUFQMzI9Y2E9bmV3IEludDMyQXJyYXkoYSk7di5IRUFQVTMyPWRhPW5ldyBVaW50MzJBcnJheShhKTt2LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShhKTt2LkhFQVBGNjQ9ZmE9bmV3IEZsb2F0NjRBcnJheShhKX1cbnZhciB0YT0xNjc3NzIxNjtcbmlmKEQpZT12Lndhc21NZW1vcnk7ZWxzZSBpZih2Lndhc21NZW1vcnkpZT12Lndhc21NZW1vcnk7ZWxzZSBpZihlPW5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6dGEvNjU1MzYsbWF4aW11bTo2NTUzNixzaGFyZWQ6ITB9KSwhKGUuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpKXRocm93IEooXCJyZXF1ZXN0ZWQgYSBzaGFyZWQgV2ViQXNzZW1ibHkuTWVtb3J5IGJ1dCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG5vdCBhIFNoYXJlZEFycmF5QnVmZmVyLCBpbmRpY2F0aW5nIHRoYXQgd2hpbGUgdGhlIGJyb3dzZXIgaGFzIFNoYXJlZEFycmF5QnVmZmVyIGl0IGRvZXMgbm90IGhhdmUgV2ViQXNzZW1ibHkgdGhyZWFkcyBzdXBwb3J0IC0geW91IG1heSBuZWVkIHRvIHNldCBhIGZsYWdcIiksQiYmSihcIihvbiBub2RlIHlvdSBtYXkgbmVlZDogLS1leHBlcmltZW50YWwtd2FzbS10aHJlYWRzIC0tZXhwZXJpbWVudGFsLXdhc20tYnVsay1tZW1vcnkgYW5kL29yIHJlY2VudCB2ZXJzaW9uKVwiKSxFcnJvcihcImJhZCBtZW1vcnlcIik7XG5tKCk7dGE9ZS5idWZmZXIuYnl0ZUxlbmd0aDt2YXIgdWE9W10sdmE9W10sd2E9W10sTT0wLHhhPW51bGwsTj1udWxsO2Z1bmN0aW9uIHlhKCl7TS0tO2lmKDA9PU0mJihudWxsIT09eGEmJihjbGVhckludGVydmFsKHhhKSx4YT1udWxsKSxOKSl7dmFyIGE9TjtOPW51bGw7YSgpfX1mdW5jdGlvbiByYShhKXthPVwiQWJvcnRlZChcIithK1wiKVwiO0ooYSk7Sz0hMDtMPTE7YT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGErXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpO3goYSk7dGhyb3cgYTt9dmFyIHphPWE9PmEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIiksST1hPT5hLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpLE87Tz1cIm9ydC13YXNtLXRocmVhZGVkLndhc21cIjt6YShPKXx8KE89bGEoTykpO1xuZnVuY3Rpb24gQWEoYSl7aWYoSClyZXR1cm4gSChhKTt0aHJvd1wiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjt9ZnVuY3Rpb24gQmEoYSl7aWYoa2F8fEEpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGZldGNoJiYhSShhKSlyZXR1cm4gZmV0Y2goYSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihiPT57aWYoIWIub2spdGhyb3dcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiK2ErXCInXCI7cmV0dXJuIGIuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKCgpPT5BYShhKSk7aWYoRylyZXR1cm4gbmV3IFByb21pc2UoKGIsYyk9PntHKGEsZD0+YihuZXcgVWludDhBcnJheShkKSksYyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QWEoYSkpfVxuZnVuY3Rpb24gQ2EoYSxiLGMpe3JldHVybiBCYShhKS50aGVuKGQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGQsYikpLnRoZW4oZD0+ZCkudGhlbihjLGQ9PntKKGBmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAke2R9YCk7cmEoZCl9KX1mdW5jdGlvbiBEYShhLGIpe3ZhciBjPU87cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fHphKGMpfHxJKGMpfHxCfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBmZXRjaD9DYShjLGEsYik6ZmV0Y2goYyx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihkPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhkLGEpLnRoZW4oYixmdW5jdGlvbihnKXtKKGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtnfWApO0ooXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtyZXR1cm4gQ2EoYyxhLGIpfSkpfVxudmFyIFAsRWE9ezkyMTI3NjooYSxiLGMsZCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygdnx8IXYuY2IpcmV0dXJuIDE7YT1RKGE+Pj4wKTthLnN0YXJ0c1dpdGgoXCIuL1wiKSYmKGE9YS5zdWJzdHJpbmcoMikpO2E9di5jYi5nZXQoYSk7aWYoIWEpcmV0dXJuIDI7Yj4+Pj0wO2M+Pj49MDtkPj4+PTA7aWYoYitjPmEuYnl0ZUxlbmd0aClyZXR1cm4gMzt0cnl7cmV0dXJuIG4oKS5zZXQoYS5zdWJhcnJheShiLGIrYyksZD4+PjApLDB9Y2F0Y2h7cmV0dXJuIDR9fX07ZnVuY3Rpb24gUihhKXt0aGlzLm5hbWU9XCJFeGl0U3RhdHVzXCI7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7YX0pYDt0aGlzLnN0YXR1cz1hfVxudmFyIEZhPWE9PnthLnRlcm1pbmF0ZSgpO2Eub25tZXNzYWdlPSgpPT57fX0sSGE9YT0+ezA9PVMuUGEubGVuZ3RoJiYoR2EoKSxTLllhKFMuUGFbMF0pKTt2YXIgYj1TLlBhLnBvcCgpO2lmKCFiKXJldHVybiA2O1MuUWEucHVzaChiKTtTLk1hW2EuT2FdPWI7Yi5PYT1hLk9hO3ZhciBjPXtjbWQ6XCJydW5cIixzdGFydF9yb3V0aW5lOmEua2IsYXJnOmEuaGIscHRocmVhZF9wdHI6YS5PYX07QiYmYi51bnJlZigpO2IucG9zdE1lc3NhZ2UoYyxhLnFiKTtyZXR1cm4gMH0sVD0wLElhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpOnZvaWQgMCxKYT0oYSxiLGMpPT57Yj4+Pj0wO3ZhciBkPWIrYztmb3IoYz1iO2FbY10mJiEoYz49ZCk7KSsrYztpZigxNjxjLWImJmEuYnVmZmVyJiZJYSlyZXR1cm4gSWEuZGVjb2RlKGEuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/YS5zbGljZShiLGMpOmEuc3ViYXJyYXkoYixjKSk7XG5mb3IoZD1cIlwiO2I8Yzspe3ZhciBnPWFbYisrXTtpZihnJjEyOCl7dmFyIGg9YVtiKytdJjYzO2lmKDE5Mj09KGcmMjI0KSlkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChnJjMxKTw8NnxoKTtlbHNle3ZhciBrPWFbYisrXSY2MztnPTIyND09KGcmMjQwKT8oZyYxNSk8PDEyfGg8PDZ8azooZyY3KTw8MTh8aDw8MTJ8azw8NnxhW2IrK10mNjM7NjU1MzY+Zz9kKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGcpOihnLT02NTUzNixkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGc+PjEwLDU2MzIwfGcmMTAyMykpfX1lbHNlIGQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZyl9cmV0dXJuIGR9LFE9KGEsYik9PihhPj4+PTApP0phKG4oKSxhLGIpOlwiXCIsTGE9YT0+e3ZhciBiPUthKCk7YT1hKCk7VShiKTtyZXR1cm4gYX07XG5mdW5jdGlvbiBWKGEsYil7dmFyIGM9YXJndW1lbnRzLmxlbmd0aC0yLGQ9YXJndW1lbnRzO3JldHVybiBMYSgoKT0+e2Zvcih2YXIgZz1NYSg4KmMpLGg9Zz4+PjMsaz0wO2s8YztrKyspe3ZhciB0PWRbMitrXTtlYSgpW2graz4+PjBdPXR9cmV0dXJuIE5hKGEsYyxnLGIpfSl9ZnVuY3Rpb24gT2EoYSl7aWYoRClyZXR1cm4gVigwLDEsYSk7TD1hOzA8VHx8KFMubGIoKSx2Lm9uRXhpdD8uKGEpLEs9ITApO3ooYSxuZXcgUihhKSl9dmFyIFFhPWE9PntMPWE7aWYoRCl0aHJvdyBQYShhKSxcInVud2luZFwiO09hKGEpfTtmdW5jdGlvbiBSYSgpe2Zvcih2YXIgYT12Lm51bVRocmVhZHM7YS0tOylHYSgpO3VhLnVuc2hpZnQoKCk9PntNKys7U2EoKCk9PnlhKCkpfSl9ZnVuY3Rpb24gR2EoKXt2YXIgYT1sYShcIm9ydC13YXNtLXRocmVhZGVkLndvcmtlci5qc1wiKTthPW5ldyBXb3JrZXIoYSk7Uy5QYS5wdXNoKGEpfVxuZnVuY3Rpb24gU2EoYSl7RD9hKCk6UHJvbWlzZS5hbGwoUy5QYS5tYXAoUy5ZYSkpLnRoZW4oYSl9XG52YXIgUz17UGE6W10sUWE6W10sYmI6W10sTWE6e30sV2EoKXtEPyhTLnJlY2VpdmVPYmplY3RUcmFuc2Zlcj1TLmpiLFMudGhyZWFkSW5pdFRMUz1TLmFiLFMuc2V0RXhpdFN0YXR1cz1TLiRhKTpSYSgpfSwkYTphPT5MPWEsdGI6W1wiJHRlcm1pbmF0ZVdvcmtlclwiXSxsYjooKT0+e2Zvcih2YXIgYSBvZiBTLlFhKUZhKGEpO2ZvcihhIG9mIFMuUGEpRmEoYSk7Uy5QYT1bXTtTLlFhPVtdO1MuTWE9W119LFphOmE9Pnt2YXIgYj1hLk9hO2RlbGV0ZSBTLk1hW2JdO1MuUGEucHVzaChhKTtTLlFhLnNwbGljZShTLlFhLmluZGV4T2YoYSksMSk7YS5PYT0wO1RhKGIpfSxqYigpe30sYWIoKXtTLmJiLmZvckVhY2goYT0+YSgpKX0sWWE6YT0+bmV3IFByb21pc2UoYj0+e2Eub25tZXNzYWdlPWg9PntoPWguZGF0YTt2YXIgaz1oLmNtZDtpZihoLnRhcmdldFRocmVhZCYmaC50YXJnZXRUaHJlYWQhPVcoKSl7dmFyIHQ9Uy5NYVtoLnRhcmdldFRocmVhZF07dD90LnBvc3RNZXNzYWdlKGgsaC50cmFuc2Zlckxpc3QpOlxuSihgSW50ZXJuYWwgZXJyb3IhIFdvcmtlciBzZW50IGEgbWVzc2FnZSBcIiR7a31cIiB0byB0YXJnZXQgcHRocmVhZCAke2gudGFyZ2V0VGhyZWFkfSwgYnV0IHRoYXQgdGhyZWFkIG5vIGxvbmdlciBleGlzdHMhYCl9ZWxzZSBpZihcImNoZWNrTWFpbGJveFwiPT09aylYKCk7ZWxzZSBpZihcInNwYXduVGhyZWFkXCI9PT1rKUhhKGgpO2Vsc2UgaWYoXCJjbGVhbnVwVGhyZWFkXCI9PT1rKVMuWmEoUy5NYVtoLnRocmVhZF0pO2Vsc2UgaWYoXCJraWxsVGhyZWFkXCI9PT1rKWg9aC50aHJlYWQsaz1TLk1hW2hdLGRlbGV0ZSBTLk1hW2hdLEZhKGspLFRhKGgpLFMuUWEuc3BsaWNlKFMuUWEuaW5kZXhPZihrKSwxKSxrLk9hPTA7ZWxzZSBpZihcImNhbmNlbFRocmVhZFwiPT09aylTLk1hW2gudGhyZWFkXS5wb3N0TWVzc2FnZSh7Y21kOlwiY2FuY2VsXCJ9KTtlbHNlIGlmKFwibG9hZGVkXCI9PT1rKWEubG9hZGVkPSEwLEImJiFhLk9hJiZhLnVucmVmKCksYihhKTtlbHNlIGlmKFwiYWxlcnRcIj09PWspYWxlcnQoYFRocmVhZCAke2gudGhyZWFkSWR9OiAke2gudGV4dH1gKTtcbmVsc2UgaWYoXCJzZXRpbW1lZGlhdGVcIj09PWgudGFyZ2V0KWEucG9zdE1lc3NhZ2UoaCk7ZWxzZSBpZihcImNhbGxIYW5kbGVyXCI9PT1rKXZbaC5oYW5kbGVyXSguLi5oLmFyZ3MpO2Vsc2UgayYmSihgd29ya2VyIHNlbnQgYW4gdW5rbm93biBjb21tYW5kICR7a31gKX07YS5vbmVycm9yPWg9PntKKGAke1wid29ya2VyIHNlbnQgYW4gZXJyb3IhXCJ9ICR7aC5maWxlbmFtZX06JHtoLmxpbmVub306ICR7aC5tZXNzYWdlfWApO3Rocm93IGg7fTtCJiYoYS5vbihcIm1lc3NhZ2VcIixoPT5hLm9ubWVzc2FnZSh7ZGF0YTpofSkpLGEub24oXCJlcnJvclwiLGg9PmEub25lcnJvcihoKSkpO3ZhciBjPVtdLGQ9W1wib25FeGl0XCJdLGc7Zm9yKGcgb2YgZCl2Lmhhc093blByb3BlcnR5KGcpJiZjLnB1c2goZyk7YS5wb3N0TWVzc2FnZSh7Y21kOlwibG9hZFwiLGhhbmRsZXJzOmMsdXJsT3JCbG9iOnYubWFpblNjcmlwdFVybE9yQmxvYnx8X3NjcmlwdERpcix3YXNtTWVtb3J5OmUsd2FzbU1vZHVsZTpzYX0pfSl9O1xudi5QVGhyZWFkPVM7dmFyIFVhPWE9Pntmb3IoOzA8YS5sZW5ndGg7KWEuc2hpZnQoKSh2KX07di5lc3RhYmxpc2hTdGFja1NwYWNlPSgpPT57dmFyIGE9VygpLGI9cigpW2ErNTI+Pj4yPj4+MF07YT1yKClbYSs1Nj4+PjI+Pj4wXTtWYShiLGItYSk7VShiKX07ZnVuY3Rpb24gUGEoYSl7aWYoRClyZXR1cm4gVigxLDAsYSk7UWEoYSl9dmFyIFdhPVtdLFhhO3YuaW52b2tlRW50cnlQb2ludD0oYSxiKT0+e3ZhciBjPVdhW2FdO2N8fChhPj1XYS5sZW5ndGgmJihXYS5sZW5ndGg9YSsxKSxXYVthXT1jPVhhLmdldChhKSk7YT1jKGIpOzA8VD9TLiRhKGEpOllhKGEpfTtcbmZ1bmN0aW9uIFphKGEpe3RoaXMuVmE9YS0yNDt0aGlzLmdiPWZ1bmN0aW9uKGIpe3IoKVt0aGlzLlZhKzQ+Pj4yPj4+MF09Yn07dGhpcy5mYj1mdW5jdGlvbihiKXtyKClbdGhpcy5WYSs4Pj4+Mj4+PjBdPWJ9O3RoaXMuV2E9ZnVuY3Rpb24oYixjKXt0aGlzLmViKCk7dGhpcy5nYihiKTt0aGlzLmZiKGMpfTt0aGlzLmViPWZ1bmN0aW9uKCl7cigpW3RoaXMuVmErMTY+Pj4yPj4+MF09MH19dmFyICRhPTAsYWI9MDtmdW5jdGlvbiBiYihhLGIsYyxkKXtyZXR1cm4gRD9WKDIsMSxhLGIsYyxkKTpjYihhLGIsYyxkKX1cbmZ1bmN0aW9uIGNiKGEsYixjLGQpe2E+Pj49MDtiPj4+PTA7Yz4+Pj0wO2Q+Pj49MDtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIpcmV0dXJuIEooXCJDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgU2hhcmVkQXJyYXlCdWZmZXIsIHB0aHJlYWRzIGFyZSBub3QgYXZhaWxhYmxlIVwiKSw2O3ZhciBnPVtdO2lmKEQmJjA9PT1nLmxlbmd0aClyZXR1cm4gYmIoYSxiLGMsZCk7YT17a2I6YyxPYTphLGhiOmQscWI6Z307cmV0dXJuIEQ/KGEuc2I9XCJzcGF3blRocmVhZFwiLHBvc3RNZXNzYWdlKGEsZyksMCk6SGEoYSl9ZnVuY3Rpb24gZGIoYSxiLGMpe3JldHVybiBEP1YoMywxLGEsYixjKTowfWZ1bmN0aW9uIGViKGEsYil7aWYoRClyZXR1cm4gVig0LDEsYSxiKX1cbnZhciBmYj1hPT57Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7MTI3Pj1kP2IrKzoyMDQ3Pj1kP2IrPTI6NTUyOTY8PWQmJjU3MzQzPj1kPyhiKz00LCsrYyk6Yis9M31yZXR1cm4gYn0sZ2I9KGEsYixjLGQpPT57Yz4+Pj0wO2lmKCEoMDxkKSlyZXR1cm4gMDt2YXIgZz1jO2Q9YytkLTE7Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDsrK2gpe3ZhciBrPWEuY2hhckNvZGVBdChoKTtpZig1NTI5Njw9ayYmNTczNDM+PWspe3ZhciB0PWEuY2hhckNvZGVBdCgrK2gpO2s9NjU1MzYrKChrJjEwMjMpPDwxMCl8dCYxMDIzfWlmKDEyNz49ayl7aWYoYz49ZClicmVhaztiW2MrKz4+PjBdPWt9ZWxzZXtpZigyMDQ3Pj1rKXtpZihjKzE+PWQpYnJlYWs7YltjKys+Pj4wXT0xOTJ8az4+Nn1lbHNle2lmKDY1NTM1Pj1rKXtpZihjKzI+PWQpYnJlYWs7YltjKys+Pj4wXT0yMjR8az4+MTJ9ZWxzZXtpZihjKzM+PWQpYnJlYWs7YltjKys+Pj4wXT0yNDB8az4+XG4xODtiW2MrKz4+PjBdPTEyOHxrPj4xMiY2M31iW2MrKz4+PjBdPTEyOHxrPj42JjYzfWJbYysrPj4+MF09MTI4fGsmNjN9fWJbYz4+PjBdPTA7cmV0dXJuIGMtZ30saGI9KGEsYixjKT0+Z2IoYSxuKCksYixjKTtmdW5jdGlvbiBpYihhLGIpe2lmKEQpcmV0dXJuIFYoNSwxLGEsYil9ZnVuY3Rpb24gamIoYSxiLGMpe2lmKEQpcmV0dXJuIFYoNiwxLGEsYixjKX1mdW5jdGlvbiBrYihhLGIsYyl7cmV0dXJuIEQ/Vig3LDEsYSxiLGMpOjB9ZnVuY3Rpb24gbGIoYSxiKXtpZihEKXJldHVybiBWKDgsMSxhLGIpfWZ1bmN0aW9uIG1iKGEsYixjKXtpZihEKXJldHVybiBWKDksMSxhLGIsYyl9ZnVuY3Rpb24gbmIoYSxiLGMsZCl7aWYoRClyZXR1cm4gVigxMCwxLGEsYixjLGQpfWZ1bmN0aW9uIG9iKGEsYixjLGQpe2lmKEQpcmV0dXJuIFYoMTEsMSxhLGIsYyxkKX1mdW5jdGlvbiBwYihhLGIsYyxkKXtpZihEKXJldHVybiBWKDEyLDEsYSxiLGMsZCl9XG5mdW5jdGlvbiBxYihhKXtpZihEKXJldHVybiBWKDEzLDEsYSl9ZnVuY3Rpb24gcmIoYSxiKXtpZihEKXJldHVybiBWKDE0LDEsYSxiKX1mdW5jdGlvbiBzYihhLGIsYyl7aWYoRClyZXR1cm4gVigxNSwxLGEsYixjKX1mdW5jdGlvbiB0YihhKXthPj4+PTA7XCJmdW5jdGlvblwiPT09dHlwZW9mIEF0b21pY3MucmImJihBdG9taWNzLnJiKHAoKSxhPj4+MixhKS52YWx1ZS50aGVuKFgpLGErPTEyOCxBdG9taWNzLnN0b3JlKHAoKSxhPj4+MiwxKSl9di5fX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXQ9dGI7dmFyIFg9KCk9Pnt2YXIgYT1XKCk7aWYoYSYmKHRiKGEpLGE9dWIsIUspKXRyeXtpZihhKCksISgwPFQpKXRyeXtEP1lhKEwpOlFhKEwpfWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBSfHxcInVud2luZFwiPT1ifHx6KDEsYil9fWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBSfHxcInVud2luZFwiPT1ifHx6KDEsYil9fTt2LmNoZWNrTWFpbGJveD1YO1xudmFyIHZiPVtdLFk9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSx3Yj1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx4Yj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XTtmdW5jdGlvbiB5YihhLGIsYyxkLGcsaCxrLHQpe3JldHVybiBEP1YoMTYsMSxhLGIsYyxkLGcsaCxrLHQpOi01Mn1mdW5jdGlvbiB6YihhLGIsYyxkLGcsaCxrKXtpZihEKXJldHVybiBWKDE3LDEsYSxiLGMsZCxnLGgsayl9XG52YXIgQmI9YT0+e3ZhciBiPWZiKGEpKzEsYz1BYihiKTtjJiZoYihhLGMsYik7cmV0dXJuIGN9LENiPVtdLERiPXt9LEZiPSgpPT57aWYoIUViKXt2YXIgYT17VVNFUjpcIndlYl91c2VyXCIsTE9HTkFNRTpcIndlYl91c2VyXCIsUEFUSDpcIi9cIixQV0Q6XCIvXCIsSE9NRTpcIi9ob21lL3dlYl91c2VyXCIsTEFORzooXCJvYmplY3RcIj09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8XCJDXCIpLnJlcGxhY2UoXCItXCIsXCJfXCIpK1wiLlVURi04XCIsXzpqYXx8XCIuL3RoaXMucHJvZ3JhbVwifSxiO2ZvcihiIGluIERiKXZvaWQgMD09PURiW2JdP2RlbGV0ZSBhW2JdOmFbYl09RGJbYl07dmFyIGM9W107Zm9yKGIgaW4gYSljLnB1c2goYCR7Yn09JHthW2JdfWApO0ViPWN9cmV0dXJuIEVifSxFYjtcbmZ1bmN0aW9uIEdiKGEsYil7aWYoRClyZXR1cm4gVigxOCwxLGEsYik7YT4+Pj0wO2I+Pj49MDt2YXIgYz0wO0ZiKCkuZm9yRWFjaCgoZCxnKT0+e3ZhciBoPWIrYztnPXIoKVthKzQqZz4+PjI+Pj4wXT1oO2ZvcihoPTA7aDxkLmxlbmd0aDsrK2gpYWEoKVtnKys+Pj4wPj4+MF09ZC5jaGFyQ29kZUF0KGgpO2FhKClbZz4+PjA+Pj4wXT0wO2MrPWQubGVuZ3RoKzF9KTtyZXR1cm4gMH1mdW5jdGlvbiBLYihhLGIpe2lmKEQpcmV0dXJuIFYoMTksMSxhLGIpO2E+Pj49MDtiPj4+PTA7dmFyIGM9RmIoKTtyKClbYT4+PjI+Pj4wXT1jLmxlbmd0aDt2YXIgZD0wO2MuZm9yRWFjaChnPT5kKz1nLmxlbmd0aCsxKTtyKClbYj4+PjI+Pj4wXT1kO3JldHVybiAwfWZ1bmN0aW9uIExiKGEpe3JldHVybiBEP1YoMjAsMSxhKTo1Mn1mdW5jdGlvbiBNYihhLGIsYyxkKXtyZXR1cm4gRD9WKDIxLDEsYSxiLGMsZCk6NTJ9XG5mdW5jdGlvbiBOYihhLGIsYyxkLGcpe3JldHVybiBEP1YoMjIsMSxhLGIsYyxkLGcpOjcwfXZhciBPYj1bbnVsbCxbXSxbXV07ZnVuY3Rpb24gUGIoYSxiLGMsZCl7aWYoRClyZXR1cm4gVigyMywxLGEsYixjLGQpO2I+Pj49MDtjPj4+PTA7ZD4+Pj0wO2Zvcih2YXIgZz0wLGg9MDtoPGM7aCsrKXt2YXIgaz1yKClbYj4+PjI+Pj4wXSx0PXIoKVtiKzQ+Pj4yPj4+MF07Yis9ODtmb3IodmFyIEM9MDtDPHQ7QysrKXt2YXIgdz1uKClbaytDPj4+MF0seT1PYlthXTswPT09d3x8MTA9PT13PygoMT09PWE/cWE6SikoSmEoeSwwKSkseS5sZW5ndGg9MCk6eS5wdXNoKHcpfWcrPXR9cigpW2Q+Pj4yPj4+MF09ZztyZXR1cm4gMH12YXIgUWI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxSYj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO1xuZnVuY3Rpb24gU2IoYSl7dmFyIGI9QXJyYXkoZmIoYSkrMSk7Z2IoYSxiLDAsYi5sZW5ndGgpO3JldHVybiBifXZhciBUYj0oYSxiKT0+e2FhKCkuc2V0KGEsYj4+PjApfTtcbmZ1bmN0aW9uIFViKGEsYixjLGQpe2Z1bmN0aW9uIGcoZixxLHUpe2ZvcihmPVwibnVtYmVyXCI9PXR5cGVvZiBmP2YudG9TdHJpbmcoKTpmfHxcIlwiO2YubGVuZ3RoPHE7KWY9dVswXStmO3JldHVybiBmfWZ1bmN0aW9uIGgoZixxKXtyZXR1cm4gZyhmLHEsXCIwXCIpfWZ1bmN0aW9uIGsoZixxKXtmdW5jdGlvbiB1KEhiKXtyZXR1cm4gMD5IYj8tMTowPEhiPzE6MH12YXIgRjswPT09KEY9dShmLmdldEZ1bGxZZWFyKCktcS5nZXRGdWxsWWVhcigpKSkmJjA9PT0oRj11KGYuZ2V0TW9udGgoKS1xLmdldE1vbnRoKCkpKSYmKEY9dShmLmdldERhdGUoKS1xLmdldERhdGUoKSkpO3JldHVybiBGfWZ1bmN0aW9uIHQoZil7c3dpdGNoKGYuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZjtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLFxuMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBDKGYpe3ZhciBxPWYuUmE7Zm9yKGY9bmV3IERhdGUoKG5ldyBEYXRlKGYuU2ErMTkwMCwwLDEpKS5nZXRUaW1lKCkpOzA8cTspe3ZhciB1PWYuZ2V0TW9udGgoKSxGPShZKGYuZ2V0RnVsbFllYXIoKSk/UWI6UmIpW3VdO2lmKHE+Ri1mLmdldERhdGUoKSlxLT1GLWYuZ2V0RGF0ZSgpKzEsZi5zZXREYXRlKDEpLDExPnU/Zi5zZXRNb250aCh1KzEpOihmLnNldE1vbnRoKDApLGYuc2V0RnVsbFllYXIoZi5nZXRGdWxsWWVhcigpKzEpKTtlbHNle2Yuc2V0RGF0ZShmLmdldERhdGUoKStxKTticmVha319dT1uZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCkrMSwwLDQpO3E9dChuZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCksXG4wLDQpKTt1PXQodSk7cmV0dXJuIDA+PWsocSxmKT8wPj1rKHUsZik/Zi5nZXRGdWxsWWVhcigpKzE6Zi5nZXRGdWxsWWVhcigpOmYuZ2V0RnVsbFllYXIoKS0xfWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO2Q+Pj49MDt2YXIgdz1yKClbZCs0MD4+PjI+Pj4wXTtkPXtvYjpwKClbZD4+PjI+Pj4wXSxuYjpwKClbZCs0Pj4+Mj4+PjBdLFRhOnAoKVtkKzg+Pj4yPj4+MF0sWGE6cCgpW2QrMTI+Pj4yPj4+MF0sVWE6cCgpW2QrMTY+Pj4yPj4+MF0sU2E6cCgpW2QrMjA+Pj4yPj4+MF0sTmE6cCgpW2QrMjQ+Pj4yPj4+MF0sUmE6cCgpW2QrMjg+Pj4yPj4+MF0sdWI6cCgpW2QrMzI+Pj4yPj4+MF0sbWI6cCgpW2QrMzY+Pj4yPj4+MF0scGI6dz9RKHcpOlwiXCJ9O2M9UShjKTt3PXtcIiVjXCI6XCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFwiJURcIjpcIiVtLyVkLyV5XCIsXCIlRlwiOlwiJVktJW0tJWRcIixcIiVoXCI6XCIlYlwiLFwiJXJcIjpcIiVJOiVNOiVTICVwXCIsXCIlUlwiOlwiJUg6JU1cIixcIiVUXCI6XCIlSDolTTolU1wiLFwiJXhcIjpcIiVtLyVkLyV5XCIsXG5cIiVYXCI6XCIlSDolTTolU1wiLFwiJUVjXCI6XCIlY1wiLFwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIHkgaW4gdyljPWMucmVwbGFjZShuZXcgUmVnRXhwKHksXCJnXCIpLHdbeV0pO3ZhciBJYj1cIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLEpiPVwiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlclwiLnNwbGl0KFwiIFwiKTt3PXtcIiVhXCI6Zj0+SWJbZi5OYV0uc3Vic3RyaW5nKDAsMyksXG5cIiVBXCI6Zj0+SWJbZi5OYV0sXCIlYlwiOmY9PkpiW2YuVWFdLnN1YnN0cmluZygwLDMpLFwiJUJcIjpmPT5KYltmLlVhXSxcIiVDXCI6Zj0+aCgoZi5TYSsxOTAwKS8xMDB8MCwyKSxcIiVkXCI6Zj0+aChmLlhhLDIpLFwiJWVcIjpmPT5nKGYuWGEsMixcIiBcIiksXCIlZ1wiOmY9PkMoZikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlR1wiOmY9PkMoZiksXCIlSFwiOmY9PmgoZi5UYSwyKSxcIiVJXCI6Zj0+e2Y9Zi5UYTswPT1mP2Y9MTI6MTI8ZiYmKGYtPTEyKTtyZXR1cm4gaChmLDIpfSxcIiVqXCI6Zj0+e2Zvcih2YXIgcT0wLHU9MDt1PD1mLlVhLTE7cSs9KFkoZi5TYSsxOTAwKT9RYjpSYilbdSsrXSk7cmV0dXJuIGgoZi5YYStxLDMpfSxcIiVtXCI6Zj0+aChmLlVhKzEsMiksXCIlTVwiOmY9PmgoZi5uYiwyKSxcIiVuXCI6KCk9PlwiXFxuXCIsXCIlcFwiOmY9PjA8PWYuVGEmJjEyPmYuVGE/XCJBTVwiOlwiUE1cIixcIiVTXCI6Zj0+aChmLm9iLDIpLFwiJXRcIjooKT0+XCJcXHRcIixcIiV1XCI6Zj0+Zi5OYXx8NyxcIiVVXCI6Zj0+aChNYXRoLmZsb29yKChmLlJhK1xuNy1mLk5hKS83KSwyKSxcIiVWXCI6Zj0+e3ZhciBxPU1hdGguZmxvb3IoKGYuUmErNy0oZi5OYSs2KSU3KS83KTsyPj0oZi5OYSszNzEtZi5SYS0yKSU3JiZxKys7aWYocSk1Mz09cSYmKHU9KGYuTmErMzcxLWYuUmEpJTcsND09dXx8Mz09dSYmWShmLlNhKXx8KHE9MSkpO2Vsc2V7cT01Mjt2YXIgdT0oZi5OYSs3LWYuUmEtMSklNzsoND09dXx8NT09dSYmWShmLlNhJTQwMC0xKSkmJnErK31yZXR1cm4gaChxLDIpfSxcIiV3XCI6Zj0+Zi5OYSxcIiVXXCI6Zj0+aChNYXRoLmZsb29yKChmLlJhKzctKGYuTmErNiklNykvNyksMiksXCIleVwiOmY9PihmLlNhKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJVlcIjpmPT5mLlNhKzE5MDAsXCIlelwiOmY9PntmPWYubWI7dmFyIHE9MDw9ZjtmPU1hdGguYWJzKGYpLzYwO3JldHVybihxP1wiK1wiOlwiLVwiKStTdHJpbmcoXCIwMDAwXCIrKGYvNjAqMTAwK2YlNjApKS5zbGljZSgtNCl9LFwiJVpcIjpmPT5mLnBiLFwiJSVcIjooKT0+XCIlXCJ9O2M9Yy5yZXBsYWNlKC8lJS9nLFxuXCJcXHgwMFxceDAwXCIpO2Zvcih5IGluIHcpYy5pbmNsdWRlcyh5KSYmKGM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAoeSxcImdcIiksd1t5XShkKSkpO2M9Yy5yZXBsYWNlKC9cXDBcXDAvZyxcIiVcIik7eT1TYihjKTtpZih5Lmxlbmd0aD5iKXJldHVybiAwO1RiKHksYSk7cmV0dXJuIHkubGVuZ3RoLTF9Uy5XYSgpO1xudmFyIFZiPVtPYSxQYSxiYixkYixlYixpYixqYixrYixsYixtYixuYixvYixwYixxYixyYixzYix5Yix6YixHYixLYixMYixNYixOYixQYl0sWmI9e2I6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDsobmV3IFphKGEpKS5XYShiPj4+MCxjPj4+MCk7JGE9YTthYisrO3Rocm93ICRhO30sTDpmdW5jdGlvbihhKXtXYihhPj4+MCwhQSwxLCFrYSwxMzEwNzIsITEpO1MuYWIoKX0sajpmdW5jdGlvbihhKXthPj4+PTA7RD9wb3N0TWVzc2FnZSh7Y21kOlwiY2xlYW51cFRocmVhZFwiLHRocmVhZDphfSk6Uy5aYShTLk1hW2FdKX0sSDpjYixoOmRiLFM6ZWIsRDppYixGOmpiLFQ6a2IsUTpsYixKOm1iLFA6bmIsbjpvYixFOnBiLEI6cWIsUjpyYixDOnNiLHA6KCk9PjEsejpmdW5jdGlvbihhLGIpe2E+Pj49MDthPT1iPj4+MD9zZXRUaW1lb3V0KCgpPT5YKCkpOkQ/cG9zdE1lc3NhZ2Uoe3RhcmdldFRocmVhZDphLGNtZDpcImNoZWNrTWFpbGJveFwifSk6KGE9Uy5NYVthXSkmJmEucG9zdE1lc3NhZ2Uoe2NtZDpcImNoZWNrTWFpbGJveFwifSl9LFxuSTpmdW5jdGlvbihhLGIsYyxkKXtiPj4+PTA7dmIubGVuZ3RoPWM7ZD1kPj4+MD4+PjM7Zm9yKHZhciBnPTA7ZzxjO2crKyl2YltnXT1lYSgpW2QrZz4+PjBdO2E9MD5hP0VhWy1hLTFdOlZiW2FdO1MuaWI9YjtiPWEuYXBwbHkobnVsbCx2Yik7Uy5pYj0wO3JldHVybiBifSxLOnRiLG86ZnVuY3Rpb24oYSl7QiYmUy5NYVthPj4+MF0ucmVmKCl9LHM6ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO3AoKVtjPj4+Mj4+PjBdPWEuZ2V0VVRDU2Vjb25kcygpO3AoKVtjKzQ+Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7cCgpW2MrOD4+PjI+Pj4wXT1hLmdldFVUQ0hvdXJzKCk7cCgpW2MrMTI+Pj4yPj4+MF09YS5nZXRVVENEYXRlKCk7cCgpW2MrMTY+Pj4yPj4+MF09YS5nZXRVVENNb250aCgpO3AoKVtjKzIwPj4+Mj4+PjBdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO1xucCgpW2MrMjQ+Pj4yPj4+MF09YS5nZXRVVENEYXkoKTthPShhLmdldFRpbWUoKS1EYXRlLlVUQyhhLmdldFVUQ0Z1bGxZZWFyKCksMCwxLDAsMCwwLDApKS84NjRFNXwwO3AoKVtjKzI4Pj4+Mj4+PjBdPWF9LHQ6ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO3AoKVtjPj4+Mj4+PjBdPWEuZ2V0U2Vjb25kcygpO3AoKVtjKzQ+Pj4yPj4+MF09YS5nZXRNaW51dGVzKCk7cCgpW2MrOD4+PjI+Pj4wXT1hLmdldEhvdXJzKCk7cCgpW2MrMTI+Pj4yPj4+MF09YS5nZXREYXRlKCk7cCgpW2MrMTY+Pj4yPj4+MF09YS5nZXRNb250aCgpO3AoKVtjKzIwPj4+Mj4+PjBdPWEuZ2V0RnVsbFllYXIoKS0xOTAwO3AoKVtjKzI0Pj4+Mj4+PjBdPWEuZ2V0RGF5KCk7Yj0oWShhLmdldEZ1bGxZZWFyKCkpP3diOnhiKVthLmdldE1vbnRoKCldK2EuZ2V0RGF0ZSgpLTF8MDtwKClbYysyOD4+PlxuMj4+PjBdPWI7cCgpW2MrMzY+Pj4yPj4+MF09LSg2MCphLmdldFRpbWV6b25lT2Zmc2V0KCkpO2I9KG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSw2LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBkPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTthPShiIT1kJiZhLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKGQsYikpfDA7cCgpW2MrMzI+Pj4yPj4+MF09YX0sdTpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9bmV3IERhdGUocCgpW2ErMjA+Pj4yPj4+MF0rMTkwMCxwKClbYSsxNj4+PjI+Pj4wXSxwKClbYSsxMj4+PjI+Pj4wXSxwKClbYSs4Pj4+Mj4+PjBdLHAoKVthKzQ+Pj4yPj4+MF0scCgpW2E+Pj4yPj4+MF0sMCksYz1wKClbYSszMj4+PjI+Pj4wXSxkPWIuZ2V0VGltZXpvbmVPZmZzZXQoKSxnPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxoPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksXG4wLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLGs9TWF0aC5taW4oaCxnKTswPmM/cCgpW2ErMzI+Pj4yPj4+MF09TnVtYmVyKGchPWgmJms9PWQpOjA8YyE9KGs9PWQpJiYoZz1NYXRoLm1heChoLGcpLGIuc2V0VGltZShiLmdldFRpbWUoKSs2RTQqKCgwPGM/azpnKS1kKSkpO3AoKVthKzI0Pj4+Mj4+PjBdPWIuZ2V0RGF5KCk7Yz0oWShiLmdldEZ1bGxZZWFyKCkpP3diOnhiKVtiLmdldE1vbnRoKCldK2IuZ2V0RGF0ZSgpLTF8MDtwKClbYSsyOD4+PjI+Pj4wXT1jO3AoKVthPj4+Mj4+PjBdPWIuZ2V0U2Vjb25kcygpO3AoKVthKzQ+Pj4yPj4+MF09Yi5nZXRNaW51dGVzKCk7cCgpW2ErOD4+PjI+Pj4wXT1iLmdldEhvdXJzKCk7cCgpW2ErMTI+Pj4yPj4+MF09Yi5nZXREYXRlKCk7cCgpW2ErMTY+Pj4yPj4+MF09Yi5nZXRNb250aCgpO3AoKVthKzIwPj4+Mj4+PjBdPWIuZ2V0WWVhcigpO2E9Yi5nZXRUaW1lKCk7aXNOYU4oYSk/KHAoKVtYYigpPj4+Mj4+PjBdPTYxLGE9LTEpOmEvPTFFMztcbnJldHVybiBZYigoUD1hLDE8PStNYXRoLmFicyhQKT8wPFA/K01hdGguZmxvb3IoUC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChQLSsofn5QPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKSksYT4+PjB9LHE6eWIscjp6Yix5OmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKHcpe3JldHVybih3PXcudG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcKChbQS1aYS16IF0rKVxcKSQvKSk/d1sxXTpcIkdNVFwifWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO3ZhciBnPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxoPW5ldyBEYXRlKGcsMCwxKSxrPW5ldyBEYXRlKGcsNiwxKTtnPWguZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgdD1rLmdldFRpbWV6b25lT2Zmc2V0KCksQz1NYXRoLm1heChnLHQpO3IoKVthPj4+Mj4+PjBdPTYwKkM7cCgpW2I+Pj4yPj4+MF09TnVtYmVyKGchPXQpO2E9ZChoKTtiPWQoayk7YT1CYihhKTtiPUJiKGIpO3Q8Zz8ocigpW2M+Pj4yPj4+MF09YSxyKClbYys0Pj4+Mj4+PjBdPWIpOlxuKHIoKVtjPj4+Mj4+PjBdPWIscigpW2MrND4+PjI+Pj4wXT1hKX0sYzooKT0+e3JhKFwiXCIpfSxPOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7Yj4+Pj0wO2M+Pj49MDtDYi5sZW5ndGg9MDtmb3IodmFyIGQ7ZD1uKClbYisrPj4+MF07KXt2YXIgZz0xMDUhPWQ7ZyY9MTEyIT1kO2MrPWcmJmMlOD80OjA7Q2IucHVzaCgxMTI9PWQ/cigpW2M+Pj4yPj4+MF06MTA1PT1kP3AoKVtjPj4+Mj4+PjBdOmVhKClbYz4+PjM+Pj4wXSk7Yys9Zz84OjR9cmV0dXJuIEVhW2FdLmFwcGx5KG51bGwsQ2IpfSxrOigpPT57fSxpOigpPT5EYXRlLm5vdygpLFU6KCk9PntUKz0xO3Rocm93XCJ1bndpbmRcIjt9LEE6ZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDkwMTc2MH0sZTooKT0+cGVyZm9ybWFuY2UudGltZU9yaWdpbitwZXJmb3JtYW5jZS5ub3coKSxmOigpPT5CP3JlcXVpcmUoXCJvc1wiKS5jcHVzKCkubGVuZ3RoOm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5LHg6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPVxubigpLmxlbmd0aDtpZihhPD1ifHw0Mjk0OTAxNzYwPGEpcmV0dXJuITE7Zm9yKHZhciBjPTE7ND49YztjKj0yKXt2YXIgZD1iKigxKy4yL2MpO2Q9TWF0aC5taW4oZCxhKzEwMDY2MzI5Nik7dmFyIGc9TWF0aDtkPU1hdGgubWF4KGEsZCk7YTp7Zz0oZy5taW4uY2FsbChnLDQyOTQ5MDE3NjAsZCsoNjU1MzYtZCU2NTUzNiklNjU1MzYpLWUuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXtlLmdyb3coZyk7bSgpO3ZhciBoPTE7YnJlYWsgYX1jYXRjaChrKXt9aD12b2lkIDB9aWYoaClyZXR1cm4hMH1yZXR1cm4hMX0sTTpHYixOOktiLEc6UWEsZzpMYixtOk1iLHY6TmIsbDpQYixhOmV8fHYud2FzbU1lbW9yeSx3OlViLGQ6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIFViKGE+Pj4wLGI+Pj4wLGM+Pj4wLGQ+Pj4wKX19LFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsZCl7Wj1jLmV4cG9ydHM7Wj0kYigpO1MuYmIucHVzaChaLnphKTtYYT1aLkFhO3ZhLnVuc2hpZnQoWi5WKTtcbnNhPWQ7eWEoKTtyZXR1cm4gWn12YXIgYj17YTpaYn07TSsrO2lmKHYuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gdi5pbnN0YW50aWF0ZVdhc20oYixhKX1jYXRjaChjKXtKKGBNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAke2N9YCkseChjKX1EYShiLGZ1bmN0aW9uKGMpe2EoYy5pbnN0YW5jZSxjLm1vZHVsZSl9KS5jYXRjaCh4KTtyZXR1cm57fX0oKTt2Ll9PcnRJbml0PShhLGIpPT4odi5fT3J0SW5pdD1aLlcpKGEsYik7di5fT3J0R2V0TGFzdEVycm9yPShhLGIpPT4odi5fT3J0R2V0TGFzdEVycm9yPVouWCkoYSxiKTt2Ll9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz0oYSxiLGMsZCxnLGgsayx0LEMsdyk9Pih2Ll9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz1aLlkpKGEsYixjLGQsZyxoLGssdCxDLHcpO1xudi5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9KGEsYik9Pih2Ll9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj1aLlopKGEsYik7di5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPShhLGIsYyk9Pih2Ll9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9Wi5fKShhLGIsYyk7di5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PShhLGIsYyk9Pih2Ll9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9Wi4kKShhLGIsYyk7di5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPWE9Pih2Ll9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9Wi5hYSkoYSk7di5fT3J0Q3JlYXRlU2Vzc2lvbj0oYSxiLGMpPT4odi5fT3J0Q3JlYXRlU2Vzc2lvbj1aLmJhKShhLGIsYyk7di5fT3J0UmVsZWFzZVNlc3Npb249YT0+KHYuX09ydFJlbGVhc2VTZXNzaW9uPVouY2EpKGEpO3YuX09ydEdldElucHV0T3V0cHV0Q291bnQ9KGEsYixjKT0+KHYuX09ydEdldElucHV0T3V0cHV0Q291bnQ9Wi5kYSkoYSxiLGMpO1xudi5fT3J0R2V0SW5wdXROYW1lPShhLGIpPT4odi5fT3J0R2V0SW5wdXROYW1lPVouZWEpKGEsYik7di5fT3J0R2V0T3V0cHV0TmFtZT0oYSxiKT0+KHYuX09ydEdldE91dHB1dE5hbWU9Wi5mYSkoYSxiKTt2Ll9PcnRGcmVlPWE9Pih2Ll9PcnRGcmVlPVouZ2EpKGEpO3YuX09ydENyZWF0ZVRlbnNvcj0oYSxiLGMsZCxnLGgpPT4odi5fT3J0Q3JlYXRlVGVuc29yPVouaGEpKGEsYixjLGQsZyxoKTt2Ll9PcnRHZXRUZW5zb3JEYXRhPShhLGIsYyxkLGcpPT4odi5fT3J0R2V0VGVuc29yRGF0YT1aLmlhKShhLGIsYyxkLGcpO3YuX09ydFJlbGVhc2VUZW5zb3I9YT0+KHYuX09ydFJlbGVhc2VUZW5zb3I9Wi5qYSkoYSk7di5fT3J0Q3JlYXRlUnVuT3B0aW9ucz0oYSxiLGMsZCk9Pih2Ll9PcnRDcmVhdGVSdW5PcHRpb25zPVoua2EpKGEsYixjLGQpO3YuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PShhLGIsYyk9Pih2Ll9PcnRBZGRSdW5Db25maWdFbnRyeT1aLmxhKShhLGIsYyk7XG52Ll9PcnRSZWxlYXNlUnVuT3B0aW9ucz1hPT4odi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9Wi5tYSkoYSk7di5fT3J0Q3JlYXRlQmluZGluZz1hPT4odi5fT3J0Q3JlYXRlQmluZGluZz1aLm5hKShhKTt2Ll9PcnRCaW5kSW5wdXQ9KGEsYixjKT0+KHYuX09ydEJpbmRJbnB1dD1aLm9hKShhLGIsYyk7di5fT3J0QmluZE91dHB1dD0oYSxiLGMsZCk9Pih2Ll9PcnRCaW5kT3V0cHV0PVoucGEpKGEsYixjLGQpO3YuX09ydENsZWFyQm91bmRPdXRwdXRzPWE9Pih2Ll9PcnRDbGVhckJvdW5kT3V0cHV0cz1aLnFhKShhKTt2Ll9PcnRSZWxlYXNlQmluZGluZz1hPT4odi5fT3J0UmVsZWFzZUJpbmRpbmc9Wi5yYSkoYSk7di5fT3J0UnVuV2l0aEJpbmRpbmc9KGEsYixjLGQsZyk9Pih2Ll9PcnRSdW5XaXRoQmluZGluZz1aLnNhKShhLGIsYyxkLGcpO3YuX09ydFJ1bj0oYSxiLGMsZCxnLGgsayx0KT0+KHYuX09ydFJ1bj1aLnRhKShhLGIsYyxkLGcsaCxrLHQpO1xudi5fT3J0RW5kUHJvZmlsaW5nPWE9Pih2Ll9PcnRFbmRQcm9maWxpbmc9Wi51YSkoYSk7dmFyIFhiPSgpPT4oWGI9Wi52YSkoKSxXPXYuX3B0aHJlYWRfc2VsZj0oKT0+KFc9di5fcHRocmVhZF9zZWxmPVoud2EpKCksQWI9di5fbWFsbG9jPWE9PihBYj12Ll9tYWxsb2M9Wi54YSkoYSk7di5fZnJlZT1hPT4odi5fZnJlZT1aLnlhKShhKTt2Ll9fZW1zY3JpcHRlbl90bHNfaW5pdD0oKT0+KHYuX19lbXNjcmlwdGVuX3Rsc19pbml0PVouemEpKCk7dmFyIFdiPXYuX19lbXNjcmlwdGVuX3RocmVhZF9pbml0PShhLGIsYyxkLGcsaCk9PihXYj12Ll9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdD1aLkJhKShhLGIsYyxkLGcsaCk7di5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQ9KCk9Pih2Ll9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZD1aLkNhKSgpO1xudmFyIE5hPShhLGIsYyxkKT0+KE5hPVouRGEpKGEsYixjLGQpLFRhPWE9PihUYT1aLkVhKShhKSxZYT12Ll9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdD1hPT4oWWE9di5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQ9Wi5GYSkoYSksdWI9KCk9Pih1Yj1aLkdhKSgpLFliPWE9PihZYj1aLkhhKShhKSxWYT0oYSxiKT0+KFZhPVouSWEpKGEsYiksS2E9KCk9PihLYT1aLkphKSgpLFU9YT0+KFU9Wi5LYSkoYSksTWE9YT0+KE1hPVouTGEpKGEpO2Z1bmN0aW9uICRiKCl7dmFyIGE9WjthPU9iamVjdC5hc3NpZ24oe30sYSk7dmFyIGI9ZD0+KCk9PmQoKT4+PjAsYz1kPT5nPT5kKGcpPj4+MDthLnZhPWIoYS52YSk7YS53YT1iKGEud2EpO2EueGE9YyhhLnhhKTthLmVtc2NyaXB0ZW5fbWFpbl9ydW50aW1lX3RocmVhZF9pZD1iKGEuZW1zY3JpcHRlbl9tYWluX3J1bnRpbWVfdGhyZWFkX2lkKTthLkphPWIoYS5KYSk7YS5MYT1jKGEuTGEpO3JldHVybiBhfXYud2FzbU1lbW9yeT1lO1xudi5zdGFja0FsbG9jPU1hO3Yuc3RhY2tTYXZlPUthO3Yuc3RhY2tSZXN0b3JlPVU7di5rZWVwUnVudGltZUFsaXZlPSgpPT4wPFQ7di5VVEY4VG9TdHJpbmc9UTt2LnN0cmluZ1RvVVRGOD1oYjt2Lmxlbmd0aEJ5dGVzVVRGOD1mYjt2LkV4aXRTdGF0dXM9Ujt2LlBUaHJlYWQ9Uzt2YXIgYWM7Tj1mdW5jdGlvbiBiYygpe2FjfHxjYygpO2FjfHwoTj1iYyl9O2Z1bmN0aW9uIGNjKCl7aWYoISgwPE0pKWlmKEQpaGEodiksRHx8VWEodmEpLHN0YXJ0V29ya2VyKHYpO2Vsc2V7aWYodi5wcmVSdW4pZm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIHYucHJlUnVuJiYodi5wcmVSdW49W3YucHJlUnVuXSk7di5wcmVSdW4ubGVuZ3RoOyl1YS51bnNoaWZ0KHYucHJlUnVuLnNoaWZ0KCkpO1VhKHVhKTswPE18fGFjfHwoYWM9ITAsdi5jYWxsZWRSdW49ITAsS3x8KER8fFVhKHZhKSxoYSh2KSxEfHxVYSh3YSkpKX19Y2MoKTtcblxuXG4gIHJldHVybiBtb2R1bGVBcmcucmVhZHlcbn1cbik7XG59KSgpO1xuO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtVGhyZWFkZWQ7XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgKCkgPT4gb3J0V2FzbVRocmVhZGVkKTtcbiIsICJcInVzZSBzdHJpY3RcIjt2YXIgTW9kdWxlPXt9O3ZhciBFTlZJUk9OTUVOVF9JU19OT0RFPXR5cGVvZiBwcm9jZXNzPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09XCJzdHJpbmdcIjtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXt2YXIgbm9kZVdvcmtlclRocmVhZHM9cmVxdWlyZShcIndvcmtlcl90aHJlYWRzXCIpO3ZhciBwYXJlbnRQb3J0PW5vZGVXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7cGFyZW50UG9ydC5vbihcIm1lc3NhZ2VcIixkYXRhPT5vbm1lc3NhZ2Uoe2RhdGE6ZGF0YX0pKTt2YXIgZnM9cmVxdWlyZShcImZzXCIpO3ZhciB2bT1yZXF1aXJlKFwidm1cIik7T2JqZWN0LmFzc2lnbihnbG9iYWwse3NlbGY6Z2xvYmFsLHJlcXVpcmU6cmVxdWlyZSxNb2R1bGU6TW9kdWxlLGxvY2F0aW9uOntocmVmOl9fZmlsZW5hbWV9LFdvcmtlcjpub2RlV29ya2VyVGhyZWFkcy5Xb3JrZXIsaW1wb3J0U2NyaXB0czpmPT52bS5ydW5JblRoaXNDb250ZXh0KGZzLnJlYWRGaWxlU3luYyhmLFwidXRmOFwiKSx7ZmlsZW5hbWU6Zn0pLHBvc3RNZXNzYWdlOm1zZz0+cGFyZW50UG9ydC5wb3N0TWVzc2FnZShtc2cpLHBlcmZvcm1hbmNlOmdsb2JhbC5wZXJmb3JtYW5jZXx8e25vdzpEYXRlLm5vd319KX12YXIgaW5pdGlhbGl6ZWRKUz1mYWxzZTtmdW5jdGlvbiB0aHJlYWRQcmludEVycigpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7ZnMud3JpdGVTeW5jKDIsdGV4dCtcIlxcblwiKTtyZXR1cm59Y29uc29sZS5lcnJvcih0ZXh0KX1mdW5jdGlvbiB0aHJlYWRBbGVydCgpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7cG9zdE1lc3NhZ2Uoe2NtZDpcImFsZXJ0XCIsdGV4dDp0ZXh0LHRocmVhZElkOk1vZHVsZVtcIl9wdGhyZWFkX3NlbGZcIl0oKX0pfXZhciBlcnI9dGhyZWFkUHJpbnRFcnI7c2VsZi5hbGVydD10aHJlYWRBbGVydDtNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl09KGluZm8scmVjZWl2ZUluc3RhbmNlKT0+e3ZhciBtb2R1bGU9TW9kdWxlW1wid2FzbU1vZHVsZVwiXTtNb2R1bGVbXCJ3YXNtTW9kdWxlXCJdPW51bGw7dmFyIGluc3RhbmNlPW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW5mbyk7cmV0dXJuIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSl9O3NlbGYub251bmhhbmRsZWRyZWplY3Rpb249ZT0+e3Rocm93IGUucmVhc29ufHxlfTtmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGUpe3RyeXtpZihlLmRhdGEuY21kPT09XCJsb2FkXCIpe2xldCBtZXNzYWdlUXVldWU9W107c2VsZi5vbm1lc3NhZ2U9ZT0+bWVzc2FnZVF1ZXVlLnB1c2goZSk7c2VsZi5zdGFydFdvcmtlcj1pbnN0YW5jZT0+e01vZHVsZT1pbnN0YW5jZTtwb3N0TWVzc2FnZSh7XCJjbWRcIjpcImxvYWRlZFwifSk7Zm9yKGxldCBtc2cgb2YgbWVzc2FnZVF1ZXVlKXtoYW5kbGVNZXNzYWdlKG1zZyl9c2VsZi5vbm1lc3NhZ2U9aGFuZGxlTWVzc2FnZX07TW9kdWxlW1wid2FzbU1vZHVsZVwiXT1lLmRhdGEud2FzbU1vZHVsZTtmb3IoY29uc3QgaGFuZGxlciBvZiBlLmRhdGEuaGFuZGxlcnMpe01vZHVsZVtoYW5kbGVyXT0oLi4uYXJncyk9Pntwb3N0TWVzc2FnZSh7Y21kOlwiY2FsbEhhbmRsZXJcIixoYW5kbGVyOmhhbmRsZXIsYXJnczphcmdzfSl9fU1vZHVsZVtcIndhc21NZW1vcnlcIl09ZS5kYXRhLndhc21NZW1vcnk7TW9kdWxlW1wiYnVmZmVyXCJdPU1vZHVsZVtcIndhc21NZW1vcnlcIl0uYnVmZmVyO01vZHVsZVtcIkVOVklST05NRU5UX0lTX1BUSFJFQURcIl09dHJ1ZTtpZih0eXBlb2YgZS5kYXRhLnVybE9yQmxvYj09XCJzdHJpbmdcIil7aW1wb3J0U2NyaXB0cyhlLmRhdGEudXJsT3JCbG9iKX1lbHNle3ZhciBvYmplY3RVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChlLmRhdGEudXJsT3JCbG9iKTtpbXBvcnRTY3JpcHRzKG9iamVjdFVybCk7VVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpfW9ydFdhc21UaHJlYWRlZChNb2R1bGUpfWVsc2UgaWYoZS5kYXRhLmNtZD09PVwicnVuXCIpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdFwiXShlLmRhdGEucHRocmVhZF9wdHIsLyppc19tYWluPSovMCwvKmlzX3J1bnRpbWU9Ki8wLC8qY2FuX2Jsb2NrPSovMSk7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9tYWlsYm94X2F3YWl0XCJdKGUuZGF0YS5wdGhyZWFkX3B0cik7TW9kdWxlW1wiZXN0YWJsaXNoU3RhY2tTcGFjZVwiXSgpO01vZHVsZVtcIlBUaHJlYWRcIl0ucmVjZWl2ZU9iamVjdFRyYW5zZmVyKGUuZGF0YSk7TW9kdWxlW1wiUFRocmVhZFwiXS50aHJlYWRJbml0VExTKCk7aWYoIWluaXRpYWxpemVkSlMpe2luaXRpYWxpemVkSlM9dHJ1ZX10cnl7TW9kdWxlW1wiaW52b2tlRW50cnlQb2ludFwiXShlLmRhdGEuc3RhcnRfcm91dGluZSxlLmRhdGEuYXJnKX1jYXRjaChleCl7aWYoZXghPVwidW53aW5kXCIpe3Rocm93IGV4fX19ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjYW5jZWxcIil7aWYoTW9kdWxlW1wiX3B0aHJlYWRfc2VsZlwiXSgpKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXRcIl0oLTEpfX1lbHNlIGlmKGUuZGF0YS50YXJnZXQ9PT1cInNldGltbWVkaWF0ZVwiKXt9ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjaGVja01haWxib3hcIil7aWYoaW5pdGlhbGl6ZWRKUyl7TW9kdWxlW1wiY2hlY2tNYWlsYm94XCJdKCl9fWVsc2UgaWYoZS5kYXRhLmNtZCl7ZXJyKGB3b3JrZXIuanMgcmVjZWl2ZWQgdW5rbm93biBjb21tYW5kICR7ZS5kYXRhLmNtZH1gKTtlcnIoZS5kYXRhKX19Y2F0Y2goZXgpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZFwiXT8uKCk7dGhyb3cgZXh9fXNlbGYub25tZXNzYWdlPWhhbmRsZU1lc3NhZ2U7XG4iLCAiZXhwb3J0IGNvbnN0IGpvaW4gPSB1bmRlZmluZWQ7IiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge0Vudn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtPcnRXYXNtTW9kdWxlfSBmcm9tICcuL2JpbmRpbmcvb3J0LXdhc20nO1xuaW1wb3J0IHtPcnRXYXNtVGhyZWFkZWRNb2R1bGV9IGZyb20gJy4vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmxldCBvcnRXYXNtRmFjdG9yeTogRW1zY3JpcHRlbk1vZHVsZUZhY3Rvcnk8T3J0V2FzbU1vZHVsZT47XG5cbmlmICghQlVJTERfREVGUy5ESVNBQkxFX1RSQUlOSU5HKSB7XG4gIG9ydFdhc21GYWN0b3J5ID0gcmVxdWlyZSgnLi9iaW5kaW5nL29ydC10cmFpbmluZy13YXNtLXNpbWQuanMnKTtcbn0gZWxzZSB7XG4gIG9ydFdhc21GYWN0b3J5ID1cbiAgICAgIEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPyByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20uanMnKSA6IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtd2FzbS1zaW1kLmpzZXAuanMnKTtcbn1cblxuY29uc3Qgb3J0V2FzbUZhY3RvcnlUaHJlYWRlZDogRW1zY3JpcHRlbk1vZHVsZUZhY3Rvcnk8T3J0V2FzbU1vZHVsZT4gPSAhQlVJTERfREVGUy5ESVNBQkxFX1dBU01fVEhSRUFEID9cbiAgICAoQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSA/IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC5qcycpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vYmluZGluZy9vcnQtd2FzbS1zaW1kLXRocmVhZGVkLmpzZXAuanMnKSkgOlxuICAgIG9ydFdhc21GYWN0b3J5O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5cbmxldCB3YXNtOiBPcnRXYXNtTW9kdWxlfHVuZGVmaW5lZDtcbmxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xubGV0IGluaXRpYWxpemluZyA9IGZhbHNlO1xubGV0IGFib3J0ZWQgPSBmYWxzZTtcblxuY29uc3QgaXNNdWx0aVRocmVhZFN1cHBvcnRlZCA9IChudW1UaHJlYWRzOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgLy8gV2ViQXNzZW1ibHkgdGhyZWFkcyBhcmUgc2V0IHRvIDEgKHNpbmdsZSB0aHJlYWQpLlxuICBpZiAobnVtVGhyZWFkcyA9PT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmICdTaGFyZWRBcnJheUJ1ZmZlcicgaXMgbm90IGF2YWlsYWJsZSwgV2ViQXNzZW1ibHkgdGhyZWFkcyB3aWxsIG5vdCB3b3JrLlxuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgIXNlbGYuY3Jvc3NPcmlnaW5Jc29sYXRlZCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gJyArIG51bVRocmVhZHMgK1xuICAgICAgICAgICcsIGJ1dCB0aGlzIHdpbGwgbm90IHdvcmsgdW5sZXNzIHlvdSBlbmFibGUgY3Jvc3NPcmlnaW5Jc29sYXRlZCBtb2RlLiAnICtcbiAgICAgICAgICAnU2VlIGh0dHBzOi8vd2ViLmRldi9jcm9zcy1vcmlnaW4taXNvbGF0aW9uLWd1aWRlLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2Vudi53YXNtLm51bVRocmVhZHMgaXMgc2V0IHRvICcgKyBudW1UaHJlYWRzICtcbiAgICAgICAgJywgaG93ZXZlciwgY3VycmVudGx5IG9ubnhydW50aW1lLXdlYiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpLXRocmVhZHMgaW4gTm9kZS5qcy4gJyArXG4gICAgICAgICdQbGVhc2UgY29uc2lkZXIgdXNpbmcgb25ueHJ1bnRpbWUtbm9kZSBmb3IgcGVyZm9ybWFuY2UgY3JpdGljYWwgc2NlbmFyaW9zLicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUZXN0IGZvciB0cmFuc2ZlcmFiaWxpdHkgb2YgU0FCcyAoZm9yIGJyb3dzZXJzLiBuZWVkZWQgZm9yIEZpcmVmb3gpXG4gICAgLy8gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIW1zZy9tb3ppbGxhLmRldi5wbGF0Zm9ybS9JSGtCWmxIRVRwQS9kd3NNTmNoV0VRQUpcbiAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbmV3IE1lc3NhZ2VDaGFubmVsKCkucG9ydDEucG9zdE1lc3NhZ2UobmV3IFNoYXJlZEFycmF5QnVmZmVyKDEpKTtcbiAgICB9XG5cbiAgICAvLyBUZXN0IGZvciBXZWJBc3NlbWJseSB0aHJlYWRzIGNhcGFiaWxpdHkgKGZvciBib3RoIGJyb3dzZXJzIGFuZCBOb2RlLmpzKVxuICAgIC8vIFRoaXMgdHlwZWQgYXJyYXkgaXMgYSBXZWJBc3NlbWJseSBwcm9ncmFtIGNvbnRhaW5pbmcgdGhyZWFkZWQgaW5zdHJ1Y3Rpb25zLlxuICAgIHJldHVybiBXZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbXG4gICAgICAwLCA5NywgMTE1LCAxMDksIDEsIDAsICAwLCAgMCwgMSwgNCwgMSwgIDk2LCAwLCAgIDAsICAzLCAyLCAxLCAgMCwgNSxcbiAgICAgIDQsIDEsICAzLCAgIDEsICAgMSwgMTAsIDExLCAxLCA5LCAwLCA2NSwgMCwgIDI1NCwgMTYsIDIsIDAsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgaXNTaW1kU3VwcG9ydGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICB0cnkge1xuICAgIC8vIFRlc3QgZm9yIFdlYkFzc2VtYmx5IFNJTUQgY2FwYWJpbGl0eSAoZm9yIGJvdGggYnJvd3NlcnMgYW5kIE5vZGUuanMpXG4gICAgLy8gVGhpcyB0eXBlZCBhcnJheSBpcyBhIFdlYkFzc2VtYmx5IHByb2dyYW0gY29udGFpbmluZyBTSU1EIGluc3RydWN0aW9ucy5cblxuICAgIC8vIFRoZSBiaW5hcnkgZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgd2F0Mndhc206XG4gICAgLy9cbiAgICAvLyAobW9kdWxlXG4gICAgLy8gICAodHlwZSAkdDAgKGZ1bmMpKVxuICAgIC8vICAgKGZ1bmMgJGYwICh0eXBlICR0MClcbiAgICAvLyAgICAgKGRyb3BcbiAgICAvLyAgICAgICAoaTMyeDQuZG90X2kxNng4X3NcbiAgICAvLyAgICAgICAgIChpOHgxNi5zcGxhdFxuICAgIC8vICAgICAgICAgICAoaTMyLmNvbnN0IDApKVxuICAgIC8vICAgICAgICAgKHYxMjguY29uc3QgaTMyeDQgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCkpKSkpXG5cbiAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMCwgICA5NywgMTE1LCAxMDksIDEsIDAsIDAsIDAsIDEsIDQsIDEsIDk2LCAwLCAwLCAzLCAyLCAxLCAwLCAxMCwgMzAsIDEsICAgMjgsICAwLCA2NSwgMCxcbiAgICAgIDI1MywgMTUsIDI1MywgMTIsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsICAyNTMsIDE4NiwgMSwgMjYsIDExXG4gICAgXSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBnZXRXYXNtRmlsZU5hbWUgPSAodXNlU2ltZDogYm9vbGVhbiwgdXNlVGhyZWFkczogYm9vbGVhbikgPT4ge1xuICBpZiAodXNlU2ltZCkge1xuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1RSQUlOSU5HKSB7XG4gICAgICByZXR1cm4gJ29ydC10cmFpbmluZy13YXNtLXNpbWQud2FzbSc7XG4gICAgfVxuICAgIHJldHVybiB1c2VUaHJlYWRzID8gJ29ydC13YXNtLXNpbWQtdGhyZWFkZWQud2FzbScgOiAnb3J0LXdhc20tc2ltZC53YXNtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXNlVGhyZWFkcyA/ICdvcnQtd2FzbS10aHJlYWRlZC53YXNtJyA6ICdvcnQtd2FzbS53YXNtJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVXZWJBc3NlbWJseSA9IGFzeW5jKGZsYWdzOiBFbnYuV2ViQXNzZW1ibHlGbGFncyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgaWYgKGluaXRpYWxpemluZykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlwbGUgY2FsbHMgdG8gXFwnaW5pdGlhbGl6ZVdlYkFzc2VtYmx5KClcXCcgZGV0ZWN0ZWQuJyk7XG4gIH1cbiAgaWYgKGFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXZpb3VzIGNhbGwgdG8gXFwnaW5pdGlhbGl6ZVdlYkFzc2VtYmx5KClcXCcgZmFpbGVkLicpO1xuICB9XG5cbiAgaW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAvLyB3YXNtIGZsYWdzIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkXG4gIGNvbnN0IHRpbWVvdXQgPSBmbGFncy5pbml0VGltZW91dCE7XG4gIGNvbnN0IG51bVRocmVhZHMgPSBmbGFncy5udW1UaHJlYWRzITtcbiAgY29uc3Qgc2ltZCA9IGZsYWdzLnNpbWQhO1xuXG4gIGNvbnN0IHVzZVRocmVhZHMgPSBpc011bHRpVGhyZWFkU3VwcG9ydGVkKG51bVRocmVhZHMpO1xuICBjb25zdCB1c2VTaW1kID0gc2ltZCAmJiBpc1NpbWRTdXBwb3J0ZWQoKTtcblxuICBjb25zdCB3YXNtUGF0aHMgPSBmbGFncy53YXNtUGF0aHM7XG4gIGNvbnN0IHdhc21QcmVmaXhPdmVycmlkZSA9IHR5cGVvZiB3YXNtUGF0aHMgPT09ICdzdHJpbmcnID8gd2FzbVBhdGhzIDogdW5kZWZpbmVkO1xuICBjb25zdCB3YXNtRmlsZU5hbWUgPSBnZXRXYXNtRmlsZU5hbWUodXNlU2ltZCwgdXNlVGhyZWFkcyk7XG4gIGNvbnN0IHdhc21QYXRoT3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSAnb2JqZWN0JyA/IHdhc21QYXRoc1t3YXNtRmlsZU5hbWVdIDogdW5kZWZpbmVkO1xuXG4gIGxldCBpc1RpbWVvdXQgPSBmYWxzZTtcblxuICBjb25zdCB0YXNrczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAvLyBwcm9taXNlIGZvciB0aW1lb3V0XG4gIGlmICh0aW1lb3V0ID4gMCkge1xuICAgIHRhc2tzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICAvLyBwcm9taXNlIGZvciBtb2R1bGUgaW5pdGlhbGl6YXRpb25cbiAgdGFza3MucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHVzZVRocmVhZHMgPyBvcnRXYXNtRmFjdG9yeVRocmVhZGVkIDogb3J0V2FzbUZhY3Rvcnk7XG4gICAgY29uc3QgY29uZmlnOiBQYXJ0aWFsPE9ydFdhc21Nb2R1bGU+ID0ge1xuICAgICAgbG9jYXRlRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcsIHNjcmlwdERpcmVjdG9yeTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fVEhSRUFEICYmIHVzZVRocmVhZHMgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJy53b3JrZXIuanMnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJlcXVpcmUoKSBmdW5jdGlvbiBpcyBoYW5kbGVkIGJ5IGVzYnVpbGQgcGx1Z2luIHRvIGxvYWQgZmlsZSBjb250ZW50IGFzIHN0cmluZy5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanMnKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoJy53YXNtJykpIHtcbiAgICAgICAgICBpZiAod2FzbVBhdGhPdmVycmlkZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdhc21QYXRoT3ZlcnJpZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FzbVByZWZpeE92ZXJyaWRlID8/IHNjcmlwdERpcmVjdG9yeTtcblxuICAgICAgICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSkge1xuICAgICAgICAgICAgaWYgKHdhc21GaWxlTmFtZSA9PT0gJ29ydC13YXNtLXNpbWQud2FzbScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArICdvcnQtd2FzbS1zaW1kLmpzZXAud2FzbSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdhc21GaWxlTmFtZSA9PT0gJ29ydC13YXNtLXNpbWQtdGhyZWFkZWQud2FzbScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLmpzZXAud2FzbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHByZWZpeCArIHdhc21GaWxlTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBmaWxlTmFtZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9USFJFQUQgJiYgdXNlVGhyZWFkcykge1xuICAgICAgY29uZmlnLm51bVRocmVhZHMgPSBudW1UaHJlYWRzO1xuICAgICAgaWYgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25maWcubWFpblNjcmlwdFVybE9yQmxvYiA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdvcnQtd2FzbS10aHJlYWRlZC5qcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlQ29kZSA9IGB2YXIgb3J0V2FzbVRocmVhZGVkPSR7ZmFjdG9yeS50b1N0cmluZygpfTtgO1xuICAgICAgICBjb25maWcubWFpblNjcmlwdFVybE9yQmxvYiA9IG5ldyBCbG9iKFtzY3JpcHRTb3VyY2VDb2RlXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmFjdG9yeShjb25maWcpLnRoZW4oXG4gICAgICAgIC8vIHdhc20gbW9kdWxlIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICBtb2R1bGUgPT4ge1xuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB3YXNtID0gbW9kdWxlO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gd2FzbSBtb2R1bGUgZmFpbGVkIHRvIGluaXRpYWxpemVcbiAgICAgICAgKHdoYXQpID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICByZWplY3Qod2hhdCk7XG4gICAgICAgIH0pO1xuICB9KSk7XG5cbiAgYXdhaXQgUHJvbWlzZS5yYWNlKHRhc2tzKTtcblxuICBpZiAoaXNUaW1lb3V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZWJBc3NlbWJseSBiYWNrZW5kIGluaXRpYWxpemluZyBmYWlsZWQgZHVlIHRvIHRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5zdGFuY2UgPSAoKTogT3J0V2FzbU1vZHVsZSA9PiB7XG4gIGlmIChpbml0aWFsaXplZCAmJiB3YXNtKSB7XG4gICAgcmV0dXJuIHdhc207XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1dlYkFzc2VtYmx5IGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcG9zZSA9ICgpOiB2b2lkID0+IHtcbiAgaWYgKGluaXRpYWxpemVkICYmICFpbml0aWFsaXppbmcgJiYgIWFib3J0ZWQpIHtcbiAgICBpbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gICAgKHdhc20gYXMgT3J0V2FzbVRocmVhZGVkTW9kdWxlKS5QVGhyZWFkPy50ZXJtaW5hdGVBbGxUaHJlYWRzKCk7XG4gICAgd2FzbSA9IHVuZGVmaW5lZDtcblxuICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgYWJvcnRlZCA9IHRydWU7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7Z2V0SW5zdGFuY2V9IGZyb20gJy4vd2FzbS1mYWN0b3J5JztcblxuZXhwb3J0IGNvbnN0IGFsbG9jV2FzbVN0cmluZyA9IChkYXRhOiBzdHJpbmcsIGFsbG9jczogbnVtYmVyW10pOiBudW1iZXIgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBjb25zdCBkYXRhTGVuZ3RoID0gd2FzbS5sZW5ndGhCeXRlc1VURjgoZGF0YSkgKyAxO1xuICBjb25zdCBkYXRhT2Zmc2V0ID0gd2FzbS5fbWFsbG9jKGRhdGFMZW5ndGgpO1xuICB3YXNtLnN0cmluZ1RvVVRGOChkYXRhLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgYWxsb2NzLnB1c2goZGF0YU9mZnNldCk7XG5cbiAgcmV0dXJuIGRhdGFPZmZzZXQ7XG59O1xuXG5pbnRlcmZhY2UgRXh0cmFPcHRpb25zSGFuZGxlciB7XG4gIChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgaXRlcmF0ZUV4dHJhT3B0aW9ucyA9XG4gICAgKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmVmaXg6IHN0cmluZywgc2VlbjogV2Vha1NldDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gICAgIGhhbmRsZXI6IEV4dHJhT3B0aW9uc0hhbmRsZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWVuLmhhcyhvcHRpb25zKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGluIG9wdGlvbnMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuLmFkZChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyhvcHRpb25zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IChwcmVmaXgpID8gcHJlZml4ICsga2V5IDoga2V5O1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGl0ZXJhdGVFeHRyYU9wdGlvbnModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWUgKyAnLicsIHNlZW4sIGhhbmRsZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGhhbmRsZXIobmFtZSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBoYW5kbGVyKG5hbWUsICh2YWx1ZSkgPyAnMScgOiAnMCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGFuZGxlIGV4dHJhIGNvbmZpZyB0eXBlOiAke3R5cGVvZiB2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuLyoqXG4gKiBjaGVjayB3ZWIgYXNzZW1ibHkgQVBJJ3MgbGFzdCBlcnJvciBhbmQgdGhyb3cgZXJyb3IgaWYgYW55IGVycm9yIG9jY3VycmVkLlxuICogQHBhcmFtIG1lc3NhZ2UgYSBtZXNzYWdlIHVzZWQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrTGFzdEVycm9yID0gKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBjb25zdCBzdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyYW1zT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDgpO1xuICAgIHdhc20uX09ydEdldExhc3RFcnJvcihwYXJhbXNPZmZzZXQsIHBhcmFtc09mZnNldCArIDQpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uSEVBUDMyW3BhcmFtc09mZnNldCAvIDRdO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZVBvaW50ZXIgPSB3YXNtLkhFQVBVMzJbcGFyYW1zT2Zmc2V0IC8gNCArIDFdO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZVBvaW50ZXIgPyB3YXNtLlVURjhUb1N0cmluZyhlcnJvck1lc3NhZ2VQb2ludGVyKSA6ICcnO1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttZXNzYWdlfSBFUlJPUl9DT0RFOiAke2Vycm9yQ29kZX0sIEVSUk9SX01FU1NBR0U6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2FsbG9jV2FzbVN0cmluZywgY2hlY2tMYXN0RXJyb3IsIGl0ZXJhdGVFeHRyYU9wdGlvbnN9IGZyb20gJy4vd2FzbS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzZXRSdW5PcHRpb25zID0gKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFtudW1iZXIsIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBsZXQgcnVuT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGNvbnN0IGFsbG9jczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBydW5PcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnM/LmxvZ1NldmVyaXR5TGV2ZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsID0gMjsgIC8vIERlZmF1bHQgdG8gd2FybmluZ1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCkgfHxcbiAgICAgICAgb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsIDwgMCB8fCBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPiA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyBzZXJ2ZXJpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke29wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ubG9nVmVyYm9zaXR5TGV2ZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVuT3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCA9IDA7ICAvLyBEZWZhdWx0IHRvIDBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy50ZXJtaW5hdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVuT3B0aW9ucy50ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgdGFnRGF0YU9mZnNldCA9IDA7XG4gICAgaWYgKG9wdGlvbnM/LnRhZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YWdEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG9wdGlvbnMudGFnLCBhbGxvY3MpO1xuICAgIH1cblxuICAgIHJ1bk9wdGlvbnNIYW5kbGUgPSB3YXNtLl9PcnRDcmVhdGVSdW5PcHRpb25zKFxuICAgICAgICBydW5PcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwhLCBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsISwgISFydW5PcHRpb25zLnRlcm1pbmF0ZSEsIHRhZ0RhdGFPZmZzZXQpO1xuICAgIGlmIChydW5PcHRpb25zSGFuZGxlID09PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBjcmVhdGUgcnVuIG9wdGlvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmV4dHJhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGl0ZXJhdGVFeHRyYU9wdGlvbnMob3B0aW9ucy5leHRyYSwgJycsIG5ldyBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuXG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRSdW5Db25maWdFbnRyeShydW5PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIHJ1biBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3J1bk9wdGlvbnNIYW5kbGUsIGFsbG9jc107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuICAgIGFsbG9jcy5mb3JFYWNoKGFsbG9jID0+IHdhc20uX2ZyZWUoYWxsb2MpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7Z2V0SW5zdGFuY2V9IGZyb20gJy4vd2FzbS1mYWN0b3J5JztcbmltcG9ydCB7YWxsb2NXYXNtU3RyaW5nLCBjaGVja0xhc3RFcnJvciwgaXRlcmF0ZUV4dHJhT3B0aW9uc30gZnJvbSAnLi93YXNtLXV0aWxzJztcblxuY29uc3QgZ2V0R3JhcGhPcHRpbXphdGlvbkxldmVsID0gKGdyYXBoT3B0aW1pemF0aW9uTGV2ZWw6IHN0cmluZ3x1bmtub3duKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChncmFwaE9wdGltaXphdGlvbkxldmVsKSB7XG4gICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSAnZXh0ZW5kZWQnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgIHJldHVybiA5OTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBncmFwaCBvcHRpbWl6YXRpb24gbGV2ZWw6ICR7Z3JhcGhPcHRpbWl6YXRpb25MZXZlbH1gKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0RXhlY3V0aW9uTW9kZSA9IChleGVjdXRpb25Nb2RlOiAnc2VxdWVudGlhbCd8J3BhcmFsbGVsJyk6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAoZXhlY3V0aW9uTW9kZSkge1xuICAgIGNhc2UgJ3NlcXVlbnRpYWwnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAncGFyYWxsZWwnOlxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZXhlY3V0aW9uIG1vZGU6ICR7ZXhlY3V0aW9uTW9kZX1gKTtcbiAgfVxufTtcblxuY29uc3QgYXBwZW5kRGVmYXVsdE9wdGlvbnMgPSAob3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBpZiAoIW9wdGlvbnMuZXh0cmEpIHtcbiAgICBvcHRpb25zLmV4dHJhID0ge307XG4gIH1cbiAgaWYgKCFvcHRpb25zLmV4dHJhLnNlc3Npb24pIHtcbiAgICBvcHRpb25zLmV4dHJhLnNlc3Npb24gPSB7fTtcbiAgfVxuICBjb25zdCBzZXNzaW9uID0gb3B0aW9ucy5leHRyYS5zZXNzaW9uIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGlmICghc2Vzc2lvbi51c2Vfb3J0X21vZGVsX2J5dGVzX2RpcmVjdGx5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICAgIHNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSA9ICcxJztcbiAgfVxuXG4gIC8vIGlmIHVzaW5nIEpTRVAgd2l0aCBXZWJHUFUsIGFsd2F5cyBkaXNhYmxlIG1lbW9yeSBwYXR0ZXJuXG4gIGlmIChvcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycyAmJlxuICAgICAgb3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMuc29tZShlcCA9PiAodHlwZW9mIGVwID09PSAnc3RyaW5nJyA/IGVwIDogZXAubmFtZSkgPT09ICd3ZWJncHUnKSkge1xuICAgIG9wdGlvbnMuZW5hYmxlTWVtUGF0dGVybiA9IGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBzZXRFeGVjdXRpb25Qcm92aWRlcnMgPVxuICAgIChzZXNzaW9uT3B0aW9uc0hhbmRsZTogbnVtYmVyLCBleGVjdXRpb25Qcm92aWRlcnM6IHJlYWRvbmx5IEluZmVyZW5jZVNlc3Npb24uRXhlY3V0aW9uUHJvdmlkZXJDb25maWdbXSxcbiAgICAgYWxsb2NzOiBudW1iZXJbXSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBlcCBvZiBleGVjdXRpb25Qcm92aWRlcnMpIHtcbiAgICAgICAgbGV0IGVwTmFtZSA9IHR5cGVvZiBlcCA9PT0gJ3N0cmluZycgPyBlcCA6IGVwLm5hbWU7XG5cbiAgICAgICAgLy8gY2hlY2sgRVAgbmFtZVxuICAgICAgICBzd2l0Y2ggKGVwTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ3dlYm5uJzpcbiAgICAgICAgICAgIGVwTmFtZSA9ICdXRUJOTic7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zdCB3ZWJubk9wdGlvbnMgPSBlcCBhcyBJbmZlcmVuY2VTZXNzaW9uLldlYk5ORXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/LmRldmljZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdkZXZpY2VUeXBlJywgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcod2Vibm5PcHRpb25zLmRldmljZVR5cGUsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT1cbiAgICAgICAgICAgICAgICAgICAgMCkge1xuICAgICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAnZGV2aWNlVHlwZScgLSAke3dlYm5uT3B0aW9ucy5kZXZpY2VUeXBlfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHdlYm5uT3B0aW9ucz8ubnVtVGhyZWFkcykge1xuICAgICAgICAgICAgICAgIGxldCBudW1UaHJlYWRzID0gd2Vibm5PcHRpb25zLm51bVRocmVhZHM7XG4gICAgICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgaW52YWxpZCB3ZWJubk9wdGlvbnMubnVtVGhyZWFkcy5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG51bVRocmVhZHMgIT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIobnVtVGhyZWFkcykgfHwgbnVtVGhyZWFkcyA8IDApIHtcbiAgICAgICAgICAgICAgICAgIG51bVRocmVhZHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdudW1UaHJlYWRzJywgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcobnVtVGhyZWFkcy50b1N0cmluZygpLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ251bVRocmVhZHMnIC0gJHt3ZWJubk9wdGlvbnMubnVtVGhyZWFkc30uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/LnBvd2VyUHJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ3Bvd2VyUHJlZmVyZW5jZScsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYm5uT3B0aW9ucy5wb3dlclByZWZlcmVuY2UsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT1cbiAgICAgICAgICAgICAgICAgICAgMCkge1xuICAgICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAncG93ZXJQcmVmZXJlbmNlJyAtICR7d2Vibm5PcHRpb25zLnBvd2VyUHJlZmVyZW5jZX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd3ZWJncHUnOlxuICAgICAgICAgICAgZXBOYW1lID0gJ0pTJztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdlYmdwdU9wdGlvbnMgPSBlcCBhcyBJbmZlcmVuY2VTZXNzaW9uLldlYkdwdUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgICAgICAgICAgICBpZiAod2ViZ3B1T3B0aW9ucz8ucHJlZmVycmVkTGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0ICE9PSAnTkNIVycgJiYgd2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXQgIT09ICdOSFdDJykge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVmZXJyZWRMYXlvdXQgbXVzdCBiZSBlaXRoZXIgJ05DSFcnIG9yICdOSFdDJzogJHt3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygncHJlZmVycmVkTGF5b3V0JywgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcod2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXQsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT1cbiAgICAgICAgICAgICAgICAgICAgMCkge1xuICAgICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAncHJlZmVycmVkTGF5b3V0JyAtICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2FzbSc6XG4gICAgICAgICAgY2FzZSAnY3B1JzpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBzdXBwb3J0ZWQgZXhlY3V0aW9uIHByb3ZpZGVyOiAke2VwTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVwTmFtZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoZXBOYW1lLCBhbGxvY3MpO1xuICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXIoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGVwTmFtZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFwcGVuZCBleGVjdXRpb24gcHJvdmlkZXI6ICR7ZXBOYW1lfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uT3B0aW9ucyA9IChvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFtudW1iZXIsIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBsZXQgc2Vzc2lvbk9wdGlvbnNIYW5kbGUgPSAwO1xuICBjb25zdCBhbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3Qgc2Vzc2lvbk9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBhcHBlbmREZWZhdWx0T3B0aW9ucyhzZXNzaW9uT3B0aW9ucyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBncmFwaE9wdGltaXphdGlvbkxldmVsID0gZ2V0R3JhcGhPcHRpbXphdGlvbkxldmVsKHNlc3Npb25PcHRpb25zLmdyYXBoT3B0aW1pemF0aW9uTGV2ZWwgPz8gJ2FsbCcpO1xuICAgIGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBnZXRFeGVjdXRpb25Nb2RlKHNlc3Npb25PcHRpb25zLmV4ZWN1dGlvbk1vZGUgPz8gJ3NlcXVlbnRpYWwnKTtcbiAgICBjb25zdCBsb2dJZERhdGFPZmZzZXQgPVxuICAgICAgICB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMubG9nSWQgPT09ICdzdHJpbmcnID8gYWxsb2NXYXNtU3RyaW5nKHNlc3Npb25PcHRpb25zLmxvZ0lkLCBhbGxvY3MpIDogMDtcblxuICAgIGNvbnN0IGxvZ1NldmVyaXR5TGV2ZWwgPSBzZXNzaW9uT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsID8/IDI7ICAvLyBEZWZhdWx0IHRvIDIgLSB3YXJuaW5nXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxvZ1NldmVyaXR5TGV2ZWwpIHx8IGxvZ1NldmVyaXR5TGV2ZWwgPCAwIHx8IGxvZ1NldmVyaXR5TGV2ZWwgPiA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyBzZXJ2ZXJpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke2xvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nVmVyYm9zaXR5TGV2ZWwgPSBzZXNzaW9uT3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCA/PyAwOyAgLy8gRGVmYXVsdCB0byAwIC0gdmVyYm9zZVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dWZXJib3NpdHlMZXZlbCkgfHwgbG9nVmVyYm9zaXR5TGV2ZWwgPCAwIHx8IGxvZ1ZlcmJvc2l0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpbWl6ZWRNb2RlbEZpbGVQYXRoT2Zmc2V0ID0gdHlwZW9mIHNlc3Npb25PcHRpb25zLm9wdGltaXplZE1vZGVsRmlsZVBhdGggPT09ICdzdHJpbmcnID9cbiAgICAgICAgYWxsb2NXYXNtU3RyaW5nKHNlc3Npb25PcHRpb25zLm9wdGltaXplZE1vZGVsRmlsZVBhdGgsIGFsbG9jcykgOlxuICAgICAgICAwO1xuXG4gICAgc2Vzc2lvbk9wdGlvbnNIYW5kbGUgPSB3YXNtLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucyhcbiAgICAgICAgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCwgISFzZXNzaW9uT3B0aW9ucy5lbmFibGVDcHVNZW1BcmVuYSwgISFzZXNzaW9uT3B0aW9ucy5lbmFibGVNZW1QYXR0ZXJuLCBleGVjdXRpb25Nb2RlLFxuICAgICAgICAhIXNlc3Npb25PcHRpb25zLmVuYWJsZVByb2ZpbGluZywgMCwgbG9nSWREYXRhT2Zmc2V0LCBsb2dTZXZlcml0eUxldmVsLCBsb2dWZXJib3NpdHlMZXZlbCxcbiAgICAgICAgb3B0aW1pemVkTW9kZWxGaWxlUGF0aE9mZnNldCk7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlID09PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBjcmVhdGUgc2Vzc2lvbiBvcHRpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uT3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMpIHtcbiAgICAgIHNldEV4ZWN1dGlvblByb3ZpZGVycyhzZXNzaW9uT3B0aW9uc0hhbmRsZSwgc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLCBhbGxvY3MpO1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2Vzc2lvbk9wdGlvbnMuZnJlZURpbWVuc2lvbk92ZXJyaWRlcykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nOiAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcobmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20uX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZShzZXNzaW9uT3B0aW9uc0hhbmRsZSwgbmFtZU9mZnNldCwgdmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlOiAke25hbWV9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXh0cmEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgJycsIG5ldyBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuXG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbi8vIFRoaXMgZmlsZSBpbmNsdWRlcyBjb21tb24gZGVmaW5pdGlvbnMuIFRoZXkgZG8gTk9UIGhhdmUgZGVwZW5kZW5jeSBvbiB0aGUgV2ViQXNzZW1ibHkgaW5zdGFuY2UuXG5cbi8qKlxuICogQ29waWVkIGZyb20gT05OWCBkZWZpbml0aW9uLiBVc2UgdGhpcyB0byBkcm9wIGRlcGVuZGVuY3kgJ29ubnhfcHJvdG8nIHRvIGRlY3JlYXNlIGNvbXBpbGVkIC5qcyBmaWxlIHNpemUuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIERhdGFUeXBlIHtcbiAgdW5kZWZpbmVkID0gMCxcbiAgZmxvYXQgPSAxLFxuICB1aW50OCA9IDIsXG4gIGludDggPSAzLFxuICB1aW50MTYgPSA0LFxuICBpbnQxNiA9IDUsXG4gIGludDMyID0gNixcbiAgaW50NjQgPSA3LFxuICBzdHJpbmcgPSA4LFxuICBib29sID0gOSxcbiAgZmxvYXQxNiA9IDEwLFxuICBkb3VibGUgPSAxMSxcbiAgdWludDMyID0gMTIsXG4gIHVpbnQ2NCA9IDEzLFxuICBjb21wbGV4NjQgPSAxNCxcbiAgY29tcGxleDEyOCA9IDE1LFxuICBiZmxvYXQxNiA9IDE2XG59XG5cbi8qKlxuICogTWFwIHN0cmluZyB0ZW5zb3IgZGF0YSB0byBlbnVtIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bSA9ICh0eXBlOiBzdHJpbmcpOiBEYXRhVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDg7XG4gICAgY2FzZSAndWludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQ4O1xuICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmJvb2w7XG4gICAgY2FzZSAnaW50MTYnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDE2O1xuICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDE2O1xuICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5pbnQzMjtcbiAgICBjYXNlICd1aW50MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQzMjtcbiAgICBjYXNlICdmbG9hdDE2JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5mbG9hdDE2O1xuICAgIGNhc2UgJ2Zsb2F0MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmZsb2F0O1xuICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmRvdWJsZTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnN0cmluZztcbiAgICBjYXNlICdpbnQ2NCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50NjQ7XG4gICAgY2FzZSAndWludDY0JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS51aW50NjQ7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBNYXAgZW51bSB2YWx1ZSB0byBzdHJpbmcgdGVuc29yIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nID0gKHR5cGVQcm90bzogRGF0YVR5cGUpOiBUZW5zb3IuVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZVByb3RvKSB7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQ4OlxuICAgICAgcmV0dXJuICdpbnQ4JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ4OlxuICAgICAgcmV0dXJuICd1aW50OCc7XG4gICAgY2FzZSBEYXRhVHlwZS5ib29sOlxuICAgICAgcmV0dXJuICdib29sJztcbiAgICBjYXNlIERhdGFUeXBlLmludDE2OlxuICAgICAgcmV0dXJuICdpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MTY6XG4gICAgICByZXR1cm4gJ3VpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQzMjpcbiAgICAgIHJldHVybiAnaW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDMyOlxuICAgICAgcmV0dXJuICd1aW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUuZmxvYXQxNjpcbiAgICAgIHJldHVybiAnZmxvYXQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5mbG9hdDpcbiAgICAgIHJldHVybiAnZmxvYXQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS5kb3VibGU6XG4gICAgICByZXR1cm4gJ2Zsb2F0NjQnO1xuICAgIGNhc2UgRGF0YVR5cGUuc3RyaW5nOlxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50NjQ6XG4gICAgICByZXR1cm4gJ2ludDY0JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ2NDpcbiAgICAgIHJldHVybiAndWludDY0JztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlUHJvdG99YCk7XG4gIH1cbn07XG5cbi8qKlxuICogZ2V0IHRlbnNvciBlbGVtZW50IHNpemUgaW4gYnl0ZXMgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICogQHJldHVybnMgc2l6ZSBpbiBpbnRlZ2VyIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRlbnNvckVsZW1lbnRTaXplID0gKGRhdGVUeXBlOiBudW1iZXIpOiBudW1iZXJ8XG4gICAgdW5kZWZpbmVkID0+IFt1bmRlZmluZWQsIDQsIDEsIDEsIDIsIDIsIDQsIDgsIHVuZGVmaW5lZCwgMSwgMiwgOCwgNCwgOCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1bZGF0ZVR5cGVdO1xuXG4vKipcbiAqIGdldCB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciBieSB0aGUgZ2l2ZW4gdGVuc29yIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3RvciA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBJbnQ4QXJyYXlDb25zdHJ1Y3RvcnxVaW50MTZBcnJheUNvbnN0cnVjdG9yfEludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfFxuICAgIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3IgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Zsb2F0MTYnOlxuICAgICAgICAgIHJldHVybiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTtcbiAgICAgICAgY2FzZSAndWludDgnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdpbnQ4JzpcbiAgICAgICAgICByZXR1cm4gSW50OEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MTYnOlxuICAgICAgICAgIHJldHVybiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnaW50MTYnOlxuICAgICAgICAgIHJldHVybiBJbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdpbnQzMic6XG4gICAgICAgICAgcmV0dXJuIEludDMyQXJyYXk7XG4gICAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdmbG9hdDY0JzpcbiAgICAgICAgICByZXR1cm4gRmxvYXQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MzInOlxuICAgICAgICAgIHJldHVybiBVaW50MzJBcnJheTtcbiAgICAgICAgY2FzZSAnaW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdJbnQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdVaW50NjRBcnJheTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9O1xuXG4vKipcbiAqIE1hcCBzdHJpbmcgbG9nIGxldmVsIHRvIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0xldmVsU3RyaW5nVG9FbnVtID0gKGxvZ0xldmVsPzogJ3ZlcmJvc2UnfCdpbmZvJ3wnd2FybmluZyd8J2Vycm9yJ3wnZmF0YWwnKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2dMZXZlbCkge1xuICAgIGNhc2UgJ3ZlcmJvc2UnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnaW5mbyc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGNhc2UgJ2ZhdGFsJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvZ2dpbmcgbGV2ZWw6ICR7bG9nTGV2ZWx9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdGVuc29yIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IEdQVSBidWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IHR5cGUgaXMgVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcyA9PiB0eXBlID09PSAnZmxvYXQzMicgfHxcbiAgICB0eXBlID09PSAnaW50MzInIHx8IHR5cGUgPT09ICdpbnQ2NCcgfHwgdHlwZSA9PT0gJ2Jvb2wnIHx8IHR5cGUgPT09ICdmbG9hdDE2JyB8fCB0eXBlID09PSAndWludDMyJztcblxuLyoqXG4gKiBNYXAgc3RyaW5nIGRhdGEgbG9jYXRpb24gdG8gaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtID0gKGxvY2F0aW9uOiBUZW5zb3IuRGF0YUxvY2F0aW9uKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2NhdGlvbikge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnY3B1JzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICByZXR1cm4gMztcbiAgICBjYXNlICdncHUtYnVmZmVyJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgbG9jYXRpb246ICR7bG9jYXRpb259YCk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFwIGludGVnZXIgZGF0YSBsb2NhdGlvbiB0byBzdHJpbmcgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFMb2NhdGlvbkVudW1Ub1N0cmluZyA9IChsb2NhdGlvbjogbnVtYmVyKTogVGVuc29yLkRhdGFMb2NhdGlvbnx1bmRlZmluZWQgPT5cbiAgICAoWydub25lJywgJ2NwdScsICdjcHUtcGlubmVkJywgJ3RleHR1cmUnLCAnZ3B1LWJ1ZmZlciddIGFzIGNvbnN0KVtsb2NhdGlvbl07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIExvYWQgYSBmaWxlIGludG8gYSBVaW50OEFycmF5LlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gdGhlIGZpbGUgdG8gbG9hZC4gQ2FuIGJlIGEgVVJML3BhdGgsIGEgQmxvYiwgYW4gQXJyYXlCdWZmZXIsIG9yIGEgVWludDhBcnJheS5cbiAqIEByZXR1cm5zIGEgVWludDhBcnJheSBjb250YWluaW5nIHRoZSBmaWxlIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZSA9IGFzeW5jKGZpbGU6IHN0cmluZ3xCbG9ifEFycmF5QnVmZmVyTGlrZXxVaW50OEFycmF5KTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAvLyBsb2FkIGZpbGUgaW50byBBcnJheUJ1ZmZlciBpbiBOb2RlLmpzXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVhZEZpbGUoZmlsZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSAnRVJSX0ZTX0ZJTEVfVE9PX0xBUkdFJykge1xuICAgICAgICAgIC8vIGZpbGUgaXMgdG9vIGxhcmdlLCB1c2UgZnMuY3JlYXRlUmVhZFN0cmVhbSBpbnN0ZWFkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICAgICAgICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvYWQgZmlsZSBpbnRvIEFycmF5QnVmZmVyIGluIGJyb3dzZXJzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRhdGEgZmlsZTogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudExlbmd0aEhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgY29uc3QgZmlsZVNpemUgPSBjb250ZW50TGVuZ3RoSGVhZGVyID8gcGFyc2VJbnQoY29udGVudExlbmd0aEhlYWRlciwgMTApIDogMDtcbiAgICAgIGlmIChmaWxlU2l6ZSA8IDEwNzM3NDE4MjQgLyogMUdCICovKSB7XG4gICAgICAgIC8vIHdoZW4gQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIG5vdCBzZXQsIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZS4gV2UgYXNzdW1lIGl0IGlzIHNtYWxsIGVub3VnaCB0b1xuICAgICAgICAvLyBsb2FkIGludG8gbWVtb3J5LlxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmaWxlIGlzIHRvbyBsYXJnZSwgdXNlIHN0cmVhbSBpbnN0ZWFkXG4gICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGF0YSBmaWxlOiAke2ZpbGV9LCBubyByZXNwb25zZSBib2R5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gY3JlYXRlIEFycmF5QnVmZmVyIGRpcmVjdGx5XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGZpbGVTaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgICAgICAgLy8gdXNlIFdlYkFzc2VtYmx5IE1lbW9yeSB0byBhbGxvY2F0ZSBsYXJnZXIgQXJyYXlCdWZmZXJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGZpbGVTaXplIC8gNjU1MzYpO1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogcGFnZXMsIG1heGltdW06IHBhZ2VzfSkuYnVmZmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgY2h1bmsuc2V0KHZhbHVlKTtcbiAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIsIDAsIGZpbGVTaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpO1xuICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGZpbGUpO1xuICB9XG59O1xuIiwgImV4cG9ydCBjb25zdCByZWFkRmlsZSA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgcmVhZEZpbGVTeW5jID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCBjcmVhdGVSZWFkU3RyZWFtID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtFbnYsIEluZmVyZW5jZVNlc3Npb24sIFRlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciwgU2VyaWFsaXphYmxlU2Vzc2lvbk1ldGFkYXRhLCBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YSwgVGVuc29yTWV0YWRhdGF9IGZyb20gJy4vcHJveHktbWVzc2FnZXMnO1xuaW1wb3J0IHtzZXRSdW5PcHRpb25zfSBmcm9tICcuL3J1bi1vcHRpb25zJztcbmltcG9ydCB7c2V0U2Vzc2lvbk9wdGlvbnN9IGZyb20gJy4vc2Vzc2lvbi1vcHRpb25zJztcbmltcG9ydCB7ZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtLCBnZXRUZW5zb3JFbGVtZW50U2l6ZSwgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlLCBsb2dMZXZlbFN0cmluZ1RvRW51bSwgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcsIHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtLCB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3J9IGZyb20gJy4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuaW1wb3J0IHtsb2FkRmlsZX0gZnJvbSAnLi93YXNtLXV0aWxzLWxvYWQtZmlsZSc7XG5cbi8vICNyZWdpb24gSW5pdGlhbGl6YXRpb25zXG5cbi8qKlxuICogVGhlcmUgYXJlIDQgZGlmZmVyZW50IFwiaW5pdGlhbGl6YXRpb25cIiBzdGVwcyBmb3IgT1JULiBUaGV5IGhhcHBlbiBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCBkaWZmZXJlbnQgdGltZS5cbiAqXG4gKiAxLiBKYXZhU2NyaXB0IGluaXRpYWxpemF0aW9uIGZvciBvbm54cnVudGltZS1jb21tb24gYW5kIG9ubnhydW50aW1lLXdlYi5cbiAqICAgIFRoaXMgaXMgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHN0ZXAuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIGNhbGxzIG9ubnhydW50aW1lLWNvbW1vbidzIHJlZ2lzdGVyQmFja2VuZCgpXG4gKiBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBhbGwgdGhlIGF2YWlsYWJsZSBiYWNrZW5kcy4gVGhlIGJhY2tlbmQgcmVnaXN0cmF0aW9uIGlzIHZlcnkgZmFzdC4gSXQgb25seVxuICogcmVnaXN0ZXJzIHRoZSBiYWNrZW5kIG5hbWUgd2l0aCB0aGUgdW5pbml0aWFsaXplZCBiYWNrZW5kIG9iamVjdC4gTm8gaGVhdnkgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICBSZWZlciB0byB3ZWIvbGliL2luZGV4LnRzIGZvciB0aGUgYmFja2VuZCByZWdpc3RyYXRpb24uXG4gKlxuICogMi4gV2ViQXNzZW1ibHkgYXJ0aWZhY3QgaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBhbnkgcmVnaXN0ZXJlZCB3YXNtIGJhY2tlbmQgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGllLiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yXG4gKiBgb3J0LlRyYWluaW5nU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkKS4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGUgZm9sbG93aW5nczpcbiAqICAgICAtIGNyZWF0ZSBhIHByb3h5IHdvcmtlciBhbmQgbWFrZSBzdXJlIHRoZSBwcm94eSB3b3JrZXIgaXMgcmVhZHkgdG8gcmVjZWl2ZSBtZXNzYWdlcywgaWYgcHJveHkgaXMgZW5hYmxlZC5cbiAqICAgICAtIHBlcmZvcm0gZmVhdHVyZSBkZXRlY3Rpb24sIGxvY2F0ZSBjb3JyZWN0IFdlYkFzc2VtYmx5IGFydGlmYWN0IHBhdGggYW5kIGNhbGwgdGhlIEVtc2NyaXB0ZW4gZ2VuZXJhdGVkXG4gKiBKYXZhU2NyaXB0IGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgV2ViQXNzZW1ibHkgcnVudGltZS5cbiAqICAgICAgICAgLSBpZiBwcm94eSBpcyBlbmFibGVkLCB0aGlzIHN0ZXAgaGFwcGVucyBpbiB0aGUgcHJveHkgd29ya2VyIHVzaW5nIG1lc3NhZ2UgJ2luaXQtd2FzbScuXG4gKiAgICAgICAgIC0gZG93bmxvYWRpbmcgdGhlICdvcnQtd2FzbXsuLi59Lndhc20nIGZpbGUgaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICAgICAgIC0gaWYgbXVsdGktdGhyZWFkIGlzIGVuYWJsZWQsIG9uZSBvciBtb3JlIHdlYndvcmtlciB3aWxsIGJlIGNyZWF0ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUFRocmVhZCB0aHJlYWRwb29sLlxuICpcbiAqIDMuIE9SVCBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqICAgIFRoaXMgaGFwcGVucyBhZnRlciBzdGVwIDIuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIHBlcmZvcm1zIE9OTlggUnVudGltZSBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqIEZ1bmN0aW9uIGBfT3J0SW5pdCgpYCBpcyBjYWxsZWQgaW4gdGhpcyBzdGVwLlxuICogICAgIC0gaWYgcHJveHkgaXMgZW5hYmxlZCwgdGhpcyBzdGVwIGhhcHBlbnMgaW4gdGhlIHByb3h5IHdvcmtlciB1c2luZyBtZXNzYWdlICdpbml0LW9ydCcuXG4gKiAgICAgLSBsb2dnaW5nIGxldmVsIChvcnQuZW52LmxvZ0xldmVsKSBhbmQgdGhyZWFkIG51bWJlciAob3J0LmVudi53YXNtLm51bVRocmVhZHMpIGFyZSBzZXQgaW4gdGhpcyBzdGVwLlxuICpcbiAqIDQuIFNlc3Npb24gaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yIGBvcnQuVHJhaW5pbmdTZXNzaW9uLmNyZWF0ZSgpYCBpcyBjYWxsZWQuIFVubGlrZSB0aGUgZmlyc3QgM1xuICogc3RlcHMgKHRoZXkgb25seSBjYWxsZWQgb25jZSksIHRoaXMgc3RlcCB3aWxsIGJlIGRvbmUgZm9yIGVhY2ggc2Vzc2lvbi4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGVcbiAqIGZvbGxvd2luZ3M6XG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVVJMOlxuICogICAgLSBkb3dubG9hZCB0aGUgbW9kZWwgZGF0YSBmcm9tIHRoZSBVUkwuXG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gZGVyZWZlcmVuY2UgdGhlIG1vZGVsIGJ1ZmZlci4gVGhpcyBzdGVwIGFsbG93cyB0aGUgb3JpZ2luYWwgQXJyYXlCdWZmZXIgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gKiAgICAtIGNhbGwgYF9PcnRDcmVhdGVTZXNzaW9uKClgIHRvIGNyZWF0ZSB0aGUgc2Vzc2lvbi4gKHByb3h5OiAnY3JlYXRlJylcbiAqXG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVWludDhBcnJheSBvYmplY3Q6XG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gY2FsbCBgX09ydENyZWF0ZVNlc3Npb24oKWAgdG8gY3JlYXRlIHRoZSBzZXNzaW9uLiAocHJveHk6ICdjcmVhdGUnKVxuICpcbiAqXG4gKi9cblxuLyoqXG4gKiBpbml0aWFsaXplIE9SVCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcGFyYW0gbnVtVGhyZWFkcyBTZXRHbG9iYWxJbnRyYU9wTnVtVGhyZWFkcyhudW1UaHJlYWRzKVxuICogQHBhcmFtIGxvZ2dpbmdMZXZlbCBDcmVhdGVFbnYoc3RhdGljX2Nhc3Q8T3J0TG9nZ2luZ0xldmVsPihsb2dnaW5nX2xldmVsKSlcbiAqL1xuY29uc3QgaW5pdE9ydCA9IChudW1UaHJlYWRzOiBudW1iZXIsIGxvZ2dpbmdMZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IGVycm9yQ29kZSA9IGdldEluc3RhbmNlKCkuX09ydEluaXQobnVtVGhyZWFkcywgbG9nZ2luZ0xldmVsKTtcbiAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGluaXRpYWxpemUgb25ueHJ1bnRpbWUuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogaW50aWFsaXplIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gZW52IHBhc3NlZCBpbiB0aGUgZW52aXJvbm1lbnQgY29uZmlnIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRSdW50aW1lID0gYXN5bmMoZW52OiBFbnYpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgLy8gaW5pdCBPUlRcbiAgaW5pdE9ydChlbnYud2FzbS5udW1UaHJlYWRzISwgbG9nTGV2ZWxTdHJpbmdUb0VudW0oZW52LmxvZ0xldmVsKSk7XG59O1xuXG4vKipcbiAqIHBlcmZvcm0gRVAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uXG4gKlxuICogQHBhcmFtIGVudlxuICogQHBhcmFtIGVwTmFtZVxuICovXG5leHBvcnQgY29uc3QgaW5pdEVwID0gYXN5bmMoZW52OiBFbnYsIGVwTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBlcE5hbWUgPT09ICd3ZWJncHUnKSB7XG4gICAgLy8gcGVyZm9ybSBXZWJHUFUgYXZhaWxhYmlsaXR5IGNoZWNrXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8ICFuYXZpZ2F0b3IuZ3B1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYkdQVSBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQnKTtcbiAgICB9XG4gICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTtcbiAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRmFpbGVkIHRvIGdldCBHUFUgYWRhcHRlci4gWW91IG1heSBuZWVkIHRvIGVuYWJsZSBmbGFnIFwiLS1lbmFibGUtdW5zYWZlLXdlYmdwdVwiIGlmIHlvdSBhcmUgdXNpbmcgQ2hyb21lLicpO1xuICAgIH1cblxuICAgIGlmICghZW52Lndhc20uc2ltZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdOb3Qgc3VwcG9ydGVkIGZvciBXZWJHUFU9T04gYW5kIFNJTUQ9T0ZGLiBQbGVhc2Ugc2V0IGBlbnYud2FzbS5zaW1kYCB0byB0cnVlIHdoZW4gdXNpbmcgYHdlYmdwdWAgRVAnKTtcbiAgICB9XG5cbiAgICAvLyBpbml0IEpTRVAgaWYgYXZhaWxhYmxlXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IGluaXRKc2VwID0gcmVxdWlyZSgnLi9qc2VwL2luaXQnKS5pbml0O1xuICAgIGF3YWl0IGluaXRKc2VwKGdldEluc3RhbmNlKCksIGVudiwgYWRhcHRlcik7XG4gIH1cbn07XG5cbi8vICNlbmRyZWdpb24gSW5pdGlhbGl6YXRpb25zXG5cbi8qKlxuICogdmFsaWQgZGF0YSBsb2NhdGlvbnMgZm9yIGlucHV0L291dHB1dCB0ZW5zb3JzLlxuICovXG50eXBlIFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0ID0gJ2NwdSd8J2NwdS1waW5uZWQnfCdncHUtYnVmZmVyJztcblxudHlwZSBJT0JpbmRpbmdTdGF0ZSA9IHtcbiAgLyoqXG4gICAqIHRoZSBoYW5kbGUgb2YgSU8gYmluZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGZvciBlYWNoIG91dHB1dCB0ZW5zb3IuXG4gICAqXG4gICAqIHZhbHVlIGlzIG9uZSBvZiAnY3B1JywgJ2NwdS1waW5uZWQnLCAnZ3B1LWJ1ZmZlcicuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnM6IHJlYWRvbmx5IFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0W107XG5cbiAgLyoqXG4gICAqIGVudW0gdmFsdWUgb2YgdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBmb3IgZWFjaCBvdXRwdXQgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZDogcmVhZG9ubHkgbnVtYmVyW107XG59O1xuXG4vKipcbiAqICB0dXBsZSBlbGVtZW50cyBhcmU6IEluZmVyZW5jZVNlc3Npb24gSUQ7IGlucHV0TmFtZXNVVEY4RW5jb2RlZDsgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZDsgYmluZGluZ1N0YXRlXG4gKi9cbnR5cGUgU2Vzc2lvbk1ldGFkYXRhID0gW1xuICBpbmZlcmVuY2VTZXNzaW9uSWQ6IG51bWJlciwgaW5wdXROYW1lc1VURjhFbmNvZGVkOiBudW1iZXJbXSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZDogbnVtYmVyW10sXG4gIGJpbmRpbmdTdGF0ZTogSU9CaW5kaW5nU3RhdGV8bnVsbFxuXTtcblxuY29uc3QgYWN0aXZlU2Vzc2lvbnMgPSBuZXcgTWFwPG51bWJlciwgU2Vzc2lvbk1ldGFkYXRhPigpO1xuXG4vKipcbiAqIGdldCB0aGUgaW5wdXQvb3V0cHV0IGNvdW50IG9mIHRoZSBzZXNzaW9uLlxuICogQHBhcmFtIHNlc3Npb25IYW5kbGUgdGhlIGhhbmRsZSByZXByZXNlbnRpbmcgdGhlIHNlc3Npb24uIHNob3VsZCBiZSBub24temVyby5cbiAqIEByZXR1cm5zIGEgdHVwbGUgaW5jbHVkaW5nIDIgbnVtYmVycywgcmVwcmVzZW50aW5nIHRoZSBpbnB1dCBjb3VudCBhbmQgb3V0cHV0IGNvdW50LlxuICovXG5jb25zdCBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudCA9IChzZXNzaW9uSGFuZGxlOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDgpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEdldElucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSwgZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIDQpO1xuICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBzZXNzaW9uIGlucHV0L291dHB1dCBjb3VudC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIFt3YXNtLkhFQVAzMltkYXRhT2Zmc2V0IC8gNF0sIHdhc20uSEVBUDMyW2RhdGFPZmZzZXQgLyA0ICsgMV1dO1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBhbGxvY2F0ZSB0aGUgbWVtb3J5IGFuZCBtZW1jcHkgdGhlIGV4dGVybmFsIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gbW9kZWwgLSB0aGUgZXh0ZXJuYWwgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1vZGVsIGRhdGEuIE11c3Qgbm90IGJlIHRoZSBzYW1lIGJ1ZmZlciBhcyB0aGUgV0FTTSBoZWFwLlxuICogQHJldHVybnMgYSAyLWVsZW1lbnRzIHR1cGxlIC0gdGhlIHBvaW50ZXIgYW5kIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIgPSAobW9kZWw6IFVpbnQ4QXJyYXkpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IG1vZGVsRGF0YU9mZnNldCA9IHdhc20uX21hbGxvYyhtb2RlbC5ieXRlTGVuZ3RoKTtcbiAgaWYgKG1vZGVsRGF0YU9mZnNldCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGEgc2Vzc2lvbi4gZmFpbGVkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIG9mIHNpemUgJHttb2RlbC5ieXRlTGVuZ3RofS5gKTtcbiAgfVxuICB3YXNtLkhFQVBVOC5zZXQobW9kZWwsIG1vZGVsRGF0YU9mZnNldCk7XG4gIHJldHVybiBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbC5ieXRlTGVuZ3RoXTtcbn07XG5cbi8qKlxuICogY3JlYXRlIGFuIGluZmVyZW5jZSBzZXNzaW9uIGZyb20gYSBtb2RlbCBkYXRhIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gbW9kZWxEYXRhIC0gZWl0aGVyIGEgVWludDhBcnJheSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBtb2RlbCBkYXRhLCBvciBhIDItZWxlbWVudHMgdHVwbGUgY29udGFpbmluZyB0aGVcbiAqICAgICBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBtb2RlbCBkYXRhIGJ1ZmZlci5cbiAqIEBwYXJhbSBvcHRpb25zIGFuIG9wdGlvbmFsIHNlc3Npb24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyBhIDMtZWxlbWVudHMgdHVwbGUgY29udGFpbmluZyBbc2Vzc2lvbiBoYW5kbGUsIGlucHV0IG5hbWVzLCBvdXRwdXQgbmFtZXNdXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXNzaW9uID0gYXN5bmMoXG4gICAgbW9kZWxEYXRhOiBVaW50OEFycmF5fFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLFxuICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxTZXJpYWxpemFibGVTZXNzaW9uTWV0YWRhdGE+ID0+IHtcbiAgbGV0IG1vZGVsRGF0YU9mZnNldDogbnVtYmVyLCBtb2RlbERhdGFMZW5ndGg6IG51bWJlcjtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxEYXRhKSkge1xuICAgIC8vIGlmIG1vZGVsIGRhdGEgaXMgYW4gYXJyYXksIGl0IG11c3QgYmUgYSAyLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBvaW50ZXIgYW5kIHNpemUgb2YgdGhlIG1vZGVsIGRhdGFcbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gbW9kZWxEYXRhO1xuICB9IGVsc2UgaWYgKG1vZGVsRGF0YS5idWZmZXIgPT09IHdhc20uSEVBUFU4LmJ1ZmZlcikge1xuICAgIC8vIGlmIG1vZGVsIGRhdGEgdXNlcyB0aGUgc2FtZSBidWZmZXIgYXMgdGhlIFdBU00gaGVhcCwgd2UgZG9uJ3QgbmVlZCB0byBjb3B5IGl0LlxuICAgIFttb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aF0gPSBbbW9kZWxEYXRhLmJ5dGVPZmZzZXQsIG1vZGVsRGF0YS5ieXRlTGVuZ3RoXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UsIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC5cbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihtb2RlbERhdGEpO1xuICB9XG5cbiAgbGV0IHNlc3Npb25IYW5kbGUgPSAwO1xuICBsZXQgc2Vzc2lvbk9wdGlvbnNIYW5kbGUgPSAwO1xuICBsZXQgaW9CaW5kaW5nSGFuZGxlID0gMDtcbiAgbGV0IGFsbG9jczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gW107XG4gIGNvbnN0IG91dHB1dE5hbWVzVVRGOEVuY29kZWQgPSBbXTtcblxuICB0cnkge1xuICAgIFtzZXNzaW9uT3B0aW9uc0hhbmRsZSwgYWxsb2NzXSA9IHNldFNlc3Npb25PcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmV4dGVybmFsRGF0YSAmJiB3YXNtLm1vdW50RXh0ZXJuYWxEYXRhKSB7XG4gICAgICBjb25zdCBsb2FkaW5nUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRpb25zLmV4dGVybmFsRGF0YSkge1xuICAgICAgICBjb25zdCBwYXRoID0gdHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnID8gZmlsZSA6IGZpbGUucGF0aDtcbiAgICAgICAgbG9hZGluZ1Byb21pc2VzLnB1c2gobG9hZEZpbGUodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnID8gZmlsZSA6IGZpbGUuZGF0YSkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICB3YXNtLm1vdW50RXh0ZXJuYWxEYXRhIShwYXRoLCBkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3YWl0IGZvciBhbGwgZXh0ZXJuYWwgZGF0YSBmaWxlcyB0byBiZSBsb2FkZWRcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvYWRpbmdQcm9taXNlcyk7XG4gICAgfVxuXG4gICAgc2Vzc2lvbkhhbmRsZSA9IHdhc20uX09ydENyZWF0ZVNlc3Npb24obW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGgsIHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICBpZiAoc2Vzc2lvbkhhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIGEgc2Vzc2lvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBbaW5wdXRDb3VudCwgb3V0cHV0Q291bnRdID0gZ2V0U2Vzc2lvbklucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSk7XG5cbiAgICBjb25zdCBpbnB1dE5hbWVzID0gW107XG4gICAgY29uc3Qgb3V0cHV0TmFtZXMgPSBbXTtcbiAgICBjb25zdCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnM6IFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IHdhc20uX09ydEdldElucHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBhbiBpbnB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICBpbnB1dE5hbWVzLnB1c2god2FzbS5VVEY4VG9TdHJpbmcobmFtZSkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB3YXNtLl9PcnRHZXRPdXRwdXROYW1lKHNlc3Npb25IYW5kbGUsIGkpO1xuICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIG91dHB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgY29uc3QgbmFtZVN0cmluZyA9IHdhc20uVVRGOFRvU3RyaW5nKG5hbWUpO1xuICAgICAgb3V0cHV0TmFtZXMucHVzaChuYW1lU3RyaW5nKTtcblxuICAgICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdHlwZW9mIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICBvcHRpb25zLnByZWZlcnJlZE91dHB1dExvY2F0aW9uIDpcbiAgICAgICAgICAgIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uPy5bbmFtZVN0cmluZ10gPz8gJ2NwdSc7XG4gICAgICAgIGlmIChsb2NhdGlvbiAhPT0gJ2NwdScgJiYgbG9jYXRpb24gIT09ICdjcHUtcGlubmVkJyAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7bG9jYXRpb259LmApO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1c2UgSU8gYmluZGluZyBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIG91dHB1dCBpcyBwcmVmZmVyZWQgdG8gYmUgb24gR1BVLlxuICAgIGxldCBiaW5kaW5nU3RhdGU6IElPQmluZGluZ1N0YXRlfG51bGwgPSBudWxsO1xuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMuc29tZShsID0+IGwgPT09ICdncHUtYnVmZmVyJykpIHtcbiAgICAgIGlvQmluZGluZ0hhbmRsZSA9IHdhc20uX09ydENyZWF0ZUJpbmRpbmcoc2Vzc2lvbkhhbmRsZSk7XG4gICAgICBpZiAoaW9CaW5kaW5nSGFuZGxlID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBJTyBiaW5kaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBiaW5kaW5nU3RhdGUgPSB7XG4gICAgICAgIGhhbmRsZTogaW9CaW5kaW5nSGFuZGxlLFxuICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMsXG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWQ6IG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5tYXAobCA9PiBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obCkpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhY3RpdmVTZXNzaW9ucy5zZXQoc2Vzc2lvbkhhbmRsZSwgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgYmluZGluZ1N0YXRlXSk7XG4gICAgcmV0dXJuIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzLCBvdXRwdXROYW1lc107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG5cbiAgICBpZiAoaW9CaW5kaW5nSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlQmluZGluZyhpb0JpbmRpbmdIYW5kbGUpO1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLl9mcmVlKG1vZGVsRGF0YU9mZnNldCk7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG5cbiAgICAvLyB1bm1vdW50IGV4dGVybmFsIGRhdGEgaWYgbmVjZXNzYXJ5XG4gICAgd2FzbS51bm1vdW50RXh0ZXJuYWxEYXRhPy4oKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VTZXNzaW9uID0gKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlbGVhc2Ugc2Vzc2lvbi4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgfVxuICBjb25zdCBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZV0gPSBzZXNzaW9uO1xuXG4gIGlmIChpb0JpbmRpbmdTdGF0ZSkge1xuICAgIHdhc20uX09ydFJlbGVhc2VCaW5kaW5nKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gIH1cblxuICB3YXNtLmpzZXBVbnJlZ2lzdGVyQnVmZmVycz8uKHNlc3Npb25JZCk7XG5cbiAgaW5wdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG4gIG91dHB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb24oc2Vzc2lvbkhhbmRsZSk7XG4gIGFjdGl2ZVNlc3Npb25zLmRlbGV0ZShzZXNzaW9uSWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVJbnB1dE91dHB1dFRlbnNvciA9XG4gICAgKHRlbnNvcjogVGVuc29yTWV0YWRhdGF8bnVsbCwgdGVuc29ySGFuZGxlczogbnVtYmVyW10sIGFsbG9jczogbnVtYmVyW10sIHNlc3Npb25JZDogbnVtYmVyLCBpbmRleDogbnVtYmVyKTpcbiAgICAgICAgdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKCF0ZW5zb3IpIHtcbiAgICAgICAgICAgIHRlbnNvckhhbmRsZXMucHVzaCgwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yWzBdO1xuICAgICAgICAgIGNvbnN0IGRpbXMgPSB0ZW5zb3JbMV07XG4gICAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0ZW5zb3JbM107XG5cbiAgICAgICAgICBsZXQgcmF3RGF0YTogbnVtYmVyO1xuICAgICAgICAgIGxldCBkYXRhQnl0ZUxlbmd0aDogbnVtYmVyO1xuXG4gICAgICAgICAgaWYgKGRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiBsb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiBHUFUuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IHRlbnNvclsyXS5ncHVCdWZmZXIgYXMgR1BVQnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemVJbkJ5dGVzID0gZ2V0VGVuc29yRWxlbWVudFNpemUodGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpKSE7XG4gICAgICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRpbXMucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMSkgKiBlbGVtZW50U2l6ZUluQnl0ZXM7XG4gICAgICAgICAgICByYXdEYXRhID0gd2FzbS5qc2VwUmVnaXN0ZXJCdWZmZXIoc2Vzc2lvbklkLCBpbmRleCwgZ3B1QnVmZmVyLCBkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0ZW5zb3JbMl07XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIC8vIHN0cmluZyB0ZW5zb3JcbiAgICAgICAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSA0ICogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgIHJhd0RhdGEgPSB3YXNtLl9tYWxsb2MoZGF0YUJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICBhbGxvY3MucHVzaChyYXdEYXRhKTtcbiAgICAgICAgICAgICAgbGV0IGRhdGFJbmRleCA9IHJhd0RhdGEgLyA0O1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB0ZW5zb3IgZGF0YSBhdCBpbmRleCAke2l9IGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXNtLkhFQVBVMzJbZGF0YUluZGV4KytdID0gYWxsb2NXYXNtU3RyaW5nKGRhdGFbaV0sIGFsbG9jcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRhdGFCeXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICByYXdEYXRhID0gd2FzbS5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgICAgICAgIHdhc20uSEVBUFU4LnNldChuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhQnl0ZUxlbmd0aCksIHJhd0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgICAgICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDQgKiBkaW1zLmxlbmd0aCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkaW1JbmRleCA9IGRpbXNPZmZzZXQgLyA0O1xuICAgICAgICAgICAgZGltcy5mb3JFYWNoKGQgPT4gd2FzbS5IRUFQMzJbZGltSW5kZXgrK10gPSBkKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbnNvciA9IHdhc20uX09ydENyZWF0ZVRlbnNvcihcbiAgICAgICAgICAgICAgICB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bShkYXRhVHlwZSksIHJhd0RhdGEsIGRhdGFCeXRlTGVuZ3RoLCBkaW1zT2Zmc2V0LCBkaW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obG9jYXRpb24pKTtcbiAgICAgICAgICAgIGlmICh0ZW5zb3IgPT09IDApIHtcbiAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGNyZWF0ZSB0ZW5zb3IgZm9yIGlucHV0L291dHB1dC4gc2Vzc2lvbj0ke3Nlc3Npb25JZH0sIGluZGV4PSR7aW5kZXh9LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVuc29ySGFuZGxlcy5wdXNoKHRlbnNvcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbi8qKlxuICogcGVyZm9ybSBpbmZlcmVuY2UgcnVuXG4gKi9cbmV4cG9ydCBjb25zdCBydW4gPSBhc3luYyhcbiAgICBzZXNzaW9uSWQ6IG51bWJlciwgaW5wdXRJbmRpY2VzOiBudW1iZXJbXSwgaW5wdXRUZW5zb3JzOiBUZW5zb3JNZXRhZGF0YVtdLCBvdXRwdXRJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBvdXRwdXRUZW5zb3JzOiBBcnJheTxUZW5zb3JNZXRhZGF0YXxudWxsPiwgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxUZW5zb3JNZXRhZGF0YVtdPiA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJ1biBpbmZlcmVuY2UuIGludmFsaWQgc2Vzc2lvbiBpZDogJHtzZXNzaW9uSWR9YCk7XG4gIH1cbiAgY29uc3QgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGVdID0gc2Vzc2lvbjtcblxuICBjb25zdCBpbnB1dENvdW50ID0gaW5wdXRJbmRpY2VzLmxlbmd0aDtcbiAgY29uc3Qgb3V0cHV0Q291bnQgPSBvdXRwdXRJbmRpY2VzLmxlbmd0aDtcblxuICBsZXQgcnVuT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGxldCBydW5PcHRpb25zQWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGlucHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXRPdXRwdXRBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgYmVmb3JlUnVuU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICBjb25zdCBpbnB1dFZhbHVlc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhpbnB1dENvdW50ICogNCk7XG4gIGNvbnN0IGlucHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoaW5wdXRDb3VudCAqIDQpO1xuICBjb25zdCBvdXRwdXRWYWx1ZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcbiAgY29uc3Qgb3V0cHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcblxuICB0cnkge1xuICAgIFtydW5PcHRpb25zSGFuZGxlLCBydW5PcHRpb25zQWxsb2NzXSA9IHNldFJ1bk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjcmVhdGUgaW5wdXQgdGVuc29yc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoaW5wdXRUZW5zb3JzW2ldLCBpbnB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCBzZXNzaW9uSWQsIGlucHV0SW5kaWNlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIG91dHB1dCB0ZW5zb3JzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgb3V0cHV0VGVuc29yc1tpXSwgb3V0cHV0VGVuc29ySGFuZGxlcywgaW5wdXRPdXRwdXRBbGxvY3MsIHNlc3Npb25JZCwgaW5wdXRDb3VudCArIG91dHB1dEluZGljZXNbaV0pO1xuICAgIH1cblxuICAgIGxldCBpbnB1dFZhbHVlc0luZGV4ID0gaW5wdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBpbnB1dE5hbWVzSW5kZXggPSBpbnB1dE5hbWVzT2Zmc2V0IC8gNDtcbiAgICBsZXQgb3V0cHV0VmFsdWVzSW5kZXggPSBvdXRwdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBvdXRwdXROYW1lc0luZGV4ID0gb3V0cHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbaW5wdXRWYWx1ZXNJbmRleCsrXSA9IGlucHV0VGVuc29ySGFuZGxlc1tpXTtcbiAgICAgIHdhc20uSEVBUFUzMltpbnB1dE5hbWVzSW5kZXgrK10gPSBpbnB1dE5hbWVzVVRGOEVuY29kZWRbaW5wdXRJbmRpY2VzW2ldXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzSW5kZXgrK10gPSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgd2FzbS5IRUFQVTMyW291dHB1dE5hbWVzSW5kZXgrK10gPSBvdXRwdXROYW1lc1VURjhFbmNvZGVkW291dHB1dEluZGljZXNbaV1dO1xuICAgIH1cblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBpb0JpbmRpbmdTdGF0ZSkge1xuICAgICAgY29uc3Qge2hhbmRsZSwgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkfSA9IGlvQmluZGluZ1N0YXRlO1xuXG4gICAgICBpZiAoaW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aCAhPT0gaW5wdXRDb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGNvdW50IGZyb20gZmVlZHMgKCR7XG4gICAgICAgICAgICBpbnB1dENvdW50fSkgaXMgZXhwZWN0ZWQgdG8gYmUgYWx3YXlzIGVxdWFsIHRvIG1vZGVsJ3MgaW5wdXQgY291bnQgKCR7aW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aH0pLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBwcm9jZXNzIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbnB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydEJpbmRJbnB1dChoYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIGlucHV0VGVuc29ySGFuZGxlc1tpXSk7XG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBpbnB1dFske2l9XSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcHJvY2VzcyBwcmUtYWxsb2NhdGVkIG91dHB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG91dHB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gb3V0cHV0VGVuc29yc1tpXT8uWzNdOyAgLy8gdW5kZWZpbmVkIG1lYW5zIG91dHB1dCBpcyBub3QgcHJlLWFsbG9jYXRlZC5cblxuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgcHJlLWFsbG9jYXRlZC4gYmluZCB0aGUgdGVuc29yLlxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEJpbmRPdXRwdXQoaGFuZGxlLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgb3V0cHV0VGVuc29ySGFuZGxlc1tpXSwgMCk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgcHJlLWFsbG9jYXRlZCBvdXRwdXRbJHtpfV0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgbm90IHByZS1hbGxvY2F0ZWQuIHJlc2V0IHByZWZlcnJlZCBsb2NhdGlvbi5cbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPVxuICAgICAgICAgICAgICB3YXNtLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIDAsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWRbaW5kZXhdKTtcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBvdXRwdXRbJHtpfV0gdG8gJHtvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNbaV19IGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3JDb2RlOiBudW1iZXI7XG5cbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgJiYgaW9CaW5kaW5nU3RhdGUpIHtcbiAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydFJ1bldpdGhCaW5kaW5nKFxuICAgICAgICAgIHNlc3Npb25IYW5kbGUsIGlvQmluZGluZ1N0YXRlLmhhbmRsZSwgb3V0cHV0Q291bnQsIG91dHB1dFZhbHVlc09mZnNldCwgcnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydFJ1bihcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzT2Zmc2V0LCBpbnB1dFZhbHVlc09mZnNldCwgaW5wdXRDb3VudCwgb3V0cHV0TmFtZXNPZmZzZXQsIG91dHB1dENvdW50LFxuICAgICAgICAgIG91dHB1dFZhbHVlc09mZnNldCwgcnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ2ZhaWxlZCB0byBjYWxsIE9ydFJ1bigpLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dDogVGVuc29yTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB0ZW5zb3IgPSB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNCArIGldO1xuICAgICAgaWYgKHRlbnNvciA9PT0gb3V0cHV0VGVuc29ySGFuZGxlc1tpXSkge1xuICAgICAgICAvLyBvdXRwdXQgdGVuc29yIGlzIHByZS1hbGxvY2F0ZWQuIG5vIG5lZWQgdG8gY29weSBkYXRhLlxuICAgICAgICBvdXRwdXQucHVzaChvdXRwdXRUZW5zb3JzW2ldISk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiZWZvcmVHZXRUZW5zb3JEYXRhU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICAgICAgLy8gc3RhY2sgYWxsb2NhdGUgNCBwb2ludGVyIHZhbHVlXG4gICAgICBjb25zdCB0ZW5zb3JEYXRhT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDQgKiA0KTtcblxuICAgICAgbGV0IGtlZXBPdXRwdXRUZW5zb3IgPSBmYWxzZTtcbiAgICAgIGxldCB0eXBlOiBUZW5zb3IuVHlwZXx1bmRlZmluZWQsIGRhdGFPZmZzZXQgPSAwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0R2V0VGVuc29yRGF0YShcbiAgICAgICAgICAgIHRlbnNvciwgdGVuc29yRGF0YU9mZnNldCwgdGVuc29yRGF0YU9mZnNldCArIDQsIHRlbnNvckRhdGFPZmZzZXQgKyA4LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgMTIpO1xuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFjY2VzcyBvdXRwdXQgdGVuc29yIGRhdGEgb24gaW5kZXggJHtpfS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVuc29yRGF0YUluZGV4ID0gdGVuc29yRGF0YU9mZnNldCAvIDQ7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgZGF0YU9mZnNldCA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGNvbnN0IGRpbXNPZmZzZXQgPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBjb25zdCBkaW1zTGVuZ3RoID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgY29uc3QgZGltcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRpbXMucHVzaCh3YXNtLkhFQVBVMzJbZGltc09mZnNldCAvIDQgKyBpXSk7XG4gICAgICAgIH1cbiAgICAgICAgd2FzbS5fT3J0RnJlZShkaW1zT2Zmc2V0KTtcblxuICAgICAgICBjb25zdCBzaXplID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKTtcbiAgICAgICAgdHlwZSA9IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nKGRhdGFUeXBlKTtcblxuICAgICAgICBjb25zdCBwcmVmZXJyZWRMb2NhdGlvbiA9IGlvQmluZGluZ1N0YXRlPy5vdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNbb3V0cHV0SW5kaWNlc1tpXV07XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHByZWZlcnJlZExvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5nIHRlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIEdQVS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RyaW5nRGF0YTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gZGF0YU9mZnNldCAvIDQ7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHdhc20uSEVBUFUzMltkYXRhSW5kZXgrK107XG4gICAgICAgICAgICBjb25zdCBtYXhCeXRlc1RvUmVhZCA9IGkgPT09IHNpemUgLSAxID8gdW5kZWZpbmVkIDogd2FzbS5IRUFQVTMyW2RhdGFJbmRleF0gLSBvZmZzZXQ7XG4gICAgICAgICAgICBzdHJpbmdEYXRhLnB1c2god2FzbS5VVEY4VG9TdHJpbmcob2Zmc2V0LCBtYXhCeXRlc1RvUmVhZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQucHVzaChbdHlwZSwgZGltcywgc3RyaW5nRGF0YSwgJ2NwdSddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBhIGNlcnRhaW4gb3V0cHV0J3MgcHJlZmVycmVkIGxvY2F0aW9uIGlzIEdQVSBidXQgdGhlIHRlbnNvciBpcyBlbXB0eSwgd2Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgYSBDUFVcbiAgICAgICAgICAvLyB0ZW5zb3IgZm9yIGl0LiBUaGVyZSBpcyBubyBtYXBwaW5nIEdQVSBidWZmZXIgZm9yIGFuIGVtcHR5IHRlbnNvci5cbiAgICAgICAgICBpZiAocHJlZmVycmVkTG9jYXRpb24gPT09ICdncHUtYnVmZmVyJyAmJiBzaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZ3B1QnVmZmVyID0gd2FzbS5qc2VwR2V0QnVmZmVyKGRhdGFPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFNpemUgPT09IHVuZGVmaW5lZCB8fCAhaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRvIG5vdCByZWxlYXNlIHRoZSB0ZW5zb3IgcmlnaHQgbm93LiBpdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdXNlciBjYWxscyB0ZW5zb3IuZGlzcG9zZSgpLlxuICAgICAgICAgICAga2VlcE91dHB1dFRlbnNvciA9IHRydWU7XG5cbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFtcbiAgICAgICAgICAgICAgdHlwZSwgZGltcywge1xuICAgICAgICAgICAgICAgIGdwdUJ1ZmZlcixcbiAgICAgICAgICAgICAgICBkb3dubG9hZDogd2FzbS5qc2VwQ3JlYXRlRG93bmxvYWRlcihncHVCdWZmZXIsIHNpemUgKiBlbGVtZW50U2l6ZSwgdHlwZSksXG4gICAgICAgICAgICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih0ZW5zb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ2dwdS1idWZmZXInXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHlwZWRBcnJheUNvbnN0cnVjdG9yID0gdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yKHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0eXBlZEFycmF5Q29uc3RydWN0b3Ioc2l6ZSk7XG4gICAgICAgICAgICBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAgICAgLnNldCh3YXNtLkhFQVBVOC5zdWJhcnJheShkYXRhT2Zmc2V0LCBkYXRhT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChbdHlwZSwgZGltcywgZGF0YSwgJ2NwdSddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBkYXRhT2Zmc2V0KSB7XG4gICAgICAgICAgd2FzbS5fZnJlZShkYXRhT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtlZXBPdXRwdXRUZW5zb3IpIHtcbiAgICAgICAgICB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW9CaW5kaW5nU3RhdGUpIHtcbiAgICAgIHdhc20uX09ydENsZWFyQm91bmRPdXRwdXRzKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShiZWZvcmVSdW5TdGFjayk7XG5cbiAgICBpbnB1dFRlbnNvckhhbmRsZXMuZm9yRWFjaCh2ID0+IHdhc20uX09ydFJlbGVhc2VUZW5zb3IodikpO1xuICAgIG91dHB1dFRlbnNvckhhbmRsZXMuZm9yRWFjaCh2ID0+IHdhc20uX09ydFJlbGVhc2VUZW5zb3IodikpO1xuICAgIGlucHV0T3V0cHV0QWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcblxuICAgIGlmIChydW5PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlUnVuT3B0aW9ucyhydW5PcHRpb25zSGFuZGxlKTtcbiAgICB9XG4gICAgcnVuT3B0aW9uc0FsbG9jcy5mb3JFYWNoKHAgPT4gd2FzbS5fZnJlZShwKSk7XG4gIH1cbn07XG5cbi8qKlxuICogZW5kIHByb2ZpbGluZ1xuICovXG5leHBvcnQgY29uc3QgZW5kUHJvZmlsaW5nID0gKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXNzaW9uIGlkJyk7XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbkhhbmRsZSA9IHNlc3Npb25bMF07XG5cbiAgLy8gcHJvZmlsZSBmaWxlIG5hbWUgaXMgbm90IHVzZWQgeWV0LCBidXQgaXQgbXVzdCBiZSBmcmVlZC5cbiAgY29uc3QgcHJvZmlsZUZpbGVOYW1lID0gd2FzbS5fT3J0RW5kUHJvZmlsaW5nKHNlc3Npb25IYW5kbGUpO1xuICBpZiAocHJvZmlsZUZpbGVOYW1lID09PSAwKSB7XG4gICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIHByb2ZpbGUgZmlsZSBuYW1lLicpO1xuICB9XG4gIHdhc20uX09ydEZyZWUocHJvZmlsZUZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VHJhbnNmZXJhYmxlQnVmZmVycyA9ICh0ZW5zb3JzOiByZWFkb25seSBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdKTogQXJyYXlCdWZmZXJMaWtlW10gPT4ge1xuICBjb25zdCBidWZmZXJzOiBBcnJheUJ1ZmZlckxpa2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRlbnNvclsyXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgJ2J1ZmZlcicgaW4gZGF0YSkge1xuICAgICAgYnVmZmVycy5wdXNoKGRhdGEuYnVmZmVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG4vLy8gPHJlZmVyZW5jZSBsaWI9XCJ3ZWJ3b3JrZXJcIiAvPlxuXG4vL1xuLy8gKiB0eXBlIGhhY2sgZm9yIFwiSFRNTEltYWdlRWxlbWVudFwiXG4vL1xuLy8gaW4gdHlwZXNjcmlwdCwgdGhlIHR5cGUgb2YgXCJIVE1MSW1hZ2VFbGVtZW50XCIgaXMgZGVmaW5lZCBpbiBsaWIuZG9tLmQudHMsIHdoaWNoIGlzIGNvbmZsaWN0IHdpdGggbGliLndlYndvcmtlci5kLnRzLlxuLy8gd2hlbiB3ZSB1c2Ugd2Vid29ya2VyLCB0aGUgbGliLndlYndvcmtlci5kLnRzIHdpbGwgYmUgdXNlZCwgd2hpY2ggZG9lcyBub3QgaGF2ZSBIVE1MSW1hZ2VFbGVtZW50IGRlZmluZWQuXG4vL1xuLy8gd2Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcnMgY29tcGxhaW5pbmcgdGhhdCBIVE1MSW1hZ2VFbGVtZW50IGlzIG5vdCBkZWZpbmVkOlxuLy9cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vL1xuLy8gLi4vY29tbW9uL2Rpc3QvY2pzL3RlbnNvci1mYWN0b3J5LmQudHM6MTg3OjI5IC0gZXJyb3IgVFMyNTUyOiBDYW5ub3QgZmluZCBuYW1lICdIVE1MSW1hZ2VFbGVtZW50Jy4gRGlkIHlvdSBtZWFuXG4vLyAnSFRNTExJRWxlbWVudCc/XG4vL1xuLy8gMTg3ICAgICBmcm9tSW1hZ2UoaW1hZ2VFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50LCBvcHRpb25zPzogVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMpOlxuLy8gUHJvbWlzZTxUeXBlZFRlbnNvcjwnZmxvYXQzMic+IHwgVHlwZWRUZW5zb3I8J3VpbnQ4Jz4+O1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+XG4vL1xuLy8gbm9kZV9tb2R1bGVzL0B3ZWJncHUvdHlwZXMvZGlzdC9pbmRleC5kLnRzOjgzOjcgLSBlcnJvciBUUzI1NTI6IENhbm5vdCBmaW5kIG5hbWUgJ0hUTUxJbWFnZUVsZW1lbnQnLiBEaWQgeW91IG1lYW5cbi8vICdIVE1MTElFbGVtZW50Jz9cbi8vXG4vLyA4MyAgICAgfCBIVE1MSW1hZ2VFbGVtZW50XG4vLyAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+XG4vL1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vXG4vLyBgSFRNTEltYWdlRWxlbWVudGAgaXMgb25seSB1c2VkIGluIHR5cGUgZGVjbGFyYXRpb24gYW5kIG5vdCBpbiByZWFsIGNvZGUuIFNvIHdlIGRlZmluZSBpdCBhcyBgdW5rbm93bmAgaGVyZSB0b1xuLy8gYnlwYXNzIHRoZSB0eXBlIGNoZWNrLlxuLy9cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgdHlwZSBIVE1MSW1hZ2VFbGVtZW50ID0gdW5rbm93bjtcbn1cblxuaW1wb3J0IHtPcnRXYXNtTWVzc2FnZSwgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGF9IGZyb20gJy4uL3Byb3h5LW1lc3NhZ2VzJztcbmltcG9ydCB7Y3JlYXRlU2Vzc2lvbiwgY29weUZyb21FeHRlcm5hbEJ1ZmZlciwgZW5kUHJvZmlsaW5nLCBleHRyYWN0VHJhbnNmZXJhYmxlQnVmZmVycywgaW5pdEVwLCBpbml0UnVudGltZSwgcmVsZWFzZVNlc3Npb24sIHJ1bn0gZnJvbSAnLi4vd2FzbS1jb3JlLWltcGwnO1xuaW1wb3J0IHtpbml0aWFsaXplV2ViQXNzZW1ibHl9IGZyb20gJy4uL3dhc20tZmFjdG9yeSc7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2OiBNZXNzYWdlRXZlbnQ8T3J0V2FzbU1lc3NhZ2U+KTogdm9pZCA9PiB7XG4gIGNvbnN0IHt0eXBlLCBpbiA6IG1lc3NhZ2V9ID0gZXYuZGF0YTtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2luaXQtd2FzbSc6XG4gICAgICAgIGluaXRpYWxpemVXZWJBc3NlbWJseShtZXNzYWdlIS53YXNtKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaW5pdFJ1bnRpbWUobWVzc2FnZSEpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGV9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luaXQtZXAnOiB7XG4gICAgICAgIGNvbnN0IHtlcE5hbWUsIGVudn0gPSBtZXNzYWdlITtcbiAgICAgICAgaW5pdEVwKGVudiwgZXBOYW1lKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGV9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29weS1mcm9tJzoge1xuICAgICAgICBjb25zdCB7YnVmZmVyfSA9IG1lc3NhZ2UhO1xuICAgICAgICBjb25zdCBidWZmZXJEYXRhID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihidWZmZXIpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgb3V0OiBidWZmZXJEYXRhfSBhcyBPcnRXYXNtTWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3JlYXRlJzoge1xuICAgICAgICBjb25zdCB7bW9kZWwsIG9wdGlvbnN9ID0gbWVzc2FnZSE7XG4gICAgICAgIGNyZWF0ZVNlc3Npb24obW9kZWwsIG9wdGlvbnMpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICBzZXNzaW9uTWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIG91dDogc2Vzc2lvbk1ldGFkYXRhfSBhcyBPcnRXYXNtTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JlbGVhc2UnOlxuICAgICAgICByZWxlYXNlU2Vzc2lvbihtZXNzYWdlISk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncnVuJzoge1xuICAgICAgICBjb25zdCB7c2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgb3B0aW9uc30gPSBtZXNzYWdlITtcbiAgICAgICAgcnVuKHNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG5ldyBBcnJheShvdXRwdXRJbmRpY2VzLmxlbmd0aCkuZmlsbChudWxsKSwgb3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIG91dHB1dHMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dHMuc29tZShvID0+IG9bM10gIT09ICdjcHUnKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyOiAnUHJveHkgZG9lcyBub3Qgc3VwcG9ydCBub24tY3B1IHRlbnNvciBsb2NhdGlvbi4nfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlLCBvdXQ6IG91dHB1dHN9IGFzIE9ydFdhc21NZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMob3V0cHV0cyBhcyBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VuZC1wcm9maWxpbmcnOlxuICAgICAgICBlbmRQcm9maWxpbmcobWVzc2FnZSEpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZX0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSBhcyBPcnRXYXNtTWVzc2FnZSk7XG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQWEsVUFBa0MsY0FBc0M7QUFBckY7QUFBQTtBQUFPLE1BQU0sV0FBVztBQUFpQixNQUFNLGVBQWU7QUFBaUIsTUFBTSxtQkFBbUI7QUFBQTtBQUFBOzs7QUNBeEc7QUFBQTtBQUFBLGdCQUFBQTtBQUFBO0FBQUEsTUFBYUE7QUFB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QVEsQ0FBQyxHQUFFLEtBQUcsSUFBRSxFQUFFLFNBQVMsSUFBRSxDQUFDLEtBQUcsRUFBRSxTQUFTLENBQUMsR0FBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUUsQ0FBQztBQUFBLHFCQUFPO0FBQUMsb0JBQUUsUUFBUSxFQUFFLFFBQVEsSUFBRSxDQUFDO0FBQUU7QUFBQSxnQkFBSztBQUFBLGNBQUM7QUFBQyxrQkFBRSxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxrQkFBRSxFQUFFLElBQUk7QUFBQSxnQkFBSyxFQUFFLFlBQVk7QUFBQSxnQkFDbmY7QUFBQSxnQkFBRTtBQUFBLGNBQUMsQ0FBQztBQUFFLGtCQUFFLEVBQUUsQ0FBQztBQUFFLHFCQUFPLEtBQUcsRUFBRSxHQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsR0FBRSxDQUFDLElBQUUsRUFBRSxZQUFZLElBQUUsSUFBRSxFQUFFLFlBQVksSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFBLFlBQUM7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLElBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBQyxJQUFHLEVBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsR0FBRSxJQUFHLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBRTtBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLGdCQUFFO0FBQUEsY0FBQyxNQUFLO0FBQUEsY0FBdUIsTUFBSztBQUFBLGNBQVcsTUFBSztBQUFBLGNBQVcsTUFBSztBQUFBLGNBQUssTUFBSztBQUFBLGNBQWMsTUFBSztBQUFBLGNBQVEsTUFBSztBQUFBLGNBQVcsTUFBSztBQUFBLGNBQVcsTUFBSztBQUFBLGNBQzdlLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFXLE9BQU07QUFBQSxjQUFXLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxjQUFLLE9BQU07QUFBQSxZQUFJO0FBQUUscUJBQVEsS0FBSztBQUFFLGtCQUFFLEVBQUUsUUFBUSxJQUFJLE9BQU8sR0FBRSxHQUFHLEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSxnQkFBSSxLQUFHLDJEQUEyRCxNQUFNLEdBQUcsR0FBRSxLQUFHLHdGQUF3RixNQUFNLEdBQUc7QUFBRSxnQkFBRTtBQUFBLGNBQUMsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRTtBQUFBLGNBQ3RmLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsR0FBRyxFQUFFLEVBQUU7QUFBQSxjQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsS0FBRyxRQUFNLE1BQUksR0FBRSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLEdBQUUsR0FBRztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUc7QUFBQyxvQkFBRSxFQUFFO0FBQUcscUJBQUcsSUFBRSxJQUFFLEtBQUcsS0FBRyxNQUFJLEtBQUc7QUFBSSx1QkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQSxjQUFFLE1BQUssT0FBRztBQUFDLHlCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBRyxFQUFFLEtBQUcsR0FBRSxNQUFJLEVBQUUsRUFBRSxLQUFHLElBQUksSUFBRSxLQUFHLElBQUksR0FBRztBQUFFO0FBQUMsdUJBQU8sRUFBRSxFQUFFLEtBQUcsR0FBRSxDQUFDO0FBQUEsY0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxLQUFHLEdBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUM7QUFBQSxjQUFFLE1BQUssTUFBSTtBQUFBLGNBQUssTUFBSyxPQUFHLEtBQUcsRUFBRSxNQUFJLEtBQUcsRUFBRSxLQUFHLE9BQUs7QUFBQSxjQUFLLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsY0FBRSxNQUFLLE1BQUk7QUFBQSxjQUFLLE1BQUssT0FBRyxFQUFFLE1BQUk7QUFBQSxjQUFFLE1BQUssT0FBRztBQUFBLGdCQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsSUFBRSxFQUFFLE1BQUksQ0FBQztBQUFBLGdCQUNuZjtBQUFBLGNBQUM7QUFBQSxjQUFFLE1BQUssT0FBRztBQUFDLG9CQUFJLElBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQztBQUFFLHNCQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxLQUFHLEtBQUc7QUFBSSxvQkFBRztBQUFFLHdCQUFJLE1BQUksS0FBRyxFQUFFLEtBQUcsTUFBSSxFQUFFLE1BQUksR0FBRSxLQUFHLEtBQUcsS0FBRyxLQUFHLEVBQUUsRUFBRSxFQUFFLE1BQUksSUFBRTtBQUFBLHFCQUFRO0FBQUMsc0JBQUU7QUFBRyxzQkFBSSxLQUFHLEVBQUUsS0FBRyxJQUFFLEVBQUUsS0FBRyxLQUFHO0FBQUUsbUJBQUMsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsTUFBSTtBQUFBLGdCQUFHO0FBQUMsdUJBQU8sRUFBRSxHQUFFLENBQUM7QUFBQSxjQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRTtBQUFBLGNBQUcsTUFBSyxPQUFHLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQyxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssUUFBSSxFQUFFLEtBQUcsTUFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxLQUFHO0FBQUEsY0FBSyxNQUFLLE9BQUc7QUFBQyxvQkFBRSxFQUFFO0FBQUcsb0JBQUksSUFBRSxLQUFHO0FBQUUsb0JBQUUsS0FBSyxJQUFJLENBQUMsSUFBRTtBQUFHLHdCQUFPLElBQUUsTUFBSSxPQUFLLE9BQU8sVUFBUSxJQUFFLEtBQUcsTUFBSSxJQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFBQSxjQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRTtBQUFBLGNBQUcsTUFBSyxNQUFJO0FBQUEsWUFBRztBQUFFLGdCQUFFLEVBQUUsUUFBUSxPQUFNLE1BQVU7QUFDeGYsaUJBQUksS0FBSztBQUFFLGdCQUFFLFNBQVMsQ0FBQyxNQUFJLElBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRyxnQkFBRSxFQUFFLFFBQVEsU0FBUSxHQUFHO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUcsRUFBRSxTQUFPO0FBQUUscUJBQU87QUFBRSxjQUFFLElBQUksR0FBRSxNQUFJLENBQUM7QUFBRSxtQkFBTyxFQUFFLFNBQU87QUFBQSxVQUFDO0FBQzNKLGNBQUksS0FBRyxFQUFDLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsWUFBQyxJQUFJLEdBQUcsQ0FBQyxFQUFHLEdBQUcsTUFBSSxHQUFFLE1BQUksQ0FBQztBQUFFLGlCQUFHO0FBQUU7QUFBSyxrQkFBTTtBQUFBLFVBQUcsR0FBRSxHQUFFLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQUMsR0FBRSxHQUFFLFdBQVU7QUFBQSxVQUFDLEdBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQyxHQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUMsR0FBRSxHQUFFLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQUMsR0FBRSxHQUFFLFdBQVU7QUFBQSxVQUFDLEdBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQyxHQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUMsR0FBRSxHQUFFLFdBQVU7QUFBQSxVQUFDLEdBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQyxHQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUMsR0FBRSxHQUFFLFdBQVU7QUFBQSxVQUFDLEdBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQyxHQUFFLEdBQUUsTUFBSSxHQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFFLElBQUUsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLG1CQUFLO0FBQUUsZ0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGNBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLGNBQWM7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLGNBQWM7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVk7QUFBRSxjQUFFLElBQUUsT0FDaGYsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsRUFBRSxlQUFlLElBQUU7QUFBSyxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFVBQVU7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsS0FBRyxFQUFFLFFBQVEsSUFBRSxLQUFLLElBQUksRUFBRSxlQUFlLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsS0FBRyxRQUFNO0FBQUEsVUFBQyxHQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFFLElBQUUsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLG1CQUFLO0FBQUUsZ0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGNBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFFBQVE7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFLLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsT0FBTztBQUN6ZixjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsS0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUUsS0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUUsRUFBRSxRQUFRLElBQUUsSUFBRTtBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsS0FBRyxFQUFFLGtCQUFrQjtBQUFHLGdCQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0I7QUFBRSxnQkFBSSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0I7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsS0FBRyxLQUFHLEtBQUcsRUFBRSxrQkFBa0IsS0FBRyxLQUFLLElBQUksR0FBRSxDQUFDLEtBQUc7QUFBQSxVQUFDLEdBQUUsR0FBRSxTQUFTLEdBQUU7QUFBQyxtQkFBSztBQUFFLGdCQUFJLElBQUUsSUFBSSxLQUFLLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLE1BQUssRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUUsRUFBRSxrQkFBa0IsR0FBRSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0IsR0FDMWdCLElBQUcsSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQyxFQUFHLGtCQUFrQixHQUFFLElBQUUsS0FBSyxJQUFJLEdBQUUsQ0FBQztBQUFFLGdCQUFFLElBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsT0FBTyxLQUFHLEtBQUcsS0FBRyxDQUFDLElBQUUsSUFBRSxNQUFJLEtBQUcsT0FBSyxJQUFFLEtBQUssSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUUsUUFBTSxJQUFFLElBQUUsSUFBRSxLQUFHLEVBQUU7QUFBRyxjQUFFLElBQUUsT0FBSyxN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LElBQUcsUUFBTSxJQUFFLElBQUk7QUFBQSxnQkFBRTtBQUFBLGNBQUM7QUFBTSxxQkFBRyxPQUFPLGFBQWEsQ0FBQztBQUFBLFlBQUM7QUFBQyxtQkFBTztBQUFBLFVBQUMsR0FBRSxJQUFFLENBQUMsR0FBRSxPQUFLLE9BQUssS0FBRyxHQUFHLEVBQUUsR0FBRSxHQUFFLENBQUMsSUFBRSxJQUFHLEtBQUcsT0FBRztBQUFDLGdCQUFJLElBQUUsR0FBRztBQUFFLGdCQUFFLEVBQUU7QUFBRSxjQUFFLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFDN1ksbUJBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLFVBQVUsU0FBTyxHQUFFLElBQUU7QUFBVSxtQkFBTyxHQUFHLE1BQUk7QUFBQyx1QkFBUSxJQUFFLEdBQUcsSUFBRSxDQUFDLEdBQUUsSUFBRSxNQUFJLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFJO0FBQUMsb0JBQUksSUFBRSxFQUFFLElBQUUsQ0FBQztBQUFFLG1CQUFHLEVBQUUsSUFBRSxNQUFJLENBQUMsSUFBRTtBQUFBLGNBQUM7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLENBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUUsZ0JBQUU7QUFBRSxnQkFBRSxNQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUUsSUFBRTtBQUFJLGNBQUUsR0FBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFDLGNBQUksS0FBRyxPQUFHO0FBQUMsZ0JBQUU7QUFBRSxnQkFBRztBQUFFLG9CQUFNLEdBQUcsQ0FBQyxHQUFFO0FBQVMsZUFBRyxDQUFDO0FBQUEsVUFBQztBQUFFLG1CQUFTLEtBQUk7QUFBQyxxQkFBUSxJQUFFLEVBQUUsWUFBVztBQUFLLGlCQUFHO0FBQUUsZUFBRyxRQUFRLE1BQUk7QUFBQztBQUFJ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TUFBSSxHQUFHLENBQUMsR0FBRSxJQUFFLElBQUcsQ0FBQztBQUFHLGtCQUFHO0FBQUMsb0JBQUcsRUFBRSxHQUFFLEVBQUUsSUFBRTtBQUFHLHNCQUFHO0FBQUMsd0JBQUUsR0FBRyxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUEsa0JBQUMsU0FBTyxHQUFFO0FBQUMsaUNBQWEsS0FBRyxZQUFVLEtBQUcsRUFBRSxHQUFFLENBQUM7QUFBQSxrQkFBQztBQUFBLGNBQUMsU0FBTyxHQUFFO0FBQUMsNkJBQWEsS0FBRyxZQUFVLEtBQUcsRUFBRSxHQUFFLENBQUM7QUFBQSxjQUFDO0FBQUEsVUFBQztBQUFFLFlBQUUsZUFBYTtBQUM3ZCxjQUFJLEtBQUcsQ0FBQyxHQUFFLElBQUUsT0FBRyxNQUFJLElBQUUsTUFBSSxNQUFJLElBQUUsT0FBSyxNQUFJLElBQUUsTUFBSyxLQUFHLENBQUMsR0FBRSxJQUFHLElBQUcsSUFBRyxLQUFJLEtBQUksS0FBSSxLQUFJLEtBQUksS0FBSSxLQUFJLEdBQUcsR0FBRSxLQUFHLENBQUMsR0FBRSxJQUFHLElBQUcsSUFBRyxLQUFJLEtBQUksS0FBSSxLQUFJLEtBQUksS0FBSSxLQUFJLEdBQUc7QUFBRSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFPLElBQUUsRUFBRSxJQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFHO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUM3USxjQUFJLEtBQUcsT0FBRztBQUFDLGdCQUFJLElBQUUsR0FBRyxDQUFDLElBQUUsR0FBRSxJQUFFLEdBQUcsQ0FBQztBQUFFLGlCQUFHLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUMsR0FBRSxLQUFHLENBQUMsR0FBRSxLQUFHLENBQUMsR0FBRSxLQUFHLE1BQUk7QUFBQyxnQkFBRyxDQUFDLElBQUc7QUFBQyxrQkFBSSxJQUFFLEVBQUMsTUFBSyxZQUFXLFNBQVEsWUFBVyxNQUFLLEtBQUksS0FBSSxLQUFJLE1BQUssa0JBQWlCLE9BQU0sWUFBVSxPQUFPLGFBQVcsVUFBVSxhQUFXLFVBQVUsVUFBVSxDQUFDLEtBQUcsS0FBSyxRQUFRLEtBQUksR0FBRyxJQUFFLFVBQVMsR0FBRSxNQUFJLGlCQUFnQixHQUFFO0FBQUUsbUJBQUksS0FBSztBQUFHLDJCQUFTLEdBQUcsQ0FBQyxJQUFFLE9BQU8sRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUUsa0JBQUksSUFBRSxDQUFDO0FBQUUsbUJBQUksS0FBSztBQUFFLGtCQUFFLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtBQUFFLG1CQUFHO0FBQUEsWUFBQztBQUFDLG1CQUFPO0FBQUEsVUFBRSxHQUFFO0FBQzFaLG1CQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsZ0JBQUksSUFBRTtBQUFFLGVBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsa0JBQUksSUFBRSxJQUFFO0FBQUUsa0JBQUUsRUFBRSxFQUFFLElBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUU7QUFBRSxtQkFBRyxFQUFFLFFBQU0sTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXLENBQUM7QUFBRSxpQkFBRyxFQUFFLE1BQUksTUFBSSxDQUFDLElBQUU7QUFBRSxtQkFBRyxFQUFFLFNBQU87QUFBQSxZQUFDLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxJQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLElBQUUsR0FBRztBQUFFLGNBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUU7QUFBTyxnQkFBSSxJQUFFO0FBQUUsY0FBRSxRQUFRLE9BQUcsS0FBRyxFQUFFLFNBQU8sQ0FBQztBQUFFLGNBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFFO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFFO0FBQ3RjLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsSUFBRTtBQUFBLFVBQUU7QUFBQyxjQUFJLEtBQUcsQ0FBQyxNQUFLLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxxQkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFJO0FBQUMsa0JBQUksSUFBRSxFQUFFLEVBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDO0FBQUUsbUJBQUc7QUFBRSx1QkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUk7QUFBQyxvQkFBSSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksQ0FBQyxHQUFFLElBQUUsR0FBRyxDQUFDO0FBQUUsc0JBQUksS0FBRyxPQUFLLE1BQUksTUFBSSxJQUFFLEtBQUcsR0FBRyxHQUFHLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUM7QUFBQSxjQUFDO0FBQUMsbUJBQUc7QUFBQSxZQUFDO0FBQUMsY0FBRSxFQUFFLE1BQUksTUFBSSxDQUFDLElBQUU7QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFBQyxjQUFJLEtBQUcsQ0FBQyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRSxHQUFFLEtBQUcsQ0FBQyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRTtBQUNuYixtQkFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBSSxJQUFFLE1BQU0sR0FBRyxDQUFDLElBQUUsQ0FBQztBQUFFLGVBQUcsR0FBRSxHQUFFLEdBQUUsRUFBRSxNQUFNO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsY0FBSSxLQUFHLENBQUMsR0FBRSxNQUFJO0FBQUMsZUFBRyxFQUFFLElBQUksR0FBRSxNQUFJLENBQUM7QUFBQSxVQUFDO0FBQ2hHLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFTLEVBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBSSxJQUFFLFlBQVUsT0FBTyxJQUFFLEVBQUUsU0FBUyxJQUFFLEtBQUcsSUFBRyxFQUFFLFNBQU87QUFBRyxvQkFBRSxFQUFFLENBQUMsSUFBRTtBQUFFLHFCQUFPO0FBQUEsWUFBQztBQUFDLHFCQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMscUJBQU8sRUFBRSxHQUFFLEdBQUUsR0FBRztBQUFBLFlBQUM7QUFBQyxxQkFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLHVCQUFTLEVBQUUsSUFBRztBQUFDLHVCQUFPLElBQUUsS0FBRyxLQUFHLElBQUUsS0FBRyxJQUFFO0FBQUEsY0FBQztBQUFDLGtCQUFJO0FBQUUscUJBQUssSUFBRSxFQUFFLEVBQUUsWUFBWSxJQUFFLEVBQUUsWUFBWSxDQUFDLE1BQUksT0FBSyxJQUFFLEVBQUUsRUFBRSxTQUFTLElBQUUsRUFBRSxTQUFTLENBQUMsT0FBSyxJQUFFLEVBQUUsRUFBRSxRQUFRLElBQUUsRUFBRSxRQUFRLENBQUM7QUFBRyxxQkFBTztBQUFBLFlBQUM7QUFBQyxxQkFBUyxFQUFFLEdBQUU7QUFBQyxzQkFBTyxFQUFFLE9BQU8sR0FBRTtBQUFBLGdCQUFDLEtBQUs7QUFBRSx5QkFBTyxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxJQUFHLEVBQUU7QUFBQSxnQkFBRSxLQUFLO0FBQUUseUJBQU87QUFBQSxnQkFBRSxLQUFLO0FBQUUseUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQztBQUFBLGdCQUFFLEtBQUs7QUFBRSx5QkFBTyxJQUFJO0FBQUEsb0JBQUssRUFBRSxZQUFZO0FBQUEsb0JBQzVmO0FBQUEsb0JBQUU7QUFBQSxrQkFBQztBQUFBLGdCQUFFLEtBQUs7QUFBRSx5QkFBTyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDO0FBQUEsZ0JBQUUsS0FBSztBQUFFLHlCQUFPLElBQUksS0FBSyxFQUFFLFlBQVksSUFBRSxHQUFFLElBQUcsRUFBRTtBQUFBLGdCQUFFLEtBQUs7QUFBRSx5QkFBTyxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxJQUFHLEVBQUU7QUFBQSxjQUFDO0FBQUEsWUFBQztBQUFDLHFCQUFTLEVBQUUsR0FBRTtBQUFDLGtCQUFJLElBQUUsRUFBRTtBQUFHLG1CQUFJLElBQUUsSUFBSSxLQUFNLElBQUksS0FBSyxFQUFFLEtBQUcsTUFBSyxHQUFFLENBQUMsRUFBRyxRQUFRLENBQUMsR0FBRSxJQUFFLEtBQUc7QUFBQyxvQkFBSSxJQUFFLEVBQUUsU0FBUyxHQUFFLEtBQUcsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFFLEtBQUcsSUFBSSxDQUFDO0FBQUUsb0JBQUcsSUFBRSxJQUFFLEVBQUUsUUFBUTtBQUFFLHVCQUFHLElBQUUsRUFBRSxRQUFRLElBQUUsR0FBRSxFQUFFLFFBQVEsQ0FBQyxHQUFFLEtBQUcsSUFBRSxFQUFFLFNBQVMsSUFBRSxDQUFDLEtBQUcsRUFBRSxTQUFTLENBQUMsR0FBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUUsQ0FBQztBQUFBLHFCQUFPO0FBQUMsb0JBQUUsUUFBUSxFQUFFLFFBQVEsSUFBRSxDQUFDO0FBQUU7QUFBQSxnQkFBSztBQUFBLGNBQUM7QUFBQyxrQkFBRSxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxrQkFBRSxFQUFFLElBQUk7QUFBQSxnQkFBSyxFQUFFLFlBQVk7QUFBQSxnQkFDbmY7QUFBQSxnQkFBRTtBQUFBLGNBQUMsQ0FBQztBQUFFLGtCQUFFLEVBQUUsQ0FBQztBQUFFLHFCQUFPLEtBQUcsRUFBRSxHQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsR0FBRSxDQUFDLElBQUUsRUFBRSxZQUFZLElBQUUsSUFBRSxFQUFFLFlBQVksSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFBLFlBQUM7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLElBQUUsRUFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUM7QUFBRSxnQkFBRSxFQUFDLElBQUcsRUFBRSxFQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsSUFBRyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEdBQUU7QUFBRSxnQkFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRTtBQUFBLGNBQUMsTUFBSztBQUFBLGNBQXVCLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUFLLE1BQUs7QUFBQSxjQUFjLE1BQUs7QUFBQSxjQUFRLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUNuZixNQUFLO0FBQUEsY0FBVyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBVyxPQUFNO0FBQUEsY0FBVyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsWUFBSTtBQUFFLHFCQUFRLEtBQUs7QUFBRSxrQkFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLEdBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsZ0JBQUksS0FBRywyREFBMkQsTUFBTSxHQUFHLEdBQUUsS0FBRyx3RkFBd0YsTUFBTSxHQUFHO0FBQUUsZ0JBQUU7QUFBQSxjQUFDLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsY0FDcmYsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFO0FBQUEsY0FBRSxNQUFLLE9BQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFO0FBQUEsY0FBRSxNQUFLLE9BQUcsR0FBRyxFQUFFLEtBQUcsUUFBTSxNQUFJLEdBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUc7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHO0FBQUMsb0JBQUUsRUFBRTtBQUFHLHFCQUFHLElBQUUsSUFBRSxLQUFHLEtBQUcsTUFBSSxLQUFHO0FBQUksdUJBQU8sRUFBRSxHQUFFLENBQUM7QUFBQSxjQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUc7QUFBQyx5QkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUcsRUFBRSxLQUFHLEdBQUUsTUFBSSxFQUFFLEVBQUUsS0FBRyxJQUFJLElBQUUsS0FBRyxJQUFJLEdBQUc7QUFBRTtBQUFDLHVCQUFPLEVBQUUsRUFBRSxLQUFHLEdBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsS0FBRyxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsY0FBRSxNQUFLLE1BQUk7QUFBQSxjQUFLLE1BQUssT0FBRyxLQUFHLEVBQUUsTUFBSSxLQUFHLEVBQUUsS0FBRyxPQUFLO0FBQUEsY0FBSyxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQztBQUFBLGNBQUUsTUFBSyxNQUFJO0FBQUEsY0FBSyxNQUFLLE9BQUcsRUFBRSxNQUFJO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUN4ZixJQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHO0FBQUMsb0JBQUksSUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFHLEtBQUcsRUFBRSxLQUFHLEtBQUcsS0FBRyxDQUFDO0FBQUUsc0JBQUksRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLEtBQUcsS0FBRztBQUFJLG9CQUFHO0FBQUUsd0JBQUksTUFBSSxLQUFHLEVBQUUsS0FBRyxNQUFJLEVBQUUsTUFBSSxHQUFFLEtBQUcsS0FBRyxLQUFHLEtBQUcsRUFBRSxFQUFFLEVBQUUsTUFBSSxJQUFFO0FBQUEscUJBQVE7QUFBQyxzQkFBRTtBQUFHLHNCQUFJLEtBQUcsRUFBRSxLQUFHLElBQUUsRUFBRSxLQUFHLEtBQUc7QUFBRSxtQkFBQyxLQUFHLEtBQUcsS0FBRyxLQUFHLEVBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxNQUFJO0FBQUEsZ0JBQUc7QUFBQyx1QkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFO0FBQUEsY0FBRyxNQUFLLE9BQUcsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFHLEtBQUcsRUFBRSxLQUFHLEtBQUcsS0FBRyxDQUFDLEdBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxRQUFJLEVBQUUsS0FBRyxNQUFNLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEtBQUc7QUFBQSxjQUFLLE1BQUssT0FBRztBQUFDLG9CQUFFLEVBQUU7QUFBRyxvQkFBSSxJQUFFLEtBQUc7QUFBRSxvQkFBRSxLQUFLLElBQUksQ0FBQyxJQUFFO0FBQUcsd0JBQU8sSUFBRSxNQUFJLE9BQUssT0FBTyxVQUFRLElBQUUsS0FBRyxNQUFJLElBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUFBLGNBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFO0FBQUEsY0FBRyxNQUFLLE1BQUk7QUFBQSxZQUFHO0FBQUUsZ0JBQUUsRUFBRTtBQUFBLGNBQVE7QUFBQSxjQUNuZjtBQUFBLFlBQVU7QUFBRSxpQkFBSSxLQUFLO0FBQUUsZ0JBQUUsU0FBUyxDQUFDLE1BQUksSUFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLEdBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFHLGdCQUFFLEVBQUUsUUFBUSxTQUFRLEdBQUc7QUFBRSxnQkFBRSxHQUFHLENBQUM7QUFBRSxnQkFBRyxFQUFFLFNBQU87QUFBRSxxQkFBTztBQUFFLGVBQUcsR0FBRSxDQUFDO0FBQUUsbUJBQU8sRUFBRSxTQUFPO0FBQUEsVUFBQztBQUFDLFlBQUUsR0FBRztBQUN0SyxjQUFJLEtBQUcsQ0FBQyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRSxHQUFFLEtBQUc7QUFBQSxZQUFDLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFLO0FBQUUsY0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFHLEdBQUcsTUFBSSxHQUFFLE1BQUksQ0FBQztBQUFFLG1CQUFHO0FBQUU7QUFBSyxvQkFBTTtBQUFBLFlBQUc7QUFBQSxZQUFFLEdBQUUsU0FBUyxHQUFFO0FBQUMsaUJBQUcsTUFBSSxHQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsSUFBRyxRQUFPLEtBQUU7QUFBRSxnQkFBRSxHQUFHO0FBQUEsWUFBQztBQUFBLFlBQUUsR0FBRSxTQUFTLEdBQUU7QUFBQyxxQkFBSztBQUFFLGtCQUFFLFlBQVksRUFBQyxLQUFJLGlCQUFnQixRQUFPLEVBQUMsQ0FBQyxJQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRSxNQUFJO0FBQUEsWUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFO0FBQUMscUJBQUs7QUFBRSxtQkFBRyxNQUFJLElBQUUsV0FBVyxNQUFJLEVBQUUsQ0FBQyxJQUFFLElBQUUsWUFBWSxFQUFDLGNBQWEsR0FBRSxLQUFJLGVBQWMsQ0FBQyxLQUFHLElBQUUsRUFBRSxHQUFHLENBQUMsTUFBSSxFQUFFLFlBQVksRUFBQyxLQUFJLGVBQWMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUN6Z0IsR0FBRSxTQUFTLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxxQkFBSztBQUFFLGlCQUFHLFNBQU87QUFBRSxrQkFBRSxNQUFJLE1BQUk7QUFBRSx1QkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFO0FBQUksbUJBQUcsQ0FBQyxJQUFFLEdBQUcsRUFBRSxJQUFFLE1BQUksQ0FBQztBQUFFLGtCQUFFLElBQUUsSUFBRSxHQUFHLENBQUMsSUFBRSxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsS0FBRztBQUFFLGtCQUFFLEVBQUUsTUFBTSxNQUFLLEVBQUU7QUFBRSxnQkFBRSxLQUFHO0FBQUUscUJBQU87QUFBQSxZQUFDO0FBQUEsWUFBRSxHQUFFO0FBQUEsWUFBRyxHQUFFLFNBQVMsR0FBRTtBQUFDLG1CQUFHLEVBQUUsR0FBRyxNQUFJLENBQUMsRUFBRSxJQUFJO0FBQUEsWUFBQztBQUFBLFlBQUUsR0FBRSxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsa0JBQUUsSUFBRSxZQUFVLElBQUUsVUFBUSxDQUFDLENBQUMsS0FBRyxNQUFJLEtBQUcsYUFBVyxJQUFFO0FBQUkscUJBQUs7QUFBRSxrQkFBRSxJQUFJLEtBQUssTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGdCQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGdCQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGdCQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGdCQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGdCQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsZUFBZSxJQUFFO0FBQ2pmLGdCQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsVUFBVTtBQUFFLG1CQUFHLEVBQUUsUUFBUSxJQUFFLEtBQUssSUFBSSxFQUFFLGVBQWUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFHLFFBQU07QUFBRSxnQkFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRTtBQUFBLFlBQUM7QUFBQSxZQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGtCQUFFLElBQUUsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLHFCQUFLO0FBQUUsa0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGdCQUFFLEVBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxnQkFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFFBQVE7QUFBRSxnQkFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxnQkFBRSxFQUFFLElBQUUsT0FBSyxNQUFJLENBQUMs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QUFNLElBQUcsQ0FBQztBQUFBLFlBQ3pCO0FBQUEsVUFBQztBQUNUO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSztBQUNILHlCQUFlLE9BQVE7QUFDdkIsc0JBQVksRUFBQyxLQUFJLENBQUM7QUFDbEI7QUFBQSxRQUNGLEtBQUssT0FBTztBQUNWLGdCQUFNLEVBQUMsV0FBVyxjQUFjLFFBQVEsZUFBZSxRQUFPLElBQUk7QUFDbEUsY0FBSSxXQUFXLGNBQWMsUUFBUSxlQUFlLElBQUksTUFBTSxjQUFjLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxPQUFPLEVBQ2xHO0FBQUEsWUFDRyxhQUFXO0FBQ1Qsa0JBQUksUUFBUSxLQUFLLE9BQUssRUFBRSxDQUFDLE1BQU0sS0FBSyxHQUFHO0FBQ3JDLDRCQUFZLEVBQUMsTUFBTSxLQUFLLGtEQUFpRCxDQUFDO0FBQUEsY0FDNUUsT0FBTztBQUNMO0FBQUEsa0JBQ0ksRUFBQyxNQUFNLEtBQUssUUFBTztBQUFBLGtCQUNuQiwyQkFBMkIsT0FBdUM7QUFBQSxnQkFBQztBQUFBLGNBQ3pFO0FBQUEsWUFDRjtBQUFBLFlBQ0EsU0FBTztBQUNMLDBCQUFZLEVBQUMsTUFBTSxJQUFHLENBQUM7QUFBQSxZQUN6QjtBQUFBLFVBQUM7QUFDVDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUs7QUFDSCx1QkFBYSxPQUFRO0FBQ3JCLHNCQUFZLEVBQUMsS0FBSSxDQUFDO0FBQ2xCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVMsS0FBSztBQUNaLGtCQUFZLEVBQUMsTUFBTSxJQUFHLENBQW1CO0FBQUEsSUFDM0M7QUFBQSxFQUNGOyIsCiAgIm5hbWVzIjogWyJqb2luIiwgIndhc20iLCAid2FzbSIsICJ3YXNtIiwgInJlYWRGaWxlIiwgInJlYWRGaWxlIiwgIndhc20iLCAidGVuc29yIiwgImVycm9yQ29kZSIsICJpIl0KfQo=\n'}}),isProxy,proxyWorker,initializing2,initialized2,aborted2,initWasmCallbacks,queuedCallbacks,enqueueCallbacks,ensureWorker,onProxyWorkerMessage,scriptSrc,initializeWebAssemblyAndOrtRuntime,initializeOrtEp,copyFromExternalBuffer2,createSession2,releaseSession2,run2,endProfiling2,init_proxy_wrapper=__esm({"web/lib/wasm/proxy-wrapper.ts"(){init_esm(),init_wasm_core_impl(),init_wasm_factory(),isProxy=()=>!!env2.wasm.proxy&&"undefined"!=typeof document,initializing2=!1,initialized2=!1,aborted2=!1,queuedCallbacks=new Map,enqueueCallbacks=(t,e)=>{const n=queuedCallbacks.get(t);n?n.push(e):queuedCallbacks.set(t,[e])},ensureWorker=()=>{if(initializing2||!initialized2||aborted2||!proxyWorker)throw new Error("worker not ready")},onProxyWorkerMessage=t=>{switch(t.data.type){case"init-wasm":initializing2=!1,t.data.err?(aborted2=!0,initWasmCallbacks[1](t.data.err)):(initialized2=!0,initWasmCallbacks[0]());break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{const e=queuedCallbacks.get(t.data.type);t.data.err?e.shift()[1](t.data.err):e.shift()[0](t.data.out);break}}},scriptSrc="undefined"!=typeof document?document?.currentScript?.src:void 0,initializeWebAssemblyAndOrtRuntime=async()=>{if(!initialized2){if(initializing2)throw new Error("multiple calls to 'initWasm()' detected.");if(aborted2)throw new Error("previous call to 'initWasm()' failed.");if(initializing2=!0,isProxy())return void 0===env2.wasm.wasmPaths&&scriptSrc&&0!==scriptSrc.indexOf("blob:")&&(env2.wasm.wasmPaths=scriptSrc.substr(0,+scriptSrc.lastIndexOf("/")+1)),new Promise(((t,e)=>{proxyWorker?.terminate();const n=URL.createObjectURL(new Blob([require_main()],{type:"text/javascript"}));(proxyWorker=new Worker(n,{name:"ort-wasm-proxy-worker"})).onerror=t=>e(t),proxyWorker.onmessage=onProxyWorkerMessage,URL.revokeObjectURL(n),initWasmCallbacks=[t,e];const r={type:"init-wasm",in:env2};proxyWorker.postMessage(r)}));try{await initializeWebAssembly(env2.wasm),await initRuntime(env2),initialized2=!0}catch(t){throw aborted2=!0,t}finally{initializing2=!1}}},initializeOrtEp=async t=>{if(isProxy())return ensureWorker(),new Promise(((e,n)=>{enqueueCallbacks("init-ep",[e,n]);const r={type:"init-ep",in:{epName:t,env:env2}};proxyWorker.postMessage(r)}));await initEp(env2,t)},copyFromExternalBuffer2=async t=>isProxy()?(ensureWorker(),new Promise(((e,n)=>{enqueueCallbacks("copy-from",[e,n]);const r={type:"copy-from",in:{buffer:t}};proxyWorker.postMessage(r,[t.buffer])}))):copyFromExternalBuffer(t),createSession2=async(t,e)=>{if(isProxy()){if(e?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return ensureWorker(),new Promise(((n,r)=>{enqueueCallbacks("create",[n,r]);const s={type:"create",in:{model:t,options:e}},i=[];t instanceof Uint8Array&&i.push(t.buffer),proxyWorker.postMessage(s,i)}))}return createSession(t,e)},releaseSession2=async t=>{if(isProxy())return ensureWorker(),new Promise(((e,n)=>{enqueueCallbacks("release",[e,n]);const r={type:"release",in:t};proxyWorker.postMessage(r)}));releaseSession(t)},run2=async(t,e,n,r,s,i)=>{if(isProxy()){if(n.some((t=>"cpu"!==t[3])))throw new Error("input tensor on GPU is not supported for proxy.");if(s.some((t=>t)))throw new Error("pre-allocated output tensor is not supported for proxy.");return ensureWorker(),new Promise(((s,o)=>{enqueueCallbacks("run",[s,o]);const a=n,l={type:"run",in:{sessionId:t,inputIndices:e,inputs:a,outputIndices:r,options:i}};proxyWorker.postMessage(l,extractTransferableBuffers(a))}))}return run(t,e,n,r,s,i)},endProfiling2=async t=>{if(isProxy())return ensureWorker(),new Promise(((e,n)=>{enqueueCallbacks("end-profiling",[e,n]);const r={type:"end-profiling",in:t};proxyWorker.postMessage(r)}));endProfiling(t)}}}),encodeTensorMetadata,decodeTensorMetadata,OnnxruntimeWebAssemblySessionHandler,init_session_handler_inference2=__esm({"web/lib/wasm/session-handler-inference.ts"(){init_esm(),init_proxy_wrapper(),init_wasm_common(),init_wasm_utils_load_file(),encodeTensorMetadata=(t,e)=>{switch(t.location){case"cpu":return[t.type,t.dims,t.data,"cpu"];case"gpu-buffer":return[t.type,t.dims,{gpuBuffer:t.gpuBuffer},"gpu-buffer"];default:throw new Error(`invalid data location: ${t.location} for ${e()}`)}},decodeTensorMetadata=t=>{switch(t[3]){case"cpu":return new Tensor2(t[0],t[2],t[1]);case"gpu-buffer":{const e=t[0];if(!isGpuBufferSupportedType(e))throw new Error(`not supported data type: ${e} for deserializing GPU tensor`);const{gpuBuffer:n,download:r,dispose:s}=t[2];return Tensor2.fromGpuBuffer(n,{dataType:e,dims:t[1],download:r,dispose:s})}default:throw new Error(`invalid data location: ${t[3]}`)}},OnnxruntimeWebAssemblySessionHandler=class{async fetchModelAndCopyToWasmMemory(t){return copyFromExternalBuffer2(await loadFile(t))}async loadModel(t,e){let n;TRACE_FUNC_BEGIN(),n="string"==typeof t?"undefined"!=typeof process&&process.versions&&process.versions.node?await loadFile(t):await this.fetchModelAndCopyToWasmMemory(t):t,[this.sessionId,this.inputNames,this.outputNames]=await createSession2(n,e),TRACE_FUNC_END()}async dispose(){return releaseSession2(this.sessionId)}async run(t,e,n){TRACE_FUNC_BEGIN();const r=[],s=[];Object.entries(t).forEach((t=>{const e=t[0],n=t[1],i=this.inputNames.indexOf(e);if(-1===i)throw new Error(`invalid input '${e}'`);r.push(n),s.push(i)}));const i=[],o=[];Object.entries(e).forEach((t=>{const e=t[0],n=t[1],r=this.outputNames.indexOf(e);if(-1===r)throw new Error(`invalid output '${e}'`);i.push(n),o.push(r)}));const a=r.map(((t,e)=>encodeTensorMetadata(t,(()=>`input "${this.inputNames[s[e]]}"`)))),l=i.map(((t,e)=>t?encodeTensorMetadata(t,(()=>`output "${this.outputNames[o[e]]}"`)):null)),F=await run2(this.sessionId,s,a,o,l,n),U={};for(let t=0;t<F.length;t++)U[this.outputNames[o[t]]]=i[t]??decodeTensorMetadata(F[t]);return TRACE_FUNC_END(),U}startProfiling(){}endProfiling(){endProfiling2(this.sessionId)}}}}),initializeFlags,OnnxruntimeWebAssemblyBackend,init_backend_wasm=__esm({"web/lib/backend-wasm.ts"(){init_node_os(),init_esm(),init_proxy_wrapper(),init_session_handler_inference2(),initializeFlags=()=>{if(("number"!=typeof env2.wasm.initTimeout||env2.wasm.initTimeout<0)&&(env2.wasm.initTimeout=0),"boolean"!=typeof env2.wasm.simd&&(env2.wasm.simd=!0),"boolean"!=typeof env2.wasm.proxy&&(env2.wasm.proxy=!1),"boolean"!=typeof env2.wasm.trace&&(env2.wasm.trace=!1),"number"!=typeof env2.wasm.numThreads||!Number.isInteger(env2.wasm.numThreads)||env2.wasm.numThreads<=0){("undefined"!=typeof self&&!self.crossOriginIsolated||"undefined"!=typeof process&&process.versions&&process.versions.node)&&(env2.wasm.numThreads=1);const t="undefined"==typeof navigator?cpus().length:navigator.hardwareConcurrency;env2.wasm.numThreads=Math.min(4,Math.ceil((t||1)/2))}},OnnxruntimeWebAssemblyBackend=class{async init(t){initializeFlags(),await initializeWebAssemblyAndOrtRuntime(),await initializeOrtEp(t)}async createInferenceSessionHandler(t,e){const n=new OnnxruntimeWebAssemblySessionHandler;return await n.loadModel(t,e),Promise.resolve(n)}}}}),backend_wasm_inference_exports={},wasmBackend;__export(backend_wasm_inference_exports,{wasmBackend:()=>wasmBackend});var init_backend_wasm_inference=__esm({"web/lib/backend-wasm-inference.ts"(){init_backend_wasm(),wasmBackend=new OnnxruntimeWebAssemblyBackend}}),lib_exports={};__export(lib_exports,{InferenceSession:()=>InferenceSession2,TRACE:()=>TRACE,TRACE_FUNC_BEGIN:()=>TRACE_FUNC_BEGIN,TRACE_FUNC_END:()=>TRACE_FUNC_END,Tensor:()=>Tensor2,TrainingSession:()=>TrainingSession2,default:()=>lib_default,env:()=>env2,registerBackend:()=>registerBackend}),init_esm(),init_esm(),init_esm();var version2="1.17.1",lib_default=esm_exports;{const t=(init_backend_onnxjs(),__toCommonJS(backend_onnxjs_exports)).onnxjsBackend;registerBackend("webgl",t,-10)}{const t=(init_backend_wasm_inference(),__toCommonJS(backend_wasm_inference_exports)).wasmBackend;0,registerBackend("cpu",t,10),registerBackend("wasm",t,10),registerBackend("webnn",t,9)}return Object.defineProperty(env2.versions,"web",{value:version2,enumerable:!0}),__toCommonJS(lib_exports)})();