@vonage/ml-transformers 4.3.6 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/ml-transformers.es.js +5809 -5616
  2. package/dist/ml-transformers.min.js +3 -3
  3. package/dist/ml-transformers.static.js +5809 -5616
  4. package/dist/ml-transformers.umd.js +99 -99
  5. package/dist/types/lib/main.d.ts +4 -4
  6. package/dist/types/lib/src/facades/vonage-media-processor.d.ts +2 -2
  7. package/dist/types/lib/src/filters/background-filter.d.ts +7 -18
  8. package/dist/types/lib/src/processors/processor-main.d.ts +2 -2
  9. package/dist/types/lib/src/processors/processor-worker.d.ts +1 -1
  10. package/dist/types/lib/src/renderers/canvas2d/renderers/blur-background.d.ts +7 -0
  11. package/dist/types/lib/src/renderers/canvas2d/renderers/blur-silhouette.d.ts +7 -0
  12. package/dist/types/lib/src/renderers/canvas2d/renderers/canvas2d-renderer.d.ts +17 -0
  13. package/dist/types/lib/src/renderers/canvas2d/renderers/factory.d.ts +11 -0
  14. package/dist/types/lib/src/renderers/canvas2d/renderers/image-background.d.ts +7 -0
  15. package/dist/types/lib/src/renderers/canvas2d/renderers/video-background.d.ts +8 -0
  16. package/dist/types/lib/src/renderers/factory.d.ts +15 -0
  17. package/dist/types/lib/src/renderers/interfaces/factory.d.ts +10 -0
  18. package/dist/types/lib/src/renderers/interfaces/renderer.d.ts +9 -0
  19. package/dist/types/lib/src/renderers/interfaces/renderers/blur-background.d.ts +3 -0
  20. package/dist/types/lib/src/renderers/interfaces/renderers/blur-silhouette.d.ts +3 -0
  21. package/dist/types/lib/src/renderers/interfaces/renderers/image-background.d.ts +4 -0
  22. package/dist/types/lib/src/renderers/interfaces/renderers/video-background.d.ts +4 -0
  23. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/background-blur.d.ts +2 -2
  24. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/background-image.d.ts +2 -2
  25. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/background-video.d.ts +2 -2
  26. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/foreground-blur.d.ts +2 -2
  27. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/improve-segmentation-mask.d.ts +4 -2
  28. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/output-mask.d.ts +2 -2
  29. package/dist/types/lib/src/{webgl → renderers/webgl}/pipelines/resize-image.d.ts +2 -2
  30. package/dist/types/lib/src/renderers/webgl/renderers/blur-background.d.ts +7 -0
  31. package/dist/types/lib/src/renderers/webgl/renderers/blur-silhouette.d.ts +7 -0
  32. package/dist/types/lib/src/renderers/webgl/renderers/factory.d.ts +10 -0
  33. package/dist/types/lib/src/renderers/webgl/renderers/image-background.d.ts +14 -0
  34. package/dist/types/lib/src/renderers/webgl/renderers/video-background.d.ts +8 -0
  35. package/dist/types/lib/src/renderers/webgl/renderers/webgl-renderer.d.ts +23 -0
  36. package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-pipeline-program-double-buffer.d.ts +1 -1
  37. package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-pipeline-program.d.ts +1 -1
  38. package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-pipeline.d.ts +1 -1
  39. package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-transormer-pipeline.d.ts +1 -1
  40. package/dist/types/lib/src/transformers/background-transformer.d.ts +2 -3
  41. package/dist/types/lib/src/types.d.ts +43 -29
  42. package/dist/types/lib/src/utils/support.d.ts +2 -1
  43. package/dist/types/lib/src/utils/webgl.d.ts +2 -0
  44. package/package.json +3 -3
  45. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/blur/blur.d.ts +0 -0
  46. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/blur-masked/blur-masked.d.ts +0 -0
  47. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/expend/expend.d.ts +0 -0
  48. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/flickering/flickering.d.ts +0 -0
  49. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/highpass/highpass.d.ts +0 -0
  50. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/joint-bilateral/joint-bilateral.d.ts +0 -0
  51. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/minimum-surface/minimum-surface.d.ts +0 -0
  52. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/mix/mix.d.ts +0 -0
  53. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/power/power.d.ts +0 -0
  54. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/refine-mask/refine-mask.d.ts +0 -0
  55. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/render-texture/render-texture.d.ts +0 -0
  56. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/smooth/smooth.d.ts +0 -0
  57. /package/dist/types/lib/src/{webgl → renderers/webgl}/programs/track/track.d.ts +0 -0
  58. /package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-profiler-reporter.d.ts +0 -0
  59. /package/dist/types/lib/src/{webgl → renderers/webgl}/webgl-profiler.d.ts +0 -0
@@ -1,41 +1,41 @@
1
- (function(Ae,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ae=typeof globalThis<"u"?globalThis:Ae||self,Dn(Ae["ml-transformers"]={}))})(this,function(Ae){"use strict";var h3=Object.defineProperty;var f3=(Ae,Dn,yr)=>Dn in Ae?h3(Ae,Dn,{enumerable:!0,configurable:!0,writable:!0,value:yr}):Ae[Dn]=yr;var Wt=(Ae,Dn,yr)=>(f3(Ae,typeof Dn!="symbol"?Dn+"":Dn,yr),yr);var Dn=Object.defineProperty,yr=(i,n,r)=>n in i?Dn(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Me=(i,n,r)=>(yr(i,typeof n!="symbol"?n+"":n,r),r);function Kl(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class nr{}Me(nr,"updates",{transformer_new:"New transformer",transformer_null:"Null transformer"}),Me(nr,"errors",{transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"});const or=new WeakMap,ei=new WeakMap,kr=new WeakMap,Di=Symbol("anyProducer"),Do=Promise.resolve(),ni=Symbol("listenerAdded"),ri=Symbol("listenerRemoved");let $i=!1;function Sr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function ii(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Tr(i,n){const r=ei.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function Ur(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:Di,p=kr.get(i);return p.has(r)||p.set(r,new Set),p.get(r)}function jl(i,n,r){const p=kr.get(i);if(p.has(n))for(const G of p.get(n))G.enqueue(r);if(p.has(Di)){const G=Promise.all([n,r]);for(const S of p.get(Di))S.enqueue(G)}}function $o(i,n){n=Array.isArray(n)?n:[n];let r=!1,p=()=>{},G=[];const S={enqueue(H){G.push(H),p()},finish(){r=!0,p()}};for(const H of n)Ur(i,H).add(S);return{async next(){return G?G.length===0?r?(G=void 0,this.next()):(await new Promise(H=>{p=H}),this.next()):{done:!1,value:await G.shift()}:{done:!0}},async return(H){G=void 0;for(const w of n)Ur(i,w).delete(S);return p(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function qo(i){if(i===void 0)return ts;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!ts.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const qi=i=>i===ni||i===ri;class gr{static mixin(n,r){return r=qo(r),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const H of r)if(p.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function G(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:G});const S=H=>function(...w){return this[n][H](...w)};for(const H of r)Object.defineProperty(p.prototype,H,{enumerable:!1,value:S(H)});return p}}static get isDebugEnabled(){if(typeof process!="object")return $i;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||$i}static set isDebugEnabled(n){$i=n}constructor(n={}){or.set(this,new Set),ei.set(this,new Map),kr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,p,G,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof G=="symbol"&&(G=G.toString());const H=new Date,w=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${w}][emittery:${r}][${p}] Event Name: ${G}
2
- data: ${S}`)})}logIfDebugEnabled(n,r,p){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,p)}on(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Tr(this,p).add(r),this.logIfDebugEnabled("subscribe",p,void 0),qi(p)||this.emit(ni,{eventName:p,listener:r});return this.off.bind(this,n,r)}off(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Tr(this,p).delete(r),this.logIfDebugEnabled("unsubscribe",p,void 0),qi(p)||this.emit(ri,{eventName:p,listener:r})}once(n){return new Promise(r=>{const p=this.on(n,G=>{p(),r(G)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Sr(r);return $o(this,n)}async emit(n,r){Sr(n),this.logIfDebugEnabled("emit",n,r),jl(this,n,r);const p=Tr(this,n),G=or.get(this),S=[...p],H=qi(n)?[]:[...G];await Do,await Promise.all([...S.map(async w=>{if(p.has(w))return w(r)}),...H.map(async w=>{if(G.has(w))return w(n,r)})])}async emitSerial(n,r){Sr(n),this.logIfDebugEnabled("emitSerial",n,r);const p=Tr(this,n),G=or.get(this),S=[...p],H=[...G];await Do;for(const w of S)p.has(w)&&await w(r);for(const w of H)G.has(w)&&await w(n,r)}onAny(n){return ii(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(n),this.emit(ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return $o(this)}offAny(n){ii(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(ri,{listener:n}),or.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Tr(this,r).clear();const p=Ur(this,r);for(const G of p)G.finish();p.clear()}else{or.get(this).clear();for(const p of ei.get(this).values())p.clear();for(const p of kr.get(this).values()){for(const G of p)G.finish();p.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const p of n){if(typeof p=="string"){r+=or.get(this).size+Tr(this,p).size+Ur(this,p).size+Ur(this).size;continue}typeof p<"u"&&Sr(p),r+=or.get(this).size;for(const G of ei.get(this).values())r+=G.size;for(const G of kr.get(this).values())r+=G.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=qo(r);for(const p of r){if(n[p]!==void 0)throw new Error(`The property \`${p}\` already exists on \`target\``);Object.defineProperty(n,p,{enumerable:!1,value:this[p].bind(this)})}}}const ts=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:ri,writable:!1,enumerable:!0,configurable:!1});var to=gr;function Ol(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function zl(i){if(Ol(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function eo(i){return zl(i).message}var Pl=Object.defineProperty,_l=(i,n,r)=>n in i?Pl(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Ql=(i,n,r)=>(_l(i,typeof n!="symbol"?n+"":n,r),r);const Dl="hlg.tokbox.com/prod/logging/vcp_webrtc",$l="https://",ql=1e4;let oi;const t2=new Uint8Array(16);function e2(){if(!oi&&(oi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!oi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return oi(t2)}const Un=[];for(let i=0;i<256;++i)Un.push((i+256).toString(16).slice(1));function n2(i,n=0){return(Un[i[n+0]]+Un[i[n+1]]+Un[i[n+2]]+Un[i[n+3]]+"-"+Un[i[n+4]]+Un[i[n+5]]+"-"+Un[i[n+6]]+Un[i[n+7]]+"-"+Un[i[n+8]]+Un[i[n+9]]+"-"+Un[i[n+10]]+Un[i[n+11]]+Un[i[n+12]]+Un[i[n+13]]+Un[i[n+14]]+Un[i[n+15]]).toLowerCase()}const r2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),es={randomUUID:r2};function i2(i,n,r){if(es.randomUUID&&!n&&!i)return es.randomUUID();i=i||{};const p=i.random||(i.rng||e2)();if(p[6]=p[6]&15|64,p[8]=p[8]&63|128,n){r=r||0;for(let G=0;G<16;++G)n[r+G]=p[G];return n}return n2(p)}function no(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const sr=no("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function ns(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let o2=0;function s2(i,n,r,p,G){const S=o2++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>ns(H))),new Promise(H=>{G==null||G.set(S,H)})}function Br(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>ns(S)))}const rs=no("workerized",{});function is(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function l2(){if(is())Br({type:Zr.GLOBALS_SYNC},sr);else{const i=[];for(const n in rs){const{worker:r,resolvers:p}=rs[n].workerContext;r&&i.push(s2(r,Zr.GLOBALS_SYNC,"",[sr],p))}await Promise.all(i)}}function si(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],si(i[r],n[r])):typeof i[r]=="object"?(n[r]={},si(i[r],n[r])):n[r]=i[r]}async function c2(i,n){const{functionName:r,args:p}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Br(i,await n.instance[r](...p!=null?p:[]))}const u2=no("registeredWorkers",{});function a2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=u2[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;si(p,sr),Br(i,typeof n.instance!==void 0)}async function d2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Br(i,p)}function h2(i){if(!i.args)throw"Missing globals while syncing";si(i.args[0],sr),Br(i,{})}function f2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:a2(r,i);break;case Zr.FORWARD:c2(r,i);break;case Zr.TERMINATE:d2(r,i);break;case Zr.GLOBALS_SYNC:h2(r);break}}}is()&&f2();function m2(i,n){return sr[i]||(sr[i]=n),[()=>sr[i],async r=>{sr[i]=r,await l2()}]}function p2(i,n){return m2(i,n)}const[b2,y2]=p2("metadata");function g2(i){y2(i)}function li(){return b2()}class ro{constructor(n){Ql(this,"uuid",i2()),this.config=n}async send(n){var r,p,G;const{appId:S,sourceType:H}=(r=li())!=null?r:{};if(!S||!H)return"metadata missing";const w=new AbortController,E=setTimeout(()=>w.abort(),ql);return await((G=(p=this.config)==null?void 0:p.fetch)!=null?G:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:w.signal}),clearTimeout(E),"success"}getUrl(){var n;let r=(n=li().proxyUrl)!=null?n:$l;return r+=(r.at(-1)==="/"?"":"/")+Dl,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=li();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const ci="2.0.2";class Z2{constructor(n){Me(this,"frameTransformedCount",0),Me(this,"frameFromSourceCount",0),Me(this,"startAt",0),Me(this,"reporter"),this.config=n,this.reporter=new ro(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,p=(Date.now()-n)/1e3;return r/p}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:p,frameTransformedCount:G,frameFromSourceCount:S}=this,H=Date.now(),w=(H-p)/1e3,E=G/w,et=S/w;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=H,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:E,framesTransformed:G,...n})):"success"}}var os=(i=>(i.FPS_DROP="fps_drop",i))(os||{}),ss=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(ss||{}),ui=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(ui||{});const v2=500,G2=.8;class X2 extends to{constructor(n,r){super(),Me(this,"reporter_",new ro),Me(this,"reporterQos_",new Z2({loggingIntervalFrameCount:v2,report:{version:ci}})),Me(this,"transformerType_"),Me(this,"transformer_"),Me(this,"shouldStop_"),Me(this,"isFlashed_"),Me(this,"mediaTransformerQosReportStartTimestamp_"),Me(this,"videoHeight_"),Me(this,"videoWidth_"),Me(this,"trackExpectedRate_"),Me(this,"index_"),Me(this,"controller_"),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:nr.errors.transformer_start,variation:"Error",error:eo(r)});const p={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",p)}}async transform(n,r){var p,G,S,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(p=n==null?void 0:n.displayHeight)!=null?p:0,this.videoWidth_=(G=n==null?void 0:n.displayWidth)!=null?G:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((H=(S=this.transformer_).transform)==null?void 0:H.call(S,n,r)),this.reportQos()}catch(w){this.report({message:nr.errors.transformer_transform,variation:"Error",error:eo(w)});const E={eventMetaData:{transformerIndex:this.index_},error:w,function:"transform"};this.emit("error",E)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*G2>this.reporterQos_.fps){const w={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",w)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:nr.errors.transformer_flush,variation:"Error",error:eo(r)});const p={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",p)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:ci,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:ci,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class W2 extends to{constructor(n){super(),Me(this,"transformers_"),Me(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let p=new X2(n[r],r);p.on("error",G=>{this.emit("error",G)}),p.on("warn",G=>{this.emit("warn",G)}),this.transformers_.push(p)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let p=n;for(let G of this.transformers_)n=n.pipeThrough(new TransformStream(G));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await p.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async G=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(S=>{console.error("[Pipeline] Error from stream transform:",S)}),await r.abort(G),await p.cancel(G),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class V2 extends to{constructor(){super(),Me(this,"reporter_"),Me(this,"pipeline_"),Me(this,"transformers_"),Me(this,"readable_"),Me(this,"writable_"),Me(this,"trackExpectedRate_"),this.reporter_=new ro,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:nr.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:nr.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:nr.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let p=!1;this.pipeline_&&(p=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new W2(this.transformers_),this.pipeline_.on("warn",G=>{this.emit("warn",G)}),this.pipeline_.on("error",G=>{this.emit("error",G)}),this.pipeline_.on("pipelineInfo",G=>{p&&(G==="pipeline_started"?G=ui.pipeline_restarted:G==="pipeline_started_with_error"&&(G=ui.pipeline_restarted_with_error)),this.emit("pipelineInfo",G)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(G=>{r(G)})})}setTransformers(n){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:ci,action:"MediaProcessor",...n})}}class R2{constructor(){Me(this,"processor_"),Me(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,p)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(G){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${G}`),p(G)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):p("kind not supported")}catch(G){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${G}`),p(G)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class x2{constructor(n){Me(this,"insertableStreamHelper_"),Me(this,"mediaProcessor_"),this.insertableStreamHelper_=new R2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,p)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(G=>{p(G)})}).catch(G=>{p(G)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(p=>{r(p)}):r("no processor")})}}var Ar=(i=>(i.Low="Low",i.High="High",i))(Ar||{}),ls=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(ls||{}),cs=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(cs||{});const I2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var S2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},p,G;r.ready=new Promise(function(tt,it){p=tt,G=it});var S={},H;for(H in r)r.hasOwnProperty(H)&&(S[H]=r[H]);var w="./this.program",E=function(tt,it){throw it},et=!0,ct="";function dt(tt){return r.locateFile?r.locateFile(tt,ct):ct+tt}var Ft;typeof document<"u"&&document.currentScript&&(ct=document.currentScript.src),i&&(ct=i),ct.indexOf("blob:")!==0?ct=ct.substr(0,ct.replace(/[?#].*/,"").lastIndexOf("/")+1):ct="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in S)S.hasOwnProperty(H)&&(r[H]=S[H]);S=null,r.arguments&&r.arguments,r.thisProgram&&(w=r.thisProgram),r.quit&&(E=r.quit);var pt;r.wasmBinary&&(pt=r.wasmBinary);var Mt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Jt,qt=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function De(tt,it,ut){for(var Pt=it+ut,ae=it;tt[ae]&&!(ae>=Pt);)++ae;if(ae-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,ae));for(var ce="";it<ae;){var St=tt[it++];if(!(St&128)){ce+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ce+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ce+=String.fromCharCode(St);else{var qe=St-65536;ce+=String.fromCharCode(55296|qe>>10,56320|qe&1023)}}return ce}function an(tt,it){return tt?De(gt,tt,it):""}function Ve(tt,it,ut){for(var Pt=0;Pt<tt.length;++Pt)de[it++>>0]=tt.charCodeAt(Pt);ut||(de[it>>0]=0)}function Dt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Kn,de,gt,pn;function jn(tt){Kn=tt,r.HEAP8=de=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=pn=new Int32Array(tt),r.HEAPU8=gt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ht=[],Te=[],on=[],Xn=0;function Ln(){return Mt||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());_t(Ht)}function Nn(){_t(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Cn(r.postRun.shift());_t(on)}function bn(tt){Ht.unshift(tt)}function En(tt){Te.unshift(tt)}function Cn(tt){on.unshift(tt)}var Oe=0,Ke=null;function In(tt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Wn(tt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&Ke){var it=Ke;Ke=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),qt=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw G(it),it}var Se="data:application/octet-stream;base64,";function ze(tt){return tt.startsWith(Se)}var ne;ne="tflite-simd.wasm",ze(ne)||(ne=dt(ne));function We(tt){try{if(tt==ne&&pt)return new Uint8Array(pt);if(!Ft)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function sn(){return!pt&&et&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+ne+"'";return tt.arrayBuffer()}).catch(function(){return We(ne)}):Promise.resolve().then(function(){return We(ne)})}function Ue(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,Jt=r.asm.q,jn(Jt.buffer),Re=r.asm.E,En(r.asm.r),Wn()}In();function ut(St){it(St.instance)}function Pt(St){return sn().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function ae(){return!pt&&typeof WebAssembly.instantiateStreaming=="function"&&!ze(ne)&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),Pt(ut)})}):Pt(ut)}if(r.instantiateWasm)try{var ce=r.instantiateWasm(tt,it);return ce}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return ae().catch(G),{}}function _t(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,Pt){he("Assertion failed: "+an(tt)+", at: "+[it?an(it):"unknown filename",ut,Pt?an(Pt):"unknown function"])}function Ce(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function At(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function we(tt){return pn[Ct()>>2]=tt,tt}function $e(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return we(28),-1;return pn[it>>2]=ut/1e3|0,pn[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ut){gt.copyWithin(tt,it,it+ut)}function je(tt){try{return Jt.grow(tt-Kn.byteLength+65535>>>16),jn(Jt.buffer),1}catch{}}function Pe(tt){var it=gt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var Pt=1;Pt<=4;Pt*=2){var ae=it*(1+.2/Pt);ae=Math.min(ae,tt+100663296);var ce=Math.min(ut,Dt(Math.max(tt,ae),65536)),St=je(ce);if(St)return!0}return!1}function Ie(tt){for(var it=jt();jt()-it<tt;);}var Vn={};function ln(){return w||"./this.program"}function _e(){if(!_e.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:ln()};for(var ut in Vn)Vn[ut]===void 0?delete it[ut]:it[ut]=Vn[ut];var Pt=[];for(var ut in it)Pt.push(ut+"="+it[ut]);_e.strings=Pt}return _e.strings}var cn={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=cn.buffers[tt];it===0||it===10?((tt===1?Lt:at)(De(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){cn.varargs+=4;var tt=pn[cn.varargs-4>>2];return tt},getStr:function(tt){var it=an(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return _e().forEach(function(Pt,ae){var ce=it+ut;pn[tt+ae*4>>2]=ce,Ve(Pt,ce),ut+=Pt.length+1}),0}function Fe(tt,it){var ut=_e();pn[tt>>2]=ut.length;var Pt=0;return ut.forEach(function(ae){Pt+=ae.length+1}),pn[it>>2]=Pt,0}function Ge(tt){ee(tt)}function re(tt){return 0}function Qe(tt,it,ut,Pt,ae){}function te(tt,it,ut,Pt){for(var ae=0,ce=0;ce<ut;ce++){for(var St=pn[it+ce*8>>2],me=pn[it+(ce*8+4)>>2],He=0;He<me;He++)cn.printChar(tt,gt[St+He]);ae+=me}return pn[Pt>>2]=ae,0}function zt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function hn(tt,it){hn.randomDevice||(hn.randomDevice=zt());for(var ut=0;ut<it;ut++)de[tt+ut>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:At,b:xe,n:$e,h:Xe,l:Ot,m:Pe,p:Ie,f:ve,g:Fe,j:Ge,i:re,k:Qe,c:te,o:hn};Ue(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ct=r.___errno_location=function(){return(Ct=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function ie(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ke=function tt(){Vt||Ye(),Vt||(Ke=tt)};function Ye(tt){if(Oe>0||(xn(),Oe>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!qt&&(Nn(),p(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Ye;function ee(tt,it){oe(tt)}function oe(tt){Ln()||(r.onExit&&r.onExit(tt),qt=!0),E(tt,new ie(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Ye(),n.ready}}();class T2{constructor(){Wt(this,"selectedTFLite");Wt(this,"isSIMDSupported",!1);Wt(this,"isThreadsSupported",!1);Wt(this,"inputWidth",0);Wt(this,"inputHeight",0);Wt(this,"inputChannelCount",0);Wt(this,"inputMemoryOffset",0);Wt(this,"outputWidth",0);Wt(this,"outputHeight",0);Wt(this,"outputChannelCount",0);Wt(this,"outputMemoryOffset",0)}}const w2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",F2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function Y2(i=w2,n=F2){let r=new T2;var p=new Promise(function(G,S){async function H(){return S2({locateFile:function(et){return i+et}})}async function w(E){return new Promise(async(et,ct)=>{const dt=E;if(typeof dt>"u")return ct("TFLite backend unavailable: wasmSimd");const Ft="selfie_segmentation_landscape";console.log("Loading tflite model:",Ft);let Lt=n+`${Ft}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const pt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",pt.byteLength);const Mt=dt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Mt),console.log("Loading model buffer..."),dt.HEAPU8.set(new Uint8Array(pt),Mt);const Jt=dt._loadModel(pt.byteLength);if(console.log("Load model result:",Jt),Jt!==0){ct("Cannot load model");return}r.inputWidth=dt._getInputWidth(),r.inputHeight=dt._getInputHeight(),r.inputChannelCount=dt._getInputChannelCount(),r.inputMemoryOffset=dt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=dt._getOutputMemoryOffset(),r.outputWidth=dt._getOutputWidth(),r.outputHeight=dt._getOutputHeight(),r.outputChannelCount=dt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=dt}catch(at){ct(at);return}et()})}H().then(E=>{if(E===null)throw console.error("loadTFLite null"),"loadTFLite null";w(E).then(et=>{G(r)}).catch(et=>{console.error("loadTFLiteModel error"),S("loadTFLiteModel error")})}).catch(E=>{console.error("loadTFLite error:",E),S("loadTFLite error:"+E)})});return p}class us{constructor(){Wt(this,"canvas",new OffscreenCanvas(0,0));Wt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Wt(this,"pixelCount",0);Wt(this,"inputOffset",0);Wt(this,"outputOffset",0);Wt(this,"infos");Wt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await Y2(n,r)}getOutputDimensions(){var n,r,p,G;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(G=(p=this.infos)==null?void 0:p.outputHeight)!=null?G:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,p=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,p);const G=this.context.getImageData(0,0,r,p),S=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const w=this.inputOffset+H*3;S[w]=G.data[H*4]/255,S[w+1]=G.data[H*4+1]/255,S[w+2]=G.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const w=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*w}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,p;return(p=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?p:!1}}async function L2(i,n){const{wasm:r,insertableStreams:p,simd:G,webgl:S}=await as(i,n);if(!r.supported)throw r.message;if(!p.supported)throw p.message;if(!G.supported)throw G.message;if(!S.supported)throw S.message}async function as(i,n){const r=new us;await r.initWasm(i,n);const p={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await I2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:C2()};try{await Kl()}catch(G){p.insertableStreams.supported=!1,p.insertableStreams.message=G}return p}function C2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}const ai={};(function(){var i;function n(m){var W=0;return function(){return W<m.length?{done:!1,value:m[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(m,W,V){return m==Array.prototype||m==Object.prototype||(m[W]=V.value),m};function p(m){m=[typeof globalThis=="object"&&globalThis,m,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<m.length;++W){var V=m[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var G=p(this);function S(m,W){if(W)t:{var V=G;m=m.split(".");for(var k=0;k<m.length-1;k++){var z=m[k];if(!(z in V))break t;V=V[z]}m=m[m.length-1],k=V[m],W=W(k),W!=k&&W!=null&&r(V,m,{configurable:!0,writable:!0,value:W})}}S("Symbol",function(m){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(k+(ot||"")+"_"+z++,ot)}function V(ot,O){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:O})}if(m)return m;V.prototype.toString=function(){return this.g};var k="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",z=0;return W}),S("Symbol.iterator",function(m){if(m)return m;m=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var k=G[W[V]];typeof k=="function"&&typeof k.prototype[m]!="function"&&r(k.prototype,m,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return m});function H(m){return m={next:m},m[Symbol.iterator]=function(){return this},m}function w(m){var W=typeof Symbol<"u"&&Symbol.iterator&&m[Symbol.iterator];return W?W.call(m):{next:n(m)}}function E(m){if(!(m instanceof Array)){m=w(m);for(var W,V=[];!(W=m.next()).done;)V.push(W.value);m=V}return m}var et=typeof Object.create=="function"?Object.create:function(m){function W(){}return W.prototype=m,new W},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(m,W){if(m.__proto__=W,m.__proto__!==W)throw new TypeError(m+" is not extensible");return m}:null}var at=ct;function pt(m,W){if(m.prototype=et(W.prototype),m.prototype.constructor=m,at)at(m,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var k=Object.getOwnPropertyDescriptor(W,V);k&&Object.defineProperty(m,V,k)}else m[V]=W[V];m.ea=W.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(m){if(m.l)throw new TypeError("Generator is already running");m.l=!0}Mt.prototype.o=function(m){this.h=m};function qt(m,W){m.j={U:W,V:!0},m.g=m.m||m.s}Mt.prototype.return=function(m){this.j={return:m},this.g=this.s};function P(m,W,V){return m.g=V,{value:W}}function De(m){this.g=new Mt,this.h=m}function an(m,W){Jt(m.g);var V=m.g.i;return V?Ve(m,"return"in V?V.return:function(k){return{value:k,done:!0}},W,m.g.return):(m.g.return(W),Dt(m))}function Ve(m,W,V,k){try{var z=W.call(m.g.i,V);if(!(z instanceof Object))throw new TypeError("Iterator result "+z+" is not an object");if(!z.done)return m.g.l=!1,z;var ot=z.value}catch(O){return m.g.i=null,qt(m.g,O),Dt(m)}return m.g.i=null,k.call(m.g,ot),Dt(m)}function Dt(m){for(;m.g.g;)try{var W=m.h(m.g);if(W)return m.g.l=!1,{value:W.value,done:!1}}catch(V){m.g.h=void 0,qt(m.g,V)}if(m.g.l=!1,m.g.j){if(W=m.g.j,m.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Kn(m){this.next=function(W){return Jt(m.g),m.g.i?W=Ve(m,m.g.i.next,W,m.g.o):(m.g.o(W),W=Dt(m)),W},this.throw=function(W){return Jt(m.g),m.g.i?W=Ve(m,m.g.i.throw,W,m.g.o):(qt(m.g,W),W=Dt(m)),W},this.return=function(W){return an(m,W)},this[Symbol.iterator]=function(){return this}}function de(m,W){return W=new Kn(new De(W)),at&&m.prototype&&at(W,m.prototype),W}function gt(m,W){m instanceof String&&(m+="");var V=0,k=!1,z={next:function(){if(!k&&V<m.length){var ot=V++;return{value:W(ot,m[ot]),done:!1}}return k=!0,{done:!0,value:void 0}}};return z[Symbol.iterator]=function(){return z},z}var pn=typeof Object.assign=="function"?Object.assign:function(m,W){for(var V=1;V<arguments.length;V++){var k=arguments[V];if(k)for(var z in k)Object.prototype.hasOwnProperty.call(k,z)&&(m[z]=k[z])}return m};S("Object.assign",function(m){return m||pn}),S("Promise",function(m){function W(O){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{O(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function k(O){return O instanceof W?O:new W(function(rt){rt(O)})}if(m)return m;V.prototype.h=function(O){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(O)};var z=G.setTimeout;V.prototype.i=function(O){z(O,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var O=this.g;this.g=[];for(var rt=0;rt<O.length;++rt){var bt=O[rt];O[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(O){this.i(function(){throw O})},W.prototype.j=function(){function O(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:O(this.C),reject:O(this.l)}},W.prototype.C=function(O){if(O===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(O instanceof W)this.F(O);else{t:switch(typeof O){case"object":var rt=O!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(O):this.m(O)}},W.prototype.u=function(O){var rt=void 0;try{rt=O.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,O):this.m(O)},W.prototype.l=function(O){this.s(2,O)},W.prototype.m=function(O){this.s(1,O)},W.prototype.s=function(O,rt){if(this.h!=0)throw Error("Cannot settle("+O+", "+rt+"): Promise already settled in state"+this.h);this.h=O,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var O=this;z(function(){if(O.B()){var rt=G.console;typeof rt<"u"&&rt.error(O.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var O=G.CustomEvent,rt=G.Event,bt=G.dispatchEvent;return typeof bt>"u"?!0:(typeof O=="function"?O=new O("unhandledrejection",{cancelable:!0}):typeof rt=="function"?O=new rt("unhandledrejection",{cancelable:!0}):(O=G.document.createEvent("CustomEvent"),O.initCustomEvent("unhandledrejection",!1,!0,O)),O.promise=this,O.reason=this.i,bt(O))},W.prototype.A=function(){if(this.g!=null){for(var O=0;O<this.g.length;++O)ot.h(this.g[O]);this.g=null}};var ot=new V;return W.prototype.F=function(O){var rt=this.j();O.J(rt.resolve,rt.reject)},W.prototype.G=function(O,rt){var bt=this.j();try{O.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(O,rt){function bt($t,Et){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(kt){Ut(kt)}}:Et}var Rt,Ut,Nt=new W(function($t,Et){Rt=$t,Ut=Et});return this.J(bt(O,Rt),bt(rt,Ut)),Nt},W.prototype.catch=function(O){return this.then(void 0,O)},W.prototype.J=function(O,rt){function bt(){switch(Rt.h){case 1:O(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=k,W.reject=function(O){return new W(function(rt,bt){bt(O)})},W.race=function(O){return new W(function(rt,bt){for(var Rt=w(O),Ut=Rt.next();!Ut.done;Ut=Rt.next())k(Ut.value).J(rt,bt)})},W.all=function(O){var rt=w(O),bt=rt.next();return bt.done?k([]):new W(function(Rt,Ut){function Nt(Tt){return function(kt){$t[Tt]=kt,Et--,Et==0&&Rt($t)}}var $t=[],Et=0;do $t.push(void 0),Et++,k(bt.value).J(Nt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),S("Object.is",function(m){return m||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),S("Array.prototype.includes",function(m){return m||function(W,V){var k=this;k instanceof String&&(k=String(k));var z=k.length;for(V=V||0,0>V&&(V=Math.max(V+z,0));V<z;V++){var ot=k[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),S("String.prototype.includes",function(m){return m||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),S("Array.prototype.keys",function(m){return m||function(){return gt(this,function(W){return W})}});var jn=this||self;function Re(m,W){m=m.split(".");var V=jn;m[0]in V||typeof V.execScript>"u"||V.execScript("var "+m[0]);for(var k;m.length&&(k=m.shift());)m.length||W===void 0?V[k]&&V[k]!==Object.prototype[k]?V=V[k]:V=V[k]={}:V[k]=W}function Ht(m,W){return W=String.fromCharCode.apply(null,W),m==null?W:m+W}var Te,on=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(m){if(Ln)m=(Xn||(Xn=new TextEncoder)).encode(m);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,k=new Uint8Array(3*m.length),z=0;z<m.length;z++){var ot=m.charCodeAt(z);if(128>ot)k[V++]=ot;else{if(2048>ot)k[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&z<m.length){var O=m.charCodeAt(++z);if(56320<=O&&57343>=O){ot=1024*(ot-55296)+O-56320+65536,k[V++]=ot>>18|240,k[V++]=ot>>12&63|128,k[V++]=ot>>6&63|128,k[V++]=ot&63|128;continue}else z--}if(W)throw Error("Found an unpaired surrogate");ot=65533}k[V++]=ot>>12|224,k[V++]=ot>>6&63|128}k[V++]=ot&63|128}}m=k.subarray(0,V)}return m}var Nn={},dn=null;function bn(m,W){W===void 0&&(W=0),Oe(),W=Nn[W];for(var V=Array(Math.floor(m.length/3)),k=W[64]||"",z=0,ot=0;z<m.length-2;z+=3){var O=m[z],rt=m[z+1],bt=m[z+2],Rt=W[O>>2];O=W[(O&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+O+rt+bt}switch(Rt=0,bt=k,m.length-z){case 2:Rt=m[z+1],bt=W[(Rt&15)<<2]||k;case 1:m=m[z],V[ot]=W[m>>2]+W[(m&3)<<4|Rt>>4]+bt+k}return V.join("")}function En(m){var W=m.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(m[W-1])!=-1&&(V="=.".indexOf(m[W-2])!=-1?V-2:V-1);var k=new Uint8Array(V),z=0;return Cn(m,function(ot){k[z++]=ot}),k.subarray(0,z)}function Cn(m,W){function V(bt){for(;k<m.length;){var Rt=m.charAt(k++),Ut=dn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Oe();for(var k=0;;){var z=V(-1),ot=V(0),O=V(64),rt=V(64);if(rt===64&&z===-1)break;W(z<<2|ot>>4),O!=64&&(W(ot<<4&240|O>>2),rt!=64&&W(O<<6&192|rt))}}function Oe(){if(!dn){dn={};for(var m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var k=m.concat(W[V].split(""));Nn[V]=k;for(var z=0;z<k.length;z++){var ot=k[z];dn[ot]===void 0&&(dn[ot]=z)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(m,W,V){return W===V?In||(In=new Uint8Array(0)):Ke?m.slice(W,V):new Uint8Array(m.subarray(W,V))}var he=0,Se=0;function ze(m,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,m&&ne(this,m)}function ne(m,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?En(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),m.h=W,m.j=0,m.i=m.h.length,m.g=m.j}ze.prototype.reset=function(){this.g=this.j};function We(m){var W=m.h,V=W[m.g],k=V&127;return 128>V?(m.g+=1,k):(V=W[m.g+1],k|=(V&127)<<7,128>V?(m.g+=2,k):(V=W[m.g+2],k|=(V&127)<<14,128>V?(m.g+=3,k):(V=W[m.g+3],k|=(V&127)<<21,128>V?(m.g+=4,k):(V=W[m.g+4],k|=(V&15)<<28,128>V?(m.g+=5,k>>>0):(m.g+=5,128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&m.g++,k)))))}function sn(m){var W=m.h[m.g],V=m.h[m.g+1],k=m.h[m.g+2],z=m.h[m.g+3];return m.g+=4,V=(W<<0|V<<8|k<<16|z<<24)>>>0,m=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*m:W==0?m*Math.pow(2,-149)*V:m*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Ue=[];function _t(){this.g=new Uint8Array(64),this.h=0}_t.prototype.push=function(m){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=m},_t.prototype.length=function(){return this.h},_t.prototype.end=function(){var m=this.g,W=this.h;return this.h=0,Wn(m,0,W)};function Ze(m,W){for(;127<W;)m.push(W&127|128),W>>>=7;m.push(W)}function Ce(m){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Ue.length?(V=Ue.pop(),W&&(V.v=W.v),m&&ne(V,m),m=V):m=new ze(m,W),this.g=m,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function At(m){var W=m.g;if((W=W.g==W.i)||(W=m.j)||(W=m.g,W=W.l||0>W.g||W.g>W.i),W)return!1;m.m=m.g.g,W=We(m.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(m.j=!0,!1):(m.i=W,m.l=W>>>3,m.h=V,!0)}function xe(m){switch(m.h){case 0:if(m.h!=0)xe(m);else{for(m=m.g;m.h[m.g]&128;)m.g++;m.g++}break;case 1:m.h!=1?xe(m):(m=m.g,m.g+=8);break;case 2:if(m.h!=2)xe(m);else{var W=We(m.g);m=m.g,m.g+=W}break;case 5:m.h!=5?xe(m):(m=m.g,m.g+=4);break;case 3:W=m.l;do{if(!At(m)){m.j=!0;break}if(m.h==4){m.l!=W&&(m.j=!0);break}xe(m)}while(1);break;default:m.j=!0}}function jt(m,W,V){var k=m.g.i,z=We(m.g);return z=m.g.g+z,m.g.i=z,V(W,m),m.g.g=z,m.g.i=k,W}function ye(m){var W=We(m.g);m=m.g;var V=m.g;m.g+=W,m=m.h;var k;if(on)(k=Te)||(k=Te=new TextDecoder("utf-8",{fatal:!1})),k=k.decode(m.subarray(V,V+W));else{W=V+W;for(var z=[],ot=null,O,rt,bt;V<W;)O=m[V++],128>O?z.push(O):224>O?V>=W?z.push(65533):(rt=m[V++],194>O||(rt&192)!==128?(V--,z.push(65533)):z.push((O&31)<<6|rt&63)):240>O?V>=W-1?z.push(65533):(rt=m[V++],(rt&192)!==128||O===224&&160>rt||O===237&&160<=rt||((k=m[V++])&192)!==128?(V--,z.push(65533)):z.push((O&15)<<12|(rt&63)<<6|k&63)):244>=O?V>=W-2?z.push(65533):(rt=m[V++],(rt&192)!==128||(O<<28)+(rt-144)>>30!==0||((k=m[V++])&192)!==128||((bt=m[V++])&192)!==128?(V--,z.push(65533)):(O=(O&7)<<18|(rt&63)<<12|(k&63)<<6|bt&63,O-=65536,z.push((O>>10&1023)+55296,(O&1023)+56320))):z.push(65533),8192<=z.length&&(ot=Ht(ot,z),z.length=0);k=Ht(ot,z)}return k}function we(){this.h=[],this.i=0,this.g=new _t}function $e(m,W){W.length!==0&&(m.h.push(W),m.i+=W.length)}function Xe(m){var W=m.i+m.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=m.h,k=V.length,z=0,ot=0;ot<k;ot++){var O=V[ot];O.length!==0&&(W.set(O,z),z+=O.length)}return V=m.g,k=V.h,k!==0&&(W.set(V.g.subarray(0,k),z),V.h=0),m.h=[W],W}function Ot(m,W,V){if(V!=null){Ze(m.g,8*W+5),m=m.g;var k=V;k=(V=0>k?1:0)?-k:k,k===0?0<1/k?he=Se=0:(Se=0,he=2147483648):isNaN(k)?(Se=0,he=2147483647):34028234663852886e22<k?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>k?(k=Math.round(k/Math.pow(2,-149)),Se=0,he=(V<<31|k)>>>0):(W=Math.floor(Math.log(k)/Math.LN2),k*=Math.pow(2,-W),k=Math.round(8388608*k)&8388607,Se=0,he=(V<<31|W+127<<23|k)>>>0),V=he,m.push(V>>>0&255),m.push(V>>>8&255),m.push(V>>>16&255),m.push(V>>>24&255)}}var je=typeof Uint8Array=="function";function Pe(m,W,V){if(m!=null)return typeof m=="object"?je&&m instanceof Uint8Array?V(m):Ie(m,W,V):W(m)}function Ie(m,W,V){if(Array.isArray(m)){for(var k=Array(m.length),z=0;z<m.length;z++)k[z]=Pe(m[z],W,V);return Array.isArray(m)&&m.W&&_e(k),k}k={};for(z in m)k[z]=Pe(m[z],W,V);return k}function Vn(m){return typeof m=="number"?isFinite(m)?m:String(m):m}var ln={W:{value:!0,configurable:!0}};function _e(m){return Array.isArray(m)&&!Object.isFrozen(m)&&Object.defineProperties(m,ln),m}var cn;function ve(m,W,V){var k=cn;cn=null,m||(m=k),k=this.constructor.ca,m||(m=k?[k]:[]),this.j=k?0:-1,this.i=null,this.g=m;t:{if(k=this.g.length,m=k-1,k&&(k=this.g[m],k!==null&&typeof k=="object"&&k.constructor===Object)){this.l=m-this.j,this.h=k;break t}W!==void 0&&-1<W?(this.l=Math.max(W,m+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)m=V[W],m<this.l?(m+=this.j,(k=this.g[m])?_e(k):this.g[m]=Fe):(Ge(this),(k=this.h[m])?_e(k):this.h[m]=Fe)}var Fe=Object.freeze(_e([]));function Ge(m){var W=m.l+m.j;m.g[W]||(m.h=m.g[W]={})}function re(m,W,V){return W===-1?null:(V===void 0?0:V)||W>=m.l?m.h?m.h[W]:void 0:m.g[W+m.j]}function Qe(m){var W=W===void 0?!1:W,V=re(m,1,W);return V==null&&(V=Fe),V===Fe&&(V=_e([]),zt(m,1,V,W)),V}function te(m,W,V){return m=re(m,W),m=m==null?m:+m,m==null?V===void 0?0:V:m}function zt(m,W,V,k){(k===void 0?0:k)||W>=m.l?(Ge(m),m.h[W]=V):m.g[W+m.j]=V}function hn(m,W){m.i||(m.i={});var V=m.i[1];if(!V){var k=Qe(m);V=[];for(var z=0;z<k.length;z++)V[z]=new W(k[z]);m.i[1]=V}return V}function fe(m,W,V,k){var z=hn(m,V);W=W||new V,m=Qe(m),k!=null?(z.splice(k,0,W),m.splice(k,0,Ct(W))):(z.push(W),m.push(Ct(W)))}ve.prototype.toJSON=function(){var m=Ct(this);return Ie(m,Vn,bn)};function Ct(m,W){if(m.i)for(var V in m.i){var k=m.i[V];if(Array.isArray(k))for(var z=0;z<k.length;z++)k[z]&&Ct(k[z]);else k&&Ct(k)}return m.g}ve.prototype.toString=function(){return Ct(this).toString()};function Vt(m,W){return m=re(m,W),m==null?0:m}function ie(m,W){return m=re(m,W),m==null?"":m}function Ye(m,W){if(m=m.m){$e(W,W.g.end());for(var V=0;V<m.length;V++)$e(W,m[V])}}function ee(m,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Wn(W.g.h,V,W.g.g),(V=m.m)?V.push(W):m.m=[W]),!0}function oe(m,W){var V=void 0;return new(V||(V=Promise))(function(k,z){function ot(bt){try{rt(W.next(bt))}catch(Rt){z(Rt)}}function O(bt){try{rt(W.throw(bt))}catch(Rt){z(Rt)}}function rt(bt){bt.done?k(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,O)}rt((W=W.apply(m,void 0)).next())})}function tt(m){ve.call(this,m)}pt(tt,ve);function it(m,W){for(;At(W);)switch(W.i){case 8:var V=We(W.g);zt(m,1,V);break;case 21:V=sn(W.g),zt(m,2,V);break;case 26:V=ye(W),zt(m,3,V);break;case 34:V=ye(W),zt(m,4,V);break;default:if(!ee(m,W))return m}return m}function ut(m){ve.call(this,m,-1,Pt)}pt(ut,ve),ut.prototype.addClassification=function(m,W){fe(this,m,tt,W)};var Pt=[1];function ae(m){ve.call(this,m)}pt(ae,ve);function ce(m,W){for(;At(W);)switch(W.i){case 13:var V=sn(W.g);zt(m,1,V);break;case 21:V=sn(W.g),zt(m,2,V);break;case 29:V=sn(W.g),zt(m,3,V);break;case 37:V=sn(W.g),zt(m,4,V);break;case 45:V=sn(W.g),zt(m,5,V);break;default:if(!ee(m,W))return m}return m}function St(m){ve.call(this,m,-1,me)}pt(St,ve);var me=[1];function He(m){ve.call(this,m)}pt(He,ve);function qe(m,W,V){if(V=m.createShader(V===0?m.VERTEX_SHADER:m.FRAGMENT_SHADER),m.shaderSource(V,W),m.compileShader(V),!m.getShaderParameter(V,m.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
1
+ (function(Ee,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ee=typeof globalThis<"u"?globalThis:Ee||self,Dn(Ee["ml-transformers"]={}))})(this,function(Ee){"use strict";var R3=Object.defineProperty;var x3=(Ee,Dn,pr)=>Dn in Ee?R3(Ee,Dn,{enumerable:!0,configurable:!0,writable:!0,value:pr}):Ee[Dn]=pr;var Zt=(Ee,Dn,pr)=>(x3(Ee,typeof Dn!="symbol"?Dn+"":Dn,pr),pr);var Dn=Object.defineProperty,pr=(i,n,r)=>n in i?Dn(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Ae=(i,n,r)=>(pr(i,typeof n!="symbol"?n+"":n,r),r);function Ql(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class nr{}Ae(nr,"updates",{transformer_new:"New transformer",transformer_null:"Null transformer"}),Ae(nr,"errors",{transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"});const ir=new WeakMap,ei=new WeakMap,Jr=new WeakMap,Di=Symbol("anyProducer"),ts=Promise.resolve(),ni=Symbol("listenerAdded"),ri=Symbol("listenerRemoved");let $i=!1;function xr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function ii(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Ir(i,n){const r=ei.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function kr(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:Di,m=Jr.get(i);return m.has(r)||m.set(r,new Set),m.get(r)}function Dl(i,n,r){const m=Jr.get(i);if(m.has(n))for(const X of m.get(n))X.enqueue(r);if(m.has(Di)){const X=Promise.all([n,r]);for(const S of m.get(Di))S.enqueue(X)}}function es(i,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},X=[];const S={enqueue(H){X.push(H),m()},finish(){r=!0,m()}};for(const H of n)kr(i,H).add(S);return{async next(){return X?X.length===0?r?(X=void 0,this.next()):(await new Promise(H=>{m=H}),this.next()):{done:!1,value:await X.shift()}:{done:!0}},async return(H){X=void 0;for(const T of n)kr(i,T).delete(S);return m(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ns(i){if(i===void 0)return rs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!rs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const qi=i=>i===ni||i===ri;class br{static mixin(n,r){return r=ns(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const H of r)if(m.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function X(){return Object.defineProperty(this,n,{enumerable:!1,value:new br}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:X});const S=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(m.prototype,H,{enumerable:!1,value:S(H)});return m}}static get isDebugEnabled(){if(typeof process!="object")return $i;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||$i}static set isDebugEnabled(n){$i=n}constructor(n={}){ir.set(this,new Set),ei.set(this,new Map),Jr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,X,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof X=="symbol"&&(X=X.toString());const H=new Date,T=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${T}][emittery:${r}][${m}] Event Name: ${X}
2
+ data: ${S}`)})}logIfDebugEnabled(n,r,m){(br.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const m of n)xr(m),Ir(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),qi(m)||this.emit(ni,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){ii(r),n=Array.isArray(n)?n:[n];for(const m of n)xr(m),Ir(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),qi(m)||this.emit(ri,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,X=>{m(),r(X)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)xr(r);return es(this,n)}async emit(n,r){xr(n),this.logIfDebugEnabled("emit",n,r),Dl(this,n,r);const m=Ir(this,n),X=ir.get(this),S=[...m],H=qi(n)?[]:[...X];await ts,await Promise.all([...S.map(async T=>{if(m.has(T))return T(r)}),...H.map(async T=>{if(X.has(T))return T(n,r)})])}async emitSerial(n,r){xr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=Ir(this,n),X=ir.get(this),S=[...m],H=[...X];await ts;for(const T of S)m.has(T)&&await T(r);for(const T of H)X.has(T)&&await T(n,r)}onAny(n){return ii(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ir.get(this).add(n),this.emit(ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return es(this)}offAny(n){ii(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(ri,{listener:n}),ir.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Ir(this,r).clear();const m=kr(this,r);for(const X of m)X.finish();m.clear()}else{ir.get(this).clear();for(const m of ei.get(this).values())m.clear();for(const m of Jr.get(this).values()){for(const X of m)X.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=ir.get(this).size+Ir(this,m).size+kr(this,m).size+kr(this).size;continue}typeof m<"u"&&xr(m),r+=ir.get(this).size;for(const X of ei.get(this).values())r+=X.size;for(const X of Jr.get(this).values())r+=X.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ns(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const rs=Object.getOwnPropertyNames(br.prototype).filter(i=>i!=="constructor");Object.defineProperty(br,"listenerAdded",{value:ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(br,"listenerRemoved",{value:ri,writable:!1,enumerable:!0,configurable:!1});var to=br;function $l(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function ql(i){if($l(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function eo(i){return ql(i).message}var t2=Object.defineProperty,e2=(i,n,r)=>n in i?t2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,n2=(i,n,r)=>(e2(i,typeof n!="symbol"?n+"":n,r),r);const r2="hlg.tokbox.com/prod/logging/vcp_webrtc",i2="https://",o2=1e4;let oi;const s2=new Uint8Array(16);function l2(){if(!oi&&(oi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!oi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return oi(s2)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function c2(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const u2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),is={randomUUID:u2};function a2(i,n,r){if(is.randomUUID&&!n&&!i)return is.randomUUID();i=i||{};const m=i.random||(i.rng||l2)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){r=r||0;for(let X=0;X<16;++X)n[r+X]=m[X];return n}return c2(m)}function no(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const or=no("globals",{});var yr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(yr||{});function os(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let d2=0;function h2(i,n,r,m,X){const S=d2++;return i.postMessage({id:S,type:n,functionName:r,args:m},m.filter(H=>os(H))),new Promise(H=>{X==null||X.set(S,H)})}function Ur(i,n){const{id:r,type:m}=i,X=Array.isArray(n)?n:[n];postMessage({id:r,type:m,result:n},X.filter(S=>os(S)))}const ss=no("workerized",{});function ls(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function f2(){if(ls())Ur({type:yr.GLOBALS_SYNC},or);else{const i=[];for(const n in ss){const{worker:r,resolvers:m}=ss[n].workerContext;r&&i.push(h2(r,yr.GLOBALS_SYNC,"",[or],m))}await Promise.all(i)}}function si(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],si(i[r],n[r])):typeof i[r]=="object"?(n[r]={},si(i[r],n[r])):n[r]=i[r]}async function m2(i,n){const{functionName:r,args:m}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Ur(i,await n.instance[r](...m!=null?m:[]))}const p2=no("registeredWorkers",{});function b2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,m]=i.args,X=p2[r];if(X)n.instance=new X(i.args.slice(1));else throw`unknown worker class ${r}`;si(m,or),Ur(i,typeof n.instance!==void 0)}async function y2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...r!=null?r:[])),Ur(i,m)}function g2(i){if(!i.args)throw"Missing globals while syncing";si(i.args[0],or),Ur(i,{})}function Z2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case yr.INIT:b2(r,i);break;case yr.FORWARD:m2(r,i);break;case yr.TERMINATE:y2(r,i);break;case yr.GLOBALS_SYNC:g2(r);break}}}ls()&&Z2();function v2(i,n){return or[i]||(or[i]=n),[()=>or[i],async r=>{or[i]=r,await f2()}]}function G2(i,n){return v2(i,n)}const[X2,W2]=G2("metadata");function V2(i){W2(i)}function li(){return X2()}class ro{constructor(n){n2(this,"uuid",a2()),this.config=n}async send(n){var r,m,X;const{appId:S,sourceType:H}=(r=li())!=null?r:{};if(!S||!H)return"metadata missing";const T=new AbortController,B=setTimeout(()=>T.abort(),o2);return await((X=(m=this.config)==null?void 0:m.fetch)!=null?X:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(B),"success"}getUrl(){var n;let r=(n=li().proxyUrl)!=null?n:i2;return r+=(r.at(-1)==="/"?"":"/")+r2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=li();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const ci="2.0.2";class R2{constructor(n){Ae(this,"frameTransformedCount",0),Ae(this,"frameFromSourceCount",0),Ae(this,"startAt",0),Ae(this,"reporter"),this.config=n,this.reporter=new ro(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,m=(Date.now()-n)/1e3;return r/m}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:m,frameTransformedCount:X,frameFromSourceCount:S}=this,H=Date.now(),T=(H-m)/1e3,B=X/T,nt=S/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=H,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:nt,transformedFps:B,framesTransformed:X,...n})):"success"}}var cs=(i=>(i.FPS_DROP="fps_drop",i))(cs||{}),us=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(us||{}),ui=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(ui||{});const x2=500,I2=.8;class S2 extends to{constructor(n,r){super(),Ae(this,"reporter_",new ro),Ae(this,"reporterQos_",new R2({loggingIntervalFrameCount:x2,report:{version:ci}})),Ae(this,"transformerType_"),Ae(this,"transformer_"),Ae(this,"shouldStop_"),Ae(this,"isFlashed_"),Ae(this,"mediaTransformerQosReportStartTimestamp_"),Ae(this,"videoHeight_"),Ae(this,"videoWidth_"),Ae(this,"trackExpectedRate_"),Ae(this,"index_"),Ae(this,"controller_"),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:nr.errors.transformer_start,variation:"Error",error:eo(r)});const m={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",m)}}async transform(n,r){var m,X,S,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(m=n==null?void 0:n.displayHeight)!=null?m:0,this.videoWidth_=(X=n==null?void 0:n.displayWidth)!=null?X:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((H=(S=this.transformer_).transform)==null?void 0:H.call(S,n,r)),this.reportQos()}catch(T){this.report({message:nr.errors.transformer_transform,variation:"Error",error:eo(T)});const B={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",B)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*I2>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:nr.errors.transformer_flush,variation:"Error",error:eo(r)});const m={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",m)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:ci,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:ci,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class w2 extends to{constructor(n){super(),Ae(this,"transformers_"),Ae(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let m=new S2(n[r],r);m.on("error",X=>{this.emit("error",X)}),m.on("warn",X=>{this.emit("warn",X)}),this.transformers_.push(m)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let m=n;for(let X of this.transformers_)n=n.pipeThrough(new TransformStream(X));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await m.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async X=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(S=>{console.error("[Pipeline] Error from stream transform:",S)}),await r.abort(X),await m.cancel(X),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Y2 extends to{constructor(){super(),Ae(this,"reporter_"),Ae(this,"pipeline_"),Ae(this,"transformers_"),Ae(this,"readable_"),Ae(this,"writable_"),Ae(this,"trackExpectedRate_"),this.reporter_=new ro,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:nr.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:nr.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:nr.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let m=!1;this.pipeline_&&(m=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new w2(this.transformers_),this.pipeline_.on("warn",X=>{this.emit("warn",X)}),this.pipeline_.on("error",X=>{this.emit("error",X)}),this.pipeline_.on("pipelineInfo",X=>{m&&(X==="pipeline_started"?X=ui.pipeline_restarted:X==="pipeline_started_with_error"&&(X=ui.pipeline_restarted_with_error)),this.emit("pipelineInfo",X)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(X=>{r(X)})})}setTransformers(n){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:ci,action:"MediaProcessor",...n})}}class T2{constructor(){Ae(this,"processor_"),Ae(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,m)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(X){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${X}`),m(X)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):m("kind not supported")}catch(X){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${X}`),m(X)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class F2{constructor(n){Ae(this,"insertableStreamHelper_"),Ae(this,"mediaProcessor_"),this.insertableStreamHelper_=new T2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,m)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(X=>{m(X)})}).catch(X=>{m(X)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(m=>{r(m)}):r("no processor")})}}var Er=(i=>(i.Low="Low",i.High="High",i))(Er||{}),as=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(as||{}),ai=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(ai||{}),Br=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))(Br||{});const L2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var C2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},m,X;r.ready=new Promise(function(tt,it){m=tt,X=it});var S={},H;for(H in r)r.hasOwnProperty(H)&&(S[H]=r[H]);var T="./this.program",B=function(tt,it){throw it},nt=!0,ut="";function pt(tt){return r.locateFile?r.locateFile(tt,ut):ut+tt}var Tt;typeof document<"u"&&document.currentScript&&(ut=document.currentScript.src),i&&(ut=i),ut.indexOf("blob:")!==0?ut=ut.substr(0,ut.replace(/[?#].*/,"").lastIndexOf("/")+1):ut="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in S)S.hasOwnProperty(H)&&(r[H]=S[H]);S=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(B=r.quit);var mt;r.wasmBinary&&(mt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var kt,ee=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function $e(tt,it,ct){for(var _t=it+ct,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var en=St-65536;ue+=String.fromCharCode(55296|en>>10,56320|en&1023)}}return ue}function ze(tt,it){return tt?$e(gt,tt,it):""}function We(tt,it,ct){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ct||(ne[it>>0]=0)}function jt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Nn,ne,gt,qe;function jn(tt){Nn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=qe=new Int32Array(tt),r.HEAPU8=gt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ht=[],we=[],ln=[],Xn=0;function Ln(){return Bt||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Ht)}function Jn(){Qt(we)}function hn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Cn(r.postRun.shift());Qt(ln)}function bn(tt){Ht.unshift(tt)}function Un(tt){we.unshift(tt)}function Cn(tt){ln.unshift(tt)}var Oe=0,Ke=null;function In(tt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Wn(tt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&Ke){var it=Ke;Ke=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw X(it),it}var Se="data:application/octet-stream;base64,";function Pe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Pe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&mt)return new Uint8Array(mt);if(!Tt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function cn(){return!mt&&nt&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,kt=r.asm.q,jn(kt.buffer),Re=r.asm.E,Un(r.asm.r),Wn()}In();function ct(St){it(St.instance)}function _t(St){return cn().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!mt&&typeof WebAssembly.instantiateStreaming=="function"&&!Pe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ct,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),_t(ct)})}):_t(ct)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(X),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ct=it.func;typeof ct=="number"?it.arg===void 0?Re.get(ct)():Re.get(ct)(it.arg):ct(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ct,_t){he("Assertion failed: "+ze(tt)+", at: "+[it?ze(it):"unknown filename",ct,_t?ze(_t):"unknown function"])}function Ce(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function At(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var zt;zt=function(){return performance.now()};var ye=!0;function Ye(tt){return qe[Ct()>>2]=tt,tt}function tn(tt,it){var ct;if(tt===0)ct=Date.now();else if((tt===1||tt===4)&&ye)ct=zt();else return Ye(28),-1;return qe[it>>2]=ct/1e3|0,qe[it+4>>2]=ct%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ct){gt.copyWithin(tt,it,it+ct)}function je(tt){try{return kt.grow(tt-Nn.byteLength+65535>>>16),jn(kt.buffer),1}catch{}}function _e(tt){var it=gt.length;tt=tt>>>0;var ct=2147483648;if(tt>ct)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ct,jt(Math.max(tt,de),65536)),St=je(ue);if(St)return!0}return!1}function Ie(tt){for(var it=zt();zt()-it<tt;);}var Vn={};function un(){return T||"./this.program"}function Qe(){if(!Qe.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:un()};for(var ct in Vn)Vn[ct]===void 0?delete it[ct]:it[ct]=Vn[ct];var _t=[];for(var ct in it)_t.push(ct+"="+it[ct]);Qe.strings=_t}return Qe.strings}var an={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ct=an.buffers[tt];it===0||it===10?((tt===1?Lt:at)($e(ct,0)),ct.length=0):ct.push(it)},varargs:void 0,get:function(){an.varargs+=4;var tt=qe[an.varargs-4>>2];return tt},getStr:function(tt){var it=ze(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ct=0;return Qe().forEach(function(_t,de){var ue=it+ct;qe[tt+de*4>>2]=ue,We(_t,ue),ct+=_t.length+1}),0}function Te(tt,it){var ct=Qe();qe[tt>>2]=ct.length;var _t=0;return ct.forEach(function(de){_t+=de.length+1}),qe[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function De(tt,it,ct,_t,de){}function qt(tt,it,ct,_t){for(var de=0,ue=0;ue<ct;ue++){for(var St=qe[it+ue*8>>2],me=qe[it+(ue*8+4)>>2],He=0;He<me;He++)an.printChar(tt,gt[St+He]);de+=me}return qe[_t>>2]=de,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function fn(tt,it){fn.randomDevice||(fn.randomDevice=Pt());for(var ct=0;ct<it;ct++)ne[tt+ct>>0]=fn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:At,b:xe,n:tn,h:Xe,l:Ot,m:_e,p:Ie,f:ve,g:Te,j:Ge,i:ie,k:De,c:qt,o:fn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ct=r.___errno_location=function(){return(Ct=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ke=function tt(){Vt||Fe(),Vt||(Ke=tt)};function Fe(tt){if(Oe>0||(xn(),Oe>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(Jn(),m(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),hn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Fe;function te(tt,it){se(tt)}function se(tt){Ln()||(r.onExit&&r.onExit(tt),ee=!0),B(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Fe(),n.ready}}();class H2{constructor(){Zt(this,"selectedTFLite");Zt(this,"isSIMDSupported",!1);Zt(this,"isThreadsSupported",!1);Zt(this,"inputWidth",0);Zt(this,"inputHeight",0);Zt(this,"inputChannelCount",0);Zt(this,"inputMemoryOffset",0);Zt(this,"outputWidth",0);Zt(this,"outputHeight",0);Zt(this,"outputChannelCount",0);Zt(this,"outputMemoryOffset",0)}}const N2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",J2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function k2(i=N2,n=J2){let r=new H2;var m=new Promise(function(X,S){async function H(){return C2({locateFile:function(nt){return i+nt}})}async function T(B){return new Promise(async(nt,ut)=>{const pt=B;if(typeof pt>"u")return ut("TFLite backend unavailable: wasmSimd");const Tt="selfie_segmentation_landscape";console.log("Loading tflite model:",Tt);let Lt=n+`${Tt}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const mt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",mt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(mt),Bt);const kt=pt._loadModel(mt.byteLength);if(console.log("Load model result:",kt),kt!==0){ut("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){ut(at);return}nt()})}H().then(B=>{if(B===null)throw console.error("loadTFLite null"),"loadTFLite null";T(B).then(nt=>{X(r)}).catch(nt=>{console.error("loadTFLiteModel error"),S("loadTFLiteModel error")})}).catch(B=>{console.error("loadTFLite error:",B),S("loadTFLite error:"+B)})});return m}class ds{constructor(){Zt(this,"canvas",new OffscreenCanvas(0,0));Zt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Zt(this,"pixelCount",0);Zt(this,"inputOffset",0);Zt(this,"outputOffset",0);Zt(this,"infos");Zt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await k2(n,r)}getOutputDimensions(){var n,r,m,X;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(X=(m=this.infos)==null?void 0:m.outputHeight)!=null?X:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,m=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,m);const X=this.context.getImageData(0,0,r,m),S=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const T=this.inputOffset+H*3;S[T]=X.data[H*4]/255,S[T+1]=X.data[H*4+1]/255,S[T+2]=X.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,m;return(m=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?m:!1}}async function U2(i,n){const{wasm:r,insertableStreams:m,simd:X,webgl:S}=await hs(i,n);if(!r.supported)throw r.message;if(!m.supported)throw m.message;if(!X.supported)throw X.message;if(!S.supported)throw S.message}async function hs(i,n){const r=new ds;await r.initWasm(i,n);const m={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await L2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:E2(),performance:fs()};try{await Ql()}catch(X){m.insertableStreams.supported=!1,m.insertableStreams.message=X}return m}function E2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function fs(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const di={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function m(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var X=m(this);function S(p,W){if(W)t:{var V=X;p=p.split(".");for(var k=0;k<p.length-1;k++){var O=p[k];if(!(O in V))break t;V=V[O]}p=p[p.length-1],k=V[p],W=W(k),W!=k&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}S("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(k+(ot||"")+"_"+O++,ot)}function V(ot,z){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:z})}if(p)return p;V.prototype.toString=function(){return this.g};var k="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),S("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var k=X[W[V]];typeof k=="function"&&typeof k.prototype[p]!="function"&&r(k.prototype,p,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return p});function H(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function B(p){if(!(p instanceof Array)){p=T(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var nt=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=ut;function mt(p,W){if(p.prototype=nt(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var k=Object.getOwnPropertyDescriptor(W,V);k&&Object.defineProperty(p,V,k)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function P(p,W,V){return p.g=V,{value:W}}function $e(p){this.g=new Bt,this.h=p}function ze(p,W){kt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(k){return{value:k,done:!0}},W,p.g.return):(p.g.return(W),jt(p))}function We(p,W,V,k){try{var O=W.call(p.g.i,V);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var ot=O.value}catch(z){return p.g.i=null,ee(p.g,z),jt(p)}return p.g.i=null,k.call(p.g,ot),jt(p)}function jt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Nn(p){this.next=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=jt(p)),W},this.throw=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=jt(p)),W},this.return=function(W){return ze(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Nn(new $e(W)),at&&p.prototype&&at(W,p.prototype),W}function gt(p,W){p instanceof String&&(p+="");var V=0,k=!1,O={next:function(){if(!k&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return k=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var qe=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var k=arguments[V];if(k)for(var O in k)Object.prototype.hasOwnProperty.call(k,O)&&(p[O]=k[O])}return p};S("Object.assign",function(p){return p||qe}),S("Promise",function(p){function W(z){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{z(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function k(z){return z instanceof W?z:new W(function(rt){rt(z)})}if(p)return p;V.prototype.h=function(z){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(z)};var O=X.setTimeout;V.prototype.i=function(z){O(z,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var z=this.g;this.g=[];for(var rt=0;rt<z.length;++rt){var bt=z[rt];z[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(z){this.i(function(){throw z})},W.prototype.j=function(){function z(Rt){return function(Et){bt||(bt=!0,Rt.call(rt,Et))}}var rt=this,bt=!1;return{resolve:z(this.C),reject:z(this.l)}},W.prototype.C=function(z){if(z===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(z instanceof W)this.F(z);else{t:switch(typeof z){case"object":var rt=z!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(z):this.m(z)}},W.prototype.u=function(z){var rt=void 0;try{rt=z.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,z):this.m(z)},W.prototype.l=function(z){this.s(2,z)},W.prototype.m=function(z){this.s(1,z)},W.prototype.s=function(z,rt){if(this.h!=0)throw Error("Cannot settle("+z+", "+rt+"): Promise already settled in state"+this.h);this.h=z,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var z=this;O(function(){if(z.B()){var rt=X.console;typeof rt<"u"&&rt.error(z.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var z=X.CustomEvent,rt=X.Event,bt=X.dispatchEvent;return typeof bt>"u"?!0:(typeof z=="function"?z=new z("unhandledrejection",{cancelable:!0}):typeof rt=="function"?z=new rt("unhandledrejection",{cancelable:!0}):(z=X.document.createEvent("CustomEvent"),z.initCustomEvent("unhandledrejection",!1,!0,z)),z.promise=this,z.reason=this.i,bt(z))},W.prototype.A=function(){if(this.g!=null){for(var z=0;z<this.g.length;++z)ot.h(this.g[z]);this.g=null}};var ot=new V;return W.prototype.F=function(z){var rt=this.j();z.J(rt.resolve,rt.reject)},W.prototype.G=function(z,rt){var bt=this.j();try{z.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(z,rt){function bt($t,Jt){return typeof $t=="function"?function(wt){try{Rt($t(wt))}catch(Ut){Et(Ut)}}:Jt}var Rt,Et,Nt=new W(function($t,Jt){Rt=$t,Et=Jt});return this.J(bt(z,Rt),bt(rt,Et)),Nt},W.prototype.catch=function(z){return this.then(void 0,z)},W.prototype.J=function(z,rt){function bt(){switch(Rt.h){case 1:z(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=k,W.reject=function(z){return new W(function(rt,bt){bt(z)})},W.race=function(z){return new W(function(rt,bt){for(var Rt=T(z),Et=Rt.next();!Et.done;Et=Rt.next())k(Et.value).J(rt,bt)})},W.all=function(z){var rt=T(z),bt=rt.next();return bt.done?k([]):new W(function(Rt,Et){function Nt(wt){return function(Ut){$t[wt]=Ut,Jt--,Jt==0&&Rt($t)}}var $t=[],Jt=0;do $t.push(void 0),Jt++,k(bt.value).J(Nt($t.length-1),Et),bt=rt.next();while(!bt.done)})},W}),S("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),S("Array.prototype.includes",function(p){return p||function(W,V){var k=this;k instanceof String&&(k=String(k));var O=k.length;for(V=V||0,0>V&&(V=Math.max(V+O,0));V<O;V++){var ot=k[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),S("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),S("Array.prototype.keys",function(p){return p||function(){return gt(this,function(W){return W})}});var jn=this||self;function Re(p,W){p=p.split(".");var V=jn;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var k;p.length&&(k=p.shift());)p.length||W===void 0?V[k]&&V[k]!==Object.prototype[k]?V=V[k]:V=V[k]={}:V[k]=W}function Ht(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var we,ln=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(p){if(Ln)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,k=new Uint8Array(3*p.length),O=0;O<p.length;O++){var ot=p.charCodeAt(O);if(128>ot)k[V++]=ot;else{if(2048>ot)k[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&O<p.length){var z=p.charCodeAt(++O);if(56320<=z&&57343>=z){ot=1024*(ot-55296)+z-56320+65536,k[V++]=ot>>18|240,k[V++]=ot>>12&63|128,k[V++]=ot>>6&63|128,k[V++]=ot&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");ot=65533}k[V++]=ot>>12|224,k[V++]=ot>>6&63|128}k[V++]=ot&63|128}}p=k.subarray(0,V)}return p}var Jn={},hn=null;function bn(p,W){W===void 0&&(W=0),Oe(),W=Jn[W];for(var V=Array(Math.floor(p.length/3)),k=W[64]||"",O=0,ot=0;O<p.length-2;O+=3){var z=p[O],rt=p[O+1],bt=p[O+2],Rt=W[z>>2];z=W[(z&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+z+rt+bt}switch(Rt=0,bt=k,p.length-O){case 2:Rt=p[O+1],bt=W[(Rt&15)<<2]||k;case 1:p=p[O],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+k}return V.join("")}function Un(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var k=new Uint8Array(V),O=0;return Cn(p,function(ot){k[O++]=ot}),k.subarray(0,O)}function Cn(p,W){function V(bt){for(;k<p.length;){var Rt=p.charAt(k++),Et=hn[Rt];if(Et!=null)return Et;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Oe();for(var k=0;;){var O=V(-1),ot=V(0),z=V(64),rt=V(64);if(rt===64&&O===-1)break;W(O<<2|ot>>4),z!=64&&(W(ot<<4&240|z>>2),rt!=64&&W(z<<6&192|rt))}}function Oe(){if(!hn){hn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var k=p.concat(W[V].split(""));Jn[V]=k;for(var O=0;O<k.length;O++){var ot=k[O];hn[ot]===void 0&&(hn[ot]=O)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(p,W,V){return W===V?In||(In=new Uint8Array(0)):Ke?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Pe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?Un(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Pe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],k=V&127;return 128>V?(p.g+=1,k):(V=W[p.g+1],k|=(V&127)<<7,128>V?(p.g+=2,k):(V=W[p.g+2],k|=(V&127)<<14,128>V?(p.g+=3,k):(V=W[p.g+3],k|=(V&127)<<21,128>V?(p.g+=4,k):(V=W[p.g+4],k|=(V&15)<<28,128>V?(p.g+=5,k>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,k)))))}function cn(p){var W=p.h[p.g],V=p.h[p.g+1],k=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|k<<16|O<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Wn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Ce(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Pe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function At(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function xe(p){switch(p.h){case 0:if(p.h!=0)xe(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?xe(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)xe(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?xe(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!At(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}xe(p)}while(1);break;default:p.j=!0}}function zt(p,W,V){var k=p.g.i,O=Ve(p.g);return O=p.g.g+O,p.g.i=O,V(W,p),p.g.g=O,p.g.i=k,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var k;if(ln)(k=we)||(k=we=new TextDecoder("utf-8",{fatal:!1})),k=k.decode(p.subarray(V,V+W));else{W=V+W;for(var O=[],ot=null,z,rt,bt;V<W;)z=p[V++],128>z?O.push(z):224>z?V>=W?O.push(65533):(rt=p[V++],194>z||(rt&192)!==128?(V--,O.push(65533)):O.push((z&31)<<6|rt&63)):240>z?V>=W-1?O.push(65533):(rt=p[V++],(rt&192)!==128||z===224&&160>rt||z===237&&160<=rt||((k=p[V++])&192)!==128?(V--,O.push(65533)):O.push((z&15)<<12|(rt&63)<<6|k&63)):244>=z?V>=W-2?O.push(65533):(rt=p[V++],(rt&192)!==128||(z<<28)+(rt-144)>>30!==0||((k=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,O.push(65533)):(z=(z&7)<<18|(rt&63)<<12|(k&63)<<6|bt&63,z-=65536,O.push((z>>10&1023)+55296,(z&1023)+56320))):O.push(65533),8192<=O.length&&(ot=Ht(ot,O),O.length=0);k=Ht(ot,O)}return k}function Ye(){this.h=[],this.i=0,this.g=new Qt}function tn(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,k=V.length,O=0,ot=0;ot<k;ot++){var z=V[ot];z.length!==0&&(W.set(z,O),O+=z.length)}return V=p.g,k=V.h,k!==0&&(W.set(V.g.subarray(0,k),O),V.h=0),p.h=[W],W}function Ot(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var k=V;k=(V=0>k?1:0)?-k:k,k===0?0<1/k?he=Se=0:(Se=0,he=2147483648):isNaN(k)?(Se=0,he=2147483647):34028234663852886e22<k?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>k?(k=Math.round(k/Math.pow(2,-149)),Se=0,he=(V<<31|k)>>>0):(W=Math.floor(Math.log(k)/Math.LN2),k*=Math.pow(2,-W),k=Math.round(8388608*k)&8388607,Se=0,he=(V<<31|W+127<<23|k)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var je=typeof Uint8Array=="function";function _e(p,W,V){if(p!=null)return typeof p=="object"?je&&p instanceof Uint8Array?V(p):Ie(p,W,V):W(p)}function Ie(p,W,V){if(Array.isArray(p)){for(var k=Array(p.length),O=0;O<p.length;O++)k[O]=_e(p[O],W,V);return Array.isArray(p)&&p.W&&Qe(k),k}k={};for(O in p)k[O]=_e(p[O],W,V);return k}function Vn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var un={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,un),p}var an;function ve(p,W,V){var k=an;an=null,p||(p=k),k=this.constructor.ca,p||(p=k?[k]:[]),this.j=k?0:-1,this.i=null,this.g=p;t:{if(k=this.g.length,p=k-1,k&&(k=this.g[p],k!==null&&typeof k=="object"&&k.constructor===Object)){this.l=p-this.j,this.h=k;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(k=this.g[p])?Qe(k):this.g[p]=Te):(Ge(this),(k=this.h[p])?Qe(k):this.h[p]=Te)}var Te=Object.freeze(Qe([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function De(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=Te),V===Te&&(V=Qe([]),Pt(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Pt(p,W,V,k){(k===void 0?0:k)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function fn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var k=De(p);V=[];for(var O=0;O<k.length;O++)V[O]=new W(k[O]);p.i[1]=V}return V}function fe(p,W,V,k){var O=fn(p,V);W=W||new V,p=De(p),k!=null?(O.splice(k,0,W),p.splice(k,0,Ct(W))):(O.push(W),p.push(Ct(W)))}ve.prototype.toJSON=function(){var p=Ct(this);return Ie(p,Vn,bn)};function Ct(p,W){if(p.i)for(var V in p.i){var k=p.i[V];if(Array.isArray(k))for(var O=0;O<k.length;O++)k[O]&&Ct(k[O]);else k&&Ct(k)}return p.g}ve.prototype.toString=function(){return Ct(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Fe(p,W){if(p=p.m){tn(W,W.g.end());for(var V=0;V<p.length;V++)tn(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Wn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(k,O){function ot(bt){try{rt(W.next(bt))}catch(Rt){O(Rt)}}function z(bt){try{rt(W.throw(bt))}catch(Rt){O(Rt)}}function rt(bt){bt.done?k(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,z)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}mt(tt,ve);function it(p,W){for(;At(W);)switch(W.i){case 8:var V=Ve(W.g);Pt(p,1,V);break;case 21:V=cn(W.g),Pt(p,2,V);break;case 26:V=ye(W),Pt(p,3,V);break;case 34:V=ye(W),Pt(p,4,V);break;default:if(!te(p,W))return p}return p}function ct(p){ve.call(this,p,-1,_t)}mt(ct,ve),ct.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}mt(de,ve);function ue(p,W){for(;At(W);)switch(W.i){case 13:var V=cn(W.g);Pt(p,1,V);break;case 21:V=cn(W.g),Pt(p,2,V);break;case 29:V=cn(W.g),Pt(p,3,V);break;case 37:V=cn(W.g),Pt(p,4,V);break;case 45:V=cn(W.g),Pt(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}mt(St,ve);var me=[1];function He(p){ve.call(this,p)}mt(He,ve);function en(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
3
3
 
4
- `+m.getShaderInfoLog(V));return V}function tn(m){return hn(m,tt).map(function(W){return{index:Vt(W,1),Y:te(W,2),label:re(W,3)!=null?ie(W,3):void 0,displayName:re(W,4)!=null?ie(W,4):void 0}})}function fn(m){return{x:te(m,1),y:te(m,2),z:te(m,3),visibility:re(m,4)!=null?te(m,4):void 0}}function yn(m,W){this.h=m,this.g=W,this.l=0}function Le(m,W,V){return en(m,W),typeof m.g.canvas.transferToImageBitmap=="function"?Promise.resolve(m.g.canvas.transferToImageBitmap()):V?Promise.resolve(m.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(m.g.canvas):(m.i===void 0&&(m.i=document.createElement("canvas")),new Promise(function(k){m.i.height=m.g.canvas.height,m.i.width=m.g.canvas.width,m.i.getContext("2d",{}).drawImage(m.g.canvas,0,0,m.g.canvas.width,m.g.canvas.height),k(m.i)}))}function en(m,W){var V=m.g;if(m.m===void 0){var k=qe(V,`
4
+ `+p.getShaderInfoLog(V));return V}function nn(p){return fn(p,tt).map(function(W){return{index:Vt(W,1),Y:qt(W,2),label:ie(W,3)!=null?oe(W,3):void 0,displayName:ie(W,4)!=null?oe(W,4):void 0}})}function mn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ie(p,4)!=null?qt(p,4):void 0}}function yn(p,W){this.h=p,this.g=W,this.l=0}function Le(p,W,V){return rn(p,W),typeof p.g.canvas.transferToImageBitmap=="function"?Promise.resolve(p.g.canvas.transferToImageBitmap()):V?Promise.resolve(p.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(p.g.canvas):(p.i===void 0&&(p.i=document.createElement("canvas")),new Promise(function(k){p.i.height=p.g.canvas.height,p.i.width=p.g.canvas.width,p.i.getContext("2d",{}).drawImage(p.g.canvas,0,0,p.g.canvas.width,p.g.canvas.height),k(p.i)}))}function rn(p,W){var V=p.g;if(p.m===void 0){var k=en(V,`
5
5
  attribute vec2 aVertex;
6
6
  attribute vec2 aTex;
7
7
  varying vec2 vTex;
8
8
  void main(void) {
9
9
  gl_Position = vec4(aVertex, 0.0, 1.0);
10
10
  vTex = aTex;
11
- }`,0),z=qe(V,`
11
+ }`,0),O=en(V,`
12
12
  precision mediump float;
13
13
  varying vec2 vTex;
14
14
  uniform sampler2D sampler0;
15
15
  void main(){
16
16
  gl_FragColor = texture2D(sampler0, vTex);
17
- }`,1),ot=V.createProgram();if(V.attachShader(ot,k),V.attachShader(ot,z),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
17
+ }`,1),ot=V.createProgram();if(V.attachShader(ot,k),V.attachShader(ot,O),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
18
18
 
19
- `+V.getProgramInfoLog(ot));k=m.m=ot,V.useProgram(k),z=V.getUniformLocation(k,"sampler0"),m.j={I:V.getAttribLocation(k,"aVertex"),H:V.getAttribLocation(k,"aTex"),da:z},m.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.enableVertexAttribArray(m.j.I),V.vertexAttribPointer(m.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),m.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.o),V.enableVertexAttribArray(m.j.H),V.vertexAttribPointer(m.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(z,0)}k=m.j,V.useProgram(m.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),m.h.bindTexture2d(W.glName),V.enableVertexAttribArray(k.I),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.vertexAttribPointer(k.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,m.o),V.vertexAttribPointer(k.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(k.I),V.disableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,null),m.h.bindTexture2d(0)}function On(m){this.g=m}var nn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ne(m,W){return W+m}function Zn(m,W){window[m]=W}function Sn(m){var W=document.createElement("script");return W.setAttribute("src",m),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Be(){return oe(this,function m(){return de(m,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(nn),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function kn(m){if(this.g=m,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=m&&m.locateFile||Ne,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,m.options){W=w(Object.keys(m.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var k=m.options[V].default;k!==void 0&&(this.j[V]=typeof k=="function"?k():k)}}}i=kn.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function rn(m,W){return m.g.files===void 0?[]:typeof m.g.files=="function"?m.g.files(W):m.g.files}function vn(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt,Ut,Nt,$t,Et;return de(W,function(Tt){switch(Tt.g){case 1:return k=V,V.R?(z=rn(V,V.j),P(Tt,Be(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=z.filter(function(kt){return kt.data!==void 0}),Rt=z.filter(function(kt){return kt.data===void 0}),Ut=Promise.all(bt.map(function(kt){var Qt=un(k,kt.url);if(kt.path!==void 0){var ue=kt.path;Qt=Qt.then(function(pe){return k.overrideFile(ue,pe),Promise.resolve(pe)})}return Qt})),Nt=Promise.all(Rt.map(function(kt){return kt.simd===void 0||kt.simd&&ot||!kt.simd&&!ot?Sn(k.locateFile(kt.url,k.S)):Promise.resolve()})).then(function(){return oe(k,function kt(){var Qt,ue,pe=this;return de(kt,function(ge){if(ge.g==1)return Qt=window.createMediapipeSolutionsWasm,ue=window.createMediapipeSolutionsPackedAssets,P(ge,Qt(ue),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return oe(k,function kt(){var Qt=this;return de(kt,function(ue){return Qt.g.graph&&Qt.g.graph.url?ue=P(ue,un(Qt,Qt.g.graph.url),0):(ue.g=0,ue=void 0),ue})})}(),P(Tt,Promise.all([Nt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return O=z.filter(function(kt){return kt.simd===void 0||kt.simd&&ot||!kt.simd&&!ot}).map(function(kt){return k.locateFile(kt.url,k.S)}),importScripts.apply(null,E(O)),P(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Et=V.l.getContext("webgl2",{}),!Et&&(Et=V.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=Et,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Tt.g=0}})})}function Tn(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt,Ut;return de(W,function(Nt){if(Nt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Nt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Nt.g=2;return}return V.P=V.g.graph.url,P(Nt,un(V,V.g.graph.url),3)}for(Nt.g!=2&&(k=Nt.h,V.i.loadGraph(k)),z=w(Object.keys(V.B)),ot=z.next();!ot.done;ot=z.next())O=ot.value,V.i.overrideFile(O,V.B[O]);if(V.B={},V.g.listeners)for(rt=w(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Nt.g=0})})}i.reset=function(){return oe(this,function m(){var W=this;return de(m,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(m,W){var V=this;if(W=W||this.g.options){for(var k=[],z=[],ot={},O=w(Object.keys(m)),rt=O.next();!rt.done;ot={K:ot.K,L:ot.L},rt=O.next()){var bt=rt.value;bt in this.j&&this.j[bt]===m[bt]||(this.j[bt]=m[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=m[bt],k.push(function(Rt){return function(){return oe(V,function Ut(){var Nt,$t=this;return de(Ut,function(Et){if(Et.g==1)return P(Et,Rt.K(Rt.L),2);Nt=Et.h,Nt===!0&&($t.o=!0),Et.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?m[bt]:0,valueBoolean:rt.type===0?m[bt]:!1,valueString:rt.type===2?m[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),z.push(rt))))}(k.length!==0||z.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(z),this.u=(this.u===void 0?[]:this.u).concat(k))}};function An(m){return oe(m,function W(){var V=this,k,z,ot,O,rt,bt,Rt;return de(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}k=w(V.u),z=k.next();case 3:if(z.done){Ut.g=5;break}return ot=z.value,P(Ut,ot(),4);case 4:z=k.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(O=new V.h.GraphOptionChangeRequestList,rt=w(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,O.push_back(Rt);V.i.changeOptions(O),O.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return oe(this,function m(){var W=this;return de(m,function(V){return V.g==1?P(V,vn(W),2):V.g!=3?P(V,Tn(W),3):P(V,An(W),0)})})};function un(m,W){return oe(m,function V(){var k=this,z,ot;return de(V,function(O){return W in k.F?O.return(k.F[W]):(z=k.locateFile(W,""),ot=fetch(z).then(function(rt){return rt.arrayBuffer()}),k.F[W]=ot,O.return(ot))})})}i.overrideFile=function(m,W){this.i?this.i.overrideFile(m,W):this.B[m]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(m,W){return oe(this,function V(){var k=this,z,ot,O,rt,bt,Rt,Ut,Nt,$t;return de(V,function(Et){switch(Et.g){case 1:return k.g.inputs?(z=1e3*(W==null?performance.now():W),P(Et,k.C,2)):Et.return();case 2:return P(Et,k.initialize(),3);case 3:for(ot=new k.h.PacketDataList,O=w(Object.keys(m)),rt=O.next();!rt.done;rt=O.next())if(bt=rt.value,Rt=k.g.inputs[bt]){t:{var Tt=k,kt=m[bt];switch(Rt.type){case"video":var Qt=Tt.m[Rt.stream];if(Qt||(Qt=new yn(Tt.h,Tt.D),Tt.m[Rt.stream]=Qt),Tt=Qt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&kt instanceof HTMLVideoElement){var ue=kt.videoWidth;Qt=kt.videoHeight}else typeof HTMLImageElement<"u"&&kt instanceof HTMLImageElement?(ue=kt.naturalWidth,Qt=kt.naturalHeight):(ue=kt.width,Qt=kt.height);Qt={glName:Tt.l,width:ue,height:Qt},ue=Tt.g,ue.canvas.width=Qt.width,ue.canvas.height=Qt.height,ue.activeTexture(ue.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ue.texImage2D(ue.TEXTURE_2D,0,ue.RGBA,ue.RGBA,ue.UNSIGNED_BYTE,kt),Tt.h.bindTexture2d(0),Tt=Qt;break t;case"detections":for(Qt=Tt.m[Rt.stream],Qt||(Qt=new On(Tt.h),Tt.m[Rt.stream]=Qt),Tt=Qt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(kt.length),Qt=0;Qt<kt.length;++Qt){ue=kt[Qt];var pe=Tt.data,ge=pe.setBoundingBox,Je=Qt,h=ue.T,y=new He;zt(y,1,h.Z),zt(y,2,h.$),zt(y,3,h.height),zt(y,4,h.width),zt(y,5,h.rotation),zt(y,6,h.X);var v=h=new we;Ot(v,1,re(y,1)),Ot(v,2,re(y,2)),Ot(v,3,re(y,3)),Ot(v,4,re(y,4)),Ot(v,5,re(y,5));var C=re(y,6);if(C!=null&&C!=null){Ze(v.g,48);var A=v.g,_=C;C=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,C&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,C=he,M=Se;0<M||127<C;)A.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;A.push(C)}if(Ye(y,v),h=Xe(h),ge.call(pe,Je,h),ue.O)for(pe=0;pe<ue.O.length;++pe)y=ue.O[pe],v=!!y.visibility,ge=Tt.data,Je=ge.addNormalizedLandmark,h=Qt,y=Object.assign(Object.assign({},y),{visibility:v?y.visibility:0}),v=new ae,zt(v,1,y.x),zt(v,2,y.y),zt(v,3,y.z),y.visibility&&zt(v,4,y.visibility),A=y=new we,Ot(A,1,re(v,1)),Ot(A,2,re(v,2)),Ot(A,3,re(v,3)),Ot(A,4,re(v,4)),Ot(A,5,re(v,5)),Ye(v,A),y=Xe(y),Je.call(ge,h,y);if(ue.M)for(pe=0;pe<ue.M.length;++pe){if(ge=Tt.data,Je=ge.addClassification,h=Qt,y=ue.M[pe],v=new tt,zt(v,2,y.Y),y.index&&zt(v,1,y.index),y.label&&zt(v,3,y.label),y.displayName&&zt(v,4,y.displayName),A=y=new we,M=re(v,1),M!=null&&M!=null)if(Ze(A.g,8),C=A.g,0<=M)Ze(C,M);else{for(_=0;9>_;_++)C.push(M&127|128),M>>=7;C.push(1)}Ot(A,2,re(v,2)),C=re(v,3),C!=null&&(C=xn(C),Ze(A.g,26),Ze(A.g,C.length),$e(A,A.g.end()),$e(A,C)),C=re(v,4),C!=null&&(C=xn(C),Ze(A.g,34),Ze(A.g,C.length),$e(A,A.g.end()),$e(A,C)),Ye(v,A),y=Xe(y),Je.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Nt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Nt,timestamp:z}));break;case"detections":$t=Ut,$t.stream=Nt,$t.timestamp=z,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return k.i.send(ot),P(Et,k.C,4);case 4:ot.delete(),Et.g=0}})})};function wn(m,W,V){return oe(m,function k(){var z,ot,O,rt,bt,Rt,Ut=this,Nt,$t,Et,Tt,kt,Qt,ue,pe;return de(k,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(z={},ot=0,O=w(Object.keys(V)),rt=O.next();!rt.done;rt=O.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Nt=w(Object.keys(V)),rt=Nt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Et=V[$t],typeof Et=="string")return ue=z,pe=$t,P(ge,_n(Ut,$t,W[Et]),14);if(Tt=W[Et.stream],Et.type==="detection_list"){if(Tt){for(var Je=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),v=[],C=0;C<Je.size();++C){var A=Je.get(C);t:{var _=new He;for(A=new Ce(A);At(A);)switch(A.i){case 13:var M=sn(A.g);zt(_,1,M);break;case 21:M=sn(A.g),zt(_,2,M);break;case 29:M=sn(A.g),zt(_,3,M);break;case 37:M=sn(A.g),zt(_,4,M);break;case 45:M=sn(A.g),zt(_,5,M);break;case 48:for(var q=A.g,lt=128,s=0,X=M=0;4>X&&128<=lt;X++)lt=q.h[q.g++],s|=(lt&127)<<7*X;if(128<=lt&&(lt=q.h[q.g++],s|=(lt&127)<<28,M|=(lt&127)>>4),128<=lt)for(X=0;5>X&&128<=lt;X++)lt=q.h[q.g++],M|=(lt&127)<<7*X+3;128>lt?(q=s>>>0,lt=M>>>0,(M=lt&2147483648)&&(q=~q+1>>>0,lt=~lt>>>0,q==0&&(lt=lt+1>>>0)),q=4294967296*lt+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),zt(_,6,M);break;default:if(!ee(_,A))break t}}_={Z:te(_,1),$:te(_,2),height:te(_,3),width:te(_,4),rotation:te(_,5,0),X:Vt(_,6)},M=h.get(C);t:for(A=new St,M=new Ce(M);At(M);)switch(M.i){case 10:q=jt(M,new ae,ce),fe(A,q,ae,void 0);break;default:if(!ee(A,M))break t}A=hn(A,ae).map(fn),q=y.get(C);t:for(M=new ut,q=new Ce(q);At(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!ee(M,q))break t}_={T:_,O:A,M:tn(M)},v.push(_)}Je=v}else Je=[];z[$t]=Je,ge.g=7;break}if(Et.type==="proto_list"){if(Tt){for(Je=Array(Tt.size()),h=0;h<Tt.size();h++)Je[h]=Tt.get(h);Tt.delete()}else Je=[];z[$t]=Je,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(Et.type==="float_list"){z[$t]=Tt,ge.g=7;break}if(Et.type==="proto"){z[$t]=Tt,ge.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return kt=Ut.s[$t],kt||(kt=new yn(Ut.h,Ut.D),Ut.s[$t]=kt),P(ge,Le(kt,Tt,Ut.G),13);case 13:Qt=ge.h,z[$t]=Qt;case 7:Et.transform&&z[$t]&&(z[$t]=Et.transform(z[$t])),ge.g=3;break;case 14:ue[pe]=ge.h;case 3:rt=Nt.next(),ge.g=2;break;case 4:return ge.return(z)}})})}function _n(m,W,V){return oe(m,function k(){var z=this,ot;return de(k,function(O){return typeof V=="number"||V instanceof Uint8Array||V instanceof z.h.Uint8BlobList?O.return(V):V instanceof z.h.Texture2dDataOut?(ot=z.s[W],ot||(ot=new yn(z.h,z.D),z.s[W]=ot),O.return(Le(ot,V,z.G))):O.return(void 0)})})}function Qn(m,W){for(var V=W.name||"$",k=[].concat(E(W.wants)),z=new m.h.StringList,ot=w(W.wants),O=ot.next();!O.done;O=ot.next())z.push_back(O.value);ot=m.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[k[Rt]]=rt.get(Rt);var Ut=m.listeners[V];Ut&&(m.C=wn(m,bt,W.outs).then(function(Nt){Nt=Ut(Nt);for(var $t=0;$t<W.wants.length;++$t){var Et=bt[k[$t]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}Nt&&(m.C=Nt)}))}}),m.i.attachMultiListener(z,ot),z.delete()}i.onResults=function(m,W){this.listeners[W||"$"]=m},Re("Solution",kn),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Fn(m){switch(m===void 0&&(m=0),m){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Hn(m){var W=this;m=m||{},this.g=new kn({locateFile:m.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Fn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return oe(W,function k(){var z,ot,O=this,rt;return de(k,function(bt){return bt.g==1?(z=Fn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+z,P(bt,un(O.g,z),2)):(rt=bt.h,O.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Hn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(m){this.g.onResults(m)},i.initialize=function(){return oe(this,function m(){var W=this;return de(m,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(m){return oe(this,function W(){var V=this;return de(W,function(k){return P(k,V.g.send(m),0)})})},i.setOptions=function(m){this.g.setOptions(m)},Re("SelfieSegmentation",Hn),Re("VERSION","0.1.1632777926")}).call(ai);const di={};(function(){var i;function n(l){var Z=0;return function(){return Z<l.length?{done:!1,value:l[Z++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,Z,x){return l==Array.prototype||l==Object.prototype||(l[Z]=x.value),l};function p(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var Z=0;Z<l.length;++Z){var x=l[Z];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var G=p(this);function S(l,Z){if(Z)t:{var x=G;l=l.split(".");for(var T=0;T<l.length-1;T++){var J=l[T];if(!(J in x))break t;x=x[J]}l=l[l.length-1],T=x[l],Z=Z(T),Z!=T&&Z!=null&&r(x,l,{configurable:!0,writable:!0,value:Z})}}S("Symbol",function(l){function Z(o){if(this instanceof Z)throw new TypeError("Symbol is not a constructor");return new x(T+(o||"")+"_"+J++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return Z}),S("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var Z="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<Z.length;x++){var T=G[Z[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&r(T.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function w(l){var Z=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return Z?Z.call(l):{next:n(l)}}function E(l){if(!(l instanceof Array)){l=w(l);for(var Z,x=[];!(Z=l.next()).done;)x.push(Z.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function Z(){}return Z.prototype=l,new Z},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(l,Z){if(l.__proto__=Z,l.__proto__!==Z)throw new TypeError(l+" is not extensible");return l}:null}var at=ct;function pt(l,Z){if(l.prototype=et(Z.prototype),l.prototype.constructor=l,at)at(l,Z);else for(var x in Z)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(Z,x);T&&Object.defineProperty(l,x,T)}else l[x]=Z[x];l.ra=Z.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Jt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Mt.prototype.s=function(l){this.h=l};function qt(l,Z){l.j={fa:Z,ga:!0},l.g=l.o||l.u}Mt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,Z,x){return l.g=x,{value:Z}}function De(l){this.g=new Mt,this.h=l}function an(l,Z){Jt(l.g);var x=l.g.i;return x?Ve(l,"return"in x?x.return:function(T){return{value:T,done:!0}},Z,l.g.return):(l.g.return(Z),Dt(l))}function Ve(l,Z,x,T){try{var J=Z.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var o=J.value}catch(d){return l.g.i=null,qt(l.g,d),Dt(l)}return l.g.i=null,T.call(l.g,o),Dt(l)}function Dt(l){for(;l.g.g;)try{var Z=l.h(l.g);if(Z)return l.g.l=!1,{value:Z.value,done:!1}}catch(x){l.g.h=void 0,qt(l.g,x)}if(l.g.l=!1,l.g.j){if(Z=l.g.j,l.g.j=null,Z.ga)throw Z.fa;return{value:Z.return,done:!0}}return{value:void 0,done:!0}}function Kn(l){this.next=function(Z){return Jt(l.g),l.g.i?Z=Ve(l,l.g.i.next,Z,l.g.s):(l.g.s(Z),Z=Dt(l)),Z},this.throw=function(Z){return Jt(l.g),l.g.i?Z=Ve(l,l.g.i.throw,Z,l.g.s):(qt(l.g,Z),Z=Dt(l)),Z},this.return=function(Z){return an(l,Z)},this[Symbol.iterator]=function(){return this}}function de(l){function Z(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,J){function o(d){d.done?T(d.value):Promise.resolve(d.value).then(Z,x).then(o,J)}o(l.next())})}function gt(l){return de(new Kn(new De(l)))}S("Promise",function(l){function Z(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function x(){this.g=null}function T(d){return d instanceof Z?d:new Z(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var J=G.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},Z.prototype.j=function(){function d(u){return function(f){e||(e=!0,u.call(g,f))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},Z.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof Z)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},Z.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},Z.prototype.l=function(d){this.u(2,d)},Z.prototype.o=function(d){this.u(1,d)},Z.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},Z.prototype.G=function(){var d=this;J(function(){if(d.C()){var g=G.console;typeof g<"u"&&g.error(d.i)}},1)},Z.prototype.C=function(){if(this.s)return!1;var d=G.CustomEvent,g=G.Event,e=G.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=G.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},Z.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new x;return Z.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},Z.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},Z.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(I){f(I)}}:a}var u,f,t=new Z(function(c,a){u=c,f=a});return this.M(e(d,u),e(g,f)),t},Z.prototype.catch=function(d){return this.then(void 0,d)},Z.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},Z.resolve=T,Z.reject=function(d){return new Z(function(g,e){e(d)})},Z.race=function(d){return new Z(function(g,e){for(var u=w(d),f=u.next();!f.done;f=u.next())T(f.value).M(g,e)})},Z.all=function(d){var g=w(d),e=g.next();return e.done?T([]):new Z(function(u,f){function t(b){return function(I){c[b]=I,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,T(e.value).M(t(c.length-1),f),e=g.next();while(!e.done)})},Z});function pn(l,Z){l instanceof String&&(l+="");var x=0,T=!1,J={next:function(){if(!T&&x<l.length){var o=x++;return{value:Z(o,l[o]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,Z){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(l[J]=T[J])}return l};S("Object.assign",function(l){return l||jn}),S("Object.is",function(l){return l||function(Z,x){return Z===x?Z!==0||1/Z===1/x:Z!==Z&&x!==x}}),S("Array.prototype.includes",function(l){return l||function(Z,x){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var o=T[x];if(o===Z||Object.is(o,Z))return!0}return!1}}),S("String.prototype.includes",function(l){return l||function(Z,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(Z instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(Z,x||0)!==-1}}),S("Array.prototype.keys",function(l){return l||function(){return pn(this,function(Z){return Z})}});var Re=this||self;function Ht(l,Z){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||Z===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=Z}function Te(){throw Error("Invalid UTF8")}function on(l,Z){return Z=String.fromCharCode.apply(null,Z),l==null?Z:l+Z}var Xn,Ln=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function En(l){var Z;Z===void 0&&(Z=0),Ke(),Z=dn[Z];for(var x=Array(Math.floor(l.length/3)),T=Z[64]||"",J=0,o=0;J<l.length-2;J+=3){var d=l[J],g=l[J+1],e=l[J+2],u=Z[d>>2];d=Z[(d&3)<<4|g>>4],g=Z[(g&15)<<2|e>>6],e=Z[e&63],x[o++]=u+d+g+e}switch(u=0,e=T,l.length-J){case 2:u=l[J+1],e=Z[(u&15)<<2]||T;case 1:l=l[J],x[o]=Z[l>>2]+Z[(l&3)<<4|u>>4]+e+T}return x.join("")}function Cn(l){var Z=l.length,x=3*Z/4;x%3?x=Math.floor(x):"=.".indexOf(l[Z-1])!=-1&&(x="=.".indexOf(l[Z-2])!=-1?x-2:x-1);var T=new Uint8Array(x),J=0;return Oe(l,function(o){T[J++]=o}),J!==x?T.subarray(0,J):T}function Oe(l,Z){function x(e){for(;T<l.length;){var u=l.charAt(T++),f=bn[u];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ke();for(var T=0;;){var J=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&J===-1)break;Z(J<<2|o>>4),d!=64&&(Z(o<<4&240|d>>2),g!=64&&Z(d<<6&192|g))}}function Ke(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),Z=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(Z[x].split(""));dn[x]=T;for(var J=0;J<T.length;J++){var o=T[J];bn[o]===void 0&&(bn[o]=J)}}}}var In=typeof Uint8Array=="function";function Wn(l){return In&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ne=0,We=0;function sn(l,Z){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Cn(l);if(l.constructor===Se)return!Z&&(Z=l.L)&&Z.constructor===Uint8Array?Z:(Z=l.L,Z=Z==null||Wn(Z)?Z:typeof Z=="string"?Cn(Z):null,(l=l.L=Z)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ue(l,Z){return Error("Invalid wire type: "+l+" (at position "+Z+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,Z){Z=Z===void 0?{}:Z,Z=Z.v===void 0?!1:Z.v,this.h=null,this.g=this.i=this.j=0,this.v=Z,l&&Ce(this,l)}function Ce(l,Z){l.h=sn(Z,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function At(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var Z=l.h,x=Z[l.g],T=x&127;if(128>x)return l.g+=1,At(l),T;if(x=Z[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,At(l),T;if(x=Z[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,At(l),T;if(x=Z[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,At(l),T;if(x=Z[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return At(l),T;if(128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++])throw _t();return At(l),T}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function we(l,Z){for(;127<Z;)l.g.push(Z&127|128),Z>>>=7;l.g.push(Z)}function $e(l){var Z={},x=Z.W===void 0?!1:Z.W;this.l={v:Z.v===void 0?!1:Z.v},this.W=x,Z=this.l,jt.length?(x=jt.pop(),Z&&(x.v=Z.v),l&&Ce(x,l),l=x):l=new Ze(l,Z),this.g=l,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var Z=l.g;if(Z.g==Z.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(Z=x>>>3,x&=7,!(0<=x&&5>=x))throw Ue(x,l.j);if(1>Z)throw Error("Invalid field number: "+Z+" (at position "+l.j+")");return l.i=Z,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var Z=l.g,x=Z+10;Z<x;)if((l.h[Z++]&128)===0){l.g=Z,At(l);break t}throw _t()}break;case 1:l=l.g,l.g+=8,At(l);break;case 2:l.h!=2?Ot(l):(Z=xe(l.g)>>>0,l=l.g,l.g+=Z,At(l));break;case 5:l=l.g,l.g+=4,At(l);break;case 3:Z=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=Z)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Ue(l.h,l.j)}}var je=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(l,Z){Z.length!==0&&(l.i.push(Z),l.h+=Z.length)}function Vn(l,Z){if(Z=Z.ca){Ie(l,l.g.end());for(var x=0;x<Z.length;x++)Ie(l,Z[x])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(l,Z){Object.isFrozen(l)||(ln?l[ln]|=Z:l.N!==void 0?l.N|=Z:Object.defineProperties(l,{N:{value:Z,configurable:!0,writable:!0,enumerable:!1}}))}function cn(l){var Z;return ln?Z=l[ln]:Z=l.N,Z==null?0:Z}function ve(l){return _e(l,1),l}function Fe(l){return Array.isArray(l)?!!(cn(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");_e(l,2)}function re(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var Qe=Object.freeze(ve([]));function te(l){if(Fe(l.m))throw Error("Cannot mutate an immutable Message")}var zt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,Z,x){return Z===-1?null:Z>=l.i?l.g?l.g[Z]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[Z],x!=null)?x:l.m[Z+l.h]}function Ct(l,Z,x,T){T=T===void 0?!1:T,te(l),Z<l.i&&!T?l.m[Z+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[Z]=x}function Vt(l,Z,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var J=fe(l,Z,T);return J==null&&(J=Qe),Fe(l.m)?x&&(Ge(J),Object.freeze(J)):(J===Qe||Fe(J))&&(J=ve(J.slice()),Ct(l,Z,J,T)),J}function ie(l,Z,x){return l=fe(l,Z),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Ye(l,Z,x,T){l.j||(l.j={});var J=Fe(l.m),o=l.j[x];if(!o){T=Vt(l,x,!0,T===void 0?!1:T),o=[],J=J||Fe(T);for(var d=0;d<T.length;d++)o[d]=new Z(T[d]),J&&Ge(o[d].m);J&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function ee(l,Z,x,T,J){var o=o===void 0?!1:o;return te(l),o=Ye(l,x,Z,o),x=T||new x,l=Vt(l,Z),J!=null?(o.splice(J,0,x),l.splice(J,0,x.m)):(o.push(x),l.push(x.m)),x}function oe(l,Z){return l=fe(l,Z),l==null?0:l}function tt(l,Z){return l=fe(l,Z),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Wn(l))return En(l);if(l instanceof Se){var Z=l.L;return Z=Z==null||typeof Z=="string"?Z:In&&Z instanceof Uint8Array?En(Z):null,(l.L=Z)||""}}}return l}function ut(l){var Z=ce;return Z=Z===void 0?St:Z,ae(l,Z)}function Pt(l,Z){if(l!=null){if(Array.isArray(l))l=ae(l,Z);else if(re(l)){var x={},T;for(T in l)x[T]=Pt(l[T],Z);l=x}else l=Z(l);return l}}function ae(l,Z){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=Pt(x[T],Z);return Array.isArray(l)&&cn(l)&1&&ve(x),x}function ce(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Wn(l)?new Uint8Array(l):l}function me(l,Z,x){l||(l=He),He=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],re(T))){this.i=l-this.h,this.g=T;break t}Z!==void 0&&-1<Z?(this.i=Math.max(Z,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(Z=0;Z<x.length;Z++)if(l=x[Z],l<this.i)l+=this.h,(T=this.m[l])?Array.isArray(T)&&ve(T):this.m[l]=Qe;else{T=this.g||(this.g=this.m[this.i+this.h]={});var J=T[l];J?Array.isArray(J)&&ve(J):T[l]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function qe(){me.apply(this,arguments)}if(pt(qe,me),zt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(l,Z,x){if(x){var T={},J;for(J in x){var o=x[J],d=o.ja;d||(T.F=o.pa||o.ha.P,o.ba?(T.U=Sn(o.ba),d=function(g){return function(e,u,f){return g.F(e,u,f,g.U)}}(T)):o.da?(T.T=Be(o.X.g,o.da),d=function(g){return function(e,u,f){return g.F(e,u,f,g.T)}}(T)):d=T.F,o.ja=d),d(Z,l,o.X),T={F:T.F,U:T.U,T:T.T}}}Vn(Z,l)}var yn=Symbol();function Le(l,Z,x){return l[yn]||(l[yn]=function(T,J){return Z(T,J,x)})}function en(l){var Z=l[yn];if(!Z){var x=m(l);Z=function(T,J){return W(T,J,x)},l[yn]=Z}return Z}function On(l){var Z=l.ba;if(Z)return en(Z);if(Z=l.oa)return Le(l.X.g,Z,l.da)}function nn(l){var Z=On(l),x=l.X,T=l.ha.O;return Z?function(J,o){return T(J,o,x,Z)}:function(J,o){return T(J,o,x)}}function Ne(l,Z,x,T,J,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(Z,l[0]),d++);d<l.length;){x=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:T(Z,x,e);break;case 1:T(Z,x,e,l[d++]);break;case 2:J(Z,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],f=l[d++];Array.isArray(f)?J(Z,x,e,g,u,f):o(Z,x,e,g,u,f);break;case 4:o(Z,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return Z}var Zn=Symbol();function Sn(l){var Z=l[Zn];if(!Z){var x=un(l);Z=function(T,J){return k(T,J,x)},l[Zn]=Z}return Z}function Be(l,Z){var x=l[Zn];return x||(x=function(T,J){return fn(T,J,Z)},l[Zn]=x),x}var kn=Symbol();function rn(l,Z){l.push(Z)}function vn(l,Z,x){l.push(Z,x.P)}function Tn(l,Z,x,T,J){var o=Sn(J),d=x.P;l.push(Z,function(g,e,u){return d(g,e,u,T,o)})}function An(l,Z,x,T,J,o){var d=Be(T,o),g=x.P;l.push(Z,function(e,u,f){return g(e,u,f,T,d)})}function un(l){var Z=l[kn];return Z||Ne(l,l[kn]=[],rn,vn,Tn,An)}var wn=Symbol();function _n(l,Z){l[0]=Z}function Qn(l,Z,x,T){var J=x.O;l[Z]=T?function(o,d,g){return J(o,d,g,T)}:J}function Fn(l,Z,x,T,J,o){var d=x.O,g=en(J);l[Z]=function(e,u,f){return d(e,u,f,T,g,o)}}function Hn(l,Z,x,T,J,o,d){var g=x.O,e=Le(T,J,o);l[Z]=function(u,f,t){return g(u,f,t,T,e,d)}}function m(l){var Z=l[wn];return Z||Ne(l,l[wn]={},_n,Qn,Fn,Hn)}function W(l,Z,x){for(;Xe(Z)&&Z.h!=4;){var T=Z.i,J=x[T];if(!J){var o=x[0];o&&(o=o[T])&&(J=x[T]=nn(o))}if((!J||!J(Z,l,T))&&(J=Z,T=l,o=J.j,Ot(J),!J.W)){var d=J.g.h;J=J.g.g,J=o===J?he||(he=new Uint8Array(0)):ze?d.slice(o,J):new Uint8Array(d.subarray(o,J)),(o=T.ca)?o.push(J):T.ca=[J]}}return l}function V(l,Z,x){if(je.length){var T=je.pop();l&&(Ce(T.g,l),T.i=-1,T.h=-1),l=T}else l=new $e(l);try{return W(new Z,l,m(x))}finally{Z=l.g,Z.h=null,Z.j=0,Z.i=0,Z.g=0,Z.v=!1,l.i=-1,l.h=-1,100>je.length&&je.push(l)}}function k(l,Z,x){for(var T=x.length,J=T%2==1,o=J?1:0;o<T;o+=2)(0,x[o+1])(Z,l,x[o]);fn(l,Z,J?x[0]:void 0)}function z(l,Z){var x=new Pe;k(l,x,un(Z)),Ie(x,x.g.end()),l=new Uint8Array(x.h),Z=x.i;for(var T=Z.length,J=0,o=0;o<T;o++){var d=Z[o];l.set(d,J),J+=d.length}return x.i=[l],l}function ot(l,Z){return{O:l,P:Z}}var O=ot(function(l,Z,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],J=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,At(l),J=(T<<0|J<<8|o<<16|d<<24)>>>0,l=2*(J>>31)+1,T=J>>>23&255,J&=8388607,Ct(Z,x,T==255?J?NaN:1/0*l:T==0?l*Math.pow(2,-149)*J:l*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){we(l.g,8*x+5),l=l.g;var T=Z;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ne=We=0:(We=0,ne=2147483648):isNaN(T)?(We=0,ne=2147483647):34028234663852886e22<T?(We=0,ne=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),We=0,ne=(x<<31|T)>>>0):(Z=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-Z),T=Math.round(8388608*T),16777216<=T&&++Z,We=0,ne=(x<<31|Z+127<<23|T&8388607)>>>0),x=ne,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,Z,x){if(l.h!==0)return!1;for(var T=l.g,J=128,o=0,d=l=0;4>d&&128<=J;d++)J=T.h[T.g++],At(T),o|=(J&127)<<7*d;if(128<=J&&(J=T.h[T.g++],At(T),o|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=T.h[T.g++],At(T),l|=(J&127)<<7*d+3;if(128>J)T=o>>>0,J=l>>>0,(l=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0);else throw _t();return Ct(Z,x,l?-T:T),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null){we(l.g,8*x),l=l.g;var T=Z;for(x=0>T,T=Math.abs(T),Z=T>>>0,T=Math.floor((T-Z)/4294967296),T>>>=0,x&&(T=~T>>>0,Z=(~Z>>>0)+1,4294967295<Z&&(Z=0,T++,4294967295<T&&(T=0))),ne=Z,We=T,x=ne,Z=We;0<Z||127<x;)l.g.push(x&127|128),x=(x>>>7|Z<<25)>>>0,Z>>>=7;l.g.push(x)}}),bt=ot(function(l,Z,x){return l.h!==0?!1:(Ct(Z,x,xe(l.g)),!0)},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null)if(we(l.g,8*x),l=l.g,x=Z,0<=x)we(l,x);else{for(Z=0;9>Z;Z++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,Z,x){if(l.h!==2)return!1;var T=xe(l.g)>>>0;l=l.g;var J=l.g;l.g+=T,At(l),l=l.h;var o;if(Ln)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(J,J+T));else{T=J+T;for(var d=[],g=null,e,u,f;J<T;)e=l[J++],128>e?d.push(e):224>e?J>=T?Te():(u=l[J++],194>e||(u&192)!==128?(J--,Te()):d.push((e&31)<<6|u&63)):240>e?J>=T-1?Te():(u=l[J++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[J++])&192)!==128?(J--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?J>=T-2?Te():(u=l[J++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=on(g,d),d.length=0);o=on(g,d)}return Ct(Z,x,o),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){var T=!1;if(T=T===void 0?!1:T,Nn){if(T&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(Z))throw Error("Found an unpaired surrogate");Z=(xn||(xn=new TextEncoder)).encode(Z)}else{for(var J=0,o=new Uint8Array(3*Z.length),d=0;d<Z.length;d++){var g=Z.charCodeAt(d);if(128>g)o[J++]=g;else{if(2048>g)o[J++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<Z.length){var e=Z.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[J++]=g>>18|240,o[J++]=g>>12&63|128,o[J++]=g>>6&63|128,o[J++]=g&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");g=65533}o[J++]=g>>12|224,o[J++]=g>>6&63|128}o[J++]=g&63|128}}Z=o.subarray(0,J)}we(l.g,8*x+2),we(l.g,Z.length),Ie(l,l.g.end()),Ie(l,Z)}}),Ut=ot(function(l,Z,x,T,J){if(l.h!==2)return!1;Z=ee(Z,x,T),x=l.g.i,T=xe(l.g)>>>0;var o=l.g.g+T,d=o-x;if(0>=d&&(l.g.i=o,J(Z,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,Z,x,T,J){if(Z=Ye(Z,T,x),Z!=null)for(T=0;T<Z.length;T++){var o=l;we(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,J(Z[T],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Nt(){qe.apply(this,arguments)}if(pt(Nt,qe),zt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Et(l){Nt.call(this,l)}pt(Et,Nt);function Tt(){return[1,bt,2,O,3,Rt,4,Rt]}function kt(l){Nt.call(this,l,-1,ue)}pt(kt,Nt),kt.prototype.addClassification=function(l,Z){return ee(this,1,Et,l,Z),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function pe(l){Nt.call(this,l)}pt(pe,Nt);function ge(){return[1,O,2,O,3,O,4,O,5,O]}function Je(l){Nt.call(this,l,-1,y)}pt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function v(l){Nt.call(this,l)}pt(v,Nt);function C(){return[1,O,2,O,3,O,4,O,5,O,6,rt]}function A(l,Z,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,Z),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
19
+ `+V.getProgramInfoLog(ot));k=p.m=ot,V.useProgram(k),O=V.getUniformLocation(k,"sampler0"),p.j={I:V.getAttribLocation(k,"aVertex"),H:V.getAttribLocation(k,"aTex"),da:O},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(O,0)}k=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(k.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(k.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(k.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(k.I),V.disableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function zn(p){this.g=p}var on=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Ne(p,W){return W+p}function Zn(p,W){window[p]=W}function Sn(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Me(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(on),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Ne,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=T(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var k=p.options[V].default;k!==void 0&&(this.j[V]=typeof k=="function"?k():k)}}}i=En.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function sn(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function vn(p){return se(p,function W(){var V=this,k,O,ot,z,rt,bt,Rt,Et,Nt,$t,Jt;return ne(W,function(wt){switch(wt.g){case 1:return k=V,V.R?(O=sn(V,V.j),P(wt,Me(),2)):wt.return();case 2:if(ot=wt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(Ut){return Ut.data!==void 0}),Rt=O.filter(function(Ut){return Ut.data===void 0}),Et=Promise.all(bt.map(function(Ut){var Dt=dn(k,Ut.url);if(Ut.path!==void 0){var ae=Ut.path;Dt=Dt.then(function(pe){return k.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Nt=Promise.all(Rt.map(function(Ut){return Ut.simd===void 0||Ut.simd&&ot||!Ut.simd&&!ot?Sn(k.locateFile(Ut.url,k.S)):Promise.resolve()})).then(function(){return se(k,function Ut(){var Dt,ae,pe=this;return ne(Ut,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,P(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(k,function Ut(){var Dt=this;return ne(Ut,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=P(ae,dn(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),P(wt,Promise.all([Nt,Et,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return z=O.filter(function(Ut){return Ut.simd===void 0||Ut.simd&&ot||!Ut.simd&&!ot}).map(function(Ut){return k.locateFile(Ut.url,k.S)}),importScripts.apply(null,B(z)),P(wt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=wt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),wt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Jt=V.l.getContext("webgl2",{}),!Jt&&(Jt=V.l.getContext("webgl",{}),!Jt))return alert("Failed to create WebGL canvas context when passing video frame."),wt.return();V.D=Jt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,wt.g=0}})})}function wn(p){return se(p,function W(){var V=this,k,O,ot,z,rt,bt,Rt,Et;return ne(W,function(Nt){if(Nt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Nt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Nt.g=2;return}return V.P=V.g.graph.url,P(Nt,dn(V,V.g.graph.url),3)}for(Nt.g!=2&&(k=Nt.h,V.i.loadGraph(k)),O=T(Object.keys(V.B)),ot=O.next();!ot.done;ot=O.next())z=ot.value,V.i.overrideFile(z,V.B[z]);if(V.B={},V.g.listeners)for(rt=T(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Et=V.j,V.j={},V.setOptions(Et),Nt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var k=[],O=[],ot={},z=T(Object.keys(p)),rt=z.next();!rt.done;ot={K:ot.K,L:ot.L},rt=z.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],k.push(function(Rt){return function(){return se(V,function Et(){var Nt,$t=this;return ne(Et,function(Jt){if(Jt.g==1)return P(Jt,Rt.K(Rt.L),2);Nt=Jt.h,Nt===!0&&($t.o=!0),Jt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),O.push(rt))))}(k.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(k))}};function An(p){return se(p,function W(){var V=this,k,O,ot,z,rt,bt,Rt;return ne(W,function(Et){switch(Et.g){case 1:if(!V.o)return Et.return();if(!V.u){Et.g=2;break}k=T(V.u),O=k.next();case 3:if(O.done){Et.g=5;break}return ot=O.value,P(Et,ot(),4);case 4:O=k.next(),Et.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(z=new V.h.GraphOptionChangeRequestList,rt=T(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,z.push_back(Rt);V.i.changeOptions(z),z.delete(),V.A=void 0}V.o=!1,Et.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?P(V,vn(W),2):V.g!=3?P(V,wn(W),3):P(V,An(W),0)})})};function dn(p,W){return se(p,function V(){var k=this,O,ot;return ne(V,function(z){return W in k.F?z.return(k.F[W]):(O=k.locateFile(W,""),ot=fetch(O).then(function(rt){return rt.arrayBuffer()}),k.F[W]=ot,z.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var k=this,O,ot,z,rt,bt,Rt,Et,Nt,$t;return ne(V,function(Jt){switch(Jt.g){case 1:return k.g.inputs?(O=1e3*(W==null?performance.now():W),P(Jt,k.C,2)):Jt.return();case 2:return P(Jt,k.initialize(),3);case 3:for(ot=new k.h.PacketDataList,z=T(Object.keys(p)),rt=z.next();!rt.done;rt=z.next())if(bt=rt.value,Rt=k.g.inputs[bt]){t:{var wt=k,Ut=p[bt];switch(Rt.type){case"video":var Dt=wt.m[Rt.stream];if(Dt||(Dt=new yn(wt.h,wt.D),wt.m[Rt.stream]=Dt),wt=Dt,wt.l===0&&(wt.l=wt.h.createTexture()),typeof HTMLVideoElement<"u"&&Ut instanceof HTMLVideoElement){var ae=Ut.videoWidth;Dt=Ut.videoHeight}else typeof HTMLImageElement<"u"&&Ut instanceof HTMLImageElement?(ae=Ut.naturalWidth,Dt=Ut.naturalHeight):(ae=Ut.width,Dt=Ut.height);Dt={glName:wt.l,width:ae,height:Dt},ae=wt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),wt.h.bindTexture2d(wt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Ut),wt.h.bindTexture2d(0),wt=Dt;break t;case"detections":for(Dt=wt.m[Rt.stream],Dt||(Dt=new zn(wt.h),wt.m[Rt.stream]=Dt),wt=Dt,wt.data||(wt.data=new wt.g.DetectionListData),wt.data.reset(Ut.length),Dt=0;Dt<Ut.length;++Dt){ae=Ut[Dt];var pe=wt.data,ge=pe.setBoundingBox,Je=Dt,h=ae.T,y=new He;Pt(y,1,h.Z),Pt(y,2,h.$),Pt(y,3,h.height),Pt(y,4,h.width),Pt(y,5,h.rotation),Pt(y,6,h.X);var v=h=new Ye;Ot(v,1,ie(y,1)),Ot(v,2,ie(y,2)),Ot(v,3,ie(y,3)),Ot(v,4,ie(y,4)),Ot(v,5,ie(y,5));var C=ie(y,6);if(C!=null&&C!=null){Ze(v.g,48);var M=v.g,_=C;C=0>_,_=Math.abs(_);var A=_>>>0;for(_=Math.floor((_-A)/4294967296),_>>>=0,C&&(_=~_>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,_++,4294967295<_&&(_=0))),he=A,Se=_,C=he,A=Se;0<A||127<C;)M.push(C&127|128),C=(C>>>7|A<<25)>>>0,A>>>=7;M.push(C)}if(Fe(y,v),h=Xe(h),ge.call(pe,Je,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],v=!!y.visibility,ge=wt.data,Je=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:v?y.visibility:0}),v=new de,Pt(v,1,y.x),Pt(v,2,y.y),Pt(v,3,y.z),y.visibility&&Pt(v,4,y.visibility),M=y=new Ye,Ot(M,1,ie(v,1)),Ot(M,2,ie(v,2)),Ot(M,3,ie(v,3)),Ot(M,4,ie(v,4)),Ot(M,5,ie(v,5)),Fe(v,M),y=Xe(y),Je.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=wt.data,Je=ge.addClassification,h=Dt,y=ae.M[pe],v=new tt,Pt(v,2,y.Y),y.index&&Pt(v,1,y.index),y.label&&Pt(v,3,y.label),y.displayName&&Pt(v,4,y.displayName),M=y=new Ye,A=ie(v,1),A!=null&&A!=null)if(Ze(M.g,8),C=M.g,0<=A)Ze(C,A);else{for(_=0;9>_;_++)C.push(A&127|128),A>>=7;C.push(1)}Ot(M,2,ie(v,2)),C=ie(v,3),C!=null&&(C=xn(C),Ze(M.g,26),Ze(M.g,C.length),tn(M,M.g.end()),tn(M,C)),C=ie(v,4),C!=null&&(C=xn(C),Ze(M.g,34),Ze(M.g,C.length),tn(M,M.g.end()),tn(M,C)),Fe(v,M),y=Xe(y),Je.call(ge,h,y)}}wt=wt.data;break t;default:wt={}}}switch(Et=wt,Nt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Et),{stream:Nt,timestamp:O}));break;case"detections":$t=Et,$t.stream=Nt,$t.timestamp=O,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return k.i.send(ot),P(Jt,k.C,4);case 4:ot.delete(),Jt.g=0}})})};function Yn(p,W,V){return se(p,function k(){var O,ot,z,rt,bt,Rt,Et=this,Nt,$t,Jt,wt,Ut,Dt,ae,pe;return ne(k,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(O={},ot=0,z=T(Object.keys(V)),rt=z.next();!rt.done;rt=z.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Et.G=!1),Nt=T(Object.keys(V)),rt=Nt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Jt=V[$t],typeof Jt=="string")return ae=O,pe=$t,P(ge,_n(Et,$t,W[Jt]),14);if(wt=W[Jt.stream],Jt.type==="detection_list"){if(wt){for(var Je=wt.getRectList(),h=wt.getLandmarksList(),y=wt.getClassificationsList(),v=[],C=0;C<Je.size();++C){var M=Je.get(C);t:{var _=new He;for(M=new Ce(M);At(M);)switch(M.i){case 13:var A=cn(M.g);Pt(_,1,A);break;case 21:A=cn(M.g),Pt(_,2,A);break;case 29:A=cn(M.g),Pt(_,3,A);break;case 37:A=cn(M.g),Pt(_,4,A);break;case 45:A=cn(M.g),Pt(_,5,A);break;case 48:for(var q=M.g,lt=128,s=0,G=A=0;4>G&&128<=lt;G++)lt=q.h[q.g++],s|=(lt&127)<<7*G;if(128<=lt&&(lt=q.h[q.g++],s|=(lt&127)<<28,A|=(lt&127)>>4),128<=lt)for(G=0;5>G&&128<=lt;G++)lt=q.h[q.g++],A|=(lt&127)<<7*G+3;128>lt?(q=s>>>0,lt=A>>>0,(A=lt&2147483648)&&(q=~q+1>>>0,lt=~lt>>>0,q==0&&(lt=lt+1>>>0)),q=4294967296*lt+(q>>>0),A=A?-q:q):(q.l=!0,A=void 0),Pt(_,6,A);break;default:if(!te(_,M))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},A=h.get(C);t:for(M=new St,A=new Ce(A);At(A);)switch(A.i){case 10:q=zt(A,new de,ue),fe(M,q,de,void 0);break;default:if(!te(M,A))break t}M=fn(M,de).map(mn),q=y.get(C);t:for(A=new ct,q=new Ce(q);At(q);)switch(q.i){case 10:A.addClassification(zt(q,new tt,it));break;default:if(!te(A,q))break t}_={T:_,O:M,M:nn(A)},v.push(_)}Je=v}else Je=[];O[$t]=Je,ge.g=7;break}if(Jt.type==="proto_list"){if(wt){for(Je=Array(wt.size()),h=0;h<wt.size();h++)Je[h]=wt.get(h);wt.delete()}else Je=[];O[$t]=Je,ge.g=7;break}if(wt===void 0){ge.g=3;break}if(Jt.type==="float_list"){O[$t]=wt,ge.g=7;break}if(Jt.type==="proto"){O[$t]=wt,ge.g=7;break}if(Jt.type!=="texture")throw Error("Unknown output config type: '"+Jt.type+"'");return Ut=Et.s[$t],Ut||(Ut=new yn(Et.h,Et.D),Et.s[$t]=Ut),P(ge,Le(Ut,wt,Et.G),13);case 13:Dt=ge.h,O[$t]=Dt;case 7:Jt.transform&&O[$t]&&(O[$t]=Jt.transform(O[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Nt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function _n(p,W,V){return se(p,function k(){var O=this,ot;return ne(k,function(z){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?z.return(V):V instanceof O.h.Texture2dDataOut?(ot=O.s[W],ot||(ot=new yn(O.h,O.D),O.s[W]=ot),z.return(Le(ot,V,O.G))):z.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",k=[].concat(B(W.wants)),O=new p.h.StringList,ot=T(W.wants),z=ot.next();!z.done;z=ot.next())O.push_back(z.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[k[Rt]]=rt.get(Rt);var Et=p.listeners[V];Et&&(p.C=Yn(p,bt,W.outs).then(function(Nt){Nt=Et(Nt);for(var $t=0;$t<W.wants.length;++$t){var Jt=bt[k[$t]];typeof Jt=="object"&&Jt.hasOwnProperty&&Jt.hasOwnProperty("delete")&&Jt.delete()}Nt&&(p.C=Nt)}))}}),p.i.attachMultiListener(O,ot),O.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Tn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Hn(p){var W=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Tn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function k(){var O,ot,z=this,rt;return ne(k,function(bt){return bt.g==1?(O=Tn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+O,P(bt,dn(z.g,O),2)):(rt=bt.h,z.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Hn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(k){return P(k,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Hn),Re("VERSION","0.1.1632777926")}).call(di);const hi={};(function(){var i;function n(l){var Z=0;return function(){return Z<l.length?{done:!1,value:l[Z++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,Z,x){return l==Array.prototype||l==Object.prototype||(l[Z]=x.value),l};function m(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var Z=0;Z<l.length;++Z){var x=l[Z];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var X=m(this);function S(l,Z){if(Z)t:{var x=X;l=l.split(".");for(var w=0;w<l.length-1;w++){var J=l[w];if(!(J in x))break t;x=x[J]}l=l[l.length-1],w=x[l],Z=Z(w),Z!=w&&Z!=null&&r(x,l,{configurable:!0,writable:!0,value:Z})}}S("Symbol",function(l){function Z(o){if(this instanceof Z)throw new TypeError("Symbol is not a constructor");return new x(w+(o||"")+"_"+J++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return Z}),S("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var Z="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<Z.length;x++){var w=X[Z[x]];typeof w=="function"&&typeof w.prototype[l]!="function"&&r(w.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var Z=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return Z?Z.call(l):{next:n(l)}}function B(l){if(!(l instanceof Array)){l=T(l);for(var Z,x=[];!(Z=l.next()).done;)x.push(Z.value);l=x}return l}var nt=typeof Object.create=="function"?Object.create:function(l){function Z(){}return Z.prototype=l,new Z},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(l,Z){if(l.__proto__=Z,l.__proto__!==Z)throw new TypeError(l+" is not extensible");return l}:null}var at=ut;function mt(l,Z){if(l.prototype=nt(Z.prototype),l.prototype.constructor=l,at)at(l,Z);else for(var x in Z)if(x!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(Z,x);w&&Object.defineProperty(l,x,w)}else l[x]=Z[x];l.ra=Z.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,Z){l.j={fa:Z,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,Z,x){return l.g=x,{value:Z}}function $e(l){this.g=new Bt,this.h=l}function ze(l,Z){kt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(w){return{value:w,done:!0}},Z,l.g.return):(l.g.return(Z),jt(l))}function We(l,Z,x,w){try{var J=Z.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var o=J.value}catch(d){return l.g.i=null,ee(l.g,d),jt(l)}return l.g.i=null,w.call(l.g,o),jt(l)}function jt(l){for(;l.g.g;)try{var Z=l.h(l.g);if(Z)return l.g.l=!1,{value:Z.value,done:!1}}catch(x){l.g.h=void 0,ee(l.g,x)}if(l.g.l=!1,l.g.j){if(Z=l.g.j,l.g.j=null,Z.ga)throw Z.fa;return{value:Z.return,done:!0}}return{value:void 0,done:!0}}function Nn(l){this.next=function(Z){return kt(l.g),l.g.i?Z=We(l,l.g.i.next,Z,l.g.s):(l.g.s(Z),Z=jt(l)),Z},this.throw=function(Z){return kt(l.g),l.g.i?Z=We(l,l.g.i.throw,Z,l.g.s):(ee(l.g,Z),Z=jt(l)),Z},this.return=function(Z){return ze(l,Z)},this[Symbol.iterator]=function(){return this}}function ne(l){function Z(w){return l.next(w)}function x(w){return l.throw(w)}return new Promise(function(w,J){function o(d){d.done?w(d.value):Promise.resolve(d.value).then(Z,x).then(o,J)}o(l.next())})}function gt(l){return ne(new Nn(new $e(l)))}S("Promise",function(l){function Z(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function x(){this.g=null}function w(d){return d instanceof Z?d:new Z(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var J=X.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},Z.prototype.j=function(){function d(u){return function(f){e||(e=!0,u.call(g,f))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},Z.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof Z)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},Z.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},Z.prototype.l=function(d){this.u(2,d)},Z.prototype.o=function(d){this.u(1,d)},Z.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},Z.prototype.G=function(){var d=this;J(function(){if(d.C()){var g=X.console;typeof g<"u"&&g.error(d.i)}},1)},Z.prototype.C=function(){if(this.s)return!1;var d=X.CustomEvent,g=X.Event,e=X.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=X.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},Z.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new x;return Z.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},Z.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},Z.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(I){f(I)}}:a}var u,f,t=new Z(function(c,a){u=c,f=a});return this.M(e(d,u),e(g,f)),t},Z.prototype.catch=function(d){return this.then(void 0,d)},Z.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},Z.resolve=w,Z.reject=function(d){return new Z(function(g,e){e(d)})},Z.race=function(d){return new Z(function(g,e){for(var u=T(d),f=u.next();!f.done;f=u.next())w(f.value).M(g,e)})},Z.all=function(d){var g=T(d),e=g.next();return e.done?w([]):new Z(function(u,f){function t(b){return function(I){c[b]=I,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,w(e.value).M(t(c.length-1),f),e=g.next();while(!e.done)})},Z});function qe(l,Z){l instanceof String&&(l+="");var x=0,w=!1,J={next:function(){if(!w&&x<l.length){var o=x++;return{value:Z(o,l[o]),done:!1}}return w=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,Z){for(var x=1;x<arguments.length;x++){var w=arguments[x];if(w)for(var J in w)Object.prototype.hasOwnProperty.call(w,J)&&(l[J]=w[J])}return l};S("Object.assign",function(l){return l||jn}),S("Object.is",function(l){return l||function(Z,x){return Z===x?Z!==0||1/Z===1/x:Z!==Z&&x!==x}}),S("Array.prototype.includes",function(l){return l||function(Z,x){var w=this;w instanceof String&&(w=String(w));var J=w.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var o=w[x];if(o===Z||Object.is(o,Z))return!0}return!1}}),S("String.prototype.includes",function(l){return l||function(Z,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(Z instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(Z,x||0)!==-1}}),S("Array.prototype.keys",function(l){return l||function(){return qe(this,function(Z){return Z})}});var Re=this||self;function Ht(l,Z){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var w;l.length&&(w=l.shift());)l.length||Z===void 0?x[w]&&x[w]!==Object.prototype[w]?x=x[w]:x=x[w]={}:x[w]=Z}function we(){throw Error("Invalid UTF8")}function ln(l,Z){return Z=String.fromCharCode.apply(null,Z),l==null?Z:l+Z}var Xn,Ln=typeof TextDecoder<"u",xn,Jn=typeof TextEncoder<"u",hn={},bn=null;function Un(l){var Z;Z===void 0&&(Z=0),Ke(),Z=hn[Z];for(var x=Array(Math.floor(l.length/3)),w=Z[64]||"",J=0,o=0;J<l.length-2;J+=3){var d=l[J],g=l[J+1],e=l[J+2],u=Z[d>>2];d=Z[(d&3)<<4|g>>4],g=Z[(g&15)<<2|e>>6],e=Z[e&63],x[o++]=u+d+g+e}switch(u=0,e=w,l.length-J){case 2:u=l[J+1],e=Z[(u&15)<<2]||w;case 1:l=l[J],x[o]=Z[l>>2]+Z[(l&3)<<4|u>>4]+e+w}return x.join("")}function Cn(l){var Z=l.length,x=3*Z/4;x%3?x=Math.floor(x):"=.".indexOf(l[Z-1])!=-1&&(x="=.".indexOf(l[Z-2])!=-1?x-2:x-1);var w=new Uint8Array(x),J=0;return Oe(l,function(o){w[J++]=o}),J!==x?w.subarray(0,J):w}function Oe(l,Z){function x(e){for(;w<l.length;){var u=l.charAt(w++),f=bn[u];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ke();for(var w=0;;){var J=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&J===-1)break;Z(J<<2|o>>4),d!=64&&(Z(o<<4&240|d>>2),g!=64&&Z(d<<6&192|g))}}function Ke(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),Z=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var w=l.concat(Z[x].split(""));hn[x]=w;for(var J=0;J<w.length;J++){var o=w[J];bn[o]===void 0&&(bn[o]=J)}}}}var In=typeof Uint8Array=="function";function Wn(l){return In&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(l,Z){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Cn(l);if(l.constructor===Se)return!Z&&(Z=l.L)&&Z.constructor===Uint8Array?Z:(Z=l.L,Z=Z==null||Wn(Z)?Z:typeof Z=="string"?Cn(Z):null,(l=l.L=Z)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,Z){return Error("Invalid wire type: "+l+" (at position "+Z+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,Z){Z=Z===void 0?{}:Z,Z=Z.v===void 0?!1:Z.v,this.h=null,this.g=this.i=this.j=0,this.v=Z,l&&Ce(this,l)}function Ce(l,Z){l.h=cn(Z,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function At(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var Z=l.h,x=Z[l.g],w=x&127;if(128>x)return l.g+=1,At(l),w;if(x=Z[l.g+1],w|=(x&127)<<7,128>x)return l.g+=2,At(l),w;if(x=Z[l.g+2],w|=(x&127)<<14,128>x)return l.g+=3,At(l),w;if(x=Z[l.g+3],w|=(x&127)<<21,128>x)return l.g+=4,At(l),w;if(x=Z[l.g+4],l.g+=5,w|=(x&15)<<28,128>x)return At(l),w;if(128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++]&&128<=Z[l.g++])throw Qt();return At(l),w}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Ye(l,Z){for(;127<Z;)l.g.push(Z&127|128),Z>>>=7;l.g.push(Z)}function tn(l){var Z={},x=Z.W===void 0?!1:Z.W;this.l={v:Z.v===void 0?!1:Z.v},this.W=x,Z=this.l,zt.length?(x=zt.pop(),Z&&(x.v=Z.v),l&&Ce(x,l),l=x):l=new Ze(l,Z),this.g=l,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var Z=l.g;if(Z.g==Z.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(Z=x>>>3,x&=7,!(0<=x&&5>=x))throw Be(x,l.j);if(1>Z)throw Error("Invalid field number: "+Z+" (at position "+l.j+")");return l.i=Z,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var Z=l.g,x=Z+10;Z<x;)if((l.h[Z++]&128)===0){l.g=Z,At(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,At(l);break;case 2:l.h!=2?Ot(l):(Z=xe(l.g)>>>0,l=l.g,l.g+=Z,At(l));break;case 5:l=l.g,l.g+=4,At(l);break;case 3:Z=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=Z)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Be(l.h,l.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Ie(l,Z){Z.length!==0&&(l.i.push(Z),l.h+=Z.length)}function Vn(l,Z){if(Z=Z.ca){Ie(l,l.g.end());for(var x=0;x<Z.length;x++)Ie(l,Z[x])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,Z){Object.isFrozen(l)||(un?l[un]|=Z:l.N!==void 0?l.N|=Z:Object.defineProperties(l,{N:{value:Z,configurable:!0,writable:!0,enumerable:!1}}))}function an(l){var Z;return un?Z=l[un]:Z=l.N,Z==null?0:Z}function ve(l){return Qe(l,1),l}function Te(l){return Array.isArray(l)?!!(an(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function qt(l){if(Te(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,Z,x){return Z===-1?null:Z>=l.i?l.g?l.g[Z]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[Z],x!=null)?x:l.m[Z+l.h]}function Ct(l,Z,x,w){w=w===void 0?!1:w,qt(l),Z<l.i&&!w?l.m[Z+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[Z]=x}function Vt(l,Z,x,w){x=x===void 0?!0:x,w=w===void 0?!1:w;var J=fe(l,Z,w);return J==null&&(J=De),Te(l.m)?x&&(Ge(J),Object.freeze(J)):(J===De||Te(J))&&(J=ve(J.slice()),Ct(l,Z,J,w)),J}function oe(l,Z,x){return l=fe(l,Z),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Fe(l,Z,x,w){l.j||(l.j={});var J=Te(l.m),o=l.j[x];if(!o){w=Vt(l,x,!0,w===void 0?!1:w),o=[],J=J||Te(w);for(var d=0;d<w.length;d++)o[d]=new Z(w[d]),J&&Ge(o[d].m);J&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function te(l,Z,x,w,J){var o=o===void 0?!1:o;return qt(l),o=Fe(l,x,Z,o),x=w||new x,l=Vt(l,Z),J!=null?(o.splice(J,0,x),l.splice(J,0,x.m)):(o.push(x),l.push(x.m)),x}function se(l,Z){return l=fe(l,Z),l==null?0:l}function tt(l,Z){return l=fe(l,Z),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Wn(l))return Un(l);if(l instanceof Se){var Z=l.L;return Z=Z==null||typeof Z=="string"?Z:In&&Z instanceof Uint8Array?Un(Z):null,(l.L=Z)||""}}}return l}function ct(l){var Z=ue;return Z=Z===void 0?St:Z,de(l,Z)}function _t(l,Z){if(l!=null){if(Array.isArray(l))l=de(l,Z);else if(ie(l)){var x={},w;for(w in l)x[w]=_t(l[w],Z);l=x}else l=Z(l);return l}}function de(l,Z){for(var x=l.slice(),w=0;w<x.length;w++)x[w]=_t(x[w],Z);return Array.isArray(l)&&an(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ct(l):l)}function St(l){return Wn(l)?new Uint8Array(l):l}function me(l,Z,x){l||(l=He),He=null;var w=this.constructor.h;l||(l=w?[w]:[]),this.h=(w?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(w=this.m.length,l=w-1,w&&(w=this.m[l],ie(w))){this.i=l-this.h,this.g=w;break t}Z!==void 0&&-1<Z?(this.i=Math.max(Z,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(Z=0;Z<x.length;Z++)if(l=x[Z],l<this.i)l+=this.h,(w=this.m[l])?Array.isArray(w)&&ve(w):this.m[l]=De;else{w=this.g||(this.g=this.m[this.i+this.h]={});var J=w[l];J?Array.isArray(J)&&ve(J):w[l]=De}}me.prototype.toJSON=function(){return ct(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function en(){me.apply(this,arguments)}if(mt(en,me),Pt){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(l,Z,x){if(x){var w={},J;for(J in x){var o=x[J],d=o.ja;d||(w.F=o.pa||o.ha.P,o.ba?(w.U=Sn(o.ba),d=function(g){return function(e,u,f){return g.F(e,u,f,g.U)}}(w)):o.da?(w.T=Me(o.X.g,o.da),d=function(g){return function(e,u,f){return g.F(e,u,f,g.T)}}(w)):d=w.F,o.ja=d),d(Z,l,o.X),w={F:w.F,U:w.U,T:w.T}}}Vn(Z,l)}var yn=Symbol();function Le(l,Z,x){return l[yn]||(l[yn]=function(w,J){return Z(w,J,x)})}function rn(l){var Z=l[yn];if(!Z){var x=p(l);Z=function(w,J){return W(w,J,x)},l[yn]=Z}return Z}function zn(l){var Z=l.ba;if(Z)return rn(Z);if(Z=l.oa)return Le(l.X.g,Z,l.da)}function on(l){var Z=zn(l),x=l.X,w=l.ha.O;return Z?function(J,o){return w(J,o,x,Z)}:function(J,o){return w(J,o,x)}}function Ne(l,Z,x,w,J,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(Z,l[0]),d++);d<l.length;){x=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:w(Z,x,e);break;case 1:w(Z,x,e,l[d++]);break;case 2:J(Z,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],f=l[d++];Array.isArray(f)?J(Z,x,e,g,u,f):o(Z,x,e,g,u,f);break;case 4:o(Z,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return Z}var Zn=Symbol();function Sn(l){var Z=l[Zn];if(!Z){var x=dn(l);Z=function(w,J){return k(w,J,x)},l[Zn]=Z}return Z}function Me(l,Z){var x=l[Zn];return x||(x=function(w,J){return mn(w,J,Z)},l[Zn]=x),x}var En=Symbol();function sn(l,Z){l.push(Z)}function vn(l,Z,x){l.push(Z,x.P)}function wn(l,Z,x,w,J){var o=Sn(J),d=x.P;l.push(Z,function(g,e,u){return d(g,e,u,w,o)})}function An(l,Z,x,w,J,o){var d=Me(w,o),g=x.P;l.push(Z,function(e,u,f){return g(e,u,f,w,d)})}function dn(l){var Z=l[En];return Z||Ne(l,l[En]=[],sn,vn,wn,An)}var Yn=Symbol();function _n(l,Z){l[0]=Z}function Qn(l,Z,x,w){var J=x.O;l[Z]=w?function(o,d,g){return J(o,d,g,w)}:J}function Tn(l,Z,x,w,J,o){var d=x.O,g=rn(J);l[Z]=function(e,u,f){return d(e,u,f,w,g,o)}}function Hn(l,Z,x,w,J,o,d){var g=x.O,e=Le(w,J,o);l[Z]=function(u,f,t){return g(u,f,t,w,e,d)}}function p(l){var Z=l[Yn];return Z||Ne(l,l[Yn]={},_n,Qn,Tn,Hn)}function W(l,Z,x){for(;Xe(Z)&&Z.h!=4;){var w=Z.i,J=x[w];if(!J){var o=x[0];o&&(o=o[w])&&(J=x[w]=on(o))}if((!J||!J(Z,l,w))&&(J=Z,w=l,o=J.j,Ot(J),!J.W)){var d=J.g.h;J=J.g.g,J=o===J?he||(he=new Uint8Array(0)):Pe?d.slice(o,J):new Uint8Array(d.subarray(o,J)),(o=w.ca)?o.push(J):w.ca=[J]}}return l}function V(l,Z,x){if(je.length){var w=je.pop();l&&(Ce(w.g,l),w.i=-1,w.h=-1),l=w}else l=new tn(l);try{return W(new Z,l,p(x))}finally{Z=l.g,Z.h=null,Z.j=0,Z.i=0,Z.g=0,Z.v=!1,l.i=-1,l.h=-1,100>je.length&&je.push(l)}}function k(l,Z,x){for(var w=x.length,J=w%2==1,o=J?1:0;o<w;o+=2)(0,x[o+1])(Z,l,x[o]);mn(l,Z,J?x[0]:void 0)}function O(l,Z){var x=new _e;k(l,x,dn(Z)),Ie(x,x.g.end()),l=new Uint8Array(x.h),Z=x.i;for(var w=Z.length,J=0,o=0;o<w;o++){var d=Z[o];l.set(d,J),J+=d.length}return x.i=[l],l}function ot(l,Z){return{O:l,P:Z}}var z=ot(function(l,Z,x){if(l.h!==5)return!1;l=l.g;var w=l.h[l.g],J=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,At(l),J=(w<<0|J<<8|o<<16|d<<24)>>>0,l=2*(J>>31)+1,w=J>>>23&255,J&=8388607,Ct(Z,x,w==255?J?NaN:1/0*l:w==0?l*Math.pow(2,-149)*J:l*Math.pow(2,w-150)*(J+Math.pow(2,23))),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){Ye(l.g,8*x+5),l=l.g;var w=Z;w=(x=0>w?1:0)?-w:w,w===0?0<1/w?re=Ve=0:(Ve=0,re=2147483648):isNaN(w)?(Ve=0,re=2147483647):34028234663852886e22<w?(Ve=0,re=(x<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ve=0,re=(x<<31|w)>>>0):(Z=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-Z),w=Math.round(8388608*w),16777216<=w&&++Z,Ve=0,re=(x<<31|Z+127<<23|w&8388607)>>>0),x=re,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,Z,x){if(l.h!==0)return!1;for(var w=l.g,J=128,o=0,d=l=0;4>d&&128<=J;d++)J=w.h[w.g++],At(w),o|=(J&127)<<7*d;if(128<=J&&(J=w.h[w.g++],At(w),o|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=w.h[w.g++],At(w),l|=(J&127)<<7*d+3;if(128>J)w=o>>>0,J=l>>>0,(l=J&2147483648)&&(w=~w+1>>>0,J=~J>>>0,w==0&&(J=J+1>>>0)),w=4294967296*J+(w>>>0);else throw Qt();return Ct(Z,x,l?-w:w),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null){Ye(l.g,8*x),l=l.g;var w=Z;for(x=0>w,w=Math.abs(w),Z=w>>>0,w=Math.floor((w-Z)/4294967296),w>>>=0,x&&(w=~w>>>0,Z=(~Z>>>0)+1,4294967295<Z&&(Z=0,w++,4294967295<w&&(w=0))),re=Z,Ve=w,x=re,Z=Ve;0<Z||127<x;)l.g.push(x&127|128),x=(x>>>7|Z<<25)>>>0,Z>>>=7;l.g.push(x)}}),bt=ot(function(l,Z,x){return l.h!==0?!1:(Ct(Z,x,xe(l.g)),!0)},function(l,Z,x){if(Z=fe(Z,x),Z!=null&&Z!=null)if(Ye(l.g,8*x),l=l.g,x=Z,0<=x)Ye(l,x);else{for(Z=0;9>Z;Z++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,Z,x){if(l.h!==2)return!1;var w=xe(l.g)>>>0;l=l.g;var J=l.g;l.g+=w,At(l),l=l.h;var o;if(Ln)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(J,J+w));else{w=J+w;for(var d=[],g=null,e,u,f;J<w;)e=l[J++],128>e?d.push(e):224>e?J>=w?we():(u=l[J++],194>e||(u&192)!==128?(J--,we()):d.push((e&31)<<6|u&63)):240>e?J>=w-1?we():(u=l[J++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[J++])&192)!==128?(J--,we()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?J>=w-2?we():(u=l[J++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,we()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):we(),8192<=d.length&&(g=ln(g,d),d.length=0);o=ln(g,d)}return Ct(Z,x,o),!0},function(l,Z,x){if(Z=fe(Z,x),Z!=null){var w=!1;if(w=w===void 0?!1:w,Jn){if(w&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(Z))throw Error("Found an unpaired surrogate");Z=(xn||(xn=new TextEncoder)).encode(Z)}else{for(var J=0,o=new Uint8Array(3*Z.length),d=0;d<Z.length;d++){var g=Z.charCodeAt(d);if(128>g)o[J++]=g;else{if(2048>g)o[J++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<Z.length){var e=Z.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[J++]=g>>18|240,o[J++]=g>>12&63|128,o[J++]=g>>6&63|128,o[J++]=g&63|128;continue}else d--}if(w)throw Error("Found an unpaired surrogate");g=65533}o[J++]=g>>12|224,o[J++]=g>>6&63|128}o[J++]=g&63|128}}Z=o.subarray(0,J)}Ye(l.g,8*x+2),Ye(l.g,Z.length),Ie(l,l.g.end()),Ie(l,Z)}}),Et=ot(function(l,Z,x,w,J){if(l.h!==2)return!1;Z=te(Z,x,w),x=l.g.i,w=xe(l.g)>>>0;var o=l.g.g+w,d=o-x;if(0>=d&&(l.g.i=o,J(Z,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(w+" bytes, instead read "+(w-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,Z,x,w,J){if(Z=Fe(Z,w,x),Z!=null)for(w=0;w<Z.length;w++){var o=l;Ye(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,J(Z[w],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Nt(){en.apply(this,arguments)}if(mt(Nt,en),Pt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function Jt(l){Nt.call(this,l)}mt(Jt,Nt);function wt(){return[1,bt,2,z,3,Rt,4,Rt]}function Ut(l){Nt.call(this,l,-1,ae)}mt(Ut,Nt),Ut.prototype.addClassification=function(l,Z){return te(this,1,Jt,l,Z),this};function Dt(){return[1,Et,Jt,wt]}var ae=[1];function pe(l){Nt.call(this,l)}mt(pe,Nt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function Je(l){Nt.call(this,l,-1,y)}mt(Je,Nt);function h(){return[1,Et,pe,ge]}var y=[1];function v(l){Nt.call(this,l)}mt(v,Nt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,rt]}function M(l,Z,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,Z),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
20
20
 
21
- `+l.getShaderInfoLog(x));return x}function _(l){return Ye(l,Et,1).map(function(Z){return{index:oe(Z,1),score:ie(Z,2),label:fe(Z,3)!=null?tt(Z,3):void 0,displayName:fe(Z,4)!=null?tt(Z,4):void 0}})}function M(l){return{x:ie(l,1),y:ie(l,2),z:ie(l,3),visibility:fe(l,4)!=null?ie(l,4):void 0}}function q(l){return l.map(function(Z){return Ye(V(Z,Je,h),pe,1).map(M)})}function lt(l,Z){this.h=l,this.g=Z,this.l=0}function s(l,Z,x){return X(l,Z),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(T){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),T(l.i)}))}function X(l,Z){var x=l.g;if(l.o===void 0){var T=A(x,`
21
+ `+l.getShaderInfoLog(x));return x}function _(l){return Fe(l,Jt,1).map(function(Z){return{index:se(Z,1),score:oe(Z,2),label:fe(Z,3)!=null?tt(Z,3):void 0,displayName:fe(Z,4)!=null?tt(Z,4):void 0}})}function A(l){return{x:oe(l,1),y:oe(l,2),z:oe(l,3),visibility:fe(l,4)!=null?oe(l,4):void 0}}function q(l){return l.map(function(Z){return Fe(V(Z,Je,h),pe,1).map(A)})}function lt(l,Z){this.h=l,this.g=Z,this.l=0}function s(l,Z,x){return G(l,Z),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(w){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),w(l.i)}))}function G(l,Z){var x=l.g;if(l.o===void 0){var w=M(x,`
22
22
  attribute vec2 aVertex;
23
23
  attribute vec2 aTex;
24
24
  varying vec2 vTex;
25
25
  void main(void) {
26
26
  gl_Position = vec4(aVertex, 0.0, 1.0);
27
27
  vTex = aTex;
28
- }`,0),J=A(x,`
28
+ }`,0),J=M(x,`
29
29
  precision mediump float;
30
30
  varying vec2 vTex;
31
31
  uniform sampler2D sampler0;
32
32
  void main(){
33
33
  gl_FragColor = texture2D(sampler0, vTex);
34
- }`,1),o=x.createProgram();if(x.attachShader(o,T),x.attachShader(o,J),x.linkProgram(o),!x.getProgramParameter(o,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
34
+ }`,1),o=x.createProgram();if(x.attachShader(o,w),x.attachShader(o,J),x.linkProgram(o),!x.getProgramParameter(o,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
35
35
 
36
- `+x.getProgramInfoLog(o));T=l.o=o,x.useProgram(T),J=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}T=l.j,x.useProgram(l.o),x.canvas.width=Z.width,x.canvas.height=Z.height,x.viewport(0,0,Z.width,Z.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(Z.glName),x.enableVertexAttribArray(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var F=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,Z){return Z+l}function K(l,Z){window[l]=Z}function B(l){var Z=document.createElement("script");return Z.setAttribute("src",l),Z.setAttribute("crossorigin","anonymous"),new Promise(function(x){Z.addEventListener("load",function(){x()},!1),Z.addEventListener("error",function(){x()},!1),document.body.appendChild(Z)})}function nt(){return gt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(F),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var Z=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")Z=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=Z,l.options){Z=w(Object.keys(l.options));for(var x=Z.next();!x.done;x=Z.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var Z,x,T,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return l.$?(Z=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,nt(),2)):c.return();case 2:if(x=c.h,typeof window=="object")return K("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),K("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=Z.filter(function(a){return a.data!==void 0}),g=Z.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var I=a.path;b=b.then(function(Y){return l.overrideFile(I,Y),Promise.resolve(Y)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,I;return gt(function(Y){if(Y.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,I=l,P(Y,a(b),2);I.h=Y.h,Y.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=Z.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,E(T)),J=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:J.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Gt(l){var Z,x,T,J,o,d,g,e;return gt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,xt(l,l.g.graph.url),3)}for(u.g!=2&&(Z=u.h,l.i.loadGraph(Z)),x=w(Object.keys(l.C)),T=x.next();!T.done;T=x.next())J=T.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(o=w(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return gt(function(Z){l.i&&(l.i.reset(),l.o={},l.u={}),Z.g=0})},i.setOptions=function(l,Z){var x=this;if(Z=Z||this.g.options){for(var T=[],J=[],o={},d=w(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=Z[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],T.push(function(u){return function(){var f;return gt(function(t){if(t.g==1)return P(t,u.R(u.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),J.push(g))))}(T.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Bt(l){var Z,x,T,J,o,d,g;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}Z=w(l.A),x=Z.next();case 3:if(x.done){e.g=5;break}return T=x.value,P(e,T(),4);case 4:x=Z.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,o=w(l.B),d=o.next();!d.done;d=o.next())g=d.value,J.push_back(g);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(Z){return Z.g==1?P(Z,yt(l),2):Z.g!=3?P(Z,Gt(l),3):P(Z,Bt(l),0)})};function xt(l,Z){var x,T;return gt(function(J){return Z in l.H?J.return(l.H[Z]):(x=l.locateFile(Z,""),T=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[Z]=T,J.return(T))})}i.overrideFile=function(l,Z){this.i?this.i.overrideFile(l,Z):this.C[l]=Z},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,Z){var x=this,T,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return x.g.inputs?(T=1e3*(Z==null?performance.now():Z),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,o=w(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new lt(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var I=a.videoWidth,Y=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(I=a.naturalWidth,Y=a.naturalHeight):(I=a.width,Y=a.height);Y={glName:b.l,width:I,height:Y},I=b.g,I.canvas.width=Y.width,I.canvas.height=Y.height,I.activeTexture(I.TEXTURE0),b.h.bindTexture2d(b.l),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,I.RGBA,I.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=Y;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),Y=0;Y<a.length;++Y){I=a[Y];var L=b.data,U=L.setBoundingBox,j=Y,Q=I.ea,D=new v;if(Ct(D,1,Q.ka),Ct(D,2,Q.la),Ct(D,3,Q.height),Ct(D,4,Q.width),Ct(D,5,Q.rotation),Ct(D,6,Q.ia),Q=z(D,C),U.call(L,j,Q),I.Y)for(L=0;L<I.Y.length;++L){D=I.Y[L];var st=!!D.visibility;U=b.data,j=U.addNormalizedLandmark,Q=Y,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ct(st,1,D.x),Ct(st,2,D.y),Ct(st,3,D.z),D.visibility&&Ct(st,4,D.visibility),D=z(st,ge),j.call(U,Q,D)}if(I.V)for(L=0;L<I.V.length;++L)U=b.data,j=U.addClassification,Q=Y,D=I.V[L],st=new Et,Ct(st,2,D.score),D.index&&Ct(st,1,D.index),D.label&&Ct(st,3,D.label),D.displayName&&Ct(st,4,D.displayName),D=z(st,Tt),j.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},u),{stream:f,timestamp:T}));break;case"detections":t=u,t.stream=f,t.timestamp=T,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),P(c,x.D,4);case 4:J.delete(),c.g=0}})};function ht(l,Z,x){var T,J,o,d,g,e,u,f,t,c,a,b,I,Y;return gt(function(L){switch(L.g){case 1:if(!x)return L.return(Z);for(T={},J=0,o=w(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&Z[e.stream]!==void 0&&++J;1<J&&(l.I=!1),u=w(Object.keys(x)),d=u.next();case 2:if(d.done){L.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return I=T,Y=f,P(L,Xt(l,f,Z[t]),14);if(c=Z[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),j=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),v,C);ft={ea:{ka:ie(ft,1),la:ie(ft,2),height:ie(ft,3),width:ie(ft,4),rotation:ie(ft,5,0),ia:oe(ft,6)},Y:Ye(V(j.get(st),Je,h),pe,1).map(M),V:_(V(Q.get(st),kt,Qt))},D.push(ft)}U=D}else U=[];T[f]=U,L.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),j=0;j<c.size();j++)U[j]=c.get(j);c.delete()}else U=[];T[f]=U,L.g=7;break}if(c===void 0){L.g=3;break}if(t.type==="float_list"){T[f]=c,L.g=7;break}if(t.type==="proto"){T[f]=c,L.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new lt(l.h,l.G),l.u[f]=a),P(L,s(a,c,l.I),13);case 13:b=L.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),L.g=3;break;case 14:I[Y]=L.h;case 3:d=u.next(),L.g=2;break;case 4:return L.return(T)}})}function Xt(l,Z,x){var T;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[Z],T||(T=new lt(l.h,l.G),l.u[Z]=T),J.return(s(T,x,l.I))):J.return(void 0)})}function It(l,Z){for(var x=Z.name||"$",T=[].concat(E(Z.wants)),J=new l.h.StringList,o=w(Z.wants),d=o.next();!d.done;d=o.next())J.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<Z.wants.length;++u)e[T[u]]=g.get(u);var f=l.listeners[x];f&&(l.D=ht(l,e,Z.outs).then(function(t){t=f(t);for(var c=0;c<Z.wants.length;++c){var a=e[T[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,o),J.delete()}i.onResults=function(l,Z){this.listeners[Z||"$"]=l},Ht("Solution",$),Ht("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Yt(l){var Z=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:wt(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(T){return _(V(T,kt,Qt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var T,J,o;return gt(function(d){return d.g==1?(T=wt(x),J="third_party/mediapipe/modules/hand_landmark/"+T,P(d,xt(Z.g,T),2)):(o=d.h,Z.g.overrideFile(J,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Yt.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return gt(function(Z){return P(Z,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var Z=this;return gt(function(x){return P(x,Z.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Yt),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("VERSION","0.4.1646424915")}).call(di);var hi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,f){return e==Array.prototype||e==Object.prototype||(e[u]=f.value),e};function p(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var f=e[u];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var G=p(this);function S(e,u){if(u)t:{var f=G;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in f))break t;f=f[c]}e=e[e.length-1],t=f[e],u=u(t),u!=t&&u!=null&&r(f,e,{configurable:!0,writable:!0,value:u})}}S("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+c++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),S("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<u.length;f++){var t=G[u[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function w(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function E(e){if(!(e instanceof Array)){e=w(e);for(var u,f=[];!(u=e.next()).done;)f.push(u.value);e=f}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=ct;function pt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var f in u)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,f);t&&Object.defineProperty(e,f,t)}else e[f]=u[f];e.da=u.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Mt.prototype.o=function(e){this.h=e};function qt(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Mt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,f){return e.g=f,{value:u}}function De(e){this.g=new Mt,this.h=e}function an(e,u){Jt(e.g);var f=e.g.i;return f?Ve(e,"return"in f?f.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),Dt(e))}function Ve(e,u,f,t){try{var c=u.call(e.g.i,f);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,qt(e.g,b),Dt(e)}return e.g.i=null,t.call(e.g,a),Dt(e)}function Dt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(f){e.g.h=void 0,qt(e.g,f)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Kn(e){this.next=function(u){return Jt(e.g),e.g.i?u=Ve(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=Dt(e)),u},this.throw=function(u){return Jt(e.g),e.g.i?u=Ve(e,e.g.i.throw,u,e.g.o):(qt(e.g,u),u=Dt(e)),u},this.return=function(u){return an(e,u)},this[Symbol.iterator]=function(){return this}}function de(e){function u(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,f).then(a,c)}a(e.next())})}function gt(e){return de(new Kn(new De(e)))}S("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var I=this.j();try{b(I.resolve,I.reject)}catch(Y){I.reject(Y)}}function f(){this.g=null}function t(b){return b instanceof u?b:new u(function(I){I(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var I=this;this.i(function(){I.l()})}this.g.push(b)};var c=G.setTimeout;f.prototype.i=function(b){c(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var I=0;I<b.length;++I){var Y=b[I];b[I]=null;try{Y()}catch(L){this.j(L)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(L){return function(U){Y||(Y=!0,L.call(I,U))}}var I=this,Y=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var I=b!=null;break t;case"function":I=!0;break t;default:I=!1}I?this.v(b):this.m(b)}},u.prototype.v=function(b){var I=void 0;try{I=b.then}catch(Y){this.l(Y);return}typeof I=="function"?this.G(I,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,I){if(this.h!=0)throw Error("Cannot settle("+b+", "+I+"): Promise already settled in state"+this.h);this.h=b,this.i=I,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var I=G.console;typeof I<"u"&&I.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=G.CustomEvent,I=G.Event,Y=G.dispatchEvent;return typeof Y>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof I=="function"?b=new I("unhandledrejection",{cancelable:!0}):(b=G.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,Y(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new f;return u.prototype.F=function(b){var I=this.j();b.J(I.resolve,I.reject)},u.prototype.G=function(b,I){var Y=this.j();try{b.call(I,Y.resolve,Y.reject)}catch(L){Y.reject(L)}},u.prototype.then=function(b,I){function Y(Q,D){return typeof Q=="function"?function(st){try{L(Q(st))}catch(ft){U(ft)}}:D}var L,U,j=new u(function(Q,D){L=Q,U=D});return this.J(Y(b,L),Y(I,U)),j},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,I){function Y(){switch(L.h){case 1:b(L.i);break;case 2:I(L.i);break;default:throw Error("Unexpected state: "+L.h)}}var L=this;this.g==null?a.h(Y):this.g.push(Y),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(I,Y){Y(b)})},u.race=function(b){return new u(function(I,Y){for(var L=w(b),U=L.next();!U.done;U=L.next())t(U.value).J(I,Y)})},u.all=function(b){var I=w(b),Y=I.next();return Y.done?t([]):new u(function(L,U){function j(st){return function(ft){Q[st]=ft,D--,D==0&&L(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(Y.value).J(j(Q.length-1),U),Y=I.next();while(!Y.done)})},u});function pn(e,u){e instanceof String&&(e+="");var f=0,t=!1,c={next:function(){if(!t&&f<e.length){var a=f++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var jn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};S("Object.assign",function(e){return e||jn}),S("Object.is",function(e){return e||function(u,f){return u===f?u!==0||1/u===1/f:u!==u&&f!==f}}),S("Array.prototype.includes",function(e){return e||function(u,f){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(f=f||0,0>f&&(f=Math.max(f+c,0));f<c;f++){var a=t[f];if(a===u||Object.is(a,u))return!0}return!1}}),S("String.prototype.includes",function(e){return e||function(u,f){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,f||0)!==-1}}),S("Array.prototype.keys",function(e){return e||function(){return pn(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function on(e){Te(e)}function Xn(e,u){on(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Ln(){on(Error("Failed to read varint, encoding is invalid."))}function xn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Nn,dn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Cn(e){if(En)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var f=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Oe={},Ke=null;function In(e){var u;u===void 0&&(u=0),Se(),u=Oe[u];for(var f=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],I=e[c+1],Y=e[c+2],L=u[b>>2];b=u[(b&3)<<4|I>>4],I=u[(I&15)<<2|Y>>6],Y=u[Y&63],f[a++]=L+b+I+Y}switch(L=0,Y=t,e.length-c){case 2:L=e[c+1],Y=u[(L&15)<<2]||t;case 1:e=e[c],f[a]=u[e>>2]+u[(e&3)<<4|L>>4]+Y+t}return f.join("")}function Wn(e){var u=e.length,f=3*u/4;f%3?f=Math.floor(f):"=.".indexOf(e[u-1])!=-1&&(f="=.".indexOf(e[u-2])!=-1?f-2:f-1);var t=new Uint8Array(f),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function f(Y){for(;t<e.length;){var L=e.charAt(t++),U=Ke[L];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(L))throw Error("Unknown base64 encoding at char: "+L)}return Y}Se();for(var t=0;;){var c=f(-1),a=f(0),b=f(64),I=f(64);if(I===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),I!=64&&u(b<<6&192|I))}}function Se(){if(!Ke){Ke={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(u[f].split(""));Oe[f]=t;for(var c=0;c<t.length;c++){var a=t[c];Ke[a]===void 0&&(Ke[a]=c)}}}}var ze=typeof Uint8Array=="function",ne;function We(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}We.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:ze&&e instanceof Uint8Array?In(e):null;return e};var sn=typeof Uint8Array.prototype.slice=="function";function Ue(e,u,f){return u===f?ne||(ne=new Uint8Array(0)):sn?e.slice(u,f):new Uint8Array(e.subarray(u,f))}var _t=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Wn(e);if(e.constructor===We){if(e.g==null)var u=ne||(ne=new Uint8Array(0));else{u=Uint8Array;var f=e.g;f=f==null||ze&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Wn(f):null,e=e.g=f,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function At(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&xe(this,e)}function xe(e,u){e.h=Ce(u),e.m=0,e.i=e.h.length,e.g=e.m}At.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,f=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],f|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],f|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=f>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Ln()}function ye(e){e.g>e.i&&(e.l=!0,on(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}At.prototype.j=function(){var e=this.h,u=e[this.g],f=u&127;return 128>u?(this.g+=1,ye(this),f):(u=e[this.g+1],f|=(u&127)<<7,128>u?(this.g+=2,ye(this),f):(u=e[this.g+2],f|=(u&127)<<14,128>u?(this.g+=3,ye(this),f):(u=e[this.g+3],f|=(u&127)<<21,128>u?(this.g+=4,ye(this),f):(u=e[this.g+4],f|=(u&15)<<28,128>u?(this.g+=5,ye(this),f>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Ln(),f):(ye(this),f))))))},At.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|u<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,u=f>>>23&255,f&=8388607,u==255?f?NaN:1/0*e:u==0?e*Math.pow(2,-149)*f:e*Math.pow(2,u-150)*(f+Math.pow(2,23))};var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=u}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Ue(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function je(e){var u={},f=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=f,u=this.m,we.length?(f=we.pop(),u&&(f.u=u.u),e&&xe(f,e),e=f):e=new At(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var f=e.g.j();return u=f>>>3,f&=7,0<=f&&5>=f?(e.i=u,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,f=0;10>f;f++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Ln()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!Pe(e)){e.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,on(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Vn(e,u,f){e.N||(e=Ue(e.g.h,f,e.g.g),(f=u.o)?f.push(e):u.o=[e])}function ln(e,u,f){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,f(u,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function _e(e,u,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(u.call(e.g))}var cn=[];function ve(){this.h=[],this.i=0,this.g=new $e}function Fe(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,f){Ot(e.g,8*u+2),Ot(e.g,f.length),Fe(e,e.g.end()),Fe(e,f)}var re=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(e,u){Object.isFrozen(e)||(re?e[re]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function te(e){if(!e)return 0;var u;return re?u=e[re]:u=e.g,u==null?0:u}function zt(e){return Array.isArray(e)&&Qe(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");Qe(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ct(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return ze&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?ie(e,u):u(e)}function ie(e,u){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Vt(e[t],u);return te(e)&1&&zt(f),f}f={};for(t in e)f[t]=Vt(e[t],u);return f}var Ye;function ee(e,u,f){var t=Ye;Ye=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(u=0;u<f.length;u++)e=f[u],e<this.l?(e+=this.j,(t=this.h[e])?zt(t):this.h[e]=oe):(tt(this),(t=this.i[e])?zt(t):this.i[e]=oe)}var oe=Object.freeze(zt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,f){return u===-1?null:(f===void 0?0:f)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=oe),c===oe?(c=zt([]),St(e,u,c,t)):f&&Array.isArray(c)&&te(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function Pt(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<u.length;f++)u[f]=+u[f];e.m[3]=!0}return u}function ae(e,u,f){return e=it(e,u),e==null?f:e}function ce(e,u,f){return e=it(e,u),e=e==null?e:+e,e==null?f===void 0?0:f:e}function St(e,u,f,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=f):e.h[u+e.j]=f}function me(e,u,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var c=it(e,f,!1);return c==null?t:(u=new u(c),e.g[f]=u)}function He(e,u,f){e.g||(e.g={});var t=e.g[f];if(!t){var c=ut(e,f,!1);t=[];for(var a=Array.isArray(c)?!!(te(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[f]=t}return t}function qe(e,u,f,t,c){var a=He(e,t,u);f=f||new t,e=ut(e,u),c!=null?(a.splice(c,0,f),e.splice(c,0,tn(f))):(a.push(f),e.push(tn(f)))}ee.prototype.toJSON=function(){var e=tn(this);return ie(e,Ct)};function tn(e){if(e.g)for(var u in e.g){var f=e.g[u];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&tn(f[t]);else f&&tn(f)}return e.h}ee.prototype.toString=function(){return tn(this).toString()};function fn(e,u){if(e=e.o){Fe(u,u.g.end());for(var f=0;f<e.length;f++)Fe(u,e[f])}}function yn(e){var u=e[0];switch(e.length){case 2:var f=e[1];return function(Y,L,U){return u(Y,L,U,f)};case 3:var t=e[1],c=e[2];return function(Y,L,U){return u(Y,L,U,t,c)};case 4:var a=e[1],b=e[2],I=e[3];return function(Y,L,U){return u(Y,L,U,a,b,I)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Le(e,u,f){for(;Pe(u)&&u.h!=4;){var t=u.i,c=f[t];if(c){if(Array.isArray(c)&&(c=f[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Vn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Vn(t,c,a)}return e}function en(e,u){var f=new ve;if(u(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=f.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),f.h=[e],f=e}return f}function On(e,u,f){if(cn.length){var t=cn.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new je(e);try{return f(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>cn.length&&cn.push(e)}}function nn(e,u,f){if(u=it(u,f),u!=null){Ot(e.g,8*f+5),e=e.g;var t=u;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?_t=Ze=0:(Ze=0,_t=2147483648):isNaN(t)?(Ze=0,_t=2147483647):34028234663852886e22<t?(Ze=0,_t=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,_t=(f<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,_t=(f<<31|u+127<<23|t&8388607)>>>0),f=_t,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Ne(e,u,f){return e.h!==5?!1:(St(u,f,e.g.o()),!0)}function Zn(e,u,f){return e.h!==5&&e.h!==2?!1:(u=ut(u,f),e.h==2?_e(e,At.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,f){return e.h!==0?!1:(St(u,f,jt(e.g)),!0)}function Be(e,u,f){return e.h!==0?!1:(St(u,f,e.g.j()),!0)}function kn(e,u,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],I=null,Y,L,U;c<t;)Y=e[c++],128>Y?b.push(Y):224>Y?c>=t?b.push(65533):(L=e[c++],194>Y||(L&192)!==128?(c--,b.push(65533)):b.push((Y&31)<<6|L&63)):240>Y?c>=t-1?b.push(65533):(L=e[c++],(L&192)!==128||Y===224&&160>L||Y===237&&160<=L||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((Y&15)<<12|(L&63)<<6|a&63)):244>=Y?c>=t-2?b.push(65533):(L=e[c++],(L&192)!==128||(Y<<28)+(L-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(Y=(Y&7)<<18|(L&63)<<12|(a&63)<<6|U&63,Y-=65536,b.push((Y>>10&1023)+55296,(Y&1023)+56320))):b.push(65533),8192<=b.length&&(I=xn(I,b),b.length=0);a=xn(I,b)}return St(u,f,a),!0}function rn(e,u,f,t,c){if(e.h!==2)return!1;e=ln(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&tn(e),u.g[f]=e,St(u,f,t,a),!0}function vn(e,u,f,t,c){return e.h!==2?!1:(e=ln(e,new t,c),qe(u,f,e,t,void 0),!0)}function Tn(e,u,f){return e.h!==0&&e.h!==2?!1:(u=ut(u,f),e.h==2?_e(e,At.prototype.j,u):u.push(e.g.j()),!0)}function An(e,u,f){return e.h!==0?!1:(St(u,f,jt(e.g)),!0)}function un(e){ee.call(this,e,-1,Qn)}var wn;pt(un,ee),un.prototype.getRows=function(){return it(this,1)},un.prototype.getCols=function(){return it(this,2)},un.prototype.getPackedDataList=function(){return Pt(this)},un.prototype.getLayout=function(){return ae(this,4,0)};function _n(e,u){return Le(e,u,wn||(wn={1:Be,2:Be,3:Zn,4:An}))}var Qn=[3];function Fn(e){ee.call(this,e)}var Hn;pt(Fn,ee);function m(e,u){var f=it(e,1);if(f!=null&&f!=null){Ot(u.g,8);var t=u.g;if(0<=f)Ot(t,f);else{for(var c=0;9>c;c++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}nn(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Cn(t)),t=it(e,4),t!=null&&Ge(u,4,Cn(t)),fn(e,u)}function W(e,u){return Le(e,u,Hn||(Hn={1:Be,2:Ne,3:kn,4:kn}))}function V(e){ee.call(this,e,-1,ot)}var k;pt(V,ee),V.prototype.addClassification=function(e,u){return qe(this,1,e,Fn,u),this};function z(e,u){return Le(e,u,k||(k={1:[vn,Fn,W]}))}var ot=[1];function O(e){ee.call(this,e)}var rt;pt(O,ee);function bt(e,u){nn(u,e,1),nn(u,e,2),nn(u,e,3),nn(u,e,4),nn(u,e,5),fn(e,u)}function Rt(e,u){return Le(e,u,rt||(rt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Ut(e){ee.call(this,e,-1,Et)}var Nt;pt(Ut,ee);function $t(e,u){return Le(e,u,Nt||(Nt={1:[vn,O,Rt]}))}var Et=[1];function Tt(e){ee.call(this,e)}var kt;pt(Tt,ee);function Qt(e,u){nn(u,e,1),nn(u,e,2),nn(u,e,3),nn(u,e,4),nn(u,e,5);var f=it(e,6);if(f!=null&&f!=null){Ot(u.g,48);var t=u.g,c=f;f=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,f&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),_t=a,Ze=c,f=_t,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}fn(e,u)}function ue(e,u){return Le(e,u,kt||(kt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:Sn}))}function pe(e){ee.call(this,e,-1,h)}var ge;pt(pe,ee),pe.prototype.getVertexType=function(){return ae(this,1,0)},pe.prototype.getPrimitiveType=function(){return ae(this,2,0)},pe.prototype.getVertexBufferList=function(){return Pt(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function Je(e,u){return Le(e,u,ge||(ge={1:An,2:An,3:Zn,4:Tn}))}var h=[3,4];function y(e){ee.call(this,e)}var v;pt(y,ee),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,un,2)};function C(e,u){return Le(e,u,v||(v={1:[rn,pe,Je],2:[rn,un,_n]}))}var A=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],lt=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(E(A),E(_),E(M),E(q),E(lt),E(s));function R(e,u,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,u),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
36
+ `+x.getProgramInfoLog(o));w=l.o=o,x.useProgram(w),J=x.getUniformLocation(w,"sampler0"),l.j={K:x.getAttribLocation(w,"aVertex"),J:x.getAttribLocation(w,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}w=l.j,x.useProgram(l.o),x.canvas.width=Z.width,x.canvas.height=Z.height,x.viewport(0,0,Z.width,Z.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(Z.glName),x.enableVertexAttribArray(w.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(w.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(w.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(w.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(w.K),x.disableVertexAttribArray(w.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var Y=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,Z){return Z+l}function K(l,Z){window[l]=Z}function E(l){var Z=document.createElement("script");return Z.setAttribute("src",l),Z.setAttribute("crossorigin","anonymous"),new Promise(function(x){Z.addEventListener("load",function(){x()},!1),Z.addEventListener("error",function(){x()},!1),document.body.appendChild(Z)})}function et(){return gt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(Y),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var Z=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")Z=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=Z,l.options){Z=T(Object.keys(l.options));for(var x=Z.next();!x.done;x=Z.next()){x=x.value;var w=l.options[x].default;w!==void 0&&(this.j[x]=typeof w=="function"?w():w)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var Z,x,w,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return l.$?(Z=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,et(),2)):c.return();case 2:if(x=c.h,typeof window=="object")return K("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),K("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=Z.filter(function(a){return a.data!==void 0}),g=Z.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var I=a.path;b=b.then(function(F){return l.overrideFile(I,F),Promise.resolve(F)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?E(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,I;return gt(function(F){if(F.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,I=l,P(F,a(b),2);I.h=F.h,F.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=Z.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,B(w)),J=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:J.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var Z,x,w,J,o,d,g,e;return gt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,xt(l,l.g.graph.url),3)}for(u.g!=2&&(Z=u.h,l.i.loadGraph(Z)),x=T(Object.keys(l.C)),w=x.next();!w.done;w=x.next())J=w.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return gt(function(Z){l.i&&(l.i.reset(),l.o={},l.u={}),Z.g=0})},i.setOptions=function(l,Z){var x=this;if(Z=Z||this.g.options){for(var w=[],J=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=Z[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],w.push(function(u){return function(){var f;return gt(function(t){if(t.g==1)return P(t,u.R(u.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),J.push(g))))}(w.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(w))}};function Mt(l){var Z,x,w,J,o,d,g;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}Z=T(l.A),x=Z.next();case 3:if(x.done){e.g=5;break}return w=x.value,P(e,w(),4);case 4:x=Z.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,J.push_back(g);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(Z){return Z.g==1?P(Z,yt(l),2):Z.g!=3?P(Z,Xt(l),3):P(Z,Mt(l),0)})};function xt(l,Z){var x,w;return gt(function(J){return Z in l.H?J.return(l.H[Z]):(x=l.locateFile(Z,""),w=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[Z]=w,J.return(w))})}i.overrideFile=function(l,Z){this.i?this.i.overrideFile(l,Z):this.C[l]=Z},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,Z){var x=this,w,J,o,d,g,e,u,f,t;return gt(function(c){switch(c.g){case 1:return x.g.inputs?(w=1e3*(Z==null?performance.now():Z),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new lt(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var I=a.videoWidth,F=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(I=a.naturalWidth,F=a.naturalHeight):(I=a.width,F=a.height);F={glName:b.l,width:I,height:F},I=b.g,I.canvas.width=F.width,I.canvas.height=F.height,I.activeTexture(I.TEXTURE0),b.h.bindTexture2d(b.l),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,I.RGBA,I.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=F;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),F=0;F<a.length;++F){I=a[F];var L=b.data,U=L.setBoundingBox,j=F,Q=I.ea,D=new v;if(Ct(D,1,Q.ka),Ct(D,2,Q.la),Ct(D,3,Q.height),Ct(D,4,Q.width),Ct(D,5,Q.rotation),Ct(D,6,Q.ia),Q=O(D,C),U.call(L,j,Q),I.Y)for(L=0;L<I.Y.length;++L){D=I.Y[L];var st=!!D.visibility;U=b.data,j=U.addNormalizedLandmark,Q=F,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ct(st,1,D.x),Ct(st,2,D.y),Ct(st,3,D.z),D.visibility&&Ct(st,4,D.visibility),D=O(st,ge),j.call(U,Q,D)}if(I.V)for(L=0;L<I.V.length;++L)U=b.data,j=U.addClassification,Q=F,D=I.V[L],st=new Jt,Ct(st,2,D.score),D.index&&Ct(st,1,D.index),D.label&&Ct(st,3,D.label),D.displayName&&Ct(st,4,D.displayName),D=O(st,wt),j.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},u),{stream:f,timestamp:w}));break;case"detections":t=u,t.stream=f,t.timestamp=w,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),P(c,x.D,4);case 4:J.delete(),c.g=0}})};function dt(l,Z,x){var w,J,o,d,g,e,u,f,t,c,a,b,I,F;return gt(function(L){switch(L.g){case 1:if(!x)return L.return(Z);for(w={},J=0,o=T(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&Z[e.stream]!==void 0&&++J;1<J&&(l.I=!1),u=T(Object.keys(x)),d=u.next();case 2:if(d.done){L.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return I=w,F=f,P(L,Wt(l,f,Z[t]),14);if(c=Z[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),j=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ht=V(U.get(st),v,C);ht={ea:{ka:oe(ht,1),la:oe(ht,2),height:oe(ht,3),width:oe(ht,4),rotation:oe(ht,5,0),ia:se(ht,6)},Y:Fe(V(j.get(st),Je,h),pe,1).map(A),V:_(V(Q.get(st),Ut,Dt))},D.push(ht)}U=D}else U=[];w[f]=U,L.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),j=0;j<c.size();j++)U[j]=c.get(j);c.delete()}else U=[];w[f]=U,L.g=7;break}if(c===void 0){L.g=3;break}if(t.type==="float_list"){w[f]=c,L.g=7;break}if(t.type==="proto"){w[f]=c,L.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new lt(l.h,l.G),l.u[f]=a),P(L,s(a,c,l.I),13);case 13:b=L.h,w[f]=b;case 7:t.transform&&w[f]&&(w[f]=t.transform(w[f])),L.g=3;break;case 14:I[F]=L.h;case 3:d=u.next(),L.g=2;break;case 4:return L.return(w)}})}function Wt(l,Z,x){var w;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(w=l.u[Z],w||(w=new lt(l.h,l.G),l.u[Z]=w),J.return(s(w,x,l.I))):J.return(void 0)})}function It(l,Z){for(var x=Z.name||"$",w=[].concat(B(Z.wants)),J=new l.h.StringList,o=T(Z.wants),d=o.next();!d.done;d=o.next())J.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<Z.wants.length;++u)e[w[u]]=g.get(u);var f=l.listeners[x];f&&(l.D=dt(l,e,Z.outs).then(function(t){t=f(t);for(var c=0;c<Z.wants.length;++c){var a=e[w[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,o),J.delete()}i.onResults=function(l,Z){this.listeners[Z||"$"]=l},Ht("Solution",$),Ht("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Yt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ft(l){var Z=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Yt(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(w){return _(V(w,Ut,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var w,J,o;return gt(function(d){return d.g==1?(w=Yt(x),J="third_party/mediapipe/modules/hand_landmark/"+w,P(d,xt(Z.g,w),2)):(o=d.h,Z.g.overrideFile(J,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ft.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return gt(function(Z){return P(Z,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var Z=this;return gt(function(x){return P(x,Z.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Ft),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("VERSION","0.4.1646424915")}).call(hi);var fi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,f){return e==Array.prototype||e==Object.prototype||(e[u]=f.value),e};function m(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var f=e[u];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var X=m(this);function S(e,u){if(u)t:{var f=X;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in f))break t;f=f[c]}e=e[e.length-1],t=f[e],u=u(t),u!=t&&u!=null&&r(f,e,{configurable:!0,writable:!0,value:u})}}S("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+c++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),S("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<u.length;f++){var t=X[u[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function B(e){if(!(e instanceof Array)){e=T(e);for(var u,f=[];!(u=e.next()).done;)f.push(u.value);e=f}return e}var nt=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=ut;function mt(e,u){if(e.prototype=nt(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var f in u)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,f);t&&Object.defineProperty(e,f,t)}else e[f]=u[f];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,f){return e.g=f,{value:u}}function $e(e){this.g=new Bt,this.h=e}function ze(e,u){kt(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),jt(e))}function We(e,u,f,t){try{var c=u.call(e.g.i,f);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),jt(e)}return e.g.i=null,t.call(e.g,a),jt(e)}function jt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(f){e.g.h=void 0,ee(e.g,f)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Nn(e){this.next=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=jt(e)),u},this.throw=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=jt(e)),u},this.return=function(u){return ze(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,f).then(a,c)}a(e.next())})}function gt(e){return ne(new Nn(new $e(e)))}S("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var I=this.j();try{b(I.resolve,I.reject)}catch(F){I.reject(F)}}function f(){this.g=null}function t(b){return b instanceof u?b:new u(function(I){I(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var I=this;this.i(function(){I.l()})}this.g.push(b)};var c=X.setTimeout;f.prototype.i=function(b){c(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var I=0;I<b.length;++I){var F=b[I];b[I]=null;try{F()}catch(L){this.j(L)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(L){return function(U){F||(F=!0,L.call(I,U))}}var I=this,F=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var I=b!=null;break t;case"function":I=!0;break t;default:I=!1}I?this.v(b):this.m(b)}},u.prototype.v=function(b){var I=void 0;try{I=b.then}catch(F){this.l(F);return}typeof I=="function"?this.G(I,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,I){if(this.h!=0)throw Error("Cannot settle("+b+", "+I+"): Promise already settled in state"+this.h);this.h=b,this.i=I,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var I=X.console;typeof I<"u"&&I.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=X.CustomEvent,I=X.Event,F=X.dispatchEvent;return typeof F>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof I=="function"?b=new I("unhandledrejection",{cancelable:!0}):(b=X.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,F(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new f;return u.prototype.F=function(b){var I=this.j();b.J(I.resolve,I.reject)},u.prototype.G=function(b,I){var F=this.j();try{b.call(I,F.resolve,F.reject)}catch(L){F.reject(L)}},u.prototype.then=function(b,I){function F(Q,D){return typeof Q=="function"?function(st){try{L(Q(st))}catch(ht){U(ht)}}:D}var L,U,j=new u(function(Q,D){L=Q,U=D});return this.J(F(b,L),F(I,U)),j},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,I){function F(){switch(L.h){case 1:b(L.i);break;case 2:I(L.i);break;default:throw Error("Unexpected state: "+L.h)}}var L=this;this.g==null?a.h(F):this.g.push(F),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(I,F){F(b)})},u.race=function(b){return new u(function(I,F){for(var L=T(b),U=L.next();!U.done;U=L.next())t(U.value).J(I,F)})},u.all=function(b){var I=T(b),F=I.next();return F.done?t([]):new u(function(L,U){function j(st){return function(ht){Q[st]=ht,D--,D==0&&L(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(F.value).J(j(Q.length-1),U),F=I.next();while(!F.done)})},u});function qe(e,u){e instanceof String&&(e+="");var f=0,t=!1,c={next:function(){if(!t&&f<e.length){var a=f++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var jn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};S("Object.assign",function(e){return e||jn}),S("Object.is",function(e){return e||function(u,f){return u===f?u!==0||1/u===1/f:u!==u&&f!==f}}),S("Array.prototype.includes",function(e){return e||function(u,f){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(f=f||0,0>f&&(f=Math.max(f+c,0));f<c;f++){var a=t[f];if(a===u||Object.is(a,u))return!0}return!1}}),S("String.prototype.includes",function(e){return e||function(u,f){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,f||0)!==-1}}),S("Array.prototype.keys",function(e){return e||function(){return qe(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=u}function we(e){Re.setTimeout(function(){throw e},0)}function ln(e){we(e)}function Xn(e,u){ln(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Ln(){ln(Error("Failed to read varint, encoding is invalid."))}function xn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Jn,hn=typeof TextDecoder<"u",bn,Un=typeof TextEncoder<"u";function Cn(e){if(Un)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var f=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Oe={},Ke=null;function In(e){var u;u===void 0&&(u=0),Se(),u=Oe[u];for(var f=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],I=e[c+1],F=e[c+2],L=u[b>>2];b=u[(b&3)<<4|I>>4],I=u[(I&15)<<2|F>>6],F=u[F&63],f[a++]=L+b+I+F}switch(L=0,F=t,e.length-c){case 2:L=e[c+1],F=u[(L&15)<<2]||t;case 1:e=e[c],f[a]=u[e>>2]+u[(e&3)<<4|L>>4]+F+t}return f.join("")}function Wn(e){var u=e.length,f=3*u/4;f%3?f=Math.floor(f):"=.".indexOf(e[u-1])!=-1&&(f="=.".indexOf(e[u-2])!=-1?f-2:f-1);var t=new Uint8Array(f),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function f(F){for(;t<e.length;){var L=e.charAt(t++),U=Ke[L];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(L))throw Error("Unknown base64 encoding at char: "+L)}return F}Se();for(var t=0;;){var c=f(-1),a=f(0),b=f(64),I=f(64);if(I===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),I!=64&&u(b<<6&192|I))}}function Se(){if(!Ke){Ke={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(u[f].split(""));Oe[f]=t;for(var c=0;c<t.length;c++){var a=t[c];Ke[a]===void 0&&(Ke[a]=c)}}}}var Pe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Pe&&e instanceof Uint8Array?In(e):null;return e};var cn=typeof Uint8Array.prototype.slice=="function";function Be(e,u,f){return u===f?re||(re=new Uint8Array(0)):cn?e.slice(u,f):new Uint8Array(e.subarray(u,f))}var Qt=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Wn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var f=e.g;f=f==null||Pe&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Wn(f):null,e=e.g=f,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function At(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&xe(this,e)}function xe(e,u){e.h=Ce(u),e.m=0,e.i=e.h.length,e.g=e.m}At.prototype.reset=function(){this.g=this.m};function zt(e){for(var u=128,f=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],f|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],f|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=f>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Ln()}function ye(e){e.g>e.i&&(e.l=!0,ln(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}At.prototype.j=function(){var e=this.h,u=e[this.g],f=u&127;return 128>u?(this.g+=1,ye(this),f):(u=e[this.g+1],f|=(u&127)<<7,128>u?(this.g+=2,ye(this),f):(u=e[this.g+2],f|=(u&127)<<14,128>u?(this.g+=3,ye(this),f):(u=e[this.g+3],f|=(u&127)<<21,128>u?(this.g+=4,ye(this),f):(u=e[this.g+4],f|=(u&15)<<28,128>u?(this.g+=5,ye(this),f>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Ln(),f):(ye(this),f))))))},At.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|u<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,u=f>>>23&255,f&=8388607,u==255?f?NaN:1/0*e:u==0?e*Math.pow(2,-149)*f:e*Math.pow(2,u-150)*(f+Math.pow(2,23))};var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=u}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function je(e){var u={},f=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=f,u=this.m,Ye.length?(f=Ye.pop(),u&&(f.u=u.u),e&&xe(f,e),e=f):e=new At(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var f=e.g.j();return u=f>>>3,f&=7,0<=f&&5>=f?(e.i=u,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,f=0;10>f;f++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Ln()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!_e(e)){e.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,ln(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Vn(e,u,f){e.N||(e=Be(e.g.h,f,e.g.g),(f=u.o)?f.push(e):u.o=[e])}function un(e,u,f){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,f(u,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function Qe(e,u,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(u.call(e.g))}var an=[];function ve(){this.h=[],this.i=0,this.g=new tn}function Te(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,f){Ot(e.g,8*u+2),Ot(e.g,f.length),Te(e,e.g.end()),Te(e,f)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Pt(e){return Array.isArray(e)&&De(e,1),e}function fn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ct(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Pe&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Vt(e[t],u);return qt(e)&1&&Pt(f),f}f={};for(t in e)f[t]=Vt(e[t],u);return f}var Fe;function te(e,u,f){var t=Fe;Fe=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(u=0;u<f.length;u++)e=f[u],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=se):(tt(this),(t=this.i[e])?Pt(t):this.i[e]=se)}var se=Object.freeze(Pt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,f){return u===-1?null:(f===void 0?0:f)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ct(e,u,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Pt([]),St(e,u,c,t)):f&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ct(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<u.length;f++)u[f]=+u[f];e.m[3]=!0}return u}function de(e,u,f){return e=it(e,u),e==null?f:e}function ue(e,u,f){return e=it(e,u),e=e==null?e:+e,e==null?f===void 0?0:f:e}function St(e,u,f,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=f):e.h[u+e.j]=f}function me(e,u,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var c=it(e,f,!1);return c==null?t:(u=new u(c),e.g[f]=u)}function He(e,u,f){e.g||(e.g={});var t=e.g[f];if(!t){var c=ct(e,f,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&fn(t[b].h);a&&(fn(t),Object.freeze(t)),e.g[f]=t}return t}function en(e,u,f,t,c){var a=He(e,t,u);f=f||new t,e=ct(e,u),c!=null?(a.splice(c,0,f),e.splice(c,0,nn(f))):(a.push(f),e.push(nn(f)))}te.prototype.toJSON=function(){var e=nn(this);return oe(e,Ct)};function nn(e){if(e.g)for(var u in e.g){var f=e.g[u];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&nn(f[t]);else f&&nn(f)}return e.h}te.prototype.toString=function(){return nn(this).toString()};function mn(e,u){if(e=e.o){Te(u,u.g.end());for(var f=0;f<e.length;f++)Te(u,e[f])}}function yn(e){var u=e[0];switch(e.length){case 2:var f=e[1];return function(F,L,U){return u(F,L,U,f)};case 3:var t=e[1],c=e[2];return function(F,L,U){return u(F,L,U,t,c)};case 4:var a=e[1],b=e[2],I=e[3];return function(F,L,U){return u(F,L,U,a,b,I)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Le(e,u,f){for(;_e(u)&&u.h!=4;){var t=u.i,c=f[t];if(c){if(Array.isArray(c)&&(c=f[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Vn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Vn(t,c,a)}return e}function rn(e,u){var f=new ve;if(u(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=f.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),f.h=[e],f=e}return f}function zn(e,u,f){if(an.length){var t=an.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new je(e);try{return f(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>an.length&&an.push(e)}}function on(e,u,f){if(u=it(u,f),u!=null){Ot(e.g,8*f+5),e=e.g;var t=u;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(f<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(f<<31|u+127<<23|t&8388607)>>>0),f=Qt,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Ne(e,u,f){return e.h!==5?!1:(St(u,f,e.g.o()),!0)}function Zn(e,u,f){return e.h!==5&&e.h!==2?!1:(u=ct(u,f),e.h==2?Qe(e,At.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,f){return e.h!==0?!1:(St(u,f,zt(e.g)),!0)}function Me(e,u,f){return e.h!==0?!1:(St(u,f,e.g.j()),!0)}function En(e,u,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(hn)(a=Jn)||(a=Jn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],I=null,F,L,U;c<t;)F=e[c++],128>F?b.push(F):224>F?c>=t?b.push(65533):(L=e[c++],194>F||(L&192)!==128?(c--,b.push(65533)):b.push((F&31)<<6|L&63)):240>F?c>=t-1?b.push(65533):(L=e[c++],(L&192)!==128||F===224&&160>L||F===237&&160<=L||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((F&15)<<12|(L&63)<<6|a&63)):244>=F?c>=t-2?b.push(65533):(L=e[c++],(L&192)!==128||(F<<28)+(L-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(F=(F&7)<<18|(L&63)<<12|(a&63)<<6|U&63,F-=65536,b.push((F>>10&1023)+55296,(F&1023)+56320))):b.push(65533),8192<=b.length&&(I=xn(I,b),b.length=0);a=xn(I,b)}return St(u,f,a),!0}function sn(e,u,f,t,c){if(e.h!==2)return!1;e=un(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&nn(e),u.g[f]=e,St(u,f,t,a),!0}function vn(e,u,f,t,c){return e.h!==2?!1:(e=un(e,new t,c),en(u,f,e,t,void 0),!0)}function wn(e,u,f){return e.h!==0&&e.h!==2?!1:(u=ct(u,f),e.h==2?Qe(e,At.prototype.j,u):u.push(e.g.j()),!0)}function An(e,u,f){return e.h!==0?!1:(St(u,f,zt(e.g)),!0)}function dn(e){te.call(this,e,-1,Qn)}var Yn;mt(dn,te),dn.prototype.getRows=function(){return it(this,1)},dn.prototype.getCols=function(){return it(this,2)},dn.prototype.getPackedDataList=function(){return _t(this)},dn.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return Le(e,u,Yn||(Yn={1:Me,2:Me,3:Zn,4:An}))}var Qn=[3];function Tn(e){te.call(this,e)}var Hn;mt(Tn,te);function p(e,u){var f=it(e,1);if(f!=null&&f!=null){Ot(u.g,8);var t=u.g;if(0<=f)Ot(t,f);else{for(var c=0;9>c;c++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}on(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Cn(t)),t=it(e,4),t!=null&&Ge(u,4,Cn(t)),mn(e,u)}function W(e,u){return Le(e,u,Hn||(Hn={1:Me,2:Ne,3:En,4:En}))}function V(e){te.call(this,e,-1,ot)}var k;mt(V,te),V.prototype.addClassification=function(e,u){return en(this,1,e,Tn,u),this};function O(e,u){return Le(e,u,k||(k={1:[vn,Tn,W]}))}var ot=[1];function z(e){te.call(this,e)}var rt;mt(z,te);function bt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5),mn(e,u)}function Rt(e,u){return Le(e,u,rt||(rt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Et(e){te.call(this,e,-1,Jt)}var Nt;mt(Et,te);function $t(e,u){return Le(e,u,Nt||(Nt={1:[vn,z,Rt]}))}var Jt=[1];function wt(e){te.call(this,e)}var Ut;mt(wt,te);function Dt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5);var f=it(e,6);if(f!=null&&f!=null){Ot(u.g,48);var t=u.g,c=f;f=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,f&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,f=Qt,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}mn(e,u)}function ae(e,u){return Le(e,u,Ut||(Ut={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:Sn}))}function pe(e){te.call(this,e,-1,h)}var ge;mt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ct(this,4)};function Je(e,u){return Le(e,u,ge||(ge={1:An,2:An,3:Zn,4:wn}))}var h=[3,4];function y(e){te.call(this,e)}var v;mt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,dn,2)};function C(e,u){return Le(e,u,v||(v={1:[sn,pe,Je],2:[sn,dn,_n]}))}var M=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],A=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],lt=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],G=[].concat(B(M),B(_),B(A),B(q),B(lt),B(s));function R(e,u,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,u),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
37
37
 
38
- `+e.getShaderInfoLog(f));return f}function F(e){return He(e,Fn,1).map(function(u){return{index:ae(u,1,0),score:ce(u,2),label:it(u,3)!=null?ae(u,3,""):void 0,displayName:it(u,4)!=null?ae(u,4,""):void 0}})}function N(e){return{x:ce(e,1),y:ce(e,2),z:ce(e,3),visibility:it(e,4)!=null?ce(e,4):void 0}}function K(e){return He(On(e,Ut,$t),O,1).map(N)}function B(e,u){this.h=e,this.g=u,this.l=0}function nt(e,u,f){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):f?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function $(e,u){var f=e.g;if(e.m===void 0){var t=R(f,`
38
+ `+e.getShaderInfoLog(f));return f}function Y(e){return He(e,Tn,1).map(function(u){return{index:de(u,1,0),score:ue(u,2),label:it(u,3)!=null?de(u,3,""):void 0,displayName:it(u,4)!=null?de(u,4,""):void 0}})}function N(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:it(e,4)!=null?ue(e,4):void 0}}function K(e){return He(zn(e,Et,$t),z,1).map(N)}function E(e,u){this.h=e,this.g=u,this.l=0}function et(e,u,f){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):f?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function $(e,u){var f=e.g;if(e.m===void 0){var t=R(f,`
39
39
  attribute vec2 aVertex;
40
40
  attribute vec2 aTex;
41
41
  varying vec2 vTex;
@@ -50,9 +50,9 @@
50
50
  gl_FragColor = texture2D(sampler0, vTex);
51
51
  }`,1),a=f.createProgram();if(f.attachShader(a,t),f.attachShader(a,c),f.linkProgram(a),!f.getProgramParameter(a,f.LINK_STATUS))throw Error(`Could not compile WebGL program.
52
52
 
53
- `+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),c=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:c},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(c,0)}t=e.j,f.useProgram(e.m),f.canvas.width=u.width,f.canvas.height=u.height,f.viewport(0,0,u.width,u.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(u.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Gt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(e,u){return u+e}function xt(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(f){u.addEventListener("load",function(){f()},!1),u.addEventListener("error",function(){f()},!1),document.body.appendChild(u)})}function Xt(){return gt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Gt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function It(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Bt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=w(Object.keys(e.options));for(var f=u.next();!f.done;f=u.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,f,t,c,a,b,I,Y,L,U,j;return gt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Xt(),2)):Q.return();case 2:if(f=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),I=u.filter(function(D){return D.data===void 0}),Y=Promise.all(b.map(function(D){var st=Z(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),L=Promise.all(I.map(function(D){return D.simd===void 0||D.simd&&f||!D.simd&&!f?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return gt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,P(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return gt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,Z(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([L,Y,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&f||!D.simd&&!f}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,E(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Yt(e){var u,f,t,c,a,b,I,Y;return gt(function(L){if(L.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return L.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){L.g=2;return}return e.P=e.g.graph.url,P(L,Z(e,e.g.graph.url),3)}for(L.g!=2&&(u=L.h,e.i.loadGraph(u)),f=w(Object.keys(e.B)),t=f.next();!t.done;t=f.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=w(e.g.listeners),b=a.next();!b.done;b=a.next())I=b.value,J(e,I);Y=e.j,e.j={},e.setOptions(Y),L.g=0})}i.reset=function(){var e=this;return gt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var f=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=w(Object.keys(e)),I=b.next();!I.done;a={K:a.K,L:a.L},I=b.next()){var Y=I.value;Y in this.j&&this.j[Y]===e[Y]||(this.j[Y]=e[Y],I=u[Y],I!==void 0&&(I.onChange&&(a.K=I.onChange,a.L=e[Y],t.push(function(L){return function(){var U;return gt(function(j){if(j.g==1)return P(j,L.K(L.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),I.graphOptionXref&&(Y={valueNumber:I.type===1?e[Y]:0,valueBoolean:I.type===0?e[Y]:!1,valueString:I.type===2?e[Y]:""},I=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),I.graphOptionXref),Y),c.push(I))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,f,t,c,a,b,I;return gt(function(Y){switch(Y.g){case 1:if(!e.o)return Y.return();if(!e.v){Y.g=2;break}u=w(e.v),f=u.next();case 3:if(f.done){Y.g=5;break}return t=f.value,P(Y,t(),4);case 4:f=u.next(),Y.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=w(e.A),b=a.next();!b.done;b=a.next())I=b.value,c.push_back(I);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,Y.g=0}})}i.initialize=function(){var e=this;return gt(function(u){return u.g==1?P(u,wt(e),2):u.g!=3?P(u,Yt(e),3):P(u,l(e),0)})};function Z(e,u){var f,t;return gt(function(c){return u in e.F?c.return(e.F[u]):(f=e.locateFile(u,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var f=this,t,c,a,b,I,Y,L,U,j;return gt(function(Q){switch(Q.g){case 1:return f.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,f.C,2)):Q.return();case 2:return P(Q,f.initialize(),3);case 3:for(c=new f.h.PacketDataList,a=w(Object.keys(e)),b=a.next();!b.done;b=a.next())if(I=b.value,Y=f.g.inputs[I]){t:{var D=e[I];switch(Y.type){case"video":var st=f.m[Y.stream];if(st||(st=new B(f.h,f.D),f.m[Y.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=f.m[Y.stream],st||(st=new yt(f.h),f.m[Y.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var vt=st.data,Zt=vt.setBoundingBox,Kt=mt,se=ft.T,le=new Tt;if(St(le,1,se.X),St(le,2,se.Y),St(le,3,se.height),St(le,4,se.width),St(le,5,se.rotation),St(le,6,se.W),se=en(le,Qt),Zt.call(vt,Kt,se),ft.O)for(vt=0;vt<ft.O.length;++vt){le=ft.O[vt];var Ee=!!le.visibility;Zt=st.data,Kt=Zt.addNormalizedLandmark,se=mt,le=Object.assign(Object.assign({},le),{visibility:Ee?le.visibility:0}),Ee=new O,St(Ee,1,le.x),St(Ee,2,le.y),St(Ee,3,le.z),le.visibility&&St(Ee,4,le.visibility),le=en(Ee,bt),Kt.call(Zt,se,le)}if(ft.M)for(vt=0;vt<ft.M.length;++vt)Zt=st.data,Kt=Zt.addClassification,se=mt,le=ft.M[vt],Ee=new Fn,St(Ee,2,le.score),le.index&&St(Ee,1,le.index),le.label&&St(Ee,3,le.label),le.displayName&&St(Ee,4,le.displayName),le=en(Ee,m),Kt.call(Zt,se,le)}st=st.data;break t;default:st={}}}switch(L=st,U=Y.stream,Y.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},L),{stream:U,timestamp:t}));break;case"detections":j=L,j.stream=U,j.timestamp=t,c.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+Y.type+"'")}}return f.i.send(c),P(Q,f.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,f){var t,c,a,b,I,Y,L,U,j,Q,D,st,ft,mt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(u);for(t={},c=0,a=w(Object.keys(f)),b=a.next();!b.done;b=a.next())I=b.value,Y=f[I],typeof Y!="string"&&Y.type==="texture"&&u[Y.stream]!==void 0&&++c;1<c&&(e.G=!1),L=w(Object.keys(f)),b=L.next();case 2:if(b.done){vt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return ft=t,mt=U,P(vt,T(e,U,u[j]),14);if(Q=u[j.stream],j.type==="detection_list"){if(Q){for(var Zt=Q.getRectList(),Kt=Q.getLandmarksList(),se=Q.getClassificationsList(),le=[],Ee=0;Ee<Zt.size();++Ee){var Rn=On(Zt.get(Ee),Tt,ue);Rn={T:{X:ce(Rn,1),Y:ce(Rn,2),height:ce(Rn,3),width:ce(Rn,4),rotation:ce(Rn,5,0),W:ae(Rn,6,0)},O:K(Kt.get(Ee)),M:F(On(se.get(Ee),V,z))},le.push(Rn)}Zt=le}else Zt=[];t[U]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(Q){for(Zt=Array(Q.size()),Kt=0;Kt<Q.size();Kt++)Zt[Kt]=Q.get(Kt);Q.delete()}else Zt=[];t[U]=Zt,vt.g=7;break}if(Q===void 0){vt.g=3;break}if(j.type==="float_list"){t[U]=Q,vt.g=7;break}if(j.type==="proto"){t[U]=Q,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),P(vt,nt(D,Q,e.G),13);case 13:st=vt.h,t[U]=st;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),vt.g=3;break;case 14:ft[mt]=vt.h;case 3:b=L.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,u,f){var t;return gt(function(c){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?c.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,f,e.G))):c.return(void 0)})}function J(e,u){for(var f=u.name||"$",t=[].concat(E(u.wants)),c=new e.h.StringList,a=w(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(I){for(var Y={},L=0;L<u.wants.length;++L)Y[t[L]]=I.get(L);var U=e.listeners[f];U&&(e.C=x(e,Y,u.outs).then(function(j){j=U(j);for(var Q=0;Q<u.wants.length;++Q){var D=Y[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=On(e,y,C);var u=e.getMesh();if(!u)return e;var f=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return f};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:K},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:K},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:K},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:K},ea:{type:"proto",stream:"world_landmarks",transform:K},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(f){var t,c,a,b;return gt(function(I){if(I.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(I,fetch(a),3)}return I.g!=2?P(I,I.h.arrayBuffer(),2):(b=I.h,u.g.overrideFile(c,b),P(I,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return gt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return gt(function(f){return P(f,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ht("FACEMESH_LIPS",A),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",M),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",lt),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",X),Ht("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<f;a++)c.push(Array(u));for(a=0;a<f;a++)for(var b=0;b<u;b++){var I=e.getLayout()===1?a*u+b:b*f+a;c[a][b]=t[I]}return c}),Ht("VERSION","0.5.1635989137")}).call(hi);const fi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function p(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var G=p(this);function S(o,d){if(d)t:{var g=G;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}S("Symbol",function(o){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(f||"")+"_"+u++,f)}function g(f,t){this.g=f,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),S("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=G[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return o});function H(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function w(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function E(o){if(!(o instanceof Array)){o=w(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=ct;function pt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Jt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Mt.prototype.s=function(o){this.h=o};function qt(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Mt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function De(o){this.g=new Mt,this.h=o}function an(o,d){Jt(o.g);var g=o.g.i;return g?Ve(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),Dt(o))}function Ve(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var f=u.value}catch(t){return o.g.i=null,qt(o.g,t),Dt(o)}return o.g.i=null,e.call(o.g,f),Dt(o)}function Dt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,qt(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Kn(o){this.next=function(d){return Jt(o.g),o.g.i?d=Ve(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=Dt(o)),d},this.throw=function(d){return Jt(o.g),o.g.i?d=Ve(o,o.g.i.throw,d,o.g.s):(qt(o.g,d),d=Dt(o)),d},this.return=function(d){return an(o,d)},this[Symbol.iterator]=function(){return this}}function de(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(f,u)}f(o.next())})}function gt(o){return de(new Kn(new De(o)))}S("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=G.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(I){a||(a=!0,b.call(c,I))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=G.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=G.CustomEvent,c=G.Event,a=G.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=G.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)f.h(this.g[t]);this.g=null}};var f=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(L,U){return typeof L=="function"?function(j){try{b(L(j))}catch(Q){I(Q)}}:U}var b,I,Y=new d(function(L,U){b=L,I=U});return this.M(a(t,b),a(c,I)),Y},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=w(t),I=b.next();!I.done;I=b.next())e(I.value).M(c,a)})},d.all=function(t){var c=w(t),a=c.next();return a.done?e([]):new d(function(b,I){function Y(j){return function(Q){L[j]=Q,U--,U==0&&b(L)}}var L=[],U=0;do L.push(void 0),U++,e(a.value).M(Y(L.length-1),I),a=c.next();while(!a.done)})},d});function pn(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var f=g++;return{value:d(f,o[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};S("Object.assign",function(o){return o||jn}),S("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),S("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var f=e[g];if(f===d||Object.is(f,d))return!0}return!1}}),S("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),S("Array.prototype.keys",function(o){return o||function(){return pn(this,function(d){return d})}});var Re=this||self;function Ht(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function on(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Ln=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function En(o){var d;d===void 0&&(d=0),Ke(),d=dn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,f=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[f++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[f]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Cn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return Oe(o,function(f){e[u++]=f}),u!==g?e.subarray(0,u):e}function Oe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),I=bn[b];if(I!=null)return I;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ke();for(var e=0;;){var u=g(-1),f=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ke(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));dn[g]=e;for(var u=0;u<e.length;u++){var f=e[u];bn[f]===void 0&&(bn[f]=u)}}}}var In=typeof Uint8Array=="function";function Wn(o){return In&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ne=0,We=0;function sn(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Cn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Wn(d)?d:typeof d=="string"?Cn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ue(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Ce(this,o)}function Ce(o,d){o.h=sn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function At(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,At(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,At(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,At(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,At(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return At(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw _t();return At(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function we(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function $e(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Ce(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Ue(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,At(o);break t}throw _t()}break;case 1:o=o.g,o.g+=8,At(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,At(o));break;case 5:o=o.g,o.g+=4,At(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Ue(o.h,o.j)}}var je=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Vn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(o,d){Object.isFrozen(o)||(ln?o[ln]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function cn(o){var d;return ln?d=o[ln]:d=o.N,d==null?0:d}function ve(o){return _e(o,1),o}function Fe(o){return Array.isArray(o)?!!(cn(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");_e(o,2)}function re(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var Qe=Object.freeze(ve([]));function te(o){if(Fe(o.m))throw Error("Cannot mutate an immutable Message")}var zt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ct(o,d,g,e){e=e===void 0?!1:e,te(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=Qe),Fe(o.m)?g&&(Ge(u),Object.freeze(u)):(u===Qe||Fe(u))&&(u=ve(u.slice()),Ct(o,d,u,e)),u}function ie(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Ye(o,d,g,e){o.j||(o.j={});var u=Fe(o.m),f=o.j[g];if(!f){e=Vt(o,g,!0,e===void 0?!1:e),f=[],u=u||Fe(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),u&&Ge(f[t].m);u&&(Ge(f),Object.freeze(f)),o.j[g]=f}return f}function ee(o,d,g,e,u){var f=f===void 0?!1:f;return te(o),f=Ye(o,g,d,f),g=e||new g,o=Vt(o,d),u!=null?(f.splice(u,0,g),o.splice(u,0,g.m)):(f.push(g),o.push(g.m)),g}function oe(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Wn(o))return En(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:In&&d instanceof Uint8Array?En(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ce;return d=d===void 0?St:d,ae(o,d)}function Pt(o,d){if(o!=null){if(Array.isArray(o))o=ae(o,d);else if(re(o)){var g={},e;for(e in o)g[e]=Pt(o[e],d);o=g}else o=d(o);return o}}function ae(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=Pt(g[e],d);return Array.isArray(o)&&cn(o)&1&&ve(g),g}function ce(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Wn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=He),He=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],re(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=Qe;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function qe(){me.apply(this,arguments)}if(pt(qe,me),zt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(o,d,g){if(g){var e={},u;for(u in g){var f=g[u],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(c){return function(a,b,I){return c.F(a,b,I,c.U)}}(e)):f.ca?(e.T=Be(f.X.g,f.ca),t=function(c){return function(a,b,I){return c.F(a,b,I,c.T)}}(e)):t=e.F,f.ha=t),t(d,o,f.X),e={F:e.F,U:e.U,T:e.T}}}Vn(d,o)}var yn=Symbol();function Le(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function en(o){var d=o[yn];if(!d){var g=m(o);d=function(e,u){return W(e,u,g)},o[yn]=d}return d}function On(o){var d=o.aa;if(d)return en(d);if(d=o.ka)return Le(o.X.g,d,o.ca)}function nn(o){var d=On(o),g=o.X,e=o.fa.O;return d?function(u,f){return e(u,f,g,d)}:function(u,f){return e(u,f,g)}}function Ne(o,d,g,e,u,f){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],I=o[t++];Array.isArray(I)?u(d,g,a,c,b,I):f(d,g,a,c,b,I);break;case 4:f(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var Zn=Symbol();function Sn(o){var d=o[Zn];if(!d){var g=un(o);d=function(e,u){return k(e,u,g)},o[Zn]=d}return d}function Be(o,d){var g=o[Zn];return g||(g=function(e,u){return fn(e,u,d)},o[Zn]=g),g}var kn=Symbol();function rn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function Tn(o,d,g,e,u){var f=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,f)})}function An(o,d,g,e,u,f){var t=Be(e,f),c=g.P;o.push(d,function(a,b,I){return c(a,b,I,e,t)})}function un(o){var d=o[kn];return d||Ne(o,o[kn]=[],rn,vn,Tn,An)}var wn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(f,t,c){return u(f,t,c,e)}:u}function Fn(o,d,g,e,u,f){var t=g.O,c=en(u);o[d]=function(a,b,I){return t(a,b,I,e,c,f)}}function Hn(o,d,g,e,u,f,t){var c=g.O,a=Le(e,u,f);o[d]=function(b,I,Y){return c(b,I,Y,e,a,t)}}function m(o){var d=o[wn];return d||Ne(o,o[wn]={},_n,Qn,Fn,Hn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var f=g[0];f&&(f=f[e])&&(u=g[e]=nn(f))}if((!u||!u(d,o,e))&&(u=d,e=o,f=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=f===u?he||(he=new Uint8Array(0)):ze?t.slice(f,u):new Uint8Array(t.subarray(f,u)),(f=e.ba)?f.push(u):e.ba=[u]}}return o}function V(o,d,g){if(je.length){var e=je.pop();o&&(Ce(e.g,o),e.i=-1,e.h=-1),o=e}else o=new $e(o);try{return W(new d,o,m(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>je.length&&je.push(o)}}function k(o,d,g){for(var e=g.length,u=e%2==1,f=u?1:0;f<e;f+=2)(0,g[f+1])(d,o,g[f]);fn(o,d,u?g[0]:void 0)}function z(o,d){var g=new Pe;k(o,g,un(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,f=0;f<e;f++){var t=d[f];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var O=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],f=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,At(o),u=(e<<0|u<<8|f<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ct(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){we(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?ne=We=0:(We=0,ne=2147483648):isNaN(e)?(We=0,ne=2147483647):34028234663852886e22<e?(We=0,ne=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),We=0,ne=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,We=0,ne=(g<<31|d+127<<23|e&8388607)>>>0),g=ne,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,f=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],At(e),f|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],At(e),f|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],At(e),o|=(u&127)<<7*t+3;if(128>u)e=f>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw _t();return Ct(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){we(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ne=d,We=e,g=ne,d=We;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ct(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(we(o.g,8*g),o=o.g,g=d,0<=g)we(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,At(o),o=o.h;var f;if(Ln)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,I;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=o[u++])&192)!==128||((I=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|I&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=on(c,t),t.length=0);f=on(c,t)}return Ct(d,g,f),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var u=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)f[u++]=c;else{if(2048>c)f[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,f[u++]=c>>18|240,f[u++]=c>>12&63|128,f[u++]=c>>6&63|128,f[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}f[u++]=c>>12|224,f[u++]=c>>6&63|128}f[u++]=c&63|128}}d=f.subarray(0,u)}we(o.g,8*g+2),we(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=ee(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var f=o.g.g+e,t=f-g;if(0>=t&&(o.g.i=f,u(d,o),t=f-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=f,o.g.i=g,!0},function(o,d,g,e,u){if(d=Ye(d,e,g),d!=null)for(e=0;e<d.length;e++){var f=o;we(f.g,8*g+2);var t=f.g.end();Ie(f,t),t.push(f.h),f=t,u(d[e],o),t=o;var c=f.pop();for(c=t.h+t.g.length()-c;127<c;)f.push(c&127|128),c>>>=7,t.h++;f.push(c),t.h++}});function Nt(){qe.apply(this,arguments)}if(pt(Nt,qe),zt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Et(o){Nt.call(this,o)}pt(Et,Nt);function Tt(){return[1,bt,2,O,3,Rt,4,Rt]}function kt(o){Nt.call(this,o,-1,ue)}pt(kt,Nt),kt.prototype.addClassification=function(o,d){return ee(this,1,Et,o,d),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function pe(o){Nt.call(this,o)}pt(pe,Nt);function ge(){return[1,O,2,O,3,O,4,O,5,O]}function Je(o){Nt.call(this,o,-1,y)}pt(Je,Nt);function h(){return[1,Ut,pe,ge]}var y=[1];function v(o){Nt.call(this,o)}pt(v,Nt);function C(){return[1,O,2,O,3,O,4,O,5,O,6,rt]}var A=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],lt=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(E(A),E(_),E(M),E(q),E(lt),E(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
53
+ `+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),c=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:c},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(c,0)}t=e.j,f.useProgram(e.m),f.canvas.width=u.width,f.canvas.height=u.height,f.viewport(0,0,u.width,u.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(u.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Mt(e,u){return u+e}function xt(e,u){window[e]=u}function dt(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(f){u.addEventListener("load",function(){f()},!1),u.addEventListener("error",function(){f()},!1),document.body.appendChild(u)})}function Wt(){return gt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function It(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Mt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var f=u.next();!f.done;f=u.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(e){var u,f,t,c,a,b,I,F,L,U,j;return gt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Wt(),2)):Q.return();case 2:if(f=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),I=u.filter(function(D){return D.data===void 0}),F=Promise.all(b.map(function(D){var st=Z(e,D.url);if(D.path!==void 0){var ht=D.path;st=st.then(function(ft){return e.overrideFile(ht,ft),Promise.resolve(ft)})}return st})),L=Promise.all(I.map(function(D){return D.simd===void 0||D.simd&&f||!D.simd&&!f?dt(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ht;return gt(function(ft){if(ft.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ht=e,P(ft,D(st),2);ht.h=ft.h,ft.g=0})}),U=function(){return gt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,Z(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([L,F,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&f||!D.simd&&!f}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,B(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ft(e){var u,f,t,c,a,b,I,F;return gt(function(L){if(L.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return L.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){L.g=2;return}return e.P=e.g.graph.url,P(L,Z(e,e.g.graph.url),3)}for(L.g!=2&&(u=L.h,e.i.loadGraph(u)),f=T(Object.keys(e.B)),t=f.next();!t.done;t=f.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())I=b.value,J(e,I);F=e.j,e.j={},e.setOptions(F),L.g=0})}i.reset=function(){var e=this;return gt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var f=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),I=b.next();!I.done;a={K:a.K,L:a.L},I=b.next()){var F=I.value;F in this.j&&this.j[F]===e[F]||(this.j[F]=e[F],I=u[F],I!==void 0&&(I.onChange&&(a.K=I.onChange,a.L=e[F],t.push(function(L){return function(){var U;return gt(function(j){if(j.g==1)return P(j,L.K(L.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),I.graphOptionXref&&(F={valueNumber:I.type===1?e[F]:0,valueBoolean:I.type===0?e[F]:!1,valueString:I.type===2?e[F]:""},I=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),I.graphOptionXref),F),c.push(I))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,f,t,c,a,b,I;return gt(function(F){switch(F.g){case 1:if(!e.o)return F.return();if(!e.v){F.g=2;break}u=T(e.v),f=u.next();case 3:if(f.done){F.g=5;break}return t=f.value,P(F,t(),4);case 4:f=u.next(),F.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())I=b.value,c.push_back(I);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,F.g=0}})}i.initialize=function(){var e=this;return gt(function(u){return u.g==1?P(u,Yt(e),2):u.g!=3?P(u,Ft(e),3):P(u,l(e),0)})};function Z(e,u){var f,t;return gt(function(c){return u in e.F?c.return(e.F[u]):(f=e.locateFile(u,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var f=this,t,c,a,b,I,F,L,U,j;return gt(function(Q){switch(Q.g){case 1:return f.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,f.C,2)):Q.return();case 2:return P(Q,f.initialize(),3);case 3:for(c=new f.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(I=b.value,F=f.g.inputs[I]){t:{var D=e[I];switch(F.type){case"video":var st=f.m[F.stream];if(st||(st=new E(f.h,f.D),f.m[F.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ht=D.videoWidth,ft=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ht=D.naturalWidth,ft=D.naturalHeight):(ht=D.width,ft=D.height);ft={glName:st.l,width:ht,height:ft},ht=st.g,ht.canvas.width=ft.width,ht.canvas.height=ft.height,ht.activeTexture(ht.TEXTURE0),st.h.bindTexture2d(st.l),ht.texImage2D(ht.TEXTURE_2D,0,ht.RGBA,ht.RGBA,ht.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=ft;break t;case"detections":for(st=f.m[F.stream],st||(st=new yt(f.h),f.m[F.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),ft=0;ft<D.length;++ft){ht=D[ft];var Gt=st.data,vt=Gt.setBoundingBox,Kt=ft,le=ht.T,ce=new wt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=rn(ce,Dt),vt.call(Gt,Kt,le),ht.O)for(Gt=0;Gt<ht.O.length;++Gt){ce=ht.O[Gt];var ke=!!ce.visibility;vt=st.data,Kt=vt.addNormalizedLandmark,le=ft,ce=Object.assign(Object.assign({},ce),{visibility:ke?ce.visibility:0}),ke=new z,St(ke,1,ce.x),St(ke,2,ce.y),St(ke,3,ce.z),ce.visibility&&St(ke,4,ce.visibility),ce=rn(ke,bt),Kt.call(vt,le,ce)}if(ht.M)for(Gt=0;Gt<ht.M.length;++Gt)vt=st.data,Kt=vt.addClassification,le=ft,ce=ht.M[Gt],ke=new Tn,St(ke,2,ce.score),ce.index&&St(ke,1,ce.index),ce.label&&St(ke,3,ce.label),ce.displayName&&St(ke,4,ce.displayName),ce=rn(ke,p),Kt.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(L=st,U=F.stream,F.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},L),{stream:U,timestamp:t}));break;case"detections":j=L,j.stream=U,j.timestamp=t,c.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+F.type+"'")}}return f.i.send(c),P(Q,f.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,f){var t,c,a,b,I,F,L,U,j,Q,D,st,ht,ft;return gt(function(Gt){switch(Gt.g){case 1:if(!f)return Gt.return(u);for(t={},c=0,a=T(Object.keys(f)),b=a.next();!b.done;b=a.next())I=b.value,F=f[I],typeof F!="string"&&F.type==="texture"&&u[F.stream]!==void 0&&++c;1<c&&(e.G=!1),L=T(Object.keys(f)),b=L.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return ht=t,ft=U,P(Gt,w(e,U,u[j]),14);if(Q=u[j.stream],j.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),Kt=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],ke=0;ke<vt.size();++ke){var Rn=zn(vt.get(ke),wt,ae);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:de(Rn,6,0)},O:K(Kt.get(ke)),M:Y(zn(le.get(ke),V,O))},ce.push(Rn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(j.type==="proto_list"){if(Q){for(vt=Array(Q.size()),Kt=0;Kt<Q.size();Kt++)vt[Kt]=Q.get(Kt);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(j.type==="float_list"){t[U]=Q,Gt.g=7;break}if(j.type==="proto"){t[U]=Q,Gt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return D=e.s[U],D||(D=new E(e.h,e.D),e.s[U]=D),P(Gt,et(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),Gt.g=3;break;case 14:ht[ft]=Gt.h;case 3:b=L.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function w(e,u,f){var t;return gt(function(c){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?c.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new E(e.h,e.D),e.s[u]=t),c.return(et(t,f,e.G))):c.return(void 0)})}function J(e,u){for(var f=u.name||"$",t=[].concat(B(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(I){for(var F={},L=0;L<u.wants.length;++L)F[t[L]]=I.get(L);var U=e.listeners[f];U&&(e.C=x(e,F,u.outs).then(function(j){j=U(j);for(var Q=0;Q<u.wants.length;++Q){var D=F[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=zn(e,y,C);var u=e.getMesh();if(!u)return e;var f=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return f};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:K},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:K},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:K},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:K},ea:{type:"proto",stream:"world_landmarks",transform:K},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(f){var t,c,a,b;return gt(function(I){if(I.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(I,fetch(a),3)}return I.g!=2?P(I,I.h.arrayBuffer(),2):(b=I.h,u.g.overrideFile(c,b),P(I,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return gt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return gt(function(f){return P(f,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ht("FACEMESH_LIPS",M),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",A),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",lt),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",G),Ht("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<f;a++)c.push(Array(u));for(a=0;a<f;a++)for(var b=0;b<u;b++){var I=e.getLayout()===1?a*u+b:b*f+a;c[a][b]=t[I]}return c}),Ht("VERSION","0.5.1635989137")}).call(fi);const mi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function m(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var X=m(this);function S(o,d){if(d)t:{var g=X;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}S("Symbol",function(o){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(f||"")+"_"+u++,f)}function g(f,t){this.g=f,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),S("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=X[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return o});function H(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function B(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var nt=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=ut;function mt(o,d){if(o.prototype=nt(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function $e(o){this.g=new Bt,this.h=o}function ze(o,d){kt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),jt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var f=u.value}catch(t){return o.g.i=null,ee(o.g,t),jt(o)}return o.g.i=null,e.call(o.g,f),jt(o)}function jt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Nn(o){this.next=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=jt(o)),d},this.throw=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=jt(o)),d},this.return=function(d){return ze(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(f,u)}f(o.next())})}function gt(o){return ne(new Nn(new $e(o)))}S("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=X.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(I){a||(a=!0,b.call(c,I))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=X.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=X.CustomEvent,c=X.Event,a=X.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=X.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)f.h(this.g[t]);this.g=null}};var f=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(L,U){return typeof L=="function"?function(j){try{b(L(j))}catch(Q){I(Q)}}:U}var b,I,F=new d(function(L,U){b=L,I=U});return this.M(a(t,b),a(c,I)),F},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),I=b.next();!I.done;I=b.next())e(I.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,I){function F(j){return function(Q){L[j]=Q,U--,U==0&&b(L)}}var L=[],U=0;do L.push(void 0),U++,e(a.value).M(F(L.length-1),I),a=c.next();while(!a.done)})},d});function qe(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var f=g++;return{value:d(f,o[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};S("Object.assign",function(o){return o||jn}),S("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),S("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var f=e[g];if(f===d||Object.is(f,d))return!0}return!1}}),S("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),S("Array.prototype.keys",function(o){return o||function(){return qe(this,function(d){return d})}});var Re=this||self;function Ht(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function we(){throw Error("Invalid UTF8")}function ln(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Ln=typeof TextDecoder<"u",xn,Jn=typeof TextEncoder<"u",hn={},bn=null;function Un(o){var d;d===void 0&&(d=0),Ke(),d=hn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,f=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[f++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[f]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Cn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return Oe(o,function(f){e[u++]=f}),u!==g?e.subarray(0,u):e}function Oe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),I=bn[b];if(I!=null)return I;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ke();for(var e=0;;){var u=g(-1),f=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ke(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));hn[g]=e;for(var u=0;u<e.length;u++){var f=e[u];bn[f]===void 0&&(bn[f]=u)}}}}var In=typeof Uint8Array=="function";function Wn(o){return In&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Cn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Wn(d)?d:typeof d=="string"?Cn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Ce(this,o)}function Ce(o,d){o.h=cn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function At(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,At(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,At(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,At(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,At(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return At(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return At(o),e}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Ye(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function tn(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,zt.length?(g=zt.pop(),d&&(g.v=d.v),o&&Ce(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,At(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,At(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,At(o));break;case 5:o=o.g,o.g+=4,At(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Be(o.h,o.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Vn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(o,d){Object.isFrozen(o)||(un?o[un]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function an(o){var d;return un?d=o[un]:d=o.N,d==null?0:d}function ve(o){return Qe(o,1),o}function Te(o){return Array.isArray(o)?!!(an(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");Qe(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var De=Object.freeze(ve([]));function qt(o){if(Te(o.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ct(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=De),Te(o.m)?g&&(Ge(u),Object.freeze(u)):(u===De||Te(u))&&(u=ve(u.slice()),Ct(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Fe(o,d,g,e){o.j||(o.j={});var u=Te(o.m),f=o.j[g];if(!f){e=Vt(o,g,!0,e===void 0?!1:e),f=[],u=u||Te(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),u&&Ge(f[t].m);u&&(Ge(f),Object.freeze(f)),o.j[g]=f}return f}function te(o,d,g,e,u){var f=f===void 0?!1:f;return qt(o),f=Fe(o,g,d,f),g=e||new g,o=Vt(o,d),u!=null?(f.splice(u,0,g),o.splice(u,0,g.m)):(f.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Wn(o))return Un(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:In&&d instanceof Uint8Array?Un(d):null,(o.L=d)||""}}}return o}function ct(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&an(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ct(o):o)}function St(o){return Wn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=He),He=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=De}}me.prototype.toJSON=function(){return ct(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function en(){me.apply(this,arguments)}if(mt(en,me),Pt){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(o,d,g){if(g){var e={},u;for(u in g){var f=g[u],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(c){return function(a,b,I){return c.F(a,b,I,c.U)}}(e)):f.ca?(e.T=Me(f.X.g,f.ca),t=function(c){return function(a,b,I){return c.F(a,b,I,c.T)}}(e)):t=e.F,f.ha=t),t(d,o,f.X),e={F:e.F,U:e.U,T:e.T}}}Vn(d,o)}var yn=Symbol();function Le(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function rn(o){var d=o[yn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[yn]=d}return d}function zn(o){var d=o.aa;if(d)return rn(d);if(d=o.ka)return Le(o.X.g,d,o.ca)}function on(o){var d=zn(o),g=o.X,e=o.fa.O;return d?function(u,f){return e(u,f,g,d)}:function(u,f){return e(u,f,g)}}function Ne(o,d,g,e,u,f){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],I=o[t++];Array.isArray(I)?u(d,g,a,c,b,I):f(d,g,a,c,b,I);break;case 4:f(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var Zn=Symbol();function Sn(o){var d=o[Zn];if(!d){var g=dn(o);d=function(e,u){return k(e,u,g)},o[Zn]=d}return d}function Me(o,d){var g=o[Zn];return g||(g=function(e,u){return mn(e,u,d)},o[Zn]=g),g}var En=Symbol();function sn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function wn(o,d,g,e,u){var f=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,f)})}function An(o,d,g,e,u,f){var t=Me(e,f),c=g.P;o.push(d,function(a,b,I){return c(a,b,I,e,t)})}function dn(o){var d=o[En];return d||Ne(o,o[En]=[],sn,vn,wn,An)}var Yn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(f,t,c){return u(f,t,c,e)}:u}function Tn(o,d,g,e,u,f){var t=g.O,c=rn(u);o[d]=function(a,b,I){return t(a,b,I,e,c,f)}}function Hn(o,d,g,e,u,f,t){var c=g.O,a=Le(e,u,f);o[d]=function(b,I,F){return c(b,I,F,e,a,t)}}function p(o){var d=o[Yn];return d||Ne(o,o[Yn]={},_n,Qn,Tn,Hn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var f=g[0];f&&(f=f[e])&&(u=g[e]=on(f))}if((!u||!u(d,o,e))&&(u=d,e=o,f=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=f===u?he||(he=new Uint8Array(0)):Pe?t.slice(f,u):new Uint8Array(t.subarray(f,u)),(f=e.ba)?f.push(u):e.ba=[u]}}return o}function V(o,d,g){if(je.length){var e=je.pop();o&&(Ce(e.g,o),e.i=-1,e.h=-1),o=e}else o=new tn(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>je.length&&je.push(o)}}function k(o,d,g){for(var e=g.length,u=e%2==1,f=u?1:0;f<e;f+=2)(0,g[f+1])(d,o,g[f]);mn(o,d,u?g[0]:void 0)}function O(o,d){var g=new _e;k(o,g,dn(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,f=0;f<e;f++){var t=d[f];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var z=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],f=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,At(o),u=(e<<0|u<<8|f<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ct(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Ye(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,f=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],At(e),f|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],At(e),f|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],At(e),o|=(u&127)<<7*t+3;if(128>u)e=f>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ct(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Ye(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ct(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Ye(o.g,8*g),o=o.g,g=d,0<=g)Ye(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,At(o),o=o.h;var f;if(Ln)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,I;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?we():(b=o[u++],194>a||(b&192)!==128?(u--,we()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?we():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=o[u++])&192)!==128?(u--,we()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?u>=e-2?we():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=o[u++])&192)!==128||((I=o[u++])&192)!==128?(u--,we()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|I&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):we(),8192<=t.length&&(c=ln(c,t),t.length=0);f=ln(c,t)}return Ct(d,g,f),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Jn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var u=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)f[u++]=c;else{if(2048>c)f[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,f[u++]=c>>18|240,f[u++]=c>>12&63|128,f[u++]=c>>6&63|128,f[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}f[u++]=c>>12|224,f[u++]=c>>6&63|128}f[u++]=c&63|128}}d=f.subarray(0,u)}Ye(o.g,8*g+2),Ye(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Et=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var f=o.g.g+e,t=f-g;if(0>=t&&(o.g.i=f,u(d,o),t=f-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=f,o.g.i=g,!0},function(o,d,g,e,u){if(d=Fe(d,e,g),d!=null)for(e=0;e<d.length;e++){var f=o;Ye(f.g,8*g+2);var t=f.g.end();Ie(f,t),t.push(f.h),f=t,u(d[e],o),t=o;var c=f.pop();for(c=t.h+t.g.length()-c;127<c;)f.push(c&127|128),c>>>=7,t.h++;f.push(c),t.h++}});function Nt(){en.apply(this,arguments)}if(mt(Nt,en),Pt){var $t={};Object.defineProperties(Nt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function Jt(o){Nt.call(this,o)}mt(Jt,Nt);function wt(){return[1,bt,2,z,3,Rt,4,Rt]}function Ut(o){Nt.call(this,o,-1,ae)}mt(Ut,Nt),Ut.prototype.addClassification=function(o,d){return te(this,1,Jt,o,d),this};function Dt(){return[1,Et,Jt,wt]}var ae=[1];function pe(o){Nt.call(this,o)}mt(pe,Nt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function Je(o){Nt.call(this,o,-1,y)}mt(Je,Nt);function h(){return[1,Et,pe,ge]}var y=[1];function v(o){Nt.call(this,o)}mt(v,Nt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,rt]}var M=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],A=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],lt=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],G=[].concat(B(M),B(_),B(A),B(q),B(lt),B(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
54
54
 
55
- `+o.getShaderInfoLog(g));return g}function F(o){return Ye(o,Et,1).map(function(d){return{index:oe(d,1),ga:ie(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function N(o){return{x:ie(o,1),y:ie(o,2),z:ie(o,3),visibility:fe(o,4)!=null?ie(o,4):void 0}}function K(o,d){this.h=o,this.g=d,this.l=0}function B(o,d,g){return nt(o,d),typeof o.g.canvas.transferToImageBitmap=="function"?Promise.resolve(o.g.canvas.transferToImageBitmap()):g?Promise.resolve(o.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(o.g.canvas):(o.i===void 0&&(o.i=document.createElement("canvas")),new Promise(function(e){o.i.height=o.g.canvas.height,o.i.width=o.g.canvas.width,o.i.getContext("2d",{}).drawImage(o.g.canvas,0,0,o.g.canvas.width,o.g.canvas.height),e(o.i)}))}function nt(o,d){var g=o.g;if(o.o===void 0){var e=R(g,`
55
+ `+o.getShaderInfoLog(g));return g}function Y(o){return Fe(o,Jt,1).map(function(d){return{index:se(d,1),ga:oe(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function N(o){return{x:oe(o,1),y:oe(o,2),z:oe(o,3),visibility:fe(o,4)!=null?oe(o,4):void 0}}function K(o,d){this.h=o,this.g=d,this.l=0}function E(o,d,g){return et(o,d),typeof o.g.canvas.transferToImageBitmap=="function"?Promise.resolve(o.g.canvas.transferToImageBitmap()):g?Promise.resolve(o.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(o.g.canvas):(o.i===void 0&&(o.i=document.createElement("canvas")),new Promise(function(e){o.i.height=o.g.canvas.height,o.i.width=o.g.canvas.width,o.i.getContext("2d",{}).drawImage(o.g.canvas,0,0,o.g.canvas.width,o.g.canvas.height),e(o.i)}))}function et(o,d){var g=o.g;if(o.o===void 0){var e=R(g,`
56
56
  attribute vec2 aVertex;
57
57
  attribute vec2 aTex;
58
58
  varying vec2 vTex;
@@ -67,43 +67,43 @@
67
67
  gl_FragColor = texture2D(sampler0, vTex);
68
68
  }`,1),f=g.createProgram();if(g.attachShader(f,e),g.attachShader(f,u),g.linkProgram(f),!g.getProgramParameter(f,g.LINK_STATUS))throw Error(`Could not compile WebGL program.
69
69
 
70
- `+g.getProgramInfoLog(f));e=o.o=f,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Gt(o,d){return d+o}function Bt(o,d){window[o]=d}function xt(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return gt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Xt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Gt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=w(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,f,t,c,a,b,I,Y;return gt(function(L){switch(L.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(L,ht(),2)):L.return();case 2:if(g=L.h,typeof window=="object")return Bt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Bt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(o,U.url);if(U.path!==void 0){var Q=U.path;j=j.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return j})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,j,Q;return gt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(j),2);Q.h=D.h,D.g=0})}),I=function(){return gt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(L,Promise.all([b,a,I]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,E(e)),u=o,P(L,createMediapipeSolutionsWasm(Module),6);case 6:u.h=L.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,f=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(f),L.g=4;break;case 7:if(o.l=document.createElement("canvas"),Y=o.l.getContext("webgl2",{}),!Y&&(Y=o.l.getContext("webgl",{}),!Y))return alert("Failed to create WebGL canvas context when passing video frame."),L.return();o.G=Y,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,L.g=0}})}function wt(o){var d,g,e,u,f,t,c,a;return gt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=w(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(f=w(o.g.listeners),t=f.next();!t.done;t=f.next())c=t.value,T(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return gt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],f={},t=w(Object.keys(o)),c=t.next();!c.done;f={R:f.R,S:f.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(f.R=c.onChange,f.S=o[a],e.push(function(b){return function(){var I;return gt(function(Y){if(Y.g==1)return P(Y,b.R(b.S),2);I=Y.h,I===!0&&(g.s=!0),Y.g=0})}}(f))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Yt(o){var d,g,e,u,f,t,c;return gt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=w(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,f=w(o.B),t=f.next();!t.done;t=f.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return gt(function(d){return d.g==1?P(d,It(o),2):d.g!=3?P(d,wt(o),3):P(d,Yt(o),0)})};function l(o,d){var g,e;return gt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(f){return f.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,f,t,c,a,b,I,Y;return gt(function(L){switch(L.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(L,g.D,2)):L.return();case 2:return P(L,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,f=w(Object.keys(o)),t=f.next();!t.done;t=f.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var j=g.o[a.stream];if(j||(j=new K(g.h,g.G),g.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:j.l,width:Q,height:D},Q=j.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),j.h.bindTexture2d(j.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=D;break t;case"detections":for(j=g.o[a.stream],j||(j=new $(g.h),g.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=j.data,ft=st.setBoundingBox,mt=D,vt=Q.boundingBox,Zt=new v;if(Ct(Zt,1,vt.xCenter),Ct(Zt,2,vt.yCenter),Ct(Zt,3,vt.height),Ct(Zt,4,vt.width),Ct(Zt,5,vt.rotation),Ct(Zt,6,vt.rectId),vt=z(Zt,C),ft.call(st,mt,vt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){Zt=Q.landmarks[st];var Kt=!!Zt.visibility;ft=j.data,mt=ft.addNormalizedLandmark,vt=D,Zt=Object.assign(Object.assign({},Zt),{visibility:Kt?Zt.visibility:0}),Kt=new pe,Ct(Kt,1,Zt.x),Ct(Kt,2,Zt.y),Ct(Kt,3,Zt.z),Zt.visibility&&Ct(Kt,4,Zt.visibility),Zt=z(Kt,ge),mt.call(ft,vt,Zt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=j.data,mt=ft.addClassification,vt=D,Zt=Q.V[st],Kt=new Et,Ct(Kt,2,Zt.ga),Zt.index&&Ct(Kt,1,Zt.index),Zt.label&&Ct(Kt,3,Zt.label),Zt.displayName&&Ct(Kt,4,Zt.displayName),Zt=z(Kt,Tt),mt.call(ft,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,I=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:I,timestamp:e}));break;case"detections":Y=b,Y.stream=I,Y.timestamp=e,u.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(L,g.D,4);case 4:u.delete(),L.g=0}})};function Z(o,d,g){var e,u,f,t,c,a,b,I,Y,L,U,j,Q,D;return gt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,f=w(Object.keys(g)),t=f.next();!t.done;t=f.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=w(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(I=t.value,Y=g[I],typeof Y=="string")return Q=e,D=I,P(st,x(o,I,d[Y]),14);if(L=d[Y.stream],Y.type==="detection_list"){if(L){for(var ft=L.getRectList(),mt=L.getLandmarksList(),vt=L.getClassificationsList(),Zt=[],Kt=0;Kt<ft.size();++Kt){var se=V(ft.get(Kt),v,C);se={boundingBox:{xCenter:ie(se,1),yCenter:ie(se,2),height:ie(se,3),width:ie(se,4),rotation:ie(se,5,0),rectId:oe(se,6)},landmarks:Ye(V(mt.get(Kt),Je,h),pe,1).map(N),V:F(V(vt.get(Kt),kt,Qt))},Zt.push(se)}ft=Zt}else ft=[];e[I]=ft,st.g=7;break}if(Y.type==="proto_list"){if(L){for(ft=Array(L.size()),mt=0;mt<L.size();mt++)ft[mt]=L.get(mt);L.delete()}else ft=[];e[I]=ft,st.g=7;break}if(L===void 0){st.g=3;break}if(Y.type==="float_list"){e[I]=L,st.g=7;break}if(Y.type==="proto"){e[I]=L,st.g=7;break}if(Y.type!=="texture")throw Error("Unknown output config type: '"+Y.type+"'");return U=o.u[I],U||(U=new K(o.h,o.G),o.u[I]=U),P(st,B(U,L,o.I),13);case 13:j=st.h,e[I]=j;case 7:Y.transform&&e[I]&&(e[I]=Y.transform(e[I])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function x(o,d,g){var e;return gt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new K(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function T(o,d){for(var g=d.name||"$",e=[].concat(E(d.wants)),u=new o.h.StringList,f=w(d.wants),t=f.next();!t.done;t=f.next())u.push_back(t.value);f=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var I=o.listeners[g];I&&(o.D=Z(o,a,d.outs).then(function(Y){Y=I(Y);for(var L=0;L<d.wants.length;++L){var U=a[e[L]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}Y&&(o.D=Y)}))}}),o.i.attachMultiListener(u,f),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Xt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Xt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var f,t,c,a,b,I;return gt(function(Y){switch(Y.g){case 1:f=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=w(f),c=t.next();case 2:if(c.done){Y.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(Y,l(d.g,a),5);case 5:I=Y.h,d.g.overrideFile(b,I),c=t.next(),Y.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",Y.return(!0)}})}},minDetectionConfidence:e}})}i=J.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return gt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return gt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ht("FaceDetection",J),Ht("FACEDETECTION_LIPS",A),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",M),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",lt),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",X),Ht("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("VERSION","0.4.1646425229")}).call(fi);const mi={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,v){return h==Array.prototype||h==Object.prototype||(h[y]=v.value),h};function p(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var v=h[y];if(v&&v.Math==Math)return v}throw Error("Cannot find global object")}var G=p(this);function S(h,y){if(y)t:{var v=G;h=h.split(".");for(var C=0;C<h.length-1;C++){var A=h[C];if(!(A in v))break t;v=v[A]}h=h[h.length-1],C=v[h],y=y(C),y!=C&&y!=null&&r(v,h,{configurable:!0,writable:!0,value:y})}}S("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new v(C+(_||"")+"_"+A++,_)}function v(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;v.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",A=0;return y}),S("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),v=0;v<y.length;v++){var C=G[y[v]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function w(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function E(h){if(!(h instanceof Array)){h=w(h);for(var y,v=[];!(y=h.next()).done;)v.push(y.value);h=v}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=ct;function pt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var v in y)if(v!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,v);C&&Object.defineProperty(h,v,C)}else h[v]=y[v];h.ea=y.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Mt.prototype.o=function(h){this.h=h};function qt(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Mt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,v){return h.g=v,{value:y}}function De(h){this.g=new Mt,this.h=h}function an(h,y){Jt(h.g);var v=h.g.i;return v?Ve(h,"return"in v?v.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),Dt(h))}function Ve(h,y,v,C){try{var A=y.call(h.g.i,v);if(!(A instanceof Object))throw new TypeError("Iterator result "+A+" is not an object");if(!A.done)return h.g.l=!1,A;var _=A.value}catch(M){return h.g.i=null,qt(h.g,M),Dt(h)}return h.g.i=null,C.call(h.g,_),Dt(h)}function Dt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(v){h.g.h=void 0,qt(h.g,v)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Kn(h){this.next=function(y){return Jt(h.g),h.g.i?y=Ve(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=Dt(h)),y},this.throw=function(y){return Jt(h.g),h.g.i?y=Ve(h,h.g.i.throw,y,h.g.o):(qt(h.g,y),y=Dt(h)),y},this.return=function(y){return an(h,y)},this[Symbol.iterator]=function(){return this}}function de(h,y){return y=new Kn(new De(y)),at&&h.prototype&&at(y,h.prototype),y}function gt(h,y){h instanceof String&&(h+="");var v=0,C=!1,A={next:function(){if(!C&&v<h.length){var _=v++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return A[Symbol.iterator]=function(){return A},A}var pn=typeof Object.assign=="function"?Object.assign:function(h,y){for(var v=1;v<arguments.length;v++){var C=arguments[v];if(C)for(var A in C)Object.prototype.hasOwnProperty.call(C,A)&&(h[A]=C[A])}return h};S("Object.assign",function(h){return h||pn}),S("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(lt){q.reject(lt)}}function v(){this.g=null}function C(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;v.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var A=G.setTimeout;v.prototype.i=function(M){A(M,0)},v.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var lt=M[q];M[q]=null;try{lt()}catch(s){this.j(s)}}}this.g=null},v.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){lt||(lt=!0,s.call(q,X))}}var q=this,lt=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(lt){this.l(lt);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;A(function(){if(M.B()){var q=G.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=G.CustomEvent,q=G.Event,lt=G.dispatchEvent;return typeof lt>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=G.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,lt(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new v;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var lt=this.j();try{M.call(q,lt.resolve,lt.reject)}catch(s){lt.reject(s)}},y.prototype.then=function(M,q){function lt(F,N){return typeof F=="function"?function(K){try{s(F(K))}catch(B){X(B)}}:N}var s,X,R=new y(function(F,N){s=F,X=N});return this.J(lt(M,s),lt(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function lt(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(lt):this.g.push(lt),this.o=!0},y.resolve=C,y.reject=function(M){return new y(function(q,lt){lt(M)})},y.race=function(M){return new y(function(q,lt){for(var s=w(M),X=s.next();!X.done;X=s.next())C(X.value).J(q,lt)})},y.all=function(M){var q=w(M),lt=q.next();return lt.done?C([]):new y(function(s,X){function R(K){return function(B){F[K]=B,N--,N==0&&s(F)}}var F=[],N=0;do F.push(void 0),N++,C(lt.value).J(R(F.length-1),X),lt=q.next();while(!lt.done)})},y}),S("Object.is",function(h){return h||function(y,v){return y===v?y!==0||1/y===1/v:y!==y&&v!==v}}),S("Array.prototype.includes",function(h){return h||function(y,v){var C=this;C instanceof String&&(C=String(C));var A=C.length;for(v=v||0,0>v&&(v=Math.max(v+A,0));v<A;v++){var _=C[v];if(_===y||Object.is(_,y))return!0}return!1}}),S("String.prototype.includes",function(h){return h||function(y,v){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,v||0)!==-1}}),S("Array.prototype.keys",function(h){return h||function(){return gt(this,function(y){return y})}});var jn=this||self;function Re(h,y){h=h.split(".");var v=jn;h[0]in v||typeof v.execScript>"u"||v.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?v[C]&&v[C]!==Object.prototype[C]?v=v[C]:v=v[C]={}:v[C]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,on=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(h){if(Ln)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var v=0,C=new Uint8Array(3*h.length),A=0;A<h.length;A++){var _=h.charCodeAt(A);if(128>_)C[v++]=_;else{if(2048>_)C[v++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&A<h.length){var M=h.charCodeAt(++A);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,C[v++]=_>>18|240,C[v++]=_>>12&63|128,C[v++]=_>>6&63|128,C[v++]=_&63|128;continue}else A--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[v++]=_>>12|224,C[v++]=_>>6&63|128}C[v++]=_&63|128}}h=C.subarray(0,v)}return h}var Nn={},dn=null;function bn(h,y){y===void 0&&(y=0),Oe(),y=Nn[y];for(var v=Array(Math.floor(h.length/3)),C=y[64]||"",A=0,_=0;A<h.length-2;A+=3){var M=h[A],q=h[A+1],lt=h[A+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|lt>>6],lt=y[lt&63],v[_++]=s+M+q+lt}switch(s=0,lt=C,h.length-A){case 2:s=h[A+1],lt=y[(s&15)<<2]||C;case 1:h=h[A],v[_]=y[h>>2]+y[(h&3)<<4|s>>4]+lt+C}return v.join("")}function En(h){var y=h.length,v=3*y/4;v%3?v=Math.floor(v):"=.".indexOf(h[y-1])!=-1&&(v="=.".indexOf(h[y-2])!=-1?v-2:v-1);var C=new Uint8Array(v),A=0;return Cn(h,function(_){C[A++]=_}),C.subarray(0,A)}function Cn(h,y){function v(lt){for(;C<h.length;){var s=h.charAt(C++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return lt}Oe();for(var C=0;;){var A=v(-1),_=v(0),M=v(64),q=v(64);if(q===64&&A===-1)break;y(A<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function Oe(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],v=0;5>v;v++){var C=h.concat(y[v].split(""));Nn[v]=C;for(var A=0;A<C.length;A++){var _=C[A];dn[_]===void 0&&(dn[_]=A)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(h,y,v){return y===v?In||(In=new Uint8Array(0)):Ke?h.slice(y,v):new Uint8Array(h.subarray(y,v))}var he=0,Se=0;function ze(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&ne(this,h)}function ne(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?En(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}ze.prototype.reset=function(){this.g=this.l};function We(h){for(var y=128,v=0,C=0,A=0;4>A&&128<=y;A++)y=h.h[h.g++],v|=(y&127)<<7*A;if(128<=y&&(y=h.h[h.g++],v|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(A=0;5>A&&128<=y;A++)y=h.h[h.g++],C|=(y&127)<<7*A+3;if(128>y)return h=v>>>0,y=C>>>0,(C=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),C?-h:h;h.m=!0}ze.prototype.i=function(){var h=this.h,y=h[this.g],v=y&127;return 128>y?(this.g+=1,v):(y=h[this.g+1],v|=(y&127)<<7,128>y?(this.g+=2,v):(y=h[this.g+2],v|=(y&127)<<14,128>y?(this.g+=3,v):(y=h[this.g+3],v|=(y&127)<<21,128>y?(this.g+=4,v):(y=h[this.g+4],v|=(y&15)<<28,128>y?(this.g+=5,v>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,v)))))},ze.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],v=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,v=(h<<0|y<<8|v<<16|C<<24)>>>0,h=2*(v>>31)+1,y=v>>>23&255,v&=8388607,y==255?v?NaN:1/0*h:y==0?h*Math.pow(2,-149)*v:h*Math.pow(2,y-150)*(v+Math.pow(2,23))};var sn=[];function Ue(){this.g=new Uint8Array(64),this.h=0}Ue.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Ue.prototype.length=function(){return this.h},Ue.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Wn(h,0,y)};function _t(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},v=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=v,y=this.o,sn.length?(v=sn.pop(),y&&(v.v=y.v),h&&ne(v,h),h=v):h=new ze(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var v=y&7;return v!=0&&v!=5&&v!=1&&v!=2&&v!=3&&v!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=v,!0)}function At(h){switch(h.h){case 0:if(h.h!=0)At(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?At(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)At(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?At(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}At(h)}while(1);break;default:h.j=!0}}function xe(h,y,v){var C=h.g.j,A=h.g.i(),_=h.g.g+A;if(h.g.j=_,v(y,h),v=_-h.g.g,v!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+A+" bytes, instead read "+(A-v)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=C,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var v=h.g;h.g+=y,h=h.h;var C;if(on)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(v,v+y));else{y=v+y;for(var A=[],_=null,M,q,lt;v<y;)M=h[v++],128>M?A.push(M):224>M?v>=y?A.push(65533):(q=h[v++],194>M||(q&192)!==128?(v--,A.push(65533)):A.push((M&31)<<6|q&63)):240>M?v>=y-1?A.push(65533):(q=h[v++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((C=h[v++])&192)!==128?(v--,A.push(65533)):A.push((M&15)<<12|(q&63)<<6|C&63)):244>=M?v>=y-2?A.push(65533):(q=h[v++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((C=h[v++])&192)!==128||((lt=h[v++])&192)!==128?(v--,A.push(65533)):(M=(M&7)<<18|(q&63)<<12|(C&63)<<6|lt&63,M-=65536,A.push((M>>10&1023)+55296,(M&1023)+56320))):A.push(65533),8192<=A.length&&(_=Ht(_,A),A.length=0);C=Ht(_,A)}return C}function we(h,y,v){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)v.push(y.call(h.g))}function $e(h,y){h.h==2?we(h,ze.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Ue}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function je(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var v=h.h,C=v.length,A=0,_=0;_<C;_++){var M=v[_];M.length!==0&&(y.set(M,A),A+=M.length)}return v=h.g,C=v.h,C!==0&&(y.set(v.g.subarray(0,C),A),v.h=0),h.h=[y],y}function Pe(h,y,v){if(v!=null){_t(h.g,8*y+5),h=h.g;var C=v;C=(v=0>C?1:0)?-C:C,C===0?0<1/C?he=Se=0:(Se=0,he=2147483648):isNaN(C)?(Se=0,he=2147483647):34028234663852886e22<C?(Se=0,he=(v<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(v<<31|C)>>>0):(y=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-y),C=Math.round(8388608*C),16777216<=C&&++y,Se=0,he=(v<<31|y+127<<23|C&8388607)>>>0),v=he,h.push(v>>>0&255),h.push(v>>>8&255),h.push(v>>>16&255),h.push(v>>>24&255)}}var Ie=typeof Uint8Array=="function";function Vn(h,y,v){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?v(h):ln(h,y,v):y(h)}function ln(h,y,v){if(Array.isArray(h)){for(var C=Array(h.length),A=0;A<h.length;A++)C[A]=Vn(h[A],y,v);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(A in h)C[A]=Vn(h[A],y,v);return C}function _e(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var cn={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,cn),h}var Fe;function Ge(h,y,v){var C=Fe;Fe=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||Ie&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(v)for(y=0;y<v.length;y++)h=v[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=re):(Qe(this),(C=this.i[h])?ve(C):this.i[h]=re)}var re=Object.freeze(ve([]));function Qe(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function te(h,y,v){return y===-1?null:(v===void 0?0:v)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function zt(h,y){var v=v===void 0?!1:v,C=te(h,y,v);return C==null&&(C=re),C===re&&(C=ve([]),Vt(h,y,C,v)),C}function hn(h){var y=zt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var v=0;v<y.length;v++)y[v]=+y[v];h.m[3]=!0}return y}function fe(h,y,v){return h=te(h,y),h==null?v:h}function Ct(h,y,v){return h=te(h,y),h=h==null?h:+h,h==null?v===void 0?0:v:h}function Vt(h,y,v,C){(C===void 0?0:C)||y>=h.l?(Qe(h),h.i[y]=v):h.h[y+h.j]=v}function ie(h,y,v){if(v===-1)return null;if(h.g||(h.g={}),!h.g[v]){var C=te(h,v,!1);C&&(h.g[v]=new y(C))}return h.g[v]}function Ye(h,y){h.g||(h.g={});var v=h.g[1];if(!v){var C=zt(h,1);v=[];for(var A=0;A<C.length;A++)v[A]=new y(C[A]);h.g[1]=v}return v}function ee(h,y,v){var C=C===void 0?!1:C;h.g||(h.g={});var A=v&&tt(v);h.g[y]=v,Vt(h,y,A,C)}function oe(h,y,v,C){var A=Ye(h,v);y=y||new v,h=zt(h,1),C!=null?(A.splice(C,0,y),h.splice(C,0,tt(y))):(A.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return ln(h,_e,bn)};function tt(h,y){if(h.g)for(var v in h.g){var C=h.g[v];if(Array.isArray(C))for(var A=0;A<C.length;A++)C[A]&&tt(C[A]);else C&&tt(C)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var v=0;v<h.length;v++)Ot(y,h[v])}}function ut(h,y){if(y.h==4)return!1;var v=y.m;return At(y),y.N||(y=Wn(y.g.h,v,y.g.g),(v=h.o)?v.push(y):h.o=[y]),!0}function Pt(h){Ge.call(this,h,-1,ce)}pt(Pt,Ge),Pt.prototype.getRows=function(){return te(this,1)},Pt.prototype.getCols=function(){return te(this,2)},Pt.prototype.getPackedDataList=function(){return hn(this)},Pt.prototype.getLayout=function(){return fe(this,4,0)};function ae(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 16:v=y.g.i(),Vt(h,2,v);break;case 29:case 26:$e(y,h.getPackedDataList());break;case 32:v=We(y.g),Vt(h,4,v);break;default:if(!ut(h,y))return h}return h}var ce=[3];function St(h,y){var v=void 0;return new(v||(v=Promise))(function(C,A){function _(lt){try{q(y.next(lt))}catch(s){A(s)}}function M(lt){try{q(y.throw(lt))}catch(s){A(s)}}function q(lt){lt.done?C(lt.value):new v(function(s){s(lt.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}pt(me,Ge);function He(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 21:v=jt(y),Vt(h,2,v);break;case 26:v=ye(y),Vt(h,3,v);break;case 34:v=ye(y),Vt(h,4,v);break;default:if(!ut(h,y))return h}return h}function qe(h){Ge.call(this,h,-1,tn)}pt(qe,Ge),qe.prototype.addClassification=function(h,y){return oe(this,h,me,y),this};var tn=[1];function fn(h){Ge.call(this,h)}pt(fn,Ge);function yn(h,y){for(;Ce(y);)switch(y.i){case 13:var v=jt(y);Vt(h,1,v);break;case 21:v=jt(y),Vt(h,2,v);break;case 29:v=jt(y),Vt(h,3,v);break;case 37:v=jt(y),Vt(h,4,v);break;case 45:v=jt(y),Vt(h,5,v);break;default:if(!ut(h,y))return h}return h}function Le(h){Ge.call(this,h,-1,On)}pt(Le,Ge);function en(h){t:{var y=new Le;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new fn,yn);oe(y,v,fn,void 0);break;default:if(!ut(y,h))break t}}return y}var On=[1];function nn(h){Ge.call(this,h)}pt(nn,Ge);function Ne(h){Ge.call(this,h,-1,Sn)}pt(Ne,Ge),Ne.prototype.getVertexType=function(){return fe(this,1,0)},Ne.prototype.getPrimitiveType=function(){return fe(this,2,0)},Ne.prototype.getVertexBufferList=function(){return hn(this)},Ne.prototype.getIndexBufferList=function(){return zt(this,4)};function Zn(h,y){for(;Ce(y);)switch(y.i){case 8:var v=We(y.g);Vt(h,1,v);break;case 16:v=We(y.g),Vt(h,2,v);break;case 29:case 26:$e(y,h.getVertexBufferList());break;case 32:case 34:v=y;var C=h.getIndexBufferList();v.h==2?we(v,ze.prototype.i,C):C.push(v.g.i());break;default:if(!ut(h,y))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}pt(Be,Ge),Be.prototype.getMesh=function(){return ie(this,Ne,1)},Be.prototype.getPoseTransformMatrix=function(){return ie(this,Pt,2)};function kn(h){t:{var y=new Be;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new Ne,Zn);ee(y,1,v);break;case 18:v=xe(h,new Pt,ae),ee(y,2,v);break;default:if(!ut(y,h))break t}}return y}function rn(h,y,v){if(v=h.createShader(v===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(v,y),h.compileShader(v),!h.getShaderParameter(v,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
70
+ `+g.getProgramInfoLog(f));e=o.o=f,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Mt(o,d){window[o]=d}function xt(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function dt(){return gt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,f,t,c,a,b,I,F;return gt(function(L){switch(L.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(L,dt(),2)):L.return();case 2:if(g=L.h,typeof window=="object")return Mt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Mt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(o,U.url);if(U.path!==void 0){var Q=U.path;j=j.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return j})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,j,Q;return gt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(j),2);Q.h=D.h,D.g=0})}),I=function(){return gt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(L,Promise.all([b,a,I]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,B(e)),u=o,P(L,createMediapipeSolutionsWasm(Module),6);case 6:u.h=L.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,f=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(f),L.g=4;break;case 7:if(o.l=document.createElement("canvas"),F=o.l.getContext("webgl2",{}),!F&&(F=o.l.getContext("webgl",{}),!F))return alert("Failed to create WebGL canvas context when passing video frame."),L.return();o.G=F,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,L.g=0}})}function Yt(o){var d,g,e,u,f,t,c,a;return gt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(f=T(o.g.listeners),t=f.next();!t.done;t=f.next())c=t.value,w(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return gt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],f={},t=T(Object.keys(o)),c=t.next();!c.done;f={R:f.R,S:f.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(f.R=c.onChange,f.S=o[a],e.push(function(b){return function(){var I;return gt(function(F){if(F.g==1)return P(F,b.R(b.S),2);I=F.h,I===!0&&(g.s=!0),F.g=0})}}(f))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ft(o){var d,g,e,u,f,t,c;return gt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,f=T(o.B),t=f.next();!t.done;t=f.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return gt(function(d){return d.g==1?P(d,It(o),2):d.g!=3?P(d,Yt(o),3):P(d,Ft(o),0)})};function l(o,d){var g,e;return gt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(f){return f.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,f,t,c,a,b,I,F;return gt(function(L){switch(L.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(L,g.D,2)):L.return();case 2:return P(L,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,f=T(Object.keys(o)),t=f.next();!t.done;t=f.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var j=g.o[a.stream];if(j||(j=new K(g.h,g.G),g.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:j.l,width:Q,height:D},Q=j.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),j.h.bindTexture2d(j.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=D;break t;case"detections":for(j=g.o[a.stream],j||(j=new $(g.h),g.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=j.data,ht=st.setBoundingBox,ft=D,Gt=Q.boundingBox,vt=new v;if(Ct(vt,1,Gt.xCenter),Ct(vt,2,Gt.yCenter),Ct(vt,3,Gt.height),Ct(vt,4,Gt.width),Ct(vt,5,Gt.rotation),Ct(vt,6,Gt.rectId),Gt=O(vt,C),ht.call(st,ft,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var Kt=!!vt.visibility;ht=j.data,ft=ht.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:Kt?vt.visibility:0}),Kt=new pe,Ct(Kt,1,vt.x),Ct(Kt,2,vt.y),Ct(Kt,3,vt.z),vt.visibility&&Ct(Kt,4,vt.visibility),vt=O(Kt,ge),ft.call(ht,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ht=j.data,ft=ht.addClassification,Gt=D,vt=Q.V[st],Kt=new Jt,Ct(Kt,2,vt.ga),vt.index&&Ct(Kt,1,vt.index),vt.label&&Ct(Kt,3,vt.label),vt.displayName&&Ct(Kt,4,vt.displayName),vt=O(Kt,wt),ft.call(ht,Gt,vt)}j=j.data;break t;default:j={}}}switch(b=j,I=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:I,timestamp:e}));break;case"detections":F=b,F.stream=I,F.timestamp=e,u.pushDetectionList(F);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(L,g.D,4);case 4:u.delete(),L.g=0}})};function Z(o,d,g){var e,u,f,t,c,a,b,I,F,L,U,j,Q,D;return gt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,f=T(Object.keys(g)),t=f.next();!t.done;t=f.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(I=t.value,F=g[I],typeof F=="string")return Q=e,D=I,P(st,x(o,I,d[F]),14);if(L=d[F.stream],F.type==="detection_list"){if(L){for(var ht=L.getRectList(),ft=L.getLandmarksList(),Gt=L.getClassificationsList(),vt=[],Kt=0;Kt<ht.size();++Kt){var le=V(ht.get(Kt),v,C);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Fe(V(ft.get(Kt),Je,h),pe,1).map(N),V:Y(V(Gt.get(Kt),Ut,Dt))},vt.push(le)}ht=vt}else ht=[];e[I]=ht,st.g=7;break}if(F.type==="proto_list"){if(L){for(ht=Array(L.size()),ft=0;ft<L.size();ft++)ht[ft]=L.get(ft);L.delete()}else ht=[];e[I]=ht,st.g=7;break}if(L===void 0){st.g=3;break}if(F.type==="float_list"){e[I]=L,st.g=7;break}if(F.type==="proto"){e[I]=L,st.g=7;break}if(F.type!=="texture")throw Error("Unknown output config type: '"+F.type+"'");return U=o.u[I],U||(U=new K(o.h,o.G),o.u[I]=U),P(st,E(U,L,o.I),13);case 13:j=st.h,e[I]=j;case 7:F.transform&&e[I]&&(e[I]=F.transform(e[I])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function x(o,d,g){var e;return gt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new K(o.h,o.G),o.u[d]=e),u.return(E(e,g,o.I))):u.return(void 0)})}function w(o,d){for(var g=d.name||"$",e=[].concat(B(d.wants)),u=new o.h.StringList,f=T(d.wants),t=f.next();!t.done;t=f.next())u.push_back(t.value);f=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var I=o.listeners[g];I&&(o.D=Z(o,a,d.outs).then(function(F){F=I(F);for(var L=0;L<d.wants.length;++L){var U=a[e[L]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}F&&(o.D=F)}))}}),o.i.attachMultiListener(u,f),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Wt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var f,t,c,a,b,I;return gt(function(F){switch(F.g){case 1:f=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(f),c=t.next();case 2:if(c.done){F.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(F,l(d.g,a),5);case 5:I=F.h,d.g.overrideFile(b,I),c=t.next(),F.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",F.return(!0)}})}},minDetectionConfidence:e}})}i=J.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return gt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return gt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ht("FaceDetection",J),Ht("FACEDETECTION_LIPS",M),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",A),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",lt),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",G),Ht("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("VERSION","0.4.1646425229")}).call(mi);const pi={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,v){return h==Array.prototype||h==Object.prototype||(h[y]=v.value),h};function m(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var v=h[y];if(v&&v.Math==Math)return v}throw Error("Cannot find global object")}var X=m(this);function S(h,y){if(y)t:{var v=X;h=h.split(".");for(var C=0;C<h.length-1;C++){var M=h[C];if(!(M in v))break t;v=v[M]}h=h[h.length-1],C=v[h],y=y(C),y!=C&&y!=null&&r(v,h,{configurable:!0,writable:!0,value:y})}}S("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new v(C+(_||"")+"_"+M++,_)}function v(_,A){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:A})}if(h)return h;v.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",M=0;return y}),S("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),v=0;v<y.length;v++){var C=X[y[v]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function B(h){if(!(h instanceof Array)){h=T(h);for(var y,v=[];!(y=h.next()).done;)v.push(y.value);h=v}return h}var nt=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=ut;function mt(h,y){if(h.prototype=nt(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var v in y)if(v!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,v);C&&Object.defineProperty(h,v,C)}else h[v]=y[v];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,v){return h.g=v,{value:y}}function $e(h){this.g=new Bt,this.h=h}function ze(h,y){kt(h.g);var v=h.g.i;return v?We(h,"return"in v?v.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),jt(h))}function We(h,y,v,C){try{var M=y.call(h.g.i,v);if(!(M instanceof Object))throw new TypeError("Iterator result "+M+" is not an object");if(!M.done)return h.g.l=!1,M;var _=M.value}catch(A){return h.g.i=null,ee(h.g,A),jt(h)}return h.g.i=null,C.call(h.g,_),jt(h)}function jt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(v){h.g.h=void 0,ee(h.g,v)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Nn(h){this.next=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=jt(h)),y},this.throw=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=jt(h)),y},this.return=function(y){return ze(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Nn(new $e(y)),at&&h.prototype&&at(y,h.prototype),y}function gt(h,y){h instanceof String&&(h+="");var v=0,C=!1,M={next:function(){if(!C&&v<h.length){var _=v++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return M[Symbol.iterator]=function(){return M},M}var qe=typeof Object.assign=="function"?Object.assign:function(h,y){for(var v=1;v<arguments.length;v++){var C=arguments[v];if(C)for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(h[M]=C[M])}return h};S("Object.assign",function(h){return h||qe}),S("Promise",function(h){function y(A){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{A(q.resolve,q.reject)}catch(lt){q.reject(lt)}}function v(){this.g=null}function C(A){return A instanceof y?A:new y(function(q){q(A)})}if(h)return h;v.prototype.h=function(A){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(A)};var M=X.setTimeout;v.prototype.i=function(A){M(A,0)},v.prototype.l=function(){for(;this.g&&this.g.length;){var A=this.g;this.g=[];for(var q=0;q<A.length;++q){var lt=A[q];A[q]=null;try{lt()}catch(s){this.j(s)}}}this.g=null},v.prototype.j=function(A){this.i(function(){throw A})},y.prototype.j=function(){function A(s){return function(G){lt||(lt=!0,s.call(q,G))}}var q=this,lt=!1;return{resolve:A(this.C),reject:A(this.l)}},y.prototype.C=function(A){if(A===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(A instanceof y)this.F(A);else{t:switch(typeof A){case"object":var q=A!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(A):this.m(A)}},y.prototype.u=function(A){var q=void 0;try{q=A.then}catch(lt){this.l(lt);return}typeof q=="function"?this.G(q,A):this.m(A)},y.prototype.l=function(A){this.s(2,A)},y.prototype.m=function(A){this.s(1,A)},y.prototype.s=function(A,q){if(this.h!=0)throw Error("Cannot settle("+A+", "+q+"): Promise already settled in state"+this.h);this.h=A,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var A=this;M(function(){if(A.B()){var q=X.console;typeof q<"u"&&q.error(A.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var A=X.CustomEvent,q=X.Event,lt=X.dispatchEvent;return typeof lt>"u"?!0:(typeof A=="function"?A=new A("unhandledrejection",{cancelable:!0}):typeof q=="function"?A=new q("unhandledrejection",{cancelable:!0}):(A=X.document.createEvent("CustomEvent"),A.initCustomEvent("unhandledrejection",!1,!0,A)),A.promise=this,A.reason=this.i,lt(A))},y.prototype.A=function(){if(this.g!=null){for(var A=0;A<this.g.length;++A)_.h(this.g[A]);this.g=null}};var _=new v;return y.prototype.F=function(A){var q=this.j();A.J(q.resolve,q.reject)},y.prototype.G=function(A,q){var lt=this.j();try{A.call(q,lt.resolve,lt.reject)}catch(s){lt.reject(s)}},y.prototype.then=function(A,q){function lt(Y,N){return typeof Y=="function"?function(K){try{s(Y(K))}catch(E){G(E)}}:N}var s,G,R=new y(function(Y,N){s=Y,G=N});return this.J(lt(A,s),lt(q,G)),R},y.prototype.catch=function(A){return this.then(void 0,A)},y.prototype.J=function(A,q){function lt(){switch(s.h){case 1:A(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(lt):this.g.push(lt),this.o=!0},y.resolve=C,y.reject=function(A){return new y(function(q,lt){lt(A)})},y.race=function(A){return new y(function(q,lt){for(var s=T(A),G=s.next();!G.done;G=s.next())C(G.value).J(q,lt)})},y.all=function(A){var q=T(A),lt=q.next();return lt.done?C([]):new y(function(s,G){function R(K){return function(E){Y[K]=E,N--,N==0&&s(Y)}}var Y=[],N=0;do Y.push(void 0),N++,C(lt.value).J(R(Y.length-1),G),lt=q.next();while(!lt.done)})},y}),S("Object.is",function(h){return h||function(y,v){return y===v?y!==0||1/y===1/v:y!==y&&v!==v}}),S("Array.prototype.includes",function(h){return h||function(y,v){var C=this;C instanceof String&&(C=String(C));var M=C.length;for(v=v||0,0>v&&(v=Math.max(v+M,0));v<M;v++){var _=C[v];if(_===y||Object.is(_,y))return!0}return!1}}),S("String.prototype.includes",function(h){return h||function(y,v){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,v||0)!==-1}}),S("Array.prototype.keys",function(h){return h||function(){return gt(this,function(y){return y})}});var jn=this||self;function Re(h,y){h=h.split(".");var v=jn;h[0]in v||typeof v.execScript>"u"||v.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?v[C]&&v[C]!==Object.prototype[C]?v=v[C]:v=v[C]={}:v[C]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var we,ln=typeof TextDecoder<"u",Xn,Ln=typeof TextEncoder<"u";function xn(h){if(Ln)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var v=0,C=new Uint8Array(3*h.length),M=0;M<h.length;M++){var _=h.charCodeAt(M);if(128>_)C[v++]=_;else{if(2048>_)C[v++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&M<h.length){var A=h.charCodeAt(++M);if(56320<=A&&57343>=A){_=1024*(_-55296)+A-56320+65536,C[v++]=_>>18|240,C[v++]=_>>12&63|128,C[v++]=_>>6&63|128,C[v++]=_&63|128;continue}else M--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[v++]=_>>12|224,C[v++]=_>>6&63|128}C[v++]=_&63|128}}h=C.subarray(0,v)}return h}var Jn={},hn=null;function bn(h,y){y===void 0&&(y=0),Oe(),y=Jn[y];for(var v=Array(Math.floor(h.length/3)),C=y[64]||"",M=0,_=0;M<h.length-2;M+=3){var A=h[M],q=h[M+1],lt=h[M+2],s=y[A>>2];A=y[(A&3)<<4|q>>4],q=y[(q&15)<<2|lt>>6],lt=y[lt&63],v[_++]=s+A+q+lt}switch(s=0,lt=C,h.length-M){case 2:s=h[M+1],lt=y[(s&15)<<2]||C;case 1:h=h[M],v[_]=y[h>>2]+y[(h&3)<<4|s>>4]+lt+C}return v.join("")}function Un(h){var y=h.length,v=3*y/4;v%3?v=Math.floor(v):"=.".indexOf(h[y-1])!=-1&&(v="=.".indexOf(h[y-2])!=-1?v-2:v-1);var C=new Uint8Array(v),M=0;return Cn(h,function(_){C[M++]=_}),C.subarray(0,M)}function Cn(h,y){function v(lt){for(;C<h.length;){var s=h.charAt(C++),G=hn[s];if(G!=null)return G;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return lt}Oe();for(var C=0;;){var M=v(-1),_=v(0),A=v(64),q=v(64);if(q===64&&M===-1)break;y(M<<2|_>>4),A!=64&&(y(_<<4&240|A>>2),q!=64&&y(A<<6&192|q))}}function Oe(){if(!hn){hn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],v=0;5>v;v++){var C=h.concat(y[v].split(""));Jn[v]=C;for(var M=0;M<C.length;M++){var _=C[M];hn[_]===void 0&&(hn[_]=M)}}}}var Ke=typeof Uint8Array.prototype.slice=="function",In;function Wn(h,y,v){return y===v?In||(In=new Uint8Array(0)):Ke?h.slice(y,v):new Uint8Array(h.subarray(y,v))}var he=0,Se=0;function Pe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?Un(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Pe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,v=0,C=0,M=0;4>M&&128<=y;M++)y=h.h[h.g++],v|=(y&127)<<7*M;if(128<=y&&(y=h.h[h.g++],v|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(M=0;5>M&&128<=y;M++)y=h.h[h.g++],C|=(y&127)<<7*M+3;if(128>y)return h=v>>>0,y=C>>>0,(C=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),C?-h:h;h.m=!0}Pe.prototype.i=function(){var h=this.h,y=h[this.g],v=y&127;return 128>y?(this.g+=1,v):(y=h[this.g+1],v|=(y&127)<<7,128>y?(this.g+=2,v):(y=h[this.g+2],v|=(y&127)<<14,128>y?(this.g+=3,v):(y=h[this.g+3],v|=(y&127)<<21,128>y?(this.g+=4,v):(y=h[this.g+4],v|=(y&15)<<28,128>y?(this.g+=5,v>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,v)))))},Pe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],v=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,v=(h<<0|y<<8|v<<16|C<<24)>>>0,h=2*(v>>31)+1,y=v>>>23&255,v&=8388607,y==255?v?NaN:1/0*h:y==0?h*Math.pow(2,-149)*v:h*Math.pow(2,y-150)*(v+Math.pow(2,23))};var cn=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Wn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},v=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=v,y=this.o,cn.length?(v=cn.pop(),y&&(v.v=y.v),h&&re(v,h),h=v):h=new Pe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var v=y&7;return v!=0&&v!=5&&v!=1&&v!=2&&v!=3&&v!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=v,!0)}function At(h){switch(h.h){case 0:if(h.h!=0)At(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?At(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)At(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?At(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}At(h)}while(1);break;default:h.j=!0}}function xe(h,y,v){var C=h.g.j,M=h.g.i(),_=h.g.g+M;if(h.g.j=_,v(y,h),v=_-h.g.g,v!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+M+" bytes, instead read "+(M-v)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=C,y}function zt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var v=h.g;h.g+=y,h=h.h;var C;if(ln)(C=we)||(C=we=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(v,v+y));else{y=v+y;for(var M=[],_=null,A,q,lt;v<y;)A=h[v++],128>A?M.push(A):224>A?v>=y?M.push(65533):(q=h[v++],194>A||(q&192)!==128?(v--,M.push(65533)):M.push((A&31)<<6|q&63)):240>A?v>=y-1?M.push(65533):(q=h[v++],(q&192)!==128||A===224&&160>q||A===237&&160<=q||((C=h[v++])&192)!==128?(v--,M.push(65533)):M.push((A&15)<<12|(q&63)<<6|C&63)):244>=A?v>=y-2?M.push(65533):(q=h[v++],(q&192)!==128||(A<<28)+(q-144)>>30!==0||((C=h[v++])&192)!==128||((lt=h[v++])&192)!==128?(v--,M.push(65533)):(A=(A&7)<<18|(q&63)<<12|(C&63)<<6|lt&63,A-=65536,M.push((A>>10&1023)+55296,(A&1023)+56320))):M.push(65533),8192<=M.length&&(_=Ht(_,M),M.length=0);C=Ht(_,M)}return C}function Ye(h,y,v){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)v.push(y.call(h.g))}function tn(h,y){h.h==2?Ye(h,Pe.prototype.o,y):y.push(zt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function je(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var v=h.h,C=v.length,M=0,_=0;_<C;_++){var A=v[_];A.length!==0&&(y.set(A,M),M+=A.length)}return v=h.g,C=v.h,C!==0&&(y.set(v.g.subarray(0,C),M),v.h=0),h.h=[y],y}function _e(h,y,v){if(v!=null){Qt(h.g,8*y+5),h=h.g;var C=v;C=(v=0>C?1:0)?-C:C,C===0?0<1/C?he=Se=0:(Se=0,he=2147483648):isNaN(C)?(Se=0,he=2147483647):34028234663852886e22<C?(Se=0,he=(v<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(v<<31|C)>>>0):(y=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-y),C=Math.round(8388608*C),16777216<=C&&++y,Se=0,he=(v<<31|y+127<<23|C&8388607)>>>0),v=he,h.push(v>>>0&255),h.push(v>>>8&255),h.push(v>>>16&255),h.push(v>>>24&255)}}var Ie=typeof Uint8Array=="function";function Vn(h,y,v){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?v(h):un(h,y,v):y(h)}function un(h,y,v){if(Array.isArray(h)){for(var C=Array(h.length),M=0;M<h.length;M++)C[M]=Vn(h[M],y,v);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(M in h)C[M]=Vn(h[M],y,v);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var an={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,an),h}var Te;function Ge(h,y,v){var C=Te;Te=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||Ie&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(v)for(y=0;y<v.length;y++)h=v[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=ie):(De(this),(C=this.i[h])?ve(C):this.i[h]=ie)}var ie=Object.freeze(ve([]));function De(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,v){return y===-1?null:(v===void 0?0:v)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Pt(h,y){var v=v===void 0?!1:v,C=qt(h,y,v);return C==null&&(C=ie),C===ie&&(C=ve([]),Vt(h,y,C,v)),C}function fn(h){var y=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var v=0;v<y.length;v++)y[v]=+y[v];h.m[3]=!0}return y}function fe(h,y,v){return h=qt(h,y),h==null?v:h}function Ct(h,y,v){return h=qt(h,y),h=h==null?h:+h,h==null?v===void 0?0:v:h}function Vt(h,y,v,C){(C===void 0?0:C)||y>=h.l?(De(h),h.i[y]=v):h.h[y+h.j]=v}function oe(h,y,v){if(v===-1)return null;if(h.g||(h.g={}),!h.g[v]){var C=qt(h,v,!1);C&&(h.g[v]=new y(C))}return h.g[v]}function Fe(h,y){h.g||(h.g={});var v=h.g[1];if(!v){var C=Pt(h,1);v=[];for(var M=0;M<C.length;M++)v[M]=new y(C[M]);h.g[1]=v}return v}function te(h,y,v){var C=C===void 0?!1:C;h.g||(h.g={});var M=v&&tt(v);h.g[y]=v,Vt(h,y,M,C)}function se(h,y,v,C){var M=Fe(h,v);y=y||new v,h=Pt(h,1),C!=null?(M.splice(C,0,y),h.splice(C,0,tt(y))):(M.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return un(h,Qe,bn)};function tt(h,y){if(h.g)for(var v in h.g){var C=h.g[v];if(Array.isArray(C))for(var M=0;M<C.length;M++)C[M]&&tt(C[M]);else C&&tt(C)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var v=0;v<h.length;v++)Ot(y,h[v])}}function ct(h,y){if(y.h==4)return!1;var v=y.m;return At(y),y.N||(y=Wn(y.g.h,v,y.g.g),(v=h.o)?v.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}mt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return fn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 16:v=y.g.i(),Vt(h,2,v);break;case 29:case 26:tn(y,h.getPackedDataList());break;case 32:v=Ve(y.g),Vt(h,4,v);break;default:if(!ct(h,y))return h}return h}var ue=[3];function St(h,y){var v=void 0;return new(v||(v=Promise))(function(C,M){function _(lt){try{q(y.next(lt))}catch(s){M(s)}}function A(lt){try{q(y.throw(lt))}catch(s){M(s)}}function q(lt){lt.done?C(lt.value):new v(function(s){s(lt.value)}).then(_,A)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}mt(me,Ge);function He(h,y){for(;Ce(y);)switch(y.i){case 8:var v=y.g.i();Vt(h,1,v);break;case 21:v=zt(y),Vt(h,2,v);break;case 26:v=ye(y),Vt(h,3,v);break;case 34:v=ye(y),Vt(h,4,v);break;default:if(!ct(h,y))return h}return h}function en(h){Ge.call(this,h,-1,nn)}mt(en,Ge),en.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var nn=[1];function mn(h){Ge.call(this,h)}mt(mn,Ge);function yn(h,y){for(;Ce(y);)switch(y.i){case 13:var v=zt(y);Vt(h,1,v);break;case 21:v=zt(y),Vt(h,2,v);break;case 29:v=zt(y),Vt(h,3,v);break;case 37:v=zt(y),Vt(h,4,v);break;case 45:v=zt(y),Vt(h,5,v);break;default:if(!ct(h,y))return h}return h}function Le(h){Ge.call(this,h,-1,zn)}mt(Le,Ge);function rn(h){t:{var y=new Le;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new mn,yn);se(y,v,mn,void 0);break;default:if(!ct(y,h))break t}}return y}var zn=[1];function on(h){Ge.call(this,h)}mt(on,Ge);function Ne(h){Ge.call(this,h,-1,Sn)}mt(Ne,Ge),Ne.prototype.getVertexType=function(){return fe(this,1,0)},Ne.prototype.getPrimitiveType=function(){return fe(this,2,0)},Ne.prototype.getVertexBufferList=function(){return fn(this)},Ne.prototype.getIndexBufferList=function(){return Pt(this,4)};function Zn(h,y){for(;Ce(y);)switch(y.i){case 8:var v=Ve(y.g);Vt(h,1,v);break;case 16:v=Ve(y.g),Vt(h,2,v);break;case 29:case 26:tn(y,h.getVertexBufferList());break;case 32:case 34:v=y;var C=h.getIndexBufferList();v.h==2?Ye(v,Pe.prototype.i,C):C.push(v.g.i());break;default:if(!ct(h,y))return h}return h}var Sn=[3,4];function Me(h){Ge.call(this,h)}mt(Me,Ge),Me.prototype.getMesh=function(){return oe(this,Ne,1)},Me.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function En(h){t:{var y=new Me;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var v=xe(h,new Ne,Zn);te(y,1,v);break;case 18:v=xe(h,new _t,de),te(y,2,v);break;default:if(!ct(y,h))break t}}return y}function sn(h,y,v){if(v=h.createShader(v===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(v,y),h.compileShader(v),!h.getShaderParameter(v,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
71
71
 
72
- `+h.getShaderInfoLog(v));return v}function vn(h){return Ye(h,me).map(function(y){return{index:fe(y,1,0),Y:Ct(y,2),label:te(y,3)!=null?fe(y,3,""):void 0,displayName:te(y,4)!=null?fe(y,4,""):void 0}})}function Tn(h){return{x:Ct(h,1),y:Ct(h,2),z:Ct(h,3),visibility:te(h,4)!=null?Ct(h,4):void 0}}function An(h,y){this.h=h,this.g=y,this.l=0}function un(h,y,v){return wn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):v?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(C){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),C(h.i)}))}function wn(h,y){var v=h.g;if(h.m===void 0){var C=rn(v,`
72
+ `+h.getShaderInfoLog(v));return v}function vn(h){return Fe(h,me).map(function(y){return{index:fe(y,1,0),Y:Ct(y,2),label:qt(y,3)!=null?fe(y,3,""):void 0,displayName:qt(y,4)!=null?fe(y,4,""):void 0}})}function wn(h){return{x:Ct(h,1),y:Ct(h,2),z:Ct(h,3),visibility:qt(h,4)!=null?Ct(h,4):void 0}}function An(h,y){this.h=h,this.g=y,this.l=0}function dn(h,y,v){return Yn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):v?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(C){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),C(h.i)}))}function Yn(h,y){var v=h.g;if(h.m===void 0){var C=sn(v,`
73
73
  attribute vec2 aVertex;
74
74
  attribute vec2 aTex;
75
75
  varying vec2 vTex;
76
76
  void main(void) {
77
77
  gl_Position = vec4(aVertex, 0.0, 1.0);
78
78
  vTex = aTex;
79
- }`,0),A=rn(v,`
79
+ }`,0),M=sn(v,`
80
80
  precision mediump float;
81
81
  varying vec2 vTex;
82
82
  uniform sampler2D sampler0;
83
83
  void main(){
84
84
  gl_FragColor = texture2D(sampler0, vTex);
85
- }`,1),_=v.createProgram();if(v.attachShader(_,C),v.attachShader(_,A),v.linkProgram(_),!v.getProgramParameter(_,v.LINK_STATUS))throw Error(`Could not compile WebGL program.
85
+ }`,1),_=v.createProgram();if(v.attachShader(_,C),v.attachShader(_,M),v.linkProgram(_),!v.getProgramParameter(_,v.LINK_STATUS))throw Error(`Could not compile WebGL program.
86
86
 
87
- `+v.getProgramInfoLog(_));C=h.m=_,v.useProgram(C),A=v.getUniformLocation(C,"sampler0"),h.j={I:v.getAttribLocation(C,"aVertex"),H:v.getAttribLocation(C,"aTex"),da:A},h.s=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.enableVertexAttribArray(h.j.I),v.vertexAttribPointer(h.j.I,2,v.FLOAT,!1,0,0),v.bufferData(v.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),v.STATIC_DRAW),v.bindBuffer(v.ARRAY_BUFFER,null),h.o=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.enableVertexAttribArray(h.j.H),v.vertexAttribPointer(h.j.H,2,v.FLOAT,!1,0,0),v.bufferData(v.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),v.STATIC_DRAW),v.bindBuffer(v.ARRAY_BUFFER,null),v.uniform1i(A,0)}C=h.j,v.useProgram(h.m),v.canvas.width=y.width,v.canvas.height=y.height,v.viewport(0,0,y.width,y.height),v.activeTexture(v.TEXTURE0),h.h.bindTexture2d(y.glName),v.enableVertexAttribArray(C.I),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.vertexAttribPointer(C.I,2,v.FLOAT,!1,0,0),v.enableVertexAttribArray(C.H),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.vertexAttribPointer(C.H,2,v.FLOAT,!1,0,0),v.bindFramebuffer(v.DRAW_FRAMEBUFFER?v.DRAW_FRAMEBUFFER:v.FRAMEBUFFER,null),v.clearColor(0,0,0,0),v.clear(v.COLOR_BUFFER_BIT),v.colorMask(!0,!0,!0,!0),v.drawArrays(v.TRIANGLE_FAN,0,4),v.disableVertexAttribArray(C.I),v.disableVertexAttribArray(C.H),v.bindBuffer(v.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Fn(h,y){return y+h}function Hn(h,y){window[h]=y}function m(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(v){y.addEventListener("load",function(){v()},!1),y.addEventListener("error",function(){v()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return de(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||Fn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=w(Object.keys(h.options));for(var v=y.next();!v.done;v=y.next()){v=v.value;var C=h.options[v].default;C!==void 0&&(this.j[v]=typeof C=="function"?C():C)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function k(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function z(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s,X,R,F,N;return de(y,function(K){switch(K.g){case 1:return C=v,v.R?(A=k(v,v.j),P(K,W(),2)):K.return();case 2:if(_=K.h,typeof window=="object")return Hn("createMediapipeSolutionsWasm",{locateFile:v.locateFile}),Hn("createMediapipeSolutionsPackedAssets",{locateFile:v.locateFile}),lt=A.filter(function(B){return B.data!==void 0}),s=A.filter(function(B){return B.data===void 0}),X=Promise.all(lt.map(function(B){var nt=rt(C,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return C.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?m(C.locateFile(B.url,C.S)):Promise.resolve()})).then(function(){return St(C,function B(){var nt,$,yt=this;return de(B,function(Gt){if(Gt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Gt,nt($),2);yt.h=Gt.h,Gt.g=0})})}),F=function(){return St(C,function B(){var nt=this;return de(B,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(K,Promise.all([R,X,F]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=A.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return C.locateFile(B.url,C.S)}),importScripts.apply(null,E(M)),P(K,createMediapipeSolutionsWasm(Module),6);case 6:v.h=K.h,v.l=new OffscreenCanvas(1,1),v.h.canvas=v.l,q=v.h.GL.createContext(v.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),v.h.GL.makeContextCurrent(q),K.g=4;break;case 7:if(v.l=document.createElement("canvas"),N=v.l.getContext("webgl2",{}),!N&&(N=v.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),K.return();v.D=N,v.h.canvas=v.l,v.h.createContext(v.l,!0,!0,{});case 4:v.i=new v.h.SolutionWasm,v.R=!1,K.g=0}})})}function ot(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s,X;return de(y,function(R){if(R.g==1){if(v.g.graph&&v.g.graph.url&&v.P===v.g.graph.url)return R.return();if(v.o=!0,!v.g.graph||!v.g.graph.url){R.g=2;return}return v.P=v.g.graph.url,P(R,rt(v,v.g.graph.url),3)}for(R.g!=2&&(C=R.h,v.i.loadGraph(C)),A=w(Object.keys(v.B)),_=A.next();!_.done;_=A.next())M=_.value,v.i.overrideFile(M,v.B[M]);if(v.B={},v.g.listeners)for(q=w(v.g.listeners),lt=q.next();!lt.done;lt=q.next())s=lt.value,Ut(v,s);X=v.j,v.j={},v.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return de(h,function(v){y.i&&(y.i.reset(),y.m={},y.s={}),v.g=0})})},i.setOptions=function(h,y){var v=this;if(y=y||this.g.options){for(var C=[],A=[],_={},M=w(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var lt=q.value;lt in this.j&&this.j[lt]===h[lt]||(this.j[lt]=h[lt],q=y[lt],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[lt],C.push(function(s){return function(){return St(v,function X(){var R,F=this;return de(X,function(N){if(N.g==1)return P(N,s.K(s.L),2);R=N.h,R===!0&&(F.o=!0),N.g=0})})}}(_))),q.graphOptionXref&&(lt={valueNumber:q.type===1?h[lt]:0,valueBoolean:q.type===0?h[lt]:!1,valueString:q.type===2?h[lt]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),lt),A.push(q))))}(C.length!==0||A.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(A),this.u=(this.u===void 0?[]:this.u).concat(C))}};function O(h){return St(h,function y(){var v=this,C,A,_,M,q,lt,s;return de(y,function(X){switch(X.g){case 1:if(!v.o)return X.return();if(!v.u){X.g=2;break}C=w(v.u),A=C.next();case 3:if(A.done){X.g=5;break}return _=A.value,P(X,_(),4);case 4:A=C.next(),X.g=3;break;case 5:v.u=void 0;case 2:if(v.A){for(M=new v.h.GraphOptionChangeRequestList,q=w(v.A),lt=q.next();!lt.done;lt=q.next())s=lt.value,M.push_back(s);v.i.changeOptions(M),M.delete(),v.A=void 0}v.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return de(h,function(v){return v.g==1?P(v,z(y),2):v.g!=3?P(v,ot(y),3):P(v,O(y),0)})})};function rt(h,y){return St(h,function v(){var C=this,A,_;return de(v,function(M){return y in C.F?M.return(C.F[y]):(A=C.locateFile(y,""),_=fetch(A).then(function(q){return q.arrayBuffer()}),C.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function v(){var C=this,A,_,M,q,lt,s,X,R,F;return de(v,function(N){switch(N.g){case 1:return C.g.inputs?(A=1e3*(y==null?performance.now():y),P(N,C.C,2)):N.return();case 2:return P(N,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,M=w(Object.keys(h)),q=M.next();!q.done;q=M.next())if(lt=q.value,s=C.g.inputs[lt]){t:{var K=C,B=h[lt];switch(s.type){case"video":var nt=K.m[s.stream];if(nt||(nt=new An(K.h,K.D),K.m[s.stream]=nt),K=nt,K.l===0&&(K.l=K.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:K.l,width:$,height:nt},$=K.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),K.h.bindTexture2d(K.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),K.h.bindTexture2d(0),K=nt;break t;case"detections":for(nt=K.m[s.stream],nt||(nt=new _n(K.h),K.m[s.stream]=nt),K=nt,K.data||(K.data=new K.g.DetectionListData),K.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=K.data,Gt=yt.setBoundingBox,Bt=nt,xt=$.T,ht=new nn;Vt(ht,1,xt.Z),Vt(ht,2,xt.$),Vt(ht,3,xt.height),Vt(ht,4,xt.width),Vt(ht,5,xt.rotation),Vt(ht,6,xt.X);var Xt=xt=new Xe;Pe(Xt,1,te(ht,1)),Pe(Xt,2,te(ht,2)),Pe(Xt,3,te(ht,3)),Pe(Xt,4,te(ht,4)),Pe(Xt,5,te(ht,5));var It=te(ht,6);if(It!=null&&It!=null){_t(Xt.g,48);var wt=Xt.g,Yt=It;It=0>Yt,Yt=Math.abs(Yt);var l=Yt>>>0;for(Yt=Math.floor((Yt-l)/4294967296),Yt>>>=0,It&&(Yt=~Yt>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Yt++,4294967295<Yt&&(Yt=0))),he=l,Se=Yt,It=he,l=Se;0<l||127<It;)wt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;wt.push(It)}if(it(ht,Xt),xt=je(xt),Gt.call(yt,Bt,xt),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Xt=!!ht.visibility,Gt=K.data,Bt=Gt.addNormalizedLandmark,xt=nt,ht=Object.assign(Object.assign({},ht),{visibility:Xt?ht.visibility:0}),Xt=new fn,Vt(Xt,1,ht.x),Vt(Xt,2,ht.y),Vt(Xt,3,ht.z),ht.visibility&&Vt(Xt,4,ht.visibility),wt=ht=new Xe,Pe(wt,1,te(Xt,1)),Pe(wt,2,te(Xt,2)),Pe(wt,3,te(Xt,3)),Pe(wt,4,te(Xt,4)),Pe(wt,5,te(Xt,5)),it(Xt,wt),ht=je(ht),Bt.call(Gt,xt,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Gt=K.data,Bt=Gt.addClassification,xt=nt,ht=$.M[yt],Xt=new me,Vt(Xt,2,ht.Y),ht.index&&Vt(Xt,1,ht.index),ht.label&&Vt(Xt,3,ht.label),ht.displayName&&Vt(Xt,4,ht.displayName),wt=ht=new Xe,l=te(Xt,1),l!=null&&l!=null)if(_t(wt.g,8),It=wt.g,0<=l)_t(It,l);else{for(Yt=0;9>Yt;Yt++)It.push(l&127|128),l>>=7;It.push(1)}Pe(wt,2,te(Xt,2)),It=te(Xt,3),It!=null&&(It=xn(It),_t(wt.g,26),_t(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),It=te(Xt,4),It!=null&&(It=xn(It),_t(wt.g,34),_t(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),it(Xt,wt),ht=je(ht),Bt.call(Gt,xt,ht)}}K=K.data;break t;default:K={}}}switch(X=K,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:A}));break;case"detections":F=X,F.stream=R,F.timestamp=A,_.pushDetectionList(F);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),P(N,C.C,4);case 4:_.delete(),N.g=0}})})};function bt(h,y,v){return St(h,function C(){var A,_,M,q,lt,s,X=this,R,F,N,K,B,nt,$,yt;return de(C,function(Gt){switch(Gt.g){case 1:if(!v)return Gt.return(y);for(A={},_=0,M=w(Object.keys(v)),q=M.next();!q.done;q=M.next())lt=q.value,s=v[lt],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=w(Object.keys(v)),q=R.next();case 2:if(q.done){Gt.g=4;break}if(F=q.value,N=v[F],typeof N=="string")return $=A,yt=F,P(Gt,Rt(X,F,y[N]),14);if(K=y[N.stream],N.type==="detection_list"){if(K){for(var Bt=K.getRectList(),xt=K.getLandmarksList(),ht=K.getClassificationsList(),Xt=[],It=0;It<Bt.size();++It){var wt=Bt.get(It);t:{var Yt=new nn;for(wt=new Ze(wt);Ce(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Yt,1,l);break;case 21:l=jt(wt),Vt(Yt,2,l);break;case 29:l=jt(wt),Vt(Yt,3,l);break;case 37:l=jt(wt),Vt(Yt,4,l);break;case 45:l=jt(wt),Vt(Yt,5,l);break;case 48:l=We(wt.g),Vt(Yt,6,l);break;default:if(!ut(Yt,wt))break t}}Yt={Z:Ct(Yt,1),$:Ct(Yt,2),height:Ct(Yt,3),width:Ct(Yt,4),rotation:Ct(Yt,5,0),X:fe(Yt,6,0)},wt=Ye(en(xt.get(It)),fn).map(Tn);var Z=ht.get(It);t:for(l=new qe,Z=new Ze(Z);Ce(Z);)switch(Z.i){case 10:l.addClassification(xe(Z,new me,He));break;default:if(!ut(l,Z))break t}Yt={T:Yt,O:wt,M:vn(l)},Xt.push(Yt)}Bt=Xt}else Bt=[];A[F]=Bt,Gt.g=7;break}if(N.type==="proto_list"){if(K){for(Bt=Array(K.size()),xt=0;xt<K.size();xt++)Bt[xt]=K.get(xt);K.delete()}else Bt=[];A[F]=Bt,Gt.g=7;break}if(K===void 0){Gt.g=3;break}if(N.type==="float_list"){A[F]=K,Gt.g=7;break}if(N.type==="proto"){A[F]=K,Gt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return B=X.s[F],B||(B=new An(X.h,X.D),X.s[F]=B),P(Gt,un(B,K,X.G),13);case 13:nt=Gt.h,A[F]=nt;case 7:N.transform&&A[F]&&(A[F]=N.transform(A[F])),Gt.g=3;break;case 14:$[yt]=Gt.h;case 3:q=R.next(),Gt.g=2;break;case 4:return Gt.return(A)}})})}function Rt(h,y,v){return St(h,function C(){var A=this,_;return de(C,function(M){return typeof v=="number"||v instanceof Uint8Array||v instanceof A.h.Uint8BlobList?M.return(v):v instanceof A.h.Texture2dDataOut?(_=A.s[y],_||(_=new An(A.h,A.D),A.s[y]=_),M.return(un(_,v,A.G))):M.return(void 0)})})}function Ut(h,y){for(var v=y.name||"$",C=[].concat(E(y.wants)),A=new h.h.StringList,_=w(y.wants),M=_.next();!M.done;M=_.next())A.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var lt={},s=0;s<y.wants.length;++s)lt[C[s]]=q.get(s);var X=h.listeners[v];X&&(h.C=bt(h,lt,y.outs).then(function(R){R=X(R);for(var F=0;F<y.wants.length;++F){var N=lt[C[F]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(A,_),A.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Nt(h){h=kn(h);var y=h.getMesh();if(!y)return h;var v=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return v};var C=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return C},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Nt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Ye(en(y),fn).map(Tn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},Et=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],kt=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Qt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ue=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(E(Et),E(Tt),E(kt),E(Qt),E(ue),E(pe));function Je(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Je.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return de(h,function(v){return P(v,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var v=this;return de(y,function(C){return P(C,v.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",Je),Re("FACEMESH_LIPS",Et),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",kt),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Qt),Re("FACEMESH_RIGHT_EYEBROW",ue),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),v=h.getRows(),C=h.getPackedDataList(),A=[],_=0;_<v;_++)A.push(Array(y));for(_=0;_<v;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*v+_;A[_][M]=C[q]}return A}),Re("VERSION","0.4.1633559619")}).call(mi);const pi={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function p(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var G=p(this);function S(t,c){if(c)t:{var a=G;t=t.split(".");for(var b=0;b<t.length-1;b++){var I=t[b];if(!(I in a))break t;a=a[I]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}S("Symbol",function(t){function c(Y){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(Y||"")+"_"+I++,Y)}function a(Y,L){this.g=Y,r(this,"description",{configurable:!0,writable:!0,value:L})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",I=0;return c}),S("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=G[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function w(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function E(t){if(!(t instanceof Array)){t=w(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=ct;function pt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Mt.prototype.o=function(t){this.h=t};function qt(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Mt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function De(t){this.g=new Mt,this.h=t}function an(t,c){Jt(t.g);var a=t.g.i;return a?Ve(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),Dt(t))}function Ve(t,c,a,b){try{var I=c.call(t.g.i,a);if(!(I instanceof Object))throw new TypeError("Iterator result "+I+" is not an object");if(!I.done)return t.g.l=!1,I;var Y=I.value}catch(L){return t.g.i=null,qt(t.g,L),Dt(t)}return t.g.i=null,b.call(t.g,Y),Dt(t)}function Dt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,qt(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Kn(t){this.next=function(c){return Jt(t.g),t.g.i?c=Ve(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=Dt(t)),c},this.throw=function(c){return Jt(t.g),t.g.i?c=Ve(t,t.g.i.throw,c,t.g.o):(qt(t.g,c),c=Dt(t)),c},this.return=function(c){return an(t,c)},this[Symbol.iterator]=function(){return this}}function de(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,I){function Y(L){L.done?b(L.value):Promise.resolve(L.value).then(c,a).then(Y,I)}Y(t.next())})}function gt(t){return de(new Kn(new De(t)))}S("Promise",function(t){function c(L){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{L(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(L){return L instanceof c?L:new c(function(U){U(L)})}if(t)return t;a.prototype.h=function(L){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(L)};var I=G.setTimeout;a.prototype.i=function(L){I(L,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var L=this.g;this.g=[];for(var U=0;U<L.length;++U){var j=L[U];L[U]=null;try{j()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(L){this.i(function(){throw L})},c.prototype.j=function(){function L(Q){return function(D){j||(j=!0,Q.call(U,D))}}var U=this,j=!1;return{resolve:L(this.D),reject:L(this.l)}},c.prototype.D=function(L){if(L===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(L instanceof c)this.G(L);else{t:switch(typeof L){case"object":var U=L!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(L):this.m(L)}},c.prototype.A=function(L){var U=void 0;try{U=L.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,L):this.m(L)},c.prototype.l=function(L){this.s(2,L)},c.prototype.m=function(L){this.s(1,L)},c.prototype.s=function(L,U){if(this.h!=0)throw Error("Cannot settle("+L+", "+U+"): Promise already settled in state"+this.h);this.h=L,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var L=this;I(function(){if(L.C()){var U=G.console;typeof U<"u"&&U.error(L.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var L=G.CustomEvent,U=G.Event,j=G.dispatchEvent;return typeof j>"u"?!0:(typeof L=="function"?L=new L("unhandledrejection",{cancelable:!0}):typeof U=="function"?L=new U("unhandledrejection",{cancelable:!0}):(L=G.document.createEvent("CustomEvent"),L.initCustomEvent("unhandledrejection",!1,!0,L)),L.promise=this,L.reason=this.i,j(L))},c.prototype.B=function(){if(this.g!=null){for(var L=0;L<this.g.length;++L)Y.h(this.g[L]);this.g=null}};var Y=new a;return c.prototype.G=function(L){var U=this.j();L.K(U.resolve,U.reject)},c.prototype.H=function(L,U){var j=this.j();try{L.call(U,j.resolve,j.reject)}catch(Q){j.reject(Q)}},c.prototype.then=function(L,U){function j(ft,mt){return typeof ft=="function"?function(vt){try{Q(ft(vt))}catch(Zt){D(Zt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(j(L,Q),j(U,D)),st},c.prototype.catch=function(L){return this.then(void 0,L)},c.prototype.K=function(L,U){function j(){switch(Q.h){case 1:L(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?Y.h(j):this.g.push(j),this.o=!0},c.resolve=b,c.reject=function(L){return new c(function(U,j){j(L)})},c.race=function(L){return new c(function(U,j){for(var Q=w(L),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,j)})},c.all=function(L){var U=w(L),j=U.next();return j.done?b([]):new c(function(Q,D){function st(vt){return function(Zt){ft[vt]=Zt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(j.value).K(st(ft.length-1),D),j=U.next();while(!j.done)})},c});function pn(t,c){t instanceof String&&(t+="");var a=0,b=!1,I={next:function(){if(!b&&a<t.length){var Y=a++;return{value:c(Y,t[Y]),done:!1}}return b=!0,{done:!0,value:void 0}}};return I[Symbol.iterator]=function(){return I},I}var jn=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var I in b)Object.prototype.hasOwnProperty.call(b,I)&&(t[I]=b[I])}return t};S("Object.assign",function(t){return t||jn}),S("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),S("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var I=b.length;for(a=a||0,0>a&&(a=Math.max(a+I,0));a<I;a++){var Y=b[a];if(Y===c||Object.is(Y,c))return!0}return!1}}),S("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),S("Array.prototype.keys",function(t){return t||function(){return pn(this,function(c){return c})}});var Re=this||self;function Ht(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function on(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Ln(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var xn,Nn=typeof TextDecoder<"u",dn,bn=typeof TextEncoder<"u";function En(t){if(bn)t=(dn||(dn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),I=0;I<t.length;I++){var Y=t.charCodeAt(I);if(128>Y)b[a++]=Y;else{if(2048>Y)b[a++]=Y>>6|192;else{if(55296<=Y&&57343>=Y){if(56319>=Y&&I<t.length){var L=t.charCodeAt(++I);if(56320<=L&&57343>=L){Y=1024*(Y-55296)+L-56320+65536,b[a++]=Y>>18|240,b[a++]=Y>>12&63|128,b[a++]=Y>>6&63|128,b[a++]=Y&63|128;continue}else I--}if(c)throw Error("Found an unpaired surrogate");Y=65533}b[a++]=Y>>12|224,b[a++]=Y>>6&63|128}b[a++]=Y&63|128}}t=b.subarray(0,a)}return t}var Cn={},Oe=null;function Ke(t){var c;c===void 0&&(c=0),he(),c=Cn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",I=0,Y=0;I<t.length-2;I+=3){var L=t[I],U=t[I+1],j=t[I+2],Q=c[L>>2];L=c[(L&3)<<4|U>>4],U=c[(U&15)<<2|j>>6],j=c[j&63],a[Y++]=Q+L+U+j}switch(Q=0,j=b,t.length-I){case 2:Q=t[I+1],j=c[(Q&15)<<2]||b;case 1:t=t[I],a[Y]=c[t>>2]+c[(t&3)<<4|Q>>4]+j+b}return a.join("")}function In(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),I=0;return Wn(t,function(Y){b[I++]=Y}),b.subarray(0,I)}function Wn(t,c){function a(j){for(;b<t.length;){var Q=t.charAt(b++),D=Oe[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return j}he();for(var b=0;;){var I=a(-1),Y=a(0),L=a(64),U=a(64);if(U===64&&I===-1)break;c(I<<2|Y>>4),L!=64&&(c(Y<<4&240|L>>2),U!=64&&c(L<<6&192|U))}}function he(){if(!Oe){Oe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Cn[a]=b;for(var I=0;I<b.length;I++){var Y=b[I];Oe[Y]===void 0&&(Oe[Y]=I)}}}}var Se=typeof Uint8Array=="function",ze;function ne(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var We=typeof Uint8Array.prototype.slice=="function";function sn(t,c,a){return c===a?ze||(ze=new Uint8Array(0)):We?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Ue=0,_t=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return In(t);if(t.constructor===ne){if(t.g==null)var c=ze||(ze=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&At(this,t)}function At(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,I=0;4>I&&128<=c;I++)c=t.h[t.g++],a|=(c&127)<<7*I;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(I=0;5>I&&128<=c;I++)c=t.h[t.g++],b|=(c&127)<<7*I+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Xn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Xn(),b):(jt(t),b))))))}function we(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],I=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|I<<24)>>>0}Ce.prototype.m=function(){var t=we(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var $e=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,sn(t,0,c)};function je(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function Pe(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,$e.length?(a=$e.pop(),c&&(a.v=c.v),t&&At(a,t),t=a):t=new Ce(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Pe.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,on(a,t.l),!1)}function Vn(t){switch(t.h){case 0:if(t.h!=0)Vn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Vn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!Ie(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Vn(t)}while(1);break;default:t.j=!0,on(t.h,t.l)}}function ln(t,c,a){var b=t.g.i,I=ye(t.g),Y=t.g.g+I;if(t.g.i=Y,a(c,t),a=Y-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(I+" bytes, instead read "+(I-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=Y,t.g.i=b,c}var _e=[];function cn(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function Fe(t,c,a){je(t.g,8*c+2),je(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function re(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function Qe(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function te(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ke(t);if(t instanceof ne){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ke(c):null,t=t.g=c}return t}}return t}function zt(t,c){if(t!=null)return Array.isArray(t)||Qe(t)?hn(t,c):c(t)}function hn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=zt(t[b],c);if(c=Array.isArray(t)){var I;Ge?I=t[Ge]:I=t.g,c=(I==null?0:I)&1}return c&&re(a),a}I={};for(a in t)I[a]=zt(t[a],c);return I}function fe(t){return t=te(t),Array.isArray(t)?hn(t,fe):t}var Ct;function Vt(t,c,a){var b=Ct;Ct=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],Qe(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&re(b):this.u[t]=ie):(Ye(this),(b=this.h[t])?Array.isArray(b)&&re(b):this.h[t]=ie)}var ie=Object.freeze(re([]));function Ye(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function ee(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function oe(t,c,a){a=a===void 0?!1:a;var b=ee(t,c,a);return b==null&&(b=ie),b===ie&&(b=re(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=oe(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=ee(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Ye(t),t.h[c]=a):t.u[c+t.i]=a}function Pt(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function ae(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var I=ee(t,a,!1);return I==null?b:(c=new c(I),t.g[a]=c)}function ce(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var I=oe(t,a,!1);b=[];for(var Y=0;Y<I.length;Y++)b[Y]=new c(I[Y]);t.g[a]=b}return b}function St(t,c,a,b,I){var Y=ce(t,b,c);a=a||new b,t=oe(t,c),I!=null?(Y.splice(I,0,a),t.splice(I,0,a.u)):(Y.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return hn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=ee(t,c),t==null?0:t}function He(t,c){return t=ee(t,c),t==null?"":t}function qe(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var tn=Symbol();function fn(t,c,a){return t[tn]||(t[tn]=function(b,I){return c(b,I,a)})}function yn(t){var c=t[tn];if(!c){var a=t[nn]||(t[nn]=t());c=function(b,I){return Ne(b,I,a)},t[tn]=c}return c}function Le(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,c,a)}}function en(t){var c=Le(t),a=t.W,b=t.ea;return c?function(I,Y){return b(I,Y,a,c)}:function(I,Y){return b(I,Y,a)}}function On(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,vt,Zt){return c(mt,vt,Zt,a)};case 3:var b=t[1],I=yn(t[2]);return function(mt,vt,Zt){return c(mt,vt,Zt,b,I)};case 4:var Y=t[1],L=t[3],U=yn(t[2]);return function(mt,vt,Zt){return c(mt,vt,Zt,Y,U,L)};case 5:var j=t[1],Q=fn(j,t[3],t[4]);return function(mt,vt,Zt){return c(mt,vt,Zt,j,Q)};case 6:var D=t[1],st=t[5],ft=fn(D,t[3],t[4]);return function(mt,vt,Zt){return c(mt,vt,Zt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var nn=Symbol();function Ne(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,I=a[b];if(I)Array.isArray(I)&&(I=a[b]=On(I));else{var Y=a[0];Y&&(Y=Y[b])&&(I=a[b]=en(Y))}I&&I(c,t,b)||(I=c,b=t,Y=I.l,Vn(I),I.O||(I=sn(I.g.h,Y,I.g.g),(Y=b.m)?Y.push(I):b.m=[I]))}return t}function Zn(t,c){var a=new cn;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,I=b.length,Y=c=0;Y<I;Y++){var L=b[Y];L.length!==0&&(t.set(L,c),c+=L.length)}b=a.g,I=b.h,I!==0&&(t.set(b.g.subarray(0,I),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(_e.length){var b=_e.pop();t&&(At(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var I=new c;return Ne(I,t,a[nn]||(a[nn]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>_e.length&&_e.push(t)}}function Be(t,c,a){if(c=ee(c,a),c!=null){je(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Ue=_t=0:(_t=0,Ue=2147483648):isNaN(b)?(_t=0,Ue=2147483647):34028234663852886e22<b?(_t=0,Ue=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),_t=0,Ue=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,_t=0,Ue=(a<<31|c+127<<23|b&8388607)>>>0),a=Ue,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function kn(t,c,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var I=we(b);b=2*(I>>31)+1;var Y=I>>>20&2047;return t=4294967296*(I&1048575)+t,Pt(c,a,Y==2047?t?NaN:1/0*b:Y==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,Y-1075)*(t+4503599627370496),0),!0}function rn(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function vn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=oe(c,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Tn(t,c,a){return t.h!==5?!1:(t=t.g.m(),Pt(c,a,t,0),!0)}function An(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function un(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function wn(t,c,a){return t.h!==0?!1:(t=ye(t.g),Pt(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),Pt(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var I=t.g;t.g+=b,jt(t),t=t.h;var Y;if(Nn)(Y=xn)||(Y=xn=new TextDecoder("utf-8",{fatal:!1})),Y=Y.decode(t.subarray(I,I+b));else{b=I+b;for(var L=[],U=null,j,Q,D;I<b;)j=t[I++],128>j?L.push(j):224>j?I>=b?L.push(65533):(Q=t[I++],194>j||(Q&192)!==128?(I--,L.push(65533)):L.push((j&31)<<6|Q&63)):240>j?I>=b-1?L.push(65533):(Q=t[I++],(Q&192)!==128||j===224&&160>Q||j===237&&160<=Q||((Y=t[I++])&192)!==128?(I--,L.push(65533)):L.push((j&15)<<12|(Q&63)<<6|Y&63)):244>=j?I>=b-2?L.push(65533):(Q=t[I++],(Q&192)!==128||(j<<28)+(Q-144)>>30!==0||((Y=t[I++])&192)!==128||((D=t[I++])&192)!==128?(I--,L.push(65533)):(j=(j&7)<<18|(Q&63)<<12|(Y&63)<<6|D&63,j-=65536,L.push((j>>10&1023)+55296,(j&1023)+56320))):L.push(65533),8192<=L.length&&(U=Ln(U,L),L.length=0);Y=Ln(U,L)}return ut(c,a,Y),!0}function Fn(t,c,a,b,I){return t.h!==2?!1:(t=ln(t,new b,I),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Hn(t,c,a,b,I){return t.h!==2?!1:(t=ln(t,new b,I),St(c,a,t,b,void 0),!0)}function m(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}pt(W,Vt);function V(){return{1:un,2:rn,3:Qn,4:Qn}}function k(t,c){var a=ee(t,1);if(a!=null&&a!=null){je(c.g,8);var b=c.g;if(0<=a)je(b,a);else{for(var I=0;9>I;I++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Be(c,t,2),b=ee(t,3),b!=null&&Fe(c,3,En(b)),b=ee(t,4),b!=null&&Fe(c,4,En(b)),qe(t,c)}function z(t){Vt.call(this,t,-1,O)}pt(z,Vt),z.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Hn,W,V]}}var O=[1];function rt(t){Vt.call(this,t)}pt(rt,Vt);function bt(){return{1:rn,2:rn,3:rn,4:rn,5:rn}}function Rt(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5),qe(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}pt(Ut,Vt);function Nt(){return{1:[Hn,rt,bt]}}var $t=[1];function Et(t){Vt.call(this,t)}pt(Et,Vt);function Tt(){return{1:rn,2:rn,3:rn,4:rn,5:rn,6:An}}function kt(t,c){Be(c,t,1),Be(c,t,2),Be(c,t,3),Be(c,t,4),Be(c,t,5);var a=ee(t,6);if(a!=null&&a!=null){je(c.g,48);var b=c.g,I=a;a=0>I,I=Math.abs(I);var Y=I>>>0;for(I=Math.floor((I-Y)/4294967296),I>>>=0,a&&(I=~I>>>0,Y=(~Y>>>0)+1,4294967295<Y&&(Y=0,I++,4294967295<I&&(I=0))),Ue=Y,_t=I,a=Ue,Y=_t;0<Y||127<a;)Ot(b,a&127|128),a=(a>>>7|Y<<25)>>>0,Y>>>=7;Ot(b,a)}qe(t,c)}function Qt(t){Vt.call(this,t,-1,Je)}pt(Qt,Vt);function ue(){return{1:m,2:m,3:vn,4:[Fn,pe,ge],5:un,6:un,7:vn,8:vn,9:vn}}function pe(t){Vt.call(this,t)}pt(pe,Vt);function ge(){return{1:rn,2:rn,3:rn}}var Je=[3,7,8,9];function h(t){Vt.call(this,t)}pt(h,Vt);function y(){return{1:Tn,2:Tn,3:Tn}}function v(t){Vt.call(this,t)}pt(v,Vt);function C(){return{1:Tn,2:Tn,3:Tn}}function A(t){Vt.call(this,t)}pt(A,Vt);function _(){return{1:wn,2:[Fn,v,C],3:[Fn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,lt)}pt(M,Vt);function q(){return{1:wn,2:[Hn,A,_],3:Tn,4:vn,5:vn,6:vn}}var lt=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}pt(s,Vt);function X(){return{1:wn,2:[Hn,M,q],3:[Fn,Qt,ue],4:kn,5:vn,6:vn}}var R=[2,5,6];function F(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
87
+ `+v.getProgramInfoLog(_));C=h.m=_,v.useProgram(C),M=v.getUniformLocation(C,"sampler0"),h.j={I:v.getAttribLocation(C,"aVertex"),H:v.getAttribLocation(C,"aTex"),da:M},h.s=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.enableVertexAttribArray(h.j.I),v.vertexAttribPointer(h.j.I,2,v.FLOAT,!1,0,0),v.bufferData(v.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),v.STATIC_DRAW),v.bindBuffer(v.ARRAY_BUFFER,null),h.o=v.createBuffer(),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.enableVertexAttribArray(h.j.H),v.vertexAttribPointer(h.j.H,2,v.FLOAT,!1,0,0),v.bufferData(v.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),v.STATIC_DRAW),v.bindBuffer(v.ARRAY_BUFFER,null),v.uniform1i(M,0)}C=h.j,v.useProgram(h.m),v.canvas.width=y.width,v.canvas.height=y.height,v.viewport(0,0,y.width,y.height),v.activeTexture(v.TEXTURE0),h.h.bindTexture2d(y.glName),v.enableVertexAttribArray(C.I),v.bindBuffer(v.ARRAY_BUFFER,h.s),v.vertexAttribPointer(C.I,2,v.FLOAT,!1,0,0),v.enableVertexAttribArray(C.H),v.bindBuffer(v.ARRAY_BUFFER,h.o),v.vertexAttribPointer(C.H,2,v.FLOAT,!1,0,0),v.bindFramebuffer(v.DRAW_FRAMEBUFFER?v.DRAW_FRAMEBUFFER:v.FRAMEBUFFER,null),v.clearColor(0,0,0,0),v.clear(v.COLOR_BUFFER_BIT),v.colorMask(!0,!0,!0,!0),v.drawArrays(v.TRIANGLE_FAN,0,4),v.disableVertexAttribArray(C.I),v.disableVertexAttribArray(C.H),v.bindBuffer(v.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Tn(h,y){return y+h}function Hn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(v){y.addEventListener("load",function(){v()},!1),y.addEventListener("error",function(){v()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||Tn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var v=y.next();!v.done;v=y.next()){v=v.value;var C=h.options[v].default;C!==void 0&&(this.j[v]=typeof C=="function"?C():C)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function k(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function O(h){return St(h,function y(){var v=this,C,M,_,A,q,lt,s,G,R,Y,N;return ne(y,function(K){switch(K.g){case 1:return C=v,v.R?(M=k(v,v.j),P(K,W(),2)):K.return();case 2:if(_=K.h,typeof window=="object")return Hn("createMediapipeSolutionsWasm",{locateFile:v.locateFile}),Hn("createMediapipeSolutionsPackedAssets",{locateFile:v.locateFile}),lt=M.filter(function(E){return E.data!==void 0}),s=M.filter(function(E){return E.data===void 0}),G=Promise.all(lt.map(function(E){var et=rt(C,E.url);if(E.path!==void 0){var $=E.path;et=et.then(function(yt){return C.overrideFile($,yt),Promise.resolve(yt)})}return et})),R=Promise.all(s.map(function(E){return E.simd===void 0||E.simd&&_||!E.simd&&!_?p(C.locateFile(E.url,C.S)):Promise.resolve()})).then(function(){return St(C,function E(){var et,$,yt=this;return ne(E,function(Xt){if(Xt.g==1)return et=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Xt,et($),2);yt.h=Xt.h,Xt.g=0})})}),Y=function(){return St(C,function E(){var et=this;return ne(E,function($){return et.g.graph&&et.g.graph.url?$=P($,rt(et,et.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(K,Promise.all([R,G,Y]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return A=M.filter(function(E){return E.simd===void 0||E.simd&&_||!E.simd&&!_}).map(function(E){return C.locateFile(E.url,C.S)}),importScripts.apply(null,B(A)),P(K,createMediapipeSolutionsWasm(Module),6);case 6:v.h=K.h,v.l=new OffscreenCanvas(1,1),v.h.canvas=v.l,q=v.h.GL.createContext(v.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),v.h.GL.makeContextCurrent(q),K.g=4;break;case 7:if(v.l=document.createElement("canvas"),N=v.l.getContext("webgl2",{}),!N&&(N=v.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),K.return();v.D=N,v.h.canvas=v.l,v.h.createContext(v.l,!0,!0,{});case 4:v.i=new v.h.SolutionWasm,v.R=!1,K.g=0}})})}function ot(h){return St(h,function y(){var v=this,C,M,_,A,q,lt,s,G;return ne(y,function(R){if(R.g==1){if(v.g.graph&&v.g.graph.url&&v.P===v.g.graph.url)return R.return();if(v.o=!0,!v.g.graph||!v.g.graph.url){R.g=2;return}return v.P=v.g.graph.url,P(R,rt(v,v.g.graph.url),3)}for(R.g!=2&&(C=R.h,v.i.loadGraph(C)),M=T(Object.keys(v.B)),_=M.next();!_.done;_=M.next())A=_.value,v.i.overrideFile(A,v.B[A]);if(v.B={},v.g.listeners)for(q=T(v.g.listeners),lt=q.next();!lt.done;lt=q.next())s=lt.value,Et(v,s);G=v.j,v.j={},v.setOptions(G),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(v){y.i&&(y.i.reset(),y.m={},y.s={}),v.g=0})})},i.setOptions=function(h,y){var v=this;if(y=y||this.g.options){for(var C=[],M=[],_={},A=T(Object.keys(h)),q=A.next();!q.done;_={K:_.K,L:_.L},q=A.next()){var lt=q.value;lt in this.j&&this.j[lt]===h[lt]||(this.j[lt]=h[lt],q=y[lt],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[lt],C.push(function(s){return function(){return St(v,function G(){var R,Y=this;return ne(G,function(N){if(N.g==1)return P(N,s.K(s.L),2);R=N.h,R===!0&&(Y.o=!0),N.g=0})})}}(_))),q.graphOptionXref&&(lt={valueNumber:q.type===1?h[lt]:0,valueBoolean:q.type===0?h[lt]:!1,valueString:q.type===2?h[lt]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),lt),M.push(q))))}(C.length!==0||M.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(M),this.u=(this.u===void 0?[]:this.u).concat(C))}};function z(h){return St(h,function y(){var v=this,C,M,_,A,q,lt,s;return ne(y,function(G){switch(G.g){case 1:if(!v.o)return G.return();if(!v.u){G.g=2;break}C=T(v.u),M=C.next();case 3:if(M.done){G.g=5;break}return _=M.value,P(G,_(),4);case 4:M=C.next(),G.g=3;break;case 5:v.u=void 0;case 2:if(v.A){for(A=new v.h.GraphOptionChangeRequestList,q=T(v.A),lt=q.next();!lt.done;lt=q.next())s=lt.value,A.push_back(s);v.i.changeOptions(A),A.delete(),v.A=void 0}v.o=!1,G.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(v){return v.g==1?P(v,O(y),2):v.g!=3?P(v,ot(y),3):P(v,z(y),0)})})};function rt(h,y){return St(h,function v(){var C=this,M,_;return ne(v,function(A){return y in C.F?A.return(C.F[y]):(M=C.locateFile(y,""),_=fetch(M).then(function(q){return q.arrayBuffer()}),C.F[y]=_,A.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function v(){var C=this,M,_,A,q,lt,s,G,R,Y;return ne(v,function(N){switch(N.g){case 1:return C.g.inputs?(M=1e3*(y==null?performance.now():y),P(N,C.C,2)):N.return();case 2:return P(N,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,A=T(Object.keys(h)),q=A.next();!q.done;q=A.next())if(lt=q.value,s=C.g.inputs[lt]){t:{var K=C,E=h[lt];switch(s.type){case"video":var et=K.m[s.stream];if(et||(et=new An(K.h,K.D),K.m[s.stream]=et),K=et,K.l===0&&(K.l=K.h.createTexture()),typeof HTMLVideoElement<"u"&&E instanceof HTMLVideoElement){var $=E.videoWidth;et=E.videoHeight}else typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement?($=E.naturalWidth,et=E.naturalHeight):($=E.width,et=E.height);et={glName:K.l,width:$,height:et},$=K.g,$.canvas.width=et.width,$.canvas.height=et.height,$.activeTexture($.TEXTURE0),K.h.bindTexture2d(K.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,E),K.h.bindTexture2d(0),K=et;break t;case"detections":for(et=K.m[s.stream],et||(et=new _n(K.h),K.m[s.stream]=et),K=et,K.data||(K.data=new K.g.DetectionListData),K.data.reset(E.length),et=0;et<E.length;++et){$=E[et];var yt=K.data,Xt=yt.setBoundingBox,Mt=et,xt=$.T,dt=new on;Vt(dt,1,xt.Z),Vt(dt,2,xt.$),Vt(dt,3,xt.height),Vt(dt,4,xt.width),Vt(dt,5,xt.rotation),Vt(dt,6,xt.X);var Wt=xt=new Xe;_e(Wt,1,qt(dt,1)),_e(Wt,2,qt(dt,2)),_e(Wt,3,qt(dt,3)),_e(Wt,4,qt(dt,4)),_e(Wt,5,qt(dt,5));var It=qt(dt,6);if(It!=null&&It!=null){Qt(Wt.g,48);var Yt=Wt.g,Ft=It;It=0>Ft,Ft=Math.abs(Ft);var l=Ft>>>0;for(Ft=Math.floor((Ft-l)/4294967296),Ft>>>=0,It&&(Ft=~Ft>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ft++,4294967295<Ft&&(Ft=0))),he=l,Se=Ft,It=he,l=Se;0<l||127<It;)Yt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;Yt.push(It)}if(it(dt,Wt),xt=je(xt),Xt.call(yt,Mt,xt),$.O)for(yt=0;yt<$.O.length;++yt)dt=$.O[yt],Wt=!!dt.visibility,Xt=K.data,Mt=Xt.addNormalizedLandmark,xt=et,dt=Object.assign(Object.assign({},dt),{visibility:Wt?dt.visibility:0}),Wt=new mn,Vt(Wt,1,dt.x),Vt(Wt,2,dt.y),Vt(Wt,3,dt.z),dt.visibility&&Vt(Wt,4,dt.visibility),Yt=dt=new Xe,_e(Yt,1,qt(Wt,1)),_e(Yt,2,qt(Wt,2)),_e(Yt,3,qt(Wt,3)),_e(Yt,4,qt(Wt,4)),_e(Yt,5,qt(Wt,5)),it(Wt,Yt),dt=je(dt),Mt.call(Xt,xt,dt);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=K.data,Mt=Xt.addClassification,xt=et,dt=$.M[yt],Wt=new me,Vt(Wt,2,dt.Y),dt.index&&Vt(Wt,1,dt.index),dt.label&&Vt(Wt,3,dt.label),dt.displayName&&Vt(Wt,4,dt.displayName),Yt=dt=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(Yt.g,8),It=Yt.g,0<=l)Qt(It,l);else{for(Ft=0;9>Ft;Ft++)It.push(l&127|128),l>>=7;It.push(1)}_e(Yt,2,qt(Wt,2)),It=qt(Wt,3),It!=null&&(It=xn(It),Qt(Yt.g,26),Qt(Yt.g,It.length),Ot(Yt,Yt.g.end()),Ot(Yt,It)),It=qt(Wt,4),It!=null&&(It=xn(It),Qt(Yt.g,34),Qt(Yt.g,It.length),Ot(Yt,Yt.g.end()),Ot(Yt,It)),it(Wt,Yt),dt=je(dt),Mt.call(Xt,xt,dt)}}K=K.data;break t;default:K={}}}switch(G=K,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},G),{stream:R,timestamp:M}));break;case"detections":Y=G,Y.stream=R,Y.timestamp=M,_.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),P(N,C.C,4);case 4:_.delete(),N.g=0}})})};function bt(h,y,v){return St(h,function C(){var M,_,A,q,lt,s,G=this,R,Y,N,K,E,et,$,yt;return ne(C,function(Xt){switch(Xt.g){case 1:if(!v)return Xt.return(y);for(M={},_=0,A=T(Object.keys(v)),q=A.next();!q.done;q=A.next())lt=q.value,s=v[lt],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(G.G=!1),R=T(Object.keys(v)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(Y=q.value,N=v[Y],typeof N=="string")return $=M,yt=Y,P(Xt,Rt(G,Y,y[N]),14);if(K=y[N.stream],N.type==="detection_list"){if(K){for(var Mt=K.getRectList(),xt=K.getLandmarksList(),dt=K.getClassificationsList(),Wt=[],It=0;It<Mt.size();++It){var Yt=Mt.get(It);t:{var Ft=new on;for(Yt=new Ze(Yt);Ce(Yt);)switch(Yt.i){case 13:var l=zt(Yt);Vt(Ft,1,l);break;case 21:l=zt(Yt),Vt(Ft,2,l);break;case 29:l=zt(Yt),Vt(Ft,3,l);break;case 37:l=zt(Yt),Vt(Ft,4,l);break;case 45:l=zt(Yt),Vt(Ft,5,l);break;case 48:l=Ve(Yt.g),Vt(Ft,6,l);break;default:if(!ct(Ft,Yt))break t}}Ft={Z:Ct(Ft,1),$:Ct(Ft,2),height:Ct(Ft,3),width:Ct(Ft,4),rotation:Ct(Ft,5,0),X:fe(Ft,6,0)},Yt=Fe(rn(xt.get(It)),mn).map(wn);var Z=dt.get(It);t:for(l=new en,Z=new Ze(Z);Ce(Z);)switch(Z.i){case 10:l.addClassification(xe(Z,new me,He));break;default:if(!ct(l,Z))break t}Ft={T:Ft,O:Yt,M:vn(l)},Wt.push(Ft)}Mt=Wt}else Mt=[];M[Y]=Mt,Xt.g=7;break}if(N.type==="proto_list"){if(K){for(Mt=Array(K.size()),xt=0;xt<K.size();xt++)Mt[xt]=K.get(xt);K.delete()}else Mt=[];M[Y]=Mt,Xt.g=7;break}if(K===void 0){Xt.g=3;break}if(N.type==="float_list"){M[Y]=K,Xt.g=7;break}if(N.type==="proto"){M[Y]=K,Xt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return E=G.s[Y],E||(E=new An(G.h,G.D),G.s[Y]=E),P(Xt,dn(E,K,G.G),13);case 13:et=Xt.h,M[Y]=et;case 7:N.transform&&M[Y]&&(M[Y]=N.transform(M[Y])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(M)}})})}function Rt(h,y,v){return St(h,function C(){var M=this,_;return ne(C,function(A){return typeof v=="number"||v instanceof Uint8Array||v instanceof M.h.Uint8BlobList?A.return(v):v instanceof M.h.Texture2dDataOut?(_=M.s[y],_||(_=new An(M.h,M.D),M.s[y]=_),A.return(dn(_,v,M.G))):A.return(void 0)})})}function Et(h,y){for(var v=y.name||"$",C=[].concat(B(y.wants)),M=new h.h.StringList,_=T(y.wants),A=_.next();!A.done;A=_.next())M.push_back(A.value);_=h.h.PacketListener.implement({onResults:function(q){for(var lt={},s=0;s<y.wants.length;++s)lt[C[s]]=q.get(s);var G=h.listeners[v];G&&(h.C=bt(h,lt,y.outs).then(function(R){R=G(R);for(var Y=0;Y<y.wants.length;++Y){var N=lt[C[Y]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(M,_),M.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Nt(h){h=En(h);var y=h.getMesh();if(!y)return h;var v=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return v};var C=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return C},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Nt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Fe(rn(y),mn).map(wn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},Jt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],wt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ut=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(B(Jt),B(wt),B(Ut),B(Dt),B(ae),B(pe));function Je(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Je.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(v){return P(v,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var v=this;return ne(y,function(C){return P(C,v.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",Je),Re("FACEMESH_LIPS",Jt),Re("FACEMESH_LEFT_EYE",wt),Re("FACEMESH_LEFT_EYEBROW",Ut),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),v=h.getRows(),C=h.getPackedDataList(),M=[],_=0;_<v;_++)M.push(Array(y));for(_=0;_<v;_++)for(var A=0;A<y;A++){var q=h.getLayout()===1?_*y+A:A*v+_;M[_][A]=C[q]}return M}),Re("VERSION","0.4.1633559619")}).call(pi);const bi={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function m(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var X=m(this);function S(t,c){if(c)t:{var a=X;t=t.split(".");for(var b=0;b<t.length-1;b++){var I=t[b];if(!(I in a))break t;a=a[I]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}S("Symbol",function(t){function c(F){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(F||"")+"_"+I++,F)}function a(F,L){this.g=F,r(this,"description",{configurable:!0,writable:!0,value:L})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",I=0;return c}),S("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=X[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function B(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var nt=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=ut;function mt(t,c){if(t.prototype=nt(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function $e(t){this.g=new Bt,this.h=t}function ze(t,c){kt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),jt(t))}function We(t,c,a,b){try{var I=c.call(t.g.i,a);if(!(I instanceof Object))throw new TypeError("Iterator result "+I+" is not an object");if(!I.done)return t.g.l=!1,I;var F=I.value}catch(L){return t.g.i=null,ee(t.g,L),jt(t)}return t.g.i=null,b.call(t.g,F),jt(t)}function jt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Nn(t){this.next=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=jt(t)),c},this.throw=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=jt(t)),c},this.return=function(c){return ze(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,I){function F(L){L.done?b(L.value):Promise.resolve(L.value).then(c,a).then(F,I)}F(t.next())})}function gt(t){return ne(new Nn(new $e(t)))}S("Promise",function(t){function c(L){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{L(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(L){return L instanceof c?L:new c(function(U){U(L)})}if(t)return t;a.prototype.h=function(L){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(L)};var I=X.setTimeout;a.prototype.i=function(L){I(L,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var L=this.g;this.g=[];for(var U=0;U<L.length;++U){var j=L[U];L[U]=null;try{j()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(L){this.i(function(){throw L})},c.prototype.j=function(){function L(Q){return function(D){j||(j=!0,Q.call(U,D))}}var U=this,j=!1;return{resolve:L(this.D),reject:L(this.l)}},c.prototype.D=function(L){if(L===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(L instanceof c)this.G(L);else{t:switch(typeof L){case"object":var U=L!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(L):this.m(L)}},c.prototype.A=function(L){var U=void 0;try{U=L.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,L):this.m(L)},c.prototype.l=function(L){this.s(2,L)},c.prototype.m=function(L){this.s(1,L)},c.prototype.s=function(L,U){if(this.h!=0)throw Error("Cannot settle("+L+", "+U+"): Promise already settled in state"+this.h);this.h=L,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var L=this;I(function(){if(L.C()){var U=X.console;typeof U<"u"&&U.error(L.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var L=X.CustomEvent,U=X.Event,j=X.dispatchEvent;return typeof j>"u"?!0:(typeof L=="function"?L=new L("unhandledrejection",{cancelable:!0}):typeof U=="function"?L=new U("unhandledrejection",{cancelable:!0}):(L=X.document.createEvent("CustomEvent"),L.initCustomEvent("unhandledrejection",!1,!0,L)),L.promise=this,L.reason=this.i,j(L))},c.prototype.B=function(){if(this.g!=null){for(var L=0;L<this.g.length;++L)F.h(this.g[L]);this.g=null}};var F=new a;return c.prototype.G=function(L){var U=this.j();L.K(U.resolve,U.reject)},c.prototype.H=function(L,U){var j=this.j();try{L.call(U,j.resolve,j.reject)}catch(Q){j.reject(Q)}},c.prototype.then=function(L,U){function j(ht,ft){return typeof ht=="function"?function(Gt){try{Q(ht(Gt))}catch(vt){D(vt)}}:ft}var Q,D,st=new c(function(ht,ft){Q=ht,D=ft});return this.K(j(L,Q),j(U,D)),st},c.prototype.catch=function(L){return this.then(void 0,L)},c.prototype.K=function(L,U){function j(){switch(Q.h){case 1:L(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?F.h(j):this.g.push(j),this.o=!0},c.resolve=b,c.reject=function(L){return new c(function(U,j){j(L)})},c.race=function(L){return new c(function(U,j){for(var Q=T(L),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,j)})},c.all=function(L){var U=T(L),j=U.next();return j.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ht[Gt]=vt,ft--,ft==0&&Q(ht)}}var ht=[],ft=0;do ht.push(void 0),ft++,b(j.value).K(st(ht.length-1),D),j=U.next();while(!j.done)})},c});function qe(t,c){t instanceof String&&(t+="");var a=0,b=!1,I={next:function(){if(!b&&a<t.length){var F=a++;return{value:c(F,t[F]),done:!1}}return b=!0,{done:!0,value:void 0}}};return I[Symbol.iterator]=function(){return I},I}var jn=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var I in b)Object.prototype.hasOwnProperty.call(b,I)&&(t[I]=b[I])}return t};S("Object.assign",function(t){return t||jn}),S("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),S("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var I=b.length;for(a=a||0,0>a&&(a=Math.max(a+I,0));a<I;a++){var F=b[a];if(F===c||Object.is(F,c))return!0}return!1}}),S("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),S("Array.prototype.keys",function(t){return t||function(){return qe(this,function(c){return c})}});var Re=this||self;function Ht(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function we(t){throw t}function ln(t,c){we(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){we(Error("Failed to read varint, encoding is invalid."))}function Ln(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var xn,Jn=typeof TextDecoder<"u",hn,bn=typeof TextEncoder<"u";function Un(t){if(bn)t=(hn||(hn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),I=0;I<t.length;I++){var F=t.charCodeAt(I);if(128>F)b[a++]=F;else{if(2048>F)b[a++]=F>>6|192;else{if(55296<=F&&57343>=F){if(56319>=F&&I<t.length){var L=t.charCodeAt(++I);if(56320<=L&&57343>=L){F=1024*(F-55296)+L-56320+65536,b[a++]=F>>18|240,b[a++]=F>>12&63|128,b[a++]=F>>6&63|128,b[a++]=F&63|128;continue}else I--}if(c)throw Error("Found an unpaired surrogate");F=65533}b[a++]=F>>12|224,b[a++]=F>>6&63|128}b[a++]=F&63|128}}t=b.subarray(0,a)}return t}var Cn={},Oe=null;function Ke(t){var c;c===void 0&&(c=0),he(),c=Cn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",I=0,F=0;I<t.length-2;I+=3){var L=t[I],U=t[I+1],j=t[I+2],Q=c[L>>2];L=c[(L&3)<<4|U>>4],U=c[(U&15)<<2|j>>6],j=c[j&63],a[F++]=Q+L+U+j}switch(Q=0,j=b,t.length-I){case 2:Q=t[I+1],j=c[(Q&15)<<2]||b;case 1:t=t[I],a[F]=c[t>>2]+c[(t&3)<<4|Q>>4]+j+b}return a.join("")}function In(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),I=0;return Wn(t,function(F){b[I++]=F}),b.subarray(0,I)}function Wn(t,c){function a(j){for(;b<t.length;){var Q=t.charAt(b++),D=Oe[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return j}he();for(var b=0;;){var I=a(-1),F=a(0),L=a(64),U=a(64);if(U===64&&I===-1)break;c(I<<2|F>>4),L!=64&&(c(F<<4&240|L>>2),U!=64&&c(L<<6&192|U))}}function he(){if(!Oe){Oe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Cn[a]=b;for(var I=0;I<b.length;I++){var F=b[I];Oe[F]===void 0&&(Oe[F]=I)}}}}var Se=typeof Uint8Array=="function",Pe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function cn(t,c,a){return c===a?Pe||(Pe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return In(t);if(t.constructor===re){if(t.g==null)var c=Pe||(Pe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&At(this,t)}function At(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,I=0;4>I&&128<=c;I++)c=t.h[t.g++],a|=(c&127)<<7*I;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(I=0;5>I&&128<=c;I++)c=t.h[t.g++],b|=(c&127)<<7*I+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Xn()}function zt(t){t.g>t.i&&(t.j=!0,we(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,zt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,zt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,zt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,zt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,zt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Xn(),b):(zt(t),b))))))}function Ye(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],I=t.h[t.g+3];return t.g+=4,zt(t),(c<<0|a<<8|b<<16|I<<24)>>>0}Ce.prototype.m=function(){var t=Ye(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var tn=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,cn(t,0,c)};function je(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function _e(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,tn.length?(a=tn.pop(),c&&(a.v=c.v),t&&At(a,t),t=a):t=new Ce(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,ln(a,t.l),!1)}function Vn(t){switch(t.h){case 0:if(t.h!=0)Vn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,zt(t);break t}c++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,zt(t);break;case 2:t.h!=2?Vn(t):(c=ye(t.g),t=t.g,t.g+=c,zt(t));break;case 5:t=t.g,t.g+=4,zt(t);break;case 3:c=t.i;do{if(!Ie(t)){t.j=!0,we(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,we(Error("Unmatched end-group tag")));break}Vn(t)}while(1);break;default:t.j=!0,ln(t.h,t.l)}}function un(t,c,a){var b=t.g.i,I=ye(t.g),F=t.g.g+I;if(t.g.i=F,a(c,t),a=F-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(I+" bytes, instead read "+(I-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=F,t.g.i=b,c}var Qe=[];function an(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function Te(t,c,a){je(t.g,8*c+2),je(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ke(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ke(c):null,t=t.g=c}return t}}return t}function Pt(t,c){if(t!=null)return Array.isArray(t)||De(t)?fn(t,c):c(t)}function fn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],c);if(c=Array.isArray(t)){var I;Ge?I=t[Ge]:I=t.g,c=(I==null?0:I)&1}return c&&ie(a),a}I={};for(a in t)I[a]=Pt(t[a],c);return I}function fe(t){return t=qt(t),Array.isArray(t)?fn(t,fe):t}var Ct;function Vt(t,c,a){var b=Ct;Ct=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Fe(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Fe(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ct(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ct(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Fe(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ct(t,c,a):ct(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var I=te(t,a,!1);return I==null?b:(c=new c(I),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var I=se(t,a,!1);b=[];for(var F=0;F<I.length;F++)b[F]=new c(I[F]);t.g[a]=b}return b}function St(t,c,a,b,I){var F=ue(t,b,c);a=a||new b,t=se(t,c),I!=null?(F.splice(I,0,a),t.splice(I,0,a.u)):(F.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return fn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function He(t,c){return t=te(t,c),t==null?"":t}function en(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var nn=Symbol();function mn(t,c,a){return t[nn]||(t[nn]=function(b,I){return c(b,I,a)})}function yn(t){var c=t[nn];if(!c){var a=t[on]||(t[on]=t());c=function(b,I){return Ne(b,I,a)},t[nn]=c}return c}function Le(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,mn(t.W.g,c,a)}}function rn(t){var c=Le(t),a=t.W,b=t.ea;return c?function(I,F){return b(I,F,a,c)}:function(I,F){return b(I,F,a)}}function zn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(ft,Gt,vt){return c(ft,Gt,vt,a)};case 3:var b=t[1],I=yn(t[2]);return function(ft,Gt,vt){return c(ft,Gt,vt,b,I)};case 4:var F=t[1],L=t[3],U=yn(t[2]);return function(ft,Gt,vt){return c(ft,Gt,vt,F,U,L)};case 5:var j=t[1],Q=mn(j,t[3],t[4]);return function(ft,Gt,vt){return c(ft,Gt,vt,j,Q)};case 6:var D=t[1],st=t[5],ht=mn(D,t[3],t[4]);return function(ft,Gt,vt){return c(ft,Gt,vt,D,ht,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var on=Symbol();function Ne(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,I=a[b];if(I)Array.isArray(I)&&(I=a[b]=zn(I));else{var F=a[0];F&&(F=F[b])&&(I=a[b]=rn(F))}I&&I(c,t,b)||(I=c,b=t,F=I.l,Vn(I),I.O||(I=cn(I.g.h,F,I.g.g),(F=b.m)?F.push(I):b.m=[I]))}return t}function Zn(t,c){var a=new an;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,I=b.length,F=c=0;F<I;F++){var L=b[F];L.length!==0&&(t.set(L,c),c+=L.length)}b=a.g,I=b.h,I!==0&&(t.set(b.g.subarray(0,I),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(Qe.length){var b=Qe.pop();t&&(At(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var I=new c;return Ne(I,t,a[on]||(a[on]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Me(t,c,a){if(c=te(c,a),c!=null){je(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Ye(b);var I=Ye(b);b=2*(I>>31)+1;var F=I>>>20&2047;return t=4294967296*(I&1048575)+t,_t(c,a,F==2047?t?NaN:1/0*b:F==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,F-1075)*(t+4503599627370496),0),!0}function sn(t,c,a){return t.h!==5?!1:(ct(c,a,t.g.m()),!0)}function vn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function wn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function An(t,c,a){return t.h!==0?!1:(ct(c,a,xe(t.g)),!0)}function dn(t,c,a){return t.h!==0?!1:(ct(c,a,ye(t.g)),!0)}function Yn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var I=t.g;t.g+=b,zt(t),t=t.h;var F;if(Jn)(F=xn)||(F=xn=new TextDecoder("utf-8",{fatal:!1})),F=F.decode(t.subarray(I,I+b));else{b=I+b;for(var L=[],U=null,j,Q,D;I<b;)j=t[I++],128>j?L.push(j):224>j?I>=b?L.push(65533):(Q=t[I++],194>j||(Q&192)!==128?(I--,L.push(65533)):L.push((j&31)<<6|Q&63)):240>j?I>=b-1?L.push(65533):(Q=t[I++],(Q&192)!==128||j===224&&160>Q||j===237&&160<=Q||((F=t[I++])&192)!==128?(I--,L.push(65533)):L.push((j&15)<<12|(Q&63)<<6|F&63)):244>=j?I>=b-2?L.push(65533):(Q=t[I++],(Q&192)!==128||(j<<28)+(Q-144)>>30!==0||((F=t[I++])&192)!==128||((D=t[I++])&192)!==128?(I--,L.push(65533)):(j=(j&7)<<18|(Q&63)<<12|(F&63)<<6|D&63,j-=65536,L.push((j>>10&1023)+55296,(j&1023)+56320))):L.push(65533),8192<=L.length&&(U=Ln(U,L),L.length=0);F=Ln(U,L)}return ct(c,a,F),!0}function Tn(t,c,a,b,I){return t.h!==2?!1:(t=un(t,new b,I),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ct(c,a,b,!1),!0)}function Hn(t,c,a,b,I){return t.h!==2?!1:(t=un(t,new b,I),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ct(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}mt(W,Vt);function V(){return{1:dn,2:sn,3:Qn,4:Qn}}function k(t,c){var a=te(t,1);if(a!=null&&a!=null){je(c.g,8);var b=c.g;if(0<=a)je(b,a);else{for(var I=0;9>I;I++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Me(c,t,2),b=te(t,3),b!=null&&Te(c,3,Un(b)),b=te(t,4),b!=null&&Te(c,4,Un(b)),en(t,c)}function O(t){Vt.call(this,t,-1,z)}mt(O,Vt),O.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Hn,W,V]}}var z=[1];function rt(t){Vt.call(this,t)}mt(rt,Vt);function bt(){return{1:sn,2:sn,3:sn,4:sn,5:sn}}function Rt(t,c){Me(c,t,1),Me(c,t,2),Me(c,t,3),Me(c,t,4),Me(c,t,5),en(t,c)}function Et(t){Vt.call(this,t,-1,$t)}mt(Et,Vt);function Nt(){return{1:[Hn,rt,bt]}}var $t=[1];function Jt(t){Vt.call(this,t)}mt(Jt,Vt);function wt(){return{1:sn,2:sn,3:sn,4:sn,5:sn,6:An}}function Ut(t,c){Me(c,t,1),Me(c,t,2),Me(c,t,3),Me(c,t,4),Me(c,t,5);var a=te(t,6);if(a!=null&&a!=null){je(c.g,48);var b=c.g,I=a;a=0>I,I=Math.abs(I);var F=I>>>0;for(I=Math.floor((I-F)/4294967296),I>>>=0,a&&(I=~I>>>0,F=(~F>>>0)+1,4294967295<F&&(F=0,I++,4294967295<I&&(I=0))),Be=F,Qt=I,a=Be,F=Qt;0<F||127<a;)Ot(b,a&127|128),a=(a>>>7|F<<25)>>>0,F>>>=7;Ot(b,a)}en(t,c)}function Dt(t){Vt.call(this,t,-1,Je)}mt(Dt,Vt);function ae(){return{1:p,2:p,3:vn,4:[Tn,pe,ge],5:dn,6:dn,7:vn,8:vn,9:vn}}function pe(t){Vt.call(this,t)}mt(pe,Vt);function ge(){return{1:sn,2:sn,3:sn}}var Je=[3,7,8,9];function h(t){Vt.call(this,t)}mt(h,Vt);function y(){return{1:wn,2:wn,3:wn}}function v(t){Vt.call(this,t)}mt(v,Vt);function C(){return{1:wn,2:wn,3:wn}}function M(t){Vt.call(this,t)}mt(M,Vt);function _(){return{1:Yn,2:[Tn,v,C],3:[Tn,h,y],4:_n}}function A(t){Vt.call(this,t,-1,lt)}mt(A,Vt);function q(){return{1:Yn,2:[Hn,M,_],3:wn,4:vn,5:vn,6:vn}}var lt=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}mt(s,Vt);function G(){return{1:Yn,2:[Hn,A,q],3:[Tn,Dt,ae],4:En,5:vn,6:vn}}var R=[2,5,6];function Y(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
88
88
 
89
- `+t.getShaderInfoLog(a));return a}function N(t){return ce(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:ee(c,3)!=null?He(c,3):void 0,displayName:ee(c,4)!=null?He(c,4):void 0}})}function K(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:ee(t,4)!=null?it(t,4):void 0}}function B(t,c){this.h=t,this.g=c,this.l=0}function nt(t,c,a){return $(t,c),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function $(t,c){var a=t.g;if(t.m===void 0){var b=F(a,`
89
+ `+t.getShaderInfoLog(a));return a}function N(t){return ue(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:te(c,3)!=null?He(c,3):void 0,displayName:te(c,4)!=null?He(c,4):void 0}})}function K(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:te(t,4)!=null?it(t,4):void 0}}function E(t,c){this.h=t,this.g=c,this.l=0}function et(t,c,a){return $(t,c),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function $(t,c){var a=t.g;if(t.m===void 0){var b=Y(a,`
90
90
  attribute vec2 aVertex;
91
91
  attribute vec2 aTex;
92
92
  varying vec2 vTex;
93
93
  void main(void) {
94
94
  gl_Position = vec4(aVertex, 0.0, 1.0);
95
95
  vTex = aTex;
96
- }`,0),I=F(a,`
96
+ }`,0),I=Y(a,`
97
97
  precision mediump float;
98
98
  varying vec2 vTex;
99
99
  uniform sampler2D sampler0;
100
100
  void main(){
101
101
  gl_FragColor = texture2D(sampler0, vTex);
102
- }`,1),Y=a.createProgram();if(a.attachShader(Y,b),a.attachShader(Y,I),a.linkProgram(Y),!a.getProgramParameter(Y,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
102
+ }`,1),F=a.createProgram();if(a.attachShader(F,b),a.attachShader(F,I),a.linkProgram(F),!a.getProgramParameter(F,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
103
103
 
104
- `+a.getProgramInfoLog(Y));b=t.m=Y,a.useProgram(b),I=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:I},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(I,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Gt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Bt(t,c){return c+t}function xt(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Xt(){return gt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Gt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function It(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Bt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=w(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,I,Y,L,U,j,Q,D,st;return gt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ft,Xt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),L=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),j=Promise.all(L.map(function(mt){var vt=Z(t,mt.url);if(mt.path!==void 0){var Zt=mt.path;vt=vt.then(function(Kt){return t.overrideFile(Zt,Kt),Promise.resolve(Kt)})}return vt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,vt,Zt;return gt(function(Kt){if(Kt.g==1)return mt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,P(Kt,mt(vt),2);Zt.h=Kt.h,Kt.g=0})}),D=function(){return gt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,Z(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,j,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,E(b)),I=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:I.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,Y=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(Y),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Yt(t){var c,a,b,I,Y,L,U,j;return gt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,Z(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=w(Object.keys(t.C)),b=a.next();!b.done;b=a.next())I=b.value,t.i.overrideFile(I,t.C[I]);if(t.C={},t.g.listeners)for(Y=w(t.g.listeners),L=Y.next();!L.done;L=Y.next())U=L.value,J(t,U);j=t.j,t.j={},t.setOptions(j),Q.g=0})}i.reset=function(){var t=this;return gt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],I=[],Y={},L=w(Object.keys(t)),U=L.next();!U.done;Y={L:Y.L,M:Y.M},U=L.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=c[j],U!==void 0&&(U.onChange&&(Y.L=U.onChange,Y.M=t[j],b.push(function(Q){return function(){var D;return gt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(Y))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),I.push(U))))}(b.length!==0||I.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(I),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,I,Y,L,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}c=w(t.A),a=c.next();case 3:if(a.done){j.g=5;break}return b=a.value,P(j,b(),4);case 4:a=c.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(I=new t.h.GraphOptionChangeRequestList,Y=w(t.B),L=Y.next();!L.done;L=Y.next())U=L.value,I.push_back(U);t.i.changeOptions(I),I.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return gt(function(c){return c.g==1?P(c,wt(t),2):c.g!=3?P(c,Yt(t),3):P(c,l(t),0)})};function Z(t,c){var a,b;return gt(function(I){return c in t.G?I.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(Y){return Y.arrayBuffer()}),t.G[c]=b,I.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,I,Y,L,U,j,Q,D,st;return gt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ft,a.D,2)):ft.return();case 2:return P(ft,a.initialize(),3);case 3:for(I=new a.h.PacketDataList,Y=w(Object.keys(t)),L=Y.next();!L.done;L=Y.next())if(U=L.value,j=a.g.inputs[U]){t:{var mt=t[U];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new B(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var Zt=mt.videoWidth,Kt=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(Zt=mt.naturalWidth,Kt=mt.naturalHeight):(Zt=mt.width,Kt=mt.height);Kt={glName:vt.l,width:Zt,height:Kt},Zt=vt.g,Zt.canvas.width=Kt.width,Zt.canvas.height=Kt.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,mt),vt.h.bindTexture2d(0),vt=Kt;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(mt.length),Kt=0;Kt<mt.length;++Kt){Zt=mt[Kt];var se=vt.data,le=se.setBoundingBox,Ee=Kt,Rn=Zt.U,ke=new Et;if(ut(ke,1,Rn.aa),ut(ke,2,Rn.ba),ut(ke,3,Rn.height),ut(ke,4,Rn.width),ut(ke,5,Rn.rotation),ut(ke,6,Rn.Z),Rn=Zn(ke,kt),le.call(se,Ee,Rn),Zt.P)for(se=0;se<Zt.P.length;++se){ke=Zt.P[se];var Jn=!!ke.visibility;le=vt.data,Ee=le.addNormalizedLandmark,Rn=Kt,ke=Object.assign(Object.assign({},ke),{visibility:Jn?ke.visibility:0}),Jn=new rt,ut(Jn,1,ke.x),ut(Jn,2,ke.y),ut(Jn,3,ke.z),ke.visibility&&ut(Jn,4,ke.visibility),ke=Zn(Jn,Rt),Ee.call(le,Rn,ke)}if(Zt.N)for(se=0;se<Zt.N.length;++se)le=vt.data,Ee=le.addClassification,Rn=Kt,ke=Zt.N[se],Jn=new W,ut(Jn,2,ke.$),ke.index&&ut(Jn,1,ke.index),ke.label&&ut(Jn,3,ke.label),ke.displayName&&ut(Jn,4,ke.displayName),ke=Zn(Jn,k),Ee.call(le,Rn,ke)}vt=vt.data;break t;default:vt={}}}switch(Q=vt,D=j.stream,j.type){case"video":I.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,I.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(I),P(ft,a.D,4);case 4:I.delete(),ft.g=0}})};function x(t,c,a){var b,I,Y,L,U,j,Q,D,st,ft,mt,vt,Zt,Kt;return gt(function(se){switch(se.g){case 1:if(!a)return se.return(c);for(b={},I=0,Y=w(Object.keys(a)),L=Y.next();!L.done;L=Y.next())U=L.value,j=a[U],typeof j!="string"&&j.type==="texture"&&c[j.stream]!==void 0&&++I;1<I&&(t.H=!1),Q=w(Object.keys(a)),L=Q.next();case 2:if(L.done){se.g=4;break}if(D=L.value,st=a[D],typeof st=="string")return Zt=b,Kt=D,P(se,T(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var le=ft.getRectList(),Ee=ft.getLandmarksList(),Rn=ft.getClassificationsList(),ke=[],Jn=0;Jn<le.size();++Jn){var br=Sn(le.get(Jn),Et,Tt);br={U:{aa:it(br,1),ba:it(br,2),height:it(br,3),width:it(br,4),rotation:it(br,5,0),Z:me(br,6)},P:ce(Sn(Ee.get(Jn),Ut,Nt),rt,1).map(K),N:N(Sn(Rn.get(Jn),z,ot))},ke.push(br)}le=ke}else le=[];b[D]=le,se.g=7;break}if(st.type==="proto_list"){if(ft){for(le=Array(ft.size()),Ee=0;Ee<ft.size();Ee++)le[Ee]=ft.get(Ee);ft.delete()}else le=[];b[D]=le,se.g=7;break}if(ft===void 0){se.g=3;break}if(st.type==="float_list"){b[D]=ft,se.g=7;break}if(st.type==="proto"){b[D]=ft,se.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),P(se,nt(mt,ft,t.H),13);case 13:vt=se.h,b[D]=vt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),se.g=3;break;case 14:Zt[Kt]=se.h;case 3:L=Q.next(),se.g=2;break;case 4:return se.return(b)}})}function T(t,c,a){var b;return gt(function(I){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?I.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),I.return(nt(b,a,t.H))):I.return(void 0)})}function J(t,c){for(var a=c.name||"$",b=[].concat(E(c.wants)),I=new t.h.StringList,Y=w(c.wants),L=Y.next();!L.done;L=Y.next())I.push_back(L.value);Y=t.h.PacketListener.implement({onResults:function(U){for(var j={},Q=0;Q<c.wants.length;++Q)j[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,j,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=j[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(I,Y),I.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=ae(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=ae(t,v,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=Sn(t,s,X);t=[],c=ce(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ce(c[a],A,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function f(t){var c=this;t=t||{},this.g=new It({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,I,Y,L;return gt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),I=g(b),Y="object_detection_3d.tflite",P(U,Z(c.g,I),2)):(L=U.h,c.g.overrideFile(Y,L),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(I){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),I.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(I){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),I.return(!0)})}},imageSize:{onChange:function(a){var b,I,Y,L;return gt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,I=[b[0]/2,b[1]/2],Y=[c.h[0]/I[0],c.h[1]/I[1]],L=[c.i[0]/I[0],c.i[1]/I[1]],c.setOptions({focalLength:Y,principalPoint:L}),U.g=0})}}}})}i=f.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return gt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return gt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ht("Objectron",f),Ht("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ht("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ht("VERSION","0.4.1636596145")}).call(pi);const bi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function p(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var G=p(this);function S(s,X){if(X)t:{var R=G;s=s.split(".");for(var F=0;F<s.length-1;F++){var N=s[F];if(!(N in R))break t;R=R[N]}s=s[s.length-1],F=R[s],X=X(F),X!=F&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}S("Symbol",function(s){function X(K){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(F+(K||"")+"_"+N++,K)}function R(K,B){this.g=K,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var F="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),S("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var F=G[X[R]];typeof F=="function"&&typeof F.prototype[s]!="function"&&r(F.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function w(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function E(s){if(!(s instanceof Array)){s=w(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},ct;if(typeof Object.setPrototypeOf=="function")ct=Object.setPrototypeOf;else{var dt;t:{var Ft={a:!0},Lt={};try{Lt.__proto__=Ft,dt=Lt.a;break t}catch{}dt=!1}ct=dt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=ct;function pt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var F=Object.getOwnPropertyDescriptor(X,R);F&&Object.defineProperty(s,R,F)}else s[R]=X[R];s.ea=X.prototype}function Mt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Jt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Mt.prototype.o=function(s){this.h=s};function qt(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Mt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function De(s){this.g=new Mt,this.h=s}function an(s,X){Jt(s.g);var R=s.g.i;return R?Ve(s,"return"in R?R.return:function(F){return{value:F,done:!0}},X,s.g.return):(s.g.return(X),Dt(s))}function Ve(s,X,R,F){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var K=N.value}catch(B){return s.g.i=null,qt(s.g,B),Dt(s)}return s.g.i=null,F.call(s.g,K),Dt(s)}function Dt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,qt(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Kn(s){this.next=function(X){return Jt(s.g),s.g.i?X=Ve(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=Dt(s)),X},this.throw=function(X){return Jt(s.g),s.g.i?X=Ve(s,s.g.i.throw,X,s.g.o):(qt(s.g,X),X=Dt(s)),X},this.return=function(X){return an(s,X)},this[Symbol.iterator]=function(){return this}}function de(s){function X(F){return s.next(F)}function R(F){return s.throw(F)}return new Promise(function(F,N){function K(B){B.done?F(B.value):Promise.resolve(B.value).then(X,R).then(K,N)}K(s.next())})}function gt(s){return de(new Kn(new De(s)))}S("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function F(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var N=G.setTimeout;R.prototype.i=function(B){N(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Gt){$||($=!0,yt.call(nt,Gt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;N(function(){if(B.B()){var nt=G.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=G.CustomEvent,nt=G.Event,$=G.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=G.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)K.h(this.g[B]);this.g=null}};var K=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(xt,ht){return typeof xt=="function"?function(Xt){try{yt(xt(Xt))}catch(It){Gt(It)}}:ht}var yt,Gt,Bt=new X(function(xt,ht){yt=xt,Gt=ht});return this.J($(B,yt),$(nt,Gt)),Bt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?K.h($):this.g.push($),this.o=!0},X.resolve=F,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=w(B),Gt=yt.next();!Gt.done;Gt=yt.next())F(Gt.value).J(nt,$)})},X.all=function(B){var nt=w(B),$=nt.next();return $.done?F([]):new X(function(yt,Gt){function Bt(Xt){return function(It){xt[Xt]=It,ht--,ht==0&&yt(xt)}}var xt=[],ht=0;do xt.push(void 0),ht++,F($.value).J(Bt(xt.length-1),Gt),$=nt.next();while(!$.done)})},X});function pn(s,X){s instanceof String&&(s+="");var R=0,F=!1,N={next:function(){if(!F&&R<s.length){var K=R++;return{value:X(K,s[K]),done:!1}}return F=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var jn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var F=arguments[R];if(F)for(var N in F)Object.prototype.hasOwnProperty.call(F,N)&&(s[N]=F[N])}return s};S("Object.assign",function(s){return s||jn}),S("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),S("Array.prototype.includes",function(s){return s||function(X,R){var F=this;F instanceof String&&(F=String(F));var N=F.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var K=F[R];if(K===X||Object.is(K,X))return!0}return!1}}),S("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),S("Array.prototype.keys",function(s){return s||function(){return pn(this,function(X){return X})}});var Re=this||self;function Ht(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var F;s.length&&(F=s.shift());)s.length||X===void 0?R[F]&&R[F]!==Object.prototype[F]?R=R[F]:R=R[F]={}:R[F]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function on(s){Te(s)}function Xn(s,X){on(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Ln(){on(Error("Failed to read varint, encoding is invalid."))}function xn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Cn(s){if(En)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,F=new Uint8Array(3*s.length),N=0;N<s.length;N++){var K=s.charCodeAt(N);if(128>K)F[R++]=K;else{if(2048>K)F[R++]=K>>6|192;else{if(55296<=K&&57343>=K){if(56319>=K&&N<s.length){var B=s.charCodeAt(++N);if(56320<=B&&57343>=B){K=1024*(K-55296)+B-56320+65536,F[R++]=K>>18|240,F[R++]=K>>12&63|128,F[R++]=K>>6&63|128,F[R++]=K&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");K=65533}F[R++]=K>>12|224,F[R++]=K>>6&63|128}F[R++]=K&63|128}}s=F.subarray(0,R)}return s}var Oe={},Ke=null;function In(s){var X;X===void 0&&(X=0),Se(),X=Oe[X];for(var R=Array(Math.floor(s.length/3)),F=X[64]||"",N=0,K=0;N<s.length-2;N+=3){var B=s[N],nt=s[N+1],$=s[N+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[K++]=yt+B+nt+$}switch(yt=0,$=F,s.length-N){case 2:yt=s[N+1],$=X[(yt&15)<<2]||F;case 1:s=s[N],R[K]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+F}return R.join("")}function Wn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var F=new Uint8Array(R),N=0;return he(s,function(K){F[N++]=K}),F.subarray(0,N)}function he(s,X){function R($){for(;F<s.length;){var yt=s.charAt(F++),Gt=Ke[yt];if(Gt!=null)return Gt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var F=0;;){var N=R(-1),K=R(0),B=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|K>>4),B!=64&&(X(K<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Ke){Ke={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var F=s.concat(X[R].split(""));Oe[R]=F;for(var N=0;N<F.length;N++){var K=F[N];Ke[K]===void 0&&(Ke[K]=N)}}}}var ze=typeof Uint8Array=="function",ne;function We(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}We.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:ze&&s instanceof Uint8Array?In(s):null;return s};var sn=typeof Uint8Array.prototype.slice=="function";function Ue(s,X,R){return X===R?ne||(ne=new Uint8Array(0)):sn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var _t=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Wn(s);if(s.constructor===We){if(s.g==null)var X=ne||(ne=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||ze&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Wn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function At(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&xe(this,s)}function xe(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}At.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,on(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],F=R&127;return 128>R?(s.g+=1,jt(s),F):(R=X[s.g+1],F|=(R&127)<<7,128>R?(s.g+=2,jt(s),F):(R=X[s.g+2],F|=(R&127)<<14,128>R?(s.g+=3,jt(s),F):(R=X[s.g+3],F|=(R&127)<<21,128>R?(s.g+=4,jt(s),F):(R=X[s.g+4],F|=(R&15)<<28,128>R?(s.g+=5,jt(s),F>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Ln(),F):(jt(s),F))))))}var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Ue(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function je(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,we.length?(R=we.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new At(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Ln()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!Pe(s)){s.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,on(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Vn(s,X,R){s.N||(s=Ue(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var ln=[];function _e(){this.h=[],this.i=0,this.g=new $e}function cn(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),cn(s,s.g.end()),cn(s,R)}var Fe=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Fe?s[Fe]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function re(s){if(!s)return 0;var X;return Fe?X=s[Fe]:X=s.g,X==null?0:X}function Qe(s){return Array.isArray(s)&&Ge(s,1),s}function te(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function zt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return ze&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||zt(s)?Ct(s,X):X(s)}function Ct(s,X){if(Array.isArray(s)){for(var R=Array(s.length),F=0;F<s.length;F++)R[F]=fe(s[F],X);return re(s)&1&&Qe(R),R}R={};for(F in s)R[F]=fe(s[F],X);return R}var Vt;function ie(s,X,R){var F=Vt;Vt=null,s||(s=F),F=this.constructor.ca,s||(s=F?[F]:[]),this.j=(F?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(F=this.g.length,s=F-1,F&&(F=this.g[s],zt(F))){this.l=s-this.j,this.h=F;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(F=this.g[s])?Qe(F):this.g[s]=Ye):(ee(this),(F=this.h[s])?Qe(F):this.h[s]=Ye)}var Ye=Object.freeze(Qe([]));function ee(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function oe(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var F=F===void 0?!1:F,N=oe(s,X,F);return N==null&&(N=Ye),N===Ye?(N=Qe([]),ut(s,X,N,F)):R&&Array.isArray(N)&&re(N)&2&&(N=N.slice(),ut(s,X,N,F)),N}function it(s,X,R){return s=oe(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,F){(F===void 0?0:F)||X>=s.l?(ee(s),s.h[X]=R):s.g[X+s.j]=R}function Pt(s,X,R){s.i||(s.i={});var F=s.i[R];if(!F){var N=tt(s,R,!1);F=[];for(var K=Array.isArray(N)?!!(re(N)&2):!1,B=0;B<N.length;B++)F[B]=new X(N[B]),K&&te(F[B].g);K&&(te(F),Object.freeze(F)),s.i[R]=F}return F}function ae(s,X,R,F,N){var K=Pt(s,F,X);R=R||new F,s=tt(s,X),N!=null?(K.splice(N,0,R),s.splice(N,0,ce(R))):(K.push(R),s.push(ce(R)))}ie.prototype.toJSON=function(){var s=ce(this);return Ct(s,hn)};function ce(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var F=0;F<R.length;F++)R[F]&&ce(R[F]);else R&&ce(R)}return s.g}ie.prototype.toString=function(){return ce(this).toString()};function St(s,X){return s=oe(s,X),s==null?0:s}function me(s,X){return s=oe(s,X),s==null?"":s}function He(s,X){if(s=s.m){cn(X,X.g.end());for(var R=0;R<s.length;R++)cn(X,s[R])}}function qe(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Gt){return X($,yt,Gt,R)};case 3:var F=s[1],N=s[2];return function($,yt,Gt){return X($,yt,Gt,F,N)};case 4:var K=s[1],B=s[2],nt=s[3];return function($,yt,Gt){return X($,yt,Gt,K,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function tn(s,X,R){for(;Pe(X)&&X.h!=4;){var F=X.i,N=R[F];if(N){if(Array.isArray(N)&&(N=R[F]=qe(N)),!N(X,s,F)){F=X,N=s;var K=F.l;Ie(F),Vn(F,N,K)}}else F=X,N=s,K=F.l,Ie(F),Vn(F,N,K)}return s}function fn(s,X){var R=new _e;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var F=R.h,N=F.length,K=X=0;K<N;K++){var B=F[K];B.length!==0&&(s.set(B,X),X+=B.length)}F=R.g,N=F.h,N!==0&&(s.set(F.g.subarray(0,N),X),F.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(ln.length){var F=ln.pop();s&&(xe(F.g,s),F.i=-1,F.h=-1),s=F}else s=new je(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>ln.length&&ln.push(s)}}function Le(s,X,R){if(X=oe(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var F=X;F=(R=0>F?1:0)?-F:F,F===0?0<1/F?_t=Ze=0:(Ze=0,_t=2147483648):isNaN(F)?(Ze=0,_t=2147483647):34028234663852886e22<F?(Ze=0,_t=(R<<31|2139095040)>>>0):11754943508222875e-54>F?(F=Math.round(F/Math.pow(2,-149)),Ze=0,_t=(R<<31|F)>>>0):(X=Math.floor(Math.log(F)/Math.LN2),F*=Math.pow(2,-X),F=Math.round(8388608*F),16777216<=F&&++X,Ze=0,_t=(R<<31|X+127<<23|F&8388607)>>>0),R=_t,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function en(s,X,R){if(s.h!==5)return!1;s=s.g;var F=s.h[s.g],N=s.h[s.g+1],K=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),N=(F<<0|N<<8|K<<16|B<<24)>>>0,s=2*(N>>31)+1,F=N>>>23&255,N&=8388607,ut(X,R,F==255?N?NaN:1/0*s:F==0?s*Math.pow(2,-149)*N:s*Math.pow(2,F-150)*(N+Math.pow(2,23))),!0}function On(s,X,R){if(s.h!==0)return!1;for(var F=s.g,N=128,K=0,B=s=0;4>B&&128<=N;B++)N=F.h[F.g++],K|=(N&127)<<7*B;if(128<=N&&(N=F.h[F.g++],K|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(B=0;5>B&&128<=N;B++)N=F.h[F.g++],s|=(N&127)<<7*B+3;return 128>N?(F=K>>>0,N=s>>>0,(s=N&2147483648)&&(F=~F+1>>>0,N=~N>>>0,F==0&&(N=N+1>>>0)),F=4294967296*N+(F>>>0),s=s?-F:F):(F.j=!0,Ln(),s=void 0),ut(X,R,s),!0}function nn(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Ne(s,X,R){if(s.h!==2)return!1;var F=ye(s.g);s=s.g;var N=s.g;s.g+=F,jt(s),s=s.h;var K;if(dn)(K=Nn)||(K=Nn=new TextDecoder("utf-8",{fatal:!1})),K=K.decode(s.subarray(N,N+F));else{F=N+F;for(var B=[],nt=null,$,yt,Gt;N<F;)$=s[N++],128>$?B.push($):224>$?N>=F?B.push(65533):(yt=s[N++],194>$||(yt&192)!==128?(N--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?N>=F-1?B.push(65533):(yt=s[N++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((K=s[N++])&192)!==128?(N--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|K&63)):244>=$?N>=F-2?B.push(65533):(yt=s[N++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((K=s[N++])&192)!==128||((Gt=s[N++])&192)!==128?(N--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(K&63)<<6|Gt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=xn(nt,B),B.length=0);K=xn(nt,B)}return ut(X,R,K),!0}function Zn(s,X,R,F,N){if(s.h!==2)return!1;var K=new F,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,N(K,s),N=$-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,ae(X,R,K,F,void 0),!0}function Sn(s){ie.call(this,s)}var Be;pt(Sn,ie);function kn(s,X){var R=oe(s,1);if(R!=null&&R!=null){Ot(X.g,8);var F=X.g;if(0<=R)Ot(F,R);else{for(var N=0;9>N;N++)Xe(F,R&127|128),R>>=7;Xe(F,1)}}Le(X,s,2),F=oe(s,3),F!=null&&ve(X,3,Cn(F)),F=oe(s,4),F!=null&&ve(X,4,Cn(F)),He(s,X)}function rn(s,X){return tn(s,X,Be||(Be={1:nn,2:en,3:Ne,4:Ne}))}function vn(s){ie.call(this,s,-1,un)}var Tn;pt(vn,ie),vn.prototype.addClassification=function(s,X){return ae(this,1,s,Sn,X),this};function An(s,X){return tn(s,X,Tn||(Tn={1:[Zn,Sn,rn]}))}var un=[1];function wn(s){ie.call(this,s)}var _n;pt(wn,ie);function Qn(s,X){Le(X,s,1),Le(X,s,2),Le(X,s,3),Le(X,s,4),Le(X,s,5),He(s,X)}function Fn(s,X){return tn(s,X,_n||(_n={1:en,2:en,3:en,4:en,5:en}))}function Hn(s){ie.call(this,s,-1,V)}var m;pt(Hn,ie);function W(s,X){return tn(s,X,m||(m={1:[Zn,wn,Fn]}))}var V=[1];function k(s){ie.call(this,s)}var z;pt(k,ie);function ot(s,X){Le(X,s,1),Le(X,s,2),Le(X,s,3),Le(X,s,4),Le(X,s,5);var R=oe(s,6);if(R!=null&&R!=null){Ot(X.g,48);var F=X.g,N=R;R=0>N,N=Math.abs(N);var K=N>>>0;for(N=Math.floor((N-K)/4294967296),N>>>=0,R&&(N=~N>>>0,K=(~K>>>0)+1,4294967295<K&&(K=0,N++,4294967295<N&&(N=0))),_t=K,Ze=N,R=_t,K=Ze;0<K||127<R;)Xe(F,R&127|128),R=(R>>>7|K<<25)>>>0,K>>>=7;Xe(F,R)}He(s,X)}function O(s,X){return tn(s,X,z||(z={1:en,2:en,3:en,4:en,5:en,6:On}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
104
+ `+a.getProgramInfoLog(F));b=t.m=F,a.useProgram(b),I=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:I},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(I,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Mt(t,c){return c+t}function xt(t,c){window[t]=c}function dt(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return gt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function It(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Mt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(t){var c,a,b,I,F,L,U,j,Q,D,st;return gt(function(ht){switch(ht.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ht,Wt(),2)):ht.return();case 2:if(a=ht.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),L=c.filter(function(ft){return ft.data!==void 0}),U=c.filter(function(ft){return ft.data===void 0}),j=Promise.all(L.map(function(ft){var Gt=Z(t,ft.url);if(ft.path!==void 0){var vt=ft.path;Gt=Gt.then(function(Kt){return t.overrideFile(vt,Kt),Promise.resolve(Kt)})}return Gt})),Q=Promise.all(U.map(function(ft){return ft.simd===void 0||ft.simd&&a||!ft.simd&&!a?dt(t.locateFile(ft.url,t.T)):Promise.resolve()})).then(function(){var ft,Gt,vt;return gt(function(Kt){if(Kt.g==1)return ft=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,P(Kt,ft(Gt),2);vt.h=Kt.h,Kt.g=0})}),D=function(){return gt(function(ft){return t.g.graph&&t.g.graph.url?ft=P(ft,Z(t,t.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),P(ht,Promise.all([Q,j,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(ft){return ft.simd===void 0||ft.simd&&a||!ft.simd&&!a}).map(function(ft){return t.locateFile(ft.url,t.T)}),importScripts.apply(null,B(b)),I=t,P(ht,createMediapipeSolutionsWasm(Module),6);case 6:I.h=ht.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,F=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(F),ht.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ht.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ht.g=0}})}function Ft(t){var c,a,b,I,F,L,U,j;return gt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,Z(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())I=b.value,t.i.overrideFile(I,t.C[I]);if(t.C={},t.g.listeners)for(F=T(t.g.listeners),L=F.next();!L.done;L=F.next())U=L.value,J(t,U);j=t.j,t.j={},t.setOptions(j),Q.g=0})}i.reset=function(){var t=this;return gt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],I=[],F={},L=T(Object.keys(t)),U=L.next();!U.done;F={L:F.L,M:F.M},U=L.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=c[j],U!==void 0&&(U.onChange&&(F.L=U.onChange,F.M=t[j],b.push(function(Q){return function(){var D;return gt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(F))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),I.push(U))))}(b.length!==0||I.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(I),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,I,F,L,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){j.g=5;break}return b=a.value,P(j,b(),4);case 4:a=c.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(I=new t.h.GraphOptionChangeRequestList,F=T(t.B),L=F.next();!L.done;L=F.next())U=L.value,I.push_back(U);t.i.changeOptions(I),I.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return gt(function(c){return c.g==1?P(c,Yt(t),2):c.g!=3?P(c,Ft(t),3):P(c,l(t),0)})};function Z(t,c){var a,b;return gt(function(I){return c in t.G?I.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(F){return F.arrayBuffer()}),t.G[c]=b,I.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,I,F,L,U,j,Q,D,st;return gt(function(ht){switch(ht.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ht,a.D,2)):ht.return();case 2:return P(ht,a.initialize(),3);case 3:for(I=new a.h.PacketDataList,F=T(Object.keys(t)),L=F.next();!L.done;L=F.next())if(U=L.value,j=a.g.inputs[U]){t:{var ft=t[U];switch(j.type){case"video":var Gt=a.m[j.stream];if(Gt||(Gt=new E(a.h,a.F),a.m[j.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&ft instanceof HTMLVideoElement)var vt=ft.videoWidth,Kt=ft.videoHeight;else typeof HTMLImageElement<"u"&&ft instanceof HTMLImageElement?(vt=ft.naturalWidth,Kt=ft.naturalHeight):(vt=ft.width,Kt=ft.height);Kt={glName:Gt.l,width:vt,height:Kt},vt=Gt.g,vt.canvas.width=Kt.width,vt.canvas.height=Kt.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,ft),Gt.h.bindTexture2d(0),Gt=Kt;break t;case"detections":for(Gt=a.m[j.stream],Gt||(Gt=new yt(a.h),a.m[j.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(ft.length),Kt=0;Kt<ft.length;++Kt){vt=ft[Kt];var le=Gt.data,ce=le.setBoundingBox,ke=Kt,Rn=vt.U,Ue=new Jt;if(ct(Ue,1,Rn.aa),ct(Ue,2,Rn.ba),ct(Ue,3,Rn.height),ct(Ue,4,Rn.width),ct(Ue,5,Rn.rotation),ct(Ue,6,Rn.Z),Rn=Zn(Ue,Ut),ce.call(le,ke,Rn),vt.P)for(le=0;le<vt.P.length;++le){Ue=vt.P[le];var kn=!!Ue.visibility;ce=Gt.data,ke=ce.addNormalizedLandmark,Rn=Kt,Ue=Object.assign(Object.assign({},Ue),{visibility:kn?Ue.visibility:0}),kn=new rt,ct(kn,1,Ue.x),ct(kn,2,Ue.y),ct(kn,3,Ue.z),Ue.visibility&&ct(kn,4,Ue.visibility),Ue=Zn(kn,Rt),ke.call(ce,Rn,Ue)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,ke=ce.addClassification,Rn=Kt,Ue=vt.N[le],kn=new W,ct(kn,2,Ue.$),Ue.index&&ct(kn,1,Ue.index),Ue.label&&ct(kn,3,Ue.label),Ue.displayName&&ct(kn,4,Ue.displayName),Ue=Zn(kn,k),ke.call(ce,Rn,Ue)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=j.stream,j.type){case"video":I.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,I.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(I),P(ht,a.D,4);case 4:I.delete(),ht.g=0}})};function x(t,c,a){var b,I,F,L,U,j,Q,D,st,ht,ft,Gt,vt,Kt;return gt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},I=0,F=T(Object.keys(a)),L=F.next();!L.done;L=F.next())U=L.value,j=a[U],typeof j!="string"&&j.type==="texture"&&c[j.stream]!==void 0&&++I;1<I&&(t.H=!1),Q=T(Object.keys(a)),L=Q.next();case 2:if(L.done){le.g=4;break}if(D=L.value,st=a[D],typeof st=="string")return vt=b,Kt=D,P(le,w(t,D,c[st]),14);if(ht=c[st.stream],st.type==="detection_list"){if(ht){for(var ce=ht.getRectList(),ke=ht.getLandmarksList(),Rn=ht.getClassificationsList(),Ue=[],kn=0;kn<ce.size();++kn){var mr=Sn(ce.get(kn),Jt,wt);mr={U:{aa:it(mr,1),ba:it(mr,2),height:it(mr,3),width:it(mr,4),rotation:it(mr,5,0),Z:me(mr,6)},P:ue(Sn(ke.get(kn),Et,Nt),rt,1).map(K),N:N(Sn(Rn.get(kn),O,ot))},Ue.push(mr)}ce=Ue}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ht){for(ce=Array(ht.size()),ke=0;ke<ht.size();ke++)ce[ke]=ht.get(ke);ht.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ht===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ht,le.g=7;break}if(st.type==="proto"){b[D]=ht,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return ft=t.s[D],ft||(ft=new E(t.h,t.F),t.s[D]=ft),P(le,et(ft,ht,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[Kt]=le.h;case 3:L=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function w(t,c,a){var b;return gt(function(I){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?I.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new E(t.h,t.F),t.s[c]=b),I.return(et(b,a,t.H))):I.return(void 0)})}function J(t,c){for(var a=c.name||"$",b=[].concat(B(c.wants)),I=new t.h.StringList,F=T(c.wants),L=F.next();!L.done;L=F.next())I.push_back(L.value);F=t.h.PacketListener.implement({onResults:function(U){for(var j={},Q=0;Q<c.wants.length;++Q)j[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,j,c.outs).then(function(st){st=D(st);for(var ht=0;ht<c.wants.length;++ht){var ft=j[b[ht]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(I,F),I.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,v,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=Sn(t,s,G);t=[],c=ue(c,A,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],M,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function f(t){var c=this;t=t||{},this.g=new It({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,I,F,L;return gt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),I=g(b),F="object_detection_3d.tflite",P(U,Z(c.g,I),2)):(L=U.h,c.g.overrideFile(F,L),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(I){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),I.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(I){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),I.return(!0)})}},imageSize:{onChange:function(a){var b,I,F,L;return gt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,I=[b[0]/2,b[1]/2],F=[c.h[0]/I[0],c.h[1]/I[1]],L=[c.i[0]/I[0],c.i[1]/I[1]],c.setOptions({focalLength:F,principalPoint:L}),U.g=0})}}}})}i=f.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return gt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return gt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ht("Objectron",f),Ht("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ht("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ht("VERSION","0.4.1636596145")}).call(bi);const yi={};(function(){var i;function n(s){var G=0;return function(){return G<s.length?{done:!1,value:s[G++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,G,R){return s==Array.prototype||s==Object.prototype||(s[G]=R.value),s};function m(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var G=0;G<s.length;++G){var R=s[G];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var X=m(this);function S(s,G){if(G)t:{var R=X;s=s.split(".");for(var Y=0;Y<s.length-1;Y++){var N=s[Y];if(!(N in R))break t;R=R[N]}s=s[s.length-1],Y=R[s],G=G(Y),G!=Y&&G!=null&&r(R,s,{configurable:!0,writable:!0,value:G})}}S("Symbol",function(s){function G(K){if(this instanceof G)throw new TypeError("Symbol is not a constructor");return new R(Y+(K||"")+"_"+N++,K)}function R(K,E){this.g=K,r(this,"description",{configurable:!0,writable:!0,value:E})}if(s)return s;R.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return G}),S("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var G="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<G.length;R++){var Y=X[G[R]];typeof Y=="function"&&typeof Y.prototype[s]!="function"&&r(Y.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var G=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return G?G.call(s):{next:n(s)}}function B(s){if(!(s instanceof Array)){s=T(s);for(var G,R=[];!(G=s.next()).done;)R.push(G.value);s=R}return s}var nt=typeof Object.create=="function"?Object.create:function(s){function G(){}return G.prototype=s,new G},ut;if(typeof Object.setPrototypeOf=="function")ut=Object.setPrototypeOf;else{var pt;t:{var Tt={a:!0},Lt={};try{Lt.__proto__=Tt,pt=Lt.a;break t}catch{}pt=!1}ut=pt?function(s,G){if(s.__proto__=G,s.__proto__!==G)throw new TypeError(s+" is not extensible");return s}:null}var at=ut;function mt(s,G){if(s.prototype=nt(G.prototype),s.prototype.constructor=s,at)at(s,G);else for(var R in G)if(R!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(G,R);Y&&Object.defineProperty(s,R,Y)}else s[R]=G[R];s.ea=G.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,G){s.j={U:G,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,G,R){return s.g=R,{value:G}}function $e(s){this.g=new Bt,this.h=s}function ze(s,G){kt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(Y){return{value:Y,done:!0}},G,s.g.return):(s.g.return(G),jt(s))}function We(s,G,R,Y){try{var N=G.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var K=N.value}catch(E){return s.g.i=null,ee(s.g,E),jt(s)}return s.g.i=null,Y.call(s.g,K),jt(s)}function jt(s){for(;s.g.g;)try{var G=s.h(s.g);if(G)return s.g.l=!1,{value:G.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(G=s.g.j,s.g.j=null,G.V)throw G.U;return{value:G.return,done:!0}}return{value:void 0,done:!0}}function Nn(s){this.next=function(G){return kt(s.g),s.g.i?G=We(s,s.g.i.next,G,s.g.o):(s.g.o(G),G=jt(s)),G},this.throw=function(G){return kt(s.g),s.g.i?G=We(s,s.g.i.throw,G,s.g.o):(ee(s.g,G),G=jt(s)),G},this.return=function(G){return ze(s,G)},this[Symbol.iterator]=function(){return this}}function ne(s){function G(Y){return s.next(Y)}function R(Y){return s.throw(Y)}return new Promise(function(Y,N){function K(E){E.done?Y(E.value):Promise.resolve(E.value).then(G,R).then(K,N)}K(s.next())})}function gt(s){return ne(new Nn(new $e(s)))}S("Promise",function(s){function G(E){this.h=0,this.i=void 0,this.g=[],this.o=!1;var et=this.j();try{E(et.resolve,et.reject)}catch($){et.reject($)}}function R(){this.g=null}function Y(E){return E instanceof G?E:new G(function(et){et(E)})}if(s)return s;R.prototype.h=function(E){if(this.g==null){this.g=[];var et=this;this.i(function(){et.l()})}this.g.push(E)};var N=X.setTimeout;R.prototype.i=function(E){N(E,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var E=this.g;this.g=[];for(var et=0;et<E.length;++et){var $=E[et];E[et]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(E){this.i(function(){throw E})},G.prototype.j=function(){function E(yt){return function(Xt){$||($=!0,yt.call(et,Xt))}}var et=this,$=!1;return{resolve:E(this.C),reject:E(this.l)}},G.prototype.C=function(E){if(E===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(E instanceof G)this.F(E);else{t:switch(typeof E){case"object":var et=E!=null;break t;case"function":et=!0;break t;default:et=!1}et?this.v(E):this.m(E)}},G.prototype.v=function(E){var et=void 0;try{et=E.then}catch($){this.l($);return}typeof et=="function"?this.G(et,E):this.m(E)},G.prototype.l=function(E){this.s(2,E)},G.prototype.m=function(E){this.s(1,E)},G.prototype.s=function(E,et){if(this.h!=0)throw Error("Cannot settle("+E+", "+et+"): Promise already settled in state"+this.h);this.h=E,this.i=et,this.h===2&&this.D(),this.A()},G.prototype.D=function(){var E=this;N(function(){if(E.B()){var et=X.console;typeof et<"u"&&et.error(E.i)}},1)},G.prototype.B=function(){if(this.o)return!1;var E=X.CustomEvent,et=X.Event,$=X.dispatchEvent;return typeof $>"u"?!0:(typeof E=="function"?E=new E("unhandledrejection",{cancelable:!0}):typeof et=="function"?E=new et("unhandledrejection",{cancelable:!0}):(E=X.document.createEvent("CustomEvent"),E.initCustomEvent("unhandledrejection",!1,!0,E)),E.promise=this,E.reason=this.i,$(E))},G.prototype.A=function(){if(this.g!=null){for(var E=0;E<this.g.length;++E)K.h(this.g[E]);this.g=null}};var K=new R;return G.prototype.F=function(E){var et=this.j();E.J(et.resolve,et.reject)},G.prototype.G=function(E,et){var $=this.j();try{E.call(et,$.resolve,$.reject)}catch(yt){$.reject(yt)}},G.prototype.then=function(E,et){function $(xt,dt){return typeof xt=="function"?function(Wt){try{yt(xt(Wt))}catch(It){Xt(It)}}:dt}var yt,Xt,Mt=new G(function(xt,dt){yt=xt,Xt=dt});return this.J($(E,yt),$(et,Xt)),Mt},G.prototype.catch=function(E){return this.then(void 0,E)},G.prototype.J=function(E,et){function $(){switch(yt.h){case 1:E(yt.i);break;case 2:et(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?K.h($):this.g.push($),this.o=!0},G.resolve=Y,G.reject=function(E){return new G(function(et,$){$(E)})},G.race=function(E){return new G(function(et,$){for(var yt=T(E),Xt=yt.next();!Xt.done;Xt=yt.next())Y(Xt.value).J(et,$)})},G.all=function(E){var et=T(E),$=et.next();return $.done?Y([]):new G(function(yt,Xt){function Mt(Wt){return function(It){xt[Wt]=It,dt--,dt==0&&yt(xt)}}var xt=[],dt=0;do xt.push(void 0),dt++,Y($.value).J(Mt(xt.length-1),Xt),$=et.next();while(!$.done)})},G});function qe(s,G){s instanceof String&&(s+="");var R=0,Y=!1,N={next:function(){if(!Y&&R<s.length){var K=R++;return{value:G(K,s[K]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var jn=typeof Object.assign=="function"?Object.assign:function(s,G){for(var R=1;R<arguments.length;R++){var Y=arguments[R];if(Y)for(var N in Y)Object.prototype.hasOwnProperty.call(Y,N)&&(s[N]=Y[N])}return s};S("Object.assign",function(s){return s||jn}),S("Object.is",function(s){return s||function(G,R){return G===R?G!==0||1/G===1/R:G!==G&&R!==R}}),S("Array.prototype.includes",function(s){return s||function(G,R){var Y=this;Y instanceof String&&(Y=String(Y));var N=Y.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var K=Y[R];if(K===G||Object.is(K,G))return!0}return!1}}),S("String.prototype.includes",function(s){return s||function(G,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(G instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(G,R||0)!==-1}}),S("Array.prototype.keys",function(s){return s||function(){return qe(this,function(G){return G})}});var Re=this||self;function Ht(s,G){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var Y;s.length&&(Y=s.shift());)s.length||G===void 0?R[Y]&&R[Y]!==Object.prototype[Y]?R=R[Y]:R=R[Y]={}:R[Y]=G}function we(s){Re.setTimeout(function(){throw s},0)}function ln(s){we(s)}function Xn(s,G){ln(Error("Invalid wire type: "+s+" (at position "+G+")"))}function Ln(){ln(Error("Failed to read varint, encoding is invalid."))}function xn(s,G){return G=String.fromCharCode.apply(null,G),s==null?G:s+G}var Jn,hn=typeof TextDecoder<"u",bn,Un=typeof TextEncoder<"u";function Cn(s){if(Un)s=(bn||(bn=new TextEncoder)).encode(s);else{var G=void 0;G=G===void 0?!1:G;for(var R=0,Y=new Uint8Array(3*s.length),N=0;N<s.length;N++){var K=s.charCodeAt(N);if(128>K)Y[R++]=K;else{if(2048>K)Y[R++]=K>>6|192;else{if(55296<=K&&57343>=K){if(56319>=K&&N<s.length){var E=s.charCodeAt(++N);if(56320<=E&&57343>=E){K=1024*(K-55296)+E-56320+65536,Y[R++]=K>>18|240,Y[R++]=K>>12&63|128,Y[R++]=K>>6&63|128,Y[R++]=K&63|128;continue}else N--}if(G)throw Error("Found an unpaired surrogate");K=65533}Y[R++]=K>>12|224,Y[R++]=K>>6&63|128}Y[R++]=K&63|128}}s=Y.subarray(0,R)}return s}var Oe={},Ke=null;function In(s){var G;G===void 0&&(G=0),Se(),G=Oe[G];for(var R=Array(Math.floor(s.length/3)),Y=G[64]||"",N=0,K=0;N<s.length-2;N+=3){var E=s[N],et=s[N+1],$=s[N+2],yt=G[E>>2];E=G[(E&3)<<4|et>>4],et=G[(et&15)<<2|$>>6],$=G[$&63],R[K++]=yt+E+et+$}switch(yt=0,$=Y,s.length-N){case 2:yt=s[N+1],$=G[(yt&15)<<2]||Y;case 1:s=s[N],R[K]=G[s>>2]+G[(s&3)<<4|yt>>4]+$+Y}return R.join("")}function Wn(s){var G=s.length,R=3*G/4;R%3?R=Math.floor(R):"=.".indexOf(s[G-1])!=-1&&(R="=.".indexOf(s[G-2])!=-1?R-2:R-1);var Y=new Uint8Array(R),N=0;return he(s,function(K){Y[N++]=K}),Y.subarray(0,N)}function he(s,G){function R($){for(;Y<s.length;){var yt=s.charAt(Y++),Xt=Ke[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var Y=0;;){var N=R(-1),K=R(0),E=R(64),et=R(64);if(et===64&&N===-1)break;G(N<<2|K>>4),E!=64&&(G(K<<4&240|E>>2),et!=64&&G(E<<6&192|et))}}function Se(){if(!Ke){Ke={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),G=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var Y=s.concat(G[R].split(""));Oe[R]=Y;for(var N=0;N<Y.length;N++){var K=Y[N];Ke[K]===void 0&&(Ke[K]=N)}}}}var Pe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Pe&&s instanceof Uint8Array?In(s):null;return s};var cn=typeof Uint8Array.prototype.slice=="function";function Be(s,G,R){return G===R?re||(re=new Uint8Array(0)):cn?s.slice(G,R):new Uint8Array(s.subarray(G,R))}var Qt=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Wn(s);if(s.constructor===Ve){if(s.g==null)var G=re||(re=new Uint8Array(0));else{G=Uint8Array;var R=s.g;R=R==null||Pe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Wn(R):null,s=s.g=R,G=new G(s)}return G}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function At(s,G){G=G===void 0?{}:G,G=G.u===void 0?!1:G.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=G,s&&xe(this,s)}function xe(s,G){s.h=Ce(G),s.l=0,s.i=s.h.length,s.g=s.l}At.prototype.reset=function(){this.g=this.l};function zt(s){s.g>s.i&&(s.j=!0,ln(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var G=s.h,R=G[s.g],Y=R&127;return 128>R?(s.g+=1,zt(s),Y):(R=G[s.g+1],Y|=(R&127)<<7,128>R?(s.g+=2,zt(s),Y):(R=G[s.g+2],Y|=(R&127)<<14,128>R?(s.g+=3,zt(s),Y):(R=G[s.g+3],Y|=(R&127)<<21,128>R?(s.g+=4,zt(s),Y):(R=G[s.g+4],Y|=(R&15)<<28,128>R?(s.g+=5,zt(s),Y>>>0):(s.g+=5,128<=G[s.g++]&&128<=G[s.g++]&&128<=G[s.g++]&&128<=G[s.g++]&&128<=G[s.g++]?(s.j=!0,Ln(),Y):(zt(s),Y))))))}var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(s,G){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=G}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var s=this.g,G=this.h;return this.h=0,Be(s,0,G)};function Ot(s,G){for(;127<G;)Xe(s,G&127|128),G>>>=7;Xe(s,G)}function je(s){var G={},R=G.N===void 0?!1:G.N;this.m={u:G.u===void 0?!1:G.u},this.N=R,G=this.m,Ye.length?(R=Ye.pop(),G&&(R.u=G.u),s&&xe(R,s),s=R):s=new At(s,G),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var G=s.g;if((G=G.g==G.i)||(G=s.j)||(G=s.g,G=G.j||0>G.g||G.g>G.i),G)return!1;s.l=s.g.g;var R=ye(s.g);return G=R>>>3,R&=7,0<=R&&5>=R?(s.i=G,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(s);else t:{s=s.g;for(var G=s.g,R=0;10>R;R++){if((s.h[G]&128)===0){s.g=G+1,zt(s);break t}G++}s.j=!0,Ln()}break;case 1:s=s.g,s.g+=8,zt(s);break;case 2:s.h!=2?Ie(s):(G=ye(s.g),s=s.g,s.g+=G,zt(s));break;case 5:s=s.g,s.g+=4,zt(s);break;case 3:G=s.i;do{if(!_e(s)){s.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=G&&(s.j=!0,ln(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Vn(s,G,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=G.m)?R.push(s):G.m=[s])}var un=[];function Qe(){this.h=[],this.i=0,this.g=new tn}function an(s,G){G.length!==0&&(s.h.push(G),s.i+=G.length)}function ve(s,G,R){Ot(s.g,8*G+2),Ot(s.g,R.length),an(s,s.g.end()),an(s,R)}var Te=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,G){Object.isFrozen(s)||(Te?s[Te]|=G:s.g!==void 0?s.g|=G:Object.defineProperties(s,{g:{value:G,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var G;return Te?G=s[Te]:G=s.g,G==null?0:G}function De(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function fn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Pe&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,G){if(s!=null)return Array.isArray(s)||Pt(s)?Ct(s,G):G(s)}function Ct(s,G){if(Array.isArray(s)){for(var R=Array(s.length),Y=0;Y<s.length;Y++)R[Y]=fe(s[Y],G);return ie(s)&1&&De(R),R}R={};for(Y in s)R[Y]=fe(s[Y],G);return R}var Vt;function oe(s,G,R){var Y=Vt;Vt=null,s||(s=Y),Y=this.constructor.ca,s||(s=Y?[Y]:[]),this.j=(Y?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(Y=this.g.length,s=Y-1,Y&&(Y=this.g[s],Pt(Y))){this.l=s-this.j,this.h=Y;break t}G!==void 0&&-1<G?(this.l=Math.max(G,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(G=0;G<R.length;G++)s=R[G],s<this.l?(s+=this.j,(Y=this.g[s])?De(Y):this.g[s]=Fe):(te(this),(Y=this.h[s])?De(Y):this.h[s]=Fe)}var Fe=Object.freeze(De([]));function te(s){var G=s.l+s.j;s.g[G]||(s.h=s.g[G]={})}function se(s,G,R){return G===-1?null:(R===void 0?0:R)||G>=s.l?s.h?s.h[G]:void 0:s.g[G+s.j]}function tt(s,G,R){R=R===void 0?!0:R;var Y=Y===void 0?!1:Y,N=se(s,G,Y);return N==null&&(N=Fe),N===Fe?(N=De([]),ct(s,G,N,Y)):R&&Array.isArray(N)&&ie(N)&2&&(N=N.slice(),ct(s,G,N,Y)),N}function it(s,G,R){return s=se(s,G),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ct(s,G,R,Y){(Y===void 0?0:Y)||G>=s.l?(te(s),s.h[G]=R):s.g[G+s.j]=R}function _t(s,G,R){s.i||(s.i={});var Y=s.i[R];if(!Y){var N=tt(s,R,!1);Y=[];for(var K=Array.isArray(N)?!!(ie(N)&2):!1,E=0;E<N.length;E++)Y[E]=new G(N[E]),K&&qt(Y[E].g);K&&(qt(Y),Object.freeze(Y)),s.i[R]=Y}return Y}function de(s,G,R,Y,N){var K=_t(s,Y,G);R=R||new Y,s=tt(s,G),N!=null?(K.splice(N,0,R),s.splice(N,0,ue(R))):(K.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ct(s,fn)};function ue(s){if(s.i)for(var G in s.i){var R=s.i[G];if(Array.isArray(R))for(var Y=0;Y<R.length;Y++)R[Y]&&ue(R[Y]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,G){return s=se(s,G),s==null?0:s}function me(s,G){return s=se(s,G),s==null?"":s}function He(s,G){if(s=s.m){an(G,G.g.end());for(var R=0;R<s.length;R++)an(G,s[R])}}function en(s){var G=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return G($,yt,Xt,R)};case 3:var Y=s[1],N=s[2];return function($,yt,Xt){return G($,yt,Xt,Y,N)};case 4:var K=s[1],E=s[2],et=s[3];return function($,yt,Xt){return G($,yt,Xt,K,E,et)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function nn(s,G,R){for(;_e(G)&&G.h!=4;){var Y=G.i,N=R[Y];if(N){if(Array.isArray(N)&&(N=R[Y]=en(N)),!N(G,s,Y)){Y=G,N=s;var K=Y.l;Ie(Y),Vn(Y,N,K)}}else Y=G,N=s,K=Y.l,Ie(Y),Vn(Y,N,K)}return s}function mn(s,G){var R=new Qe;if(G(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var Y=R.h,N=Y.length,K=G=0;K<N;K++){var E=Y[K];E.length!==0&&(s.set(E,G),G+=E.length)}Y=R.g,N=Y.h,N!==0&&(s.set(Y.g.subarray(0,N),G),Y.h=0),R.h=[s],R=s}return R}function yn(s,G,R){if(un.length){var Y=un.pop();s&&(xe(Y.g,s),Y.i=-1,Y.h=-1),s=Y}else s=new je(s);try{return R(new G,s)}finally{G=s.g,G.h=null,G.l=0,G.i=0,G.g=0,G.j=!1,G.u=!1,s.i=-1,s.h=-1,s.j=!1,100>un.length&&un.push(s)}}function Le(s,G,R){if(G=se(G,R),G!=null){Ot(s.g,8*R+5),s=s.g;var Y=G;Y=(R=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(Y)?(Ze=0,Qt=2147483647):34028234663852886e22<Y?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ze=0,Qt=(R<<31|Y)>>>0):(G=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-G),Y=Math.round(8388608*Y),16777216<=Y&&++G,Ze=0,Qt=(R<<31|G+127<<23|Y&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function rn(s,G,R){if(s.h!==5)return!1;s=s.g;var Y=s.h[s.g],N=s.h[s.g+1],K=s.h[s.g+2],E=s.h[s.g+3];return s.g+=4,zt(s),N=(Y<<0|N<<8|K<<16|E<<24)>>>0,s=2*(N>>31)+1,Y=N>>>23&255,N&=8388607,ct(G,R,Y==255?N?NaN:1/0*s:Y==0?s*Math.pow(2,-149)*N:s*Math.pow(2,Y-150)*(N+Math.pow(2,23))),!0}function zn(s,G,R){if(s.h!==0)return!1;for(var Y=s.g,N=128,K=0,E=s=0;4>E&&128<=N;E++)N=Y.h[Y.g++],K|=(N&127)<<7*E;if(128<=N&&(N=Y.h[Y.g++],K|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(E=0;5>E&&128<=N;E++)N=Y.h[Y.g++],s|=(N&127)<<7*E+3;return 128>N?(Y=K>>>0,N=s>>>0,(s=N&2147483648)&&(Y=~Y+1>>>0,N=~N>>>0,Y==0&&(N=N+1>>>0)),Y=4294967296*N+(Y>>>0),s=s?-Y:Y):(Y.j=!0,Ln(),s=void 0),ct(G,R,s),!0}function on(s,G,R){return s.h!==0?!1:(ct(G,R,ye(s.g)),!0)}function Ne(s,G,R){if(s.h!==2)return!1;var Y=ye(s.g);s=s.g;var N=s.g;s.g+=Y,zt(s),s=s.h;var K;if(hn)(K=Jn)||(K=Jn=new TextDecoder("utf-8",{fatal:!1})),K=K.decode(s.subarray(N,N+Y));else{Y=N+Y;for(var E=[],et=null,$,yt,Xt;N<Y;)$=s[N++],128>$?E.push($):224>$?N>=Y?E.push(65533):(yt=s[N++],194>$||(yt&192)!==128?(N--,E.push(65533)):E.push(($&31)<<6|yt&63)):240>$?N>=Y-1?E.push(65533):(yt=s[N++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((K=s[N++])&192)!==128?(N--,E.push(65533)):E.push(($&15)<<12|(yt&63)<<6|K&63)):244>=$?N>=Y-2?E.push(65533):(yt=s[N++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((K=s[N++])&192)!==128||((Xt=s[N++])&192)!==128?(N--,E.push(65533)):($=($&7)<<18|(yt&63)<<12|(K&63)<<6|Xt&63,$-=65536,E.push(($>>10&1023)+55296,($&1023)+56320))):E.push(65533),8192<=E.length&&(et=xn(et,E),E.length=0);K=xn(et,E)}return ct(G,R,K),!0}function Zn(s,G,R,Y,N){if(s.h!==2)return!1;var K=new Y,E=s.g.i,et=ye(s.g),$=s.g.g+et;if(s.g.i=$,N(K,s),N=$-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(et+" bytes, instead read "+(et-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=E,de(G,R,K,Y,void 0),!0}function Sn(s){oe.call(this,s)}var Me;mt(Sn,oe);function En(s,G){var R=se(s,1);if(R!=null&&R!=null){Ot(G.g,8);var Y=G.g;if(0<=R)Ot(Y,R);else{for(var N=0;9>N;N++)Xe(Y,R&127|128),R>>=7;Xe(Y,1)}}Le(G,s,2),Y=se(s,3),Y!=null&&ve(G,3,Cn(Y)),Y=se(s,4),Y!=null&&ve(G,4,Cn(Y)),He(s,G)}function sn(s,G){return nn(s,G,Me||(Me={1:on,2:rn,3:Ne,4:Ne}))}function vn(s){oe.call(this,s,-1,dn)}var wn;mt(vn,oe),vn.prototype.addClassification=function(s,G){return de(this,1,s,Sn,G),this};function An(s,G){return nn(s,G,wn||(wn={1:[Zn,Sn,sn]}))}var dn=[1];function Yn(s){oe.call(this,s)}var _n;mt(Yn,oe);function Qn(s,G){Le(G,s,1),Le(G,s,2),Le(G,s,3),Le(G,s,4),Le(G,s,5),He(s,G)}function Tn(s,G){return nn(s,G,_n||(_n={1:rn,2:rn,3:rn,4:rn,5:rn}))}function Hn(s){oe.call(this,s,-1,V)}var p;mt(Hn,oe);function W(s,G){return nn(s,G,p||(p={1:[Zn,Yn,Tn]}))}var V=[1];function k(s){oe.call(this,s)}var O;mt(k,oe);function ot(s,G){Le(G,s,1),Le(G,s,2),Le(G,s,3),Le(G,s,4),Le(G,s,5);var R=se(s,6);if(R!=null&&R!=null){Ot(G.g,48);var Y=G.g,N=R;R=0>N,N=Math.abs(N);var K=N>>>0;for(N=Math.floor((N-K)/4294967296),N>>>=0,R&&(N=~N>>>0,K=(~K>>>0)+1,4294967295<K&&(K=0,N++,4294967295<N&&(N=0))),Qt=K,Ze=N,R=Qt,K=Ze;0<K||127<R;)Xe(Y,R&127|128),R=(R>>>7|K<<25)>>>0,K>>>=7;Xe(Y,R)}He(s,G)}function z(s,G){return nn(s,G,O||(O={1:rn,2:rn,3:rn,4:rn,5:rn,6:zn}))}function rt(s,G,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,G),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
105
105
 
106
- `+s.getShaderInfoLog(R));return R}function bt(s){return Pt(s,Sn,1).map(function(X){return{index:St(X,1),X:it(X,2),label:oe(X,3)!=null?me(X,3):void 0,displayName:oe(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:oe(s,4)!=null?it(s,4):void 0}}function Ut(s){return Pt(yn(s,Hn,W),wn,1).map(Rt)}function Nt(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return Et(s,X),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(F){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),F(s.i)}))}function Et(s,X){var R=s.g;if(s.m===void 0){var F=rt(R,`
106
+ `+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,Sn,1).map(function(G){return{index:St(G,1),X:it(G,2),label:se(G,3)!=null?me(G,3):void 0,displayName:se(G,4)!=null?me(G,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Et(s){return _t(yn(s,Hn,W),Yn,1).map(Rt)}function Nt(s,G){this.h=s,this.g=G,this.l=0}function $t(s,G,R){return Jt(s,G),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(Y){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),Y(s.i)}))}function Jt(s,G){var R=s.g;if(s.m===void 0){var Y=rt(R,`
107
107
  attribute vec2 aVertex;
108
108
  attribute vec2 aTex;
109
109
  varying vec2 vTex;
@@ -116,64 +116,22 @@
116
116
  uniform sampler2D sampler0;
117
117
  void main(){
118
118
  gl_FragColor = texture2D(sampler0, vTex);
119
- }`,1),K=R.createProgram();if(R.attachShader(K,F),R.attachShader(K,N),R.linkProgram(K),!R.getProgramParameter(K,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
119
+ }`,1),K=R.createProgram();if(R.attachShader(K,Y),R.attachShader(K,N),R.linkProgram(K),!R.getProgramParameter(K,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
120
120
 
121
- `+R.getProgramInfoLog(K));F=s.m=K,R.useProgram(F),N=R.getUniformLocation(F,"sampler0"),s.j={I:R.getAttribLocation(F,"aVertex"),H:R.getAttribLocation(F,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}F=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(F.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(F.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(F.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(F.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(F.I),R.disableVertexAttribArray(F.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var kt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Qt(s,X){return X+s}function ue(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return gt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(kt),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function Je(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Qt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=w(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var F=s.options[R].default;F!==void 0&&(this.j[R]=typeof F=="function"?F():F)}}}i=Je.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,F,N,K,B,nt,$,yt,Gt,Bt;return gt(function(xt){switch(xt.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ue("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ue("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Xt=C(s,ht.url);if(ht.path!==void 0){var It=ht.path;Xt=Xt.then(function(wt){return s.overrideFile(It,wt),Promise.resolve(wt)})}return Xt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Xt,It;return gt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Xt=window.createMediapipeSolutionsPackedAssets,It=s,P(wt,ht(Xt),2);It.h=wt.h,wt.g=0})}),Gt=function(){return gt(function(ht){return s.g.graph&&s.g.graph.url?ht=P(ht,C(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),P(xt,Promise.all([yt,$,Gt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return F=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,E(F)),N=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:N.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,K=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(K),xt.g=4;break;case 7:if(s.l=document.createElement("canvas"),Bt=s.l.getContext("webgl2",{}),!Bt&&(Bt=s.l.getContext("webgl",{}),!Bt))return alert("Failed to create WebGL canvas context when passing video frame."),xt.return();s.D=Bt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,xt.g=0}})}function y(s){var X,R,F,N,K,B,nt,$;return gt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=w(Object.keys(s.B)),F=R.next();!F.done;F=R.next())N=F.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(K=w(s.g.listeners),B=K.next();!B.done;B=K.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return gt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var F=[],N=[],K={},B=w(Object.keys(s)),nt=B.next();!nt.done;K={K:K.K,L:K.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(K.K=nt.onChange,K.L=s[$],F.push(function(yt){return function(){var Gt;return gt(function(Bt){if(Bt.g==1)return P(Bt,yt.K(yt.L),2);Gt=Bt.h,Gt===!0&&(R.o=!0),Bt.g=0})}}(K))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),N.push(nt))))}(F.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(F))}};function v(s){var X,R,F,N,K,B,nt;return gt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=w(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return F=R.value,P($,F(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,K=w(s.A),B=K.next();!B.done;B=K.next())nt=B.value,N.push_back(nt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return gt(function(X){return X.g==1?P(X,h(s),2):X.g!=3?P(X,y(s),3):P(X,v(s),0)})};function C(s,X){var R,F;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),F=fetch(R).then(function(K){return K.arrayBuffer()}),s.F[X]=F,N.return(F))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,F,N,K,B,nt,$,yt,Gt,Bt;return gt(function(xt){switch(xt.g){case 1:return R.g.inputs?(F=1e3*(X==null?performance.now():X),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,K=w(Object.keys(s)),B=K.next();!B.done;B=K.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Xt=R.m[$.stream];if(Xt||(Xt=new Nt(R.h,R.D),R.m[$.stream]=Xt),Xt.l===0&&(Xt.l=Xt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var It=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(It=ht.naturalWidth,wt=ht.naturalHeight):(It=ht.width,wt=ht.height);wt={glName:Xt.l,width:It,height:wt},It=Xt.g,It.canvas.width=wt.width,It.canvas.height=wt.height,It.activeTexture(It.TEXTURE0),Xt.h.bindTexture2d(Xt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,ht),Xt.h.bindTexture2d(0),Xt=wt;break t;case"detections":for(Xt=R.m[$.stream],Xt||(Xt=new Tt(R.h),R.m[$.stream]=Xt),Xt.data||(Xt.data=new Xt.g.DetectionListData),Xt.data.reset(ht.length),wt=0;wt<ht.length;++wt){It=ht[wt];var Yt=Xt.data,l=Yt.setBoundingBox,Z=wt,x=It.T,T=new k;if(ut(T,1,x.Y),ut(T,2,x.Z),ut(T,3,x.height),ut(T,4,x.width),ut(T,5,x.rotation),ut(T,6,x.W),x=fn(T,ot),l.call(Yt,Z,x),It.O)for(Yt=0;Yt<It.O.length;++Yt){T=It.O[Yt];var J=!!T.visibility;l=Xt.data,Z=l.addNormalizedLandmark,x=wt,T=Object.assign(Object.assign({},T),{visibility:J?T.visibility:0}),J=new wn,ut(J,1,T.x),ut(J,2,T.y),ut(J,3,T.z),T.visibility&&ut(J,4,T.visibility),T=fn(J,Qn),Z.call(l,x,T)}if(It.M)for(Yt=0;Yt<It.M.length;++Yt)l=Xt.data,Z=l.addClassification,x=wt,T=It.M[Yt],J=new Sn,ut(J,2,T.X),T.index&&ut(J,1,T.index),T.label&&ut(J,3,T.label),T.displayName&&ut(J,4,T.displayName),T=fn(J,kn),Z.call(l,x,T)}Xt=Xt.data;break t;default:Xt={}}}switch(yt=Xt,Gt=$.stream,$.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Gt,timestamp:F}));break;case"detections":Bt=yt,Bt.stream=Gt,Bt.timestamp=F,N.pushDetectionList(Bt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(N),P(xt,R.C,4);case 4:N.delete(),xt.g=0}})};function A(s,X,R){var F,N,K,B,nt,$,yt,Gt,Bt,xt,ht,Xt,It,wt;return gt(function(Yt){switch(Yt.g){case 1:if(!R)return Yt.return(X);for(F={},N=0,K=w(Object.keys(R)),B=K.next();!B.done;B=K.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=w(Object.keys(R)),B=yt.next();case 2:if(B.done){Yt.g=4;break}if(Gt=B.value,Bt=R[Gt],typeof Bt=="string")return It=F,wt=Gt,P(Yt,_(s,Gt,X[Bt]),14);if(xt=X[Bt.stream],Bt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),Z=xt.getLandmarksList(),x=xt.getClassificationsList(),T=[],J=0;J<l.size();++J){var o=yn(l.get(J),k,O);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(Z.get(J)),M:bt(yn(x.get(J),vn,An))},T.push(o)}l=T}else l=[];F[Gt]=l,Yt.g=7;break}if(Bt.type==="proto_list"){if(xt){for(l=Array(xt.size()),Z=0;Z<xt.size();Z++)l[Z]=xt.get(Z);xt.delete()}else l=[];F[Gt]=l,Yt.g=7;break}if(xt===void 0){Yt.g=3;break}if(Bt.type==="float_list"){F[Gt]=xt,Yt.g=7;break}if(Bt.type==="proto"){F[Gt]=xt,Yt.g=7;break}if(Bt.type!=="texture")throw Error("Unknown output config type: '"+Bt.type+"'");return ht=s.s[Gt],ht||(ht=new Nt(s.h,s.D),s.s[Gt]=ht),P(Yt,$t(ht,xt,s.G),13);case 13:Xt=Yt.h,F[Gt]=Xt;case 7:Bt.transform&&F[Gt]&&(F[Gt]=Bt.transform(F[Gt])),Yt.g=3;break;case 14:It[wt]=Yt.h;case 3:B=yt.next(),Yt.g=2;break;case 4:return Yt.return(F)}})}function _(s,X,R){var F;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(F=s.s[X],F||(F=new Nt(s.h,s.D),s.s[X]=F),N.return($t(F,R,s.G))):N.return(void 0)})}function M(s,X){for(var R=X.name||"$",F=[].concat(E(X.wants)),N=new s.h.StringList,K=w(X.wants),B=K.next();!B.done;B=K.next())N.push_back(B.value);K=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[F[yt]]=nt.get(yt);var Gt=s.listeners[R];Gt&&(s.C=A(s,$,X.outs).then(function(Bt){Bt=Gt(Bt);for(var xt=0;xt<X.wants.length;++xt){var ht=$[F[xt]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Bt&&(s.C=Bt)}))}}),s.i.attachMultiListener(N,K),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ht("Solution",Je),Ht("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function lt(s){var X=this;s=s||{},this.g=new Je({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var F,N,K;return gt(function(B){return B.g==1?(F=q(R),N="third_party/mediapipe/modules/pose_landmark/"+F,P(B,C(X.g,F),2)):(K=B.h,X.g.overrideFile(N,K),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=lt.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return gt(function(X){return P(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return gt(function(F){return P(F,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",lt),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(bi);const ir=class{constructor(){Wt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return fi.VERSION;case"face_mesh":return mi.VERSION;case"hands":return di.VERSION;case"holistic":return hi.VERSION;case"objectron":return pi.VERSION;case"selfie_segmentation":return ai.VERSION;case"pose":return bi.VERSION;default:return""}}initialize(n){return new Promise(async(r,p)=>{if(n.mediaPipeModelConfigArray.length==0){p("no model was selected");return}for(let G=0;G<n.mediaPipeModelConfigArray.length;G++){const S=n.mediaPipeModelConfigArray[G];if(this.mediapipeMap_.has(S.modelType)){p("setting same type is not supported");return}if(typeof S.listener!="function"){p(`[${S.modelType}] ResultsListener must be provided`);return}let H;switch(S.modelType){case"face_mesh":H=new mi.FaceMesh({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+w});break;case"face_detection":H=new fi.FaceDetection({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+w});break;case"hands":H=new di.Hands({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+w});break;case"holistic":H=new hi.Holistic({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+w});break;case"objectron":H=new pi.Objectron({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+w});break;case"selfie_segmentation":H=new ai.SelfieSegmentation({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+w});break;case"pose":H=new bi.Pose({locateFile:(w,E)=>(S.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+w});break;default:p("unknown model type");return}H.onResults(S.listener),S.options&&H.setOptions(S.options);try{await H.initialize(),this.mediapipeMap_.set(S.modelType,H)}catch(w){p(w);return}}r()})}close(n){return new Promise((r,p)=>{let G=[];if(n){let S=this.mediapipeMap_.get(n);if(S)this.mediapipeMap_.delete(n),G.push(S.close());else{p("model not exit");return}}else{for(const[S,H]of this.mediapipeMap_.entries())G.push(H.close());this.mediapipeMap_.clear()}Promise.all(G).then(()=>{r()}).catch(S=>{p(S)})})}send(n,r){return new Promise((p,G)=>{let S=[];if(r){let H=this.mediapipeMap_.get(r);if(H)S.push(H.send({image:n}));else{G("model not exit");return}}else for(const[H,w]of this.mediapipeMap_.entries())S.push(w.send({image:n}));Promise.all(S).then(()=>{p()}).catch(H=>{G(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,p]of this.mediapipeMap_.entries())p&&typeof p.reset=="function"&&p.reset()}};let yi=ir;Wt(yi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const lr=new WeakMap,vr=new WeakMap,rr=new WeakMap,gi=Symbol("anyProducer"),ds=Promise.resolve(),Zi=Symbol("listenerAdded"),vi=Symbol("listenerRemoved");let Gi=!1,io=!1;function wr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Xi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Fr(i,n){const r=vr.get(i);if(!!r.has(n))return r.get(n)}function Mr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:gi,p=rr.get(i);if(!!p.has(r))return p.get(r)}function H2(i,n,r){const p=rr.get(i);if(p.has(n))for(const G of p.get(n))G.enqueue(r);if(p.has(gi)){const G=Promise.all([n,r]);for(const S of p.get(gi))S.enqueue(G)}}function hs(i,n){n=Array.isArray(n)?n:[n];let r=!1,p=()=>{},G=[];const S={enqueue(H){G.push(H),p()},finish(){r=!0,p()}};for(const H of n){let w=Mr(i,H);w||(w=new Set,rr.get(i).set(H,w)),w.add(S)}return{async next(){return G?G.length===0?r?(G=void 0,this.next()):(await new Promise(H=>{p=H}),this.next()):{done:!1,value:await G.shift()}:{done:!0}},async return(H){G=void 0;for(const w of n){const E=Mr(i,w);E&&(E.delete(S),E.size===0&&rr.get(i).delete(w))}return p(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function fs(i){if(i===void 0)return ms;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!ms.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Yr=i=>i===Zi||i===vi;function Wi(i,n,r){if(Yr(n))try{Gi=!0,i.emit(n,r)}finally{Gi=!1}}class cr{static mixin(n,r){return r=fs(r),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const H of r)if(p.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function G(){return Object.defineProperty(this,n,{enumerable:!1,value:new cr}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:G});const S=H=>function(...w){return this[n][H](...w)};for(const H of r)Object.defineProperty(p.prototype,H,{enumerable:!1,value:S(H)});return p}}static get isDebugEnabled(){var r,p;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return io;const{env:n}=(p=globalThis.process)!=null?p:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||io}static set isDebugEnabled(n){io=n}constructor(n={}){var r;lr.set(this,new Set),vr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(gi,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(p,G,S,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof S=="symbol"||typeof S=="number")&&(S=S.toString());const w=new Date,E=`${w.getHours()}:${w.getMinutes()}:${w.getSeconds()}.${w.getMilliseconds()}`;console.log(`[${E}][emittery:${p}][${G}] Event Name: ${S}
122
- data: ${H}`)})}logIfDebugEnabled(n,r,p){(cr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,p)}on(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const p of n){wr(p);let G=Fr(this,p);G||(G=new Set,vr.get(this).set(p,G)),G.add(r),this.logIfDebugEnabled("subscribe",p,void 0),Yr(p)||Wi(this,Zi,{eventName:p,listener:r})}return this.off.bind(this,n,r)}off(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const p of n){wr(p);const G=Fr(this,p);G&&(G.delete(r),G.size===0&&vr.get(this).delete(p)),this.logIfDebugEnabled("unsubscribe",p,void 0),Yr(p)||Wi(this,vi,{eventName:p,listener:r})}}once(n){let r;const p=new Promise(G=>{r=this.on(n,S=>{r(),G(S)})});return p.off=r,p}events(n){n=Array.isArray(n)?n:[n];for(const r of n)wr(r);return hs(this,n)}async emit(n,r){var w;if(wr(n),Yr(n)&&!Gi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),H2(this,n,r);const p=(w=Fr(this,n))!=null?w:new Set,G=lr.get(this),S=[...p],H=Yr(n)?[]:[...G];await ds,await Promise.all([...S.map(async E=>{if(p.has(E))return E(r)}),...H.map(async E=>{if(G.has(E))return E(n,r)})])}async emitSerial(n,r){var w;if(wr(n),Yr(n)&&!Gi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const p=(w=Fr(this,n))!=null?w:new Set,G=lr.get(this),S=[...p],H=[...G];await ds;for(const E of S)p.has(E)&&await E(r);for(const E of H)G.has(E)&&await E(n,r)}onAny(n){return Xi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(n),Wi(this,Zi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return hs(this)}offAny(n){Xi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Wi(this,vi,{listener:n}),lr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const p=Fr(this,r);p&&p.clear();const G=Mr(this,r);if(G){for(const S of G)S.finish();G.clear()}}else{lr.get(this).clear();for(const[p,G]of vr.get(this).entries())G.clear(),vr.get(this).delete(p);for(const[p,G]of rr.get(this).entries()){for(const S of G)S.finish();G.clear(),rr.get(this).delete(p)}}}listenerCount(n){var p,G,S,H,w,E;n=Array.isArray(n)?n:[n];let r=0;for(const et of n){if(typeof et=="string"){r+=lr.get(this).size+((G=(p=Fr(this,et))==null?void 0:p.size)!=null?G:0)+((H=(S=Mr(this,et))==null?void 0:S.size)!=null?H:0)+((E=(w=Mr(this))==null?void 0:w.size)!=null?E:0);continue}typeof et<"u"&&wr(et),r+=lr.get(this).size;for(const ct of vr.get(this).values())r+=ct.size;for(const ct of rr.get(this).values())r+=ct.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=fs(r);for(const p of r){if(n[p]!==void 0)throw new Error(`The property \`${p}\` already exists on \`target\``);Object.defineProperty(n,p,{enumerable:!1,value:this[p].bind(this)})}}}const ms=Object.getOwnPropertyNames(cr.prototype).filter(i=>i!=="constructor");Object.defineProperty(cr,"listenerAdded",{value:Zi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(cr,"listenerRemoved",{value:vi,writable:!1,enumerable:!0,configurable:!1});function oo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const Lr=oo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))($n||{});function ps(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let N2=0;function Vi(i,n,r,p,G){const S=N2++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>ps(H))),new Promise(H=>{G==null||G.set(S,H)})}function Kr(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>ps(S)))}const Ri=oo("workerized",{});function so(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function J2(){if(so())Kr({type:$n.GLOBALS_SYNC},Lr);else{const i=[];for(const n in Ri){const{worker:r,resolvers:p}=Ri[n].workerContext;r&&i.push(Vi(r,$n.GLOBALS_SYNC,"",[Lr],p))}await Promise.all(i)}}function jr(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],jr(i[r],n[r])):typeof i[r]=="object"?(n[r]={},jr(i[r],n[r])):n[r]=i[r]}async function E2(i,n,r){const p=new n;if(p.addEventListener("message",async({data:G})=>{var S,H,w,E,et,ct,dt;switch(G.type){case $n.GLOBALS_SYNC:G.id?((H=r.get((S=G.id)!=null?S:-1))==null||H(G.result),r.delete((w=G.id)!=null?w:-1)):(jr((E=G.result)!=null?E:{},Lr),await J2());break;default:(ct=r.get((et=G.id)!=null?et:-1))==null||ct(G.result),r.delete((dt=G.id)!=null?dt:-1)}}),!await Vi(p,$n.INIT,"",[i.workerId,Lr],r))throw"Failed to instantiate workerized class";return p}let k2=0;async function U2(i,n,r){const p={},G=k2++;return Object.getOwnPropertyNames(i.prototype).forEach(S=>{p[S]=(...H)=>Vi(n,$n.FORWARD,S,H,r)}),p.terminate=async(...S)=>{const H=await Vi(n,$n.TERMINATE,"",S,r);return delete Ri[G],n.terminate(),p.workerContext.worker=void 0,H},p.workerContext={id:G,worker:n,resolvers:r},Ri[G]=p,p}async function B2(i,n){const r=new Map,p=await E2(i,n,r);return U2(i,p,r)}async function A2(i,n){const{functionName:r,args:p}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Kr(i,await n.instance[r](...p!=null?p:[]))}const bs=oo("registeredWorkers",{});function M2(i,n){n.workerId=i,so()&&(bs[n.workerId]=n)}function K2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=bs[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;jr(p,Lr),Kr(i,typeof n.instance!==void 0)}async function j2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Kr(i,p)}function O2(i){if(!i.args)throw"Missing globals while syncing";jr(i.args[0],Lr),Kr(i,{})}function z2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:K2(r,i);break;case $n.FORWARD:A2(r,i);break;case $n.TERMINATE:j2(r,i);break;case $n.GLOBALS_SYNC:O2(r);break}}}so()&&z2();class ys{static async createVideoReadable(n){return new Promise((r,p)=>{const G=document.createElement("video");let S=new AbortController,H=new AbortController;G.addEventListener("canplay",()=>{S.abort(),G.muted=!0,G.loop=!0,G.play().then(()=>{try{const w=G.captureStream(),E=new MediaStreamTrackProcessor(w.getVideoTracks()[0]);r(E.readable)}catch(w){p(w)}})},{once:!0,signal:H.signal}),G.addEventListener("error",w=>{H.abort(),p("loading error:"+w)},{once:!0,signal:S.signal}),G.crossOrigin="anonymous",G.src=n})}static async createImageCanvas(n){const p=await(await fetch(n)).blob();return await createImageBitmap(p)}}var P2=Object.defineProperty,_2=(i,n,r)=>n in i?P2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Q2=(i,n,r)=>(_2(i,typeof n!="symbol"?n+"":n,r),r);const D2="hlg.tokbox.com/prod/logging/vcp_webrtc",$2="https://",q2=1e4;let xi;const t1=new Uint8Array(16);function e1(){if(!xi&&(xi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!xi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xi(t1)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function n1(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const r1=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),gs={randomUUID:r1};function i1(i,n,r){if(gs.randomUUID&&!n&&!i)return gs.randomUUID();i=i||{};const p=i.random||(i.rng||e1)();if(p[6]=p[6]&15|64,p[8]=p[8]&63|128,n){r=r||0;for(let G=0;G<16;++G)n[r+G]=p[G];return n}return n1(p)}function lo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const ur=lo("globals",{});var Gr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Gr||{});function Zs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let o1=0;function s1(i,n,r,p,G){const S=o1++;return i.postMessage({id:S,type:n,functionName:r,args:p},p.filter(H=>Zs(H))),new Promise(H=>{G==null||G.set(S,H)})}function Or(i,n){const{id:r,type:p}=i,G=Array.isArray(n)?n:[n];postMessage({id:r,type:p,result:n},G.filter(S=>Zs(S)))}const vs=lo("workerized",{});function Gs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function l1(){if(Gs())Or({type:Gr.GLOBALS_SYNC},ur);else{const i=[];for(const n in vs){const{worker:r,resolvers:p}=vs[n].workerContext;r&&i.push(s1(r,Gr.GLOBALS_SYNC,"",[ur],p))}await Promise.all(i)}}function Ii(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ii(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ii(i[r],n[r])):n[r]=i[r]}async function c1(i,n){const{functionName:r,args:p}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Or(i,await n.instance[r](...p!=null?p:[]))}const u1=lo("registeredWorkers",{});function a1(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,p]=i.args,G=u1[r];if(G)n.instance=new G(i.args.slice(1));else throw`unknown worker class ${r}`;Ii(p,ur),Or(i,typeof n.instance!==void 0)}async function d1(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let p;n.instance.terminate&&(p=await n.instance.terminate(...r!=null?r:[])),Or(i,p)}function h1(i){if(!i.args)throw"Missing globals while syncing";Ii(i.args[0],ur),Or(i,{})}function f1(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Gr.INIT:a1(r,i);break;case Gr.FORWARD:c1(r,i);break;case Gr.TERMINATE:d1(r,i);break;case Gr.GLOBALS_SYNC:h1(r);break}}}Gs()&&f1();function m1(i,n){return ur[i]||(ur[i]=n),[()=>ur[i],async r=>{ur[i]=r,await l1()}]}function p1(i,n){return m1(i,n)}const[b1,m3]=p1("metadata");function co(){return b1()}class y1{constructor(n){Q2(this,"uuid",i1()),this.config=n}async send(n){var r,p,G;const{appId:S,sourceType:H}=(r=co())!=null?r:{};if(!S||!H)return"metadata missing";const w=new AbortController,E=setTimeout(()=>w.abort(),q2);return await((G=(p=this.config)==null?void 0:p.fetch)!=null?G:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:w.signal}),clearTimeout(E),"success"}getUrl(){var n;let r=(n=co().proxyUrl)!=null?n:$2;return r+=(r.at(-1)==="/"?"":"/")+D2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=co();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const g1="4.3.6";async function Xs(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}var Ws=(i=>(i.PUSH="PUSH",i.POP="POP",i))(Ws||{});class Z1{constructor(n){Wt(this,"context");Wt(this,"extension");Wt(this,"queries",[]);Wt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await Xs(200)}}}/* @license twgl.js 5.3.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
121
+ `+R.getProgramInfoLog(K));Y=s.m=K,R.useProgram(Y),N=R.getUniformLocation(Y,"sampler0"),s.j={I:R.getAttribLocation(Y,"aVertex"),H:R.getAttribLocation(Y,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}Y=s.j,R.useProgram(s.m),R.canvas.width=G.width,R.canvas.height=G.height,R.viewport(0,0,G.width,G.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(G.glName),R.enableVertexAttribArray(Y.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(Y.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(Y.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(Y.I),R.disableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function wt(s){this.g=s}var Ut=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,G){return G+s}function ae(s,G){window[s]=G}function pe(s){var G=document.createElement("script");return G.setAttribute("src",s),G.setAttribute("crossorigin","anonymous"),new Promise(function(R){G.addEventListener("load",function(){R()},!1),G.addEventListener("error",function(){R()},!1),document.body.appendChild(G)})}function ge(){return gt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(Ut),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function Je(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var G=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")G=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=G,s.options){G=T(Object.keys(s.options));for(var R=G.next();!R.done;R=G.next()){R=R.value;var Y=s.options[R].default;Y!==void 0&&(this.j[R]=typeof Y=="function"?Y():Y)}}}i=Je.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var G,R,Y,N,K,E,et,$,yt,Xt,Mt;return gt(function(xt){switch(xt.g){case 1:return s.R?(G=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),E=G.filter(function(dt){return dt.data!==void 0}),et=G.filter(function(dt){return dt.data===void 0}),$=Promise.all(E.map(function(dt){var Wt=C(s,dt.url);if(dt.path!==void 0){var It=dt.path;Wt=Wt.then(function(Yt){return s.overrideFile(It,Yt),Promise.resolve(Yt)})}return Wt})),yt=Promise.all(et.map(function(dt){return dt.simd===void 0||dt.simd&&R||!dt.simd&&!R?pe(s.locateFile(dt.url,s.S)):Promise.resolve()})).then(function(){var dt,Wt,It;return gt(function(Yt){if(Yt.g==1)return dt=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,It=s,P(Yt,dt(Wt),2);It.h=Yt.h,Yt.g=0})}),Xt=function(){return gt(function(dt){return s.g.graph&&s.g.graph.url?dt=P(dt,C(s,s.g.graph.url),0):(dt.g=0,dt=void 0),dt})}(),P(xt,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=G.filter(function(dt){return dt.simd===void 0||dt.simd&&R||!dt.simd&&!R}).map(function(dt){return s.locateFile(dt.url,s.S)}),importScripts.apply(null,B(Y)),N=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:N.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,K=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(K),xt.g=4;break;case 7:if(s.l=document.createElement("canvas"),Mt=s.l.getContext("webgl2",{}),!Mt&&(Mt=s.l.getContext("webgl",{}),!Mt))return alert("Failed to create WebGL canvas context when passing video frame."),xt.return();s.D=Mt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,xt.g=0}})}function y(s){var G,R,Y,N,K,E,et,$;return gt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(G=yt.h,s.i.loadGraph(G)),R=T(Object.keys(s.B)),Y=R.next();!Y.done;Y=R.next())N=Y.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(K=T(s.g.listeners),E=K.next();!E.done;E=K.next())et=E.value,A(s,et);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return gt(function(G){s.i&&(s.i.reset(),s.m={},s.s={}),G.g=0})},i.setOptions=function(s,G){var R=this;if(G=G||this.g.options){for(var Y=[],N=[],K={},E=T(Object.keys(s)),et=E.next();!et.done;K={K:K.K,L:K.L},et=E.next()){var $=et.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],et=G[$],et!==void 0&&(et.onChange&&(K.K=et.onChange,K.L=s[$],Y.push(function(yt){return function(){var Xt;return gt(function(Mt){if(Mt.g==1)return P(Mt,yt.K(yt.L),2);Xt=Mt.h,Xt===!0&&(R.o=!0),Mt.g=0})}}(K))),et.graphOptionXref&&($={valueNumber:et.type===1?s[$]:0,valueBoolean:et.type===0?s[$]:!1,valueString:et.type===2?s[$]:""},et=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),et.graphOptionXref),$),N.push(et))))}(Y.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(Y))}};function v(s){var G,R,Y,N,K,E,et;return gt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}G=T(s.v),R=G.next();case 3:if(R.done){$.g=5;break}return Y=R.value,P($,Y(),4);case 4:R=G.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,K=T(s.A),E=K.next();!E.done;E=K.next())et=E.value,N.push_back(et);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return gt(function(G){return G.g==1?P(G,h(s),2):G.g!=3?P(G,y(s),3):P(G,v(s),0)})};function C(s,G){var R,Y;return gt(function(N){return G in s.F?N.return(s.F[G]):(R=s.locateFile(G,""),Y=fetch(R).then(function(K){return K.arrayBuffer()}),s.F[G]=Y,N.return(Y))})}i.overrideFile=function(s,G){this.i?this.i.overrideFile(s,G):this.B[s]=G},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,G){var R=this,Y,N,K,E,et,$,yt,Xt,Mt;return gt(function(xt){switch(xt.g){case 1:return R.g.inputs?(Y=1e3*(G==null?performance.now():G),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,K=T(Object.keys(s)),E=K.next();!E.done;E=K.next())if(et=E.value,$=R.g.inputs[et]){t:{var dt=s[et];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Nt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&dt instanceof HTMLVideoElement)var It=dt.videoWidth,Yt=dt.videoHeight;else typeof HTMLImageElement<"u"&&dt instanceof HTMLImageElement?(It=dt.naturalWidth,Yt=dt.naturalHeight):(It=dt.width,Yt=dt.height);Yt={glName:Wt.l,width:It,height:Yt},It=Wt.g,It.canvas.width=Yt.width,It.canvas.height=Yt.height,It.activeTexture(It.TEXTURE0),Wt.h.bindTexture2d(Wt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,dt),Wt.h.bindTexture2d(0),Wt=Yt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new wt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(dt.length),Yt=0;Yt<dt.length;++Yt){It=dt[Yt];var Ft=Wt.data,l=Ft.setBoundingBox,Z=Yt,x=It.T,w=new k;if(ct(w,1,x.Y),ct(w,2,x.Z),ct(w,3,x.height),ct(w,4,x.width),ct(w,5,x.rotation),ct(w,6,x.W),x=mn(w,ot),l.call(Ft,Z,x),It.O)for(Ft=0;Ft<It.O.length;++Ft){w=It.O[Ft];var J=!!w.visibility;l=Wt.data,Z=l.addNormalizedLandmark,x=Yt,w=Object.assign(Object.assign({},w),{visibility:J?w.visibility:0}),J=new Yn,ct(J,1,w.x),ct(J,2,w.y),ct(J,3,w.z),w.visibility&&ct(J,4,w.visibility),w=mn(J,Qn),Z.call(l,x,w)}if(It.M)for(Ft=0;Ft<It.M.length;++Ft)l=Wt.data,Z=l.addClassification,x=Yt,w=It.M[Ft],J=new Sn,ct(J,2,w.X),w.index&&ct(J,1,w.index),w.label&&ct(J,3,w.label),w.displayName&&ct(J,4,w.displayName),w=mn(J,En),Z.call(l,x,w)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:Y}));break;case"detections":Mt=yt,Mt.stream=Xt,Mt.timestamp=Y,N.pushDetectionList(Mt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(N),P(xt,R.C,4);case 4:N.delete(),xt.g=0}})};function M(s,G,R){var Y,N,K,E,et,$,yt,Xt,Mt,xt,dt,Wt,It,Yt;return gt(function(Ft){switch(Ft.g){case 1:if(!R)return Ft.return(G);for(Y={},N=0,K=T(Object.keys(R)),E=K.next();!E.done;E=K.next())et=E.value,$=R[et],typeof $!="string"&&$.type==="texture"&&G[$.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=T(Object.keys(R)),E=yt.next();case 2:if(E.done){Ft.g=4;break}if(Xt=E.value,Mt=R[Xt],typeof Mt=="string")return It=Y,Yt=Xt,P(Ft,_(s,Xt,G[Mt]),14);if(xt=G[Mt.stream],Mt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),Z=xt.getLandmarksList(),x=xt.getClassificationsList(),w=[],J=0;J<l.size();++J){var o=yn(l.get(J),k,z);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Et(Z.get(J)),M:bt(yn(x.get(J),vn,An))},w.push(o)}l=w}else l=[];Y[Xt]=l,Ft.g=7;break}if(Mt.type==="proto_list"){if(xt){for(l=Array(xt.size()),Z=0;Z<xt.size();Z++)l[Z]=xt.get(Z);xt.delete()}else l=[];Y[Xt]=l,Ft.g=7;break}if(xt===void 0){Ft.g=3;break}if(Mt.type==="float_list"){Y[Xt]=xt,Ft.g=7;break}if(Mt.type==="proto"){Y[Xt]=xt,Ft.g=7;break}if(Mt.type!=="texture")throw Error("Unknown output config type: '"+Mt.type+"'");return dt=s.s[Xt],dt||(dt=new Nt(s.h,s.D),s.s[Xt]=dt),P(Ft,$t(dt,xt,s.G),13);case 13:Wt=Ft.h,Y[Xt]=Wt;case 7:Mt.transform&&Y[Xt]&&(Y[Xt]=Mt.transform(Y[Xt])),Ft.g=3;break;case 14:It[Yt]=Ft.h;case 3:E=yt.next(),Ft.g=2;break;case 4:return Ft.return(Y)}})}function _(s,G,R){var Y;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(Y=s.s[G],Y||(Y=new Nt(s.h,s.D),s.s[G]=Y),N.return($t(Y,R,s.G))):N.return(void 0)})}function A(s,G){for(var R=G.name||"$",Y=[].concat(B(G.wants)),N=new s.h.StringList,K=T(G.wants),E=K.next();!E.done;E=K.next())N.push_back(E.value);K=s.h.PacketListener.implement({onResults:function(et){for(var $={},yt=0;yt<G.wants.length;++yt)$[Y[yt]]=et.get(yt);var Xt=s.listeners[R];Xt&&(s.C=M(s,$,G.outs).then(function(Mt){Mt=Xt(Mt);for(var xt=0;xt<G.wants.length;++xt){var dt=$[Y[xt]];typeof dt=="object"&&dt.hasOwnProperty&&dt.hasOwnProperty("delete")&&dt.delete()}Mt&&(s.C=Mt)}))}}),s.i.attachMultiListener(N,K),N.delete()}i.onResults=function(s,G){this.listeners[G||"$"]=s},Ht("Solution",Je),Ht("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function lt(s){var G=this;s=s||{},this.g=new Je({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Et},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Et},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var Y,N,K;return gt(function(E){return E.g==1?(Y=q(R),N="third_party/mediapipe/modules/pose_landmark/"+Y,P(E,C(G.g,Y),2)):(K=E.h,G.g.overrideFile(N,K),E.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=lt.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return gt(function(G){return P(G,s.g.initialize(),0)})},i.send=function(s,G){var R=this;return gt(function(Y){return P(Y,R.g.send(s,G),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",lt),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(yi);const rr=class{constructor(){Zt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return mi.VERSION;case"face_mesh":return pi.VERSION;case"hands":return hi.VERSION;case"holistic":return fi.VERSION;case"objectron":return bi.VERSION;case"selfie_segmentation":return di.VERSION;case"pose":return yi.VERSION;default:return""}}initialize(n){return new Promise(async(r,m)=>{if(n.mediaPipeModelConfigArray.length==0){m("no model was selected");return}for(let X=0;X<n.mediaPipeModelConfigArray.length;X++){const S=n.mediaPipeModelConfigArray[X];if(this.mediapipeMap_.has(S.modelType)){m("setting same type is not supported");return}if(typeof S.listener!="function"){m(`[${S.modelType}] ResultsListener must be provided`);return}let H;switch(S.modelType){case"face_mesh":H=new pi.FaceMesh({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":H=new mi.FaceDetection({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":H=new hi.Hands({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":H=new fi.Holistic({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":H=new bi.Objectron({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":H=new di.SelfieSegmentation({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":H=new yi.Pose({locateFile:(T,B)=>(S.assetsUri||rr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:m("unknown model type");return}H.onResults(S.listener),S.options&&H.setOptions(S.options);try{await H.initialize(),this.mediapipeMap_.set(S.modelType,H)}catch(T){m(T);return}}r()})}close(n){return new Promise((r,m)=>{let X=[];if(n){let S=this.mediapipeMap_.get(n);if(S)this.mediapipeMap_.delete(n),X.push(S.close());else{m("model not exit");return}}else{for(const[S,H]of this.mediapipeMap_.entries())X.push(H.close());this.mediapipeMap_.clear()}Promise.all(X).then(()=>{r()}).catch(S=>{m(S)})})}send(n,r){return new Promise((m,X)=>{let S=[];if(r){let H=this.mediapipeMap_.get(r);if(H)S.push(H.send({image:n}));else{X("model not exit");return}}else for(const[H,T]of this.mediapipeMap_.entries())S.push(T.send({image:n}));Promise.all(S).then(()=>{m()}).catch(H=>{X(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,m]of this.mediapipeMap_.entries())m&&typeof m.reset=="function"&&m.reset()}};let gi=rr;Zt(gi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const sr=new WeakMap,Zi=new WeakMap,Mr=new WeakMap,io=Symbol("anyProducer"),ms=Promise.resolve(),vi=Symbol("listenerAdded"),Gi=Symbol("listenerRemoved");let oo=!1;function Sr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Xi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function wr(i,n){const r=Zi.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function Ar(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:io,m=Mr.get(i);return m.has(r)||m.set(r,new Set),m.get(r)}function B2(i,n,r){const m=Mr.get(i);if(m.has(n))for(const X of m.get(n))X.enqueue(r);if(m.has(io)){const X=Promise.all([n,r]);for(const S of m.get(io))S.enqueue(X)}}function ps(i,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},X=[];const S={enqueue(H){X.push(H),m()},finish(){r=!0,m()}};for(const H of n)Ar(i,H).add(S);return{async next(){return X?X.length===0?r?(X=void 0,this.next()):(await new Promise(H=>{m=H}),this.next()):{done:!1,value:await X.shift()}:{done:!0}},async return(H){X=void 0;for(const T of n)Ar(i,T).delete(S);return m(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function bs(i){if(i===void 0)return ys;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!ys.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const so=i=>i===vi||i===Gi;class gr{static mixin(n,r){return r=bs(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const H of r)if(m.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function X(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:X});const S=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(m.prototype,H,{enumerable:!1,value:S(H)});return m}}static get isDebugEnabled(){if(typeof process!="object")return oo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||oo}static set isDebugEnabled(n){oo=n}constructor(n={}){sr.set(this,new Set),Zi.set(this,new Map),Mr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,X,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof X=="symbol"&&(X=X.toString());const H=new Date,T=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${T}][emittery:${r}][${m}] Event Name: ${X}
122
+ data: ${S}`)})}logIfDebugEnabled(n,r,m){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const m of n)Sr(m),wr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),so(m)||this.emit(vi,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){Xi(r),n=Array.isArray(n)?n:[n];for(const m of n)Sr(m),wr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),so(m)||this.emit(Gi,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,X=>{m(),r(X)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Sr(r);return ps(this,n)}async emit(n,r){Sr(n),this.logIfDebugEnabled("emit",n,r),B2(this,n,r);const m=wr(this,n),X=sr.get(this),S=[...m],H=so(n)?[]:[...X];await ms,await Promise.all([...S.map(async T=>{if(m.has(T))return T(r)}),...H.map(async T=>{if(X.has(T))return T(n,r)})])}async emitSerial(n,r){Sr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=wr(this,n),X=sr.get(this),S=[...m],H=[...X];await ms;for(const T of S)m.has(T)&&await T(r);for(const T of H)X.has(T)&&await T(n,r)}onAny(n){return Xi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(vi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return ps(this)}offAny(n){Xi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Gi,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){wr(this,r).clear();const m=Ar(this,r);for(const X of m)X.finish();m.clear()}else{sr.get(this).clear();for(const m of Zi.get(this).values())m.clear();for(const m of Mr.get(this).values()){for(const X of m)X.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=sr.get(this).size+wr(this,m).size+Ar(this,m).size+Ar(this).size;continue}typeof m<"u"&&Sr(m),r+=sr.get(this).size;for(const X of Zi.get(this).values())r+=X.size;for(const X of Mr.get(this).values())r+=X.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=bs(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const ys=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:vi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:Gi,writable:!1,enumerable:!0,configurable:!1});var gs=gr;function lo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const Yr=lo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))($n||{});function Zs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let M2=0;function Wi(i,n,r,m,X){const S=M2++;return i.postMessage({id:S,type:n,functionName:r,args:m},m.filter(H=>Zs(H))),new Promise(H=>{X==null||X.set(S,H)})}function Kr(i,n){const{id:r,type:m}=i,X=Array.isArray(n)?n:[n];postMessage({id:r,type:m,result:n},X.filter(S=>Zs(S)))}const Vi=lo("workerized",{});function co(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function A2(){if(co())Kr({type:$n.GLOBALS_SYNC},Yr);else{const i=[];for(const n in Vi){const{worker:r,resolvers:m}=Vi[n].workerContext;r&&i.push(Wi(r,$n.GLOBALS_SYNC,"",[Yr],m))}await Promise.all(i)}}function jr(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],jr(i[r],n[r])):typeof i[r]=="object"?(n[r]={},jr(i[r],n[r])):n[r]=i[r]}async function K2(i,n,r){const m=new n;if(m.addEventListener("message",async({data:X})=>{var S,H,T,B,nt,ut,pt;switch(X.type){case $n.GLOBALS_SYNC:X.id?((H=r.get((S=X.id)!=null?S:-1))==null||H(X.result),r.delete((T=X.id)!=null?T:-1)):(jr((B=X.result)!=null?B:{},Yr),await A2());break;default:(ut=r.get((nt=X.id)!=null?nt:-1))==null||ut(X.result),r.delete((pt=X.id)!=null?pt:-1)}}),!await Wi(m,$n.INIT,"",[i.workerId,Yr],r))throw"Failed to instantiate workerized class";return m}let j2=0;async function z2(i,n,r){const m={},X=j2++;return Object.getOwnPropertyNames(i.prototype).forEach(S=>{m[S]=(...H)=>Wi(n,$n.FORWARD,S,H,r)}),m.terminate=async(...S)=>{const H=await Wi(n,$n.TERMINATE,"",S,r);return delete Vi[X],n.terminate(),m.workerContext.worker=void 0,H},m.workerContext={id:X,worker:n,resolvers:r},Vi[X]=m,m}async function O2(i,n){const r=new Map,m=await K2(i,n,r);return z2(i,m,r)}async function P2(i,n){const{functionName:r,args:m}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Kr(i,await n.instance[r](...m!=null?m:[]))}const vs=lo("registeredWorkers",{});function _2(i,n){n.workerId=i,co()&&(vs[n.workerId]=n)}function Q2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,m]=i.args,X=vs[r];if(X)n.instance=new X(i.args.slice(1));else throw`unknown worker class ${r}`;jr(m,Yr),Kr(i,typeof n.instance!==void 0)}async function D2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...r!=null?r:[])),Kr(i,m)}function $2(i){if(!i.args)throw"Missing globals while syncing";jr(i.args[0],Yr),Kr(i,{})}function q2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:Q2(r,i);break;case $n.FORWARD:P2(r,i);break;case $n.TERMINATE:D2(r,i);break;case $n.GLOBALS_SYNC:$2(r);break}}}co()&&q2();class Gs{static async createVideoReadable(n){return new Promise((r,m)=>{const X=document.createElement("video");let S=new AbortController,H=new AbortController;X.addEventListener("canplay",()=>{S.abort(),X.muted=!0,X.loop=!0,X.play().then(()=>{try{const T=X.captureStream(),B=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(B.readable)}catch(T){m(T)}})},{once:!0,signal:H.signal}),X.addEventListener("error",T=>{H.abort(),m("loading error:"+T)},{once:!0,signal:S.signal}),X.crossOrigin="anonymous",X.src=n})}static async createImageCanvas(n){const m=await(await fetch(n)).blob();return await createImageBitmap(m)}}var tc=Object.defineProperty,ec=(i,n,r)=>n in i?tc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,nc=(i,n,r)=>(ec(i,typeof n!="symbol"?n+"":n,r),r);const rc="hlg.tokbox.com/prod/logging/vcp_webrtc",ic="https://",oc=1e4;let Ri;const sc=new Uint8Array(16);function lc(){if(!Ri&&(Ri=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Ri))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ri(sc)}const Mn=[];for(let i=0;i<256;++i)Mn.push((i+256).toString(16).slice(1));function cc(i,n=0){return(Mn[i[n+0]]+Mn[i[n+1]]+Mn[i[n+2]]+Mn[i[n+3]]+"-"+Mn[i[n+4]]+Mn[i[n+5]]+"-"+Mn[i[n+6]]+Mn[i[n+7]]+"-"+Mn[i[n+8]]+Mn[i[n+9]]+"-"+Mn[i[n+10]]+Mn[i[n+11]]+Mn[i[n+12]]+Mn[i[n+13]]+Mn[i[n+14]]+Mn[i[n+15]]).toLowerCase()}const uc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Xs={randomUUID:uc};function ac(i,n,r){if(Xs.randomUUID&&!n&&!i)return Xs.randomUUID();i=i||{};const m=i.random||(i.rng||lc)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){r=r||0;for(let X=0;X<16;++X)n[r+X]=m[X];return n}return cc(m)}function uo(i,n){return globalThis[i]||(globalThis[i]=n),globalThis[i]}const lr=uo("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function Ws(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let dc=0;function hc(i,n,r,m,X){const S=dc++;return i.postMessage({id:S,type:n,functionName:r,args:m},m.filter(H=>Ws(H))),new Promise(H=>{X==null||X.set(S,H)})}function zr(i,n){const{id:r,type:m}=i,X=Array.isArray(n)?n:[n];postMessage({id:r,type:m,result:n},X.filter(S=>Ws(S)))}const Vs=uo("workerized",{});function Rs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function fc(){if(Rs())zr({type:Zr.GLOBALS_SYNC},lr);else{const i=[];for(const n in Vs){const{worker:r,resolvers:m}=Vs[n].workerContext;r&&i.push(hc(r,Zr.GLOBALS_SYNC,"",[lr],m))}await Promise.all(i)}}function xi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],xi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},xi(i[r],n[r])):n[r]=i[r]}async function mc(i,n){const{functionName:r,args:m}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;zr(i,await n.instance[r](...m!=null?m:[]))}const pc=uo("registeredWorkers",{});function bc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,m]=i.args,X=pc[r];if(X)n.instance=new X(i.args.slice(1));else throw`unknown worker class ${r}`;xi(m,lr),zr(i,typeof n.instance!==void 0)}async function yc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...r!=null?r:[])),zr(i,m)}function gc(i){if(!i.args)throw"Missing globals while syncing";xi(i.args[0],lr),zr(i,{})}function Zc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:bc(r,i);break;case Zr.FORWARD:mc(r,i);break;case Zr.TERMINATE:yc(r,i);break;case Zr.GLOBALS_SYNC:gc(r);break}}}Rs()&&Zc();function vc(i,n){return lr[i]||(lr[i]=n),[()=>lr[i],async r=>{lr[i]=r,await fc()}]}function Gc(i,n){return vc(i,n)}const[Xc,I3]=Gc("metadata");function ao(){return Xc()}class Wc{constructor(n){nc(this,"uuid",ac()),this.config=n}async send(n){var r,m,X;const{appId:S,sourceType:H}=(r=ao())!=null?r:{};if(!S||!H)return"metadata missing";const T=new AbortController,B=setTimeout(()=>T.abort(),oc);return await((X=(m=this.config)==null?void 0:m.fetch)!=null?X:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(B),"success"}getUrl(){var n;let r=(n=ao().proxyUrl)!=null?n:ic;return r+=(r.at(-1)==="/"?"":"/")+rc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=ao();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const Vc="5.0.0";class ho{constructor(){Zt(this,"canvas");Zt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:m}=n;this.canvas.width=r,this.canvas.height=m}renderSilhouette(n,r,m="none"){const{width:X,height:S}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,X,S),this.context.globalCompositeOperation="source-in",this.context.filter=m,this.context.drawImage(n,0,0,X,S,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class Rc extends ho{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class xc extends ho{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Ic extends ho{constructor(){super(...arguments);Zt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,m){return super.resizeCanvas(r),this.renderSilhouette(r,m),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,m)}}/* @license twgl.js 5.2.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
123
123
  Available via the MIT license.
124
- see: http://github.com/greggman/twgl.js for details */const uo=5120,zr=5121,ao=5122,ho=5123,fo=5124,mo=5125,po=5126,v1=32819,G1=32820,X1=33635,W1=5131,V1=33640,R1=35899,x1=35902,I1=36269,S1=34042,Vs={};{const i=Vs;i[uo]=Int8Array,i[zr]=Uint8Array,i[ao]=Int16Array,i[ho]=Uint16Array,i[fo]=Int32Array,i[mo]=Uint32Array,i[po]=Float32Array,i[v1]=Uint16Array,i[G1]=Uint16Array,i[X1]=Uint16Array,i[W1]=Uint16Array,i[V1]=Uint32Array,i[R1]=Uint32Array,i[x1]=Uint32Array,i[I1]=Uint32Array,i[S1]=Uint32Array}function bo(i){if(i instanceof Int8Array)return uo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return zr;if(i instanceof Int16Array)return ao;if(i instanceof Uint16Array)return ho;if(i instanceof Int32Array)return fo;if(i instanceof Uint32Array)return mo;if(i instanceof Float32Array)return po;throw new Error("unsupported typed array type")}function Rs(i){if(i===Int8Array)return uo;if(i===Uint8Array||i===Uint8ClampedArray)return zr;if(i===Int16Array)return ao;if(i===Uint16Array)return ho;if(i===Int32Array)return fo;if(i===Uint32Array)return mo;if(i===Float32Array)return po;throw new Error("unsupported typed array type")}function xs(i){const n=Vs[i];if(!n)throw new Error("unknown gl type");return n}const Si=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function Is(...i){console.error(...i)}const Ss=new Map;function Ti(i,n){if(!i||typeof i!="object")return!1;let r=Ss.get(n);r||(r=new WeakMap,Ss.set(n,r));let p=r.get(i);if(p===void 0){const G=Object.prototype.toString.call(i);p=G.substring(8,G.length-1)===n,r.set(i,p)}return p}function T1(i,n){return typeof WebGLBuffer<"u"&&Ti(n,"WebGLBuffer")}function w1(i,n){return typeof WebGLRenderbuffer<"u"&&Ti(n,"WebGLRenderbuffer")}function yo(i,n){return typeof WebGLTexture<"u"&&Ti(n,"WebGLTexture")}function F1(i,n){return typeof WebGLSampler<"u"&&Ti(n,"WebGLSampler")}const Ts=35044,Xr=34962,Y1=34963,L1=34660,C1=5120,H1=5121,N1=5122,J1=5123,E1=5124,k1=5125,ws=5126,Fs={attribPrefix:""};function U1(i,n,r,p,G){i.bindBuffer(n,r),i.bufferData(n,p,G||Ts)}function Ys(i,n,r,p){if(T1(i,n))return n;r=r||Xr;const G=i.createBuffer();return U1(i,r,G,n,p),G}function Ls(i){return i==="indices"}function B1(i){return i===Int8Array||i===Uint8Array}function A1(i){return i.length?i:i.data}const M1=/coord|texture/i,K1=/color|colour/i;function j1(i,n){let r;if(M1.test(i)?r=2:K1.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function O1(i,n,r){return i.numComponents||i.size||j1(n,r||A1(i).length)}function Cs(i,n){if(Si(i))return i;if(Si(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?go(i.type):void 0;return r||(Ls(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function z1(i){return typeof i=="number"?i:i?Rs(i):ws}function go(i){return typeof i=="number"?xs(i):i||Float32Array}function P1(i,n){return{buffer:n.buffer,numValues:2*3*4,type:z1(n.type),arrayType:go(n.type)}}function _1(i,n){const r=n.data||n,p=go(n.type),G=r*p.BYTES_PER_ELEMENT,S=i.createBuffer();return i.bindBuffer(Xr,S),i.bufferData(Xr,G,n.drawType||Ts),{buffer:S,numValues:r,type:Rs(p),arrayType:p}}function Q1(i,n,r){const p=Cs(n,r);return{arrayType:p.constructor,buffer:Ys(i,p,void 0,n.drawType),type:bo(p),numValues:0}}function D1(i,n){const r={};return Object.keys(n).forEach(function(p){if(!Ls(p)){const G=n[p],S=G.attrib||G.name||G.attribName||Fs.attribPrefix+p;if(G.value){if(!Array.isArray(G.value)&&!Si(G.value))throw new Error("array.value is not array or typedarray");r[S]={value:G.value}}else{let H;G.buffer&&G.buffer instanceof WebGLBuffer?H=P1:typeof G=="number"||typeof G.data=="number"?H=_1:H=Q1;const{buffer:w,type:E,numValues:et,arrayType:ct}=H(i,G,p),dt=G.normalize!==void 0?G.normalize:B1(ct),Ft=O1(G,p,et);r[S]={buffer:w,numComponents:Ft,type:E,normalize:dt,stride:G.stride||0,offset:G.offset||0,divisor:G.divisor===void 0?void 0:G.divisor,drawType:G.drawType}}}}),i.bindBuffer(Xr,null),r}function $1(i,n){return n===C1||n===H1?1:n===N1||n===J1?2:n===E1||n===k1||n===ws?4:0}const Zo=["position","positions","a_position"];function q1(i,n){let r,p;for(p=0;p<Zo.length&&(r=Zo[p],!(r in n||(r=Fs.attribPrefix+r,r in n)));++p);p===Zo.length&&(r=Object.keys(n)[0]);const G=n[r];if(!G.buffer)return 1;i.bindBuffer(Xr,G.buffer);const S=i.getBufferParameter(Xr,L1);i.bindBuffer(Xr,null);const H=$1(i,G.type),w=S/H,E=G.numComponents||G.size,et=w/E;if(et%1!==0)throw new Error(`numComponents ${E} not correct for length ${length}`);return et}function tc(i,n,r){const p=D1(i,n),G=Object.assign({},r||{});G.attribs=Object.assign({},r?r.attribs:{},p);const S=n.indices;if(S){const H=Cs(S,"indices");G.indices=Ys(i,H,Y1),G.numElements=H.length,G.elementType=bo(H)}else G.numElements||(G.numElements=q1(i,G.attribs));return G}function Pr(i){return!!i.texStorage2D}const Hs=function(){const i={},n={};function r(p){const G=p.constructor.name;if(!i[G]){for(const S in p)if(typeof p[S]=="number"){const H=n[p[S]];n[p[S]]=H?`${H} | ${S}`:S}i[G]=!0}}return function(G,S){return r(G),n[S]||(typeof S=="number"?`0x${S.toString(16)}`:S)}}(),ar={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},_r=Si,Ns=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),Js=6406,er=6407,Gn=6408,Es=6409,ks=6410,Qr=6402,Us=34041,wi=33071,ec=9728,nc=9729,dr=3553,hr=34067,Wr=32879,Vr=35866,vo=34069,rc=34070,ic=34071,oc=34072,sc=34073,lc=34074,Go=10241,Xo=10240,Fi=10242,Yi=10243,Bs=32882,cc=33082,uc=33083,ac=33084,dc=33085,Wo=3317,As=3314,Ms=32878,Ks=3316,js=3315,Os=32877,hc=37443,fc=37441,mc=37440,pc=33321,bc=36756,yc=33325,gc=33326,Zc=33330,vc=33329,Gc=33338,Xc=33337,Wc=33340,Vc=33339,Rc=33323,xc=36757,Ic=33327,Sc=33328,Tc=33336,wc=33335,Fc=33332,Yc=33331,Lc=33334,Cc=33333,Hc=32849,Nc=35905,Jc=36194,Ec=36758,kc=35898,Uc=35901,Bc=34843,Ac=34837,Mc=36221,Kc=36239,jc=36215,Oc=36233,zc=36209,Pc=36227,_c=32856,Qc=35907,Dc=36759,$c=32855,qc=32854,tu=32857,eu=34842,nu=34836,ru=36220,iu=36238,ou=36975,su=36214,lu=36232,cu=36226,uu=36208,au=33189,du=33190,hu=36012,fu=36013,mu=35056,fr=5120,gn=5121,Li=5122,Cr=5123,Ci=5124,Rr=5125,Mn=5126,zs=32819,Ps=32820,_s=33635,qn=5131,Dr=36193,Vo=33640,pu=35899,bu=35902,yu=36269,gu=34042,Hi=33319,Hr=33320,Ni=6403,Nr=36244,Jr=36248,xr=36249;let Ro;function Ji(i){if(!Ro){const n={};n[Js]={textureFormat:Js,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Mn]},n[Es]={textureFormat:Es,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Mn]},n[ks]={textureFormat:ks,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,Dr,Mn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,Dr,Mn,_s]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,Dr,Mn,zs,Ps]},n[Qr]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Rr,Cr]},n[pc]={textureFormat:Ni,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[bc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[fr]},n[yc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,qn]},n[gc]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[Zc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[vc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[fr]},n[Fc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Cr]},n[Yc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Li]},n[Lc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Rr]},n[Cc]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ci]},n[Rc]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[xc]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[fr]},n[Ic]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,qn]},n[Sc]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[Tc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[wc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[fr]},n[Gc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Cr]},n[Xc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[Wc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Rr]},n[Vc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ci]},n[Hc]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Nc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Jc]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,_s]},n[Ec]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[fr]},n[kc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,pu]},n[Uc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,bu]},n[Bc]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,qn]},n[Ac]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[Mc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[Kc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[fr]},n[jc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Cr]},n[Oc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Li]},n[zc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Rr]},n[Pc]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ci]},n[_c]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Qc]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Dc]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[fr]},n[$c]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Ps,Vo]},n[qc]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,zs]},n[tu]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Vo]},n[eu]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,qn]},n[nu]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[ru]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[iu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[fr]},n[ou]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Vo]},n[su]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Cr]},n[lu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[cu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ci]},n[uu]={textureFormat:xr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Rr]},n[au]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Cr,Rr]},n[du]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Rr]},n[hu]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[mu]={textureFormat:Us,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gu]},n[fu]={textureFormat:Us,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yu]},Object.keys(n).forEach(function(r){const p=n[r];p.bytesPerElementMap={},p.bytesPerElement.forEach(function(G,S){const H=p.type[S];p.bytesPerElementMap[H]=G})}),Ro=n}return Ro[i]}function Zu(i,n){const r=Ji(i);if(!r)throw"unknown internal format";const p=r.bytesPerElementMap[n];if(p===void 0)throw"unknown internal format";return p}function $r(i){const n=Ji(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function Qs(i){return(i&i-1)===0}function vu(i,n,r,p){if(!Pr(i))return Qs(n)&&Qs(r);const G=Ji(p);if(!G)throw"unknown internal format";return G.colorRenderable&&G.textureFilterable}function Gu(i){const n=Ji(i);if(!n)throw"unknown internal format";return n.textureFilterable}function Xu(i,n,r){return _r(n)?bo(n):r||gn}function Ei(i,n,r,p,G){if(G%1!==0)throw"can't guess dimensions";if(!r&&!p){const S=Math.sqrt(G/(n===hr?6:1));S%1===0?(r=S,p=S):(r=G,p=1)}else if(p){if(!r&&(r=G/p,r%1))throw"can't guess dimensions"}else if(p=G/r,p%1)throw"can't guess dimensions";return{width:r,height:p}}function Er(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(hc,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(fc,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(mc,n.flipY)}function Ds(i){i.pixelStorei(Wo,4),Pr(i)&&(i.pixelStorei(As,0),i.pixelStorei(Ms,0),i.pixelStorei(Ks,0),i.pixelStorei(js,0),i.pixelStorei(Os,0))}function Wu(i,n,r,p){p.minMag&&(r.call(i,n,Go,p.minMag),r.call(i,n,Xo,p.minMag)),p.min&&r.call(i,n,Go,p.min),p.mag&&r.call(i,n,Xo,p.mag),p.wrap&&(r.call(i,n,Fi,p.wrap),r.call(i,n,Yi,p.wrap),(n===Wr||F1(i,n))&&r.call(i,n,Bs,p.wrap)),p.wrapR&&r.call(i,n,Bs,p.wrapR),p.wrapS&&r.call(i,n,Fi,p.wrapS),p.wrapT&&r.call(i,n,Yi,p.wrapT),p.minLod&&r.call(i,n,cc,p.minLod),p.maxLod&&r.call(i,n,uc,p.maxLod),p.baseLevel&&r.call(i,n,ac,p.baseLevel),p.maxLevel&&r.call(i,n,dc,p.maxLevel)}function $s(i,n,r){const p=r.target||dr;i.bindTexture(p,n),Wu(i,p,i.texParameteri,r)}function Vu(i){return i=i||ar.textureColor,_r(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function xo(i,n,r,p,G,S){r=r||ar.textureOptions,S=S||Gn;const H=r.target||dr;if(p=p||r.width,G=G||r.height,i.bindTexture(H,n),vu(i,p,G,S))i.generateMipmap(H);else{const w=Gu(S)?nc:ec;i.texParameteri(H,Go,w),i.texParameteri(H,Xo,w),i.texParameteri(H,Fi,wi),i.texParameteri(H,Yi,wi)}}function qr(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Io(i,n){return n=n||{},n.cubeFaceOrder||[vo,rc,ic,oc,sc,lc]}function So(i,n){const p=Io(i,n).map(function(G,S){return{face:G,ndx:S}});return p.sort(function(G,S){return G.face-S.face}),p}function qs(i,n,r,p){p=p||ar.textureOptions;const G=p.target||dr,S=p.level||0;let H=r.width,w=r.height;const E=p.internalFormat||p.format||Gn,et=$r(E),ct=p.format||et.format,dt=p.type||et.type;if(Er(i,p),i.bindTexture(G,n),G===hr){const Ft=r.width,Lt=r.height;let at,pt;if(Ft/6===Lt)at=Lt,pt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Ft)at=Ft,pt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Ft/3===Lt/2)at=Ft/3,pt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Ft/2===Lt/3)at=Ft/2,pt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Mt=Ns();Mt?(Mt.canvas.width=at,Mt.canvas.height=at,H=at,w=at,So(i,p).forEach(function(Jt){const qt=pt[Jt.ndx*2+0]*at,P=pt[Jt.ndx*2+1]*at;Mt.drawImage(r,qt,P,at,at,0,0,at,at),i.texImage2D(Jt.face,S,E,ct,dt,Mt.canvas)}),Mt.canvas.width=1,Mt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,w=at,So(i,p).forEach(function(Jt){const qt=pt[Jt.ndx*2+0]*at,P=pt[Jt.ndx*2+1]*at;i.texImage2D(Jt.face,S,E,at,at,0,ct,dt,null),createImageBitmap(r,qt,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(De){Er(i,p),i.bindTexture(G,n),i.texImage2D(Jt.face,S,E,ct,dt,De),qr(p)&&xo(i,n,p,H,w,E)})}))}else if(G===Wr||G===Vr){const Ft=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Ft;if(at%1!==0)throw"can not compute 3D dimensions of element";const pt=r.width===Lt?1:0,Mt=r.height===Lt?1:0;i.pixelStorei(Wo,1),i.pixelStorei(As,r.width),i.pixelStorei(Ms,0),i.pixelStorei(Os,0),i.texImage3D(G,S,E,Ft,Ft,Ft,0,ct,dt,null);for(let Jt=0;Jt<at;++Jt){const qt=Jt*Ft*pt,P=Jt*Ft*Mt;i.pixelStorei(Ks,qt),i.pixelStorei(js,P),i.texSubImage3D(G,S,0,0,Jt,Ft,Ft,1,ct,dt,r)}Ds(i)}else i.texImage2D(G,S,E,ct,dt,r);qr(p)&&xo(i,n,p,H,w,E),$s(i,n,p)}function ti(){}function Ru(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function xu(i,n){return n===void 0&&!Ru(i)?"anonymous":n}function Iu(i,n,r){r=r||ti;let p;if(n=n!==void 0?n:ar.crossOrigin,n=xu(i,n),typeof Image<"u"){p=new Image,n!==void 0&&(p.crossOrigin=n);const G=function(){p.removeEventListener("error",S),p.removeEventListener("load",H),p=null},S=function(){const E="couldn't load image: "+i;Is(E),r(E,p),G()},H=function(){r(null,p),G()};return p.addEventListener("error",S),p.addEventListener("load",H),p.src=i,p}else if(typeof ImageBitmap<"u"){let G,S;const H=function(){r(G,S)},w={};n&&(w.mode="cors"),fetch(i,w).then(function(E){if(!E.ok)throw E;return E.blob()}).then(function(E){return createImageBitmap(E,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(E){S=E,setTimeout(H)}).catch(function(E){G=E,setTimeout(H)}),p=null}return p}function tl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function To(i,n,r){return tl(i)?(setTimeout(function(){r(null,i)}),i):Iu(i,n,r)}function wo(i,n,r){r=r||ar.textureOptions;const p=r.target||dr;if(i.bindTexture(p,n),r.color===!1)return;const G=Vu(r.color);if(p===hr)for(let S=0;S<6;++S)i.texImage2D(vo+S,0,Gn,1,1,0,Gn,gn,G);else p===Wr||p===Vr?i.texImage3D(p,0,Gn,1,1,1,0,Gn,gn,G):i.texImage2D(p,0,Gn,1,1,0,Gn,gn,G)}function Su(i,n,r,p){return p=p||ti,r=r||ar.textureOptions,wo(i,n,r),r=Object.assign({},r),To(r.src,r.crossOrigin,function(S,H){S?p(S,n,H):(qs(i,n,H,r),p(null,n,H))})}function Tu(i,n,r,p){p=p||ti;const G=r.src;if(G.length!==6)throw"there must be 6 urls for a cubemap";const S=r.level||0,H=r.internalFormat||r.format||Gn,w=$r(H),E=r.format||w.format,et=r.type||gn,ct=r.target||dr;if(ct!==hr)throw"target must be TEXTURE_CUBE_MAP";wo(i,n,r),r=Object.assign({},r);let dt=6;const Ft=[],Lt=Io(i,r);let at;function pt(Mt){return function(Jt,qt){--dt,Jt?Ft.push(Jt):qt.width!==qt.height?Ft.push("cubemap face img is not a square: "+qt.src):(Er(i,r),i.bindTexture(ct,n),dt===5?Io().forEach(function(P){i.texImage2D(P,S,H,E,et,qt)}):i.texImage2D(Mt,S,H,E,et,qt),qr(r)&&i.generateMipmap(ct)),dt===0&&p(Ft.length?Ft:void 0,n,at)}}at=G.map(function(Mt,Jt){return To(Mt,r.crossOrigin,pt(Lt[Jt]))})}function wu(i,n,r,p){p=p||ti;const G=r.src,S=r.internalFormat||r.format||Gn,H=$r(S),w=r.format||H.format,E=r.type||gn,et=r.target||Vr;if(et!==Wr&&et!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";wo(i,n,r),r=Object.assign({},r);let ct=G.length;const dt=[];let Ft;const Lt=r.level||0;let at=r.width,pt=r.height;const Mt=G.length;let Jt=!0;function qt(P){return function(De,an){if(--ct,De)dt.push(De);else{if(Er(i,r),i.bindTexture(et,n),Jt){Jt=!1,at=r.width||an.width,pt=r.height||an.height,i.texImage3D(et,Lt,S,at,pt,Mt,0,w,E,null);for(let Ve=0;Ve<Mt;++Ve)i.texSubImage3D(et,Lt,0,0,Ve,at,pt,1,w,E,an)}else{let Ve=an,Dt;(an.width!==at||an.height!==pt)&&(Dt=Ns(),Ve=Dt.canvas,Dt.canvas.width=at,Dt.canvas.height=pt,Dt.drawImage(an,0,0,at,pt)),i.texSubImage3D(et,Lt,0,0,P,at,pt,1,w,E,Ve),Dt&&Ve===Dt.canvas&&(Dt.canvas.width=0,Dt.canvas.height=0)}qr(r)&&i.generateMipmap(et)}ct===0&&p(dt.length?dt:void 0,n,Ft)}}Ft=G.map(function(P,De){return To(P,r.crossOrigin,qt(De))})}function Fu(i,n,r,p){p=p||ar.textureOptions;const G=p.target||dr;i.bindTexture(G,n);let S=p.width,H=p.height,w=p.depth;const E=p.level||0,et=p.internalFormat||p.format||Gn,ct=$r(et),dt=p.format||ct.format,Ft=p.type||Xu(i,r,ct.type);if(_r(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Mt=xs(Ft);r=new Mt(r)}const Lt=Zu(et,Ft),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+Hs(i,dt);let pt;if(G===Wr||G===Vr)if(!S&&!H&&!w){const Mt=Math.cbrt(at);if(Mt%1!==0)throw"can't guess cube size of array of numElements: "+at;S=Mt,H=Mt,w=Mt}else S&&(!H||!w)?(pt=Ei(i,G,H,w,at/S),H=pt.width,w=pt.height):H&&(!S||!w)?(pt=Ei(i,G,S,w,at/H),S=pt.width,w=pt.height):(pt=Ei(i,G,S,H,at/w),S=pt.width,H=pt.height);else pt=Ei(i,G,S,H,at),S=pt.width,H=pt.height;if(Ds(i),i.pixelStorei(Wo,p.unpackAlignment||1),Er(i,p),G===hr){const Mt=Lt/r.BYTES_PER_ELEMENT,Jt=at/6*Mt;So(i,p).forEach(qt=>{const P=Jt*qt.ndx,De=r.subarray(P,P+Jt);i.texImage2D(qt.face,E,et,S,H,0,dt,Ft,De)})}else G===Wr||G===Vr?i.texImage3D(G,E,et,S,H,w,0,dt,Ft,r):i.texImage2D(G,E,et,S,H,0,dt,Ft,r);return{width:S,height:H,depth:w,type:Ft}}function Yu(i,n,r){const p=r.target||dr;i.bindTexture(p,n);const G=r.level||0,S=r.internalFormat||r.format||Gn,H=$r(S),w=r.format||H.format,E=r.type||H.type;if(Er(i,r),p===hr)for(let et=0;et<6;++et)i.texImage2D(vo+et,G,S,r.width,r.height,0,w,E,null);else p===Wr||p===Vr?i.texImage3D(p,G,S,r.width,r.height,r.depth,0,w,E,null):i.texImage2D(p,G,S,r.width,r.height,0,w,E,null)}function el(i,n,r){r=r||ti,n=n||ar.textureOptions;const p=i.createTexture(),G=n.target||dr;let S=n.width||1,H=n.height||1;const w=n.internalFormat||Gn;i.bindTexture(G,p),G===hr&&(i.texParameteri(G,Fi,wi),i.texParameteri(G,Yi,wi));let E=n.src;if(E)if(typeof E=="function"&&(E=E(i,n)),typeof E=="string")Su(i,p,n,r);else if(_r(E)||Array.isArray(E)&&(typeof E[0]=="number"||Array.isArray(E[0])||_r(E[0]))){const et=Fu(i,p,E,n);S=et.width,H=et.height}else Array.isArray(E)&&(typeof E[0]=="string"||tl(E[0]))?G===hr?Tu(i,p,n,r):wu(i,p,n,r):(qs(i,p,E,n),S=E.width,H=E.height);else Yu(i,p,n);return qr(n)&&xo(i,p,n,S,H,w),$s(i,p,n),p}const Fo=Is;function nl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const ki=33984,Ui=34962,Lu=34963,Cu=35713,Hu=35714,Nu=35632,Ju=35633,Eu=35981,rl=35718,ku=35721,Uu=35971,Bu=35382,Au=35396,Mu=35398,Ku=35392,ju=35395,Bi=5126,il=35664,ol=35665,sl=35666,Yo=5124,ll=35667,cl=35668,ul=35669,al=35670,dl=35671,hl=35672,fl=35673,ml=35674,pl=35675,bl=35676,Ou=35678,zu=35680,Pu=35679,_u=35682,Qu=35685,Du=35686,$u=35687,qu=35688,ta=35689,ea=35690,na=36289,ra=36292,ia=36293,Lo=5125,yl=36294,gl=36295,Zl=36296,oa=36298,sa=36299,la=36300,ca=36303,ua=36306,aa=36307,da=36308,ha=36311,Ai=3553,Mi=34067,Co=32879,Ki=35866,be={};function vl(i,n){return be[n].bindPoint}function fa(i,n){return function(r){i.uniform1f(n,r)}}function ma(i,n){return function(r){i.uniform1fv(n,r)}}function pa(i,n){return function(r){i.uniform2fv(n,r)}}function ba(i,n){return function(r){i.uniform3fv(n,r)}}function ya(i,n){return function(r){i.uniform4fv(n,r)}}function Gl(i,n){return function(r){i.uniform1i(n,r)}}function Xl(i,n){return function(r){i.uniform1iv(n,r)}}function Wl(i,n){return function(r){i.uniform2iv(n,r)}}function Vl(i,n){return function(r){i.uniform3iv(n,r)}}function Rl(i,n){return function(r){i.uniform4iv(n,r)}}function ga(i,n){return function(r){i.uniform1ui(n,r)}}function Za(i,n){return function(r){i.uniform1uiv(n,r)}}function va(i,n){return function(r){i.uniform2uiv(n,r)}}function Ga(i,n){return function(r){i.uniform3uiv(n,r)}}function Xa(i,n){return function(r){i.uniform4uiv(n,r)}}function Wa(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function Va(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function Ra(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function xa(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function Ia(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function Sa(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function Ta(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function wa(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function Fa(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function zn(i,n,r,p){const G=vl(i,n);return Pr(i)?function(S){let H,w;!S||yo(i,S)?(H=S,w=null):(H=S.texture,w=S.sampler),i.uniform1i(p,r),i.activeTexture(ki+r),i.bindTexture(G,H),i.bindSampler(r,w)}:function(S){i.uniform1i(p,r),i.activeTexture(ki+r),i.bindTexture(G,S)}}function Pn(i,n,r,p,G){const S=vl(i,n),H=new Int32Array(G);for(let w=0;w<G;++w)H[w]=r+w;return Pr(i)?function(w){i.uniform1iv(p,H),w.forEach(function(E,et){i.activeTexture(ki+H[et]);let ct,dt;yo(i,E)?(ct=E,dt=null):(ct=E.texture,dt=E.sampler),i.bindSampler(r,dt),i.bindTexture(S,ct)})}:function(w){i.uniform1iv(p,H),w.forEach(function(E,et){i.activeTexture(ki+H[et]),i.bindTexture(S,E)})}}be[Bi]={Type:Float32Array,size:4,setter:fa,arraySetter:ma},be[il]={Type:Float32Array,size:8,setter:pa,cols:2},be[ol]={Type:Float32Array,size:12,setter:ba,cols:3},be[sl]={Type:Float32Array,size:16,setter:ya,cols:4},be[Yo]={Type:Int32Array,size:4,setter:Gl,arraySetter:Xl},be[ll]={Type:Int32Array,size:8,setter:Wl,cols:2},be[cl]={Type:Int32Array,size:12,setter:Vl,cols:3},be[ul]={Type:Int32Array,size:16,setter:Rl,cols:4},be[Lo]={Type:Uint32Array,size:4,setter:ga,arraySetter:Za},be[yl]={Type:Uint32Array,size:8,setter:va,cols:2},be[gl]={Type:Uint32Array,size:12,setter:Ga,cols:3},be[Zl]={Type:Uint32Array,size:16,setter:Xa,cols:4},be[al]={Type:Uint32Array,size:4,setter:Gl,arraySetter:Xl},be[dl]={Type:Uint32Array,size:8,setter:Wl,cols:2},be[hl]={Type:Uint32Array,size:12,setter:Vl,cols:3},be[fl]={Type:Uint32Array,size:16,setter:Rl,cols:4},be[ml]={Type:Float32Array,size:32,setter:Wa,rows:2,cols:2},be[pl]={Type:Float32Array,size:48,setter:Va,rows:3,cols:3},be[bl]={Type:Float32Array,size:64,setter:Ra,rows:4,cols:4},be[Qu]={Type:Float32Array,size:32,setter:xa,rows:2,cols:3},be[Du]={Type:Float32Array,size:32,setter:Sa,rows:2,cols:4},be[$u]={Type:Float32Array,size:48,setter:Ia,rows:3,cols:2},be[qu]={Type:Float32Array,size:48,setter:wa,rows:3,cols:4},be[ta]={Type:Float32Array,size:64,setter:Ta,rows:4,cols:2},be[ea]={Type:Float32Array,size:64,setter:Fa,rows:4,cols:3},be[Ou]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[zu]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[Pu]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[_u]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[na]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ra]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ia]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[oa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[sa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[la]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[ca]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},be[ua]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ai},be[aa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Co},be[da]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},be[ha]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki};function ji(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||Bi,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function mr(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Yo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function Oi(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Lo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function Ho(i,n,r){const p=r.size,G=r.count;return function(S){i.bindBuffer(Ui,S.buffer);const H=S.size||S.numComponents||p,w=H/G,E=S.type||Bi,ct=be[E].size*H,dt=S.normalize||!1,Ft=S.offset||0,Lt=ct/G;for(let at=0;at<G;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,w,E,dt,ct,Ft+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,S.divisor||0)}}const Yn={};Yn[Bi]={size:4,setter:ji},Yn[il]={size:8,setter:ji},Yn[ol]={size:12,setter:ji},Yn[sl]={size:16,setter:ji},Yn[Yo]={size:4,setter:mr},Yn[ll]={size:8,setter:mr},Yn[cl]={size:12,setter:mr},Yn[ul]={size:16,setter:mr},Yn[Lo]={size:4,setter:Oi},Yn[yl]={size:8,setter:Oi},Yn[gl]={size:12,setter:Oi},Yn[Zl]={size:16,setter:Oi},Yn[al]={size:4,setter:mr},Yn[dl]={size:8,setter:mr},Yn[hl]={size:12,setter:mr},Yn[fl]={size:16,setter:mr},Yn[ml]={size:4,setter:Ho,count:2},Yn[pl]={size:9,setter:Ho,count:3},Yn[bl]={size:16,setter:Ho,count:4};const Ya=/ERROR:\s*\d+:(\d+)/gi;function La(i,n="",r=0){const p=[...n.matchAll(Ya)],G=new Map(p.map((S,H)=>{const w=parseInt(S[1]),E=p[H+1],et=E?E.index:n.length,ct=n.substring(S.index,et);return[w-1,ct]}));return i.split(`
125
- `).map((S,H)=>{const w=G.get(H);return`${H+1+r}: ${S}${w?`
124
+ see: http://github.com/greggman/twgl.js for details */const fo=5120,Or=5121,mo=5122,po=5123,bo=5124,yo=5125,go=5126,Sc=32819,wc=32820,Yc=33635,Tc=5131,Fc=33640,Lc=35899,Cc=35902,Hc=36269,Nc=34042,xs={};{const i=xs;i[fo]=Int8Array,i[Or]=Uint8Array,i[mo]=Int16Array,i[po]=Uint16Array,i[bo]=Int32Array,i[yo]=Uint32Array,i[go]=Float32Array,i[Sc]=Uint16Array,i[wc]=Uint16Array,i[Yc]=Uint16Array,i[Tc]=Uint16Array,i[Fc]=Uint32Array,i[Lc]=Uint32Array,i[Cc]=Uint32Array,i[Hc]=Uint32Array,i[Nc]=Uint32Array}function Zo(i){if(i instanceof Int8Array)return fo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return Or;if(i instanceof Int16Array)return mo;if(i instanceof Uint16Array)return po;if(i instanceof Int32Array)return bo;if(i instanceof Uint32Array)return yo;if(i instanceof Float32Array)return go;throw new Error("unsupported typed array type")}function Is(i){if(i===Int8Array)return fo;if(i===Uint8Array||i===Uint8ClampedArray)return Or;if(i===Int16Array)return mo;if(i===Uint16Array)return po;if(i===Int32Array)return bo;if(i===Uint32Array)return yo;if(i===Float32Array)return go;throw new Error("unsupported typed array type")}function Ss(i){const n=xs[i];if(!n)throw new Error("unknown gl type");return n}const Ii=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function ws(...i){console.error(...i)}const Ys=new Map;function Si(i,n){if(!i||typeof i!="object")return!1;let r=Ys.get(n);r||(r=new WeakMap,Ys.set(n,r));let m=r.get(i);if(m===void 0){const X=Object.prototype.toString.call(i);m=X.substring(8,X.length-1)===n,r.set(i,m)}return m}function Jc(i,n){return typeof WebGLBuffer<"u"&&Si(n,"WebGLBuffer")}function kc(i,n){return typeof WebGLRenderbuffer<"u"&&Si(n,"WebGLRenderbuffer")}function vo(i,n){return typeof WebGLTexture<"u"&&Si(n,"WebGLTexture")}function Uc(i,n){return typeof WebGLSampler<"u"&&Si(n,"WebGLSampler")}const Ts=35044,vr=34962,Ec=34963,Bc=34660,Mc=5120,Ac=5121,Kc=5122,jc=5123,zc=5124,Oc=5125,Fs=5126,Ls={attribPrefix:""};function Pc(i,n,r,m,X){i.bindBuffer(n,r),i.bufferData(n,m,X||Ts)}function Cs(i,n,r,m){if(Jc(i,n))return n;r=r||vr;const X=i.createBuffer();return Pc(i,r,X,n,m),X}function Hs(i){return i==="indices"}function _c(i){return i===Int8Array||i===Uint8Array}function Qc(i){return i.length?i:i.data}const Dc=/coord|texture/i,$c=/color|colour/i;function qc(i,n){let r;if(Dc.test(i)?r=2:$c.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function tu(i,n,r){return i.numComponents||i.size||qc(n,r||Qc(i).length)}function Ns(i,n){if(Ii(i))return i;if(Ii(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?Go(i.type):void 0;return r||(Hs(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function eu(i){return typeof i=="number"?i:i?Is(i):Fs}function Go(i){return typeof i=="number"?Ss(i):i||Float32Array}function nu(i,n){return{buffer:n.buffer,numValues:2*3*4,type:eu(n.type),arrayType:Go(n.type)}}function ru(i,n){const r=n.data||n,m=Go(n.type),X=r*m.BYTES_PER_ELEMENT,S=i.createBuffer();return i.bindBuffer(vr,S),i.bufferData(vr,X,n.drawType||Ts),{buffer:S,numValues:r,type:Is(m),arrayType:m}}function iu(i,n,r){const m=Ns(n,r);return{arrayType:m.constructor,buffer:Cs(i,m,void 0,n.drawType),type:Zo(m),numValues:0}}function ou(i,n){const r={};return Object.keys(n).forEach(function(m){if(!Hs(m)){const X=n[m],S=X.attrib||X.name||X.attribName||Ls.attribPrefix+m;if(X.value){if(!Array.isArray(X.value)&&!Ii(X.value))throw new Error("array.value is not array or typedarray");r[S]={value:X.value}}else{let H;X.buffer&&X.buffer instanceof WebGLBuffer?H=nu:typeof X=="number"||typeof X.data=="number"?H=ru:H=iu;const{buffer:T,type:B,numValues:nt,arrayType:ut}=H(i,X,m),pt=X.normalize!==void 0?X.normalize:_c(ut),Tt=tu(X,m,nt);r[S]={buffer:T,numComponents:Tt,type:B,normalize:pt,stride:X.stride||0,offset:X.offset||0,divisor:X.divisor===void 0?void 0:X.divisor,drawType:X.drawType}}}}),i.bindBuffer(vr,null),r}function su(i,n){return n===Mc||n===Ac?1:n===Kc||n===jc?2:n===zc||n===Oc||n===Fs?4:0}const Xo=["position","positions","a_position"];function lu(i,n){let r,m;for(m=0;m<Xo.length&&(r=Xo[m],!(r in n||(r=Ls.attribPrefix+r,r in n)));++m);m===Xo.length&&(r=Object.keys(n)[0]);const X=n[r];if(!X.buffer)return 1;i.bindBuffer(vr,X.buffer);const S=i.getBufferParameter(vr,Bc);i.bindBuffer(vr,null);const H=su(i,X.type),T=S/H,B=X.numComponents||X.size,nt=T/B;if(nt%1!==0)throw new Error(`numComponents ${B} not correct for length ${length}`);return nt}function cu(i,n,r){const m=ou(i,n),X=Object.assign({},r||{});X.attribs=Object.assign({},r?r.attribs:{},m);const S=n.indices;if(S){const H=Ns(S,"indices");X.indices=Cs(i,H,Ec),X.numElements=H.length,X.elementType=Zo(H)}else X.numElements||(X.numElements=lu(i,X.attribs));return X}function Pr(i){return!!i.texStorage2D}const Js=function(){const i={},n={};function r(m){const X=m.constructor.name;if(!i[X]){for(const S in m)if(typeof m[S]=="number"){const H=n[m[S]];n[m[S]]=H?`${H} | ${S}`:S}i[X]=!0}}return function(X,S){return r(X),n[S]||(typeof S=="number"?`0x${S.toString(16)}`:S)}}(),cr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},_r=Ii,ks=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),Us=6406,er=6407,Gn=6408,Es=6409,Bs=6410,Qr=6402,Ms=34041,wi=33071,uu=9728,au=9729,ur=3553,ar=34067,Gr=32879,Xr=35866,Wo=34069,du=34070,hu=34071,fu=34072,mu=34073,pu=34074,Vo=10241,Ro=10240,Yi=10242,Ti=10243,As=32882,bu=33082,yu=33083,gu=33084,Zu=33085,xo=3317,Ks=3314,js=32878,zs=3316,Os=3315,Ps=32877,vu=37443,Gu=37441,Xu=37440,Wu=33321,Vu=36756,Ru=33325,xu=33326,Iu=33330,Su=33329,wu=33338,Yu=33337,Tu=33340,Fu=33339,Lu=33323,Cu=36757,Hu=33327,Nu=33328,Ju=33336,ku=33335,Uu=33332,Eu=33331,Bu=33334,Mu=33333,Au=32849,Ku=35905,ju=36194,zu=36758,Ou=35898,Pu=35901,_u=34843,Qu=34837,Du=36221,$u=36239,qu=36215,t1=36233,e1=36209,n1=36227,r1=32856,i1=35907,o1=36759,s1=32855,l1=32854,c1=32857,u1=34842,a1=34836,d1=36220,h1=36238,f1=36975,m1=36214,p1=36232,b1=36226,y1=36208,g1=33189,Z1=33190,v1=36012,G1=36013,X1=35056,dr=5120,gn=5121,Fi=5122,Tr=5123,Li=5124,Wr=5125,Kn=5126,_s=32819,Qs=32820,Ds=33635,qn=5131,Dr=36193,Io=33640,W1=35899,V1=35902,R1=36269,x1=34042,Ci=33319,Fr=33320,Hi=6403,Lr=36244,Cr=36248,Vr=36249;let So;function Ni(i){if(!So){const n={};n[Us]={textureFormat:Us,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Kn]},n[Es]={textureFormat:Es,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,Dr,Kn]},n[Bs]={textureFormat:Bs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,Dr,Kn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,Dr,Kn,Ds]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,Dr,Kn,_s,Qs]},n[Qr]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Tr]},n[Wu]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[Vu]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[dr]},n[Ru]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Kn,qn]},n[xu]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Kn]},n[Iu]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[Su]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[dr]},n[Uu]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Tr]},n[Eu]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Fi]},n[Bu]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[Mu]={textureFormat:Lr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[Lu]={textureFormat:Ci,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[Cu]={textureFormat:Ci,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[dr]},n[Hu]={textureFormat:Ci,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Kn,qn]},n[Nu]={textureFormat:Ci,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Kn]},n[Ju]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[ku]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[dr]},n[wu]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[Yu]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Fi]},n[Tu]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},n[Fu]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[Au]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[Ku]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[ju]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Ds]},n[zu]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[dr]},n[Ou]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Kn,qn,W1]},n[Pu]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Kn,qn,V1]},n[_u]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Kn,qn]},n[Qu]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Kn]},n[Du]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[$u]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[dr]},n[qu]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Tr]},n[t1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Fi]},n[e1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Wr]},n[n1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Li]},n[r1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[i1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[o1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[dr]},n[s1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Qs,Io]},n[l1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,_s]},n[c1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Io]},n[u1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Kn,qn]},n[a1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Kn]},n[d1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[h1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[dr]},n[f1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Io]},n[m1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},n[p1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Fi]},n[b1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Li]},n[y1]={textureFormat:Vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Wr]},n[g1]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,Wr]},n[Z1]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[v1]={textureFormat:Qr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Kn]},n[X1]={textureFormat:Ms,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[x1]},n[G1]={textureFormat:Ms,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[R1]},Object.keys(n).forEach(function(r){const m=n[r];m.bytesPerElementMap={},m.bytesPerElement.forEach(function(X,S){const H=m.type[S];m.bytesPerElementMap[H]=X})}),So=n}return So[i]}function I1(i,n){const r=Ni(i);if(!r)throw"unknown internal format";const m=r.bytesPerElementMap[n];if(m===void 0)throw"unknown internal format";return m}function $r(i){const n=Ni(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function $s(i){return(i&i-1)===0}function S1(i,n,r,m){if(!Pr(i))return $s(n)&&$s(r);const X=Ni(m);if(!X)throw"unknown internal format";return X.colorRenderable&&X.textureFilterable}function w1(i){const n=Ni(i);if(!n)throw"unknown internal format";return n.textureFilterable}function Y1(i,n,r){return _r(n)?Zo(n):r||gn}function Ji(i,n,r,m,X){if(X%1!==0)throw"can't guess dimensions";if(!r&&!m){const S=Math.sqrt(X/(n===ar?6:1));S%1===0?(r=S,m=S):(r=X,m=1)}else if(m){if(!r&&(r=X/m,r%1))throw"can't guess dimensions"}else if(m=X/r,m%1)throw"can't guess dimensions";return{width:r,height:m}}function Hr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(vu,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(Gu,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(Xu,n.flipY)}function qs(i){i.pixelStorei(xo,4),Pr(i)&&(i.pixelStorei(Ks,0),i.pixelStorei(js,0),i.pixelStorei(zs,0),i.pixelStorei(Os,0),i.pixelStorei(Ps,0))}function T1(i,n,r,m){m.minMag&&(r.call(i,n,Vo,m.minMag),r.call(i,n,Ro,m.minMag)),m.min&&r.call(i,n,Vo,m.min),m.mag&&r.call(i,n,Ro,m.mag),m.wrap&&(r.call(i,n,Yi,m.wrap),r.call(i,n,Ti,m.wrap),(n===Gr||Uc(i,n))&&r.call(i,n,As,m.wrap)),m.wrapR&&r.call(i,n,As,m.wrapR),m.wrapS&&r.call(i,n,Yi,m.wrapS),m.wrapT&&r.call(i,n,Ti,m.wrapT),m.minLod&&r.call(i,n,bu,m.minLod),m.maxLod&&r.call(i,n,yu,m.maxLod),m.baseLevel&&r.call(i,n,gu,m.baseLevel),m.maxLevel&&r.call(i,n,Zu,m.maxLevel)}function tl(i,n,r){const m=r.target||ur;i.bindTexture(m,n),T1(i,m,i.texParameteri,r)}function F1(i){return i=i||cr.textureColor,_r(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function wo(i,n,r,m,X,S){r=r||cr.textureOptions,S=S||Gn;const H=r.target||ur;if(m=m||r.width,X=X||r.height,i.bindTexture(H,n),S1(i,m,X,S))i.generateMipmap(H);else{const T=w1(S)?au:uu;i.texParameteri(H,Vo,T),i.texParameteri(H,Ro,T),i.texParameteri(H,Yi,wi),i.texParameteri(H,Ti,wi)}}function qr(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Yo(i,n){return n=n||{},n.cubeFaceOrder||[Wo,du,hu,fu,mu,pu]}function To(i,n){const m=Yo(i,n).map(function(X,S){return{face:X,ndx:S}});return m.sort(function(X,S){return X.face-S.face}),m}function el(i,n,r,m){m=m||cr.textureOptions;const X=m.target||ur,S=m.level||0;let H=r.width,T=r.height;const B=m.internalFormat||m.format||Gn,nt=$r(B),ut=m.format||nt.format,pt=m.type||nt.type;if(Hr(i,m),i.bindTexture(X,n),X===ar){const Tt=r.width,Lt=r.height;let at,mt;if(Tt/6===Lt)at=Lt,mt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Tt)at=Tt,mt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Tt/3===Lt/2)at=Tt/3,mt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Tt/2===Lt/3)at=Tt/2,mt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=ks();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,H=at,T=at,To(i,m).forEach(function(kt){const ee=mt[kt.ndx*2+0]*at,P=mt[kt.ndx*2+1]*at;Bt.drawImage(r,ee,P,at,at,0,0,at,at),i.texImage2D(kt.face,S,B,ut,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,T=at,To(i,m).forEach(function(kt){const ee=mt[kt.ndx*2+0]*at,P=mt[kt.ndx*2+1]*at;i.texImage2D(kt.face,S,B,at,at,0,ut,pt,null),createImageBitmap(r,ee,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function($e){Hr(i,m),i.bindTexture(X,n),i.texImage2D(kt.face,S,B,ut,pt,$e),qr(m)&&wo(i,n,m,H,T,B)})}))}else if(X===Gr||X===Xr){const Tt=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Tt;if(at%1!==0)throw"can not compute 3D dimensions of element";const mt=r.width===Lt?1:0,Bt=r.height===Lt?1:0;i.pixelStorei(xo,1),i.pixelStorei(Ks,r.width),i.pixelStorei(js,0),i.pixelStorei(Ps,0),i.texImage3D(X,S,B,Tt,Tt,Tt,0,ut,pt,null);for(let kt=0;kt<at;++kt){const ee=kt*Tt*mt,P=kt*Tt*Bt;i.pixelStorei(zs,ee),i.pixelStorei(Os,P),i.texSubImage3D(X,S,0,0,kt,Tt,Tt,1,ut,pt,r)}qs(i)}else i.texImage2D(X,S,B,ut,pt,r);qr(m)&&wo(i,n,m,H,T,B),tl(i,n,m)}function ti(){}function L1(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function C1(i,n){return n===void 0&&!L1(i)?"anonymous":n}function H1(i,n,r){r=r||ti;let m;if(n=n!==void 0?n:cr.crossOrigin,n=C1(i,n),typeof Image<"u"){m=new Image,n!==void 0&&(m.crossOrigin=n);const X=function(){m.removeEventListener("error",S),m.removeEventListener("load",H),m=null},S=function(){const B="couldn't load image: "+i;ws(B),r(B,m),X()},H=function(){r(null,m),X()};return m.addEventListener("error",S),m.addEventListener("load",H),m.src=i,m}else if(typeof ImageBitmap<"u"){let X,S;const H=function(){r(X,S)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(B){if(!B.ok)throw B;return B.blob()}).then(function(B){return createImageBitmap(B,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(B){S=B,setTimeout(H)}).catch(function(B){X=B,setTimeout(H)}),m=null}return m}function nl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function Fo(i,n,r){return nl(i)?(setTimeout(function(){r(null,i)}),i):H1(i,n,r)}function Lo(i,n,r){r=r||cr.textureOptions;const m=r.target||ur;if(i.bindTexture(m,n),r.color===!1)return;const X=F1(r.color);if(m===ar)for(let S=0;S<6;++S)i.texImage2D(Wo+S,0,Gn,1,1,0,Gn,gn,X);else m===Gr||m===Xr?i.texImage3D(m,0,Gn,1,1,1,0,Gn,gn,X):i.texImage2D(m,0,Gn,1,1,0,Gn,gn,X)}function N1(i,n,r,m){return m=m||ti,r=r||cr.textureOptions,Lo(i,n,r),r=Object.assign({},r),Fo(r.src,r.crossOrigin,function(S,H){S?m(S,n,H):(el(i,n,H,r),m(null,n,H))})}function J1(i,n,r,m){m=m||ti;const X=r.src;if(X.length!==6)throw"there must be 6 urls for a cubemap";const S=r.level||0,H=r.internalFormat||r.format||Gn,T=$r(H),B=r.format||T.format,nt=r.type||gn,ut=r.target||ur;if(ut!==ar)throw"target must be TEXTURE_CUBE_MAP";Lo(i,n,r),r=Object.assign({},r);let pt=6;const Tt=[],Lt=Yo(i,r);let at;function mt(Bt){return function(kt,ee){--pt,kt?Tt.push(kt):ee.width!==ee.height?Tt.push("cubemap face img is not a square: "+ee.src):(Hr(i,r),i.bindTexture(ut,n),pt===5?Yo().forEach(function(P){i.texImage2D(P,S,H,B,nt,ee)}):i.texImage2D(Bt,S,H,B,nt,ee),qr(r)&&i.generateMipmap(ut)),pt===0&&m(Tt.length?Tt:void 0,n,at)}}at=X.map(function(Bt,kt){return Fo(Bt,r.crossOrigin,mt(Lt[kt]))})}function k1(i,n,r,m){m=m||ti;const X=r.src,S=r.internalFormat||r.format||Gn,H=$r(S),T=r.format||H.format,B=r.type||gn,nt=r.target||Xr;if(nt!==Gr&&nt!==Xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Lo(i,n,r),r=Object.assign({},r);let ut=X.length;const pt=[];let Tt;const Lt=r.level||0;let at=r.width,mt=r.height;const Bt=X.length;let kt=!0;function ee(P){return function($e,ze){if(--ut,$e)pt.push($e);else{if(Hr(i,r),i.bindTexture(nt,n),kt){kt=!1,at=r.width||ze.width,mt=r.height||ze.height,i.texImage3D(nt,Lt,S,at,mt,Bt,0,T,B,null);for(let We=0;We<Bt;++We)i.texSubImage3D(nt,Lt,0,0,We,at,mt,1,T,B,ze)}else{let We=ze,jt;(ze.width!==at||ze.height!==mt)&&(jt=ks(),We=jt.canvas,jt.canvas.width=at,jt.canvas.height=mt,jt.drawImage(ze,0,0,at,mt)),i.texSubImage3D(nt,Lt,0,0,P,at,mt,1,T,B,We),jt&&We===jt.canvas&&(jt.canvas.width=0,jt.canvas.height=0)}qr(r)&&i.generateMipmap(nt)}ut===0&&m(pt.length?pt:void 0,n,Tt)}}Tt=X.map(function(P,$e){return Fo(P,r.crossOrigin,ee($e))})}function U1(i,n,r,m){m=m||cr.textureOptions;const X=m.target||ur;i.bindTexture(X,n);let S=m.width,H=m.height,T=m.depth;const B=m.level||0,nt=m.internalFormat||m.format||Gn,ut=$r(nt),pt=m.format||ut.format,Tt=m.type||Y1(i,r,ut.type);if(_r(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=Ss(Tt);r=new Bt(r)}const Lt=I1(nt,Tt),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+Js(i,pt);let mt;if(X===Gr||X===Xr)if(!S&&!H&&!T){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;S=Bt,H=Bt,T=Bt}else S&&(!H||!T)?(mt=Ji(i,X,H,T,at/S),H=mt.width,T=mt.height):H&&(!S||!T)?(mt=Ji(i,X,S,T,at/H),S=mt.width,T=mt.height):(mt=Ji(i,X,S,H,at/T),S=mt.width,H=mt.height);else mt=Ji(i,X,S,H,at),S=mt.width,H=mt.height;if(qs(i),i.pixelStorei(xo,m.unpackAlignment||1),Hr(i,m),X===ar){const Bt=Lt/r.BYTES_PER_ELEMENT,kt=at/6*Bt;To(i,m).forEach(ee=>{const P=kt*ee.ndx,$e=r.subarray(P,P+kt);i.texImage2D(ee.face,B,nt,S,H,0,pt,Tt,$e)})}else X===Gr||X===Xr?i.texImage3D(X,B,nt,S,H,T,0,pt,Tt,r):i.texImage2D(X,B,nt,S,H,0,pt,Tt,r);return{width:S,height:H,depth:T,type:Tt}}function E1(i,n,r){const m=r.target||ur;i.bindTexture(m,n);const X=r.level||0,S=r.internalFormat||r.format||Gn,H=$r(S),T=r.format||H.format,B=r.type||H.type;if(Hr(i,r),m===ar)for(let nt=0;nt<6;++nt)i.texImage2D(Wo+nt,X,S,r.width,r.height,0,T,B,null);else m===Gr||m===Xr?i.texImage3D(m,X,S,r.width,r.height,r.depth,0,T,B,null):i.texImage2D(m,X,S,r.width,r.height,0,T,B,null)}function rl(i,n,r){r=r||ti,n=n||cr.textureOptions;const m=i.createTexture(),X=n.target||ur;let S=n.width||1,H=n.height||1;const T=n.internalFormat||Gn;i.bindTexture(X,m),X===ar&&(i.texParameteri(X,Yi,wi),i.texParameteri(X,Ti,wi));let B=n.src;if(B)if(typeof B=="function"&&(B=B(i,n)),typeof B=="string")N1(i,m,n,r);else if(_r(B)||Array.isArray(B)&&(typeof B[0]=="number"||Array.isArray(B[0])||_r(B[0]))){const nt=U1(i,m,B,n);S=nt.width,H=nt.height}else Array.isArray(B)&&(typeof B[0]=="string"||nl(B[0]))?X===ar?J1(i,m,n,r):k1(i,m,n,r):(el(i,m,B,n),S=B.width,H=B.height);else E1(i,m,n);return qr(n)&&wo(i,m,n,S,H,T),tl(i,m,n),m}const Co=ws;function il(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const ki=33984,Ui=34962,B1=34963,M1=35713,A1=35714,K1=35632,j1=35633,z1=35981,ol=35718,O1=35721,P1=35971,_1=35382,Q1=35396,D1=35398,$1=35392,q1=35395,Ei=5126,sl=35664,ll=35665,cl=35666,Ho=5124,ul=35667,al=35668,dl=35669,hl=35670,fl=35671,ml=35672,pl=35673,bl=35674,yl=35675,gl=35676,ta=35678,ea=35680,na=35679,ra=35682,ia=35685,oa=35686,sa=35687,la=35688,ca=35689,ua=35690,aa=36289,da=36292,ha=36293,No=5125,Zl=36294,vl=36295,Gl=36296,fa=36298,ma=36299,pa=36300,ba=36303,ya=36306,ga=36307,Za=36308,va=36311,Bi=3553,Mi=34067,Jo=32879,Ai=35866,be={};function Xl(i,n){return be[n].bindPoint}function Ga(i,n){return function(r){i.uniform1f(n,r)}}function Xa(i,n){return function(r){i.uniform1fv(n,r)}}function Wa(i,n){return function(r){i.uniform2fv(n,r)}}function Va(i,n){return function(r){i.uniform3fv(n,r)}}function Ra(i,n){return function(r){i.uniform4fv(n,r)}}function Wl(i,n){return function(r){i.uniform1i(n,r)}}function Vl(i,n){return function(r){i.uniform1iv(n,r)}}function Rl(i,n){return function(r){i.uniform2iv(n,r)}}function xl(i,n){return function(r){i.uniform3iv(n,r)}}function Il(i,n){return function(r){i.uniform4iv(n,r)}}function xa(i,n){return function(r){i.uniform1ui(n,r)}}function Ia(i,n){return function(r){i.uniform1uiv(n,r)}}function Sa(i,n){return function(r){i.uniform2uiv(n,r)}}function wa(i,n){return function(r){i.uniform3uiv(n,r)}}function Ya(i,n){return function(r){i.uniform4uiv(n,r)}}function Ta(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function Fa(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function La(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function Ca(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function Ha(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function Na(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function Ja(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function ka(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function Ua(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function On(i,n,r,m){const X=Xl(i,n);return Pr(i)?function(S){let H,T;vo(i,S)?(H=S,T=null):(H=S.texture,T=S.sampler),i.uniform1i(m,r),i.activeTexture(ki+r),i.bindTexture(X,H),i.bindSampler(r,T)}:function(S){i.uniform1i(m,r),i.activeTexture(ki+r),i.bindTexture(X,S)}}function Pn(i,n,r,m,X){const S=Xl(i,n),H=new Int32Array(X);for(let T=0;T<X;++T)H[T]=r+T;return Pr(i)?function(T){i.uniform1iv(m,H),T.forEach(function(B,nt){i.activeTexture(ki+H[nt]);let ut,pt;vo(i,B)?(ut=B,pt=null):(ut=B.texture,pt=B.sampler),i.bindSampler(r,pt),i.bindTexture(S,ut)})}:function(T){i.uniform1iv(m,H),T.forEach(function(B,nt){i.activeTexture(ki+H[nt]),i.bindTexture(S,B)})}}be[Ei]={Type:Float32Array,size:4,setter:Ga,arraySetter:Xa},be[sl]={Type:Float32Array,size:8,setter:Wa,cols:2},be[ll]={Type:Float32Array,size:12,setter:Va,cols:3},be[cl]={Type:Float32Array,size:16,setter:Ra,cols:4},be[Ho]={Type:Int32Array,size:4,setter:Wl,arraySetter:Vl},be[ul]={Type:Int32Array,size:8,setter:Rl,cols:2},be[al]={Type:Int32Array,size:12,setter:xl,cols:3},be[dl]={Type:Int32Array,size:16,setter:Il,cols:4},be[No]={Type:Uint32Array,size:4,setter:xa,arraySetter:Ia},be[Zl]={Type:Uint32Array,size:8,setter:Sa,cols:2},be[vl]={Type:Uint32Array,size:12,setter:wa,cols:3},be[Gl]={Type:Uint32Array,size:16,setter:Ya,cols:4},be[hl]={Type:Uint32Array,size:4,setter:Wl,arraySetter:Vl},be[fl]={Type:Uint32Array,size:8,setter:Rl,cols:2},be[ml]={Type:Uint32Array,size:12,setter:xl,cols:3},be[pl]={Type:Uint32Array,size:16,setter:Il,cols:4},be[bl]={Type:Float32Array,size:32,setter:Ta,rows:2,cols:2},be[yl]={Type:Float32Array,size:48,setter:Fa,rows:3,cols:3},be[gl]={Type:Float32Array,size:64,setter:La,rows:4,cols:4},be[ia]={Type:Float32Array,size:32,setter:Ca,rows:2,cols:3},be[oa]={Type:Float32Array,size:32,setter:Na,rows:2,cols:4},be[sa]={Type:Float32Array,size:48,setter:Ha,rows:3,cols:2},be[la]={Type:Float32Array,size:48,setter:ka,rows:3,cols:4},be[ca]={Type:Float32Array,size:64,setter:Ja,rows:4,cols:2},be[ua]={Type:Float32Array,size:64,setter:Ua,rows:4,cols:3},be[ta]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Bi},be[ea]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Mi},be[na]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Jo},be[ra]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Bi},be[aa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Ai},be[da]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Ai},be[ha]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Mi},be[fa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Bi},be[ma]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Jo},be[pa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Mi},be[ba]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Ai},be[ya]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Bi},be[ga]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Jo},be[Za]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Mi},be[va]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:Ai};function Ki(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||Ei,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function hr(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Ho,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function ji(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(Ui,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||No,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function ko(i,n,r){const m=r.size,X=r.count;return function(S){i.bindBuffer(Ui,S.buffer);const H=S.size||S.numComponents||m,T=H/X,B=S.type||Ei,ut=be[B].size*H,pt=S.normalize||!1,Tt=S.offset||0,Lt=ut/X;for(let at=0;at<X;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,B,pt,ut,Tt+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,S.divisor||0)}}const Fn={};Fn[Ei]={size:4,setter:Ki},Fn[sl]={size:8,setter:Ki},Fn[ll]={size:12,setter:Ki},Fn[cl]={size:16,setter:Ki},Fn[Ho]={size:4,setter:hr},Fn[ul]={size:8,setter:hr},Fn[al]={size:12,setter:hr},Fn[dl]={size:16,setter:hr},Fn[No]={size:4,setter:ji},Fn[Zl]={size:8,setter:ji},Fn[vl]={size:12,setter:ji},Fn[Gl]={size:16,setter:ji},Fn[hl]={size:4,setter:hr},Fn[fl]={size:8,setter:hr},Fn[ml]={size:12,setter:hr},Fn[pl]={size:16,setter:hr},Fn[bl]={size:4,setter:ko,count:2},Fn[yl]={size:9,setter:ko,count:3},Fn[gl]={size:16,setter:ko,count:4};const Ea=/ERROR:\s*\d+:(\d+)/gi;function Ba(i,n="",r=0){const m=[...n.matchAll(Ea)],X=new Map(m.map((S,H)=>{const T=parseInt(S[1]),B=m[H+1],nt=B?B.index:n.length,ut=n.substring(S.index,nt);return[T-1,ut]}));return i.split(`
125
+ `).map((S,H)=>{const T=X.get(H);return`${H+1+r}: ${S}${T?`
126
126
 
127
- ^^^ ${w}`:""}`}).join(`
128
- `)}const xl=/^[ \t]*\n/;function Il(i){let n=0;return xl.test(i)&&(n=1,i=i.replace(xl,"")),{lineOffset:n,shaderSource:i}}function Ca(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
127
+ ^^^ ${T}`:""}`}).join(`
128
+ `)}const Sl=/^[ \t]*\n/;function wl(i){let n=0;return Sl.test(i)&&(n=1,i=i.replace(Sl,"")),{lineOffset:n,shaderSource:i}}function Ma(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
129
129
  ${i.errors.join(`
130
- `)}`)}),null}function Ha(i,n,r,p){if(p=p||Fo,!i.getShaderParameter(r,Cu)){const S=i.getShaderInfoLog(r),{lineOffset:H,shaderSource:w}=Il(i.getShaderSource(r)),E=`${La(w,S,H)}
131
- Error compiling ${Hs(i,n)}: ${S}`;return p(E),E}return""}function No(i,n,r){let p,G,S;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const et=i;r=et.errorCallback,i=et.attribLocations,p=et.transformFeedbackVaryings,G=et.transformFeedbackMode,S=et.callback}const H=r||Fo,w=[],E={errorCallback(et,...ct){w.push(et),H(et,...ct)},transformFeedbackVaryings:p,transformFeedbackMode:G,callback:S,errors:w};{let et={};Array.isArray(i)?i.forEach(function(ct,dt){et[ct]=n?n[dt]:dt}):et=i||{},E.attribLocations=et}return E}const Na=["VERTEX_SHADER","FRAGMENT_SHADER"];function Ja(i,n){if(n.indexOf("frag")>=0)return Nu;if(n.indexOf("vert")>=0)return Ju}function Ea(i,n,r){const p=i.getAttachedShaders(n);for(const G of p)r.has(G)&&i.deleteShader(G);i.deleteProgram(n)}const ka=(i=0)=>new Promise(n=>setTimeout(n,i));function Ua(i,n,r){const p=i.createProgram(),{attribLocations:G,transformFeedbackVaryings:S,transformFeedbackMode:H}=No(r);for(let w=0;w<n.length;++w){let E=n[w];if(typeof E=="string"){const et=nl(E),ct=et?et.text:E;let dt=i[Na[w]];et&&et.type&&(dt=Ja(i,et.type)||dt),E=i.createShader(dt),i.shaderSource(E,Il(ct).shaderSource),i.compileShader(E),i.attachShader(p,E)}}Object.entries(G).forEach(([w,E])=>i.bindAttribLocation(p,E,w));{let w=S;w&&(w.attribs&&(w=w.attribs),Array.isArray(w)||(w=Object.keys(w)),i.transformFeedbackVaryings(p,w,H||Eu))}return i.linkProgram(p),p}function Ba(i,n,r,p,G){const S=No(r,p,G),H=new Set(n),w=Ua(i,n,S);function E(et,ct){const dt=Ma(et,ct,S.errorCallback);return dt&&Ea(et,ct,H),dt}if(S.callback){Aa(i,w).then(()=>{const et=E(i,w);S.callback(et,et?void 0:w)});return}return E(i,w)?void 0:w}async function Aa(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),p=r?(S,H)=>S.getProgramParameter(H,r.COMPLETION_STATUS_KHR):()=>!0;let G=0;do await ka(G),G=1e3/60;while(!p(i,n))}function Ma(i,n,r){if(r=r||Fo,!i.getProgramParameter(n,Hu)){const G=i.getProgramInfoLog(n);r(`Error in program linking: ${G}`);const H=i.getAttachedShaders(n).map(w=>Ha(i,i.getShaderParameter(w,i.SHADER_TYPE),w,r));return`${G}
132
- ${H.filter(w=>w).join(`
133
- `)}`}}function Ka(i,n,r,p,G){return Ba(i,n,r,p,G)}function Sl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const ja=/(\.|\[|]|\w+)/g,Oa=i=>i>="0"&&i<="9";function za(i,n,r,p){const G=i.split(ja).filter(w=>w!=="");let S=0,H="";for(;;){const w=G[S++];H+=w;const E=Oa(w[0]),et=E?parseInt(w):w;if(E&&(H+=G[S++]),S===G.length){r[et]=n;break}else{const dt=G[S++],Ft=dt==="[",Lt=r[et]||(Ft?[]:{});r[et]=Lt,r=Lt,p[H]=p[H]||function(at){return function(pt){Tl(at,pt)}}(Lt),H+=dt}}}function Pa(i,n){let r=0;function p(w,E,et){const ct=E.name.endsWith("[0]"),dt=E.type,Ft=be[dt];if(!Ft)throw new Error(`unknown type: 0x${dt.toString(16)}`);let Lt;if(Ft.bindPoint){const at=r;r+=E.size,ct?Lt=Ft.arraySetter(i,dt,at,et,E.size):Lt=Ft.setter(i,dt,at,et,E.size)}else Ft.arraySetter&&ct?Lt=Ft.arraySetter(i,et):Lt=Ft.setter(i,et);return Lt.location=et,Lt}const G={},S={},H=i.getProgramParameter(n,rl);for(let w=0;w<H;++w){const E=i.getActiveUniform(n,w);if(Sl(E))continue;let et=E.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const ct=i.getUniformLocation(n,E.name);if(ct){const dt=p(n,E,ct);G[et]=dt,za(et,dt,S,G)}}return G}function _a(i,n){const r={},p=i.getProgramParameter(n,Uu);for(let G=0;G<p;++G){const S=i.getTransformFeedbackVarying(n,G);r[S.name]={index:G,type:S.type,size:S.size}}return r}function Qa(i,n){const r=i.getProgramParameter(n,rl),p=[],G=[];for(let w=0;w<r;++w){G.push(w),p.push({});const E=i.getActiveUniform(n,w);p[w].name=E.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(w){const E=w[0],et=w[1];i.getActiveUniforms(n,G,i[E]).forEach(function(ct,dt){p[dt][et]=ct})});const S={},H=i.getProgramParameter(n,Bu);for(let w=0;w<H;++w){const E=i.getActiveUniformBlockName(n,w),et={index:i.getUniformBlockIndex(n,E),usedByVertexShader:i.getActiveUniformBlockParameter(n,w,Au),usedByFragmentShader:i.getActiveUniformBlockParameter(n,w,Mu),size:i.getActiveUniformBlockParameter(n,w,Ku),uniformIndices:i.getActiveUniformBlockParameter(n,w,ju)};et.used=et.usedByVertexShader||et.usedByFragmentShader,S[E]=et}return{blockSpecs:S,uniformData:p}}function Tl(i,n){for(const r in n){const p=i[r];typeof p=="function"?p(n[r]):Tl(i[r],n[r])}}function wl(i,...n){const r=i.uniformSetters||i,p=n.length;for(let G=0;G<p;++G){const S=n[G];if(Array.isArray(S)){const H=S.length;for(let w=0;w<H;++w)wl(r,S[w])}else for(const H in S){const w=r[H];w&&w(S[H])}}}function Da(i,n){const r={},p=i.getProgramParameter(n,ku);for(let G=0;G<p;++G){const S=i.getActiveAttrib(n,G);if(Sl(S))continue;const H=i.getAttribLocation(n,S.name),w=Yn[S.type],E=w.setter(i,H,w);E.location=H,r[S.name]=E}return r}function $a(i,n){for(const r in n){const p=i[r];p&&p(n[r])}}function qa(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):($a(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(Lu,r.indices))}function Fl(i,n){const r=Pa(i,n),p=Da(i,n),G={program:n,uniformSetters:r,attribSetters:p};return Pr(i)&&(G.uniformBlockSpec=Qa(i,n),G.transformFeedbackInfo=_a(i,n)),G}const t0=/\s|{|}|;/;function e0(i,n,r,p,G){const S=No(r,p,G),H=[];if(n=n.map(function(et){if(!t0.test(et)){const ct=nl(et);if(ct)et=ct.text;else{const dt=`no element with id: ${et}`;S.errorCallback(dt),H.push(dt)}}return et}),H.length)return Ca(S,"");const w=S.callback;w&&(S.callback=(et,ct)=>{w(et,et?void 0:Fl(i,ct))});const E=Ka(i,n,S);return E?Fl(i,E):null}const n0=4,Yl=5123;function r0(i,n,r,p,G,S){r=r===void 0?n0:r;const H=n.indices,w=n.elementType,E=p===void 0?n.numElements:p;G=G===void 0?0:G,w||H?S!==void 0?i.drawElementsInstanced(r,E,w===void 0?Yl:n.elementType,G,S):i.drawElements(r,E,w===void 0?Yl:n.elementType,G):S!==void 0?i.drawArraysInstanced(r,G,E,S):i.drawArrays(r,G,E)}const Ll=36160,zi=36161,i0=3553,o0=5121,s0=6402,l0=6408,c0=33190,u0=36012,a0=35056,d0=36013,h0=32854,f0=32855,m0=36194,Cl=33189,Hl=6401,Nl=36168,Jo=34041,Eo=36064,Pi=36096,Jl=36128,ko=33306,Uo=33071,Bo=9729,p0=[{format:l0,type:o0,min:Bo,wrap:Uo},{format:Jo}],tr={};tr[Jo]=ko,tr[Hl]=Jl,tr[Nl]=Jl,tr[s0]=Pi,tr[Cl]=Pi,tr[c0]=Pi,tr[u0]=Pi,tr[a0]=ko,tr[d0]=ko;function b0(i,n){return tr[i]||tr[n]}const pr={};pr[h0]=!0,pr[f0]=!0,pr[m0]=!0,pr[Jo]=!0,pr[Cl]=!0,pr[Hl]=!0,pr[Nl]=!0;function y0(i){return pr[i]}const g0=32;function Z0(i){return i>=Eo&&i<Eo+g0}function _i(i,n,r,p){const G=Ll,S=i.createFramebuffer();i.bindFramebuffer(G,S),r=r||i.drawingBufferWidth,p=p||i.drawingBufferHeight,n=n||p0;const H=[],w={framebuffer:S,attachments:[],width:r,height:p};return n.forEach(function(E,et){let ct=E.attachment;const dt=E.samples,Ft=E.format;let Lt=E.attachmentPoint||b0(Ft,E.internalFormat);if(Lt||(Lt=Eo+et),Z0(Lt)&&H.push(Lt),!ct)if(dt!==void 0||y0(Ft))ct=i.createRenderbuffer(),i.bindRenderbuffer(zi,ct),dt>1?i.renderbufferStorageMultisample(zi,dt,Ft,r,p):i.renderbufferStorage(zi,Ft,r,p);else{const at=Object.assign({},E);at.width=r,at.height=p,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||Bo,at.mag=at.mag||at.minMag||Bo,at.wrapS=at.wrapS||at.wrap||Uo,at.wrapT=at.wrapT||at.wrap||Uo),ct=el(i,at)}if(w1(i,ct))i.framebufferRenderbuffer(G,Lt,zi,ct);else if(yo(i,ct))E.layer!==void 0?i.framebufferTextureLayer(G,Lt,ct,E.level||0,E.layer):i.framebufferTexture2D(G,Lt,E.target||i0,ct,E.level||0);else throw new Error("unknown attachment type");w.attachments.push(ct)}),i.drawBuffers&&i.drawBuffers(H),w}function v0(i,n,r){r=r||Ll,n?(i.bindFramebuffer(r,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(r,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function mn(i,n){return()=>n instanceof WebGLTexture?n:el(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const El=2;class Ir{constructor(n){Wt(this,"id","_");Wt(this,"context");Wt(this,"output");Wt(this,"fbi");Wt(this,"options");Wt(this,"programInfo");Wt(this,"bufferInfo");Wt(this,"profiler");Wt(this,"lastRun");const{context:r,width:p,height:G}=n;this.context=r,this.options=n;const S=this.buildDefines();this.programInfo=e0(this.context,[S+this.getVertexShader(),S+this.getFragmentShader()]),this.bufferInfo=tc(this.context,this.getBuffers()),this.fbi=_i(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],p,G),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=_i(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let p in r)n+=`#define ${p} ${r[p].toFixed(1)}
134
- `;return n}run(n){var G,S,H,w,E,et;(G=this.profiler)==null||G.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(S=this.profiler)==null||S.pushContext(`[${this.id}] UNIFORMS`);for(const ct in n)typeof n[ct]=="function"&&((H=this.profiler)==null||H.pushContext(`[${this.id}] UNI : ${ct}`),n[ct]=n[ct](),(w=this.profiler)==null||w.popContext(`[${this.id}] UNI : ${ct}`));(E=this.profiler)==null||E.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let p=0;this.lastRun&&(p=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),qa(this.context,this.programInfo,this.bufferInfo),wl(this.programInfo,{delta:p,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),v0(this.context,this.options.disableFramebuffer?null:this.fbi),r0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const G0=`precision mediump float;
135
-
136
- varying vec2 _texture_coord;
137
-
138
- uniform vec2 canvas;
139
- uniform sampler2D texture;
140
- uniform sampler2D mask;
141
-
142
- vec4 loop();
143
-
144
- void main() { gl_FragColor = loop(); }
145
- `,X0=`varying vec2 _texture_coord;
146
-
147
- attribute vec2 position;
148
- attribute vec2 texture_coord;
149
-
150
- void main() {
151
- gl_Position = vec4(position, 0., 1.);
152
- _texture_coord = texture_coord;
153
- }
154
- `;class W0 extends Ir{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return G0+this.createLoopFunction()}getVertexShader(){return X0}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
155
-
156
- vec4 loop() {
157
- vec4 result = vec4(0,0,0,0);
158
- float factorSum = 0.;
159
-
160
- vec2 normalizedRadius = vec2(-${n}.) / canvas;
161
- vec2 normalizedIncrement = vec2(1.) / canvas;
162
- vec2 diff = normalizedRadius;
163
- float maxLength = length(normalizedRadius);
164
-
165
- for(int y=-${n}; y<${n+1}; ++y) {
166
- for(int x=-${n}; x<${n+1}; ++x) {
167
- float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;
168
- result += factor * texture2D(texture, _texture_coord + diff);
169
- factorSum += factor;
170
- diff.x += normalizedIncrement.x;
171
- }
172
- diff.y += normalizedIncrement.y;
173
- diff.x = normalizedRadius.x;
174
- }
175
- return result / factorSum;
176
- }`}}const V0=`precision mediump float;
130
+ `)}`)}),null}function Aa(i,n,r,m){if(m=m||Co,!i.getShaderParameter(r,M1)){const S=i.getShaderInfoLog(r),{lineOffset:H,shaderSource:T}=wl(i.getShaderSource(r)),B=`${Ba(T,S,H)}
131
+ Error compiling ${Js(i,n)}: ${S}`;return m(B),B}return""}function Uo(i,n,r){let m,X,S;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const nt=i;r=nt.errorCallback,i=nt.attribLocations,m=nt.transformFeedbackVaryings,X=nt.transformFeedbackMode,S=nt.callback}const H=r||Co,T=[],B={errorCallback(nt,...ut){T.push(nt),H(nt,...ut)},transformFeedbackVaryings:m,transformFeedbackMode:X,callback:S,errors:T};{let nt={};Array.isArray(i)?i.forEach(function(ut,pt){nt[ut]=n?n[pt]:pt}):nt=i||{},B.attribLocations=nt}return B}const Ka=["VERTEX_SHADER","FRAGMENT_SHADER"];function ja(i,n){if(n.indexOf("frag")>=0)return K1;if(n.indexOf("vert")>=0)return j1}function za(i,n,r){const m=i.getAttachedShaders(n);for(const X of m)r.has(X)&&i.deleteShader(X);i.deleteProgram(n)}const Oa=(i=0)=>new Promise(n=>setTimeout(n,i));function Pa(i,n,r){const m=i.createProgram(),{attribLocations:X,transformFeedbackVaryings:S,transformFeedbackMode:H}=Uo(r);for(let T=0;T<n.length;++T){let B=n[T];if(typeof B=="string"){const nt=il(B),ut=nt?nt.text:B;let pt=i[Ka[T]];nt&&nt.type&&(pt=ja(i,nt.type)||pt),B=i.createShader(pt),i.shaderSource(B,wl(ut).shaderSource),i.compileShader(B),i.attachShader(m,B)}}Object.entries(X).forEach(([T,B])=>i.bindAttribLocation(m,B,T));{let T=S;T&&(T.attribs&&(T=T.attribs),Array.isArray(T)||(T=Object.keys(T)),i.transformFeedbackVaryings(m,T,H||z1))}return i.linkProgram(m),m}function _a(i,n,r,m,X){const S=Uo(r,m,X),H=new Set(n),T=Pa(i,n,S);function B(nt,ut){const pt=Da(nt,ut,S.errorCallback);return pt&&za(nt,ut,H),pt}if(S.callback){Qa(i,T).then(()=>{const nt=B(i,T);S.callback(nt,nt?void 0:T)});return}return B(i,T)?void 0:T}async function Qa(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),m=r?(S,H)=>S.getProgramParameter(H,r.COMPLETION_STATUS_KHR):()=>!0;let X=0;do await Oa(X),X=1e3/60;while(!m(i,n))}function Da(i,n,r){if(r=r||Co,!i.getProgramParameter(n,A1)){const X=i.getProgramInfoLog(n);r(`Error in program linking: ${X}`);const H=i.getAttachedShaders(n).map(T=>Aa(i,i.getShaderParameter(T,i.SHADER_TYPE),T,r));return`${X}
132
+ ${H.filter(T=>T).join(`
133
+ `)}`}}function $a(i,n,r,m,X){return _a(i,n,r,m,X)}function Yl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const qa=/(\.|\[|]|\w+)/g,t0=i=>i>="0"&&i<="9";function e0(i,n,r,m){const X=i.split(qa).filter(T=>T!=="");let S=0,H="";for(;;){const T=X[S++];H+=T;const B=t0(T[0]),nt=B?parseInt(T):T;if(B&&(H+=X[S++]),S===X.length){r[nt]=n;break}else{const pt=X[S++],Tt=pt==="[",Lt=r[nt]||(Tt?[]:{});r[nt]=Lt,r=Lt,m[H]=m[H]||function(at){return function(mt){Tl(at,mt)}}(Lt),H+=pt}}}function n0(i,n){let r=0;function m(T,B,nt){const ut=B.name.endsWith("[0]"),pt=B.type,Tt=be[pt];if(!Tt)throw new Error(`unknown type: 0x${pt.toString(16)}`);let Lt;if(Tt.bindPoint){const at=r;r+=B.size,ut?Lt=Tt.arraySetter(i,pt,at,nt,B.size):Lt=Tt.setter(i,pt,at,nt,B.size)}else Tt.arraySetter&&ut?Lt=Tt.arraySetter(i,nt):Lt=Tt.setter(i,nt);return Lt.location=nt,Lt}const X={},S={},H=i.getProgramParameter(n,ol);for(let T=0;T<H;++T){const B=i.getActiveUniform(n,T);if(Yl(B))continue;let nt=B.name;nt.endsWith("[0]")&&(nt=nt.substr(0,nt.length-3));const ut=i.getUniformLocation(n,B.name);if(ut){const pt=m(n,B,ut);X[nt]=pt,e0(nt,pt,S,X)}}return X}function r0(i,n){const r={},m=i.getProgramParameter(n,P1);for(let X=0;X<m;++X){const S=i.getTransformFeedbackVarying(n,X);r[S.name]={index:X,type:S.type,size:S.size}}return r}function i0(i,n){const r=i.getProgramParameter(n,ol),m=[],X=[];for(let T=0;T<r;++T){X.push(T),m.push({});const B=i.getActiveUniform(n,T);m[T].name=B.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(T){const B=T[0],nt=T[1];i.getActiveUniforms(n,X,i[B]).forEach(function(ut,pt){m[pt][nt]=ut})});const S={},H=i.getProgramParameter(n,_1);for(let T=0;T<H;++T){const B=i.getActiveUniformBlockName(n,T),nt={index:i.getUniformBlockIndex(n,B),usedByVertexShader:i.getActiveUniformBlockParameter(n,T,Q1),usedByFragmentShader:i.getActiveUniformBlockParameter(n,T,D1),size:i.getActiveUniformBlockParameter(n,T,$1),uniformIndices:i.getActiveUniformBlockParameter(n,T,q1)};nt.used=nt.usedByVertexShader||nt.usedByFragmentShader,S[B]=nt}return{blockSpecs:S,uniformData:m}}function Tl(i,n){for(const r in n){const m=i[r];typeof m=="function"?m(n[r]):Tl(i[r],n[r])}}function Fl(i,...n){const r=i.uniformSetters||i,m=n.length;for(let X=0;X<m;++X){const S=n[X];if(Array.isArray(S)){const H=S.length;for(let T=0;T<H;++T)Fl(r,S[T])}else for(const H in S){const T=r[H];T&&T(S[H])}}}function o0(i,n){const r={},m=i.getProgramParameter(n,O1);for(let X=0;X<m;++X){const S=i.getActiveAttrib(n,X);if(Yl(S))continue;const H=i.getAttribLocation(n,S.name),T=Fn[S.type],B=T.setter(i,H,T);B.location=H,r[S.name]=B}return r}function s0(i,n){for(const r in n){const m=i[r];m&&m(n[r])}}function l0(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):(s0(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(B1,r.indices))}function Ll(i,n){const r=n0(i,n),m=o0(i,n),X={program:n,uniformSetters:r,attribSetters:m};return Pr(i)&&(X.uniformBlockSpec=i0(i,n),X.transformFeedbackInfo=r0(i,n)),X}const c0=/\s|{|}|;/;function u0(i,n,r,m,X){const S=Uo(r,m,X),H=[];if(n=n.map(function(nt){if(!c0.test(nt)){const ut=il(nt);if(ut)nt=ut.text;else{const pt=`no element with id: ${nt}`;S.errorCallback(pt),H.push(pt)}}return nt}),H.length)return Ma(S,"");const T=S.callback;T&&(S.callback=(nt,ut)=>{T(nt,nt?void 0:Ll(i,ut))});const B=$a(i,n,S);return B?Ll(i,B):null}const a0=4,Cl=5123;function d0(i,n,r,m,X,S){r=r===void 0?a0:r;const H=n.indices,T=n.elementType,B=m===void 0?n.numElements:m;X=X===void 0?0:X,T||H?S!==void 0?i.drawElementsInstanced(r,B,T===void 0?Cl:n.elementType,X,S):i.drawElements(r,B,T===void 0?Cl:n.elementType,X):S!==void 0?i.drawArraysInstanced(r,X,B,S):i.drawArrays(r,X,B)}const Hl=36160,zi=36161,h0=3553,f0=5121,m0=6402,p0=6408,b0=33190,y0=36012,g0=35056,Z0=36013,v0=32854,G0=32855,X0=36194,Nl=33189,Jl=6401,kl=36168,Eo=34041,Bo=36064,Oi=36096,Ul=36128,Mo=33306,Ao=33071,Ko=9729,W0=[{format:p0,type:f0,min:Ko,wrap:Ao},{format:Eo}],tr={};tr[Eo]=Mo,tr[Jl]=Ul,tr[kl]=Ul,tr[m0]=Oi,tr[Nl]=Oi,tr[b0]=Oi,tr[y0]=Oi,tr[g0]=Mo,tr[Z0]=Mo;function V0(i,n){return tr[i]||tr[n]}const fr={};fr[v0]=!0,fr[G0]=!0,fr[X0]=!0,fr[Eo]=!0,fr[Nl]=!0,fr[Jl]=!0,fr[kl]=!0;function R0(i){return fr[i]}const x0=32;function I0(i){return i>=Bo&&i<Bo+x0}function Pi(i,n,r,m){const X=Hl,S=i.createFramebuffer();i.bindFramebuffer(X,S),r=r||i.drawingBufferWidth,m=m||i.drawingBufferHeight,n=n||W0;const H=[],T={framebuffer:S,attachments:[],width:r,height:m};return n.forEach(function(B,nt){let ut=B.attachment;const pt=B.samples,Tt=B.format;let Lt=B.attachmentPoint||V0(Tt,B.internalFormat);if(Lt||(Lt=Bo+nt),I0(Lt)&&H.push(Lt),!ut)if(pt!==void 0||R0(Tt))ut=i.createRenderbuffer(),i.bindRenderbuffer(zi,ut),pt>1?i.renderbufferStorageMultisample(zi,pt,Tt,r,m):i.renderbufferStorage(zi,Tt,r,m);else{const at=Object.assign({},B);at.width=r,at.height=m,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||Ko,at.mag=at.mag||at.minMag||Ko,at.wrapS=at.wrapS||at.wrap||Ao,at.wrapT=at.wrapT||at.wrap||Ao),ut=rl(i,at)}if(kc(i,ut))i.framebufferRenderbuffer(X,Lt,zi,ut);else if(vo(i,ut))B.layer!==void 0?i.framebufferTextureLayer(X,Lt,ut,B.level||0,B.layer):i.framebufferTexture2D(X,Lt,B.target||h0,ut,B.level||0);else throw new Error("unknown attachment type");T.attachments.push(ut)}),i.drawBuffers&&i.drawBuffers(H),T}function S0(i,n,r){r=r||Hl,n?(i.bindFramebuffer(r,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(r,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function pn(i,n){return()=>n instanceof WebGLTexture?n:rl(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const Nr=2;class Rr{constructor(n){Zt(this,"id","_");Zt(this,"context");Zt(this,"output");Zt(this,"fbi");Zt(this,"options");Zt(this,"programInfo");Zt(this,"bufferInfo");Zt(this,"profiler");Zt(this,"lastRun");const{context:r,width:m,height:X}=n;this.context=r,this.options=n;const S=this.buildDefines();this.programInfo=u0(this.context,[S+this.getVertexShader(),S+this.getFragmentShader()]),this.bufferInfo=cu(this.context,this.getBuffers()),this.fbi=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],m,X),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let m in r)n+=`#define ${m} ${r[m].toFixed(1)}
134
+ `;return n}run(n){var X,S,H,T,B,nt;(X=this.profiler)==null||X.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(S=this.profiler)==null||S.pushContext(`[${this.id}] UNIFORMS`);for(const ut in n)typeof n[ut]=="function"&&((H=this.profiler)==null||H.pushContext(`[${this.id}] UNI : ${ut}`),n[ut]=n[ut](),(T=this.profiler)==null||T.popContext(`[${this.id}] UNI : ${ut}`));(B=this.profiler)==null||B.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let m=0;this.lastRun&&(m=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),l0(this.context,this.programInfo,this.bufferInfo),Fl(this.programInfo,{delta:m,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),S0(this.context,this.options.disableFramebuffer?null:this.fbi),d0(this.context,this.bufferInfo),(nt=this.profiler)==null||nt.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const w0=`precision mediump float;
177
135
 
178
136
  varying vec2 _texture_coord;
179
137
 
@@ -188,7 +146,7 @@ void main() {
188
146
  gl_FragColor = foregroundColor * tresholdColor.a +
189
147
  backgroundColor * (1. - tresholdColor.a);
190
148
  }
191
- `,R0=`varying vec2 _texture_coord;
149
+ `,Y0=`varying vec2 _texture_coord;
192
150
 
193
151
  attribute vec2 position;
194
152
  attribute vec2 texture_coord;
@@ -198,7 +156,26 @@ void main() {
198
156
  _texture_coord = texture_coord;
199
157
  _texture_coord.y = 1. - texture_coord.y;
200
158
  }
201
- `;class Ao extends Ir{getFragmentShader(){return V0}getVertexShader(){return R0}}class Mo{constructor(){Wt(this,"steps",[]);Wt(this,"profiler")}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,r){var p,G;(p=this.profiler)==null||p.pushContext(`PIP [${this.constructor.name}]`);for(const S of this.steps)S.preventResize||S.program.resizeOutput(n,r);(G=this.profiler)==null||G.popContext(`PIP [${this.constructor.name}]`)}setProfiler(n){this.profiler=n;for(const r of this.steps)r.program.setProfiler(n)}setId(n){for(const r of this.steps)r.program.id=n}}class Ko extends Mo{constructor(){super(...arguments);Wt(this,"preciseMaskEnabled",!1)}}const x0=10,I0=2,S0=8;class T0 extends Ko{constructor(r,p){super();Wt(this,"inputImage");Wt(this,"inputMask");Wt(this,"blur");this.context=r,this.radius=p;const G={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new W0({...G,radius:p,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const S=new Ao({...G,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:mn(r,this.inputImage),mask:mn(r,this.inputMask)})}),this.addStep({program:S,getUniforms:()=>({background:mn(r,this.blur.output),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}getBlurTextureSize(r,p){const G=this.radius>x0?S0:I0;return{width:Math.max(El,r/G),height:Math.max(El,p/G)}}setData(r,p){this.inputImage=r,this.inputMask=p}resizeOutput(r,p){super.resizeOutput(r,p);const G=this.getBlurTextureSize(r,p);this.blur.resizeOutput(G.width,G.height)}}class kl extends Ko{constructor(r){super();Wt(this,"inputImage");Wt(this,"inputBackgroundImage");Wt(this,"inputMask");Wt(this,"preciseMaskEnabled",!0);this.context=r;const p={context:r,height:r.canvas.height,width:r.canvas.width},G=new Ao({...p,disableFramebuffer:!0});this.addStep({program:G,getUniforms:()=>({background:mn(r,this.inputBackgroundImage),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}setData(r,p){this.inputImage=r,this.inputMask=p}}class w0 extends kl{constructor(){super(...arguments);Wt(this,"frameReader");Wt(this,"preciseMaskEnabled",!0)}set inputVideo(r){this.frameReader=r.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var p;const r=await((p=this.frameReader)==null?void 0:p.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}const F0=`precision mediump float;
159
+ `;class jo extends Rr{getFragmentShader(){return w0}getVertexShader(){return Y0}}class zo{constructor(){Zt(this,"steps",[]);Zt(this,"profiler")}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,r){var m,X;(m=this.profiler)==null||m.pushContext(`PIP [${this.constructor.name}]`);for(const S of this.steps)S.preventResize||S.program.resizeOutput(n,r);(X=this.profiler)==null||X.popContext(`PIP [${this.constructor.name}]`)}setProfiler(n){this.profiler=n;for(const r of this.steps)r.program.setProfiler(n)}setId(n){for(const r of this.steps)r.program.id=n}}class Oo extends zo{constructor(){super(...arguments);Zt(this,"preciseMaskEnabled",!1)}}class El extends Oo{constructor(r){super();Zt(this,"inputImage");Zt(this,"inputBackgroundImage");Zt(this,"inputMask");Zt(this,"preciseMaskEnabled",!0);this.context=r;const m={context:r,height:r.canvas.height,width:r.canvas.width},X=new jo({...m,disableFramebuffer:!0});this.addStep({program:X,getUniforms:()=>({background:pn(r,this.inputBackgroundImage),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}setData(r,m){this.inputImage=r,this.inputMask=m}}const T0=`precision mediump float;
160
+
161
+ varying vec2 _texture_coord;
162
+ uniform sampler2D texture;
163
+
164
+ void main() { gl_FragColor = texture2D(texture, _texture_coord); }
165
+ `,F0=`varying vec2 _texture_coord;
166
+
167
+ attribute vec2 position;
168
+ attribute vec2 texture_coord;
169
+ uniform bool invert_y;
170
+
171
+ void main() {
172
+ gl_Position = vec4(position, 0., 1.);
173
+ _texture_coord = texture_coord;
174
+ if (invert_y) {
175
+ _texture_coord.y = 1. - texture_coord.y;
176
+ }
177
+ }
178
+ `;class L0 extends Rr{getFragmentShader(){return T0}getVertexShader(){return F0}}class C0 extends zo{constructor(r,m,X){super();Zt(this,"inputImage");this.context=r;const S={context:r,height:X,width:m};this.addStep({program:new L0({...S,disableFramebuffer:!0}),getUniforms:()=>({texture:pn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}async function Bl(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}const H0=`precision mediump float;
202
179
 
203
180
  varying vec2 _texture_coord;
204
181
 
@@ -208,7 +185,7 @@ uniform sampler2D texture;
208
185
  vec4 loop();
209
186
 
210
187
  void main() { gl_FragColor = loop(); }
211
- `,Y0=`varying vec2 _texture_coord;
188
+ `,N0=`varying vec2 _texture_coord;
212
189
 
213
190
  attribute vec2 position;
214
191
  attribute vec2 texture_coord;
@@ -217,7 +194,7 @@ void main() {
217
194
  gl_Position = vec4(position, 0., 1.);
218
195
  _texture_coord = texture_coord;
219
196
  }
220
- `;var jo=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(jo||{});class Ul extends Ir{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return F0+this.createLoopFunction()}getVertexShader(){return Y0}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
197
+ `;var Po=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(Po||{});class Ml extends Rr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return H0+this.createLoopFunction()}getVertexShader(){return N0}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
221
198
 
222
199
  vec4 loop() {
223
200
  vec4 result = vec4(0,0,0,0);
@@ -238,7 +215,7 @@ void main() {
238
215
  diff.x = normalizedRadius.x;
239
216
  }
240
217
  return result / factorSum;
241
- }`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var E;const p=Math.PI*2,G=Math.max((E=this.options.radius)!=null?E:1,1),S=1/(p*G**2),H=-(n**2+r**2),w=S*H;return S*Math.E**w}}class L0 extends Ko{constructor(r,p){super();Wt(this,"inputImage");Wt(this,"inputMask");this.context=r;const G={context:r,height:r.canvas.height,width:r.canvas.width},S=new Ul({...G,radius:p,type:jo.GAUSSIAN}),H=new Ao({...G,disableFramebuffer:!0});this.addStep({program:S,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,S.output),threshold:mn(r,this.inputMask)})})}setData(r,p){this.inputImage=r,this.inputMask=p}}class Oo extends Ir{constructor(r){super(r);Wt(this,"fbi2");this.fbi2=_i(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const p=this.fbi;this.fbi=this.fbi2,this.fbi2=p,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,p){super.resizeOutput(r,p),this.fbi2=_i(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,p)}}const C0=`precision mediump float;
218
+ }`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var B;const m=Math.PI*2,X=Math.max((B=this.options.radius)!=null?B:1,1),S=1/(m*X**2),H=-(n**2+r**2),T=S*H;return S*Math.E**T}}class _o extends Rr{constructor(r){super(r);Zt(this,"fbi2");this.fbi2=Pi(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const m=this.fbi;this.fbi=this.fbi2,this.fbi2=m,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,m){super.resizeOutput(r,m),this.fbi2=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,m)}}const J0=`precision mediump float;
242
219
 
243
220
  varying vec2 _texture_coord;
244
221
 
@@ -291,7 +268,7 @@ void main() {
291
268
  gl_FragColor *= (1. - threshold);
292
269
  }
293
270
  }
294
- `,H0=`varying vec2 _texture_coord;
271
+ `,k0=`varying vec2 _texture_coord;
295
272
 
296
273
  attribute vec2 position;
297
274
  attribute vec2 texture_coord;
@@ -300,7 +277,7 @@ void main() {
300
277
  gl_Position = vec4(position, 0., 1.);
301
278
  _texture_coord = texture_coord;
302
279
  }
303
- `;class N0 extends Oo{getFragmentShader(){return C0}getVertexShader(){return H0}}const J0=`#version 300 es
280
+ `;class U0 extends _o{getFragmentShader(){return J0}getVertexShader(){return k0}}const E0=`#version 300 es
304
281
  // https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts
305
282
 
306
283
  precision highp float;
@@ -346,14 +323,14 @@ void main() {
346
323
  }
347
324
  newVal /= totalWeight;
348
325
  outColor = vec4(vec3(0.), newVal);
349
- }`,E0=`#version 300 es
326
+ }`,B0=`#version 300 es
350
327
  in vec2 position;
351
328
  in vec2 texture_coord;
352
329
  out vec2 _texture_coord;
353
330
  void main() {
354
331
  gl_Position = vec4(position, 0.0, 1.0);
355
332
  _texture_coord = texture_coord;
356
- }`;class k0 extends Ir{getFragmentShader(){return J0}getVertexShader(){return E0}}const U0=`precision mediump float;
333
+ }`;class M0 extends Rr{getFragmentShader(){return E0}getVertexShader(){return B0}}const A0=`precision mediump float;
357
334
 
358
335
  varying vec2 _texture_coord;
359
336
 
@@ -375,7 +352,7 @@ void main() {
375
352
  gl_FragColor = texture2D(texture, _texture_coord);
376
353
  }
377
354
  }
378
- `,B0=`varying vec2 _texture_coord;
355
+ `,K0=`varying vec2 _texture_coord;
379
356
 
380
357
  attribute vec2 position;
381
358
  attribute vec2 texture_coord;
@@ -384,7 +361,7 @@ void main() {
384
361
  gl_Position = vec4(position, 0., 1.);
385
362
  _texture_coord = texture_coord;
386
363
  }
387
- `;class A0 extends Ir{getFragmentShader(){return U0}getVertexShader(){return B0}}const M0=`precision mediump float;
364
+ `;class j0 extends Rr{getFragmentShader(){return A0}getVertexShader(){return K0}}const z0=`precision mediump float;
388
365
 
389
366
  varying vec2 _texture_coord;
390
367
 
@@ -403,7 +380,7 @@ void main() {
403
380
 
404
381
  gl_FragColor = color;
405
382
  }
406
- `,K0=`varying vec2 _texture_coord;
383
+ `,O0=`varying vec2 _texture_coord;
407
384
 
408
385
  attribute vec2 position;
409
386
  attribute vec2 texture_coord;
@@ -412,7 +389,7 @@ void main() {
412
389
  gl_Position = vec4(position, 0., 1.);
413
390
  _texture_coord = texture_coord;
414
391
  }
415
- `;class j0 extends Oo{getFragmentShader(){return M0}getVertexShader(){return K0}}const O0=`precision mediump float;
392
+ `;class P0 extends _o{getFragmentShader(){return z0}getVertexShader(){return O0}}const _0=`precision mediump float;
416
393
 
417
394
  varying vec2 _texture_coord;
418
395
 
@@ -426,7 +403,7 @@ void main() {
426
403
  gl_FragColor = inputs_color;
427
404
  }
428
405
  }
429
- `,z0=`varying vec2 _texture_coord;
406
+ `,Q0=`varying vec2 _texture_coord;
430
407
 
431
408
  attribute vec2 position;
432
409
  attribute vec2 texture_coord;
@@ -435,23 +412,46 @@ void main() {
435
412
  gl_Position = vec4(position, 0., 1.);
436
413
  _texture_coord = texture_coord;
437
414
  }
438
- `;class P0 extends Oo{getFragmentShader(){return O0}getVertexShader(){return z0}}class _0 extends Mo{constructor(r,p,G){super();Wt(this,"inputImage");Wt(this,"inputMask");Wt(this,"previousInputImage");Wt(this,"previousInputMask");Wt(this,"output");Wt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});this.context=r;const S={context:r,height:G,width:p},H=new N0(S),w=new Ul({...S,radius:1,type:jo.GAUSSIAN}),E=new P0(S),et=new j0(S),ct=new A0(S),dt=new k0({...S}),Ft=.66,Lt=640,at=480,pt=256,Mt=144;let Jt=1;Jt*=Math.max(Lt/pt,at/Mt);const qt=Math.max(1,Math.sqrt(Jt)*Ft),P=1/Lt,De=1/at;this.addStep({program:H,getUniforms:()=>({image_now:mn(r,this.inputImage),image_before:mn(r,this.previousInputImage),mask_now:mn(r,this.inputMask),mask_before:mn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:E,getUniforms:()=>({inputs:mn(r,this.inputMask),threshold:mn(r,H.output)})}),this.addStep({program:ct,getUniforms:()=>({texture:mn(r,E.output)})}),this.addStep({program:et,getUniforms:()=>({texture:mn(r,ct.output)})}),this.addStep({program:w,getUniforms:()=>({texture:mn(r,et.output)})}),this.addStep({program:dt,getUniforms:()=>({input_frame:mn(r,this.inputImage),segmentation_mask:mn(r,this.inputMask),threshold:mn(r,w.output),texel_size:[P,De],step:qt,radius:Jt,offset:qt>1?qt*.5:0,sigma_texel:Math.max(P,De)*Jt,sigma_color:.1})}),this.output=dt.output}setData(r,p){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:p,this.inputImage=r,this.inputMask=p}setOptions(r){this.options=r}}const Q0=`precision mediump float;
415
+ `;class D0 extends _o{getFragmentShader(){return _0}getVertexShader(){return Q0}}class $0 extends zo{constructor(r,m,X){super();Zt(this,"inputImage");Zt(this,"inputMask");Zt(this,"previousInputImage");Zt(this,"previousInputMask");Zt(this,"output");Zt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});Zt(this,"jointBilateral");this.context=r;const S={context:r,height:X,width:m},H=new U0(S),T=new Ml({...S,radius:1,type:Po.GAUSSIAN}),B=new D0(S),nt=new P0(S),ut=new j0(S);this.jointBilateral=new M0(S),this.addStep({program:H,getUniforms:()=>({image_now:pn(r,this.inputImage),image_before:pn(r,this.previousInputImage),mask_now:pn(r,this.inputMask),mask_before:pn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:B,getUniforms:()=>({inputs:pn(r,this.inputMask),threshold:pn(r,H.output)})}),this.addStep({program:ut,getUniforms:()=>({texture:pn(r,B.output)})}),this.addStep({program:nt,getUniforms:()=>({texture:pn(r,ut.output)})}),this.addStep({program:T,getUniforms:()=>({texture:pn(r,nt.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var $e,ze,We,jt,Nn,ne,gt,qe;const Tt=(ze=($e=this.inputImage)==null?void 0:$e.width)!=null?ze:1,Lt=(jt=(We=this.inputImage)==null?void 0:We.height)!=null?jt:1,at=(ne=(Nn=this.inputMask)==null?void 0:Nn.width)!=null?ne:1,mt=(qe=(gt=this.inputMask)==null?void 0:gt.height)!=null?qe:1,Bt=Math.max(Tt/at,Lt/mt),kt=Math.max(1,Math.sqrt(Bt)*.66),ee=1/Tt,P=1/Lt;return{input_frame:pn(r,this.inputImage),segmentation_mask:pn(r,this.inputMask),threshold:pn(r,T.output),texel_size:[ee,P],step:kt,radius:Bt,offset:kt>1?kt*.5:0,sigma_texel:Math.max(ee,P)*Bt,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(r,m){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:m,this.inputImage=r,this.inputMask=m}setOptions(r){this.options=r}resizeOutput(r,m){super.resizeOutput(r,m),this.output=this.jointBilateral.output}}var Al=(i=>(i.PUSH="PUSH",i.POP="POP",i))(Al||{});class q0{constructor(n){Zt(this,"context");Zt(this,"extension");Zt(this,"queries",[]);Zt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await Bl(200)}}}class _i{constructor(){Zt(this,"canvas");Zt(this,"context");Zt(this,"pipeline");Zt(this,"previousImageWidth",0);Zt(this,"previousImageHeight",0);Zt(this,"previousMaskWidth",Nr);Zt(this,"previousMaskHeight",Nr);Zt(this,"profiler");Zt(this,"postProcessingEnabled",!0);Zt(this,"improveMask");const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r,this.improveMask=new $0(this.context,Nr,Nr)}setFlickeringOptions(n){this.improveMask.setOptions(n)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(n){const r=new q0(this.context);return this.profiler=r,r.start(),await Bl(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}async render(n,r){var S,H;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==n.height||this.previousImageWidth!==n.width)&&this.resizeOutput(n.width,n.height),(this.previousMaskHeight!==r.height||this.previousMaskWidth!==r.width)&&(this.improveMask.resizeOutput(r.width,r.height),this.previousMaskWidth=r.width,this.previousMaskHeight=r.height);const m="renderer";(S=this.profiler)==null||S.pushContext(m),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let X=r;return this.postProcessingEnabled&&(this.improveMask.setData(n,r),this.improveMask.run(),X=this.improveMask.output),this.pipeline.setData(n,X),await this.pipeline.run(),(H=this.profiler)==null||H.popContext(m),this.canvas}resizeOutput(n,r){var m;this.canvas.width=n,this.canvas.height=r,(m=this.pipeline)==null||m.resizeOutput(n,r),this.previousImageWidth=n,this.previousImageHeight=r}}class Kl extends _i{constructor(){super();Zt(this,"pipeline");Zt(this,"backgroundImage");Zt(this,"backgroundImageResizerCanvas");Zt(this,"backgroundImageResizerContext");Zt(this,"backgroundImageResizer");this.pipeline=new El(this.context);const r=new OffscreenCanvas(0,0),m=r.getContext("webgl2");if(!m)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=r,this.backgroundImageResizerContext=m,this.backgroundImageResizer=new C0(this.backgroundImageResizerContext,0,0)}setBackgroundImage(r){this.backgroundImage=r,this.updateBackgroundImage()}updateBackgroundImage(){const{width:r,height:m}=this.canvas;this.backgroundImageResizer.resizeOutput(r,m),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(r,m){super.resizeOutput(r,m),this.backgroundImageResizerCanvas.width=r,this.backgroundImageResizerCanvas.height=m,this.backgroundImageResizer.resizeOutput(r,m),this.updateBackgroundImage()}}class t3 extends Kl{constructor(){super(...arguments);Zt(this,"frameReader")}setBackgroundVideo(r){this.frameReader=r.getReader(),this.readNextVideoFrame()}async render(r,m){return await this.readNextVideoFrame(),super.render(r,m)}async readNextVideoFrame(){var m;const r=await((m=this.frameReader)==null?void 0:m.read());if(r!=null&&r.value){const X=await createImageBitmap(r.value);this.setBackgroundImage(X),r.value.close()}}}class jl{blurBackground(n){return new Rc(n)}blurSilhouette(n){return new xc(n)}imageBackground(){return new Ic}videoBackground(){return new t3}}const e3=`precision mediump float;
439
416
 
440
417
  varying vec2 _texture_coord;
418
+
419
+ uniform vec2 canvas;
441
420
  uniform sampler2D texture;
421
+ uniform sampler2D mask;
442
422
 
443
- void main() { gl_FragColor = texture2D(texture, _texture_coord); }
444
- `,D0=`varying vec2 _texture_coord;
423
+ vec4 loop();
424
+
425
+ void main() { gl_FragColor = loop(); }
426
+ `,n3=`varying vec2 _texture_coord;
445
427
 
446
428
  attribute vec2 position;
447
429
  attribute vec2 texture_coord;
448
- uniform bool invert_y;
449
430
 
450
431
  void main() {
451
432
  gl_Position = vec4(position, 0., 1.);
452
433
  _texture_coord = texture_coord;
453
- if (invert_y) {
454
- _texture_coord.y = 1. - texture_coord.y;
455
- }
456
434
  }
457
- `;class $0 extends Ir{getFragmentShader(){return Q0}getVertexShader(){return D0}}class q0 extends Mo{constructor(r,p,G){super();Wt(this,"inputImage");this.context=r;const S={context:r,height:G,width:p};this.addStep({program:new $0({...S,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}class t3{constructor(n){Wt(this,"resize");Wt(this,"canvas");Wt(this,"context");this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new q0(this.context,n.width,n.height)}resizeForeground(n,r){this.canvas.width=n,this.canvas.height=r,this.resize.resizeOutput(n,r)}async process(n){var r,p;return this.canvas.width=this.canvas.width,(r=this.resize)==null||r.setData(n),(p=this.resize)==null||p.run(),this.canvas}}class e3{constructor(n,r){Wt(this,"improveMaskSegmentation");Wt(this,"backgroundResizer");Wt(this,"backgroundImage");Wt(this,"backgroundVideo");Wt(this,"profiler");Wt(this,"activePipeline");Wt(this,"canvas");Wt(this,"options");Wt(this,"context");Wt(this,"virtualBGImage");this.id=n,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=r.foregroundWidth,this.canvas.height=r.foregroundHeight,this.improveMaskSegmentation=new _0(this.context,r.maskWidth,r.maskHeight),this.backgroundImage=new kl(this.context),this.backgroundVideo=new w0(this.context),this.backgroundResizer=new t3({width:r.foregroundWidth,height:r.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new T0(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new L0(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break;default:throw`Unknown transformer type [${n.transformerType}]`}this.options=n}setFlickeringOptions(n){var r;(r=this.improveMaskSegmentation)==null||r.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,r){var p,G,S,H,w,E,et;if(this.activePipeline&&n.width&&(r==null?void 0:r.width)){const ct=`[${this.id}] background-filter`;(p=this.profiler)==null||p.pushContext(ct);let dt=r;(((G=this.options)==null?void 0:G.selfieSegmentationType)&&((S=this.options)==null?void 0:S.selfieSegmentationType)==="PRECISE"||!((H=this.options)!=null&&H.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(n,r),this.improveMaskSegmentation.run(),dt=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),(w=this.activePipeline)==null||w.setData(n,dt),(E=this.activePipeline)==null||E.run(),(et=this.profiler)==null||et.popContext(ct)}}async resizeForeground(n,r){var p;this.canvas.width=n,this.canvas.height=r,this.backgroundImage.resizeOutput(n,r),this.backgroundVideo.resizeOutput(n,r),this.backgroundResizer.resizeForeground(n,r),(p=this.activePipeline)==null||p.resizeOutput(n,r),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(n){const r=new Z1(this.context);return this.profiler=r,r.start(),await Xs(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}getBlurSize(n=Ar.Low){switch(n){case Ar.Low:return 5;case Ar.High:return 12}return n}}class Bl{constructor(){Wt(this,"selfieSegmentation",new us);Wt(this,"backgroundFilter");Wt(this,"reporter",new y1);Wt(this,"previousDimensions",{width:0,height:0});Wt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath);const{width:p,height:G}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new e3(n,{foregroundWidth:1,foregroundHeight:1,maskWidth:p,maskHeight:G}),this.report({variation:"Create"})}async transform(n,r){var H,w,E,et;const p=(H=n.timestamp)!=null?H:0,G=await createImageBitmap(n),S=await this.selfieSegmentation.process(G);S?((G.width!==this.previousDimensions.width||G.height!==this.previousDimensions.height)&&(this.previousDimensions.width=G.width,this.previousDimensions.height=G.height,await((w=this.backgroundFilter)==null?void 0:w.resizeForeground(G.width,G.height))),await((E=this.backgroundFilter)==null?void 0:E.process(G,S)),n.close(),r.enqueue(new VideoFrame((et=this.backgroundFilter)==null?void 0:et.canvas,{timestamp:p,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,p;return(p=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?p:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}report(n){var r;this.reporter.send({version:g1,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const _o=class{constructor(){Wt(this,"backgroundTransformer",new Bl);Wt(this,"mediaProcessor",new V2);Wt(this,"rate",30);Wt(this,"resolveOnMediaProcessor");Wt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((p,G)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:p,data:G}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:p,data:G})})}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){g2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let zo=_o;(()=>{M2("ProcessorWorker",_o)})();const Al="dmFyIGlsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgb2w9KHEsWCx6KT0+WCBpbiBxP2lsKHEsWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pOnFbWF09ejt2YXIgcD0ocSxYLHopPT4ob2wocSx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLHopLHopOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBxKHIsZSl7cmV0dXJuIGdsb2JhbFRoaXNbcl18fChnbG9iYWxUaGlzW3JdPWUpLGdsb2JhbFRoaXNbcl19Y29uc3QgWD1xKCJnbG9iYWxzIix7fSk7dmFyIHo9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHp8fHt9KTtmdW5jdGlvbiBwaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIHplKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+cGkobykpKX1xKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gU3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIFdlKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxXZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sV2Uoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIHlpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7emUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFJyPXEoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gX2kocixlKXtlLndvcmtlcklkPXIsU3IoKSYmKFJyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIHhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPVJyW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7V2UobixYKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBnaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIGJpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO1dlKHIuYXJnc1swXSxYKSx6ZShyLHt9KX1mdW5jdGlvbiB2aSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIHouSU5JVDp4aSh0LHIpO2JyZWFrO2Nhc2Ugei5GT1JXQVJEOnlpKHQscik7YnJlYWs7Y2FzZSB6LlRFUk1JTkFURTpnaSh0LHIpO2JyZWFrO2Nhc2Ugei5HTE9CQUxTX1NZTkM6YmkodCk7YnJlYWt9fX1TcigpJiZ2aSgpO3ZhciBFaT1PYmplY3QuZGVmaW5lUHJvcGVydHksVGk9KHIsZSx0KT0+ZSBpbiByP0VpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxBPShyLGUsdCk9PihUaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y2xhc3MgSnt9QShKLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksQShKLCJlcnJvcnMiLHt0cmFuc2Zvcm1lcl9ub25lOiJObyB0cmFuc2Zvcm1lcnMgcHJvdmlkZWQiLHRyYW5zZm9ybWVyX3N0YXJ0OiJDYW5ub3Qgc3RhcnQgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX3RyYW5zZm9ybToiQ2Fubm90IHRyYW5zZm9ybSBmcmFtZSIsdHJhbnNmb3JtZXJfZmx1c2g6IkNhbm5vdCBmbHVzaCB0cmFuc2Zvcm1lciIscmVhZGFibGVfbnVsbDoiUmVhZGFibGUgaXMgbnVsbCIsd3JpdGFibGVfbnVsbDoiV3JpdGFibGUgaXMgbnVsbCJ9KTtjb25zdCBlZT1uZXcgV2Vha01hcCxWZT1uZXcgV2Vha01hcCxSZT1uZXcgV2Vha01hcCxSdD1TeW1ib2woImFueVByb2R1Y2VyIiksSXI9UHJvbWlzZS5yZXNvbHZlKCksSGU9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksWWU9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgSXQ9ITE7ZnVuY3Rpb24gYmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBqZShyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2ZShyLGUpe2NvbnN0IHQ9VmUuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBJZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpSdCxuPVJlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gQWkocixlLHQpe2NvbnN0IG49UmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhSdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KFJ0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIEZyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpSWUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlJZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIFByKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIERyO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighRHIuaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBGdD1yPT5yPT09SGV8fHI9PT1ZZTtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Qcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIEl0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fEl0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7SXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtlZS5zZXQodGhpcyxuZXcgU2V0KSxWZS5zZXQodGhpcyxuZXcgTWFwKSxSZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9Pnt0cnl7bz1KU09OLnN0cmluZ2lmeShvKX1jYXRjaHtvPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhvKS5qb2luKCIsIil9YH10eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGZlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7amUodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpYmUobiksdmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksRnQobil8fHRoaXMuZW1pdChIZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtqZSh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSliZShuKSx2ZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLEZ0KG4pfHx0aGlzLmVtaXQoWWUse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpYmUodCk7cmV0dXJuIEZyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe2JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksQWkodGhpcyxlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPUZ0KGUpP1tdOlsuLi5pXTthd2FpdCBJcixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtiZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49dmUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBJcjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gamUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxlZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChIZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBGcih0aGlzKX1vZmZBbnkoZSl7amUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChZZSx7bGlzdGVuZXI6ZX0pLGVlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7dmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49SWUodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7ZWUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9ZWUuZ2V0KHRoaXMpLnNpemUrdmUodGhpcyxuKS5zaXplK0llKHRoaXMsbikuc2l6ZStJZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmYmUobiksdCs9ZWUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgVmUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBSZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9UHIodCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IERyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZmUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpIZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6WWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgUHQ9ZmU7ZnVuY3Rpb24gd2kocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIFNpKHIpe2lmKHdpKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIER0KHIpe3JldHVybiBTaShyKS5tZXNzYWdlfXZhciBSaT1PYmplY3QuZGVmaW5lUHJvcGVydHksSWk9KHIsZSx0KT0+ZSBpbiByP1JpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxGaT0ocixlLHQpPT4oSWkocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NvbnN0IFBpPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsRGk9Imh0dHBzOi8vIixOaT0xZTQ7bGV0IFhlO2NvbnN0IE1pPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBVaSgpe2lmKCFYZSYmKFhlPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhWGUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gWGUoTWkpfWNvbnN0IE09W107Zm9yKGxldCByPTA7cjwyNTY7KytyKU0ucHVzaCgocisyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24ga2kocixlPTApe3JldHVybihNW3JbZSswXV0rTVtyW2UrMV1dK01bcltlKzJdXStNW3JbZSszXV0rIi0iK01bcltlKzRdXStNW3JbZSs1XV0rIi0iK01bcltlKzZdXStNW3JbZSs3XV0rIi0iK01bcltlKzhdXStNW3JbZSs5XV0rIi0iK01bcltlKzEwXV0rTVtyW2UrMTFdXStNW3JbZSsxMl1dK01bcltlKzEzXV0rTVtyW2UrMTRdXStNW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IENpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLE5yPXtyYW5kb21VVUlEOkNpfTtmdW5jdGlvbiBPaShyLGUsdCl7aWYoTnIucmFuZG9tVVVJRCYmIWUmJiFyKXJldHVybiBOci5yYW5kb21VVUlEKCk7cj1yfHx7fTtjb25zdCBuPXIucmFuZG9tfHwoci5ybmd8fFVpKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IobGV0IGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4ga2kobil9ZnVuY3Rpb24gTnQocixlKXtyZXR1cm4gZ2xvYmFsVGhpc1tyXXx8KGdsb2JhbFRoaXNbcl09ZSksZ2xvYmFsVGhpc1tyXX1jb25zdCB0ZT1OdCgiZ2xvYmFscyIse30pO3ZhciBsZT0ocj0+KHIuSU5JVD0iSU5JVCIsci5GT1JXQVJEPSJGT1JXQVJEIixyLlRFUk1JTkFURT0iVEVSTUlOQVRFIixyLkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIixyKSkobGV8fHt9KTtmdW5jdGlvbiBNcihyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWxldCBCaT0wO2Z1bmN0aW9uIExpKHIsZSx0LG4saSl7Y29uc3Qgbz1CaSsrO3JldHVybiByLnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6ZSxmdW5jdGlvbk5hbWU6dCxhcmdzOm59LG4uZmlsdGVyKHM9Pk1yKHMpKSksbmV3IFByb21pc2Uocz0+e2k9PW51bGx8fGkuc2V0KG8scyl9KX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89Pk1yKG8pKSl9Y29uc3QgVXI9TnQoIndvcmtlcml6ZWQiLHt9KTtmdW5jdGlvbiBrcigpe3JldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9YXN5bmMgZnVuY3Rpb24gR2koKXtpZihrcigpKUZlKHt0eXBlOmxlLkdMT0JBTFNfU1lOQ30sdGUpO2Vsc2V7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBpbiBVcil7Y29uc3R7d29ya2VyOnQscmVzb2x2ZXJzOm59PVVyW2VdLndvcmtlckNvbnRleHQ7dCYmci5wdXNoKExpKHQsbGUuR0xPQkFMU19TWU5DLCIiLFt0ZV0sbikpfWF3YWl0IFByb21pc2UuYWxsKHIpfX1mdW5jdGlvbiBRZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sUWUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFFlKHJbdF0sZVt0XSkpOmVbdF09clt0XX1hc3luYyBmdW5jdGlvbiAkaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO0ZlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCB6aT1OdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBXaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT16aVt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1FlKG4sdGUpLEZlKHIsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIFZpKHIsZSl7Y29uc3R7YXJnczp0fT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnQhPW51bGw/dDpbXSkpLEZlKHIsbil9ZnVuY3Rpb24gSGkocil7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7UWUoci5hcmdzWzBdLHRlKSxGZShyLHt9KX1mdW5jdGlvbiBZaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIGxlLklOSVQ6V2kodCxyKTticmVhaztjYXNlIGxlLkZPUldBUkQ6JGkodCxyKTticmVhaztjYXNlIGxlLlRFUk1JTkFURTpWaSh0LHIpO2JyZWFrO2Nhc2UgbGUuR0xPQkFMU19TWU5DOkhpKHQpO2JyZWFrfX19a3IoKSYmWWkoKTtmdW5jdGlvbiBqaShyLGUpe3JldHVybiB0ZVtyXXx8KHRlW3JdPWUpLFsoKT0+dGVbcl0sYXN5bmMgdD0+e3RlW3JdPXQsYXdhaXQgR2koKX1dfWZ1bmN0aW9uIFhpKHIsZSl7cmV0dXJuIGppKHIsZSl9Y29uc3RbUWksS2ldPVhpKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIHFpKHIpe0tpKHIpfWZ1bmN0aW9uIE10KCl7cmV0dXJuIFFpKCl9Y2xhc3MgVXR7Y29uc3RydWN0b3IoZSl7RmkodGhpcywidXVpZCIsT2koKSksdGhpcy5jb25maWc9ZX1hc3luYyBzZW5kKGUpe3ZhciB0LG4saTtjb25zdHthcHBJZDpvLHNvdXJjZVR5cGU6c309KHQ9TXQoKSkhPW51bGw/dDp7fTtpZighb3x8IXMpcmV0dXJuIm1ldGFkYXRhIG1pc3NpbmciO2NvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldFRpbWVvdXQoKCk9PmEuYWJvcnQoKSxOaSk7cmV0dXJuIGF3YWl0KChpPShuPXRoaXMuY29uZmlnKT09bnVsbD92b2lkIDA6bi5mZXRjaCkhPW51bGw/aTpmZXRjaCkodGhpcy5nZXRVcmwoKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuZ2V0SGVhZGVycygpLGJvZHk6SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFJlcG9ydChlKSksc2lnbmFsOmEuc2lnbmFsfSksY2xlYXJUaW1lb3V0KHUpLCJzdWNjZXNzIn1nZXRVcmwoKXt2YXIgZTtsZXQgdD0oZT1NdCgpLnByb3h5VXJsKSE9bnVsbD9lOkRpO3JldHVybiB0Kz0odC5hdCgtMSk9PT0iLyI/IiI6Ii8iKStQaSx0fWdldEhlYWRlcnMoKXtyZXR1cm57IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX1idWlsZFJlcG9ydChlKXtjb25zdCB0PU10KCk7cmV0dXJue2d1aWQ6dGhpcy51dWlkLC4uLmUsYXBwbGljYXRpb25JZDp0LmFwcElkLHRpbWVzdGFtcDpEYXRlLm5vdygpLHByb3h5VXJsOnQucHJveHlVcmwsc291cmNlOnQuc291cmNlVHlwZX19fWNvbnN0IEtlPSIyLjAuMiI7Y2xhc3MgSml7Y29uc3RydWN0b3IoZSl7QSh0aGlzLCJmcmFtZVRyYW5zZm9ybWVkQ291bnQiLDApLEEodGhpcywiZnJhbWVGcm9tU291cmNlQ291bnQiLDApLEEodGhpcywic3RhcnRBdCIsMCksQSh0aGlzLCJyZXBvcnRlciIpLHRoaXMuY29uZmlnPWUsdGhpcy5yZXBvcnRlcj1uZXcgVXQoZSl9YXN5bmMgb25GcmFtZUZyb21Tb3VyY2UoKXt0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50Kyt9Z2V0IGZwcygpe2NvbnN0e3N0YXJ0QXQ6ZSxmcmFtZUZyb21Tb3VyY2VDb3VudDp0fT10aGlzLG49KERhdGUubm93KCktZSkvMWUzO3JldHVybiB0L259YXN5bmMgb25GcmFtZVRyYW5zZm9ybWVkKGU9e30sdD0hMSl7dGhpcy5zdGFydEF0PT09MCYmKHRoaXMuc3RhcnRBdD1EYXRlLm5vdygpKSx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudCsrO2NvbnN0e3N0YXJ0QXQ6bixmcmFtZVRyYW5zZm9ybWVkQ291bnQ6aSxmcmFtZUZyb21Tb3VyY2VDb3VudDpvfT10aGlzLHM9RGF0ZS5ub3coKSxhPShzLW4pLzFlMyx1PWkvYSxmPW8vYTtyZXR1cm4gdHx8dGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ+PXRoaXMuY29uZmlnLmxvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ/KHRoaXMuZnJhbWVGcm9tU291cmNlQ291bnQ9MCx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD0wLHRoaXMuc3RhcnRBdD1zLHRoaXMucmVwb3J0ZXIuY29uZmlnPXRoaXMuY29uZmlnLHRoaXMucmVwb3J0ZXIuc2VuZCh7Li4udGhpcy5jb25maWcucmVwb3J0LHZhcmlhdGlvbjoiUW9TIixmcHM6Zix0cmFuc2Zvcm1lZEZwczp1LGZyYW1lc1RyYW5zZm9ybWVkOmksLi4uZX0pKToic3VjY2VzcyJ9fXZhciBrdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShrdHx8e30pO2NvbnN0IFppPTUwMCxlbz0uODtjbGFzcyB0byBleHRlbmRzIFB0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSxBKHRoaXMsInJlcG9ydGVyXyIsbmV3IFV0KSxBKHRoaXMsInJlcG9ydGVyUW9zXyIsbmV3IEppKHtsb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50OlppLHJlcG9ydDp7dmVyc2lvbjpLZX19KSksQSh0aGlzLCJ0cmFuc2Zvcm1lclR5cGVfIiksQSh0aGlzLCJ0cmFuc2Zvcm1lcl8iKSxBKHRoaXMsInNob3VsZFN0b3BfIiksQSh0aGlzLCJpc0ZsYXNoZWRfIiksQSh0aGlzLCJtZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfIiksQSh0aGlzLCJ2aWRlb0hlaWdodF8iKSxBKHRoaXMsInZpZGVvV2lkdGhfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSxBKHRoaXMsImluZGV4XyIpLEEodGhpcywiY29udHJvbGxlcl8iKSx0aGlzLmluZGV4Xz10LHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfc3RhcnQsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJzdGFydCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbixpLG8scztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KG49ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9uOjAsdGhpcy52aWRlb1dpZHRoXz0oaT1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/aTowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpKLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKmVvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Si5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6RHQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246S2UsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIHJvIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInRyYWNrRXhwZWN0ZWRSYXRlXyIpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IHRvKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIG5vIGV4dGVuZHMgUHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLEEodGhpcywicmVwb3J0ZXJfIiksQSh0aGlzLCJwaXBlbGluZV8iKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInJlYWRhYmxlXyIpLEEodGhpcywid3JpdGFibGVfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnJlcG9ydGVyXz1uZXcgVXQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOkouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpKLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOkouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IHJvKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixpPT57biYmKGk9PT0icGlwZWxpbmVfc3RhcnRlZCI/aT1rdC5waXBlbGluZV9yZXN0YXJ0ZWQ6aT09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYoaT1rdC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixpKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2goaT0+e3QoaSl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOkoudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOktlLGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIGlvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvbz0ocixlLHQpPT5lIGluIHI/aW8ocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LHNvPShyLGUsdCk9PihvbyhyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgYW89ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIix1bz0iaHR0cHM6Ly8iLGNvPTFlNDtsZXQgcWU7Y29uc3QgZm89bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGxvKCl7aWYoIXFlJiYocWU9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFxZSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBxZShmbyl9Y29uc3QgVT1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpVS5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBtbyhyLGU9MCl7cmV0dXJuKFVbcltlKzBdXStVW3JbZSsxXV0rVVtyW2UrMl1dK1VbcltlKzNdXSsiLSIrVVtyW2UrNF1dK1VbcltlKzVdXSsiLSIrVVtyW2UrNl1dK1VbcltlKzddXSsiLSIrVVtyW2UrOF1dK1VbcltlKzldXSsiLSIrVVtyW2UrMTBdXStVW3JbZSsxMV1dK1VbcltlKzEyXV0rVVtyW2UrMTNdXStVW3JbZSsxNF1dK1VbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgaG89dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksQ3I9e3JhbmRvbVVVSUQ6aG99O2Z1bmN0aW9uIHBvKHIsZSx0KXtpZihDci5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIENyLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8bG8pKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBtbyhuKX1mdW5jdGlvbiBDdChyLGUpe3JldHVybiBnbG9iYWxUaGlzW3JdfHwoZ2xvYmFsVGhpc1tyXT1lKSxnbG9iYWxUaGlzW3JdfWNvbnN0IHJlPUN0KCJnbG9iYWxzIix7fSk7dmFyIGRlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShkZXx8e30pO2Z1bmN0aW9uIE9yKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IHlvPTA7ZnVuY3Rpb24gX28ocixlLHQsbixpKXtjb25zdCBvPXlvKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+T3IocykpKSxuZXcgUHJvbWlzZShzPT57aT09bnVsbHx8aS5zZXQobyxzKX0pfWZ1bmN0aW9uIFBlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+T3IobykpKX1jb25zdCBCcj1DdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIExyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB4bygpe2lmKExyKCkpUGUoe3R5cGU6ZGUuR0xPQkFMU19TWU5DfSxyZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIEJyKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09QnJbZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goX28odCxkZS5HTE9CQUxTX1NZTkMsIiIsW3JlXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIEplKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxKZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sSmUoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGdvKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7UGUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IGJvPUN0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIHZvKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPWJvW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7SmUobixyZSksUGUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gRW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksUGUocixuKX1mdW5jdGlvbiBUbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtKZShyLmFyZ3NbMF0scmUpLFBlKHIse30pfWZ1bmN0aW9uIEFvKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgZGUuSU5JVDp2byh0LHIpO2JyZWFrO2Nhc2UgZGUuRk9SV0FSRDpnbyh0LHIpO2JyZWFrO2Nhc2UgZGUuVEVSTUlOQVRFOkVvKHQscik7YnJlYWs7Y2FzZSBkZS5HTE9CQUxTX1NZTkM6VG8odCk7YnJlYWt9fX1McigpJiZBbygpO2Z1bmN0aW9uIHdvKHIsZSl7cmV0dXJuIHJlW3JdfHwocmVbcl09ZSksWygpPT5yZVtyXSxhc3luYyB0PT57cmVbcl09dCxhd2FpdCB4bygpfV19ZnVuY3Rpb24gU28ocixlKXtyZXR1cm4gd28ocixlKX1jb25zdFtSbyxzbF09U28oIm1ldGFkYXRhIik7ZnVuY3Rpb24gT3QoKXtyZXR1cm4gUm8oKX1jbGFzcyBJb3tjb25zdHJ1Y3RvcihlKXtzbyh0aGlzLCJ1dWlkIixwbygpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixpO2NvbnN0e2FwcElkOm8sc291cmNlVHlwZTpzfT0odD1PdCgpKSE9bnVsbD90Ont9O2lmKCFvfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLGNvKTtyZXR1cm4gYXdhaXQoKGk9KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9pOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPU90KCkucHJveHlVcmwpIT1udWxsP2U6dW87cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK2FvLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9T3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgRm89IjQuMy42Ijt2YXIgWmU9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShaZXx8e30pO2FzeW5jIGZ1bmN0aW9uIEdyKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBQb3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IEdyKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMy4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgQnQ9NTEyMCxEZT01MTIxLEx0PTUxMjIsR3Q9NTEyMywkdD01MTI0LHp0PTUxMjUsV3Q9NTEyNixEbz0zMjgxOSxObz0zMjgyMCxNbz0zMzYzNSxVbz01MTMxLGtvPTMzNjQwLENvPTM1ODk5LE9vPTM1OTAyLEJvPTM2MjY5LExvPTM0MDQyLCRyPXt9O3tjb25zdCByPSRyO3JbQnRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbTHRdPUludDE2QXJyYXkscltHdF09VWludDE2QXJyYXksclskdF09SW50MzJBcnJheSxyW3p0XT1VaW50MzJBcnJheSxyW1d0XT1GbG9hdDMyQXJyYXkscltEb109VWludDE2QXJyYXkscltOb109VWludDE2QXJyYXkscltNb109VWludDE2QXJyYXkscltVb109VWludDE2QXJyYXkscltrb109VWludDMyQXJyYXkscltDb109VWludDMyQXJyYXkscltPb109VWludDMyQXJyYXkscltCb109VWludDMyQXJyYXkscltMb109VWludDMyQXJyYXl9ZnVuY3Rpb24gVnQocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gQnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuICR0O2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4genQ7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24genIocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gQnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIEx0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gR3Q7aWYocj09PUludDMyQXJyYXkpcmV0dXJuICR0O2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4genQ7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gV3Q7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gV3Iocil7Y29uc3QgZT0kcltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGV0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVnIoLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBIcj1uZXcgTWFwO2Z1bmN0aW9uIHR0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Ici5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsSHIuc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBHbyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ0dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uICRvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnR0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gSHQocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnR0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIHpvKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ0dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBZcj0zNTA0NCxtZT0zNDk2MixXbz0zNDk2MyxWbz0zNDY2MCxIbz01MTIwLFlvPTUxMjEsam89NTEyMixYbz01MTIzLFFvPTUxMjQsS289NTEyNSxqcj01MTI2LFhyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFvKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHxZcil9ZnVuY3Rpb24gUXIocixlLHQsbil7aWYoR28ocixlKSlyZXR1cm4gZTt0PXR8fG1lO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcW8ocix0LGksZSxuKSxpfWZ1bmN0aW9uIEtyKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIEpvKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBabyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZXM9L2Nvb3JkfHRleHR1cmUvaSx0cz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gcnMocixlKXtsZXQgdDtpZihlcy50ZXN0KHIpP3Q9Mjp0cy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBucyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxycyhlLHR8fFpvKHIpLmxlbmd0aCl9ZnVuY3Rpb24gcXIocixlKXtpZihldChyKSlyZXR1cm4gcjtpZihldChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9ZdChyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEtyKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gaXMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/enIocik6anJ9ZnVuY3Rpb24gWXQocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9XcihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gb3MocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmlzKGUudHlwZSksYXJyYXlUeXBlOll0KGUudHlwZSl9fWZ1bmN0aW9uIHNzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1ZdChlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKG1lLG8pLHIuYnVmZmVyRGF0YShtZSxpLGUuZHJhd1R5cGV8fFlyKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp6cihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gYXMocixlLHQpe2NvbnN0IG49cXIoZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOlFyKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpWdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gdXMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFLcihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxYci5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWV0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9b3M6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXNzOnM9YXM7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpkfT1zKHIsaSxuKSxoPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOkpvKGQpLHk9bnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmgsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIobWUsbnVsbCksdH1mdW5jdGlvbiBjcyhyLGUpe3JldHVybiBlPT09SG98fGU9PT1Zbz8xOmU9PT1qb3x8ZT09PVhvPzI6ZT09PVFvfHxlPT09S298fGU9PT1qcj80OjB9Y29uc3QganQ9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBmcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPGp0Lmxlbmd0aCYmKHQ9anRbbl0sISh0IGluIGV8fCh0PVhyLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1qdC5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihtZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihtZSxWbyk7ci5iaW5kQnVmZmVyKG1lLG51bGwpO2NvbnN0IHM9Y3MocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGxzKHIsZSx0KXtjb25zdCBuPXVzKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPXFyKG8sImluZGljZXMiKTtpLmluZGljZXM9UXIocixzLFdvKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9VnQocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1mcyhyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIE5lKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgSnI9ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxuZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LE1lPWV0LFpyPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxlbj02NDA2LFE9NjQwNyxGPTY0MDgsdG49NjQwOSxybj02NDEwLFVlPTY0MDIsbm49MzQwNDEscnQ9MzMwNzEsZHM9OTcyOCxtcz05NzI5LGllPTM1NTMsb2U9MzQwNjcsaGU9MzI4NzkscGU9MzU4NjYsWHQ9MzQwNjksaHM9MzQwNzAscHM9MzQwNzEseXM9MzQwNzIsX3M9MzQwNzMseHM9MzQwNzQsUXQ9MTAyNDEsS3Q9MTAyNDAsbnQ9MTAyNDIsaXQ9MTAyNDMsb249MzI4ODIsZ3M9MzMwODIsYnM9MzMwODMsdnM9MzMwODQsRXM9MzMwODUscXQ9MzMxNyxzbj0zMzE0LGFuPTMyODc4LHVuPTMzMTYsY249MzMxNSxmbj0zMjg3NyxUcz0zNzQ0MyxBcz0zNzQ0MSx3cz0zNzQ0MCxTcz0zMzMyMSxScz0zNjc1NixJcz0zMzMyNSxGcz0zMzMyNixQcz0zMzMzMCxEcz0zMzMyOSxOcz0zMzMzOCxNcz0zMzMzNyxVcz0zMzM0MCxrcz0zMzMzOSxDcz0zMzMyMyxPcz0zNjc1NyxCcz0zMzMyNyxMcz0zMzMyOCxHcz0zMzMzNiwkcz0zMzMzNSx6cz0zMzMzMixXcz0zMzMzMSxWcz0zMzMzNCxIcz0zMzMzMyxZcz0zMjg0OSxqcz0zNTkwNSxYcz0zNjE5NCxRcz0zNjc1OCxLcz0zNTg5OCxxcz0zNTkwMSxKcz0zNDg0Myxacz0zNDgzNyxlYT0zNjIyMSx0YT0zNjIzOSxyYT0zNjIxNSxuYT0zNjIzMyxpYT0zNjIwOSxvYT0zNjIyNyxzYT0zMjg1NixhYT0zNTkwNyx1YT0zNjc1OSxjYT0zMjg1NSxmYT0zMjg1NCxsYT0zMjg1NyxkYT0zNDg0MixtYT0zNDgzNixoYT0zNjIyMCxwYT0zNjIzOCx5YT0zNjk3NSxfYT0zNjIxNCx4YT0zNjIzMixnYT0zNjIyNixiYT0zNjIwOCx2YT0zMzE4OSxFYT0zMzE5MCxUYT0zNjAxMixBYT0zNjAxMyx3YT0zNTA1NixzZT01MTIwLFI9NTEyMSxvdD01MTIyLEVlPTUxMjMsc3Q9NTEyNCx5ZT01MTI1LEM9NTEyNixsbj0zMjgxOSxkbj0zMjgyMCxtbj0zMzYzNSxXPTUxMzEsa2U9MzYxOTMsSnQ9MzM2NDAsU2E9MzU4OTksUmE9MzU5MDIsSWE9MzYyNjksRmE9MzQwNDIsYXQ9MzMzMTksVGU9MzMzMjAsdXQ9NjQwMyxBZT0zNjI0NCx3ZT0zNjI0OCxfZT0zNjI0OTtsZXQgWnQ7ZnVuY3Rpb24gY3Qocil7aWYoIVp0KXtjb25zdCBlPXt9O2VbZW5dPXt0ZXh0dXJlRm9ybWF0OmVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W1IsVyxrZSxDXX0sZVt0bl09e3RleHR1cmVGb3JtYXQ6dG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUixXLGtlLENdfSxlW3JuXT17dGV4dHVyZUZvcm1hdDpybixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltSLFcsa2UsQ119LGVbUV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltSLFcsa2UsQyxtbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W1IsVyxrZSxDLGxuLGRuXX0sZVtVZV09e3RleHR1cmVGb3JtYXQ6VWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt5ZSxFZV19LGVbU3NdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW1JzXT17dGV4dHVyZUZvcm1hdDp1dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbSXNdPXt0ZXh0dXJlRm9ybWF0OnV0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQyxXXX0sZVtGc109e3RleHR1cmVGb3JtYXQ6dXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQ119LGVbUHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1JdfSxlW0RzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbenNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W0VlXX0sZVtXc109e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbb3RdfSxlW1ZzXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbSHNdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3N0XX0sZVtDc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbT3NdPXt0ZXh0dXJlRm9ybWF0OmF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtCc109e3RleHR1cmVGb3JtYXQ6YXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltDLFddfSxlW0xzXT17dGV4dHVyZUZvcm1hdDphdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltDXX0sZVtHc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUl19LGVbJHNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtOc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbRWVdfSxlW01zXT17dGV4dHVyZUZvcm1hdDpUZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltvdF19LGVbVXNdPXt0ZXh0dXJlRm9ybWF0OlRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3llXX0sZVtrc109e3RleHR1cmVGb3JtYXQ6VGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbc3RdfSxlW1lzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW2pzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW1hzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbUixtbl19LGVbUXNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbc2VdfSxlW0tzXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQyxXLFNhXX0sZVtxc109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0MsVyxSYV19LGVbSnNdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQyxXXX0sZVtac109e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQ119LGVbZWFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1JdfSxlW3RhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbcmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W0VlXX0sZVtuYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbb3RdfSxlW2lhXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeWVdfSxlW29hXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbc3RdfSxlW3NhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW2FhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtjYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbUixkbixKdF19LGVbZmFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltSLGxuXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltKdF19LGVbZGFdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQyxXXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQ119LGVbaGFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1JdfSxlW3BhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltzZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0p0XX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbRWVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltvdF19LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltzdF19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt5ZV19LGVbdmFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbRWUseWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDpVZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0OlVlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0NdfSxlW3dhXT17dGV4dHVyZUZvcm1hdDpubixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltGYV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0Om5uLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0lhXX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLFp0PWV9cmV0dXJuIFp0W3JdfWZ1bmN0aW9uIFBhKHIsZSl7Y29uc3QgdD1jdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBDZShyKXtjb25zdCBlPWN0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gaG4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gRGEocixlLHQsbil7aWYoIU5lKHIpKXJldHVybiBobihlKSYmaG4odCk7Y29uc3QgaT1jdChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE5hKHIpe2NvbnN0IGU9Y3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIE1hKHIsZSx0KXtyZXR1cm4gTWUoZSk/VnQoZSk6dHx8Un1mdW5jdGlvbiBmdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09b2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBTZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoVHMsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKEFzLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh3cyxlLmZsaXBZKX1mdW5jdGlvbiBwbihyKXtyLnBpeGVsU3RvcmVpKHF0LDQpLE5lKHIpJiYoci5waXhlbFN0b3JlaShzbiwwKSxyLnBpeGVsU3RvcmVpKGFuLDApLHIucGl4ZWxTdG9yZWkodW4sMCksci5waXhlbFN0b3JlaShjbiwwKSxyLnBpeGVsU3RvcmVpKGZuLDApKX1mdW5jdGlvbiBVYShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsUXQsbi5taW5NYWcpLHQuY2FsbChyLGUsS3Qsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxRdCxuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsS3Qsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsbnQsbi53cmFwKSx0LmNhbGwocixlLGl0LG4ud3JhcCksKGU9PT1oZXx8em8ocixlKSkmJnQuY2FsbChyLGUsb24sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxvbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLG50LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsaXQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUsZ3Msbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLGJzLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSx2cyxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSxFcyxuLm1heExldmVsKX1mdW5jdGlvbiB5bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLFVhKHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24ga2Eocil7cmV0dXJuIHI9cnx8bmUudGV4dHVyZUNvbG9yLE1lKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gZXIocixlLHQsbixpLG8pe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxEYShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1OYShvKT9tczpkcztyLnRleFBhcmFtZXRlcmkocyxRdCxhKSxyLnRleFBhcmFtZXRlcmkocyxLdCxhKSxyLnRleFBhcmFtZXRlcmkocyxudCxydCksci50ZXhQYXJhbWV0ZXJpKHMsaXQscnQpfX1mdW5jdGlvbiBPZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB0cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W1h0LGhzLHBzLHlzLF9zLHhzXX1mdW5jdGlvbiBycihyLGUpe2NvbnN0IG49dHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gX24ocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj1DZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxoPW4udHlwZXx8Zi50eXBlO2lmKFNlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1vZSl7Y29uc3QgeT10LndpZHRoLHg9dC5oZWlnaHQ7bGV0IGwsZztpZih5LzY9PT14KWw9eCxnPVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZih4LzY9PT15KWw9eSxnPVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT14LzIpbD15LzMsZz1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09eC8zKWw9eS8yLGc9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVpyKCk7RT8oRS5jYW52YXMud2lkdGg9bCxFLmNhbnZhcy5oZWlnaHQ9bCxzPWwsYT1sLHJyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBJPWdbdi5uZHgqMiswXSpsLEQ9Z1t2Lm5keCoyKzFdKmw7RS5kcmF3SW1hZ2UodCxJLEQsbCxsLDAsMCxsLGwpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQsaCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1sLGE9bCxycihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgST1nW3YubmR4KjIrMF0qbCxEPWdbdi5uZHgqMisxXSpsO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGwsbCwwLGQsaCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEksRCxsLGwse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7U2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsZCxoLEcpLE9lKG4pJiZlcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1oZXx8aT09PXBlKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLHg9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbD14L3k7aWYobCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCBnPXQud2lkdGg9PT14PzE6MCxFPXQuaGVpZ2h0PT09eD8xOjA7ci5waXhlbFN0b3JlaShxdCwxKSxyLnBpeGVsU3RvcmVpKHNuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoYW4sMCksci5waXhlbFN0b3JlaShmbiwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxkLGgsbnVsbCk7Zm9yKGxldCB2PTA7djxsOysrdil7Y29uc3QgST12KnkqZyxEPXYqeSpFO3IucGl4ZWxTdG9yZWkodW4sSSksci5waXhlbFN0b3JlaShjbixEKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LHkseSwxLGQsaCx0KX1wbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxkLGgsdCk7T2UobikmJmVyKHIsZSxuLHMsYSx1KSx5bihyLGUsbil9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gQ2Eocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIE9hKHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFDYShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEJhKHIsZSx0KXt0PXR8fEJlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm5lLmNyb3NzT3JpZ2luLGU9T2EocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VnIodSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24geG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBucihyLGUsdCl7cmV0dXJuIHhuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6QmEocixlLHQpfWZ1bmN0aW9uIGlyKHIsZSx0KXt0PXR8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9a2EodC5jb2xvcik7aWYobj09PW9lKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKFh0K28sMCxGLDEsMSwwLEYsUixpKTtlbHNlIG49PT1oZXx8bj09PXBlP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsUixpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixSLGkpfWZ1bmN0aW9uIExhKHIsZSx0LG4pe3JldHVybiBuPW58fEJlLHQ9dHx8bmUudGV4dHVyZU9wdGlvbnMsaXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxucih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooX24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gR2EocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPUNlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxSLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1vZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtpcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBoPTY7Y29uc3QgeT1bXSx4PXRyKHIsdCk7bGV0IGw7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gZnVuY3Rpb24odixJKXstLWgsdj95LnB1c2godik6SS53aWR0aCE9PUkuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrSS5zcmMpOihTZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxoPT09NT90cigpLmZvckVhY2goZnVuY3Rpb24oRCl7ci50ZXhJbWFnZTJEKEQsbyxzLHUsZixJKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsSSksT2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLGg9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbCl9fWw9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gbnIoRSx0LmNyb3NzT3JpZ2luLGcoeFt2XSkpfSl9ZnVuY3Rpb24gJGEocixlLHQsbil7bj1ufHxCZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz1DZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UixmPXQudGFyZ2V0fHxwZTtpZihmIT09aGUmJmYhPT1wZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO2lyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9aS5sZW5ndGg7Y29uc3QgaD1bXTtsZXQgeTtjb25zdCB4PXQubGV2ZWx8fDA7bGV0IGw9dC53aWR0aCxnPXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gSShEKXtyZXR1cm4gZnVuY3Rpb24oRywkKXtpZigtLWQsRyloLnB1c2goRyk7ZWxzZXtpZihTZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGw9dC53aWR0aHx8JC53aWR0aCxnPXQuaGVpZ2h0fHwkLmhlaWdodCxyLnRleEltYWdlM0QoZix4LG8sbCxnLEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBaPTA7WjxFOysrWilyLnRleFN1YkltYWdlM0QoZix4LDAsMCxaLGwsZywxLGEsdSwkKX1lbHNle2xldCBaPSQsSDsoJC53aWR0aCE9PWx8fCQuaGVpZ2h0IT09ZykmJihIPVpyKCksWj1ILmNhbnZhcyxILmNhbnZhcy53aWR0aD1sLEguY2FudmFzLmhlaWdodD1nLEguZHJhd0ltYWdlKCQsMCwwLGwsZykpLHIudGV4U3ViSW1hZ2UzRChmLHgsMCwwLEQsbCxnLDEsYSx1LFopLEgmJlo9PT1ILmNhbnZhcyYmKEguY2FudmFzLndpZHRoPTAsSC5jYW52YXMuaGVpZ2h0PTApfU9lKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKGgubGVuZ3RoP2g6dm9pZCAwLGUseSl9fXk9aS5tYXAoZnVuY3Rpb24oRCxHKXtyZXR1cm4gbnIoRCx0LmNyb3NzT3JpZ2luLEkoRykpfSl9ZnVuY3Rpb24gemEocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8RixkPUNlKGYpLGg9bi5mb3JtYXR8fGQuZm9ybWF0LHk9bi50eXBlfHxNYShyLHQsZC50eXBlKTtpZihNZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPVdyKHkpO3Q9bmV3IEUodCl9Y29uc3QgeD1QYShmLHkpLGw9dC5ieXRlTGVuZ3RoL3g7aWYobCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrSnIocixoKTtsZXQgZztpZihpPT09aGV8fGk9PT1wZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChsKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitsO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KGc9ZnQocixpLHMsYSxsL28pLHM9Zy53aWR0aCxhPWcuaGVpZ2h0KTpzJiYoIW98fCFhKT8oZz1mdChyLGksbyxhLGwvcyksbz1nLndpZHRoLGE9Zy5oZWlnaHQpOihnPWZ0KHIsaSxvLHMsbC9hKSxvPWcud2lkdGgscz1nLmhlaWdodCk7ZWxzZSBnPWZ0KHIsaSxvLHMsbCksbz1nLndpZHRoLHM9Zy5oZWlnaHQ7aWYocG4ociksci5waXhlbFN0b3JlaShxdCxuLnVucGFja0FsaWdubWVudHx8MSksU2UocixuKSxpPT09b2Upe2NvbnN0IEU9eC90LkJZVEVTX1BFUl9FTEVNRU5ULHY9bC82KkU7cnIocixuKS5mb3JFYWNoKEk9Pntjb25zdCBEPXYqSS5uZHgsRz10LnN1YmFycmF5KEQsRCt2KTtyLnRleEltYWdlMkQoSS5mYWNlLHUsZixvLHMsMCxoLHksRyl9KX1lbHNlIGk9PT1oZXx8aT09PXBlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLGgseSx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAsaCx5LHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTp5fX1mdW5jdGlvbiBXYShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxGLHM9Q2UobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihTZShyLHQpLG49PT1vZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChYdCtmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWhlfHxuPT09cGU/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBnbihyLGUsdCl7dD10fHxCZSxlPWV8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8aWU7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8RjtyLmJpbmRUZXh0dXJlKGksbiksaT09PW9lJiYoci50ZXhQYXJhbWV0ZXJpKGksbnQscnQpLHIudGV4UGFyYW1ldGVyaShpLGl0LHJ0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpTGEocixuLGUsdCk7ZWxzZSBpZihNZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8TWUodVswXSkpKXtjb25zdCBmPXphKHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8eG4odVswXSkpP2k9PT1vZT9HYShyLG4sZSx0KTokYShyLG4sZSx0KTooX24ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgV2EocixuLGUpO3JldHVybiBPZShlKSYmZXIocixuLGUsbyxzLGEpLHluKHIsbixlKSxufWNvbnN0IG9yPVZyO2Z1bmN0aW9uIGJuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IGx0PTMzOTg0LGR0PTM0OTYyLFZhPTM0OTYzLEhhPTM1NzEzLFlhPTM1NzE0LGphPTM1NjMyLFhhPTM1NjMzLFFhPTM1OTgxLHZuPTM1NzE4LEthPTM1NzIxLHFhPTM1OTcxLEphPTM1MzgyLFphPTM1Mzk2LGV1PTM1Mzk4LHR1PTM1MzkyLHJ1PTM1Mzk1LG10PTUxMjYsRW49MzU2NjQsVG49MzU2NjUsQW49MzU2NjYsc3I9NTEyNCx3bj0zNTY2NyxTbj0zNTY2OCxSbj0zNTY2OSxJbj0zNTY3MCxGbj0zNTY3MSxQbj0zNTY3MixEbj0zNTY3MyxObj0zNTY3NCxNbj0zNTY3NSxVbj0zNTY3NixudT0zNTY3OCxpdT0zNTY4MCxvdT0zNTY3OSxzdT0zNTY4MixhdT0zNTY4NSx1dT0zNTY4NixjdT0zNTY4NyxmdT0zNTY4OCxsdT0zNTY4OSxkdT0zNTY5MCxtdT0zNjI4OSxodT0zNjI5MixwdT0zNjI5Myxhcj01MTI1LGtuPTM2Mjk0LENuPTM2Mjk1LE9uPTM2Mjk2LHl1PTM2Mjk4LF91PTM2Mjk5LHh1PTM2MzAwLGd1PTM2MzAzLGJ1PTM2MzA2LHZ1PTM2MzA3LEV1PTM2MzA4LFR1PTM2MzExLGh0PTM1NTMscHQ9MzQwNjcsdXI9MzI4NzkseXQ9MzU4NjYsYj17fTtmdW5jdGlvbiBCbihyLGUpe3JldHVybiBiW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBBdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiB3dShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gU3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIFJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBJdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gTG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gR24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uICRuKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiB6bihyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gV24ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIEZ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBQdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIER1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gTnUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBNdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIFV1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBrdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIE91KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEJ1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEx1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEd1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uICR1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHp1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEIocixlLHQsbil7Y29uc3QgaT1CbihyLGUpO3JldHVybiBOZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhOyFvfHxIdChyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKGx0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gTChyLGUsdCxuLGkpe2NvbnN0IG89Qm4ocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE5lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShsdCtzW2ZdKTtsZXQgZCxoO0h0KHIsdSk/KGQ9dSxoPW51bGwpOihkPXUudGV4dHVyZSxoPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGgpLHIuYmluZFRleHR1cmUobyxkKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUobHQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fWJbbXRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOkF1LGFycmF5U2V0dGVyOnd1fSxiW0VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTdSxjb2xzOjJ9LGJbVG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpSdSxjb2xzOjN9LGJbQW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpJdSxjb2xzOjR9LGJbc3JdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpMbixhcnJheVNldHRlcjpHbn0sYlt3bl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOiRuLGNvbHM6Mn0sYltTbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbUm5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6V24sY29sczo0fSxiW2FyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkZ1LGFycmF5U2V0dGVyOlB1fSxiW2tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOkR1LGNvbHM6Mn0sYltDbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6TnUsY29sczozfSxiW09uXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpNdSxjb2xzOjR9LGJbSW5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6TG4sYXJyYXlTZXR0ZXI6R259LGJbRm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6JG4sY29sczoyfSxiW1BuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjp6bixjb2xzOjN9LGJbRG5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlduLGNvbHM6NH0sYltObl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOlV1LHJvd3M6Mixjb2xzOjJ9LGJbTW5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjprdSxyb3dzOjMsY29sczozfSxiW1VuXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6Q3Uscm93czo0LGNvbHM6NH0sYlthdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOk91LHJvd3M6Mixjb2xzOjN9LGJbdXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpMdSxyb3dzOjIsY29sczo0fSxiW2N1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6QnUscm93czozLGNvbHM6Mn0sYltmdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOiR1LHJvd3M6Myxjb2xzOjR9LGJbbHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpHdSxyb3dzOjQsY29sczoyfSxiW2R1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6enUscm93czo0LGNvbHM6M30sYltudV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbaXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW291XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYltzdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6aHR9LGJbbXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2h1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH0sYltwdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbeXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Omh0fSxiW191XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp1cn0sYlt4dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6cHR9LGJbZ3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onl0fSxiW2J1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpodH0sYlt2dV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6dXJ9LGJbRXVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OnB0fSxiW1R1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjpMLGJpbmRQb2ludDp5dH07ZnVuY3Rpb24gX3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoZHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxtdCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxzcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB4dChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihkdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxhcix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBjcihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoZHQsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fG10LGQ9Ylt1XS5zaXplKnMsaD1vLm5vcm1hbGl6ZXx8ITEseT1vLm9mZnNldHx8MCx4PWQvaTtmb3IobGV0IGw9MDtsPGk7KytsKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZStsKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZStsLGEsdSxoLGQseSt4KmwpLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbCxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbbXRdPXtzaXplOjQsc2V0dGVyOl90fSxQW0VuXT17c2l6ZTo4LHNldHRlcjpfdH0sUFtUbl09e3NpemU6MTIsc2V0dGVyOl90fSxQW0FuXT17c2l6ZToxNixzZXR0ZXI6X3R9LFBbc3JdPXtzaXplOjQsc2V0dGVyOmFlfSxQW3duXT17c2l6ZTo4LHNldHRlcjphZX0sUFtTbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW1JuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYXJdPXtzaXplOjQsc2V0dGVyOnh0fSxQW2tuXT17c2l6ZTo4LHNldHRlcjp4dH0sUFtDbl09e3NpemU6MTIsc2V0dGVyOnh0fSxQW09uXT17c2l6ZToxNixzZXR0ZXI6eHR9LFBbSW5dPXtzaXplOjQsc2V0dGVyOmFlfSxQW0ZuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtQbl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW0RuXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbTm5dPXtzaXplOjQsc2V0dGVyOmNyLGNvdW50OjJ9LFBbTW5dPXtzaXplOjksc2V0dGVyOmNyLGNvdW50OjN9LFBbVW5dPXtzaXplOjE2LHNldHRlcjpjcixjb3VudDo0fTtjb25zdCBXdT0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIFZ1KHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoV3UpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGQ9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGRdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgVm49L15bIFx0XSpcbi87ZnVuY3Rpb24gSG4ocil7bGV0IGU9MDtyZXR1cm4gVm4udGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShWbiwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIEh1KHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gWXUocixlLHQsbil7aWYobj1ufHxvciwhci5nZXRTaGFkZXJQYXJhbWV0ZXIodCxIYSkpe2NvbnN0IG89ci5nZXRTaGFkZXJJbmZvTG9nKHQpLHtsaW5lT2Zmc2V0OnMsc2hhZGVyU291cmNlOmF9PUhuKHIuZ2V0U2hhZGVyU291cmNlKHQpKSx1PWAke1Z1KGEsbyxzKX0KRXJyb3IgY29tcGlsaW5nICR7SnIocixlKX06ICR7b31gO3JldHVybiBuKHUpLHV9cmV0dXJuIiJ9ZnVuY3Rpb24gZnIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2NvbnN0IGY9cjt0PWYuZXJyb3JDYWxsYmFjayxyPWYuYXR0cmliTG9jYXRpb25zLG49Zi50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLGk9Zi50cmFuc2Zvcm1GZWVkYmFja01vZGUsbz1mLmNhbGxiYWNrfWNvbnN0IHM9dHx8b3IsYT1bXSx1PXtlcnJvckNhbGxiYWNrKGYsLi4uZCl7YS5wdXNoKGYpLHMoZiwuLi5kKX0sdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpuLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTppLGNhbGxiYWNrOm8sZXJyb3JzOmF9O3tsZXQgZj17fTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihkLGgpe2ZbZF09ZT9lW2hdOmh9KTpmPXJ8fHt9LHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3QganU9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gWHUocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gamE7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIFhhfWZ1bmN0aW9uIFF1KHIsZSx0KXtjb25zdCBuPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpO2Zvcihjb25zdCBpIG9mIG4pdC5oYXMoaSkmJnIuZGVsZXRlU2hhZGVyKGkpO3IuZGVsZXRlUHJvZ3JhbShlKX1jb25zdCBLdT0ocj0wKT0+bmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHIpKTtmdW5jdGlvbiBxdShyLGUsdCl7Y29uc3Qgbj1yLmNyZWF0ZVByb2dyYW0oKSx7YXR0cmliTG9jYXRpb25zOmksdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczpvLHRyYW5zZm9ybUZlZWRiYWNrTW9kZTpzfT1mcih0KTtmb3IobGV0IGE9MDthPGUubGVuZ3RoOysrYSl7bGV0IHU9ZVthXTtpZih0eXBlb2YgdT09InN0cmluZyIpe2NvbnN0IGY9Ym4odSksZD1mP2YudGV4dDp1O2xldCBoPXJbanVbYV1dO2YmJmYudHlwZSYmKGg9WHUocixmLnR5cGUpfHxoKSx1PXIuY3JlYXRlU2hhZGVyKGgpLHIuc2hhZGVyU291cmNlKHUsSG4oZCkuc2hhZGVyU291cmNlKSxyLmNvbXBpbGVTaGFkZXIodSksci5hdHRhY2hTaGFkZXIobix1KX19T2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW2EsdV0pPT5yLmJpbmRBdHRyaWJMb2NhdGlvbihuLHUsYSkpO3tsZXQgYT1vO2EmJihhLmF0dHJpYnMmJihhPWEuYXR0cmlicyksQXJyYXkuaXNBcnJheShhKXx8KGE9T2JqZWN0LmtleXMoYSkpLHIudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhuLGEsc3x8UWEpKX1yZXR1cm4gci5saW5rUHJvZ3JhbShuKSxufWZ1bmN0aW9uIEp1KHIsZSx0LG4saSl7Y29uc3Qgbz1mcih0LG4saSkscz1uZXcgU2V0KGUpLGE9cXUocixlLG8pO2Z1bmN0aW9uIHUoZixkKXtjb25zdCBoPWVjKGYsZCxvLmVycm9yQ2FsbGJhY2spO3JldHVybiBoJiZRdShmLGQscyksaH1pZihvLmNhbGxiYWNrKXtadShyLGEpLnRoZW4oKCk9Pntjb25zdCBmPXUocixhKTtvLmNhbGxiYWNrKGYsZj92b2lkIDA6YSl9KTtyZXR1cm59cmV0dXJuIHUocixhKT92b2lkIDA6YX1hc3luYyBmdW5jdGlvbiBadShyLGUpe2NvbnN0IHQ9ci5nZXRFeHRlbnNpb24oIktIUl9wYXJhbGxlbF9zaGFkZXJfY29tcGlsZSIpLG49dD8obyxzKT0+by5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsdC5DT01QTEVUSU9OX1NUQVRVU19LSFIpOigpPT4hMDtsZXQgaT0wO2RvIGF3YWl0IEt1KGkpLGk9MWUzLzYwO3doaWxlKCFuKHIsZSkpfWZ1bmN0aW9uIGVjKHIsZSx0KXtpZih0PXR8fG9yLCFyLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxZYSkpe2NvbnN0IGk9ci5nZXRQcm9ncmFtSW5mb0xvZyhlKTt0KGBFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6ICR7aX1gKTtjb25zdCBzPXIuZ2V0QXR0YWNoZWRTaGFkZXJzKGUpLm1hcChhPT5ZdShyLHIuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsci5TSEFERVJfVFlQRSksYSx0KSk7cmV0dXJuYCR7aX0KJHtzLmZpbHRlcihhPT5hKS5qb2luKGAKYCl9YH19ZnVuY3Rpb24gdGMocixlLHQsbixpKXtyZXR1cm4gSnUocixlLHQsbixpKX1mdW5jdGlvbiBZbihyKXtjb25zdCBlPXIubmFtZTtyZXR1cm4gZS5zdGFydHNXaXRoKCJnbF8iKXx8ZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKX1jb25zdCByYz0vKFwufFxbfF18XHcrKS9nLG5jPXI9PnI+PSIwIiYmcjw9IjkiO2Z1bmN0aW9uIGljKHIsZSx0LG4pe2NvbnN0IGk9ci5zcGxpdChyYykuZmlsdGVyKGE9PmEhPT0iIik7bGV0IG89MCxzPSIiO2Zvcig7Oyl7Y29uc3QgYT1pW28rK107cys9YTtjb25zdCB1PW5jKGFbMF0pLGY9dT9wYXJzZUludChhKTphO2lmKHUmJihzKz1pW28rK10pLG89PT1pLmxlbmd0aCl7dFtmXT1lO2JyZWFrfWVsc2V7Y29uc3QgaD1pW28rK10seT1oPT09IlsiLHg9dFtmXXx8KHk/W106e30pO3RbZl09eCx0PXgsbltzXT1uW3NdfHxmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oZyl7am4obCxnKX19KHgpLHMrPWh9fX1mdW5jdGlvbiBvYyhyLGUpe2xldCB0PTA7ZnVuY3Rpb24gbihhLHUsZil7Y29uc3QgZD11Lm5hbWUuZW5kc1dpdGgoIlswXSIpLGg9dS50eXBlLHk9YltoXTtpZigheSl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZTogMHgke2gudG9TdHJpbmcoMTYpfWApO2xldCB4O2lmKHkuYmluZFBvaW50KXtjb25zdCBsPXQ7dCs9dS5zaXplLGQ/eD15LmFycmF5U2V0dGVyKHIsaCxsLGYsdS5zaXplKTp4PXkuc2V0dGVyKHIsaCxsLGYsdS5zaXplKX1lbHNlIHkuYXJyYXlTZXR0ZXImJmQ/eD15LmFycmF5U2V0dGVyKHIsZik6eD15LnNldHRlcihyLGYpO3JldHVybiB4LmxvY2F0aW9uPWYseH1jb25zdCBpPXt9LG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSx2bik7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtpZihZbih1KSljb250aW51ZTtsZXQgZj11Lm5hbWU7Zi5lbmRzV2l0aCgiWzBdIikmJihmPWYuc3Vic3RyKDAsZi5sZW5ndGgtMykpO2NvbnN0IGQ9ci5nZXRVbmlmb3JtTG9jYXRpb24oZSx1Lm5hbWUpO2lmKGQpe2NvbnN0IGg9bihlLHUsZCk7aVtmXT1oLGljKGYsaCxvLGkpfX1yZXR1cm4gaX1mdW5jdGlvbiBzYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxxYSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhlLGkpO3Rbby5uYW1lXT17aW5kZXg6aSx0eXBlOm8udHlwZSxzaXplOm8uc2l6ZX19cmV0dXJuIHR9ZnVuY3Rpb24gYWMocixlKXtjb25zdCB0PXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHZuKSxuPVtdLGk9W107Zm9yKGxldCBhPTA7YTx0OysrYSl7aS5wdXNoKGEpLG4ucHVzaCh7fSk7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm0oZSxhKTtuW2FdLm5hbWU9dS5uYW1lfVtbIlVOSUZPUk1fVFlQRSIsInR5cGUiXSxbIlVOSUZPUk1fU0laRSIsInNpemUiXSxbIlVOSUZPUk1fQkxPQ0tfSU5ERVgiLCJibG9ja05keCJdLFsiVU5JRk9STV9PRkZTRVQiLCJvZmZzZXQiXV0uZm9yRWFjaChmdW5jdGlvbihhKXtjb25zdCB1PWFbMF0sZj1hWzFdO3IuZ2V0QWN0aXZlVW5pZm9ybXMoZSxpLHJbdV0pLmZvckVhY2goZnVuY3Rpb24oZCxoKXtuW2hdW2ZdPWR9KX0pO2NvbnN0IG89e30scz1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxKYSk7Zm9yKGxldCBhPTA7YTxzOysrYSl7Y29uc3QgdT1yLmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoZSxhKSxmPXtpbmRleDpyLmdldFVuaWZvcm1CbG9ja0luZGV4KGUsdSksdXNlZEJ5VmVydGV4U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxaYSksdXNlZEJ5RnJhZ21lbnRTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLGV1KSxzaXplOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx0dSksdW5pZm9ybUluZGljZXM6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHJ1KX07Zi51c2VkPWYudXNlZEJ5VmVydGV4U2hhZGVyfHxmLnVzZWRCeUZyYWdtZW50U2hhZGVyLG9bdV09Zn1yZXR1cm57YmxvY2tTcGVjczpvLHVuaWZvcm1EYXRhOm59fWZ1bmN0aW9uIGpuKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO3R5cGVvZiBuPT0iZnVuY3Rpb24iP24oZVt0XSk6am4oclt0XSxlW3RdKX19ZnVuY3Rpb24gWG4ociwuLi5lKXtjb25zdCB0PXIudW5pZm9ybVNldHRlcnN8fHIsbj1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPWVbaV07aWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3Qgcz1vLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7KythKVhuKHQsb1thXSl9ZWxzZSBmb3IoY29uc3QgcyBpbiBvKXtjb25zdCBhPXRbc107YSYmYShvW3NdKX19fWZ1bmN0aW9uIHVjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLEthKTtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPXIuZ2V0QWN0aXZlQXR0cmliKGUsaSk7aWYoWW4obykpY29udGludWU7Y29uc3Qgcz1yLmdldEF0dHJpYkxvY2F0aW9uKGUsby5uYW1lKSxhPVBbby50eXBlXSx1PWEuc2V0dGVyKHIscyxhKTt1LmxvY2F0aW9uPXMsdFtvLm5hbWVdPXV9cmV0dXJuIHR9ZnVuY3Rpb24gY2MocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07biYmbihlW3RdKX19ZnVuY3Rpb24gZmMocixlLHQpe3QudmVydGV4QXJyYXlPYmplY3Q/ci5iaW5kVmVydGV4QXJyYXkodC52ZXJ0ZXhBcnJheU9iamVjdCk6KGNjKGUuYXR0cmliU2V0dGVyc3x8ZSx0LmF0dHJpYnMpLHQuaW5kaWNlcyYmci5iaW5kQnVmZmVyKFZhLHQuaW5kaWNlcykpfWZ1bmN0aW9uIFFuKHIsZSl7Y29uc3QgdD1vYyhyLGUpLG49dWMocixlKSxpPXtwcm9ncmFtOmUsdW5pZm9ybVNldHRlcnM6dCxhdHRyaWJTZXR0ZXJzOm59O3JldHVybiBOZShyKSYmKGkudW5pZm9ybUJsb2NrU3BlYz1hYyhyLGUpLGkudHJhbnNmb3JtRmVlZGJhY2tJbmZvPXNjKHIsZSkpLGl9Y29uc3QgbGM9L1xzfHt8fXw7LztmdW5jdGlvbiBkYyhyLGUsdCxuLGkpe2NvbnN0IG89ZnIodCxuLGkpLHM9W107aWYoZT1lLm1hcChmdW5jdGlvbihmKXtpZighbGMudGVzdChmKSl7Y29uc3QgZD1ibihmKTtpZihkKWY9ZC50ZXh0O2Vsc2V7Y29uc3QgaD1gbm8gZWxlbWVudCB3aXRoIGlkOiAke2Z9YDtvLmVycm9yQ2FsbGJhY2soaCkscy5wdXNoKGgpfX1yZXR1cm4gZn0pLHMubGVuZ3RoKXJldHVybiBIdShvLCIiKTtjb25zdCBhPW8uY2FsbGJhY2s7YSYmKG8uY2FsbGJhY2s9KGYsZCk9PnthKGYsZj92b2lkIDA6UW4ocixkKSl9KTtjb25zdCB1PXRjKHIsZSxvKTtyZXR1cm4gdT9RbihyLHUpOm51bGx9Y29uc3QgbWM9NCxLbj01MTIzO2Z1bmN0aW9uIGhjKHIsZSx0LG4saSxvKXt0PXQ9PT12b2lkIDA/bWM6dDtjb25zdCBzPWUuaW5kaWNlcyxhPWUuZWxlbWVudFR5cGUsdT1uPT09dm9pZCAwP2UubnVtRWxlbWVudHM6bjtpPWk9PT12b2lkIDA/MDppLGF8fHM/byE9PXZvaWQgMD9yLmRyYXdFbGVtZW50c0luc3RhbmNlZCh0LHUsYT09PXZvaWQgMD9LbjplLmVsZW1lbnRUeXBlLGksbyk6ci5kcmF3RWxlbWVudHModCx1LGE9PT12b2lkIDA/S246ZS5lbGVtZW50VHlwZSxpKTpvIT09dm9pZCAwP3IuZHJhd0FycmF5c0luc3RhbmNlZCh0LGksdSxvKTpyLmRyYXdBcnJheXModCxpLHUpfWNvbnN0IHFuPTM2MTYwLGd0PTM2MTYxLHBjPTM1NTMseWM9NTEyMSxfYz02NDAyLHhjPTY0MDgsZ2M9MzMxOTAsYmM9MzYwMTIsdmM9MzUwNTYsRWM9MzYwMTMsVGM9MzI4NTQsQWM9MzI4NTUsd2M9MzYxOTQsSm49MzMxODksWm49NjQwMSxlaT0zNjE2OCxscj0zNDA0MSxkcj0zNjA2NCxidD0zNjA5Nix0aT0zNjEyOCxtcj0zMzMwNixocj0zMzA3MSxwcj05NzI5LFNjPVt7Zm9ybWF0OnhjLHR5cGU6eWMsbWluOnByLHdyYXA6aHJ9LHtmb3JtYXQ6bHJ9XSxWPXt9O1ZbbHJdPW1yLFZbWm5dPXRpLFZbZWldPXRpLFZbX2NdPWJ0LFZbSm5dPWJ0LFZbZ2NdPWJ0LFZbYmNdPWJ0LFZbdmNdPW1yLFZbRWNdPW1yO2Z1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIFZbcl18fFZbZV19Y29uc3QgdWU9e307dWVbVGNdPSEwLHVlW0FjXT0hMCx1ZVt3Y109ITAsdWVbbHJdPSEwLHVlW0puXT0hMCx1ZVtabl09ITAsdWVbZWldPSEwO2Z1bmN0aW9uIEljKHIpe3JldHVybiB1ZVtyXX1jb25zdCBGYz0zMjtmdW5jdGlvbiBQYyhyKXtyZXR1cm4gcj49ZHImJnI8ZHIrRmN9ZnVuY3Rpb24gdnQocixlLHQsbil7Y29uc3QgaT1xbixvPXIuY3JlYXRlRnJhbWVidWZmZXIoKTtyLmJpbmRGcmFtZWJ1ZmZlcihpLG8pLHQ9dHx8ci5kcmF3aW5nQnVmZmVyV2lkdGgsbj1ufHxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsZT1lfHxTYztjb25zdCBzPVtdLGE9e2ZyYW1lYnVmZmVyOm8sYXR0YWNobWVudHM6W10sd2lkdGg6dCxoZWlnaHQ6bn07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1LGYpe2xldCBkPXUuYXR0YWNobWVudDtjb25zdCBoPXUuc2FtcGxlcyx5PXUuZm9ybWF0O2xldCB4PXUuYXR0YWNobWVudFBvaW50fHxSYyh5LHUuaW50ZXJuYWxGb3JtYXQpO2lmKHh8fCh4PWRyK2YpLFBjKHgpJiZzLnB1c2goeCksIWQpaWYoaCE9PXZvaWQgMHx8SWMoeSkpZD1yLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHIuYmluZFJlbmRlcmJ1ZmZlcihndCxkKSxoPjE/ci5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoZ3QsaCx5LHQsbik6ci5yZW5kZXJidWZmZXJTdG9yYWdlKGd0LHksdCxuKTtlbHNle2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSx1KTtsLndpZHRoPXQsbC5oZWlnaHQ9bixsLmF1dG89PT12b2lkIDAmJihsLmF1dG89ITEsbC5taW49bC5taW58fGwubWluTWFnfHxwcixsLm1hZz1sLm1hZ3x8bC5taW5NYWd8fHByLGwud3JhcFM9bC53cmFwU3x8bC53cmFwfHxocixsLndyYXBUPWwud3JhcFR8fGwud3JhcHx8aHIpLGQ9Z24ocixsKX1pZigkbyhyLGQpKXIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoaSx4LGd0LGQpO2Vsc2UgaWYoSHQocixkKSl1LmxheWVyIT09dm9pZCAwP3IuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoaSx4LGQsdS5sZXZlbHx8MCx1LmxheWVyKTpyLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGkseCx1LnRhcmdldHx8cGMsZCx1LmxldmVsfHwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigidW5rbm93biBhdHRhY2htZW50IHR5cGUiKTthLmF0dGFjaG1lbnRzLnB1c2goZCl9KSxyLmRyYXdCdWZmZXJzJiZyLmRyYXdCdWZmZXJzKHMpLGF9ZnVuY3Rpb24gRGMocixlLHQpe3Q9dHx8cW4sZT8oci5iaW5kRnJhbWVidWZmZXIodCxlLmZyYW1lYnVmZmVyKSxyLnZpZXdwb3J0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSk6KHIuYmluZEZyYW1lYnVmZmVyKHQsbnVsbCksci52aWV3cG9ydCgwLDAsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0KSl9ZnVuY3Rpb24gUyhyLGUpe3JldHVybigpPT5lIGluc3RhbmNlb2YgV2ViR0xUZXh0dXJlP2U6Z24ocix7c3JjOmUsd3JhcDpyLkNMQU1QX1RPX0VER0V9KX1jb25zdCByaT0yO2NsYXNzIHhle2NvbnN0cnVjdG9yKGUpe3AodGhpcywiaWQiLCJfIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsImZiaSIpO3AodGhpcywib3B0aW9ucyIpO3AodGhpcywicHJvZ3JhbUluZm8iKTtwKHRoaXMsImJ1ZmZlckluZm8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJsYXN0UnVuIik7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89ZGModGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89bHModGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT12dCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe3ZhciBpLG8scyxhLHUsZjsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKSwobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Zm9yKGNvbnN0IGQgaW4gZSl0eXBlb2YgZVtkXT09ImZ1bmN0aW9uIiYmKChzPXRoaXMucHJvZmlsZXIpPT1udWxsfHxzLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApLGVbZF09ZVtkXSgpLChhPXRoaXMucHJvZmlsZXIpPT1udWxsfHxhLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke2R9YCkpOyh1PXRoaXMucHJvZmlsZXIpPT1udWxsfHx1LnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxmYyh0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFhuKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRGModGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksaGModGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFBST0cgOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWV9fXZhciBOYz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLE1jPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVWMgZXh0ZW5kcyB4ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE5jK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1jfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIga2M9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLENjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIHlyIGV4dGVuZHMgeGV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2N9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENjfX1jbGFzcyBfcntjb25zdHJ1Y3Rvcigpe3AodGhpcywic3RlcHMiLFtdKTtwKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4saTsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdGVwcylvLnByZXZlbnRSZXNpemV8fG8ucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsoaT10aGlzLnByb2ZpbGVyKT09bnVsbHx8aS5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgeHIgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y29uc3QgT2M9MTAsQmM9MixMYz04O2NsYXNzIEdjIGV4dGVuZHMgeHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBVYyh7Li4uaSxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3Qgbz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBpPXRoaXMucmFkaXVzPk9jP0xjOkJjO3JldHVybnt3aWR0aDpNYXRoLm1heChyaSx0L2kpLGhlaWdodDpNYXRoLm1heChyaSxuL2kpfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBpPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChpLndpZHRoLGkuaGVpZ2h0KX19Y2xhc3MgbmkgZXh0ZW5kcyB4cntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LGk9bmV3IHlyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyAkYyBleHRlbmRzIG5pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtwKHRoaXMsImZyYW1lUmVhZGVyIik7cCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCEwKX1zZXQgaW5wdXRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIG47Y29uc3QgdD1hd2FpdCgobj10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6bi5yZWFkKCkpO3QhPW51bGwmJnQudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQudmFsdWUpLHQudmFsdWUuY2xvc2UoKSl9fXZhciB6Yz1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLFdjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsZ3I9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShncnx8e30pO2NsYXNzIGlpIGV4dGVuZHMgeGV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Yyt0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBXY31jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBWYyBleHRlbmRzIHhye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxvPW5ldyBpaSh7Li4uaSxyYWRpdXM6bix0eXBlOmdyLkdBVVNTSUFOfSkscz1uZXcgeXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSxmb3JlZ3JvdW5kOlModCxvLm91dHB1dCksdGhyZXNob2xkOlModCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX1jbGFzcyBiciBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO3AodGhpcywiZmJpMiIpO3RoaXMuZmJpMj12dCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPXZ0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgSGM9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLFljPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgamMgZXh0ZW5kcyBicntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBIY31nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWN9fXZhciBYYz1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsUWM9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyBLYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFhjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBRY319dmFyIHFjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsSmM9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBaYyBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHFjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBKY319dmFyIGVmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsdGY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyByZiBleHRlbmRzIGJye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0Zn19dmFyIG5mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxvZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIHNmIGV4dGVuZHMgYnJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gbmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIG9mfX1jbGFzcyBhZiBleHRlbmRzIF9ye2NvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpO3AodGhpcywiaW5wdXRJbWFnZSIpO3AodGhpcywiaW5wdXRNYXNrIik7cCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtwKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7cCh0aGlzLCJvdXRwdXQiKTtwKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO3RoaXMuY29udGV4dD10O2NvbnN0IG89e2NvbnRleHQ6dCxoZWlnaHQ6aSx3aWR0aDpufSxzPW5ldyBqYyhvKSxhPW5ldyBpaSh7Li4ubyxyYWRpdXM6MSx0eXBlOmdyLkdBVVNTSUFOfSksdT1uZXcgc2YobyksZj1uZXcgcmYobyksZD1uZXcgWmMobyksaD1uZXcgS2Moey4uLm99KSx5PS42Nix4PTY0MCxsPTQ4MCxnPTI1NixFPTE0NDtsZXQgdj0xO3YqPU1hdGgubWF4KHgvZyxsL0UpO2NvbnN0IEk9TWF0aC5tYXgoMSxNYXRoLnNxcnQodikqeSksRD0xL3gsRz0xL2w7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OlModCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpTKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OlModCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aCxnZXRVbmlmb3JtczooKT0+KHtpbnB1dF9mcmFtZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpTKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpTKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W0QsR10sc3RlcDpJLHJhZGl1czp2LG9mZnNldDpJPjE/SSouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KEQsRykqdixzaWdtYV9jb2xvcjouMX0pfSksdGhpcy5vdXRwdXQ9aC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fX12YXIgdWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsY2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBmZiBleHRlbmRzIHhle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHVmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBjZn19Y2xhc3MgbGYgZXh0ZW5kcyBfcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBmZih7Li4ubyxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1jbGFzcyBkZntjb25zdHJ1Y3RvcihlKXtwKHRoaXMsInJlc2l6ZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJjb250ZXh0Iik7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgbGYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBtZntjb25zdHJ1Y3RvcihlLHQpe3AodGhpcywiaW1wcm92ZU1hc2tTZWdtZW50YXRpb24iKTtwKHRoaXMsImJhY2tncm91bmRSZXNpemVyIik7cCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKTtwKHRoaXMsImJhY2tncm91bmRWaWRlbyIpO3AodGhpcywicHJvZmlsZXIiKTtwKHRoaXMsImFjdGl2ZVBpcGVsaW5lIik7cCh0aGlzLCJjYW52YXMiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsInZpcnR1YWxCR0ltYWdlIik7dGhpcy5pZD1lLHRoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9dC5mb3JlZ3JvdW5kV2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXQuZm9yZWdyb3VuZEhlaWdodCx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uPW5ldyBhZih0aGlzLmNvbnRleHQsdC5tYXNrV2lkdGgsdC5tYXNrSGVpZ2h0KSx0aGlzLmJhY2tncm91bmRJbWFnZT1uZXcgbmkodGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRWaWRlbz1uZXcgJGModGhpcy5jb250ZXh0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyPW5ldyBkZih7d2lkdGg6dC5mb3JlZ3JvdW5kV2lkdGgsaGVpZ2h0OnQuZm9yZWdyb3VuZEhlaWdodH0pfXNldEJhY2tncm91bmRPcHRpb25zKGUpe3N3aXRjaChlLnRyYW5zZm9ybWVyVHlwZSl7Y2FzZSJCYWNrZ3JvdW5kQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2ModGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlNpbGhvdWV0dGVCbHVyIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPW5ldyBWYyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiVmlkZW9CYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZFZpZGVvO2JyZWFrO2Nhc2UiVmlydHVhbEJhY2tncm91bmQiOnRoaXMuYWN0aXZlUGlwZWxpbmU9dGhpcy5iYWNrZ3JvdW5kSW1hZ2U7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHRyYW5zZm9ybWVyIHR5cGUgWyR7ZS50cmFuc2Zvcm1lclR5cGV9XWB9dGhpcy5vcHRpb25zPWV9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbik9PW51bGx8fHQuc2V0T3B0aW9ucyhlKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVmlkZW8uaW5wdXRWaWRlbz1lfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3RoaXMudmlydHVhbEJHSW1hZ2U9ZSx0aGlzLmJhY2tncm91bmRJbWFnZS5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCB0aGlzLmJhY2tncm91bmRSZXNpemVyLnByb2Nlc3MoZSl9YXN5bmMgcHJvY2VzcyhlLHQpe3ZhciBuLGksbyxzLGEsdSxmO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7Y29uc3QgZD1gWyR7dGhpcy5pZH1dIGJhY2tncm91bmQtZmlsdGVyYDsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChkKTtsZXQgaD10OygoKGk9dGhpcy5vcHRpb25zKT09bnVsbD92b2lkIDA6aS5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmKChvPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSk9PT0iUFJFQ0lTRSJ8fCEoKHM9dGhpcy5vcHRpb25zKSE9bnVsbCYmcy5zZWxmaWVTZWdtZW50YXRpb25UeXBlKSYmdGhpcy5hY3RpdmVQaXBlbGluZS5wcmVjaXNlTWFza0VuYWJsZWQpJiYodGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRJZCh0aGlzLmlkKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksaD10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRJZCh0aGlzLmlkKSx0aGlzLmFjdGl2ZVBpcGVsaW5lLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnNldERhdGEoZSxoKSwodT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8dS5ydW4oKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGQpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1hc3luYyBwcm9maWxlKGUpe2NvbnN0IHQ9bmV3IFBvKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgR3IoZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1nZXRCbHVyU2l6ZShlPVplLkxvdyl7c3dpdGNoKGUpe2Nhc2UgWmUuTG93OnJldHVybiA1O2Nhc2UgWmUuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBoZj1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlPCJ1Ij9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsbSl7bj1jLGk9bX0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24oYyxtKXt0aHJvdyBtfSxmPSEwLGQ9IiI7ZnVuY3Rpb24gaChjKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShjLGQpOmQrY312YXIgeTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGQ9ciksZC5pbmRleE9mKCJibG9iOiIpIT09MD9kPWQuc3Vic3RyKDAsZC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmQ9IiI7dmFyIHg9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxsPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIGc7dC53YXNtQmluYXJ5JiYoZz10Lndhc21CaW5hcnkpO3ZhciBFPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgdixJPSExLEQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gRyhjLG0sXyl7Zm9yKHZhciBUPW0rXyxOPW07Y1tOXSYmIShOPj1UKTspKytOO2lmKE4tbT4xNiYmYy5zdWJhcnJheSYmRClyZXR1cm4gRC5kZWNvZGUoYy5zdWJhcnJheShtLE4pKTtmb3IodmFyIGs9IiI7bTxOOyl7dmFyIHc9Y1ttKytdO2lmKCEodyYxMjgpKXtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBPPWNbbSsrXSY2MztpZigodyYyMjQpPT0xOTIpe2srPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fE8pO2NvbnRpbnVlfXZhciBLPWNbbSsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfE88PDZ8Szp3PSh3JjcpPDwxOHxPPDwxMnxLPDw2fGNbbSsrXSY2Myx3PDY1NTM2KWsrPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgaGk9dy02NTUzNjtrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGhpPj4xMCw1NjMyMHxoaSYxMDIzKX19cmV0dXJuIGt9ZnVuY3Rpb24gJChjLG0pe3JldHVybiBjP0coTGUsYyxtKToiIn1mdW5jdGlvbiBaKGMsbSxfKXtmb3IodmFyIFQ9MDtUPGMubGVuZ3RoOysrVClFdFttKys+PjBdPWMuY2hhckNvZGVBdChUKTtffHwoRXRbbT4+MF09MCl9ZnVuY3Rpb24gSChjLG0pe3JldHVybiBjJW0+MCYmKGMrPW0tYyVtKSxjfXZhciBzaSxFdCxMZSxZO2Z1bmN0aW9uIGFpKGMpe3NpPWMsdC5IRUFQOD1FdD1uZXcgSW50OEFycmF5KGMpLHQuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGMpLHQuSEVBUDMyPVk9bmV3IEludDMyQXJyYXkoYyksdC5IRUFQVTg9TGU9bmV3IFVpbnQ4QXJyYXkoYyksdC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShjKSx0LkhFQVBVMzI9bmV3IFVpbnQzMkFycmF5KGMpLHQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGMpLHQuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGMpfXQuSU5JVElBTF9NRU1PUlk7dmFyIEVyLHVpPVtdLGNpPVtdLGZpPVtdLHZmPTA7ZnVuY3Rpb24gRWYoKXtyZXR1cm4gRXx8dmY+MH1mdW5jdGlvbiBUZigpe2lmKHQucHJlUnVuKWZvcih0eXBlb2YgdC5wcmVSdW49PSJmdW5jdGlvbiImJih0LnByZVJ1bj1bdC5wcmVSdW5dKTt0LnByZVJ1bi5sZW5ndGg7KVNmKHQucHJlUnVuLnNoaWZ0KCkpO1RyKHVpKX1mdW5jdGlvbiBBZigpe1RyKGNpKX1mdW5jdGlvbiB3Zigpe2lmKHQucG9zdFJ1bilmb3IodHlwZW9mIHQucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKHQucG9zdFJ1bj1bdC5wb3N0UnVuXSk7dC5wb3N0UnVuLmxlbmd0aDspSWYodC5wb3N0UnVuLnNoaWZ0KCkpO1RyKGZpKX1mdW5jdGlvbiBTZihjKXt1aS51bnNoaWZ0KGMpfWZ1bmN0aW9uIFJmKGMpe2NpLnVuc2hpZnQoYyl9ZnVuY3Rpb24gSWYoYyl7ZmkudW5zaGlmdChjKX12YXIgZ2U9MCxHZT1udWxsO2Z1bmN0aW9uIEZmKGMpe2dlKyssdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpfWZ1bmN0aW9uIFBmKGMpe2lmKGdlLS0sdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZ0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpLGdlPT0wJiZHZSl7dmFyIG09R2U7R2U9bnVsbCxtKCl9fXQucHJlbG9hZGVkSW1hZ2VzPXt9LHQucHJlbG9hZGVkQXVkaW9zPXt9O2Z1bmN0aW9uIGNlKGMpe3Qub25BYm9ydCYmdC5vbkFib3J0KGMpLGM9IkFib3J0ZWQoIitjKyIpIixsKGMpLEk9ITAsYys9Ii4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBtPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYyk7dGhyb3cgaShtKSxtfXZhciBEZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24gbGkoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aChEZil9dmFyIGo7aj0idGZsaXRlLXNpbWQud2FzbSIsbGkoail8fChqPWgoaikpO2Z1bmN0aW9uIGRpKGMpe3RyeXtpZihjPT1qJiZnKXJldHVybiBuZXcgVWludDhBcnJheShnKTtpZigheSl0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2gobSl7Y2UobSl9fWZ1bmN0aW9uIE5mKCl7cmV0dXJuIWcmJmYmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChqLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihjKXtpZighYy5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2orIiciO3JldHVybiBjLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBkaShqKX0pOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZGkoail9KX1mdW5jdGlvbiBNZigpe3ZhciBjPXthOmVsfTtmdW5jdGlvbiBtKHcsTyl7dmFyIEs9dy5leHBvcnRzO3QuYXNtPUssdj10LmFzbS5xLGFpKHYuYnVmZmVyKSxFcj10LmFzbS5FLFJmKHQuYXNtLnIpLFBmKCl9RmYoKTtmdW5jdGlvbiBfKHcpe20ody5pbnN0YW5jZSl9ZnVuY3Rpb24gVCh3KXtyZXR1cm4gTmYoKS50aGVuKGZ1bmN0aW9uKE8pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShPLGMpfSkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gT30pLnRoZW4odyxmdW5jdGlvbihPKXtsKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK08pLGNlKE8pfSl9ZnVuY3Rpb24gTigpe3JldHVybiFnJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFsaShqKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKGose2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHcpe3ZhciBPPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHcsYyk7cmV0dXJuIE8udGhlbihfLGZ1bmN0aW9uKEspe3JldHVybiBsKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitLKSxsKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFQoXyl9KX0pOlQoXyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBrPXQuaW5zdGFudGlhdGVXYXNtKGMsbSk7cmV0dXJuIGt9Y2F0Y2godyl7cmV0dXJuIGwoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdyksITF9cmV0dXJuIE4oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBUcihjKXtmb3IoO2MubGVuZ3RoPjA7KXt2YXIgbT1jLnNoaWZ0KCk7aWYodHlwZW9mIG09PSJmdW5jdGlvbiIpe20odCk7Y29udGludWV9dmFyIF89bS5mdW5jO3R5cGVvZiBfPT0ibnVtYmVyIj9tLmFyZz09PXZvaWQgMD9Fci5nZXQoXykoKTpFci5nZXQoXykobS5hcmcpOl8obS5hcmc9PT12b2lkIDA/bnVsbDptLmFyZyl9fWZ1bmN0aW9uIFVmKGMsbSxfLFQpe2NlKCJBc3NlcnRpb24gZmFpbGVkOiAiKyQoYykrIiwgYXQ6ICIrW20/JChtKToidW5rbm93biBmaWxlbmFtZSIsXyxUPyQoVCk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24ga2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2YoYyxtKXtjZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gT2YoKXtjZSgiIil9dmFyIFR0O1R0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgQmY9ITA7ZnVuY3Rpb24gTGYoYyl7cmV0dXJuIFlbbWkoKT4+Ml09YyxjfWZ1bmN0aW9uIEdmKGMsbSl7dmFyIF87aWYoYz09PTApXz1EYXRlLm5vdygpO2Vsc2UgaWYoKGM9PT0xfHxjPT09NCkmJkJmKV89VHQoKTtlbHNlIHJldHVybiBMZigyOCksLTE7cmV0dXJuIFlbbT4+Ml09Xy8xZTN8MCxZW20rND4+Ml09XyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gJGYoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiB6ZihjLG0sXyl7TGUuY29weVdpdGhpbihjLG0sbStfKX1mdW5jdGlvbiBXZihjKXt0cnl7cmV0dXJuIHYuZ3JvdyhjLXNpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksYWkodi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiBWZihjKXt2YXIgbT1MZS5sZW5ndGg7Yz1jPj4+MDt2YXIgXz0yMTQ3NDgzNjQ4O2lmKGM+XylyZXR1cm4hMTtmb3IodmFyIFQ9MTtUPD00O1QqPTIpe3ZhciBOPW0qKDErLjIvVCk7Tj1NYXRoLm1pbihOLGMrMTAwNjYzMjk2KTt2YXIgaz1NYXRoLm1pbihfLEgoTWF0aC5tYXgoYyxOKSw2NTUzNikpLHc9V2Yoayk7aWYodylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBIZihjKXtmb3IodmFyIG09VHQoKTtUdCgpLW08YzspO312YXIgQXI9e307ZnVuY3Rpb24gWWYoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiAkZSgpe2lmKCEkZS5zdHJpbmdzKXt2YXIgYz0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixtPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6YyxfOllmKCl9O2Zvcih2YXIgXyBpbiBBcilBcltfXT09PXZvaWQgMD9kZWxldGUgbVtfXTptW19dPUFyW19dO3ZhciBUPVtdO2Zvcih2YXIgXyBpbiBtKVQucHVzaChfKyI9IittW19dKTskZS5zdHJpbmdzPVR9cmV0dXJuICRlLnN0cmluZ3N9dmFyIEF0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oYyxtKXt2YXIgXz1BdC5idWZmZXJzW2NdO209PT0wfHxtPT09MTA/KChjPT09MT94OmwpKEcoXywwKSksXy5sZW5ndGg9MCk6Xy5wdXNoKG0pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtBdC52YXJhcmdzKz00O3ZhciBjPVlbQXQudmFyYXJncy00Pj4yXTtyZXR1cm4gY30sZ2V0U3RyOmZ1bmN0aW9uKGMpe3ZhciBtPSQoYyk7cmV0dXJuIG19LGdldDY0OmZ1bmN0aW9uKGMsbSl7cmV0dXJuIGN9fTtmdW5jdGlvbiBqZihjLG0pe3ZhciBfPTA7cmV0dXJuICRlKCkuZm9yRWFjaChmdW5jdGlvbihULE4pe3ZhciBrPW0rXztZW2MrTio0Pj4yXT1rLFooVCxrKSxfKz1ULmxlbmd0aCsxfSksMH1mdW5jdGlvbiBYZihjLG0pe3ZhciBfPSRlKCk7WVtjPj4yXT1fLmxlbmd0aDt2YXIgVD0wO3JldHVybiBfLmZvckVhY2goZnVuY3Rpb24oTil7VCs9Ti5sZW5ndGgrMX0pLFlbbT4+Ml09VCwwfWZ1bmN0aW9uIFFmKGMpe3JsKGMpfWZ1bmN0aW9uIEtmKGMpe3JldHVybiAwfWZ1bmN0aW9uIHFmKGMsbSxfLFQsTil7fWZ1bmN0aW9uIEpmKGMsbSxfLFQpe2Zvcih2YXIgTj0wLGs9MDtrPF87aysrKXtmb3IodmFyIHc9WVttK2sqOD4+Ml0sTz1ZW20rKGsqOCs0KT4+Ml0sSz0wO0s8TztLKyspQXQucHJpbnRDaGFyKGMsTGVbdytLXSk7Tis9T31yZXR1cm4gWVtUPj4yXT1OLDB9ZnVuY3Rpb24gWmYoKXtpZih0eXBlb2YgY3J5cHRvPT0ib2JqZWN0IiYmdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiIpe3ZhciBjPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGMpLGNbMF19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7Y2UoInJhbmRvbURldmljZSIpfX1mdW5jdGlvbiB3dChjLG0pe3d0LnJhbmRvbURldmljZXx8KHd0LnJhbmRvbURldmljZT1aZigpKTtmb3IodmFyIF89MDtfPG07XysrKUV0W2MrXz4+MF09d3QucmFuZG9tRGV2aWNlKCk7cmV0dXJuIDB9dmFyIGVsPXthOlVmLGU6a2YsZDpDZixiOk9mLG46R2YsaDokZixsOnpmLG06VmYscDpIZixmOmpmLGc6WGYsajpRZixpOktmLGs6cWYsYzpKZixvOnd0fTtNZigpLHQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX19fd2FzbV9jYWxsX2N0b3JzPXQuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQ9dC5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dE1lbW9yeU9mZnNldD10LmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0SGVpZ2h0PXQuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dFdpZHRoPXQuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRDaGFubmVsQ291bnQ9dC5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PXQuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dEhlaWdodD10LmFzbS55KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dFdpZHRoPXQuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dENoYW5uZWxDb3VudD10LmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2xvYWRNb2RlbD1mdW5jdGlvbigpe3JldHVybih0Ll9sb2FkTW9kZWw9dC5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9ydW5JbmZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm4odC5fcnVuSW5mZXJlbmNlPXQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5faXNHUFVFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2lzR1BVRW5hYmxlZD10LmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBtaT10Ll9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG1pPXQuX19fZXJybm9fbG9jYXRpb249dC5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdDtmdW5jdGlvbiB0bChjKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT0iUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgiK2MrIikiLHRoaXMuc3RhdHVzPWN9R2U9ZnVuY3Rpb24gYygpe1N0fHx3cigpLFN0fHwoR2U9Yyl9O2Z1bmN0aW9uIHdyKGMpe2lmKGdlPjB8fChUZigpLGdlPjApKXJldHVybjtmdW5jdGlvbiBtKCl7U3R8fChTdD0hMCx0LmNhbGxlZFJ1bj0hMCwhSSYmKEFmKCksbih0KSx0Lm9uUnVudGltZUluaXRpYWxpemVkJiZ0Lm9uUnVudGltZUluaXRpYWxpemVkKCksd2YoKSkpfXQuc2V0U3RhdHVzPyh0LnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zZXRTdGF0dXMoIiIpfSwxKSxtKCl9LDEpKTptKCl9dC5ydW49d3I7ZnVuY3Rpb24gcmwoYyxtKXtubChjKX1mdW5jdGlvbiBubChjKXtFZigpfHwodC5vbkV4aXQmJnQub25FeGl0KGMpLEk9ITApLHUoYyxuZXcgdGwoYykpfWlmKHQucHJlSW5pdClmb3IodHlwZW9mIHQucHJlSW5pdD09ImZ1bmN0aW9uIiYmKHQucHJlSW5pdD1bdC5wcmVJbml0XSk7dC5wcmVJbml0Lmxlbmd0aD4wOyl0LnByZUluaXQucG9wKCkoKTtyZXR1cm4gd3IoKSxlLnJlYWR5fX0oKTtjbGFzcyBwZntjb25zdHJ1Y3Rvcigpe3AodGhpcywic2VsZWN0ZWRURkxpdGUiKTtwKHRoaXMsImlzU0lNRFN1cHBvcnRlZCIsITEpO3AodGhpcywiaXNUaHJlYWRzU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpbnB1dFdpZHRoIiwwKTtwKHRoaXMsImlucHV0SGVpZ2h0IiwwKTtwKHRoaXMsImlucHV0Q2hhbm5lbENvdW50IiwwKTtwKHRoaXMsImlucHV0TWVtb3J5T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dFdpZHRoIiwwKTtwKHRoaXMsIm91dHB1dEhlaWdodCIsMCk7cCh0aGlzLCJvdXRwdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywib3V0cHV0TWVtb3J5T2Zmc2V0IiwwKX19Y29uc3QgeWY9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvdm9uYWdlLXRlbnNvcmZsb3ctd2FzbS90ZmxpdGUtc2ltZC13YXNtLzEuMS4zLyIsX2Y9Imh0dHBzOi8vZDNvcHFqbXF6eGYwNTcuY2xvdWRmcm9udC5uZXQvbWwvc2VsZmllX3NlZ21lbnRhdGlvbi80LjAuMC8iO2FzeW5jIGZ1bmN0aW9uIHhmKHI9eWYsZT1fZil7bGV0IHQ9bmV3IHBmO3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7YXN5bmMgZnVuY3Rpb24gcygpe3JldHVybiBoZih7bG9jYXRlRmlsZTpmdW5jdGlvbihmKXtyZXR1cm4gcitmfX0pfWFzeW5jIGZ1bmN0aW9uIGEodSl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKGYsZCk9Pntjb25zdCBoPXU7aWYodHlwZW9mIGg+InUiKXJldHVybiBkKCJURkxpdGUgYmFja2VuZCB1bmF2YWlsYWJsZTogd2FzbVNpbWQiKTtjb25zdCB5PSJzZWxmaWVfc2VnbWVudGF0aW9uX2xhbmRzY2FwZSI7Y29uc29sZS5sb2coIkxvYWRpbmcgdGZsaXRlIG1vZGVsOiIseSk7bGV0IHg9ZStgJHt5fS50ZmxpdGVgO2NvbnNvbGUubG9nKCJURkxpdGUgbW9kZWxVcmw6ICIreCk7dHJ5e2NvbnN0IGc9YXdhaXQoYXdhaXQgZmV0Y2goeCkpLmFycmF5QnVmZmVyKCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBzaXplOiIsZy5ieXRlTGVuZ3RoKTtjb25zdCBFPWguX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0KCk7Y29uc29sZS5sb2coIk1vZGVsIGJ1ZmZlciBtZW1vcnkgb2Zmc2V0OiIsRSksY29uc29sZS5sb2coIkxvYWRpbmcgbW9kZWwgYnVmZmVyLi4uIiksaC5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGcpLEUpO2NvbnN0IHY9aC5fbG9hZE1vZGVsKGcuYnl0ZUxlbmd0aCk7aWYoY29uc29sZS5sb2coIkxvYWQgbW9kZWwgcmVzdWx0OiIsdiksdiE9PTApe2QoIkNhbm5vdCBsb2FkIG1vZGVsIik7cmV0dXJufXQuaW5wdXRXaWR0aD1oLl9nZXRJbnB1dFdpZHRoKCksdC5pbnB1dEhlaWdodD1oLl9nZXRJbnB1dEhlaWdodCgpLHQuaW5wdXRDaGFubmVsQ291bnQ9aC5fZ2V0SW5wdXRDaGFubmVsQ291bnQoKSx0LmlucHV0TWVtb3J5T2Zmc2V0PWguX2dldElucHV0TWVtb3J5T2Zmc2V0KCksY29uc29sZS5sb2coIklucHV0IG1lbW9yeSBvZmZzZXQ6Iix0LmlucHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiSW5wdXQgaGVpZ2h0OiIsdC5pbnB1dEhlaWdodCksY29uc29sZS5sb2coIklucHV0IHdpZHRoOiIsdC5pbnB1dFdpZHRoKSxjb25zb2xlLmxvZygiSW5wdXQgY2hhbm5lbHM6Iix0LmlucHV0Q2hhbm5lbENvdW50KSx0Lm91dHB1dE1lbW9yeU9mZnNldD1oLl9nZXRPdXRwdXRNZW1vcnlPZmZzZXQoKSx0Lm91dHB1dFdpZHRoPWguX2dldE91dHB1dFdpZHRoKCksdC5vdXRwdXRIZWlnaHQ9aC5fZ2V0T3V0cHV0SGVpZ2h0KCksdC5vdXRwdXRDaGFubmVsQ291bnQ9aC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50KCksY29uc29sZS5sb2coIk91dHB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5vdXRwdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJPdXRwdXQgaGVpZ2h0OiIsdC5vdXRwdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJPdXRwdXQgd2lkdGg6Iix0Lm91dHB1dFdpZHRoKSxjb25zb2xlLmxvZygiT3V0cHV0IGNoYW5uZWxzOiIsdC5vdXRwdXRDaGFubmVsQ291bnQpLHQuc2VsZWN0ZWRURkxpdGU9aH1jYXRjaChsKXtkKGwpO3JldHVybn1mKCl9KX1zKCkudGhlbih1PT57aWYodT09PW51bGwpdGhyb3cgY29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBudWxsIiksImxvYWRURkxpdGUgbnVsbCI7YSh1KS50aGVuKGY9PntpKHQpfSkuY2F0Y2goZj0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGVNb2RlbCBlcnJvciIpLG8oImxvYWRURkxpdGVNb2RlbCBlcnJvciIpfSl9KS5jYXRjaCh1PT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZSBlcnJvcjoiLHUpLG8oImxvYWRURkxpdGUgZXJyb3I6Iit1KX0pfSk7cmV0dXJuIG59Y2xhc3MgZ2Z7Y29uc3RydWN0b3IoKXtwKHRoaXMsImNhbnZhcyIsbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApKTtwKHRoaXMsImNvbnRleHQiLHRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkpO3AodGhpcywicGl4ZWxDb3VudCIsMCk7cCh0aGlzLCJpbnB1dE9mZnNldCIsMCk7cCh0aGlzLCJvdXRwdXRPZmZzZXQiLDApO3AodGhpcywiaW5mb3MiKTtwKHRoaXMsIm1hc2siKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgeGYoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIGJme2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBnZik7cCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7cCh0aGlzLCJyZXBvcnRlciIsbmV3IElvKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KTtwKHRoaXMsImJhY2tncm91bmRPcHRpb25zIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQodC53YXNtQXNzZXRVcmlQYXRoLHQudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDpuLGhlaWdodDppfT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBtZihlLHtmb3JlZ3JvdW5kV2lkdGg6MSxmb3JlZ3JvdW5kSGVpZ2h0OjEsbWFza1dpZHRoOm4sbWFza0hlaWdodDppfSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBzLGEsdSxmO2NvbnN0IG49KHM9ZS50aW1lc3RhbXApIT1udWxsP3M6MCxpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLG89YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhpKTtvPygoaS53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxpLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1pLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1pLmhlaWdodCxhd2FpdCgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLnJlc2l6ZUZvcmVncm91bmQoaS53aWR0aCxpLmhlaWdodCkpKSxhd2FpdCgodT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp1LnByb2Nlc3MoaSxvKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoZj10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpmLmNhbnZhcyx7dGltZXN0YW1wOm4sYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucz1lLGF3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119Z2V0VHJhbnNmb3JtZXJUeXBlKCl7dmFyIGUsdDtyZXR1cm4odD0oZT10aGlzLmJhY2tncm91bmRPcHRpb25zKT09bnVsbD92b2lkIDA6ZS50cmFuc2Zvcm1lclR5cGUpIT1udWxsP3Q6IlVuZGVmaW5lZCJ9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpGbyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBiZik7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IG5vKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe3FpKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IG9pPXZyOygoKT0+e19pKCJQcm9jZXNzb3JXb3JrZXIiLHZyKX0pKCl9KSgpOwo=",Ml=typeof window<"u"&&window.Blob&&new Blob([atob(Al)],{type:"text/javascript;charset=utf-8"});function n3(){const i=Ml&&(window.URL||window.webkitURL).createObjectURL(Ml);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+Al)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const Qo=class extends cr{constructor(){super(...arguments);Wt(this,"rate",30);Wt(this,"worker")}async init(r){this.worker=await B2(zo,n3),await this.worker.init(`worker_${Qo.initCount++}`,r),await this.worker.setVonageMetadata(li()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var p;await((p=this.worker)==null?void 0:p.setTrackExpectedRate(r))}async setBackgroundOptions(r){var G,S,H;const{transformerType:p}=r;switch(p){case"VideoBackground":await((G=this.worker)==null?void 0:G.setVideoBGReadable(await ys.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((S=this.worker)==null?void 0:S.setVirtualBGImage(await ys.createImageCanvas(r.backgroundAssetUri)));break}await((H=this.worker)==null?void 0:H.setBackgroundOptions(r))}async transform(r,p){var G;await((G=this.worker)==null?void 0:G.transform(r,p))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var p;await((p=this.worker)==null?void 0:p.setFlickeringOptions(r))}async profile(r){var G;const p=await((G=this.worker)==null?void 0:G.profile(r));return JSON.parse(p!=null?p:"[]")}async listenWorker(){var r,p,G;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:S,data:H}=await((p=this.worker)==null?void 0:p.onMediaProcessorEvent());switch(S){case"error":case"warn":this.emit(S,H);break;case"pipelineInfo":switch(this.emit(S,H),H){case"pipeline_ended":case"pipeline_ended_with_error":await((G=this.worker)==null?void 0:G.terminate());return}break}}}};let Qi=Qo;Wt(Qi,"initCount",0);class r3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},p=[];let G=0;for(const H of this.queries){const w=[];for(const E of H)r[E.name]===void 0&&(r[E.name]=n.length,n.push({name:E.name})),w.push({type:E.action==Ws.PUSH?"O":"C",frame:r[E.name],at:E.timestamp}),G=Math.max(G,E.timestamp+E.duration);p.push({events:w,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:G})}const S={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:p};return JSON.stringify(S,null,2)}}class Po extends cr{constructor(){super();Wt(this,"worker",new Qi);Wt(this,"connector",new x2(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((p,G)=>this.emit(p,G))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const p=await Promise.all(this.instances.map(G=>G.profile(r)));return new r3(p)}static async create(r){const p=new this;return await p.init(r),this.instances.push(p),p}}Wt(Po,"instances",[]);function i3(){return ai}function o3(){return di}function s3(){return hi}function l3(){return fi}function c3(){return mi}function u3(){return pi}function a3(){return bi}async function d3(i){return await Po.create(i)}Ae.BackgroundTransformer=Bl,Ae.BackgroundTransformerType=ls,Ae.BlurRadius=Ar,Ae.ErrorFunction=ss,Ae.MediapipeHelper=yi,Ae.PipelineInfoData=ui,Ae.SelfieSegmentationType=cs,Ae.VonageMediaProcessor=Po,Ae.WarningType=os,Ae.createVonageMediaProcessor=d3,Ae.getSupportedBrowserFeatures=as,Ae.getVonageFaceDetection=l3,Ae.getVonageFaceMash=c3,Ae.getVonageHands=o3,Ae.getVonageHolistic=s3,Ae.getVonageObjectron=u3,Ae.getVonagePose=a3,Ae.getVonageSelfieSegmentation=i3,Ae.isSupported=L2,Object.defineProperties(Ae,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
435
+ `;class r3 extends Rr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return e3+this.createLoopFunction()}getVertexShader(){return n3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
436
+
437
+ vec4 loop() {
438
+ vec4 result = vec4(0,0,0,0);
439
+ float factorSum = 0.;
440
+
441
+ vec2 normalizedRadius = vec2(-${n}.) / canvas;
442
+ vec2 normalizedIncrement = vec2(1.) / canvas;
443
+ vec2 diff = normalizedRadius;
444
+ float maxLength = length(normalizedRadius);
445
+
446
+ for(int y=-${n}; y<${n+1}; ++y) {
447
+ for(int x=-${n}; x<${n+1}; ++x) {
448
+ float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;
449
+ result += factor * texture2D(texture, _texture_coord + diff);
450
+ factorSum += factor;
451
+ diff.x += normalizedIncrement.x;
452
+ }
453
+ diff.y += normalizedIncrement.y;
454
+ diff.x = normalizedRadius.x;
455
+ }
456
+ return result / factorSum;
457
+ }`}}const i3=10,o3=2,s3=8;class l3 extends Oo{constructor(r,m){super();Zt(this,"inputImage");Zt(this,"inputMask");Zt(this,"blur");this.context=r,this.radius=m;const X={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new r3({...X,radius:m,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const S=new jo({...X,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(r,this.inputImage),mask:pn(r,this.inputMask)})}),this.addStep({program:S,getUniforms:()=>({background:pn(r,this.blur.output),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}getBlurTextureSize(r,m){const X=this.radius>i3?s3:o3;return{width:Math.max(Nr,r/X),height:Math.max(Nr,m/X)}}setData(r,m){this.inputImage=r,this.inputMask=m}resizeOutput(r,m){super.resizeOutput(r,m);const X=this.getBlurTextureSize(r,m);this.blur.resizeOutput(X.width,X.height)}}class c3 extends _i{constructor(r){super();Zt(this,"pipeline");this.pipeline=new l3(this.context,r),this.disablePostProcessing()}}class u3 extends Oo{constructor(r,m){super();Zt(this,"inputImage");Zt(this,"inputMask");this.context=r;const X={context:r,height:r.canvas.height,width:r.canvas.width},S=new Ml({...X,radius:m,type:Po.GAUSSIAN}),H=new jo({...X,disableFramebuffer:!0});this.addStep({program:S,getUniforms:()=>({texture:pn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:pn(r,this.inputImage),foreground:pn(r,S.output),threshold:pn(r,this.inputMask)})})}setData(r,m){this.inputImage=r,this.inputMask=m}}class a3 extends _i{constructor(r){super();Zt(this,"pipeline");this.pipeline=new u3(this.context,r),this.disablePostProcessing()}}class d3 extends El{constructor(){super(...arguments);Zt(this,"frameReader");Zt(this,"preciseMaskEnabled",!0)}set inputVideo(r){this.frameReader=r.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var m;const r=await((m=this.frameReader)==null?void 0:m.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class h3 extends _i{constructor(){super();Zt(this,"pipeline");this.pipeline=new d3(this.context)}setBackgroundVideo(r){this.pipeline.inputVideo=r}}class zl{blurBackground(n){return new c3(n)}blurSilhouette(n){return new a3(n)}imageBackground(){return new Kl}videoBackground(){return new h3}}class f3{constructor(n){Zt(this,"factory");switch(n){case Br.CANVAS:this.factory=new jl;break;case Br.WEBGL:this.factory=new zl;break;default:const r=fs();this.factory=r.supported?new zl:new jl}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class m3{constructor(){Zt(this,"renderer")}setBackgroundOptions(n){var m,X;const r=new f3((m=n.renderingOptions)==null?void 0:m.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":this.renderer=r.videoBackground();break;case"VirtualBackground":this.renderer=r.imageBackground();break;default:throw`Unknown rendering type [${n.transformerType}]`}((X=n.renderingOptions)==null?void 0:X.type)===Br.WEBGL&&(n.renderingOptions.selfieSegmentationType===ai.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===ai.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){const r=this.renderer;r.setBackgroundVideo&&r.setBackgroundVideo(n)}async setVirtualBGImage(n){const r=this.renderer;r.setBackgroundImage&&r.setBackgroundImage(n)}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=Er.Low){switch(n){case Er.Low:return 5;case Er.High:return 12}return n}async profile(n){var r,m;return(m=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?m:[]}}class Ol{constructor(){Zt(this,"selfieSegmentation",new ds);Zt(this,"backgroundFilter");Zt(this,"reporter",new Wc);Zt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new m3,this.report({variation:"Create"})}async transform(n,r){var T,B;let m;const X=(T=n.timestamp)!=null?T:0,S=await createImageBitmap(n),H=await this.selfieSegmentation.process(S);H&&(m=await((B=this.backgroundFilter)==null?void 0:B.process(S,H))),m?(n.close(),r.enqueue(new VideoFrame(m,{timestamp:X,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,m;return(m=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?m:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}report(n){var r;this.reporter.send({version:Vc,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const $o=class{constructor(){Zt(this,"backgroundTransformer",new Ol);Zt(this,"mediaProcessor",new Y2);Zt(this,"rate",30);Zt(this,"resolveOnMediaProcessor");Zt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((m,X)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:m,data:X}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:m,data:X})})}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){V2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let Qo=$o;(()=>{_2("ProcessorWorker",$o)})();const Pl="dmFyIF9sPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgYmw9KEosUSxIKT0+USBpbiBKP19sKEosUSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6SH0pOkpbUV09SDt2YXIgbD0oSixRLEgpPT4oYmwoSix0eXBlb2YgUSE9InN5bWJvbCI/USsiIjpRLEgpLEgpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKKHIsZSl7cmV0dXJuIGdsb2JhbFRoaXNbcl18fChnbG9iYWxUaGlzW3JdPWUpLGdsb2JhbFRoaXNbcl19Y29uc3QgUT1KKCJnbG9iYWxzIix7fSk7dmFyIEg9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKEh8fHt9KTtmdW5jdGlvbiBFaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIEhlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+RWkobykpKX1KKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gRHIoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWZ1bmN0aW9uIGplKHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxqZShyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30samUoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIFRpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7SGUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IENyPUooInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gQWkocixlKXtlLndvcmtlcklkPXIsRHIoKSYmKENyW2Uud29ya2VySWRdPWUpfWZ1bmN0aW9uIHdpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPUNyW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7amUobixRKSxIZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBJaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxIZShyLG4pfWZ1bmN0aW9uIFNpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2plKHIuYXJnc1swXSxRKSxIZShyLHt9KX1mdW5jdGlvbiBSaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIEguSU5JVDp3aSh0LHIpO2JyZWFrO2Nhc2UgSC5GT1JXQVJEOlRpKHQscik7YnJlYWs7Y2FzZSBILlRFUk1JTkFURTpJaSh0LHIpO2JyZWFrO2Nhc2UgSC5HTE9CQUxTX1NZTkM6U2kodCk7YnJlYWt9fX1EcigpJiZSaSgpO3ZhciBGaT1PYmplY3QuZGVmaW5lUHJvcGVydHksUGk9KHIsZSx0KT0+ZSBpbiByP0ZpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxBPShyLGUsdCk9PihQaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y2xhc3MgWnt9QShaLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksQShaLCJlcnJvcnMiLHt0cmFuc2Zvcm1lcl9ub25lOiJObyB0cmFuc2Zvcm1lcnMgcHJvdmlkZWQiLHRyYW5zZm9ybWVyX3N0YXJ0OiJDYW5ub3Qgc3RhcnQgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX3RyYW5zZm9ybToiQ2Fubm90IHRyYW5zZm9ybSBmcmFtZSIsdHJhbnNmb3JtZXJfZmx1c2g6IkNhbm5vdCBmbHVzaCB0cmFuc2Zvcm1lciIscmVhZGFibGVfbnVsbDoiUmVhZGFibGUgaXMgbnVsbCIsd3JpdGFibGVfbnVsbDoiV3JpdGFibGUgaXMgbnVsbCJ9KTtjb25zdCBlZT1uZXcgV2Vha01hcCxZZT1uZXcgV2Vha01hcCxQZT1uZXcgV2Vha01hcCxrdD1TeW1ib2woImFueVByb2R1Y2VyIiksQnI9UHJvbWlzZS5yZXNvbHZlKCksWGU9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksUWU9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgRHQ9ITE7ZnVuY3Rpb24gRWUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBLZShyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBUZShyLGUpe2NvbnN0IHQ9WWUuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBrZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTprdCxuPVBlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24ga2kocixlLHQpe2NvbnN0IG49UGUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhrdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KGt0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIE5yKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpa2UocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlrZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIE9yKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIE1yO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighTXIuaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBDdD1yPT5yPT09WGV8fHI9PT1RZTtjbGFzcyBsZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Pcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgbGV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIER0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fER0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7RHQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtlZS5zZXQodGhpcyxuZXcgU2V0KSxZZS5zZXQodGhpcyxuZXcgTWFwKSxQZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9Pnt0cnl7bz1KU09OLnN0cmluZ2lmeShvKX1jYXRjaHtvPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhvKS5qb2luKCIsIil9YH10eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGxlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7S2UodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpRWUobiksVGUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksQ3Qobil8fHRoaXMuZW1pdChYZSx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtLZSh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSlFZShuKSxUZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLEN0KG4pfHx0aGlzLmVtaXQoUWUse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpRWUodCk7cmV0dXJuIE5yKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe0VlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksa2kodGhpcyxlLHQpO2NvbnN0IG49VGUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPUN0KGUpP1tdOlsuLi5pXTthd2FpdCBCcixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtFZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49VGUodGhpcyxlKSxpPWVlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBCcjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gS2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxlZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChYZSx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBOcih0aGlzKX1vZmZBbnkoZSl7S2UoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChRZSx7bGlzdGVuZXI6ZX0pLGVlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7VGUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49a2UodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7ZWUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgWWUuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBQZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9ZWUuZ2V0KHRoaXMpLnNpemUrVGUodGhpcyxuKS5zaXplK2tlKHRoaXMsbikuc2l6ZStrZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmRWUobiksdCs9ZWUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgWWUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBQZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9T3IodCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IE1yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpYZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6UWUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgQnQ9bGU7ZnVuY3Rpb24gRGkocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIENpKHIpe2lmKERpKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIE50KHIpe3JldHVybiBDaShyKS5tZXNzYWdlfXZhciBCaT1PYmplY3QuZGVmaW5lUHJvcGVydHksTmk9KHIsZSx0KT0+ZSBpbiByP0JpKHIsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOnJbZV09dCxPaT0ocixlLHQpPT4oTmkocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NvbnN0IE1pPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyIsVWk9Imh0dHBzOi8vIixMaT0xZTQ7bGV0IHFlO2NvbnN0IEdpPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiAkaSgpe2lmKCFxZSYmKHFlPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSwhcWUpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gcWUoR2kpfWNvbnN0IEM9W107Zm9yKGxldCByPTA7cjwyNTY7KytyKUMucHVzaCgocisyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gemkocixlPTApe3JldHVybihDW3JbZSswXV0rQ1tyW2UrMV1dK0NbcltlKzJdXStDW3JbZSszXV0rIi0iK0NbcltlKzRdXStDW3JbZSs1XV0rIi0iK0NbcltlKzZdXStDW3JbZSs3XV0rIi0iK0NbcltlKzhdXStDW3JbZSs5XV0rIi0iK0NbcltlKzEwXV0rQ1tyW2UrMTFdXStDW3JbZSsxMl1dK0NbcltlKzEzXV0rQ1tyW2UrMTRdXStDW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpfWNvbnN0IFdpPXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8ucmFuZG9tVVVJRCYmY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pLFVyPXtyYW5kb21VVUlEOldpfTtmdW5jdGlvbiBWaShyLGUsdCl7aWYoVXIucmFuZG9tVVVJRCYmIWUmJiFyKXJldHVybiBVci5yYW5kb21VVUlEKCk7cj1yfHx7fTtjb25zdCBuPXIucmFuZG9tfHwoci5ybmd8fCRpKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IobGV0IGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4gemkobil9ZnVuY3Rpb24gT3QocixlKXtyZXR1cm4gZ2xvYmFsVGhpc1tyXXx8KGdsb2JhbFRoaXNbcl09ZSksZ2xvYmFsVGhpc1tyXX1jb25zdCB0ZT1PdCgiZ2xvYmFscyIse30pO3ZhciBkZT0ocj0+KHIuSU5JVD0iSU5JVCIsci5GT1JXQVJEPSJGT1JXQVJEIixyLlRFUk1JTkFURT0iVEVSTUlOQVRFIixyLkdMT0JBTFNfU1lOQz0iR0xPQkFMU19TWU5DIixyKSkoZGV8fHt9KTtmdW5jdGlvbiBMcihyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWxldCBIaT0wO2Z1bmN0aW9uIGppKHIsZSx0LG4saSl7Y29uc3Qgbz1IaSsrO3JldHVybiByLnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6ZSxmdW5jdGlvbk5hbWU6dCxhcmdzOm59LG4uZmlsdGVyKHM9PkxyKHMpKSksbmV3IFByb21pc2Uocz0+e2k9PW51bGx8fGkuc2V0KG8scyl9KX1mdW5jdGlvbiBEZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLGk9QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LGkuZmlsdGVyKG89PkxyKG8pKSl9Y29uc3QgR3I9T3QoIndvcmtlcml6ZWQiLHt9KTtmdW5jdGlvbiAkcigpe3JldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9YXN5bmMgZnVuY3Rpb24gWWkoKXtpZigkcigpKURlKHt0eXBlOmRlLkdMT0JBTFNfU1lOQ30sdGUpO2Vsc2V7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBpbiBHcil7Y29uc3R7d29ya2VyOnQscmVzb2x2ZXJzOm59PUdyW2VdLndvcmtlckNvbnRleHQ7dCYmci5wdXNoKGppKHQsZGUuR0xPQkFMU19TWU5DLCIiLFt0ZV0sbikpfWF3YWl0IFByb21pc2UuYWxsKHIpfX1mdW5jdGlvbiBKZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sSmUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LEplKHJbdF0sZVt0XSkpOmVbdF09clt0XX1hc3luYyBmdW5jdGlvbiBYaShyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO0RlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBRaT1PdCgicmVnaXN0ZXJlZFdvcmtlcnMiLHt9KTtmdW5jdGlvbiBLaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3MsaT1RaVt0XTtpZihpKWUuaW5zdGFuY2U9bmV3IGkoci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO0plKG4sdGUpLERlKHIsdHlwZW9mIGUuaW5zdGFuY2UhPT12b2lkIDApfWFzeW5jIGZ1bmN0aW9uIHFpKHIsZSl7Y29uc3R7YXJnczp0fT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7bGV0IG47ZS5pbnN0YW5jZS50ZXJtaW5hdGUmJihuPWF3YWl0IGUuaW5zdGFuY2UudGVybWluYXRlKC4uLnQhPW51bGw/dDpbXSkpLERlKHIsbil9ZnVuY3Rpb24gSmkocil7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGdsb2JhbHMgd2hpbGUgc3luY2luZyI7SmUoci5hcmdzWzBdLHRlKSxEZShyLHt9KX1mdW5jdGlvbiBaaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIGRlLklOSVQ6S2kodCxyKTticmVhaztjYXNlIGRlLkZPUldBUkQ6WGkodCxyKTticmVhaztjYXNlIGRlLlRFUk1JTkFURTpxaSh0LHIpO2JyZWFrO2Nhc2UgZGUuR0xPQkFMU19TWU5DOkppKHQpO2JyZWFrfX19JHIoKSYmWmkoKTtmdW5jdGlvbiBlbyhyLGUpe3JldHVybiB0ZVtyXXx8KHRlW3JdPWUpLFsoKT0+dGVbcl0sYXN5bmMgdD0+e3RlW3JdPXQsYXdhaXQgWWkoKX1dfWZ1bmN0aW9uIHRvKHIsZSl7cmV0dXJuIGVvKHIsZSl9Y29uc3Rbcm8sbm9dPXRvKCJtZXRhZGF0YSIpO2Z1bmN0aW9uIGlvKHIpe25vKHIpfWZ1bmN0aW9uIE10KCl7cmV0dXJuIHJvKCl9Y2xhc3MgVXR7Y29uc3RydWN0b3IoZSl7T2kodGhpcywidXVpZCIsVmkoKSksdGhpcy5jb25maWc9ZX1hc3luYyBzZW5kKGUpe3ZhciB0LG4saTtjb25zdHthcHBJZDpvLHNvdXJjZVR5cGU6c309KHQ9TXQoKSkhPW51bGw/dDp7fTtpZighb3x8IXMpcmV0dXJuIm1ldGFkYXRhIG1pc3NpbmciO2NvbnN0IGE9bmV3IEFib3J0Q29udHJvbGxlcix1PXNldFRpbWVvdXQoKCk9PmEuYWJvcnQoKSxMaSk7cmV0dXJuIGF3YWl0KChpPShuPXRoaXMuY29uZmlnKT09bnVsbD92b2lkIDA6bi5mZXRjaCkhPW51bGw/aTpmZXRjaCkodGhpcy5nZXRVcmwoKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnRoaXMuZ2V0SGVhZGVycygpLGJvZHk6SlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFJlcG9ydChlKSksc2lnbmFsOmEuc2lnbmFsfSksY2xlYXJUaW1lb3V0KHUpLCJzdWNjZXNzIn1nZXRVcmwoKXt2YXIgZTtsZXQgdD0oZT1NdCgpLnByb3h5VXJsKSE9bnVsbD9lOlVpO3JldHVybiB0Kz0odC5hdCgtMSk9PT0iLyI/IiI6Ii8iKStNaSx0fWdldEhlYWRlcnMoKXtyZXR1cm57IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX1idWlsZFJlcG9ydChlKXtjb25zdCB0PU10KCk7cmV0dXJue2d1aWQ6dGhpcy51dWlkLC4uLmUsYXBwbGljYXRpb25JZDp0LmFwcElkLHRpbWVzdGFtcDpEYXRlLm5vdygpLHByb3h5VXJsOnQucHJveHlVcmwsc291cmNlOnQuc291cmNlVHlwZX19fWNvbnN0IFplPSIyLjAuMiI7Y2xhc3Mgb297Y29uc3RydWN0b3IoZSl7QSh0aGlzLCJmcmFtZVRyYW5zZm9ybWVkQ291bnQiLDApLEEodGhpcywiZnJhbWVGcm9tU291cmNlQ291bnQiLDApLEEodGhpcywic3RhcnRBdCIsMCksQSh0aGlzLCJyZXBvcnRlciIpLHRoaXMuY29uZmlnPWUsdGhpcy5yZXBvcnRlcj1uZXcgVXQoZSl9YXN5bmMgb25GcmFtZUZyb21Tb3VyY2UoKXt0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50Kyt9Z2V0IGZwcygpe2NvbnN0e3N0YXJ0QXQ6ZSxmcmFtZUZyb21Tb3VyY2VDb3VudDp0fT10aGlzLG49KERhdGUubm93KCktZSkvMWUzO3JldHVybiB0L259YXN5bmMgb25GcmFtZVRyYW5zZm9ybWVkKGU9e30sdD0hMSl7dGhpcy5zdGFydEF0PT09MCYmKHRoaXMuc3RhcnRBdD1EYXRlLm5vdygpKSx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudCsrO2NvbnN0e3N0YXJ0QXQ6bixmcmFtZVRyYW5zZm9ybWVkQ291bnQ6aSxmcmFtZUZyb21Tb3VyY2VDb3VudDpvfT10aGlzLHM9RGF0ZS5ub3coKSxhPShzLW4pLzFlMyx1PWkvYSxmPW8vYTtyZXR1cm4gdHx8dGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ+PXRoaXMuY29uZmlnLmxvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ/KHRoaXMuZnJhbWVGcm9tU291cmNlQ291bnQ9MCx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD0wLHRoaXMuc3RhcnRBdD1zLHRoaXMucmVwb3J0ZXIuY29uZmlnPXRoaXMuY29uZmlnLHRoaXMucmVwb3J0ZXIuc2VuZCh7Li4udGhpcy5jb25maWcucmVwb3J0LHZhcmlhdGlvbjoiUW9TIixmcHM6Zix0cmFuc2Zvcm1lZEZwczp1LGZyYW1lc1RyYW5zZm9ybWVkOmksLi4uZX0pKToic3VjY2VzcyJ9fXZhciBMdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShMdHx8e30pO2NvbnN0IHNvPTUwMCxhbz0uODtjbGFzcyB1byBleHRlbmRzIEJ0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSxBKHRoaXMsInJlcG9ydGVyXyIsbmV3IFV0KSxBKHRoaXMsInJlcG9ydGVyUW9zXyIsbmV3IG9vKHtsb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50OnNvLHJlcG9ydDp7dmVyc2lvbjpaZX19KSksQSh0aGlzLCJ0cmFuc2Zvcm1lclR5cGVfIiksQSh0aGlzLCJ0cmFuc2Zvcm1lcl8iKSxBKHRoaXMsInNob3VsZFN0b3BfIiksQSh0aGlzLCJpc0ZsYXNoZWRfIiksQSh0aGlzLCJtZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfIiksQSh0aGlzLCJ2aWRlb0hlaWdodF8iKSxBKHRoaXMsInZpZGVvV2lkdGhfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSxBKHRoaXMsImluZGV4XyIpLEEodGhpcywiY29udHJvbGxlcl8iKSx0aGlzLmluZGV4Xz10LHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Wi5lcnJvcnMudHJhbnNmb3JtZXJfc3RhcnQsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6TnQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJzdGFydCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbixpLG8scztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KG49ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9uOjAsdGhpcy52aWRlb1dpZHRoXz0oaT1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/aTowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6TnQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKmFvPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Wi5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6TnQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOlplLGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246WmUsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIGNvIGV4dGVuZHMgQnR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInRyYWNrRXhwZWN0ZWRSYXRlXyIpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IHVvKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIGZvIGV4dGVuZHMgQnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLEEodGhpcywicmVwb3J0ZXJfIiksQSh0aGlzLCJwaXBlbGluZV8iKSxBKHRoaXMsInRyYW5zZm9ybWVyc18iKSxBKHRoaXMsInJlYWRhYmxlXyIpLEEodGhpcywid3JpdGFibGVfIiksQSh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnJlcG9ydGVyXz1uZXcgVXQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOlouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpaLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOlouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IGNvKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixpPT57biYmKGk9PT0icGlwZWxpbmVfc3RhcnRlZCI/aT1MdC5waXBlbGluZV9yZXN0YXJ0ZWQ6aT09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYoaT1MdC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixpKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2goaT0+e3QoaSl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOloudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOlplLGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIGxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxtbz0ocixlLHQpPT5lIGluIHI/bG8ocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LGhvPShyLGUsdCk9PihtbyhyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgcG89ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIixnbz0iaHR0cHM6Ly8iLHlvPTFlNDtsZXQgZXQ7Y29uc3QgeG89bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIF9vKCl7aWYoIWV0JiYoZXQ9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFldCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBldCh4byl9Y29uc3QgQj1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpQi5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiBibyhyLGU9MCl7cmV0dXJuKEJbcltlKzBdXStCW3JbZSsxXV0rQltyW2UrMl1dK0JbcltlKzNdXSsiLSIrQltyW2UrNF1dK0JbcltlKzVdXSsiLSIrQltyW2UrNl1dK0JbcltlKzddXSsiLSIrQltyW2UrOF1dK0JbcltlKzldXSsiLSIrQltyW2UrMTBdXStCW3JbZSsxMV1dK0JbcltlKzEyXV0rQltyW2UrMTNdXStCW3JbZSsxNF1dK0JbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3Qgdm89dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksenI9e3JhbmRvbVVVSUQ6dm99O2Z1bmN0aW9uIEVvKHIsZSx0KXtpZih6ci5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIHpyLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8X28pKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBibyhuKX1mdW5jdGlvbiBHdChyLGUpe3JldHVybiBnbG9iYWxUaGlzW3JdfHwoZ2xvYmFsVGhpc1tyXT1lKSxnbG9iYWxUaGlzW3JdfWNvbnN0IHJlPUd0KCJnbG9iYWxzIix7fSk7dmFyIG1lPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShtZXx8e30pO2Z1bmN0aW9uIFdyKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IFRvPTA7ZnVuY3Rpb24gQW8ocixlLHQsbixpKXtjb25zdCBvPVRvKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+V3IocykpKSxuZXcgUHJvbWlzZShzPT57aT09bnVsbHx8aS5zZXQobyxzKX0pfWZ1bmN0aW9uIENlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsaT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0saS5maWx0ZXIobz0+V3IobykpKX1jb25zdCBWcj1HdCgid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIEhyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiB3bygpe2lmKEhyKCkpQ2Uoe3R5cGU6bWUuR0xPQkFMU19TWU5DfSxyZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIFZyKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09VnJbZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goQW8odCxtZS5HTE9CQUxTX1NZTkMsIiIsW3JlXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIHR0KHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSx0dChyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sdHQoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIElvKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7Q2Uocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFNvPUd0KCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIFJvKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxpPVNvW3RdO2lmKGkpZS5pbnN0YW5jZT1uZXcgaShyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7dHQobixyZSksQ2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gRm8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksQ2UocixuKX1mdW5jdGlvbiBQbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjt0dChyLmFyZ3NbMF0scmUpLENlKHIse30pfWZ1bmN0aW9uIGtvKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgbWUuSU5JVDpSbyh0LHIpO2JyZWFrO2Nhc2UgbWUuRk9SV0FSRDpJbyh0LHIpO2JyZWFrO2Nhc2UgbWUuVEVSTUlOQVRFOkZvKHQscik7YnJlYWs7Y2FzZSBtZS5HTE9CQUxTX1NZTkM6UG8odCk7YnJlYWt9fX1IcigpJiZrbygpO2Z1bmN0aW9uIERvKHIsZSl7cmV0dXJuIHJlW3JdfHwocmVbcl09ZSksWygpPT5yZVtyXSxhc3luYyB0PT57cmVbcl09dCxhd2FpdCB3bygpfV19ZnVuY3Rpb24gQ28ocixlKXtyZXR1cm4gRG8ocixlKX1jb25zdFtCbyx2bF09Q28oIm1ldGFkYXRhIik7ZnVuY3Rpb24gJHQoKXtyZXR1cm4gQm8oKX1jbGFzcyBOb3tjb25zdHJ1Y3RvcihlKXtobyh0aGlzLCJ1dWlkIixFbygpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixpO2NvbnN0e2FwcElkOm8sc291cmNlVHlwZTpzfT0odD0kdCgpKSE9bnVsbD90Ont9O2lmKCFvfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLHlvKTtyZXR1cm4gYXdhaXQoKGk9KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9pOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPSR0KCkucHJveHlVcmwpIT1udWxsP2U6Z287cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK3BvLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9JHQoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgT289IjUuMC4wIjt2YXIgcnQ9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShydHx8e30pLHp0PShyPT4oci5GQVNUPSJGQVNUIixyLlBSRUNJU0U9IlBSRUNJU0UiLHIpKSh6dHx8e30pLG50PShyPT4oci5DQU5WQVM9IkNBTlZBUyIsci5XRUJHTD0iV0VCR0wiLHIpKShudHx8e30pLE1vPWZ1bmN0aW9uKCl7dmFyIHI9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dHlwZW9mIGU8InUiP2U6e30sbixpO3QucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oYyxoKXtuPWMsaT1ofSk7dmFyIG89e30scztmb3IocyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJihvW3NdPXRbc10pO3ZhciBhPSIuL3RoaXMucHJvZ3JhbSIsdT1mdW5jdGlvbihjLGgpe3Rocm93IGh9LGY9ITAsbT0iIjtmdW5jdGlvbiBwKGMpe3JldHVybiB0LmxvY2F0ZUZpbGU/dC5sb2NhdGVGaWxlKGMsbSk6bStjfXZhciBnO3R5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihtPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxyJiYobT1yKSxtLmluZGV4T2YoImJsb2I6IikhPT0wP209bS5zdWJzdHIoMCxtLnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSk6bT0iIjt2YXIgeD10LnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGQ9dC5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7Zm9yKHMgaW4gbylvLmhhc093blByb3BlcnR5KHMpJiYodFtzXT1vW3NdKTtvPW51bGwsdC5hcmd1bWVudHMmJnQuYXJndW1lbnRzLHQudGhpc1Byb2dyYW0mJihhPXQudGhpc1Byb2dyYW0pLHQucXVpdCYmKHU9dC5xdWl0KTt2YXIgXzt0Lndhc21CaW5hcnkmJihfPXQud2FzbUJpbmFyeSk7dmFyIEU9dC5ub0V4aXRSdW50aW1lfHwhMDt0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZmZSgibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciB2LEY9ITEsaz10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiAkKGMsaCx5KXtmb3IodmFyIFQ9aCt5LEQ9aDtjW0RdJiYhKEQ+PVQpOykrK0Q7aWYoRC1oPjE2JiZjLnN1YmFycmF5JiZrKXJldHVybiBrLmRlY29kZShjLnN1YmFycmF5KGgsRCkpO2Zvcih2YXIgTj0iIjtoPEQ7KXt2YXIgdz1jW2grK107aWYoISh3JjEyOCkpe04rPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7Y29udGludWV9dmFyIE09Y1toKytdJjYzO2lmKCh3JjIyNCk9PTE5Mil7Tis9U3RyaW5nLmZyb21DaGFyQ29kZSgodyYzMSk8PDZ8TSk7Y29udGludWV9dmFyIHE9Y1toKytdJjYzO2lmKCh3JjI0MCk9PTIyND93PSh3JjE1KTw8MTJ8TTw8NnxxOnc9KHcmNyk8PDE4fE08PDEyfHE8PDZ8Y1toKytdJjYzLHc8NjU1MzYpTis9U3RyaW5nLmZyb21DaGFyQ29kZSh3KTtlbHNle3ZhciB2aT13LTY1NTM2O04rPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8dmk+PjEwLDU2MzIwfHZpJjEwMjMpfX1yZXR1cm4gTn1mdW5jdGlvbiBHKGMsaCl7cmV0dXJuIGM/JChjZSxjLGgpOiIifWZ1bmN0aW9uIFYoYyxoLHkpe2Zvcih2YXIgVD0wO1Q8Yy5sZW5ndGg7KytUKWJlW2grKz4+MF09Yy5jaGFyQ29kZUF0KFQpO3l8fChiZVtoPj4wXT0wKX1mdW5jdGlvbiB6KGMsaCl7cmV0dXJuIGMlaD4wJiYoYys9aC1jJWgpLGN9dmFyIHplLGJlLGNlLFc7ZnVuY3Rpb24gaGkoYyl7emU9Yyx0LkhFQVA4PWJlPW5ldyBJbnQ4QXJyYXkoYyksdC5IRUFQMTY9bmV3IEludDE2QXJyYXkoYyksdC5IRUFQMzI9Vz1uZXcgSW50MzJBcnJheShjKSx0LkhFQVBVOD1jZT1uZXcgVWludDhBcnJheShjKSx0LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGMpLHQuSEVBUFUzMj1uZXcgVWludDMyQXJyYXkoYyksdC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYyksdC5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYyl9dC5JTklUSUFMX01FTU9SWTt2YXIgUnIscGk9W10sZ2k9W10seWk9W10sT2Y9MDtmdW5jdGlvbiBNZigpe3JldHVybiBFfHxPZj4wfWZ1bmN0aW9uIFVmKCl7aWYodC5wcmVSdW4pZm9yKHR5cGVvZiB0LnByZVJ1bj09ImZ1bmN0aW9uIiYmKHQucHJlUnVuPVt0LnByZVJ1bl0pO3QucHJlUnVuLmxlbmd0aDspJGYodC5wcmVSdW4uc2hpZnQoKSk7RnIocGkpfWZ1bmN0aW9uIExmKCl7RnIoZ2kpfWZ1bmN0aW9uIEdmKCl7aWYodC5wb3N0UnVuKWZvcih0eXBlb2YgdC5wb3N0UnVuPT0iZnVuY3Rpb24iJiYodC5wb3N0UnVuPVt0LnBvc3RSdW5dKTt0LnBvc3RSdW4ubGVuZ3RoOylXZih0LnBvc3RSdW4uc2hpZnQoKSk7RnIoeWkpfWZ1bmN0aW9uICRmKGMpe3BpLnVuc2hpZnQoYyl9ZnVuY3Rpb24gemYoYyl7Z2kudW5zaGlmdChjKX1mdW5jdGlvbiBXZihjKXt5aS51bnNoaWZ0KGMpfXZhciB2ZT0wLFdlPW51bGw7ZnVuY3Rpb24gVmYoYyl7dmUrKyx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSl9ZnVuY3Rpb24gSGYoYyl7aWYodmUtLSx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSksdmU9PTAmJldlKXt2YXIgaD1XZTtXZT1udWxsLGgoKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gZmUoYyl7dC5vbkFib3J0JiZ0Lm9uQWJvcnQoYyksYz0iQWJvcnRlZCgiK2MrIikiLGQoYyksRj0hMCxjKz0iLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIGg9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihjKTt0aHJvdyBpKGgpLGh9dmFyIGpmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiB4aShjKXtyZXR1cm4gYy5zdGFydHNXaXRoKGpmKX12YXIgWDtYPSJ0ZmxpdGUtc2ltZC53YXNtIix4aShYKXx8KFg9cChYKSk7ZnVuY3Rpb24gX2koYyl7dHJ5e2lmKGM9PVgmJl8pcmV0dXJuIG5ldyBVaW50OEFycmF5KF8pO2lmKCFnKXRocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChoKXtmZShoKX19ZnVuY3Rpb24gWWYoKXtyZXR1cm4hXyYmZiYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKFgse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGMpe2lmKCFjLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrWCsiJyI7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIF9pKFgpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBfaShYKX0pfWZ1bmN0aW9uIFhmKCl7dmFyIGM9e2E6cGx9O2Z1bmN0aW9uIGgodyxNKXt2YXIgcT13LmV4cG9ydHM7dC5hc209cSx2PXQuYXNtLnEsaGkodi5idWZmZXIpLFJyPXQuYXNtLkUsemYodC5hc20uciksSGYoKX1WZigpO2Z1bmN0aW9uIHkodyl7aCh3Lmluc3RhbmNlKX1mdW5jdGlvbiBUKHcpe3JldHVybiBZZigpLnRoZW4oZnVuY3Rpb24oTSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKE0sYyl9KS50aGVuKGZ1bmN0aW9uKE0pe3JldHVybiBNfSkudGhlbih3LGZ1bmN0aW9uKE0pe2QoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrTSksZmUoTSl9KX1mdW5jdGlvbiBEKCl7cmV0dXJuIV8mJnR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZz09ImZ1bmN0aW9uIiYmIXhpKFgpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24odyl7dmFyIE09V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcodyxjKTtyZXR1cm4gTS50aGVuKHksZnVuY3Rpb24ocSl7cmV0dXJuIGQoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3EpLGQoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksVCh5KX0pfSk6VCh5KX1pZih0Lmluc3RhbnRpYXRlV2FzbSl0cnl7dmFyIE49dC5pbnN0YW50aWF0ZVdhc20oYyxoKTtyZXR1cm4gTn1jYXRjaCh3KXtyZXR1cm4gZCgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit3KSwhMX1yZXR1cm4gRCgpLmNhdGNoKGkpLHt9fWZ1bmN0aW9uIEZyKGMpe2Zvcig7Yy5sZW5ndGg+MDspe3ZhciBoPWMuc2hpZnQoKTtpZih0eXBlb2YgaD09ImZ1bmN0aW9uIil7aCh0KTtjb250aW51ZX12YXIgeT1oLmZ1bmM7dHlwZW9mIHk9PSJudW1iZXIiP2guYXJnPT09dm9pZCAwP1JyLmdldCh5KSgpOlJyLmdldCh5KShoLmFyZyk6eShoLmFyZz09PXZvaWQgMD9udWxsOmguYXJnKX19ZnVuY3Rpb24gUWYoYyxoLHksVCl7ZmUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrRyhjKSsiLCBhdDogIitbaD9HKGgpOiJ1bmtub3duIGZpbGVuYW1lIix5LFQ/RyhUKToidW5rbm93biBmdW5jdGlvbiJdKX1mdW5jdGlvbiBLZihjLGgpe2ZlKCJUbyB1c2UgZGxvcGVuLCB5b3UgbmVlZCB0byB1c2UgRW1zY3JpcHRlbidzIGxpbmtpbmcgc3VwcG9ydCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi93aWtpL0xpbmtpbmciKX1mdW5jdGlvbiBxZihjLGgpe2ZlKCJUbyB1c2UgZGxvcGVuLCB5b3UgbmVlZCB0byB1c2UgRW1zY3JpcHRlbidzIGxpbmtpbmcgc3VwcG9ydCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi93aWtpL0xpbmtpbmciKX1mdW5jdGlvbiBKZigpe2ZlKCIiKX12YXIgU3Q7U3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O3ZhciBaZj0hMDtmdW5jdGlvbiBlbChjKXtyZXR1cm4gV1tiaSgpPj4yXT1jLGN9ZnVuY3Rpb24gdGwoYyxoKXt2YXIgeTtpZihjPT09MCl5PURhdGUubm93KCk7ZWxzZSBpZigoYz09PTF8fGM9PT00KSYmWmYpeT1TdCgpO2Vsc2UgcmV0dXJuIGVsKDI4KSwtMTtyZXR1cm4gV1toPj4yXT15LzFlM3wwLFdbaCs0Pj4yXT15JTFlMyoxZTMqMWUzfDAsMH1mdW5jdGlvbiBybCgpe3JldHVybiAyMTQ3NDgzNjQ4fWZ1bmN0aW9uIG5sKGMsaCx5KXtjZS5jb3B5V2l0aGluKGMsaCxoK3kpfWZ1bmN0aW9uIGlsKGMpe3RyeXtyZXR1cm4gdi5ncm93KGMtemUuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxoaSh2LmJ1ZmZlciksMX1jYXRjaHt9fWZ1bmN0aW9uIG9sKGMpe3ZhciBoPWNlLmxlbmd0aDtjPWM+Pj4wO3ZhciB5PTIxNDc0ODM2NDg7aWYoYz55KXJldHVybiExO2Zvcih2YXIgVD0xO1Q8PTQ7VCo9Mil7dmFyIEQ9aCooMSsuMi9UKTtEPU1hdGgubWluKEQsYysxMDA2NjMyOTYpO3ZhciBOPU1hdGgubWluKHkseihNYXRoLm1heChjLEQpLDY1NTM2KSksdz1pbChOKTtpZih3KXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNsKGMpe2Zvcih2YXIgaD1TdCgpO1N0KCktaDxjOyk7fXZhciBQcj17fTtmdW5jdGlvbiBhbCgpe3JldHVybiBhfHwiLi90aGlzLnByb2dyYW0ifWZ1bmN0aW9uIFZlKCl7aWYoIVZlLnN0cmluZ3Mpe3ZhciBjPSh0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLGg9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzpjLF86YWwoKX07Zm9yKHZhciB5IGluIFByKVByW3ldPT09dm9pZCAwP2RlbGV0ZSBoW3ldOmhbeV09UHJbeV07dmFyIFQ9W107Zm9yKHZhciB5IGluIGgpVC5wdXNoKHkrIj0iK2hbeV0pO1ZlLnN0cmluZ3M9VH1yZXR1cm4gVmUuc3RyaW5nc312YXIgUnQ9e21hcHBpbmdzOnt9LGJ1ZmZlcnM6W251bGwsW10sW11dLHByaW50Q2hhcjpmdW5jdGlvbihjLGgpe3ZhciB5PVJ0LmJ1ZmZlcnNbY107aD09PTB8fGg9PT0xMD8oKGM9PT0xP3g6ZCkoJCh5LDApKSx5Lmxlbmd0aD0wKTp5LnB1c2goaCl9LHZhcmFyZ3M6dm9pZCAwLGdldDpmdW5jdGlvbigpe1J0LnZhcmFyZ3MrPTQ7dmFyIGM9V1tSdC52YXJhcmdzLTQ+PjJdO3JldHVybiBjfSxnZXRTdHI6ZnVuY3Rpb24oYyl7dmFyIGg9RyhjKTtyZXR1cm4gaH0sZ2V0NjQ6ZnVuY3Rpb24oYyxoKXtyZXR1cm4gY319O2Z1bmN0aW9uIHVsKGMsaCl7dmFyIHk9MDtyZXR1cm4gVmUoKS5mb3JFYWNoKGZ1bmN0aW9uKFQsRCl7dmFyIE49aCt5O1dbYytEKjQ+PjJdPU4sVihULE4pLHkrPVQubGVuZ3RoKzF9KSwwfWZ1bmN0aW9uIGNsKGMsaCl7dmFyIHk9VmUoKTtXW2M+PjJdPXkubGVuZ3RoO3ZhciBUPTA7cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihEKXtUKz1ELmxlbmd0aCsxfSksV1toPj4yXT1ULDB9ZnVuY3Rpb24gZmwoYyl7eWwoYyl9ZnVuY3Rpb24gbGwoYyl7cmV0dXJuIDB9ZnVuY3Rpb24gZGwoYyxoLHksVCxEKXt9ZnVuY3Rpb24gbWwoYyxoLHksVCl7Zm9yKHZhciBEPTAsTj0wO048eTtOKyspe2Zvcih2YXIgdz1XW2grTio4Pj4yXSxNPVdbaCsoTio4KzQpPj4yXSxxPTA7cTxNO3ErKylSdC5wcmludENoYXIoYyxjZVt3K3FdKTtEKz1NfXJldHVybiBXW1Q+PjJdPUQsMH1mdW5jdGlvbiBobCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYyksY1swXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIEZ0KGMsaCl7RnQucmFuZG9tRGV2aWNlfHwoRnQucmFuZG9tRGV2aWNlPWhsKCkpO2Zvcih2YXIgeT0wO3k8aDt5KyspYmVbYyt5Pj4wXT1GdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgcGw9e2E6UWYsZTpLZixkOnFmLGI6SmYsbjp0bCxoOnJsLGw6bmwsbTpvbCxwOnNsLGY6dWwsZzpjbCxqOmZsLGk6bGwsazpkbCxjOm1sLG86RnR9O1hmKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGJpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oYmk9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB0O2Z1bmN0aW9uIGdsKGMpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrYysiKSIsdGhpcy5zdGF0dXM9Y31XZT1mdW5jdGlvbiBjKCl7UHR8fGtyKCksUHR8fChXZT1jKX07ZnVuY3Rpb24ga3IoYyl7aWYodmU+MHx8KFVmKCksdmU+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtQdHx8KFB0PSEwLHQuY2FsbGVkUnVuPSEwLCFGJiYoTGYoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxHZigpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1rcjtmdW5jdGlvbiB5bChjLGgpe3hsKGMpfWZ1bmN0aW9uIHhsKGMpe01mKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQoYyksRj0hMCksdShjLG5ldyBnbChjKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBrcigpLGUucmVhZHl9fSgpO2NsYXNzIFVve2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxlY3RlZFRGTGl0ZSIpO2wodGhpcywiaXNTSU1EU3VwcG9ydGVkIiwhMSk7bCh0aGlzLCJpc1RocmVhZHNTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlucHV0V2lkdGgiLDApO2wodGhpcywiaW5wdXRIZWlnaHQiLDApO2wodGhpcywiaW5wdXRDaGFubmVsQ291bnQiLDApO2wodGhpcywiaW5wdXRNZW1vcnlPZmZzZXQiLDApO2wodGhpcywib3V0cHV0V2lkdGgiLDApO2wodGhpcywib3V0cHV0SGVpZ2h0IiwwKTtsKHRoaXMsIm91dHB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJvdXRwdXRNZW1vcnlPZmZzZXQiLDApfX1jb25zdCBMbz0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixHbz0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gJG8ocj1MbyxlPUdvKXtsZXQgdD1uZXcgVW87dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIE1vKHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixtKT0+e2NvbnN0IHA9dTtpZih0eXBlb2YgcD4idSIpcmV0dXJuIG0oIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IGc9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6IixnKTtsZXQgeD1lK2Ake2d9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIit4KTt0cnl7Y29uc3QgXz1hd2FpdChhd2FpdCBmZXRjaCh4KSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6IixfLmJ5dGVMZW5ndGgpO2NvbnN0IEU9cC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6IixFKSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxwLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoXyksRSk7Y29uc3Qgdj1wLl9sb2FkTW9kZWwoXy5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6Iix2KSx2IT09MCl7bSgiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPXAuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PXAuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1wLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PXAuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9cC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1wLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1wLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1wfWNhdGNoKGQpe20oZCk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyB6b3tjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIixuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkpO2wodGhpcywiY29udGV4dCIsdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSk7bCh0aGlzLCJwaXhlbENvdW50IiwwKTtsKHRoaXMsImlucHV0T2Zmc2V0IiwwKTtsKHRoaXMsIm91dHB1dE9mZnNldCIsMCk7bCh0aGlzLCJpbmZvcyIpO2wodGhpcywibWFzayIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmluaXRXYXNtKGUsdCksdGhpcy5pbmZvcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLnBpeGVsQ291bnQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoKnRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuaW5mb3MuaW5wdXRIZWlnaHQpLHRoaXMuaW5wdXRPZmZzZXQ9dGhpcy5pbmZvcy5pbnB1dE1lbW9yeU9mZnNldC80LHRoaXMub3V0cHV0T2Zmc2V0PXRoaXMuaW5mb3Mub3V0cHV0TWVtb3J5T2Zmc2V0LzQpfWFzeW5jIGluaXRXYXNtKGUsdCl7dGhpcy5pbmZvcz1hd2FpdCAkbyhlLHQpfWdldE91dHB1dERpbWVuc2lvbnMoKXt2YXIgZSx0LG4saTtyZXR1cm57d2lkdGg6KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUub3V0cHV0V2lkdGgpIT1udWxsP3Q6MCxoZWlnaHQ6KGk9KG49dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOm4ub3V0cHV0SGVpZ2h0KSE9bnVsbD9pOjB9fWFzeW5jIHByb2Nlc3MoZSl7aWYoIXRoaXMubWFza3x8IXRoaXMuaW5mb3MpcmV0dXJuO2NvbnN0IHQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLG49dGhpcy5pbmZvcy5pbnB1dEhlaWdodDt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbik7Y29uc3QgaT10aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCx0LG4pLG89dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmlucHV0T2Zmc2V0K3MqMztvW2FdPWkuZGF0YVtzKjRdLzI1NSxvW2ErMV09aS5kYXRhW3MqNCsxXS8yNTUsb1thKzJdPWkuZGF0YVtzKjQrMl0vMjU1fXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuX3J1bkluZmVyZW5jZSgpO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzJbdGhpcy5vdXRwdXRPZmZzZXQrc107dGhpcy5tYXNrLmRhdGFbcyo0XT10aGlzLm1hc2suZGF0YVtzKjQrM109MjU1KmF9cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHRoaXMubWFzayl9aXNHcHVTdXBwb3J0ZWQoKXt2YXIgZSx0LG47cmV0dXJuKG49KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUuc2VsZWN0ZWRURkxpdGUpPT1udWxsP3ZvaWQgMDp0Ll9pc0dQVUVuYWJsZWQoKSkhPW51bGw/bjohMX19ZnVuY3Rpb24gV28oKXtyZXR1cm4gbmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIse2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITB9KT97c3VwcG9ydGVkOiEwfTp7c3VwcG9ydGVkOiExLG1lc3NhZ2U6IllvdXIgaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBnb29kIGVub3VnaCB0byBydW4gdGhlIGxpYnJhcnkgZWZmaWNpZW50bHkifX1jbGFzcyBXdHtjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIik7bCh0aGlzLCJjb250ZXh0Iik7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdD1lLmdldENvbnRleHQoIjJkIik7aWYoIXQpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9dH1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt9ZW5hYmxlUG9zdFByb2Nlc3NpbmcoKXt9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7fWFzeW5jIHByb2ZpbGVXZWJnbChlKXtyZXR1cm5bXX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gdGhpcy5jYW52YXN9cmVzaXplQ2FudmFzKGUpe2NvbnN0e3dpZHRoOnQsaGVpZ2h0Om59PWU7dGhpcy5jYW52YXMud2lkdGg9dCx0aGlzLmNhbnZhcy5oZWlnaHQ9bn1yZW5kZXJTaWxob3VldHRlKGUsdCxuPSJub25lIil7Y29uc3R7d2lkdGg6aSxoZWlnaHQ6b309ZTt0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCwwLDAsaSxvKSx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2UtaW4iLHRoaXMuY29udGV4dC5maWx0ZXI9bix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGksbywwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpfX1jbGFzcyBWbyBleHRlbmRzIFd0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKGUpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLHQpLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj1gYmx1cigke3RoaXMucmFkaXVzfXB4KWAsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBIbyBleHRlbmRzIFd0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5yYWRpdXM9ZX1hc3luYyByZW5kZXIoZSx0KXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKGUpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZShlLHQsYGJsdXIoJHt0aGlzLnJhZGl1c31weClgKSx0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSxzdXBlci5yZW5kZXIoZSx0KX19Y2xhc3Mgam8gZXh0ZW5kcyBXdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kSW1hZ2UodCl7dGhpcy5iYWNrZ3JvdW5kSW1hZ2U9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gc3VwZXIucmVzaXplQ2FudmFzKHQpLHRoaXMucmVuZGVyU2lsaG91ZXR0ZSh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlJiYodGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPSJub25lIix0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlLDAsMCx0aGlzLmJhY2tncm91bmRJbWFnZS53aWR0aCx0aGlzLmJhY2tncm91bmRJbWFnZS5oZWlnaHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCkpLHN1cGVyLnJlbmRlcih0LG4pfX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMi4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgVnQ9NTEyMCxCZT01MTIxLEh0PTUxMjIsanQ9NTEyMyxZdD01MTI0LFh0PTUxMjUsUXQ9NTEyNixZbz0zMjgxOSxYbz0zMjgyMCxRbz0zMzYzNSxLbz01MTMxLHFvPTMzNjQwLEpvPTM1ODk5LFpvPTM1OTAyLGVzPTM2MjY5LHRzPTM0MDQyLGpyPXt9O3tjb25zdCByPWpyO3JbVnRdPUludDhBcnJheSxyW0JlXT1VaW50OEFycmF5LHJbSHRdPUludDE2QXJyYXkscltqdF09VWludDE2QXJyYXkscltZdF09SW50MzJBcnJheSxyW1h0XT1VaW50MzJBcnJheSxyW1F0XT1GbG9hdDMyQXJyYXkscltZb109VWludDE2QXJyYXkscltYb109VWludDE2QXJyYXkscltRb109VWludDE2QXJyYXkscltLb109VWludDE2QXJyYXkscltxb109VWludDMyQXJyYXkscltKb109VWludDMyQXJyYXkscltab109VWludDMyQXJyYXkscltlc109VWludDMyQXJyYXksclt0c109VWludDMyQXJyYXl9ZnVuY3Rpb24gS3Qocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gVnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gQmU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIEh0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4ganQ7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIFl0O2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gWHQ7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gUXQ7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gWXIocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gVnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gQmU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIEh0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4ganQ7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIFl0O2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gWHQ7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gUXQ7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gWHIocil7Y29uc3QgZT1qcltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGl0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gUXIoLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBLcj1uZXcgTWFwO2Z1bmN0aW9uIG90KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Lci5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsS3Iuc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBycyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZvdChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIG5zKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJm90KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gcXQocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJm90KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIGlzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZvdChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCBxcj0zNTA0NCxoZT0zNDk2Mixvcz0zNDk2Myxzcz0zNDY2MCxhcz01MTIwLHVzPTUxMjEsY3M9NTEyMixmcz01MTIzLGxzPTUxMjQsZHM9NTEyNSxKcj01MTI2LFpyPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIG1zKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHxxcil9ZnVuY3Rpb24gZW4ocixlLHQsbil7aWYocnMocixlKSlyZXR1cm4gZTt0PXR8fGhlO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gbXMocix0LGksZSxuKSxpfWZ1bmN0aW9uIHRuKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIGhzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBwcyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZ3M9L2Nvb3JkfHRleHR1cmUvaSx5cz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24geHMocixlKXtsZXQgdDtpZihncy50ZXN0KHIpP3Q9Mjp5cy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBfcyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHx4cyhlLHR8fHBzKHIpLmxlbmd0aCl9ZnVuY3Rpb24gcm4ocixlKXtpZihpdChyKSlyZXR1cm4gcjtpZihpdChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9KdChyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KHRuKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gYnMocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/WXIocik6SnJ9ZnVuY3Rpb24gSnQocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9YcihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gdnMocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmJzKGUudHlwZSksYXJyYXlUeXBlOkp0KGUudHlwZSl9fWZ1bmN0aW9uIEVzKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1KdChlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKGhlLG8pLHIuYnVmZmVyRGF0YShoZSxpLGUuZHJhd1R5cGV8fHFyKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTpZcihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gVHMocixlLHQpe2NvbnN0IG49cm4oZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOmVuKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTpLdChuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gQXMocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCF0bihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxaci5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWl0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9dnM6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPUVzOnM9VHM7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTptfT1zKHIsaSxuKSxwPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOmhzKG0pLGc9X3MoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6Zyx0eXBlOnUsbm9ybWFsaXplOnAsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIoaGUsbnVsbCksdH1mdW5jdGlvbiB3cyhyLGUpe3JldHVybiBlPT09YXN8fGU9PT11cz8xOmU9PT1jc3x8ZT09PWZzPzI6ZT09PWxzfHxlPT09ZHN8fGU9PT1Kcj80OjB9Y29uc3QgWnQ9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBJcyhyLGUpe2xldCB0LG47Zm9yKG49MDtuPFp0Lmxlbmd0aCYmKHQ9WnRbbl0sISh0IGluIGV8fCh0PVpyLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1adC5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihoZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihoZSxzcyk7ci5iaW5kQnVmZmVyKGhlLG51bGwpO2NvbnN0IHM9d3MocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIFNzKHIsZSx0KXtjb25zdCBuPUFzKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPXJuKG8sImluZGljZXMiKTtpLmluZGljZXM9ZW4ocixzLG9zKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9S3Qocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1JcyhyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIE5lKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3Qgbm49ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxuZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LE9lPWl0LG9uPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxzbj02NDA2LEs9NjQwNyxSPTY0MDgsYW49NjQwOSx1bj02NDEwLE1lPTY0MDIsY249MzQwNDEsc3Q9MzMwNzEsUnM9OTcyOCxGcz05NzI5LGllPTM1NTMsb2U9MzQwNjcscGU9MzI4NzksZ2U9MzU4NjYsZXI9MzQwNjksUHM9MzQwNzAsa3M9MzQwNzEsRHM9MzQwNzIsQ3M9MzQwNzMsQnM9MzQwNzQsdHI9MTAyNDEscnI9MTAyNDAsYXQ9MTAyNDIsdXQ9MTAyNDMsZm49MzI4ODIsTnM9MzMwODIsT3M9MzMwODMsTXM9MzMwODQsVXM9MzMwODUsbnI9MzMxNyxsbj0zMzE0LGRuPTMyODc4LG1uPTMzMTYsaG49MzMxNSxwbj0zMjg3NyxMcz0zNzQ0MyxHcz0zNzQ0MSwkcz0zNzQ0MCx6cz0zMzMyMSxXcz0zNjc1NixWcz0zMzMyNSxIcz0zMzMyNixqcz0zMzMzMCxZcz0zMzMyOSxYcz0zMzMzOCxRcz0zMzMzNyxLcz0zMzM0MCxxcz0zMzMzOSxKcz0zMzMyMyxacz0zNjc1NyxlYT0zMzMyNyx0YT0zMzMyOCxyYT0zMzMzNixuYT0zMzMzNSxpYT0zMzMzMixvYT0zMzMzMSxzYT0zMzMzNCxhYT0zMzMzMyx1YT0zMjg0OSxjYT0zNTkwNSxmYT0zNjE5NCxsYT0zNjc1OCxkYT0zNTg5OCxtYT0zNTkwMSxoYT0zNDg0MyxwYT0zNDgzNyxnYT0zNjIyMSx5YT0zNjIzOSx4YT0zNjIxNSxfYT0zNjIzMyxiYT0zNjIwOSx2YT0zNjIyNyxFYT0zMjg1NixUYT0zNTkwNyxBYT0zNjc1OSx3YT0zMjg1NSxJYT0zMjg1NCxTYT0zMjg1NyxSYT0zNDg0MixGYT0zNDgzNixQYT0zNjIyMCxrYT0zNjIzOCxEYT0zNjk3NSxDYT0zNjIxNCxCYT0zNjIzMixOYT0zNjIyNixPYT0zNjIwOCxNYT0zMzE4OSxVYT0zMzE5MCxMYT0zNjAxMixHYT0zNjAxMywkYT0zNTA1NixzZT01MTIwLFM9NTEyMSxjdD01MTIyLEFlPTUxMjMsZnQ9NTEyNCx5ZT01MTI1LE89NTEyNixnbj0zMjgxOSx5bj0zMjgyMCx4bj0zMzYzNSxqPTUxMzEsVWU9MzYxOTMsaXI9MzM2NDAsemE9MzU4OTksV2E9MzU5MDIsVmE9MzYyNjksSGE9MzQwNDIsbHQ9MzMzMTksd2U9MzMzMjAsZHQ9NjQwMyxJZT0zNjI0NCxTZT0zNjI0OCx4ZT0zNjI0OTtsZXQgb3I7ZnVuY3Rpb24gbXQocil7aWYoIW9yKXtjb25zdCBlPXt9O2Vbc25dPXt0ZXh0dXJlRm9ybWF0OnNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W1MsaixVZSxPXX0sZVthbl09e3RleHR1cmVGb3JtYXQ6YW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxqLFVlLE9dfSxlW3VuXT17dGV4dHVyZUZvcm1hdDp1bixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltTLGosVWUsT119LGVbS109e3RleHR1cmVGb3JtYXQ6Syxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltTLGosVWUsTyx4bl19LGVbUl09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W1MsaixVZSxPLGduLHluXX0sZVtNZV09e3RleHR1cmVGb3JtYXQ6TWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt5ZSxBZV19LGVbenNdPXt0ZXh0dXJlRm9ybWF0OmR0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1NdfSxlW1dzXT17dGV4dHVyZUZvcm1hdDpkdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbVnNdPXt0ZXh0dXJlRm9ybWF0OmR0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbTyxqXX0sZVtIc109e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbT119LGVbanNdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W1NdfSxlW1lzXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltzZV19LGVbaWFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W0FlXX0sZVtvYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbY3RdfSxlW3NhXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbYWFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2Z0XX0sZVtKc109e3RleHR1cmVGb3JtYXQ6bHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbU119LGVbWnNdPXt0ZXh0dXJlRm9ybWF0Omx0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtlYV09e3RleHR1cmVGb3JtYXQ6bHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltPLGpdfSxlW3RhXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltPXX0sZVtyYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbU119LGVbbmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W3NlXX0sZVtYc109e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQWVdfSxlW1FzXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltjdF19LGVbS3NdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3llXX0sZVtxc109e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbZnRdfSxlW3VhXT17dGV4dHVyZUZvcm1hdDpLLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1NdfSxlW2NhXT17dGV4dHVyZUZvcm1hdDpLLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1NdfSxlW2ZhXT17dGV4dHVyZUZvcm1hdDpLLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbUyx4bl19LGVbbGFdPXt0ZXh0dXJlRm9ybWF0OkssY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbc2VdfSxlW2RhXT17dGV4dHVyZUZvcm1hdDpLLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTyxqLHphXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6Syxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W08saixXYV19LGVbaGFdPXt0ZXh0dXJlRm9ybWF0OkssY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbTyxqXX0sZVtwYV09e3RleHR1cmVGb3JtYXQ6Syxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbT119LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0OlNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W1NdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpTZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbeGFdPXt0ZXh0dXJlRm9ybWF0OlNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W0FlXX0sZVtfYV09e3RleHR1cmVGb3JtYXQ6U2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbY3RdfSxlW2JhXT17dGV4dHVyZUZvcm1hdDpTZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeWVdfSxlW3ZhXT17dGV4dHVyZUZvcm1hdDpTZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbZnRdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1NdfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1NdfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbUyx5bixpcl19LGVbSWFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltTLGduXX0sZVtTYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltpcl19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbTyxqXX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbT119LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OnhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1NdfSxlW2thXT17dGV4dHVyZUZvcm1hdDp4ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltzZV19LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OnhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2lyXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6eGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbQWVdfSxlW0JhXT17dGV4dHVyZUZvcm1hdDp4ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltjdF19LGVbTmFdPXt0ZXh0dXJlRm9ybWF0OnhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltmdF19LGVbT2FdPXt0ZXh0dXJlRm9ybWF0OnhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt5ZV19LGVbTWFdPXt0ZXh0dXJlRm9ybWF0Ok1lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbQWUseWVdfSxlW1VhXT17dGV4dHVyZUZvcm1hdDpNZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt5ZV19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0Ok1lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W09dfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpjbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltIYV19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OmNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1ZhXX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLG9yPWV9cmV0dXJuIG9yW3JdfWZ1bmN0aW9uIGphKHIsZSl7Y29uc3QgdD1tdChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiBMZShyKXtjb25zdCBlPW10KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gX24ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gWWEocixlLHQsbil7aWYoIU5lKHIpKXJldHVybiBfbihlKSYmX24odCk7Y29uc3QgaT1tdChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIFhhKHIpe2NvbnN0IGU9bXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIFFhKHIsZSx0KXtyZXR1cm4gT2UoZSk/S3QoZSk6dHx8U31mdW5jdGlvbiBodChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09b2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBSZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoTHMsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKEdzLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSgkcyxlLmZsaXBZKX1mdW5jdGlvbiBibihyKXtyLnBpeGVsU3RvcmVpKG5yLDQpLE5lKHIpJiYoci5waXhlbFN0b3JlaShsbiwwKSxyLnBpeGVsU3RvcmVpKGRuLDApLHIucGl4ZWxTdG9yZWkobW4sMCksci5waXhlbFN0b3JlaShobiwwKSxyLnBpeGVsU3RvcmVpKHBuLDApKX1mdW5jdGlvbiBLYShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsdHIsbi5taW5NYWcpLHQuY2FsbChyLGUscnIsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSx0cixuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUscnIsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsYXQsbi53cmFwKSx0LmNhbGwocixlLHV0LG4ud3JhcCksKGU9PT1wZXx8aXMocixlKSkmJnQuY2FsbChyLGUsZm4sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxmbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLGF0LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsdXQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUsTnMsbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLE9zLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSxNcyxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSxVcyxuLm1heExldmVsKX1mdW5jdGlvbiB2bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLEthKHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gcWEocil7cmV0dXJuIHI9cnx8bmUudGV4dHVyZUNvbG9yLE9lKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gc3IocixlLHQsbixpLG8pe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnMsbz1vfHxSO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxZYShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1YYShvKT9GczpScztyLnRleFBhcmFtZXRlcmkocyx0cixhKSxyLnRleFBhcmFtZXRlcmkocyxycixhKSxyLnRleFBhcmFtZXRlcmkocyxhdCxzdCksci50ZXhQYXJhbWV0ZXJpKHMsdXQsc3QpfX1mdW5jdGlvbiBHZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBhcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W2VyLFBzLGtzLERzLENzLEJzXX1mdW5jdGlvbiB1cihyLGUpe2NvbnN0IG49YXIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gRW4ocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFIsZj1MZSh1KSxtPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKFJlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1vZSl7Y29uc3QgZz10LndpZHRoLHg9dC5oZWlnaHQ7bGV0IGQsXztpZihnLzY9PT14KWQ9eCxfPVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZih4LzY9PT1nKWQ9ZyxfPVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT14LzIpZD1nLzMsXz1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09eC8zKWQ9Zy8yLF89WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPW9uKCk7RT8oRS5jYW52YXMud2lkdGg9ZCxFLmNhbnZhcy5oZWlnaHQ9ZCxzPWQsYT1kLHVyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBGPV9bdi5uZHgqMiswXSpkLGs9X1t2Lm5keCoyKzFdKmQ7RS5kcmF3SW1hZ2UodCxGLGssZCxkLDAsMCxkLGQpLHIudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LG0scCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1kLGE9ZCx1cihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgRj1fW3YubmR4KjIrMF0qZCxrPV9bdi5uZHgqMisxXSpkO3IudGV4SW1hZ2UyRCh2LmZhY2Usbyx1LGQsZCwwLG0scCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEYsayxkLGQse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oJCl7UmUocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKHYuZmFjZSxvLHUsbSxwLCQpLEdlKG4pJiZzcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT1wZXx8aT09PWdlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLHg9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksZD14L2c7aWYoZCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCBfPXQud2lkdGg9PT14PzE6MCxFPXQuaGVpZ2h0PT09eD8xOjA7ci5waXhlbFN0b3JlaShuciwxKSxyLnBpeGVsU3RvcmVpKGxuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoZG4sMCksci5waXhlbFN0b3JlaShwbiwwKSxyLnRleEltYWdlM0QoaSxvLHUsZyxnLGcsMCxtLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxkOysrdil7Y29uc3QgRj12KmcqXyxrPXYqZypFO3IucGl4ZWxTdG9yZWkobW4sRiksci5waXhlbFN0b3JlaShobixrKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCx2LGcsZywxLG0scCx0KX1ibihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxtLHAsdCk7R2UobikmJnNyKHIsZSxuLHMsYSx1KSx2bihyLGUsbil9ZnVuY3Rpb24gJGUoKXt9ZnVuY3Rpb24gSmEocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIFphKHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFKYShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIGV1KHIsZSx0KXt0PXR8fCRlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm5lLmNyb3NzT3JpZ2luLGU9WmEocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7UXIodSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gVG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBjcihyLGUsdCl7cmV0dXJuIFRuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6ZXUocixlLHQpfWZ1bmN0aW9uIGZyKHIsZSx0KXt0PXR8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9cWEodC5jb2xvcik7aWYobj09PW9lKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKGVyK28sMCxSLDEsMSwwLFIsUyxpKTtlbHNlIG49PT1wZXx8bj09PWdlP3IudGV4SW1hZ2UzRChuLDAsUiwxLDEsMSwwLFIsUyxpKTpyLnRleEltYWdlMkQobiwwLFIsMSwxLDAsUixTLGkpfWZ1bmN0aW9uIHR1KHIsZSx0LG4pe3JldHVybiBuPW58fCRlLHQ9dHx8bmUudGV4dHVyZU9wdGlvbnMsZnIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxjcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooRW4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gcnUocixlLHQsbil7bj1ufHwkZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UixhPUxlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxTLG09dC50YXJnZXR8fGllO2lmKG0hPT1vZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtmcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSx4PWFyKHIsdCk7bGV0IGQ7ZnVuY3Rpb24gXyhFKXtyZXR1cm4gZnVuY3Rpb24odixGKXstLXAsdj9nLnB1c2godik6Ri53aWR0aCE9PUYuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrRi5zcmMpOihSZShyLHQpLHIuYmluZFRleHR1cmUobSxlKSxwPT09NT9hcigpLmZvckVhY2goZnVuY3Rpb24oayl7ci50ZXhJbWFnZTJEKGssbyxzLHUsZixGKX0pOnIudGV4SW1hZ2UyRChFLG8scyx1LGYsRiksR2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAobSkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsZCl9fWQ9aS5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gY3IoRSx0LmNyb3NzT3JpZ2luLF8oeFt2XSkpfSl9ZnVuY3Rpb24gbnUocixlLHQsbil7bj1ufHwkZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFIscz1MZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UyxmPXQudGFyZ2V0fHxnZTtpZihmIT09cGUmJmYhPT1nZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO2ZyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IG09aS5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCB4PXQubGV2ZWx8fDA7bGV0IGQ9dC53aWR0aCxfPXQuaGVpZ2h0O2NvbnN0IEU9aS5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gRihrKXtyZXR1cm4gZnVuY3Rpb24oJCxHKXtpZigtLW0sJClwLnB1c2goJCk7ZWxzZXtpZihSZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGQ9dC53aWR0aHx8Ry53aWR0aCxfPXQuaGVpZ2h0fHxHLmhlaWdodCxyLnRleEltYWdlM0QoZix4LG8sZCxfLEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBWPTA7VjxFOysrVilyLnRleFN1YkltYWdlM0QoZix4LDAsMCxWLGQsXywxLGEsdSxHKX1lbHNle2xldCBWPUcsejsoRy53aWR0aCE9PWR8fEcuaGVpZ2h0IT09XykmJih6PW9uKCksVj16LmNhbnZhcyx6LmNhbnZhcy53aWR0aD1kLHouY2FudmFzLmhlaWdodD1fLHouZHJhd0ltYWdlKEcsMCwwLGQsXykpLHIudGV4U3ViSW1hZ2UzRChmLHgsMCwwLGssZCxfLDEsYSx1LFYpLHomJlY9PT16LmNhbnZhcyYmKHouY2FudmFzLndpZHRoPTAsei5jYW52YXMuaGVpZ2h0PTApfUdlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfW09PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9aS5tYXAoZnVuY3Rpb24oaywkKXtyZXR1cm4gY3Ioayx0LmNyb3NzT3JpZ2luLEYoJCkpfSl9ZnVuY3Rpb24gaXUocixlLHQsbil7bj1ufHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKGksZSk7bGV0IG89bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UixtPUxlKGYpLHA9bi5mb3JtYXR8fG0uZm9ybWF0LGc9bi50eXBlfHxRYShyLHQsbS50eXBlKTtpZihPZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPVhyKGcpO3Q9bmV3IEUodCl9Y29uc3QgeD1qYShmLGcpLGQ9dC5ieXRlTGVuZ3RoL3g7aWYoZCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrbm4ocixwKTtsZXQgXztpZihpPT09cGV8fGk9PT1nZSlpZighbyYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChkKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitkO289RSxzPUUsYT1FfWVsc2UgbyYmKCFzfHwhYSk/KF89aHQocixpLHMsYSxkL28pLHM9Xy53aWR0aCxhPV8uaGVpZ2h0KTpzJiYoIW98fCFhKT8oXz1odChyLGksbyxhLGQvcyksbz1fLndpZHRoLGE9Xy5oZWlnaHQpOihfPWh0KHIsaSxvLHMsZC9hKSxvPV8ud2lkdGgscz1fLmhlaWdodCk7ZWxzZSBfPWh0KHIsaSxvLHMsZCksbz1fLndpZHRoLHM9Xy5oZWlnaHQ7aWYoYm4ociksci5waXhlbFN0b3JlaShucixuLnVucGFja0FsaWdubWVudHx8MSksUmUocixuKSxpPT09b2Upe2NvbnN0IEU9eC90LkJZVEVTX1BFUl9FTEVNRU5ULHY9ZC82KkU7dXIocixuKS5mb3JFYWNoKEY9Pntjb25zdCBrPXYqRi5uZHgsJD10LnN1YmFycmF5KGssayt2KTtyLnRleEltYWdlMkQoRi5mYWNlLHUsZixvLHMsMCxwLGcsJCl9KX1lbHNlIGk9PT1wZXx8aT09PWdlP3IudGV4SW1hZ2UzRChpLHUsZixvLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQoaSx1LGYsbyxzLDAscCxnLHQpO3JldHVybnt3aWR0aDpvLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBvdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IGk9dC5sZXZlbHx8MCxvPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxSLHM9TGUobyksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihSZShyLHQpLG49PT1vZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChlcitmLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PXBlfHxuPT09Z2U/ci50ZXhJbWFnZTNEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBBbihyLGUsdCl7dD10fHwkZSxlPWV8fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksaT1lLnRhcmdldHx8aWU7bGV0IG89ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UjtyLmJpbmRUZXh0dXJlKGksbiksaT09PW9lJiYoci50ZXhQYXJhbWV0ZXJpKGksYXQsc3QpLHIudGV4UGFyYW1ldGVyaShpLHV0LHN0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpdHUocixuLGUsdCk7ZWxzZSBpZihPZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8T2UodVswXSkpKXtjb25zdCBmPWl1KHIsbix1LGUpO289Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8VG4odVswXSkpP2k9PT1vZT9ydShyLG4sZSx0KTpudShyLG4sZSx0KTooRW4ocixuLHUsZSksbz11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2Ugb3UocixuLGUpO3JldHVybiBHZShlKSYmc3IocixuLGUsbyxzLGEpLHZuKHIsbixlKSxufWNvbnN0IGxyPVFyO2Z1bmN0aW9uIHduKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IHB0PTMzOTg0LGd0PTM0OTYyLHN1PTM0OTYzLGF1PTM1NzEzLHV1PTM1NzE0LGN1PTM1NjMyLGZ1PTM1NjMzLGx1PTM1OTgxLEluPTM1NzE4LGR1PTM1NzIxLG11PTM1OTcxLGh1PTM1MzgyLHB1PTM1Mzk2LGd1PTM1Mzk4LHl1PTM1MzkyLHh1PTM1Mzk1LHl0PTUxMjYsU249MzU2NjQsUm49MzU2NjUsRm49MzU2NjYsZHI9NTEyNCxQbj0zNTY2Nyxrbj0zNTY2OCxEbj0zNTY2OSxDbj0zNTY3MCxCbj0zNTY3MSxObj0zNTY3MixPbj0zNTY3MyxNbj0zNTY3NCxVbj0zNTY3NSxMbj0zNTY3NixfdT0zNTY3OCxidT0zNTY4MCx2dT0zNTY3OSxFdT0zNTY4MixUdT0zNTY4NSxBdT0zNTY4Nix3dT0zNTY4NyxJdT0zNTY4OCxTdT0zNTY4OSxSdT0zNTY5MCxGdT0zNjI4OSxQdT0zNjI5MixrdT0zNjI5Myxtcj01MTI1LEduPTM2Mjk0LCRuPTM2Mjk1LHpuPTM2Mjk2LER1PTM2Mjk4LEN1PTM2Mjk5LEJ1PTM2MzAwLE51PTM2MzAzLE91PTM2MzA2LE11PTM2MzA3LFV1PTM2MzA4LEx1PTM2MzExLHh0PTM1NTMsX3Q9MzQwNjcsaHI9MzI4NzksYnQ9MzU4NjYsYj17fTtmdW5jdGlvbiBXbihyLGUpe3JldHVybiBiW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBHdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiAkdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24genUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIFd1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBWdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gVm4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gSG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGpuKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBZbihyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gWG4ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIEh1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBqdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIFl1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gWHUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBRdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIEt1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBxdShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gSnUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIFp1KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIGVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIHRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIG5jKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIGljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFUocixlLHQsbil7Y29uc3QgaT1XbihyLGUpO3JldHVybiBOZShyKT9mdW5jdGlvbihvKXtsZXQgcyxhO3F0KHIsbyk/KHM9byxhPW51bGwpOihzPW8udGV4dHVyZSxhPW8uc2FtcGxlciksci51bmlmb3JtMWkobix0KSxyLmFjdGl2ZVRleHR1cmUocHQrdCksci5iaW5kVGV4dHVyZShpLHMpLHIuYmluZFNhbXBsZXIodCxhKX06ZnVuY3Rpb24obyl7ci51bmlmb3JtMWkobix0KSxyLmFjdGl2ZVRleHR1cmUocHQrdCksci5iaW5kVGV4dHVyZShpLG8pfX1mdW5jdGlvbiBMKHIsZSx0LG4saSl7Y29uc3Qgbz1XbihyLGUpLHM9bmV3IEludDMyQXJyYXkoaSk7Zm9yKGxldCBhPTA7YTxpOysrYSlzW2FdPXQrYTtyZXR1cm4gTmUocik/ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKHB0K3NbZl0pO2xldCBtLHA7cXQocix1KT8obT11LHA9bnVsbCk6KG09dS50ZXh0dXJlLHA9dS5zYW1wbGVyKSxyLmJpbmRTYW1wbGVyKHQscCksci5iaW5kVGV4dHVyZShvLG0pfSl9OmZ1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShwdCtzW2ZdKSxyLmJpbmRUZXh0dXJlKG8sdSl9KX19Ylt5dF09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NCxzZXR0ZXI6R3UsYXJyYXlTZXR0ZXI6JHV9LGJbU25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjgsc2V0dGVyOnp1LGNvbHM6Mn0sYltSbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MTIsc2V0dGVyOld1LGNvbHM6M30sYltGbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlZ1LGNvbHM6NH0sYltkcl09e1R5cGU6SW50MzJBcnJheSxzaXplOjQsc2V0dGVyOlZuLGFycmF5U2V0dGVyOkhufSxiW1BuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6am4sY29sczoyfSxiW2tuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOlluLGNvbHM6M30sYltEbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpYbixjb2xzOjR9LGJbbXJdPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6SHUsYXJyYXlTZXR0ZXI6anV9LGJbR25dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6WXUsY29sczoyfSxiWyRuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpYdSxjb2xzOjN9LGJbem5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOlF1LGNvbHM6NH0sYltDbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpWbixhcnJheVNldHRlcjpIbn0sYltCbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpqbixjb2xzOjJ9LGJbTm5dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOlluLGNvbHM6M30sYltPbl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6WG4sY29sczo0fSxiW01uXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6S3Uscm93czoyLGNvbHM6Mn0sYltVbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOnF1LHJvd3M6Myxjb2xzOjN9LGJbTG5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpKdSxyb3dzOjQsY29sczo0fSxiW1R1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6WnUscm93czoyLGNvbHM6M30sYltBdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOnRjLHJvd3M6Mixjb2xzOjR9LGJbd3VdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjplYyxyb3dzOjMsY29sczoyfSxiW0l1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6bmMscm93czozLGNvbHM6NH0sYltTdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOnJjLHJvd3M6NCxjb2xzOjJ9LGJbUnVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjppYyxyb3dzOjQsY29sczozfSxiW191XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpMLGJpbmRQb2ludDp4dH0sYltidV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6X3R9LGJbdnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OmhyfSxiW0V1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpMLGJpbmRQb2ludDp4dH0sYltGdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6YnR9LGJbUHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OmJ0fSxiW2t1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpMLGJpbmRQb2ludDpfdH0sYltEdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6eHR9LGJbQ3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OmhyfSxiW0J1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpMLGJpbmRQb2ludDpfdH0sYltOdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6YnR9LGJbT3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOkwsYmluZFBvaW50Onh0fSxiW011XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpMLGJpbmRQb2ludDpocn0sYltVdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6X3R9LGJbTHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OmJ0fTtmdW5jdGlvbiB2dChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKXN3aXRjaChyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aCl7Y2FzZSA0OnIudmVydGV4QXR0cmliNGZ2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAzOnIudmVydGV4QXR0cmliM2Z2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAyOnIudmVydGV4QXR0cmliMmZ2KGUsdC52YWx1ZSk7YnJlYWs7Y2FzZSAxOnIudmVydGV4QXR0cmliMWZ2KGUsdC52YWx1ZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInRoZSBsZW5ndGggb2YgYSBmbG9hdCBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCEiKX1lbHNlIHIuYmluZEJ1ZmZlcihndCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fHl0LHQubm9ybWFsaXplfHwhMSx0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBhZShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjRpdihlLHQudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2Ugci5iaW5kQnVmZmVyKGd0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliSVBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fGRyLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIEV0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNHVpdihlLHQudmFsdWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJUaGUgbGVuZ3RoIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSA0ISIpO2Vsc2Ugci5iaW5kQnVmZmVyKGd0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliSVBvaW50ZXIoZSx0Lm51bUNvbXBvbmVudHN8fHQuc2l6ZSx0LnR5cGV8fG1yLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIHByKHIsZSx0KXtjb25zdCBuPXQuc2l6ZSxpPXQuY291bnQ7cmV0dXJuIGZ1bmN0aW9uKG8pe3IuYmluZEJ1ZmZlcihndCxvLmJ1ZmZlcik7Y29uc3Qgcz1vLnNpemV8fG8ubnVtQ29tcG9uZW50c3x8bixhPXMvaSx1PW8udHlwZXx8eXQsbT1iW3VdLnNpemUqcyxwPW8ubm9ybWFsaXplfHwhMSxnPW8ub2Zmc2V0fHwwLHg9bS9pO2ZvcihsZXQgZD0wO2Q8aTsrK2Qpci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlK2QpLHIudmVydGV4QXR0cmliUG9pbnRlcihlK2QsYSx1LHAsbSxnK3gqZCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZStkLG8uZGl2aXNvcnx8MCl9fWNvbnN0IFA9e307UFt5dF09e3NpemU6NCxzZXR0ZXI6dnR9LFBbU25dPXtzaXplOjgsc2V0dGVyOnZ0fSxQW1JuXT17c2l6ZToxMixzZXR0ZXI6dnR9LFBbRm5dPXtzaXplOjE2LHNldHRlcjp2dH0sUFtkcl09e3NpemU6NCxzZXR0ZXI6YWV9LFBbUG5dPXtzaXplOjgsc2V0dGVyOmFlfSxQW2tuXT17c2l6ZToxMixzZXR0ZXI6YWV9LFBbRG5dPXtzaXplOjE2LHNldHRlcjphZX0sUFttcl09e3NpemU6NCxzZXR0ZXI6RXR9LFBbR25dPXtzaXplOjgsc2V0dGVyOkV0fSxQWyRuXT17c2l6ZToxMixzZXR0ZXI6RXR9LFBbem5dPXtzaXplOjE2LHNldHRlcjpFdH0sUFtDbl09e3NpemU6NCxzZXR0ZXI6YWV9LFBbQm5dPXtzaXplOjgsc2V0dGVyOmFlfSxQW05uXT17c2l6ZToxMixzZXR0ZXI6YWV9LFBbT25dPXtzaXplOjE2LHNldHRlcjphZX0sUFtNbl09e3NpemU6NCxzZXR0ZXI6cHIsY291bnQ6Mn0sUFtVbl09e3NpemU6OSxzZXR0ZXI6cHIsY291bnQ6M30sUFtMbl09e3NpemU6MTYsc2V0dGVyOnByLGNvdW50OjR9O2NvbnN0IG9jPS9FUlJPUjpccypcZCs6KFxkKykvZ2k7ZnVuY3Rpb24gc2MocixlPSIiLHQ9MCl7Y29uc3Qgbj1bLi4uZS5tYXRjaEFsbChvYyldLGk9bmV3IE1hcChuLm1hcCgobyxzKT0+e2NvbnN0IGE9cGFyc2VJbnQob1sxXSksdT1uW3MrMV0sZj11P3UuaW5kZXg6ZS5sZW5ndGgsbT1lLnN1YnN0cmluZyhvLmluZGV4LGYpO3JldHVyblthLTEsbV19KSk7cmV0dXJuIHIuc3BsaXQoYApgKS5tYXAoKG8scyk9Pntjb25zdCBhPWkuZ2V0KHMpO3JldHVybmAke3MrMSt0fTogJHtvfSR7YT9gCgpeXl4gJHthfWA6IiJ9YH0pLmpvaW4oYApgKX1jb25zdCBRbj0vXlsgXHRdKlxuLztmdW5jdGlvbiBLbihyKXtsZXQgZT0wO3JldHVybiBRbi50ZXN0KHIpJiYoZT0xLHI9ci5yZXBsYWNlKFFuLCIiKSkse2xpbmVPZmZzZXQ6ZSxzaGFkZXJTb3VyY2U6cn19ZnVuY3Rpb24gYWMocixlKXtyZXR1cm4gci5lcnJvckNhbGxiYWNrKGUpLHIuY2FsbGJhY2smJnNldFRpbWVvdXQoKCk9PntyLmNhbGxiYWNrKGAke2V9CiR7ci5lcnJvcnMuam9pbihgCmApfWApfSksbnVsbH1mdW5jdGlvbiB1YyhyLGUsdCxuKXtpZihuPW58fGxyLCFyLmdldFNoYWRlclBhcmFtZXRlcih0LGF1KSl7Y29uc3Qgbz1yLmdldFNoYWRlckluZm9Mb2codCkse2xpbmVPZmZzZXQ6cyxzaGFkZXJTb3VyY2U6YX09S24oci5nZXRTaGFkZXJTb3VyY2UodCkpLHU9YCR7c2MoYSxvLHMpfQpFcnJvciBjb21waWxpbmcgJHtubihyLGUpfTogJHtvfWA7cmV0dXJuIG4odSksdX1yZXR1cm4iIn1mdW5jdGlvbiBncihyLGUsdCl7bGV0IG4saSxvO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYodD1lLGU9dm9pZCAwKSx0eXBlb2Ygcj09ImZ1bmN0aW9uIil0PXIscj12b2lkIDA7ZWxzZSBpZihyJiYhQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgZj1yO3Q9Zi5lcnJvckNhbGxiYWNrLHI9Zi5hdHRyaWJMb2NhdGlvbnMsbj1mLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsaT1mLnRyYW5zZm9ybUZlZWRiYWNrTW9kZSxvPWYuY2FsbGJhY2t9Y29uc3Qgcz10fHxscixhPVtdLHU9e2Vycm9yQ2FsbGJhY2soZiwuLi5tKXthLnB1c2goZikscyhmLC4uLm0pfSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm4sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOmksY2FsbGJhY2s6byxlcnJvcnM6YX07e2xldCBmPXt9O0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKGZ1bmN0aW9uKG0scCl7ZlttXT1lP2VbcF06cH0pOmY9cnx8e30sdS5hdHRyaWJMb2NhdGlvbnM9Zn1yZXR1cm4gdX1jb25zdCBjYz1bIlZFUlRFWF9TSEFERVIiLCJGUkFHTUVOVF9TSEFERVIiXTtmdW5jdGlvbiBmYyhyLGUpe2lmKGUuaW5kZXhPZigiZnJhZyIpPj0wKXJldHVybiBjdTtpZihlLmluZGV4T2YoInZlcnQiKT49MClyZXR1cm4gZnV9ZnVuY3Rpb24gbGMocixlLHQpe2NvbnN0IG49ci5nZXRBdHRhY2hlZFNoYWRlcnMoZSk7Zm9yKGNvbnN0IGkgb2Ygbil0LmhhcyhpKSYmci5kZWxldGVTaGFkZXIoaSk7ci5kZWxldGVQcm9ncmFtKGUpfWNvbnN0IGRjPShyPTApPT5uZXcgUHJvbWlzZShlPT5zZXRUaW1lb3V0KGUscikpO2Z1bmN0aW9uIG1jKHIsZSx0KXtjb25zdCBuPXIuY3JlYXRlUHJvZ3JhbSgpLHthdHRyaWJMb2NhdGlvbnM6aSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm8sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOnN9PWdyKHQpO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtsZXQgdT1lW2FdO2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7Y29uc3QgZj13bih1KSxtPWY/Zi50ZXh0OnU7bGV0IHA9cltjY1thXV07ZiYmZi50eXBlJiYocD1mYyhyLGYudHlwZSl8fHApLHU9ci5jcmVhdGVTaGFkZXIocCksci5zaGFkZXJTb3VyY2UodSxLbihtKS5zaGFkZXJTb3VyY2UpLHIuY29tcGlsZVNoYWRlcih1KSxyLmF0dGFjaFNoYWRlcihuLHUpfX1PYmplY3QuZW50cmllcyhpKS5mb3JFYWNoKChbYSx1XSk9PnIuYmluZEF0dHJpYkxvY2F0aW9uKG4sdSxhKSk7e2xldCBhPW87YSYmKGEuYXR0cmlicyYmKGE9YS5hdHRyaWJzKSxBcnJheS5pc0FycmF5KGEpfHwoYT1PYmplY3Qua2V5cyhhKSksci50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKG4sYSxzfHxsdSkpfXJldHVybiByLmxpbmtQcm9ncmFtKG4pLG59ZnVuY3Rpb24gaGMocixlLHQsbixpKXtjb25zdCBvPWdyKHQsbixpKSxzPW5ldyBTZXQoZSksYT1tYyhyLGUsbyk7ZnVuY3Rpb24gdShmLG0pe2NvbnN0IHA9Z2MoZixtLG8uZXJyb3JDYWxsYmFjayk7cmV0dXJuIHAmJmxjKGYsbSxzKSxwfWlmKG8uY2FsbGJhY2spe3BjKHIsYSkudGhlbigoKT0+e2NvbnN0IGY9dShyLGEpO28uY2FsbGJhY2soZixmP3ZvaWQgMDphKX0pO3JldHVybn1yZXR1cm4gdShyLGEpP3ZvaWQgMDphfWFzeW5jIGZ1bmN0aW9uIHBjKHIsZSl7Y29uc3QgdD1yLmdldEV4dGVuc2lvbigiS0hSX3BhcmFsbGVsX3NoYWRlcl9jb21waWxlIiksbj10PyhvLHMpPT5vLmdldFByb2dyYW1QYXJhbWV0ZXIocyx0LkNPTVBMRVRJT05fU1RBVFVTX0tIUik6KCk9PiEwO2xldCBpPTA7ZG8gYXdhaXQgZGMoaSksaT0xZTMvNjA7d2hpbGUoIW4ocixlKSl9ZnVuY3Rpb24gZ2MocixlLHQpe2lmKHQ9dHx8bHIsIXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHV1KSl7Y29uc3QgaT1yLmdldFByb2dyYW1JbmZvTG9nKGUpO3QoYEVycm9yIGluIHByb2dyYW0gbGlua2luZzogJHtpfWApO2NvbnN0IHM9ci5nZXRBdHRhY2hlZFNoYWRlcnMoZSkubWFwKGE9PnVjKHIsci5nZXRTaGFkZXJQYXJhbWV0ZXIoYSxyLlNIQURFUl9UWVBFKSxhLHQpKTtyZXR1cm5gJHtpfQoke3MuZmlsdGVyKGE9PmEpLmpvaW4oYApgKX1gfX1mdW5jdGlvbiB5YyhyLGUsdCxuLGkpe3JldHVybiBoYyhyLGUsdCxuLGkpfWZ1bmN0aW9uIHFuKHIpe2NvbnN0IGU9ci5uYW1lO3JldHVybiBlLnN0YXJ0c1dpdGgoImdsXyIpfHxlLnN0YXJ0c1dpdGgoIndlYmdsXyIpfWNvbnN0IHhjPS8oXC58XFt8XXxcdyspL2csX2M9cj0+cj49IjAiJiZyPD0iOSI7ZnVuY3Rpb24gYmMocixlLHQsbil7Y29uc3QgaT1yLnNwbGl0KHhjKS5maWx0ZXIoYT0+YSE9PSIiKTtsZXQgbz0wLHM9IiI7Zm9yKDs7KXtjb25zdCBhPWlbbysrXTtzKz1hO2NvbnN0IHU9X2MoYVswXSksZj11P3BhcnNlSW50KGEpOmE7aWYodSYmKHMrPWlbbysrXSksbz09PWkubGVuZ3RoKXt0W2ZdPWU7YnJlYWt9ZWxzZXtjb25zdCBwPWlbbysrXSxnPXA9PT0iWyIseD10W2ZdfHwoZz9bXTp7fSk7dFtmXT14LHQ9eCxuW3NdPW5bc118fGZ1bmN0aW9uKGQpe3JldHVybiBmdW5jdGlvbihfKXtKbihkLF8pfX0oeCkscys9cH19fWZ1bmN0aW9uIHZjKHIsZSl7bGV0IHQ9MDtmdW5jdGlvbiBuKGEsdSxmKXtjb25zdCBtPXUubmFtZS5lbmRzV2l0aCgiWzBdIikscD11LnR5cGUsZz1iW3BdO2lmKCFnKXRocm93IG5ldyBFcnJvcihgdW5rbm93biB0eXBlOiAweCR7cC50b1N0cmluZygxNil9YCk7bGV0IHg7aWYoZy5iaW5kUG9pbnQpe2NvbnN0IGQ9dDt0Kz11LnNpemUsbT94PWcuYXJyYXlTZXR0ZXIocixwLGQsZix1LnNpemUpOng9Zy5zZXR0ZXIocixwLGQsZix1LnNpemUpfWVsc2UgZy5hcnJheVNldHRlciYmbT94PWcuYXJyYXlTZXR0ZXIocixmKTp4PWcuc2V0dGVyKHIsZik7cmV0dXJuIHgubG9jYXRpb249Zix4fWNvbnN0IGk9e30sbz17fSxzPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLEluKTtmb3IobGV0IGE9MDthPHM7KythKXtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybShlLGEpO2lmKHFuKHUpKWNvbnRpbnVlO2xldCBmPXUubmFtZTtmLmVuZHNXaXRoKCJbMF0iKSYmKGY9Zi5zdWJzdHIoMCxmLmxlbmd0aC0zKSk7Y29uc3QgbT1yLmdldFVuaWZvcm1Mb2NhdGlvbihlLHUubmFtZSk7aWYobSl7Y29uc3QgcD1uKGUsdSxtKTtpW2ZdPXAsYmMoZixwLG8saSl9fXJldHVybiBpfWZ1bmN0aW9uIEVjKHIsZSl7Y29uc3QgdD17fSxuPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLG11KTtmb3IobGV0IGk9MDtpPG47KytpKXtjb25zdCBvPXIuZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKGUsaSk7dFtvLm5hbWVdPXtpbmRleDppLHR5cGU6by50eXBlLHNpemU6by5zaXplfX1yZXR1cm4gdH1mdW5jdGlvbiBUYyhyLGUpe2NvbnN0IHQ9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsSW4pLG49W10saT1bXTtmb3IobGV0IGE9MDthPHQ7KythKXtpLnB1c2goYSksbi5wdXNoKHt9KTtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybShlLGEpO25bYV0ubmFtZT11Lm5hbWV9W1siVU5JRk9STV9UWVBFIiwidHlwZSJdLFsiVU5JRk9STV9TSVpFIiwic2l6ZSJdLFsiVU5JRk9STV9CTE9DS19JTkRFWCIsImJsb2NrTmR4Il0sWyJVTklGT1JNX09GRlNFVCIsIm9mZnNldCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2NvbnN0IHU9YVswXSxmPWFbMV07ci5nZXRBY3RpdmVVbmlmb3JtcyhlLGksclt1XSkuZm9yRWFjaChmdW5jdGlvbihtLHApe25bcF1bZl09bX0pfSk7Y29uc3Qgbz17fSxzPXIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLGh1KTtmb3IobGV0IGE9MDthPHM7KythKXtjb25zdCB1PXIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShlLGEpLGY9e2luZGV4OnIuZ2V0VW5pZm9ybUJsb2NrSW5kZXgoZSx1KSx1c2VkQnlWZXJ0ZXhTaGFkZXI6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHB1KSx1c2VkQnlGcmFnbWVudFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsZ3UpLHNpemU6ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tQYXJhbWV0ZXIoZSxhLHl1KSx1bmlmb3JtSW5kaWNlczpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEseHUpfTtmLnVzZWQ9Zi51c2VkQnlWZXJ0ZXhTaGFkZXJ8fGYudXNlZEJ5RnJhZ21lbnRTaGFkZXIsb1t1XT1mfXJldHVybntibG9ja1NwZWNzOm8sdW5pZm9ybURhdGE6bn19ZnVuY3Rpb24gSm4ocixlKXtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPXJbdF07dHlwZW9mIG49PSJmdW5jdGlvbiI/bihlW3RdKTpKbihyW3RdLGVbdF0pfX1mdW5jdGlvbiBabihyLC4uLmUpe2NvbnN0IHQ9ci51bmlmb3JtU2V0dGVyc3x8cixuPWUubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ZVtpXTtpZihBcnJheS5pc0FycmF5KG8pKXtjb25zdCBzPW8ubGVuZ3RoO2ZvcihsZXQgYT0wO2E8czsrK2EpWm4odCxvW2FdKX1lbHNlIGZvcihjb25zdCBzIGluIG8pe2NvbnN0IGE9dFtzXTthJiZhKG9bc10pfX19ZnVuY3Rpb24gQWMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsZHUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRBY3RpdmVBdHRyaWIoZSxpKTtpZihxbihvKSljb250aW51ZTtjb25zdCBzPXIuZ2V0QXR0cmliTG9jYXRpb24oZSxvLm5hbWUpLGE9UFtvLnR5cGVdLHU9YS5zZXR0ZXIocixzLGEpO3UubG9jYXRpb249cyx0W28ubmFtZV09dX1yZXR1cm4gdH1mdW5jdGlvbiB3YyhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTtuJiZuKGVbdF0pfX1mdW5jdGlvbiBJYyhyLGUsdCl7dC52ZXJ0ZXhBcnJheU9iamVjdD9yLmJpbmRWZXJ0ZXhBcnJheSh0LnZlcnRleEFycmF5T2JqZWN0KTood2MoZS5hdHRyaWJTZXR0ZXJzfHxlLHQuYXR0cmlicyksdC5pbmRpY2VzJiZyLmJpbmRCdWZmZXIoc3UsdC5pbmRpY2VzKSl9ZnVuY3Rpb24gZWkocixlKXtjb25zdCB0PXZjKHIsZSksbj1BYyhyLGUpLGk9e3Byb2dyYW06ZSx1bmlmb3JtU2V0dGVyczp0LGF0dHJpYlNldHRlcnM6bn07cmV0dXJuIE5lKHIpJiYoaS51bmlmb3JtQmxvY2tTcGVjPVRjKHIsZSksaS50cmFuc2Zvcm1GZWVkYmFja0luZm89RWMocixlKSksaX1jb25zdCBTYz0vXHN8e3x9fDsvO2Z1bmN0aW9uIFJjKHIsZSx0LG4saSl7Y29uc3Qgbz1ncih0LG4saSkscz1bXTtpZihlPWUubWFwKGZ1bmN0aW9uKGYpe2lmKCFTYy50ZXN0KGYpKXtjb25zdCBtPXduKGYpO2lmKG0pZj1tLnRleHQ7ZWxzZXtjb25zdCBwPWBubyBlbGVtZW50IHdpdGggaWQ6ICR7Zn1gO28uZXJyb3JDYWxsYmFjayhwKSxzLnB1c2gocCl9fXJldHVybiBmfSkscy5sZW5ndGgpcmV0dXJuIGFjKG8sIiIpO2NvbnN0IGE9by5jYWxsYmFjazthJiYoby5jYWxsYmFjaz0oZixtKT0+e2EoZixmP3ZvaWQgMDplaShyLG0pKX0pO2NvbnN0IHU9eWMocixlLG8pO3JldHVybiB1P2VpKHIsdSk6bnVsbH1jb25zdCBGYz00LHRpPTUxMjM7ZnVuY3Rpb24gUGMocixlLHQsbixpLG8pe3Q9dD09PXZvaWQgMD9GYzp0O2NvbnN0IHM9ZS5pbmRpY2VzLGE9ZS5lbGVtZW50VHlwZSx1PW49PT12b2lkIDA/ZS5udW1FbGVtZW50czpuO2k9aT09PXZvaWQgMD8wOmksYXx8cz9vIT09dm9pZCAwP3IuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKHQsdSxhPT09dm9pZCAwP3RpOmUuZWxlbWVudFR5cGUsaSxvKTpyLmRyYXdFbGVtZW50cyh0LHUsYT09PXZvaWQgMD90aTplLmVsZW1lbnRUeXBlLGkpOm8hPT12b2lkIDA/ci5kcmF3QXJyYXlzSW5zdGFuY2VkKHQsaSx1LG8pOnIuZHJhd0FycmF5cyh0LGksdSl9Y29uc3Qgcmk9MzYxNjAsVHQ9MzYxNjEsa2M9MzU1MyxEYz01MTIxLENjPTY0MDIsQmM9NjQwOCxOYz0zMzE5MCxPYz0zNjAxMixNYz0zNTA1NixVYz0zNjAxMyxMYz0zMjg1NCxHYz0zMjg1NSwkYz0zNjE5NCxuaT0zMzE4OSxpaT02NDAxLG9pPTM2MTY4LHlyPTM0MDQxLHhyPTM2MDY0LEF0PTM2MDk2LHNpPTM2MTI4LF9yPTMzMzA2LGJyPTMzMDcxLHZyPTk3MjksemM9W3tmb3JtYXQ6QmMsdHlwZTpEYyxtaW46dnIsd3JhcDpicn0se2Zvcm1hdDp5cn1dLFk9e307WVt5cl09X3IsWVtpaV09c2ksWVtvaV09c2ksWVtDY109QXQsWVtuaV09QXQsWVtOY109QXQsWVtPY109QXQsWVtNY109X3IsWVtVY109X3I7ZnVuY3Rpb24gV2MocixlKXtyZXR1cm4gWVtyXXx8WVtlXX1jb25zdCB1ZT17fTt1ZVtMY109ITAsdWVbR2NdPSEwLHVlWyRjXT0hMCx1ZVt5cl09ITAsdWVbbmldPSEwLHVlW2lpXT0hMCx1ZVtvaV09ITA7ZnVuY3Rpb24gVmMocil7cmV0dXJuIHVlW3JdfWNvbnN0IEhjPTMyO2Z1bmN0aW9uIGpjKHIpe3JldHVybiByPj14ciYmcjx4citIY31mdW5jdGlvbiB3dChyLGUsdCxuKXtjb25zdCBpPXJpLG89ci5jcmVhdGVGcmFtZWJ1ZmZlcigpO3IuYmluZEZyYW1lYnVmZmVyKGksbyksdD10fHxyLmRyYXdpbmdCdWZmZXJXaWR0aCxuPW58fHIuZHJhd2luZ0J1ZmZlckhlaWdodCxlPWV8fHpjO2NvbnN0IHM9W10sYT17ZnJhbWVidWZmZXI6byxhdHRhY2htZW50czpbXSx3aWR0aDp0LGhlaWdodDpufTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7bGV0IG09dS5hdHRhY2htZW50O2NvbnN0IHA9dS5zYW1wbGVzLGc9dS5mb3JtYXQ7bGV0IHg9dS5hdHRhY2htZW50UG9pbnR8fFdjKGcsdS5pbnRlcm5hbEZvcm1hdCk7aWYoeHx8KHg9eHIrZiksamMoeCkmJnMucHVzaCh4KSwhbSlpZihwIT09dm9pZCAwfHxWYyhnKSltPXIuY3JlYXRlUmVuZGVyYnVmZmVyKCksci5iaW5kUmVuZGVyYnVmZmVyKFR0LG0pLHA+MT9yLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShUdCxwLGcsdCxuKTpyLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoVHQsZyx0LG4pO2Vsc2V7Y29uc3QgZD1PYmplY3QuYXNzaWduKHt9LHUpO2Qud2lkdGg9dCxkLmhlaWdodD1uLGQuYXV0bz09PXZvaWQgMCYmKGQuYXV0bz0hMSxkLm1pbj1kLm1pbnx8ZC5taW5NYWd8fHZyLGQubWFnPWQubWFnfHxkLm1pbk1hZ3x8dnIsZC53cmFwUz1kLndyYXBTfHxkLndyYXB8fGJyLGQud3JhcFQ9ZC53cmFwVHx8ZC53cmFwfHxiciksbT1BbihyLGQpfWlmKG5zKHIsbSkpci5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihpLHgsVHQsbSk7ZWxzZSBpZihxdChyLG0pKXUubGF5ZXIhPT12b2lkIDA/ci5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcihpLHgsbSx1LmxldmVsfHwwLHUubGF5ZXIpOnIuZnJhbWVidWZmZXJUZXh0dXJlMkQoaSx4LHUudGFyZ2V0fHxrYyxtLHUubGV2ZWx8fDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGF0dGFjaG1lbnQgdHlwZSIpO2EuYXR0YWNobWVudHMucHVzaChtKX0pLHIuZHJhd0J1ZmZlcnMmJnIuZHJhd0J1ZmZlcnMocyksYX1mdW5jdGlvbiBZYyhyLGUsdCl7dD10fHxyaSxlPyhyLmJpbmRGcmFtZWJ1ZmZlcih0LGUuZnJhbWVidWZmZXIpLHIudmlld3BvcnQoMCwwLGUud2lkdGgsZS5oZWlnaHQpKTooci5iaW5kRnJhbWVidWZmZXIodCxudWxsKSxyLnZpZXdwb3J0KDAsMCxyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQpKX1mdW5jdGlvbiBJKHIsZSl7cmV0dXJuKCk9PmUgaW5zdGFuY2VvZiBXZWJHTFRleHR1cmU/ZTpBbihyLHtzcmM6ZSx3cmFwOnIuQ0xBTVBfVE9fRURHRX0pfWNvbnN0IEZlPTI7Y2xhc3MgX2V7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJpZCIsIl8iKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywiZmJpIik7bCh0aGlzLCJvcHRpb25zIik7bCh0aGlzLCJwcm9ncmFtSW5mbyIpO2wodGhpcywiYnVmZmVySW5mbyIpO2wodGhpcywicHJvZmlsZXIiKTtsKHRoaXMsImxhc3RSdW4iKTtjb25zdHtjb250ZXh0OnQsd2lkdGg6bixoZWlnaHQ6aX09ZTt0aGlzLmNvbnRleHQ9dCx0aGlzLm9wdGlvbnM9ZTtjb25zdCBvPXRoaXMuYnVpbGREZWZpbmVzKCk7dGhpcy5wcm9ncmFtSW5mbz1SYyh0aGlzLmNvbnRleHQsW28rdGhpcy5nZXRWZXJ0ZXhTaGFkZXIoKSxvK3RoaXMuZ2V0RnJhZ21lbnRTaGFkZXIoKV0pLHRoaXMuYnVmZmVySW5mbz1Tcyh0aGlzLmNvbnRleHQsdGhpcy5nZXRCdWZmZXJzKCkpLHRoaXMuZmJpPXd0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSxuLGkpLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfXJlc2l6ZU91dHB1dChlLHQpe3RoaXMuZmJpPXd0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSxlLHQpLHRoaXMub3B0aW9ucy53aWR0aD1lLHRoaXMub3B0aW9ucy5oZWlnaHQ9dCx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1nZXREZWZpbmVzKCl7cmV0dXJue319Z2V0QnVmZmVycygpe3JldHVybntwb3NpdGlvbjp7bnVtQ29tcG9uZW50czoyLGRhdGE6Wy0xLC0xLC0xLDEsMSwtMSwxLDEsLTEsMSwxLC0xXX0sdGV4dHVyZV9jb29yZDp7bnVtQ29tcG9uZW50czoyLGRhdGE6WzAsMCwwLDEsMSwwLDEsMSwwLDEsMSwwXX19fWJ1aWxkRGVmaW5lcygpe2xldCBlPSIiO2NvbnN0IHQ9dGhpcy5nZXREZWZpbmVzKCk7Zm9yKGxldCBuIGluIHQpZSs9YCNkZWZpbmUgJHtufSAke3Rbbl0udG9GaXhlZCgxKX0KYDtyZXR1cm4gZX1ydW4oZSl7dmFyIGksbyxzLGEsdSxmOyhpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gUFJPRyA6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLChvPXRoaXMucHJvZmlsZXIpPT1udWxsfHxvLnB1c2hDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtmb3IoY29uc3QgbSBpbiBlKXR5cGVvZiBlW21dPT0iZnVuY3Rpb24iJiYoKHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTkkgOiAke219YCksZVttXT1lW21dKCksKGE9dGhpcy5wcm9maWxlcik9PW51bGx8fGEucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7bX1gKSk7KHU9dGhpcy5wcm9maWxlcik9PW51bGx8fHUucG9wQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSUZPUk1TYCk7Y29uc3QgdD1EYXRlLm5vdygpO2xldCBuPTA7dGhpcy5sYXN0UnVuJiYobj0odC10aGlzLmxhc3RSdW4pLzFlMyksdGhpcy5sYXN0UnVuPXQsdGhpcy5jb250ZXh0LnZpZXdwb3J0KDAsMCx0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0KSx0aGlzLmNvbnRleHQudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW1JbmZvLnByb2dyYW0pLEljKHRoaXMuY29udGV4dCx0aGlzLnByb2dyYW1JbmZvLHRoaXMuYnVmZmVySW5mbyksWm4odGhpcy5wcm9ncmFtSW5mbyx7ZGVsdGE6bixjYW52YXM6W3RoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHRdLC4uLmV9KSxZYyh0aGlzLmNvbnRleHQsdGhpcy5vcHRpb25zLmRpc2FibGVGcmFtZWJ1ZmZlcj9udWxsOnRoaXMuZmJpKSxQYyh0aGlzLmNvbnRleHQsdGhpcy5idWZmZXJJbmZvKSwoZj10aGlzLnByb2ZpbGVyKT09bnVsbHx8Zi5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gUFJPRyA6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApfXNldFByb2ZpbGVyKGUpe3RoaXMucHJvZmlsZXI9ZX19dmFyIFhjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIGJhY2tncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIGZvcmVncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGJhY2tncm91bmRDb2xvciA9IHRleHR1cmUyRChiYWNrZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBmb3JlZ3JvdW5kQ29sb3IgPSB0ZXh0dXJlMkQoZm9yZWdyb3VuZCwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdHJlc2hvbGRDb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBnbF9GcmFnQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3IgKiB0cmVzaG9sZENvbG9yLmEgKwogICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciAqICgxLiAtIHRyZXNob2xkQ29sb3IuYSk7Cn0KYCxRYz1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7Cn0KYDtjbGFzcyBFciBleHRlbmRzIF9le2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFhjfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBRY319Y2xhc3MgVHJ7Y29uc3RydWN0b3IoKXtsKHRoaXMsInN0ZXBzIixbXSk7bCh0aGlzLCJwcm9maWxlciIpfWFkZFN0ZXAoZSl7dGhpcy5zdGVwcy5wdXNoKGUpfWFzeW5jIHJ1bigpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RlcHMpZS5wcm9ncmFtLnJ1bihlLmdldFVuaWZvcm1zKCkpfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuLGk7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYFBJUCBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XWApO2Zvcihjb25zdCBvIG9mIHRoaXMuc3RlcHMpby5wcmV2ZW50UmVzaXplfHxvLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCk7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucG9wQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLnNldFByb2ZpbGVyKGUpfXNldElkKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLmlkPWV9fWNsYXNzIEFyIGV4dGVuZHMgVHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMSl9fWNsYXNzIGFpIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTtsKHRoaXMsImlucHV0QmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApO3RoaXMuY29udGV4dD10O2NvbnN0IG49e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxpPW5ldyBFcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkkodCx0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlKSxmb3JlZ3JvdW5kOkkodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19dmFyIEtjPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLHFjPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3MgSmMgZXh0ZW5kcyBfZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBLY31nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gcWN9fWNsYXNzIFpjIGV4dGVuZHMgVHJ7Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDppLHdpZHRoOm59O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgSmMoey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YSh0KXt0aGlzLmlucHV0SW1hZ2U9dH19YXN5bmMgZnVuY3Rpb24gdWkocil7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntzZXRUaW1lb3V0KCgpPT57ZSgpfSxyKX0pfXZhciBlZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLHRmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsd3I9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKSh3cnx8e30pO2NsYXNzIGNpIGV4dGVuZHMgX2V7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBlZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0Zn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBJciBleHRlbmRzIF9le2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpO2wodGhpcywiZmJpMiIpO3RoaXMuZmJpMj13dCh0LmNvbnRleHQsW3tmb3JtYXQ6dC5jb250ZXh0LlJHQkEsdHlwZTp0LmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dC5jb250ZXh0LkxJTkVBUixtYWc6dC5jb250ZXh0LkxJTkVBUix3cmFwOnQuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdC53aWR0aCx0LmhlaWdodCl9cnVuKHQpe2NvbnN0IG49dGhpcy5mYmk7dGhpcy5mYmk9dGhpcy5mYmkyLHRoaXMuZmJpMj1uLHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdLHN1cGVyLnJ1bih7Li4udCxwcmV2aW91c19yZW5kZXJpbmc6dGhpcy5mYmkyLmF0dGFjaG1lbnRzWzBdfSl9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5mYmkyPXd0KHRoaXMuY29udGV4dCxbe2Zvcm1hdDp0aGlzLmNvbnRleHQuUkdCQSx0eXBlOnRoaXMuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0aGlzLmNvbnRleHQuTElORUFSLHdyYXA6dGhpcy5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LG4pfX12YXIgcmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKLy8gdW5pZm9ybSBmbG9hdCB0cmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2Vfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfbm93Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNfcmVuZGVyaW5nOwp1bmlmb3JtIHZlYzIgY2FudmFzOwoKdW5pZm9ybSBmbG9hdCBkZWx0YTsKCmZsb2F0IGN1cnJlbnRfZmFjdG9yID0gMC42OTsKZmxvYXQgcHJldmlvdXNfZmFjdG9yID0gMC43NDsKZmxvYXQgdGhyZXNob2xkX2FjdGl2YXRpb24gPSAwLjU0OwoKZmxvYXQgbWFwKGZsb2F0IHZhbHVlLCBmbG9hdCBtaW4xLCBmbG9hdCBtYXgxLCBmbG9hdCBtaW4yLCBmbG9hdCBtYXgyKSB7CiAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpOwp9CgpmbG9hdCBnZXRUaHJlc2hvbGQoKSB7CiAgdmVjNCBjb2xvciA9IHZlYzQoMC4pOwogIGZvciAoZmxvYXQgeSA9IC02LjsgeSA8IDcuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtNi47IHggPCA3LjsgeCArPSAxLikgewogICAgICB2ZWM0IGltYWdlX25vd19jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2Vfbm93LCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICB2ZWM0IGltYWdlX2JlZm9yZV9jb2xvciA9CiAgICAgICAgICB0ZXh0dXJlMkQoaW1hZ2VfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCArIHZlYzIoeCwgeSkgLyBjYW52YXMpOwogICAgICBjb2xvciArPSBhYnMoaW1hZ2VfYmVmb3JlX2NvbG9yIC0gaW1hZ2Vfbm93X2NvbG9yKTsKICAgIH0KICB9CiAgcmV0dXJuIChjb2xvci54ICsgY29sb3IueSArIGNvbG9yLnopIC8gKDMuICogOS4pOwp9Cgp2b2lkIG1haW4oKSB7CiAgZmxvYXQgdHJlc2hvbGRfaW5wdXQgPSAuNDsKICBmbG9hdCB0cmVzaG9sZF9wcmV2aW91c19yZW5kZXJpbmcgPSAuOTg7CgogIHZlYzQgbWFza19ub3dfY29sb3IgPSB0ZXh0dXJlMkQobWFza19ub3csIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IG1hc2tfYmVmb3JlX2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfYmVmb3JlLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgPSB0ZXh0dXJlMkQocHJldmlvdXNfcmVuZGVyaW5nLCBfdGV4dHVyZV9jb29yZCk7CgogIHZlYzMgbWFza19kaWZmID0gYWJzKG1hc2tfYmVmb3JlX2NvbG9yLnh5eiAtIG1hc2tfbm93X2NvbG9yLnh5eik7CiAgZmxvYXQgZmxpY2tlcmluZyA9IG1hc2tfZGlmZi54OwogIGZsb2F0IHRocmVzaG9sZCA9IGdldFRocmVzaG9sZCgpOwogIGlmICh0aHJlc2hvbGQgPCB0aHJlc2hvbGRfYWN0aXZhdGlvbikgewogICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmbGlja2VyaW5nLCAwLiwgMC4sIDEuKSAqIGN1cnJlbnRfZmFjdG9yICsKICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciAqIHByZXZpb3VzX2ZhY3RvcjsKICAgIGdsX0ZyYWdDb2xvciAqPSAoMS4gLSB0aHJlc2hvbGQpOwogIH0KfQpgLG5mPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3Mgb2YgZXh0ZW5kcyBJcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiByZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gbmZ9fXZhciBzZj1gI3ZlcnNpb24gMzAwIGVzCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Wb2xjb21peC92aXJ0dWFsLWJhY2tncm91bmQvYmxvYi9tYWluL3NyYy9waXBlbGluZXMvd2ViZ2wyL2pvaW50QmlsYXRlcmFsRmlsdGVyU3RhZ2UudHMKCnByZWNpc2lvbiBoaWdocCBmbG9hdDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRfZnJhbWU7CnVuaWZvcm0gc2FtcGxlcjJEIHNlZ21lbnRhdGlvbl9tYXNrOwp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gdmVjMiB0ZXhlbF9zaXplOwp1bmlmb3JtIGZsb2F0IHN0ZXA7CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwp1bmlmb3JtIGZsb2F0IG9mZnNldDsKdW5pZm9ybSBmbG9hdCBzaWdtYV90ZXhlbDsKdW5pZm9ybSBmbG9hdCBzaWdtYV9jb2xvcjsKCmluIHZlYzIgX3RleHR1cmVfY29vcmQ7Cm91dCB2ZWM0IG91dENvbG9yOwoKZmxvYXQgZ2F1c3NpYW4oZmxvYXQgeCwgZmxvYXQgc2lnbWEpIHsKICBmbG9hdCBjb2VmZiA9IC0wLjUgLyAoc2lnbWEgKiBzaWdtYSAqIDQuMCArIDEuMGUtNik7CiAgcmV0dXJuIGV4cCgoeCAqIHgpICogY29lZmYpOwp9Cgp2b2lkIG1haW4oKSB7CiAgdmVjMiBjZW50ZXJDb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogIHZlYzMgY2VudGVyQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjZW50ZXJDb29yZCkucmdiOwogIGZsb2F0IG5ld1ZhbCA9IDAuMDsKICBmbG9hdCBzcGFjZVdlaWdodCA9IDAuMDsKICBmbG9hdCBjb2xvcldlaWdodCA9IDAuMDsKICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDsKICAvLyBTdWJzYW1wbGUga2VybmVsIHNwYWNlLgogIGZvciAoZmxvYXQgaSA9IC1yYWRpdXMgKyBvZmZzZXQ7IGkgPD0gcmFkaXVzOyBpICs9IHN0ZXApIHsKICAgIGZvciAoZmxvYXQgaiA9IC1yYWRpdXMgKyBvZmZzZXQ7IGogPD0gcmFkaXVzOyBqICs9IHN0ZXApIHsKICAgICAgdmVjMiBzaGlmdCA9IHZlYzIoaiwgaSkgKiB0ZXhlbF9zaXplOwogICAgICB2ZWMyIGNvb3JkID0gdmVjMihjZW50ZXJDb29yZCArIHNoaWZ0KTsKICAgICAgdmVjMyBmcmFtZUNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY29vcmQpLnJnYjsKICAgICAgZmxvYXQgdGhyZXNob2xkID0gdGV4dHVyZSh0aHJlc2hvbGQsIGNvb3JkKS5hOwogICAgICBmbG9hdCBvdXRWYWwgPSB0ZXh0dXJlKHNlZ21lbnRhdGlvbl9tYXNrLCBjb29yZCkuYTsKCiAgICAgIHNwYWNlV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29vcmQsIGNvb3JkKSwgc2lnbWFfdGV4ZWwpOwogICAgICBjb2xvcldlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvbG9yLCBmcmFtZUNvbG9yKSwgc2lnbWFfY29sb3IpOwogICAgICB0b3RhbFdlaWdodCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0OwogICAgICBuZXdWYWwgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodCAqIG91dFZhbCAqIHRocmVzaG9sZDsKICAgIH0KICB9CiAgbmV3VmFsIC89IHRvdGFsV2VpZ2h0OwogIG91dENvbG9yID0gdmVjNCh2ZWMzKDAuKSwgbmV3VmFsKTsKfWAsYWY9YCN2ZXJzaW9uIDMwMCBlcwppbiB2ZWMyIHBvc2l0aW9uOwppbiB2ZWMyIHRleHR1cmVfY29vcmQ7Cm91dCB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9YDtjbGFzcyB1ZiBleHRlbmRzIF9le2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHNmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBhZn19dmFyIGNmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgaW50IGNvdW50ID0gMDsKICBmb3IgKGZsb2F0IHkgPSAtMS47IHkgPCAyLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTEuOyB4IDwgMi47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkICsgdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCk7CiAgICAgIGlmIChjb2xvci5yID4gLjEpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CiAgfQogIGlmIChjb3VudCA+IDUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgfQp9CmAsZmY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBsZiBleHRlbmRzIF9le2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGNmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBmZn19dmFyIGRmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCk7CiAgZm9yIChmbG9hdCB5ID0gLTIuOyB5IDwgMy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0yLjsgeCA8IDMuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICAgICAgY29vcmQgKz0gdmVjMih5LCB4KSAvIGNhbnZhczsKICAgICAgY29sb3IgKz0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKSAqICgxLiAvIDQuKTsKICAgIH0KICB9CgogIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwp9CmAsbWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBoZiBleHRlbmRzIElye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGRmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBtZn19dmFyIHBmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRzOwoKdm9pZCBtYWluKCkgewogIHZlYzQgaW5wdXRzX2NvbG9yID0gdGV4dHVyZTJEKGlucHV0cywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdGhyZXNob2xkX2NvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGlmICh0aHJlc2hvbGRfY29sb3IuciA8IC4xICYmIGlucHV0c19jb2xvci5yID4gLjUpIHsKICAgIGdsX0ZyYWdDb2xvciA9IGlucHV0c19jb2xvcjsKICB9Cn0KYCxnZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIHlmIGV4dGVuZHMgSXJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gcGZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIGdmfX1jbGFzcyB4ZiBleHRlbmRzIFRye2NvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJwcmV2aW91c0lucHV0SW1hZ2UiKTtsKHRoaXMsInByZXZpb3VzSW5wdXRNYXNrIik7bCh0aGlzLCJvdXRwdXQiKTtsKHRoaXMsIm9wdGlvbnMiLHtjdXJyZW50VGhyZXNob2xkTWluaW11bTowLGN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtOjEscHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtOjAscHJldmlvdXNUaHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkTWluaW11bTowLHRocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRGYWN0b3I6MX0pO2wodGhpcywiam9pbnRCaWxhdGVyYWwiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn0scz1uZXcgb2YobyksYT1uZXcgY2koey4uLm8scmFkaXVzOjEsdHlwZTp3ci5HQVVTU0lBTn0pLHU9bmV3IHlmKG8pLGY9bmV3IGhmKG8pLG09bmV3IGxmKG8pO3RoaXMuam9pbnRCaWxhdGVyYWw9bmV3IHVmKG8pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpJKHQsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6SSh0LHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpJKHQsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOkkodCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6SSh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6SSh0LHMub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm0sZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsdS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZixnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCxtLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTphLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LGYub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuam9pbnRCaWxhdGVyYWwsZ2V0VW5pZm9ybXM6KCk9Pnt2YXIgJCxHLFYseix6ZSxiZSxjZSxXO2NvbnN0IGc9KEc9KCQ9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6JC53aWR0aCkhPW51bGw/RzoxLHg9KHo9KFY9dGhpcy5pbnB1dEltYWdlKT09bnVsbD92b2lkIDA6Vi5oZWlnaHQpIT1udWxsP3o6MSxkPShiZT0oemU9dGhpcy5pbnB1dE1hc2spPT1udWxsP3ZvaWQgMDp6ZS53aWR0aCkhPW51bGw/YmU6MSxfPShXPShjZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOmNlLmhlaWdodCkhPW51bGw/VzoxLEU9TWF0aC5tYXgoZy9kLHgvXyksdj1NYXRoLm1heCgxLE1hdGguc3FydChFKSouNjYpLEY9MS9nLGs9MS94O3JldHVybntpbnB1dF9mcmFtZTpJKHQsdGhpcy5pbnB1dEltYWdlKSxzZWdtZW50YXRpb25fbWFzazpJKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpJKHQsYS5vdXRwdXQpLHRleGVsX3NpemU6W0Ysa10sc3RlcDp2LHJhZGl1czpFLG9mZnNldDp2PjE/diouNTowLHNpZ21hX3RleGVsOk1hdGgubWF4KEYsaykqRSxzaWdtYV9jb2xvcjouMX19fSksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9c2V0RGF0YSh0LG4pe3RoaXMucHJldmlvdXNJbnB1dEltYWdlPXRoaXMuaW5wdXRJbWFnZT90aGlzLmlucHV0SW1hZ2U6dCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrPXRoaXMuaW5wdXRNYXNrP3RoaXMuaW5wdXRNYXNrOm4sdGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1zZXRPcHRpb25zKHQpe3RoaXMub3B0aW9ucz10fXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMub3V0cHV0PXRoaXMuam9pbnRCaWxhdGVyYWwub3V0cHV0fX1jbGFzcyBfZntjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsImV4dGVuc2lvbiIpO2wodGhpcywicXVlcmllcyIsW10pO2wodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IHVpKDIwMCl9fX1jbGFzcyBJdHtjb25zdHJ1Y3Rvcigpe2wodGhpcywiY2FudmFzIik7bCh0aGlzLCJjb250ZXh0Iik7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywicHJldmlvdXNJbWFnZVdpZHRoIiwwKTtsKHRoaXMsInByZXZpb3VzSW1hZ2VIZWlnaHQiLDApO2wodGhpcywicHJldmlvdXNNYXNrV2lkdGgiLEZlKTtsKHRoaXMsInByZXZpb3VzTWFza0hlaWdodCIsRmUpO2wodGhpcywicHJvZmlsZXIiKTtsKHRoaXMsInBvc3RQcm9jZXNzaW5nRW5hYmxlZCIsITApO2wodGhpcywiaW1wcm92ZU1hc2siKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgid2ViZ2wyIik7aWYoIXQpdGhyb3ciRmFpbCB0byByZXRyaWV2ZSB3ZWJnbDIgY29udGV4dCI7dGhpcy5jYW52YXM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLmltcHJvdmVNYXNrPW5ldyB4Zih0aGlzLmNvbnRleHQsRmUsRmUpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuaW1wcm92ZU1hc2suc2V0T3B0aW9ucyhlKX1lbmFibGVQb3N0UHJvY2Vzc2luZygpe3RoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkPSEwfWRpc2FibGVQb3N0UHJvY2Vzc2luZygpe3RoaXMucG9zdFByb2Nlc3NpbmdFbmFibGVkPSExfWFzeW5jIHByb2ZpbGVXZWJnbChlKXtjb25zdCB0PW5ldyBfZih0aGlzLmNvbnRleHQpO3JldHVybiB0aGlzLnByb2ZpbGVyPXQsdC5zdGFydCgpLGF3YWl0IHVpKGUpLHRoaXMucHJvZmlsZXI9dm9pZCAwLHQuc3RvcCgpLHQuZ2V0UmVzb2x2ZWRRdWVyaWVzKCl9YXN5bmMgcmVuZGVyKGUsdCl7dmFyIG8scztpZighdGhpcy5waXBlbGluZSl0aHJvdyJtaXNzaW5nIHBpcGVsaW5lIjsodGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0IT09ZS5oZWlnaHR8fHRoaXMucHJldmlvdXNJbWFnZVdpZHRoIT09ZS53aWR0aCkmJnRoaXMucmVzaXplT3V0cHV0KGUud2lkdGgsZS5oZWlnaHQpLCh0aGlzLnByZXZpb3VzTWFza0hlaWdodCE9PXQuaGVpZ2h0fHx0aGlzLnByZXZpb3VzTWFza1dpZHRoIT09dC53aWR0aCkmJih0aGlzLmltcHJvdmVNYXNrLnJlc2l6ZU91dHB1dCh0LndpZHRoLHQuaGVpZ2h0KSx0aGlzLnByZXZpb3VzTWFza1dpZHRoPXQud2lkdGgsdGhpcy5wcmV2aW91c01hc2tIZWlnaHQ9dC5oZWlnaHQpO2NvbnN0IG49InJlbmRlcmVyIjsobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wdXNoQ29udGV4dChuKSx0aGlzLmltcHJvdmVNYXNrLnNldFByb2ZpbGVyKHRoaXMucHJvZmlsZXIpLHRoaXMucGlwZWxpbmUuc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlcik7bGV0IGk9dDtyZXR1cm4gdGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQmJih0aGlzLmltcHJvdmVNYXNrLnNldERhdGEoZSx0KSx0aGlzLmltcHJvdmVNYXNrLnJ1bigpLGk9dGhpcy5pbXByb3ZlTWFzay5vdXRwdXQpLHRoaXMucGlwZWxpbmUuc2V0RGF0YShlLGkpLGF3YWl0IHRoaXMucGlwZWxpbmUucnVuKCksKHM9dGhpcy5wcm9maWxlcik9PW51bGx8fHMucG9wQ29udGV4dChuKSx0aGlzLmNhbnZhc31yZXNpemVPdXRwdXQoZSx0KXt2YXIgbjt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LChuPXRoaXMucGlwZWxpbmUpPT1udWxsfHxuLnJlc2l6ZU91dHB1dChlLHQpLHRoaXMucHJldmlvdXNJbWFnZVdpZHRoPWUsdGhpcy5wcmV2aW91c0ltYWdlSGVpZ2h0PXR9fWNsYXNzIGZpIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoKXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcyIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQiKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZVJlc2l6ZXIiKTt0aGlzLnBpcGVsaW5lPW5ldyBhaSh0aGlzLmNvbnRleHQpO2NvbnN0IHQ9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLG49dC5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighbil0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsIGNvbnRleHQiO3RoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcz10LHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQ9bix0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXI9bmV3IFpjKHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNvbnRleHQsMCwwKX1zZXRCYWNrZ3JvdW5kSW1hZ2UodCl7dGhpcy5iYWNrZ3JvdW5kSW1hZ2U9dCx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfXVwZGF0ZUJhY2tncm91bmRJbWFnZSgpe2NvbnN0e3dpZHRoOnQsaGVpZ2h0Om59PXRoaXMuY2FudmFzO3RoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIuc2V0RGF0YSh0aGlzLmJhY2tncm91bmRJbWFnZSksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJ1bigpLHRoaXMucGlwZWxpbmUuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzfXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcy53aWR0aD10LHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplckNhbnZhcy5oZWlnaHQ9bix0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy51cGRhdGVCYWNrZ3JvdW5kSW1hZ2UoKX19Y2xhc3MgYmYgZXh0ZW5kcyBmaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpfXNldEJhY2tncm91bmRWaWRlbyh0KXt0aGlzLmZyYW1lUmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gYXdhaXQgdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSxzdXBlci5yZW5kZXIodCxuKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7aWYodCE9bnVsbCYmdC52YWx1ZSl7Y29uc3QgaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKTt0aGlzLnNldEJhY2tncm91bmRJbWFnZShpKSx0LnZhbHVlLmNsb3NlKCl9fX1jbGFzcyBsaXtibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gbmV3IFZvKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiBuZXcgSG8oZSl9aW1hZ2VCYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBqb312aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gbmV3IGJmfX12YXIgdmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxFZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFRmIGV4dGVuZHMgX2V7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB2Zit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBFZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19Y29uc3QgQWY9MTAsd2Y9MixJZj04O2NsYXNzIFNmIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBUZih7Li4uaSxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3Qgbz1uZXcgRXIoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06byxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkkodCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOkkodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBpPXRoaXMucmFkaXVzPkFmP0lmOndmO3JldHVybnt3aWR0aDpNYXRoLm1heChGZSx0L2kpLGhlaWdodDpNYXRoLm1heChGZSxuL2kpfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBpPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChpLndpZHRoLGkuaGVpZ2h0KX19Y2xhc3MgUmYgZXh0ZW5kcyBJdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBTZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgRmYgZXh0ZW5kcyBBcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0sbz1uZXcgY2koey4uLmkscmFkaXVzOm4sdHlwZTp3ci5HQVVTU0lBTn0pLHM9bmV3IEVyKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpJKHQsby5vdXRwdXQpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgUGYgZXh0ZW5kcyBJdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBGZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3Mga2YgZXh0ZW5kcyBhaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IGlucHV0VmlkZW8odCl7dGhpcy5mcmFtZVJlYWRlcj10LmdldFJlYWRlcigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCl9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHN1cGVyLnJ1bigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX1jbGFzcyBEZiBleHRlbmRzIEl0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcga2YodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8odCl7dGhpcy5waXBlbGluZS5pbnB1dFZpZGVvPXR9fWNsYXNzIGRpe2JsdXJCYWNrZ3JvdW5kKGUpe3JldHVybiBuZXcgUmYoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIG5ldyBQZihlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gbmV3IGZpfXZpZGVvQmFja2dyb3VuZCgpe3JldHVybiBuZXcgRGZ9fWNsYXNzIENme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiZmFjdG9yeSIpO3N3aXRjaChlKXtjYXNlIG50LkNBTlZBUzp0aGlzLmZhY3Rvcnk9bmV3IGxpO2JyZWFrO2Nhc2UgbnQuV0VCR0w6dGhpcy5mYWN0b3J5PW5ldyBkaTticmVhaztkZWZhdWx0OmNvbnN0IHQ9V28oKTt0aGlzLmZhY3Rvcnk9dC5zdXBwb3J0ZWQ/bmV3IGRpOm5ldyBsaX19Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJCYWNrZ3JvdW5kKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5ibHVyU2lsaG91ZXR0ZShlKX1pbWFnZUJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuaW1hZ2VCYWNrZ3JvdW5kKCl9dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLnZpZGVvQmFja2dyb3VuZCgpfWdldEZhY3RvcnkoKXtpZighdGhpcy5mYWN0b3J5KXRocm93IkZhY3RvcnkgaXMgbm90IGluaXRpYWxpemVkIjtyZXR1cm4gdGhpcy5mYWN0b3J5fX1jbGFzcyBCZntjb25zdHJ1Y3Rvcigpe2wodGhpcywicmVuZGVyZXIiKX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgbixpO2NvbnN0IHQ9bmV3IENmKChuPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOm4udHlwZSk7c3dpdGNoKGUudHJhbnNmb3JtZXJUeXBlKXtjYXNlIkJhY2tncm91bmRCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1ckJhY2tncm91bmQodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiU2lsaG91ZXR0ZUJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyU2lsaG91ZXR0ZSh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJWaWRlb0JhY2tncm91bmQiOnRoaXMucmVuZGVyZXI9dC52aWRlb0JhY2tncm91bmQoKTticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLnJlbmRlcmVyPXQuaW1hZ2VCYWNrZ3JvdW5kKCk7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHJlbmRlcmluZyB0eXBlIFske2UudHJhbnNmb3JtZXJUeXBlfV1gfSgoaT1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09bnQuV0VCR0wmJihlLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PXp0LlBSRUNJU0U/dGhpcy5yZW5kZXJlci5lbmFibGVQb3N0UHJvY2Vzc2luZygpOmUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09enQuRkFTVCYmdGhpcy5yZW5kZXJlci5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5yZW5kZXJlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe2NvbnN0IHQ9dGhpcy5yZW5kZXJlcjt0LnNldEJhY2tncm91bmRWaWRlbyYmdC5zZXRCYWNrZ3JvdW5kVmlkZW8oZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3Quc2V0QmFja2dyb3VuZEltYWdlJiZ0LnNldEJhY2tncm91bmRJbWFnZShlKX1hc3luYyBwcm9jZXNzKGUsdCl7aWYodGhpcy5yZW5kZXJlcilyZXR1cm4gdGhpcy5yZW5kZXJlci5yZW5kZXIoZSx0KX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7fWdldEJsdXJTaXplKGU9cnQuTG93KXtzd2l0Y2goZSl7Y2FzZSBydC5Mb3c6cmV0dXJuIDU7Y2FzZSBydC5IaWdoOnJldHVybiAxMn1yZXR1cm4gZX1hc3luYyBwcm9maWxlKGUpe3ZhciB0LG47cmV0dXJuKG49KHQ9dGhpcy5yZW5kZXJlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZVdlYmdsKGUpKSE9bnVsbD9uOltdfX1jbGFzcyBOZntjb25zdHJ1Y3Rvcigpe2wodGhpcywic2VsZmllU2VnbWVudGF0aW9uIixuZXcgem8pO2wodGhpcywiYmFja2dyb3VuZEZpbHRlciIpO2wodGhpcywicmVwb3J0ZXIiLG5ldyBObyk7bCh0aGlzLCJiYWNrZ3JvdW5kT3B0aW9ucyIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5pbml0KHQud2FzbUFzc2V0VXJpUGF0aCx0LnRmbGl0ZUFzc2V0VXJpUGF0aCksdGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBCZix0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJDcmVhdGUifSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dmFyIGEsdTtsZXQgbjtjb25zdCBpPShhPWUudGltZXN0YW1wKSE9bnVsbD9hOjAsbz1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChlKSxzPWF3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLnByb2Nlc3Mobyk7cyYmKG49YXdhaXQoKHU9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dS5wcm9jZXNzKG8scykpKSxuPyhlLmNsb3NlKCksdC5lbnF1ZXVlKG5ldyBWaWRlb0ZyYW1lKG4se3RpbWVzdGFtcDppLGFscGhhOiJkaXNjYXJkIn0pKSk6dC5lbnF1ZXVlKGUpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O3RoaXMuYmFja2dyb3VuZE9wdGlvbnM9ZSxhd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgc2V0VmlkZW9CR1JlYWRhYmxlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlkZW9CR1JlYWRhYmxlKGUpKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpcnR1YWxCR0ltYWdlKGUpKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt2YXIgdDsodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsfHx0LnNldEZsaWNrZXJpbmdPcHRpb25zKGUpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSJ9KX1hc3luYyBwcm9maWxlKGUpe3ZhciB0LG47cmV0dXJuKG49KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlKGUpKSE9bnVsbD9uOltdfWdldFRyYW5zZm9ybWVyVHlwZSgpe3ZhciBlLHQ7cmV0dXJuKHQ9KGU9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOmUudHJhbnNmb3JtZXJUeXBlKSE9bnVsbD90OiJVbmRlZmluZWQifXJlcG9ydChlKXt2YXIgdDt0aGlzLnJlcG9ydGVyLnNlbmQoe3ZlcnNpb246T28sYWN0aW9uOiJNbFRyYW5zZm9ybWVycyIsdHJhbnNmb3JtZXJUeXBlOih0PXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDp0LnRyYW5zZm9ybWVyVHlwZSxjb25maWc6SlNPTi5zdHJpbmdpZnkodGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyksLi4uZX0pfX1jb25zdCBTcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe2wodGhpcywiYmFja2dyb3VuZFRyYW5zZm9ybWVyIixuZXcgTmYpO2wodGhpcywibWVkaWFQcm9jZXNzb3IiLG5ldyBmbyk7bCh0aGlzLCJyYXRlIiwzMCk7bCh0aGlzLCJyZXNvbHZlT25NZWRpYVByb2Nlc3NvciIpO2wodGhpcywiZXZlbnRzUXVldWUiLFtdKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHQpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLGkpPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6aX0pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOml9KX0pfWFzeW5jIG9uTWVkaWFQcm9jZXNzb3JFdmVudCgpe3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT57dGhpcy5ldmVudHNRdWV1ZS5sZW5ndGg+MD9lKHRoaXMuZXZlbnRzUXVldWUuc2hpZnQoKSk6dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj1lfSl9YXN5bmMgc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy5yYXRlPWUsdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZShlKX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt0aGlzLm1lZGlhUHJvY2Vzc29yLnRyYW5zZm9ybShlLHQpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpZGVvQkdSZWFkYWJsZShlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaXJ0dWFsQkdJbWFnZShlKX1hc3luYyB0ZXJtaW5hdGUoKXthd2FpdCB0aGlzLm1lZGlhUHJvY2Vzc29yLmRlc3Ryb3koKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1zZXRWb25hZ2VNZXRhZGF0YShlKXtpbyhlKX1hc3luYyBwcm9maWxlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5wcm9maWxlKGUpKX19O2xldCBtaT1TcjsoKCk9PntBaSgiUHJvY2Vzc29yV29ya2VyIixTcil9KSgpfSkoKTsK",_l=typeof window<"u"&&window.Blob&&new Blob([atob(Pl)],{type:"text/javascript;charset=utf-8"});function p3(){const i=_l&&(window.URL||window.webkitURL).createObjectURL(_l);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+Pl)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const qo=class extends gs{constructor(){super(...arguments);Zt(this,"rate",30);Zt(this,"worker")}async init(r){this.worker=await O2(Qo,p3),await this.worker.init(`worker_${qo.initCount++}`,r),await this.worker.setVonageMetadata(li()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var m;await((m=this.worker)==null?void 0:m.setTrackExpectedRate(r))}async setBackgroundOptions(r){var X,S,H;await((X=this.worker)==null?void 0:X.setBackgroundOptions(r));const{transformerType:m}=r;switch(m){case"VideoBackground":await((S=this.worker)==null?void 0:S.setVideoBGReadable(await Gs.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((H=this.worker)==null?void 0:H.setVirtualBGImage(await Gs.createImageCanvas(r.backgroundAssetUri)));break}}async transform(r,m){var X;await((X=this.worker)==null?void 0:X.transform(r,m))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var m;await((m=this.worker)==null?void 0:m.setFlickeringOptions(r))}async profile(r){var X;const m=await((X=this.worker)==null?void 0:X.profile(r));return JSON.parse(m!=null?m:"[]")}async listenWorker(){var r,m,X;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:S,data:H}=await((m=this.worker)==null?void 0:m.onMediaProcessorEvent());switch(S){case"error":case"warn":this.emit(S,H);break;case"pipelineInfo":switch(this.emit(S,H),H){case"pipeline_ended":case"pipeline_ended_with_error":await((X=this.worker)==null?void 0:X.terminate());return}break}}}};let Qi=qo;Zt(Qi,"initCount",0);class b3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},m=[];let X=0;for(const H of this.queries){const T=[];for(const B of H)r[B.name]===void 0&&(r[B.name]=n.length,n.push({name:B.name})),T.push({type:B.action==Al.PUSH?"O":"C",frame:r[B.name],at:B.timestamp}),X=Math.max(X,B.timestamp+B.duration);m.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:X})}const S={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:m};return JSON.stringify(S,null,2)}}class Do extends gs{constructor(){super();Zt(this,"worker",new Qi);Zt(this,"connector",new F2(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((m,X)=>this.emit(m,X))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const m=await Promise.all(this.instances.map(X=>X.profile(r)));return new b3(m)}static async create(r){const m=new this;return await m.init(r),this.instances.push(m),m}}Zt(Do,"instances",[]);function y3(){return di}function g3(){return hi}function Z3(){return fi}function v3(){return mi}function G3(){return pi}function X3(){return bi}function W3(){return yi}async function V3(i){return await Do.create(i)}Ee.BackgroundTransformer=Ol,Ee.BackgroundTransformerType=as,Ee.BlurRadius=Er,Ee.ErrorFunction=us,Ee.MediapipeHelper=gi,Ee.PipelineInfoData=ui,Ee.RenderingType=Br,Ee.VonageMediaProcessor=Do,Ee.WarningType=cs,Ee.WebglSelfieSegmentationType=ai,Ee.createVonageMediaProcessor=V3,Ee.getSupportedBrowserFeatures=hs,Ee.getVonageFaceDetection=v3,Ee.getVonageFaceMash=G3,Ee.getVonageHands=g3,Ee.getVonageHolistic=Z3,Ee.getVonageObjectron=X3,Ee.getVonagePose=W3,Ee.getVonageSelfieSegmentation=y3,Ee.isSupported=U2,Object.defineProperties(Ee,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});