@lottiefiles/dotlottie-web 0.29.2 → 0.30.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.
- package/dist/dotlottie-player.wasm +0 -0
- package/dist/index.cjs +7 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +271 -4
- package/dist/index.d.ts +271 -4
- package/dist/index.js +6 -12
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/index-CKktTSum.d.cts +0 -271
- package/dist/index-CKktTSum.d.ts +0 -271
- package/dist/worker/index.cjs +0 -13
- package/dist/worker/index.cjs.map +0 -1
- package/dist/worker/index.d.cts +0 -1
- package/dist/worker/index.d.ts +0 -1
- package/dist/worker/index.js +0 -11
- package/dist/worker/index.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* Do not modify this file directly.
|
|
6
|
-
* As it's generated by the build process.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
var Wn=Object.defineProperty;var jn=(f,n,a)=>n in f?Wn(f,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):f[n]=a;var w=(f,n,a)=>jn(f,typeof n!="symbol"?n+"":n,a);var Xe=class{requestAnimationFrame(n){return requestAnimationFrame(n)}cancelAnimationFrame(n){cancelAnimationFrame(n);}},Ze=class{constructor(){w(this,"_lastHandleId",0);w(this,"_lastImmediate",null);}requestAnimationFrame(n){return this._lastHandleId>=Number.MAX_SAFE_INTEGER&&(this._lastHandleId=0),this._lastHandleId+=1,this._lastImmediate=setImmediate(()=>{n(Date.now());}),this._lastHandleId}cancelAnimationFrame(n){this._lastImmediate&&clearImmediate(this._lastImmediate);}},Pe=class{constructor(){w(this,"_strategy");this._strategy=typeof requestAnimationFrame=="function"?new Xe:new Ze;}requestAnimationFrame(n){return this._strategy.requestAnimationFrame(n)}cancelAnimationFrame(n){this._strategy.cancelAnimationFrame(n);}};var H=typeof window<"u"&&typeof window.document<"u";var Se=new Uint8Array([80,75,3,4]),zt=["v","ip","op","layers","fr","w","h"];var ve={name:"@lottiefiles/dotlottie-web",version:"0.29.2",type:"module",description:"Lottie and DotLottie player for the web",repository:{type:"git",url:"git+https://github.com/LottieFiles/dotlottie-web.git",directory:"packages/web"},homepage:"https://github.com/LottieFiles/dotlottie-web#readme",bugs:"https://github.com/LottieFiles/dotlottie-web/issues",author:"LottieFiles",contributors:["Abdelrahman Ashraf <a.theashraf@gmail.com>"],license:"MIT",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",files:["dist"],keywords:["dotlottie","lottie","player","animation","web","canvas","javascript","thorvg"],scripts:{build:"tsup",dev:"tsup --watch",lint:"eslint --fix .","stats:eslint":"cross-env TIMING=1 eslint .","stats:ts":"tsc -p tsconfig.build.json --extendedDiagnostics",test:"vitest run --browser.headless","test:coverage":"vitest run --browser.headless --coverage","test:watch":"vitest","type-check":"tsc --noEmit"},devDependencies:{"@types/node":"^20.14.11","@vitest/browser":"^2.0.3","@vitest/coverage-istanbul":"^2.0.3","cross-env":"7.0.3",playwright:"^1.45.2",tsup:"8.1.0",typescript:"5.0.4",vitest:"^2.0.3"},publishConfig:{access:"public"}};var Un=(()=>{var f=typeof document<"u"?document.currentScript?.src:void 0;return function(n={}){var a=n,h,C,j=new Promise((e,t)=>{h=e,C=t;}),N=Object.assign({},a),z="./this.program",k="";typeof document<"u"&&document.currentScript&&(k=document.currentScript.src),f&&(k=f),k.startsWith("blob:")?k="":k=k.substr(0,k.replace(/[?#].*/,"").lastIndexOf("/")+1);var Z=a.print||console.log.bind(console),Q=a.printErr||console.error.bind(console);Object.assign(a,N),N=null,a.thisProgram&&(z=a.thisProgram);var ae;a.wasmBinary&&(ae=a.wasmBinary);var ge,it=!1,J,E,ee,ie,S,M,ot,st;function lt(){var e=ge.buffer;a.HEAP8=J=new Int8Array(e),a.HEAP16=ee=new Int16Array(e),a.HEAPU8=E=new Uint8Array(e),a.HEAPU16=ie=new Uint16Array(e),a.HEAP32=S=new Int32Array(e),a.HEAPU32=M=new Uint32Array(e),a.HEAPF32=ot=new Float32Array(e),a.HEAPF64=st=new Float64Array(e);}var dt=[],ut=[],ct=[];function qt(){var e=a.preRun.shift();dt.unshift(e);}var G=0,oe=null;function _e(e){throw a.onAbort?.(e),e="Aborted("+e+")",Q(e),it=!0,e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info."),C(e),e}var ht=e=>e.startsWith("data:application/octet-stream;base64,"),te;if(te="DotLottiePlayer.wasm",!ht(te)){var pt=te;te=a.locateFile?a.locateFile(pt,k):k+pt;}function mt(e){if(e==te&&ae)return new Uint8Array(ae);throw "both async and sync fetching of the wasm failed"}function Kt(e){return ae||typeof fetch!="function"?Promise.resolve().then(()=>mt(e)):fetch(e,{credentials:"same-origin"}).then(t=>{if(!t.ok)throw `failed to load wasm binary file at '${e}'`;return t.arrayBuffer()}).catch(()=>mt(e))}function ft(e,t,r){return Kt(e).then(i=>WebAssembly.instantiate(i,t)).then(r,i=>{Q(`failed to asynchronously prepare wasm: ${i}`),_e(i);})}function Xt(e,t){var r=te;return ae||typeof WebAssembly.instantiateStreaming!="function"||ht(r)||typeof fetch!="function"?ft(r,e,t):fetch(r,{credentials:"same-origin"}).then(i=>WebAssembly.instantiateStreaming(i,e).then(t,function(o){return Q(`wasm streaming compile failed: ${o}`),Q("falling back to ArrayBuffer instantiation"),ft(r,e,t)}))}var Te=e=>{for(;0<e.length;)e.shift()(a);},vt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,q=(e,t,r)=>{var i=t+r;for(r=t;e[r]&&!(r>=i);)++r;if(16<r-t&&e.buffer&&vt)return vt.decode(e.subarray(t,r));for(i="";t<r;){var o=e[t++];if(o&128){var s=e[t++]&63;if((o&224)==192)i+=String.fromCharCode((o&31)<<6|s);else {var u=e[t++]&63;o=(o&240)==224?(o&15)<<12|s<<6|u:(o&7)<<18|s<<12|u<<6|e[t++]&63,65536>o?i+=String.fromCharCode(o):(o-=65536,i+=String.fromCharCode(55296|o>>10,56320|o&1023));}}else i+=String.fromCharCode(o);}return i};class Zt{constructor(t){this.ya=t-24;}}var gt=0,_t=e=>{for(var t=0,r=0;r<e.length;++r){var i=e.charCodeAt(r);127>=i?t++:2047>=i?t+=2:55296<=i&&57343>=i?(t+=4,++r):t+=3;}return t},yt=(e,t,r,i)=>{if(0<i){i=r+i-1;for(var o=0;o<e.length;++o){var s=e.charCodeAt(o);if(55296<=s&&57343>=s){var u=e.charCodeAt(++o);s=65536+((s&1023)<<10)|u&1023;}if(127>=s){if(r>=i)break;t[r++]=s;}else {if(2047>=s){if(r+1>=i)break;t[r++]=192|s>>6;}else {if(65535>=s){if(r+2>=i)break;t[r++]=224|s>>12;}else {if(r+3>=i)break;t[r++]=240|s>>18,t[r++]=128|s>>12&63;}t[r++]=128|s>>6&63;}t[r++]=128|s&63;}}t[r]=0;}},ye={},ke=e=>{for(;e.length;){var t=e.pop();e.pop()(t);}};function se(e){return this.fromWireType(M[e>>2])}var ne={},K={},we={},le,V=(e,t,r)=>{function i(d){if(d=r(d),d.length!==e.length)throw new le("Mismatched type converter count");for(var p=0;p<e.length;++p)$(e[p],d[p]);}e.forEach(function(d){we[d]=t;});var o=Array(t.length),s=[],u=0;t.forEach((d,p)=>{K.hasOwnProperty(d)?o[p]=K[d]:(s.push(d),ne.hasOwnProperty(d)||(ne[d]=[]),ne[d].push(()=>{o[p]=K[d],++u,u===s.length&&i(o);}));}),s.length===0&&i(o);},wt,P=e=>{for(var t="";E[e];)t+=wt[E[e++]];return t},_;function en(e,t,r={}){var i=t.name;if(!e)throw new _(`type "${i}" must have a positive integer typeid pointer`);if(K.hasOwnProperty(e)){if(r.ib)return;throw new _(`Cannot register type '${i}' twice`)}K[e]=t,delete we[e],ne.hasOwnProperty(e)&&(t=ne[e],delete ne[e],t.forEach(o=>o()));}function $(e,t,r={}){if(!("argPackAdvance"in t))throw new TypeError("registerType registeredInstance requires argPackAdvance");return en(e,t,r)}var $e=e=>{throw new _(e.ma.za.xa.name+" instance already deleted")},De=!1,Ct=()=>{},bt=(e,t,r)=>t===r?e:r.Ca===void 0?null:(e=bt(e,t,r.Ca),e===null?null:r.ab(e)),Lt={},de=[],Re=()=>{for(;de.length;){var e=de.pop();e.ma.Ka=!1,e.delete();}},ue,ce={},tn=(e,t)=>{if(t===void 0)throw new _("ptr should not be undefined");for(;e.Ca;)t=e.Na(t),e=e.Ca;return ce[t]},Ce=(e,t)=>{if(!t.za||!t.ya)throw new le("makeClassHandle requires ptr and ptrType");if(!!t.Da!=!!t.Aa)throw new le("Both smartPtrType and smartPtr must be specified");return t.count={value:1},he(Object.create(e,{ma:{value:t,writable:!0}}))},he=e=>typeof FinalizationRegistry>"u"?(he=t=>t,e):(De=new FinalizationRegistry(t=>{t=t.ma,--t.count.value,t.count.value===0&&(t.Aa?t.Da.Fa(t.Aa):t.za.xa.Fa(t.ya));}),he=t=>{var r=t.ma;return r.Aa&&De.register(t,{ma:r},t),t},Ct=t=>{De.unregister(t);},he(e));function be(){}var pe=(e,t)=>Object.defineProperty(t,"name",{value:e}),Mt=(e,t,r)=>{if(e[t].Ba===void 0){var i=e[t];e[t]=function(...o){if(!e[t].Ba.hasOwnProperty(o.length))throw new _(`Function '${r}' called with an invalid number of arguments (${o.length}) - expects one of (${e[t].Ba})!`);return e[t].Ba[o.length].apply(this,o)},e[t].Ba=[],e[t].Ba[i.Oa]=i;}},Oe=(e,t,r)=>{if(a.hasOwnProperty(e)){if(r===void 0||a[e].Ba!==void 0&&a[e].Ba[r]!==void 0)throw new _(`Cannot register public name '${e}' twice`);if(Mt(a,e,e),a.hasOwnProperty(r))throw new _(`Cannot register multiple overloads of a function with the same number of arguments (${r})!`);a[e].Ba[r]=t;}else a[e]=t,r!==void 0&&(a[e].vb=r);},nn=e=>{if(e===void 0)return "_unknown";e=e.replace(/[^a-zA-Z0-9_]/g,"$");var t=e.charCodeAt(0);return 48<=t&&57>=t?`_${e}`:e};function rn(e,t,r,i,o,s,u,d){this.name=e,this.constructor=t,this.La=r,this.Fa=i,this.Ca=o,this.cb=s,this.Na=u,this.ab=d,this.kb=[];}var We=(e,t,r)=>{for(;t!==r;){if(!t.Na)throw new _(`Expected null or instance of ${r.name}, got an instance of ${t.name}`);e=t.Na(e),t=t.Ca;}return e};function an(e,t){if(t===null){if(this.Ta)throw new _(`null is not a valid ${this.name}`);return 0}if(!t.ma)throw new _(`Cannot pass "${Ve(t)}" as a ${this.name}`);if(!t.ma.ya)throw new _(`Cannot pass deleted object as a pointer of type ${this.name}`);return We(t.ma.ya,t.ma.za.xa,this.xa)}function on(e,t){if(t===null){if(this.Ta)throw new _(`null is not a valid ${this.name}`);if(this.Qa){var r=this.Ua();return e!==null&&e.push(this.Fa,r),r}return 0}if(!t||!t.ma)throw new _(`Cannot pass "${Ve(t)}" as a ${this.name}`);if(!t.ma.ya)throw new _(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Pa&&t.ma.za.Pa)throw new _(`Cannot convert argument of type ${t.ma.Da?t.ma.Da.name:t.ma.za.name} to parameter type ${this.name}`);if(r=We(t.ma.ya,t.ma.za.xa,this.xa),this.Qa){if(t.ma.Aa===void 0)throw new _("Passing raw pointer to smart pointer is illegal");switch(this.pb){case 0:if(t.ma.Da===this)r=t.ma.Aa;else throw new _(`Cannot convert argument of type ${t.ma.Da?t.ma.Da.name:t.ma.za.name} to parameter type ${this.name}`);break;case 1:r=t.ma.Aa;break;case 2:if(t.ma.Da===this)r=t.ma.Aa;else {var i=t.clone();r=this.lb(r,Me(()=>i.delete())),e!==null&&e.push(this.Fa,r);}break;default:throw new _("Unsupporting sharing policy")}}return r}function sn(e,t){if(t===null){if(this.Ta)throw new _(`null is not a valid ${this.name}`);return 0}if(!t.ma)throw new _(`Cannot pass "${Ve(t)}" as a ${this.name}`);if(!t.ma.ya)throw new _(`Cannot pass deleted object as a pointer of type ${this.name}`);if(t.ma.za.Pa)throw new _(`Cannot convert argument of type ${t.ma.za.name} to parameter type ${this.name}`);return We(t.ma.ya,t.ma.za.xa,this.xa)}function me(e,t,r,i,o,s,u,d,p,c,m){this.name=e,this.xa=t,this.Ta=r,this.Pa=i,this.Qa=o,this.jb=s,this.pb=u,this.Za=d,this.Ua=p,this.lb=c,this.Fa=m,o||t.Ca!==void 0?this.toWireType=on:(this.toWireType=i?an:sn,this.Ea=null);}var Et=(e,t,r)=>{if(!a.hasOwnProperty(e))throw new le("Replacing nonexistent public symbol");a[e].Ba!==void 0&&r!==void 0?a[e].Ba[r]=t:(a[e]=t,a[e].Oa=r);},T,ln=(e,t,r=[])=>(e.includes("j")?(e=e.replace(/p/g,"i"),t=(0, a["dynCall_"+e])(t,...r)):t=T.get(t)(...r),t),dn=(e,t)=>(...r)=>ln(e,t,r),A=(e,t)=>{e=P(e);var r=e.includes("j")?dn(e,t):T.get(t);if(typeof r!="function")throw new _(`unknown function pointer with signature ${e}: ${t}`);return r},Ft,It=e=>{e=Rt(e);var t=P(e);return B(e),t},Le=(e,t)=>{function r(s){o[s]||K[s]||(we[s]?we[s].forEach(r):(i.push(s),o[s]=!0));}var i=[],o={};throw t.forEach(r),new Ft(`${e}: `+i.map(It).join([", "]))},je=(e,t)=>{for(var r=[],i=0;i<e;i++)r.push(M[t+4*i>>2]);return r};function un(e){for(var t=1;t<e.length;++t)if(e[t]!==null&&e[t].Ea===void 0)return !0;return !1}function ze(e,t,r,i,o){var s=t.length;if(2>s)throw new _("argTypes array size mismatch! Must at least get return value and 'this' types!");var u=t[1]!==null&&r!==null,d=un(t),p=t[0].name!=="void",c=s-2,m=Array(c),y=[],b=[];return pe(e,function(...l){if(l.length!==c)throw new _(`function ${e} called with ${l.length} arguments, expected ${c}`);if(b.length=0,y.length=u?2:1,y[0]=o,u){var v=t[1].toWireType(b,this);y[1]=v;}for(var g=0;g<c;++g)m[g]=t[g+2].toWireType(b,l[g]),y.push(m[g]);if(l=i(...y),d)ke(b);else for(g=u?1:2;g<t.length;g++){var I=g===1?v:m[g-2];t[g].Ea!==null&&t[g].Ea(I);}return v=p?t[0].fromWireType(l):void 0,v})}var Pt=e=>{e=e.trim();let t=e.indexOf("(");return t!==-1?e.substr(0,t):e},Ue=[],U=[],Be=e=>{9<e&&--U[e+1]===0&&(U[e]=void 0,Ue.push(e));},He=e=>{if(!e)throw new _("Cannot use deleted val. handle = "+e);return U[e]},Me=e=>{switch(e){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let t=Ue.pop()||U.length;return U[t]=e,U[t+1]=1,t}},St={name:"emscripten::val",fromWireType:e=>{var t=He(e);return Be(e),t},toWireType:(e,t)=>Me(t),argPackAdvance:8,readValueFromPointer:se,Ea:null},cn=(e,t,r)=>{switch(t){case 1:return r?function(i){return this.fromWireType(J[i])}:function(i){return this.fromWireType(E[i])};case 2:return r?function(i){return this.fromWireType(ee[i>>1])}:function(i){return this.fromWireType(ie[i>>1])};case 4:return r?function(i){return this.fromWireType(S[i>>2])}:function(i){return this.fromWireType(M[i>>2])};default:throw new TypeError(`invalid integer width (${t}): ${e}`)}},Ne=(e,t)=>{var r=K[e];if(r===void 0)throw e=`${t} has unknown type ${It(e)}`,new _(e);return r},Ve=e=>{if(e===null)return "null";var t=typeof e;return t==="object"||t==="array"||t==="function"?e.toString():""+e},hn=(e,t)=>{switch(t){case 4:return function(r){return this.fromWireType(ot[r>>2])};case 8:return function(r){return this.fromWireType(st[r>>3])};default:throw new TypeError(`invalid float width (${t}): ${e}`)}},pn=(e,t,r)=>{switch(t){case 1:return r?i=>J[i]:i=>E[i];case 2:return r?i=>ee[i>>1]:i=>ie[i>>1];case 4:return r?i=>S[i>>2]:i=>M[i>>2];default:throw new TypeError(`invalid integer width (${t}): ${e}`)}},At=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,mn=(e,t)=>{for(var r=e>>1,i=r+t/2;!(r>=i)&&ie[r];)++r;if(r<<=1,32<r-e&&At)return At.decode(E.subarray(e,r));for(r="",i=0;!(i>=t/2);++i){var o=ee[e+2*i>>1];if(o==0)break;r+=String.fromCharCode(o);}return r},fn=(e,t,r)=>{if(r??(r=2147483647),2>r)return 0;r-=2;var i=t;r=r<2*e.length?r/2:e.length;for(var o=0;o<r;++o)ee[t>>1]=e.charCodeAt(o),t+=2;return ee[t>>1]=0,t-i},vn=e=>2*e.length,gn=(e,t)=>{for(var r=0,i="";!(r>=t/4);){var o=S[e+4*r>>2];if(o==0)break;++r,65536<=o?(o-=65536,i+=String.fromCharCode(55296|o>>10,56320|o&1023)):i+=String.fromCharCode(o);}return i},_n=(e,t,r)=>{if(r??(r=2147483647),4>r)return 0;var i=t;r=i+r-4;for(var o=0;o<e.length;++o){var s=e.charCodeAt(o);if(55296<=s&&57343>=s){var u=e.charCodeAt(++o);s=65536+((s&1023)<<10)|u&1023;}if(S[t>>2]=s,t+=4,t+4>r)break}return S[t>>2]=0,t-i},yn=e=>{for(var t=0,r=0;r<e.length;++r){var i=e.charCodeAt(r);55296<=i&&57343>=i&&++r,t+=4;}return t},Ye=[],wn=e=>{var t=Ye.length;return Ye.push(e),t},Cn=(e,t)=>{for(var r=Array(e),i=0;i<e;++i)r[i]=Ne(M[t+4*i>>2],"parameter "+i);return r},bn=Reflect.construct,Je={},xt=()=>{if(!Ge){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:z||"./this.program"},t;for(t in Je)Je[t]===void 0?delete e[t]:e[t]=Je[t];var r=[];for(t in e)r.push(`${t}=${e[t]}`);Ge=r;}return Ge},Ge,Ln=[null,[],[]],Mn=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return e=>crypto.getRandomValues(e);_e("initRandomDevice");},Tt=e=>(Tt=Mn())(e),Ee=e=>e%4===0&&(e%100!==0||e%400===0),kt=[31,29,31,30,31,30,31,31,30,31,30,31],$t=[31,28,31,30,31,30,31,31,30,31,30,31];function En(e){var t=Array(_t(e)+1);return yt(e,t,0,t.length),t}var Fn=(e,t,r,i)=>{function o(l,v,g){for(l=typeof l=="number"?l.toString():l||"";l.length<v;)l=g[0]+l;return l}function s(l,v){return o(l,v,"0")}function u(l,v){function g(Y){return 0>Y?-1:0<Y?1:0}var I;return (I=g(l.getFullYear()-v.getFullYear()))===0&&(I=g(l.getMonth()-v.getMonth()))===0&&(I=g(l.getDate()-v.getDate())),I}function d(l){switch(l.getDay()){case 0:return new Date(l.getFullYear()-1,11,29);case 1:return l;case 2:return new Date(l.getFullYear(),0,3);case 3:return new Date(l.getFullYear(),0,2);case 4:return new Date(l.getFullYear(),0,1);case 5:return new Date(l.getFullYear()-1,11,31);case 6:return new Date(l.getFullYear()-1,11,30)}}function p(l){var v=l.Ia;for(l=new Date(new Date(l.Ja+1900,0,1).getTime());0<v;){var g=l.getMonth(),I=(Ee(l.getFullYear())?kt:$t)[g];if(v>I-l.getDate())v-=I-l.getDate()+1,l.setDate(1),11>g?l.setMonth(g+1):(l.setMonth(0),l.setFullYear(l.getFullYear()+1));else {l.setDate(l.getDate()+v);break}}return g=new Date(l.getFullYear()+1,0,4),v=d(new Date(l.getFullYear(),0,4)),g=d(g),0>=u(v,l)?0>=u(g,l)?l.getFullYear()+1:l.getFullYear():l.getFullYear()-1}var c=M[i+40>>2];i={sb:S[i>>2],rb:S[i+4>>2],Ra:S[i+8>>2],Va:S[i+12>>2],Sa:S[i+16>>2],Ja:S[i+20>>2],Ga:S[i+24>>2],Ia:S[i+28>>2],wb:S[i+32>>2],qb:S[i+36>>2],tb:c&&c?q(E,c):""},r=r?q(E,r):"",c={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var m in c)r=r.replace(new RegExp(m,"g"),c[m]);var y="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),b="January February March April May June July August September October November December".split(" ");c={"%a":l=>y[l.Ga].substring(0,3),"%A":l=>y[l.Ga],"%b":l=>b[l.Sa].substring(0,3),"%B":l=>b[l.Sa],"%C":l=>s((l.Ja+1900)/100|0,2),"%d":l=>s(l.Va,2),"%e":l=>o(l.Va,2," "),"%g":l=>p(l).toString().substring(2),"%G":p,"%H":l=>s(l.Ra,2),"%I":l=>(l=l.Ra,l==0?l=12:12<l&&(l-=12),s(l,2)),"%j":l=>{for(var v=0,g=0;g<=l.Sa-1;v+=(Ee(l.Ja+1900)?kt:$t)[g++]);return s(l.Va+v,3)},"%m":l=>s(l.Sa+1,2),"%M":l=>s(l.rb,2),"%n":()=>`
|
|
10
|
-
`,"%p":l=>0<=l.Ra&&12>l.Ra?"AM":"PM","%S":l=>s(l.sb,2),"%t":()=>" ","%u":l=>l.Ga||7,"%U":l=>s(Math.floor((l.Ia+7-l.Ga)/7),2),"%V":l=>{var v=Math.floor((l.Ia+7-(l.Ga+6)%7)/7);if(2>=(l.Ga+371-l.Ia-2)%7&&v++,v)v==53&&(g=(l.Ga+371-l.Ia)%7,g==4||g==3&&Ee(l.Ja)||(v=1));else {v=52;var g=(l.Ga+7-l.Ia-1)%7;(g==4||g==5&&Ee(l.Ja%400-1))&&v++;}return s(v,2)},"%w":l=>l.Ga,"%W":l=>s(Math.floor((l.Ia+7-(l.Ga+6)%7)/7),2),"%y":l=>(l.Ja+1900).toString().substring(2),"%Y":l=>l.Ja+1900,"%z":l=>{l=l.qb;var v=0<=l;return l=Math.abs(l)/60,(v?"+":"-")+("0000"+(l/60*100+l%60)).slice(-4)},"%Z":l=>l.tb,"%%":()=>"%"},r=r.replace(/%%/g,"\0\0");for(m in c)r.includes(m)&&(r=r.replace(new RegExp(m,"g"),c[m](i)));return r=r.replace(/\0\0/g,"%"),m=En(r),m.length>t?0:(J.set(m,e),m.length-1)};le=a.InternalError=class extends Error{constructor(e){super(e),this.name="InternalError";}};for(var Dt=Array(256),Fe=0;256>Fe;++Fe)Dt[Fe]=String.fromCharCode(Fe);wt=Dt,_=a.BindingError=class extends Error{constructor(e){super(e),this.name="BindingError";}},Object.assign(be.prototype,{isAliasOf:function(e){if(!(this instanceof be&&e instanceof be))return !1;var t=this.ma.za.xa,r=this.ma.ya;e.ma=e.ma;var i=e.ma.za.xa;for(e=e.ma.ya;t.Ca;)r=t.Na(r),t=t.Ca;for(;i.Ca;)e=i.Na(e),i=i.Ca;return t===i&&r===e},clone:function(){if(this.ma.ya||$e(this),this.ma.Ma)return this.ma.count.value+=1,this;var e=he,t=Object,r=t.create,i=Object.getPrototypeOf(this),o=this.ma;return e=e(r.call(t,i,{ma:{value:{count:o.count,Ka:o.Ka,Ma:o.Ma,ya:o.ya,za:o.za,Aa:o.Aa,Da:o.Da}}})),e.ma.count.value+=1,e.ma.Ka=!1,e},delete(){if(this.ma.ya||$e(this),this.ma.Ka&&!this.ma.Ma)throw new _("Object already scheduled for deletion");Ct(this);var e=this.ma;--e.count.value,e.count.value===0&&(e.Aa?e.Da.Fa(e.Aa):e.za.xa.Fa(e.ya)),this.ma.Ma||(this.ma.Aa=void 0,this.ma.ya=void 0);},isDeleted:function(){return !this.ma.ya},deleteLater:function(){if(this.ma.ya||$e(this),this.ma.Ka&&!this.ma.Ma)throw new _("Object already scheduled for deletion");return de.push(this),de.length===1&&ue&&ue(Re),this.ma.Ka=!0,this}}),a.getInheritedInstanceCount=()=>Object.keys(ce).length,a.getLiveInheritedInstances=()=>{var e=[],t;for(t in ce)ce.hasOwnProperty(t)&&e.push(ce[t]);return e},a.flushPendingDeletes=Re,a.setDelayFunction=e=>{ue=e,de.length&&ue&&ue(Re);},Object.assign(me.prototype,{eb(e){return this.Za&&(e=this.Za(e)),e},Xa(e){this.Fa?.(e);},argPackAdvance:8,readValueFromPointer:se,fromWireType:function(e){function t(){return this.Qa?Ce(this.xa.La,{za:this.jb,ya:r,Da:this,Aa:e}):Ce(this.xa.La,{za:this,ya:e})}var r=this.eb(e);if(!r)return this.Xa(e),null;var i=tn(this.xa,r);if(i!==void 0)return i.ma.count.value===0?(i.ma.ya=r,i.ma.Aa=e,i.clone()):(i=i.clone(),this.Xa(e),i);if(i=this.xa.cb(r),i=Lt[i],!i)return t.call(this);i=this.Pa?i.$a:i.pointerType;var o=bt(r,this.xa,i.xa);return o===null?t.call(this):this.Qa?Ce(i.xa.La,{za:i,ya:o,Da:this,Aa:e}):Ce(i.xa.La,{za:i,ya:o})}}),Ft=a.UnboundTypeError=((e,t)=>{var r=pe(t,function(i){this.name=t,this.message=i,i=Error(i).stack,i!==void 0&&(this.stack=this.toString()+`
|
|
11
|
-
`+i.replace(/^Error(:[^\n]*)?\n/,""));});return r.prototype=Object.create(e.prototype),r.prototype.constructor=r,r.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},r})(Error,"UnboundTypeError"),U.push(0,1,void 0,1,null,1,!0,1,!1,1),a.count_emval_handles=()=>U.length/2-5-Ue.length;var In={c:(e,t,r,i)=>{_e(`Assertion failed: ${e?q(E,e):""}, at: `+[t?t?q(E,t):"":"unknown filename",r,i?i?q(E,i):"":"unknown function"]);},m:(e,t,r)=>{var i=new Zt(e);throw M[i.ya+16>>2]=0,M[i.ya+4>>2]=t,M[i.ya+8>>2]=r,gt=e,gt},B:function(){return 0},P:()=>{},M:()=>{},R:function(){return 0},N:()=>{},A:function(){},O:()=>{},v:e=>{var t=ye[e];delete ye[e];var r=t.Ua,i=t.Fa,o=t.Ya,s=o.map(u=>u.hb).concat(o.map(u=>u.nb));V([e],s,u=>{var d={};return o.forEach((p,c)=>{var m=u[c],y=p.fb,b=p.gb,l=u[c+o.length],v=p.mb,g=p.ob;d[p.bb]={read:I=>m.fromWireType(y(b,I)),write:(I,Y)=>{var x=[];v(g,I,l.toWireType(x,Y)),ke(x);}};}),[{name:t.name,fromWireType:p=>{var c={},m;for(m in d)c[m]=d[m].read(p);return i(p),c},toWireType:(p,c)=>{for(var m in d)if(!(m in c))throw new TypeError(`Missing field: "${m}"`);var y=r();for(m in d)d[m].write(y,c[m]);return p!==null&&p.push(i,y),y},argPackAdvance:8,readValueFromPointer:se,Ea:i}]});},I:()=>{},Y:(e,t,r,i)=>{t=P(t),$(e,{name:t,fromWireType:function(o){return !!o},toWireType:function(o,s){return s?r:i},argPackAdvance:8,readValueFromPointer:function(o){return this.fromWireType(E[o])},Ea:null});},r:(e,t,r,i,o,s,u,d,p,c,m,y,b)=>{m=P(m),s=A(o,s),d&&(d=A(u,d)),c&&(c=A(p,c)),b=A(y,b);var l=nn(m);Oe(l,function(){Le(`Cannot construct ${m} due to unbound types`,[i]);}),V([e,t,r],i?[i]:[],v=>{if(v=v[0],i)var g=v.xa,I=g.La;else I=be.prototype;v=pe(m,function(...Ke){if(Object.getPrototypeOf(this)!==Y)throw new _("Use 'new' to construct "+m);if(x.Ha===void 0)throw new _(m+" has no accessible constructor");var jt=x.Ha[Ke.length];if(jt===void 0)throw new _(`Tried to invoke ctor of ${m} with invalid number of parameters (${Ke.length}) - expected (${Object.keys(x.Ha).toString()}) parameters instead!`);return jt.apply(this,Ke)});var Y=Object.create(I,{constructor:{value:v}});v.prototype=Y;var x=new rn(m,v,Y,b,g,s,d,c);if(x.Ca){var fe;(fe=x.Ca).Wa??(fe.Wa=[]),x.Ca.Wa.push(x);}return g=new me(m,x,!0,!1,!1),fe=new me(m+"*",x,!1,!1,!1),I=new me(m+" const*",x,!1,!0,!1),Lt[e]={pointerType:fe,$a:I},Et(l,v),[g,fe,I]});},q:(e,t,r,i,o,s)=>{var u=je(t,r);o=A(i,o),V([],[e],d=>{d=d[0];var p=`constructor ${d.name}`;if(d.xa.Ha===void 0&&(d.xa.Ha=[]),d.xa.Ha[t-1]!==void 0)throw new _(`Cannot register multiple constructors with identical number of parameters (${t-1}) for class '${d.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return d.xa.Ha[t-1]=()=>{Le(`Cannot construct ${d.name} due to unbound types`,u);},V([],u,c=>(c.splice(1,0,null),d.xa.Ha[t-1]=ze(p,c,null,o,s),[])),[]});},f:(e,t,r,i,o,s,u,d)=>{var p=je(r,i);t=P(t),t=Pt(t),s=A(o,s),V([],[e],c=>{function m(){Le(`Cannot call ${y} due to unbound types`,p);}c=c[0];var y=`${c.name}.${t}`;t.startsWith("@@")&&(t=Symbol[t.substring(2)]),d&&c.xa.kb.push(t);var b=c.xa.La,l=b[t];return l===void 0||l.Ba===void 0&&l.className!==c.name&&l.Oa===r-2?(m.Oa=r-2,m.className=c.name,b[t]=m):(Mt(b,t,y),b[t].Ba[r-2]=m),V([],p,v=>(v=ze(y,v,c,s,u),b[t].Ba===void 0?(v.Oa=r-2,b[t]=v):b[t].Ba[r-2]=v,[])),[]});},X:e=>$(e,St),x:(e,t,r,i)=>{function o(){}t=P(t),o.values={},$(e,{name:t,constructor:o,fromWireType:function(s){return this.constructor.values[s]},toWireType:(s,u)=>u.value,argPackAdvance:8,readValueFromPointer:cn(t,r,i),Ea:null}),Oe(t,o);},k:(e,t,r)=>{var i=Ne(e,"enum");t=P(t),e=i.constructor,i=Object.create(i.constructor.prototype,{value:{value:r},constructor:{value:pe(`${i.name}_${t}`,function(){})}}),e.values[r]=i,e[t]=i;},C:(e,t,r)=>{t=P(t),$(e,{name:t,fromWireType:i=>i,toWireType:(i,o)=>o,argPackAdvance:8,readValueFromPointer:hn(t,r),Ea:null});},E:(e,t,r,i,o,s)=>{var u=je(t,r);e=P(e),e=Pt(e),o=A(i,o),Oe(e,function(){Le(`Cannot call ${e} due to unbound types`,u);},t-1),V([],u,d=>(Et(e,ze(e,[d[0],null].concat(d.slice(1)),null,o,s),t-1),[]));},l:(e,t,r,i,o)=>{if(t=P(t),o===-1&&(o=4294967295),o=d=>d,i===0){var s=32-8*r;o=d=>d<<s>>>s;}var u=t.includes("unsigned")?function(d,p){return p>>>0}:function(d,p){return p};$(e,{name:t,fromWireType:o,toWireType:u,argPackAdvance:8,readValueFromPointer:pn(t,r,i!==0),Ea:null});},g:(e,t,r)=>{function i(s){return new o(J.buffer,M[s+4>>2],M[s>>2])}var o=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][t];r=P(r),$(e,{name:r,fromWireType:i,argPackAdvance:8,readValueFromPointer:i},{ib:!0});},w:e=>{$(e,St);},ca:(e,t,r,i,o,s,u,d,p,c,m,y)=>{r=P(r),s=A(o,s),d=A(u,d),c=A(p,c),y=A(m,y),V([e],[t],b=>(b=b[0],[new me(r,b.xa,!1,!1,!0,b,i,s,d,c,y)]));},D:(e,t)=>{t=P(t);var r=t==="std::string";$(e,{name:t,fromWireType:function(i){var o=M[i>>2],s=i+4;if(r)for(var u=s,d=0;d<=o;++d){var p=s+d;if(d==o||E[p]==0){if(u=u?q(E,u,p-u):"",c===void 0)var c=u;else c+="\0",c+=u;u=p+1;}}else {for(c=Array(o),d=0;d<o;++d)c[d]=String.fromCharCode(E[s+d]);c=c.join("");}return B(i),c},toWireType:function(i,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var s=typeof o=="string";if(!(s||o instanceof Uint8Array||o instanceof Uint8ClampedArray||o instanceof Int8Array))throw new _("Cannot pass non-string to std::string");var u=r&&s?_t(o):o.length,d=qe(4+u+1),p=d+4;if(M[d>>2]=u,r&&s)yt(o,E,p,u+1);else if(s)for(s=0;s<u;++s){var c=o.charCodeAt(s);if(255<c)throw B(p),new _("String has UTF-16 code units that do not fit in 8 bits");E[p+s]=c;}else for(s=0;s<u;++s)E[p+s]=o[s];return i!==null&&i.push(B,d),d},argPackAdvance:8,readValueFromPointer:se,Ea(i){B(i);}});},u:(e,t,r)=>{if(r=P(r),t===2)var i=mn,o=fn,s=vn,u=d=>ie[d>>1];else t===4&&(i=gn,o=_n,s=yn,u=d=>M[d>>2]);$(e,{name:r,fromWireType:d=>{for(var p=M[d>>2],c,m=d+4,y=0;y<=p;++y){var b=d+4+y*t;(y==p||u(b)==0)&&(m=i(m,b-m),c===void 0?c=m:(c+="\0",c+=m),m=b+t);}return B(d),c},toWireType:(d,p)=>{if(typeof p!="string")throw new _(`Cannot pass non-string to C++ string type ${r}`);var c=s(p),m=qe(4+c+t);return M[m>>2]=c/t,o(p,m+4,c+t),d!==null&&d.push(B,m),m},argPackAdvance:8,readValueFromPointer:se,Ea(d){B(d);}});},s:(e,t,r,i,o,s)=>{ye[e]={name:P(t),Ua:A(r,i),Fa:A(o,s),Ya:[]};},j:(e,t,r,i,o,s,u,d,p,c)=>{ye[e].Ya.push({bb:P(t),hb:r,fb:A(i,o),gb:s,nb:u,mb:A(d,p),ob:c});},Z:(e,t)=>{t=P(t),$(e,{ub:!0,name:t,argPackAdvance:0,fromWireType:()=>{},toWireType:()=>{}});},J:()=>{throw 1/0},aa:(e,t,r,i)=>(e=Ye[e],t=He(t),e(null,t,r,i)),F:Be,$:(e,t,r)=>{var i=Cn(e,t),o=i.shift();e--;var s=Array(e);return t=`methodCaller<(${i.map(u=>u.name).join(", ")}) => ${o.name}>`,wn(pe(t,(u,d,p,c)=>{for(var m=0,y=0;y<e;++y)s[y]=i[y].readValueFromPointer(c+m),m+=i[y].argPackAdvance;return d=r===1?bn(d,s):d.apply(u,s),u=[],d=o.toWireType(u,d),u.length&&(M[p>>2]=Me(u)),d}))},ba:e=>{9<e&&(U[e+1]+=1);},_:e=>{var t=He(e);ke(t),Be(e);},o:(e,t)=>(e=Ne(e,"_emval_take_value"),e=e.readValueFromPointer(t),Me(e)),W:()=>{_e("");},V:()=>performance.now(),L:e=>{var t=E.length;if(e>>>=0,2147483648<e)return !1;for(var r=1;4>=r;r*=2){var i=t*(1+.2/r);i=Math.min(i,e+100663296);var o=Math;i=Math.max(e,i);e:{o=(o.min.call(o,2147483648,i+(65536-i%65536)%65536)-ge.buffer.byteLength+65535)/65536;try{ge.grow(o),lt();var s=1;break e}catch{}s=void 0;}if(s)return !0}return !1},S:(e,t)=>{var r=0;return xt().forEach((i,o)=>{var s=t+r;for(o=M[e+4*o>>2]=s,s=0;s<i.length;++s)J[o++]=i.charCodeAt(s);J[o]=0,r+=i.length+1;}),0},T:(e,t)=>{var r=xt();M[e>>2]=r.length;var i=0;return r.forEach(o=>i+=o.length+1),M[t>>2]=i,0},t:()=>52,z:()=>52,H:function(){return 70},Q:(e,t,r,i)=>{for(var o=0,s=0;s<r;s++){var u=M[t>>2],d=M[t+4>>2];t+=8;for(var p=0;p<d;p++){var c=E[u+p],m=Ln[e];c===0||c===10?((e===1?Z:Q)(q(m,0)),m.length=0):m.push(c);}o+=d;}return M[i>>2]=o,0},U:(e,t)=>(Tt(E.subarray(e,e+t)),0),i:Tn,d:xn,e:An,p:kn,y:Rn,b:Pn,a:Sn,h:Dn,n:$n,G:On,K:(e,t,r,i)=>Fn(e,t,r,i)},F=function(){function e(r){return F=r.exports,ge=F.da,lt(),T=F.ha,ut.unshift(F.ea),G--,a.monitorRunDependencies?.(G),G==0&&(oe&&(r=oe,oe=null,r())),F}var t={a:In};if(G++,a.monitorRunDependencies?.(G),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(r){Q(`Module.instantiateWasm callback failed with error: ${r}`),C(r);}return Xt(t,function(r){e(r.instance);}).catch(C),{}}(),qe=e=>(qe=F.fa)(e),Rt=e=>(Rt=F.ga)(e),B=e=>(B=F.ia)(e),D=(e,t)=>(D=F.ja)(e,t),R=e=>(R=F.ka)(e),O=()=>(O=F.la)();a.dynCall_iijj=(e,t,r,i,o,s)=>(a.dynCall_iijj=F.na)(e,t,r,i,o,s),a.dynCall_vijj=(e,t,r,i,o,s)=>(a.dynCall_vijj=F.oa)(e,t,r,i,o,s),a.dynCall_jiii=(e,t,r,i)=>(a.dynCall_jiii=F.pa)(e,t,r,i),a.dynCall_jii=(e,t,r)=>(a.dynCall_jii=F.qa)(e,t,r);var Ot=a.dynCall_viiij=(e,t,r,i,o,s)=>(Ot=a.dynCall_viiij=F.ra)(e,t,r,i,o,s);a.dynCall_jiji=(e,t,r,i,o)=>(a.dynCall_jiji=F.sa)(e,t,r,i,o),a.dynCall_viijii=(e,t,r,i,o,s,u)=>(a.dynCall_viijii=F.ta)(e,t,r,i,o,s,u),a.dynCall_iiiiij=(e,t,r,i,o,s,u)=>(a.dynCall_iiiiij=F.ua)(e,t,r,i,o,s,u),a.dynCall_iiiiijj=(e,t,r,i,o,s,u,d,p)=>(a.dynCall_iiiiijj=F.va)(e,t,r,i,o,s,u,d,p),a.dynCall_iiiiiijj=(e,t,r,i,o,s,u,d,p,c)=>(a.dynCall_iiiiiijj=F.wa)(e,t,r,i,o,s,u,d,p,c);function Pn(e,t){var r=O();try{T.get(e)(t);}catch(i){if(R(r),i!==i+0)throw i;D(1,0);}}function Sn(e,t,r){var i=O();try{T.get(e)(t,r);}catch(o){if(R(i),o!==o+0)throw o;D(1,0);}}function An(e,t,r,i){var o=O();try{return T.get(e)(t,r,i)}catch(s){if(R(o),s!==s+0)throw s;D(1,0);}}function xn(e,t,r){var i=O();try{return T.get(e)(t,r)}catch(o){if(R(i),o!==o+0)throw o;D(1,0);}}function Tn(e,t){var r=O();try{return T.get(e)(t)}catch(i){if(R(r),i!==i+0)throw i;D(1,0);}}function kn(e,t,r,i,o,s){var u=O();try{return T.get(e)(t,r,i,o,s)}catch(d){if(R(u),d!==d+0)throw d;D(1,0);}}function $n(e,t,r,i,o){var s=O();try{T.get(e)(t,r,i,o);}catch(u){if(R(s),u!==u+0)throw u;D(1,0);}}function Dn(e,t,r,i){var o=O();try{T.get(e)(t,r,i);}catch(s){if(R(o),s!==s+0)throw s;D(1,0);}}function Rn(e){var t=O();try{T.get(e)();}catch(r){if(R(t),r!==r+0)throw r;D(1,0);}}function On(e,t,r,i,o,s){var u=O();try{Ot(e,t,r,i,o,s);}catch(d){if(R(u),d!==d+0)throw d;D(1,0);}}var Ie;oe=function e(){Ie||Wt(),Ie||(oe=e);};function Wt(){function e(){if(!Ie&&(Ie=!0,a.calledRun=!0,!it)){if(Te(ut),h(a),a.onRuntimeInitialized&&a.onRuntimeInitialized(),a.postRun)for(typeof a.postRun=="function"&&(a.postRun=[a.postRun]);a.postRun.length;){var t=a.postRun.shift();ct.unshift(t);}Te(ct);}}if(!(0<G)){if(a.preRun)for(typeof a.preRun=="function"&&(a.preRun=[a.preRun]);a.preRun.length;)qt();Te(dt),0<G||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("");},1),e();},1)):e());}}if(a.preInit)for(typeof a.preInit=="function"&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();return Wt(),j}})(),Ut=Un;var X=class{constructor(){throw new Error("RendererLoader is a static class and cannot be instantiated.")}static async _tryLoad(n){return await Ut({locateFile:()=>n})}static async _loadWithBackup(){return this._ModulePromise||(this._ModulePromise=this._tryLoad(this._wasmURL).catch(async n=>{let a=`https://unpkg.com/${ve.name}@${ve.version}/dist/dotlottie-player.wasm`;console.warn(`Primary WASM load failed from ${this._wasmURL}. Error: ${n.message}`),console.warn(`Attempting to load WASM from backup URL: ${a}`);try{return await this._tryLoad(a)}catch(h){throw console.error(`Primary WASM URL failed: ${n.message}`),console.error(`Backup WASM URL failed: ${h.message}`),new Error("WASM loading failed from all sources.")}})),this._ModulePromise}static async load(){return this._loadWithBackup()}static setWasmUrl(n){this._wasmURL=n,this._ModulePromise=null;}};w(X,"_ModulePromise",null),w(X,"_wasmURL",`https://cdn.jsdelivr.net/npm/${ve.name}@${ve.version}/dist/dotlottie-player.wasm`);var re=class{constructor(){w(this,"_eventListeners",new Map);}addEventListener(n,a){let h=this._eventListeners.get(n);h||(h=new Set,this._eventListeners.set(n,h)),h.add(a);}removeEventListener(n,a){let h=this._eventListeners.get(n);h&&(a?(h.delete(a),h.size===0&&this._eventListeners.delete(n)):this._eventListeners.delete(n));}dispatch(n){this._eventListeners.get(n.type)?.forEach(h=>h(n));}removeAllEventListeners(){this._eventListeners.clear();}};function Bn(f){return /^#([\da-f]{6}|[\da-f]{8})$/iu.test(f)}function Ht(f){if(!Bn(f))return 0;let n=f.replace("#","");return n=n.length===6?`${n}ff`:n,parseInt(n,16)}function Qe(f){if(f.byteLength<4)return !1;let n=new Uint8Array(f.slice(0,Se.byteLength));for(let a=0;a<Se.length;a+=1)if(Se[a]!==n[a])return !1;return !0}function Bt(f){return zt.every(n=>Object.prototype.hasOwnProperty.call(f,n))}function et(f){if(typeof f=="string")try{return Bt(JSON.parse(f))}catch{return !1}else return Bt(f)}var tt=(f,n)=>f==="reverse"?n.Mode.Reverse:f==="bounce"?n.Mode.Bounce:f==="reverse-bounce"?n.Mode.ReverseBounce:n.Mode.Forward,nt=(f,n)=>f==="contain"?n.Fit.Contain:f==="cover"?n.Fit.Cover:f==="fill"?n.Fit.Fill:f==="fit-height"?n.Fit.FitHeight:f==="fit-width"?n.Fit.FitWidth:n.Fit.None,rt=(f,n)=>{let a=new n.VectorFloat;return a.push_back(f[0]),a.push_back(f[1]),a},at=(f,n)=>{let a=new n.VectorFloat;return f.length!==2||(a.push_back(f[0]),a.push_back(f[1])),a},L=class L{constructor(n){w(this,"_canvas");w(this,"_context",null);w(this,"_eventManager");w(this,"_animationFrameId",null);w(this,"_frameManager");w(this,"_dotLottieCore",null);w(this,"_renderConfig",{});w(this,"_isFrozen",!1);w(this,"_backgroundColor",null);this._canvas=n.canvas,this._context=this._canvas.getContext("2d"),this._eventManager=new re,this._frameManager=new Pe,this._renderConfig=n.renderConfig??{},X.load().then(a=>{L._wasmModule=a,this._dotLottieCore=new a.DotLottiePlayer({autoplay:n.autoplay??!1,backgroundColor:0,loopAnimation:n.loop??!1,mode:tt(n.mode??"forward",a),segment:at(n.segment??[],a),speed:n.speed??1,useFrameInterpolation:n.useFrameInterpolation??!0,marker:n.marker??"",layout:n.layout?{align:rt(n.layout.align,a),fit:nt(n.layout.fit,a)}:a.createDefaultLayout()}),this._eventManager.dispatch({type:"ready"}),n.data?this._loadFromData(n.data):n.src&&this._loadFromSrc(n.src),n.backgroundColor&&this.setBackgroundColor(n.backgroundColor);}).catch(a=>{this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to load wasm module: ${a}`)});});}_dispatchError(n){console.error(n),this._eventManager.dispatch({type:"loadError",error:new Error(n)});}async _fetchData(n){let a=await fetch(n);if(!a.ok)throw new Error(`Failed to fetch animation data from URL: ${n}. ${a.status}: ${a.statusText}`);let h=await a.arrayBuffer();return Qe(h)?h:new TextDecoder().decode(h)}_loadFromData(n){if(this._dotLottieCore===null)return;let a=this._canvas.width,h=this._canvas.height,C=!1;if(typeof n=="string"){if(!et(n)){this._dispatchError("Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.");return}C=this._dotLottieCore.loadAnimationData(n,a,h);}else if(n instanceof ArrayBuffer){if(!Qe(n)){this._dispatchError("Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.");return}C=this._dotLottieCore.loadDotLottieData(n,a,h);}else if(typeof n=="object"){if(!et(n)){this._dispatchError("Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.");return}C=this._dotLottieCore.loadAnimationData(JSON.stringify(n),a,h);}else {this._dispatchError(`Unsupported data type for animation data. Expected:
|
|
3
|
+
var fC=Object.defineProperty;var JC=(r,C,i)=>C in r?fC(r,C,{enumerable:!0,configurable:!0,writable:!0,value:i}):r[C]=i;var B=(r,C,i)=>JC(r,typeof C!="symbol"?C+"":C,i);var _I=class{requestAnimationFrame(C){return requestAnimationFrame(C)}cancelAnimationFrame(C){cancelAnimationFrame(C);}},$I=class{constructor(){B(this,"_lastHandleId",0);B(this,"_lastImmediate",null);}requestAnimationFrame(C){return this._lastHandleId>=Number.MAX_SAFE_INTEGER&&(this._lastHandleId=0),this._lastHandleId+=1,this._lastImmediate=setImmediate(()=>{C(Date.now());}),this._lastHandleId}cancelAnimationFrame(C){this._lastImmediate&&clearImmediate(this._lastImmediate);}},VI=class{constructor(){B(this,"_strategy");this._strategy=typeof requestAnimationFrame=="function"?new _I:new $I;}requestAnimationFrame(C){return this._strategy.requestAnimationFrame(C)}cancelAnimationFrame(C){this._strategy.cancelAnimationFrame(C);}};var P=typeof window<"u"&&typeof window.document<"u";var wI=new Uint8Array([80,75,3,4]),Dg=["v","ip","op","layers","fr","w","h"],qI="0.30.0",Ig="@lottiefiles/dotlottie-web";var TC=(()=>{var r=typeof document<"u"?document.currentScript?.src:void 0;return function(C={}){var i=C,d,m,J=new Promise((I,g)=>{d=I,m=g;}),M=Object.assign({},i),T="./this.program",v="";typeof document<"u"&&document.currentScript&&(v=document.currentScript.src),r&&(v=r),v.startsWith("blob:")?v="":v=v.substr(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1);var $=i.print||console.log.bind(console),q=i.printErr||console.error.bind(console);Object.assign(i,M),M=null,i.thisProgram&&(T=i.thisProgram);var iI;i.wasmBinary&&(iI=i.wasmBinary);var ZI,og=!1,Q,y,II,eI,w,W,ng,ag;function lg(){var I=ZI.buffer;i.HEAP8=Q=new Int8Array(I),i.HEAP16=II=new Int16Array(I),i.HEAPU8=y=new Uint8Array(I),i.HEAPU16=eI=new Uint16Array(I),i.HEAP32=w=new Int32Array(I),i.HEAPU32=W=new Uint32Array(I),i.HEAPF32=ng=new Float32Array(I),i.HEAPF64=ag=new Float64Array(I);}var sg=[],dg=[],cg=[];function xg(){var I=i.preRun.shift();sg.unshift(I);}var j=0,tI=null;function bI(I){throw i.onAbort?.(I),I="Aborted("+I+")",q(I),og=!0,I=new WebAssembly.RuntimeError(I+". Build with -sASSERTIONS for more info."),m(I),I}var Gg=I=>I.startsWith("data:application/octet-stream;base64,"),gI;if(gI="DotLottiePlayer.wasm",!Gg(gI)){var rg=gI;gI=i.locateFile?i.locateFile(rg,v):v+rg;}function hg(I){if(I==gI&&iI)return new Uint8Array(iI);throw "both async and sync fetching of the wasm failed"}function _g(I){return iI||typeof fetch!="function"?Promise.resolve().then(()=>hg(I)):fetch(I,{credentials:"same-origin"}).then(g=>{if(!g.ok)throw `failed to load wasm binary file at '${I}'`;return g.arrayBuffer()}).catch(()=>hg(I))}function Zg(I,g,A){return _g(I).then(e=>WebAssembly.instantiate(e,g)).then(A,e=>{q(`failed to asynchronously prepare wasm: ${e}`),bI(e);})}function $g(I,g){var A=gI;return iI||typeof WebAssembly.instantiateStreaming!="function"||Gg(A)||typeof fetch!="function"?Zg(A,I,g):fetch(A,{credentials:"same-origin"}).then(e=>WebAssembly.instantiateStreaming(e,I).then(g,function(t){return q(`wasm streaming compile failed: ${t}`),q("falling back to ArrayBuffer instantiation"),Zg(A,I,g)}))}var HI=I=>{for(;0<I.length;)I.shift()(i);},bg=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,O=(I,g,A)=>{var e=g+A;for(A=g;I[A]&&!(A>=e);)++A;if(16<A-g&&I.buffer&&bg)return bg.decode(I.subarray(g,A));for(e="";g<A;){var t=I[g++];if(t&128){var o=I[g++]&63;if((t&224)==192)e+=String.fromCharCode((t&31)<<6|o);else {var l=I[g++]&63;t=(t&240)==224?(t&15)<<12|o<<6|l:(t&7)<<18|o<<12|l<<6|I[g++]&63,65536>t?e+=String.fromCharCode(t):(t-=65536,e+=String.fromCharCode(55296|t>>10,56320|t&1023));}}else e+=String.fromCharCode(t);}return e};class qg{constructor(g){this.ya=g-24;}}var ug=0,Bg=I=>{for(var g=0,A=0;A<I.length;++A){var e=I.charCodeAt(A);127>=e?g++:2047>=e?g+=2:55296<=e&&57343>=e?(g+=4,++A):g+=3;}return g},mg=(I,g,A,e)=>{if(0<e){e=A+e-1;for(var t=0;t<I.length;++t){var o=I.charCodeAt(t);if(55296<=o&&57343>=o){var l=I.charCodeAt(++t);o=65536+((o&1023)<<10)|l&1023;}if(127>=o){if(A>=e)break;g[A++]=o;}else {if(2047>=o){if(A+1>=e)break;g[A++]=192|o>>6;}else {if(65535>=o){if(A+2>=e)break;g[A++]=224|o>>12;}else {if(A+3>=e)break;g[A++]=240|o>>18,g[A++]=128|o>>12&63;}g[A++]=128|o>>6&63;}g[A++]=128|o&63;}}g[A]=0;}},uI={},vI=I=>{for(;I.length;){var g=I.pop();I.pop()(g);}};function oI(I){return this.fromWireType(W[I>>2])}var CI={},x={},BI={},nI,z=(I,g,A)=>{function e(a){if(a=A(a),a.length!==I.length)throw new nI("Mismatched type converter count");for(var c=0;c<I.length;++c)k(I[c],a[c]);}I.forEach(function(a){BI[a]=g;});var t=Array(g.length),o=[],l=0;g.forEach((a,c)=>{x.hasOwnProperty(a)?t[c]=x[a]:(o.push(a),CI.hasOwnProperty(a)||(CI[a]=[]),CI[a].push(()=>{t[c]=x[a],++l,l===o.length&&e(t);}));}),o.length===0&&e(t);},pg,V=I=>{for(var g="";y[I];)g+=pg[y[I++]];return g},b;function gC(I,g,A={}){var e=g.name;if(!I)throw new b(`type "${e}" must have a positive integer typeid pointer`);if(x.hasOwnProperty(I)){if(A.ib)return;throw new b(`Cannot register type '${e}' twice`)}x[I]=g,delete BI[I],CI.hasOwnProperty(I)&&(g=CI[I],delete CI[I],g.forEach(t=>t()));}function k(I,g,A={}){if(!("argPackAdvance"in g))throw new TypeError("registerType registeredInstance requires argPackAdvance");return gC(I,g,A)}var kI=I=>{throw new b(I.ma.za.xa.name+" instance already deleted")},FI=!1,Yg=()=>{},Wg=(I,g,A)=>g===A?I:A.Ca===void 0?null:(I=Wg(I,g,A.Ca),I===null?null:A.ab(I)),yg={},aI=[],LI=()=>{for(;aI.length;){var I=aI.pop();I.ma.Ka=!1,I.delete();}},lI,sI={},CC=(I,g)=>{if(g===void 0)throw new b("ptr should not be undefined");for(;I.Ca;)g=I.Na(g),I=I.Ca;return sI[g]},mI=(I,g)=>{if(!g.za||!g.ya)throw new nI("makeClassHandle requires ptr and ptrType");if(!!g.Da!=!!g.Aa)throw new nI("Both smartPtrType and smartPtr must be specified");return g.count={value:1},dI(Object.create(I,{ma:{value:g,writable:!0}}))},dI=I=>typeof FinalizationRegistry>"u"?(dI=g=>g,I):(FI=new FinalizationRegistry(g=>{g=g.ma,--g.count.value,g.count.value===0&&(g.Aa?g.Da.Fa(g.Aa):g.za.xa.Fa(g.ya));}),dI=g=>{var A=g.ma;return A.Aa&&FI.register(g,{ma:A},g),g},Yg=g=>{FI.unregister(g);},dI(I));function pI(){}var cI=(I,g)=>Object.defineProperty(g,"name",{value:I}),Kg=(I,g,A)=>{if(I[g].Ba===void 0){var e=I[g];I[g]=function(...t){if(!I[g].Ba.hasOwnProperty(t.length))throw new b(`Function '${A}' called with an invalid number of arguments (${t.length}) - expects one of (${I[g].Ba})!`);return I[g].Ba[t.length].apply(this,t)},I[g].Ba=[],I[g].Ba[e.Oa]=e;}},NI=(I,g,A)=>{if(i.hasOwnProperty(I)){if(A===void 0||i[I].Ba!==void 0&&i[I].Ba[A]!==void 0)throw new b(`Cannot register public name '${I}' twice`);if(Kg(i,I,I),i.hasOwnProperty(A))throw new b(`Cannot register multiple overloads of a function with the same number of arguments (${A})!`);i[I].Ba[A]=g;}else i[I]=g,A!==void 0&&(i[I].vb=A);},AC=I=>{if(I===void 0)return "_unknown";I=I.replace(/[^a-zA-Z0-9_]/g,"$");var g=I.charCodeAt(0);return 48<=g&&57>=g?`_${I}`:I};function iC(I,g,A,e,t,o,l,a){this.name=I,this.constructor=g,this.La=A,this.Fa=e,this.Ca=t,this.cb=o,this.Na=l,this.ab=a,this.kb=[];}var fI=(I,g,A)=>{for(;g!==A;){if(!g.Na)throw new b(`Expected null or instance of ${A.name}, got an instance of ${g.name}`);I=g.Na(I),g=g.Ca;}return I};function eC(I,g){if(g===null){if(this.Ta)throw new b(`null is not a valid ${this.name}`);return 0}if(!g.ma)throw new b(`Cannot pass "${zI(g)}" as a ${this.name}`);if(!g.ma.ya)throw new b(`Cannot pass deleted object as a pointer of type ${this.name}`);return fI(g.ma.ya,g.ma.za.xa,this.xa)}function tC(I,g){if(g===null){if(this.Ta)throw new b(`null is not a valid ${this.name}`);if(this.Qa){var A=this.Ua();return I!==null&&I.push(this.Fa,A),A}return 0}if(!g||!g.ma)throw new b(`Cannot pass "${zI(g)}" as a ${this.name}`);if(!g.ma.ya)throw new b(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Pa&&g.ma.za.Pa)throw new b(`Cannot convert argument of type ${g.ma.Da?g.ma.Da.name:g.ma.za.name} to parameter type ${this.name}`);if(A=fI(g.ma.ya,g.ma.za.xa,this.xa),this.Qa){if(g.ma.Aa===void 0)throw new b("Passing raw pointer to smart pointer is illegal");switch(this.pb){case 0:if(g.ma.Da===this)A=g.ma.Aa;else throw new b(`Cannot convert argument of type ${g.ma.Da?g.ma.Da.name:g.ma.za.name} to parameter type ${this.name}`);break;case 1:A=g.ma.Aa;break;case 2:if(g.ma.Da===this)A=g.ma.Aa;else {var e=g.clone();A=this.lb(A,WI(()=>e.delete())),I!==null&&I.push(this.Fa,A);}break;default:throw new b("Unsupporting sharing policy")}}return A}function oC(I,g){if(g===null){if(this.Ta)throw new b(`null is not a valid ${this.name}`);return 0}if(!g.ma)throw new b(`Cannot pass "${zI(g)}" as a ${this.name}`);if(!g.ma.ya)throw new b(`Cannot pass deleted object as a pointer of type ${this.name}`);if(g.ma.za.Pa)throw new b(`Cannot convert argument of type ${g.ma.za.name} to parameter type ${this.name}`);return fI(g.ma.ya,g.ma.za.xa,this.xa)}function GI(I,g,A,e,t,o,l,a,c,s,G){this.name=I,this.xa=g,this.Ta=A,this.Pa=e,this.Qa=t,this.jb=o,this.pb=l,this.Za=a,this.Ua=c,this.lb=s,this.Fa=G,t||g.Ca!==void 0?this.toWireType=tC:(this.toWireType=e?eC:oC,this.Ea=null);}var Sg=(I,g,A)=>{if(!i.hasOwnProperty(I))throw new nI("Replacing nonexistent public symbol");i[I].Ba!==void 0&&A!==void 0?i[I].Ba[A]=g:(i[I]=g,i[I].Oa=A);},H,nC=(I,g,A=[])=>(I.includes("j")?(I=I.replace(/p/g,"i"),g=(0, i["dynCall_"+I])(g,...A)):g=H.get(g)(...A),g),aC=(I,g)=>(...A)=>nC(I,g,A),X=(I,g)=>{I=V(I);var A=I.includes("j")?aC(I,g):H.get(g);if(typeof A!="function")throw new b(`unknown function pointer with signature ${I}: ${g}`);return A},Vg,wg=I=>{I=fg(I);var g=V(I);return D(I),g},YI=(I,g)=>{function A(o){t[o]||x[o]||(BI[o]?BI[o].forEach(A):(e.push(o),t[o]=!0));}var e=[],t={};throw g.forEach(A),new Vg(`${I}: `+e.map(wg).join([", "]))},JI=(I,g)=>{for(var A=[],e=0;e<I;e++)A.push(W[g+4*e>>2]);return A};function lC(I){for(var g=1;g<I.length;++g)if(I[g]!==null&&I[g].Ea===void 0)return !0;return !1}function TI(I,g,A,e,t){var o=g.length;if(2>o)throw new b("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=g[1]!==null&&A!==null,a=lC(g),c=g[0].name!=="void",s=o-2,G=Array(s),u=[],p=[];return cI(I,function(...n){if(n.length!==s)throw new b(`function ${I} called with ${n.length} arguments, expected ${s}`);if(p.length=0,u.length=l?2:1,u[0]=t,l){var h=g[1].toWireType(p,this);u[1]=h;}for(var Z=0;Z<s;++Z)G[Z]=g[Z+2].toWireType(p,n[Z]),u.push(G[Z]);if(n=e(...u),a)vI(p);else for(Z=l?1:2;Z<g.length;Z++){var S=Z===1?h:G[Z-2];g[Z].Ea!==null&&g[Z].Ea(S);}return h=c?g[0].fromWireType(n):void 0,h})}var Xg=I=>{I=I.trim();let g=I.indexOf("(");return g!==-1?I.substr(0,g):I},EI=[],E=[],DI=I=>{9<I&&--E[I+1]===0&&(E[I]=void 0,EI.push(I));},PI=I=>{if(!I)throw new b("Cannot use deleted val. handle = "+I);return E[I]},WI=I=>{switch(I){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let g=EI.pop()||E.length;return E[g]=I,E[g+1]=1,g}},Rg={name:"emscripten::val",fromWireType:I=>{var g=PI(I);return DI(I),g},toWireType:(I,g)=>WI(g),argPackAdvance:8,readValueFromPointer:oI,Ea:null},sC=(I,g,A)=>{switch(g){case 1:return A?function(e){return this.fromWireType(Q[e])}:function(e){return this.fromWireType(y[e])};case 2:return A?function(e){return this.fromWireType(II[e>>1])}:function(e){return this.fromWireType(eI[e>>1])};case 4:return A?function(e){return this.fromWireType(w[e>>2])}:function(e){return this.fromWireType(W[e>>2])};default:throw new TypeError(`invalid integer width (${g}): ${I}`)}},MI=(I,g)=>{var A=x[I];if(A===void 0)throw I=`${g} has unknown type ${wg(I)}`,new b(I);return A},zI=I=>{if(I===null)return "null";var g=typeof I;return g==="object"||g==="array"||g==="function"?I.toString():""+I},dC=(I,g)=>{switch(g){case 4:return function(A){return this.fromWireType(ng[A>>2])};case 8:return function(A){return this.fromWireType(ag[A>>3])};default:throw new TypeError(`invalid float width (${g}): ${I}`)}},cC=(I,g,A)=>{switch(g){case 1:return A?e=>Q[e]:e=>y[e];case 2:return A?e=>II[e>>1]:e=>eI[e>>1];case 4:return A?e=>w[e>>2]:e=>W[e>>2];default:throw new TypeError(`invalid integer width (${g}): ${I}`)}},Hg=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,GC=(I,g)=>{for(var A=I>>1,e=A+g/2;!(A>=e)&&eI[A];)++A;if(A<<=1,32<A-I&&Hg)return Hg.decode(y.subarray(I,A));for(A="",e=0;!(e>=g/2);++e){var t=II[I+2*e>>1];if(t==0)break;A+=String.fromCharCode(t);}return A},rC=(I,g,A)=>{if(A??(A=2147483647),2>A)return 0;A-=2;var e=g;A=A<2*I.length?A/2:I.length;for(var t=0;t<A;++t)II[g>>1]=I.charCodeAt(t),g+=2;return II[g>>1]=0,g-e},hC=I=>2*I.length,ZC=(I,g)=>{for(var A=0,e="";!(A>=g/4);){var t=w[I+4*A>>2];if(t==0)break;++A,65536<=t?(t-=65536,e+=String.fromCharCode(55296|t>>10,56320|t&1023)):e+=String.fromCharCode(t);}return e},bC=(I,g,A)=>{if(A??(A=2147483647),4>A)return 0;var e=g;A=e+A-4;for(var t=0;t<I.length;++t){var o=I.charCodeAt(t);if(55296<=o&&57343>=o){var l=I.charCodeAt(++t);o=65536+((o&1023)<<10)|l&1023;}if(w[g>>2]=o,g+=4,g+4>A)break}return w[g>>2]=0,g-e},uC=I=>{for(var g=0,A=0;A<I.length;++A){var e=I.charCodeAt(A);55296<=e&&57343>=e&&++A,g+=4;}return g},UI=[],BC=I=>{var g=UI.length;return UI.push(I),g},mC=(I,g)=>{for(var A=Array(I),e=0;e<I;++e)A[e]=MI(W[g+4*e>>2],"parameter "+e);return A},pC=Reflect.construct,QI={},vg=()=>{if(!jI){var I={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:T||"./this.program"},g;for(g in QI)QI[g]===void 0?delete I[g]:I[g]=QI[g];var A=[];for(g in I)A.push(`${g}=${I[g]}`);jI=A;}return jI},jI,YC=[null,[],[]],WC=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return I=>crypto.getRandomValues(I);bI("initRandomDevice");},kg=I=>(kg=WC())(I),yI=I=>I%4===0&&(I%100!==0||I%400===0),Fg=[31,29,31,30,31,30,31,31,30,31,30,31],Lg=[31,28,31,30,31,30,31,31,30,31,30,31];function yC(I){var g=Array(Bg(I)+1);return mg(I,g,0,g.length),g}var KC=(I,g,A,e)=>{function t(n,h,Z){for(n=typeof n=="number"?n.toString():n||"";n.length<h;)n=Z[0]+n;return n}function o(n,h){return t(n,h,"0")}function l(n,h){function Z(U){return 0>U?-1:0<U?1:0}var S;return (S=Z(n.getFullYear()-h.getFullYear()))===0&&(S=Z(n.getMonth()-h.getMonth()))===0&&(S=Z(n.getDate()-h.getDate())),S}function a(n){switch(n.getDay()){case 0:return new Date(n.getFullYear()-1,11,29);case 1:return n;case 2:return new Date(n.getFullYear(),0,3);case 3:return new Date(n.getFullYear(),0,2);case 4:return new Date(n.getFullYear(),0,1);case 5:return new Date(n.getFullYear()-1,11,31);case 6:return new Date(n.getFullYear()-1,11,30)}}function c(n){var h=n.Ia;for(n=new Date(new Date(n.Ja+1900,0,1).getTime());0<h;){var Z=n.getMonth(),S=(yI(n.getFullYear())?Fg:Lg)[Z];if(h>S-n.getDate())h-=S-n.getDate()+1,n.setDate(1),11>Z?n.setMonth(Z+1):(n.setMonth(0),n.setFullYear(n.getFullYear()+1));else {n.setDate(n.getDate()+h);break}}return Z=new Date(n.getFullYear()+1,0,4),h=a(new Date(n.getFullYear(),0,4)),Z=a(Z),0>=l(h,n)?0>=l(Z,n)?n.getFullYear()+1:n.getFullYear():n.getFullYear()-1}var s=W[e+40>>2];e={sb:w[e>>2],rb:w[e+4>>2],Ra:w[e+8>>2],Va:w[e+12>>2],Sa:w[e+16>>2],Ja:w[e+20>>2],Ga:w[e+24>>2],Ia:w[e+28>>2],wb:w[e+32>>2],qb:w[e+36>>2],tb:s&&s?O(y,s):""},A=A?O(y,A):"",s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var G in s)A=A.replace(new RegExp(G,"g"),s[G]);var u="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),p="January February March April May June July August September October November December".split(" ");s={"%a":n=>u[n.Ga].substring(0,3),"%A":n=>u[n.Ga],"%b":n=>p[n.Sa].substring(0,3),"%B":n=>p[n.Sa],"%C":n=>o((n.Ja+1900)/100|0,2),"%d":n=>o(n.Va,2),"%e":n=>t(n.Va,2," "),"%g":n=>c(n).toString().substring(2),"%G":c,"%H":n=>o(n.Ra,2),"%I":n=>(n=n.Ra,n==0?n=12:12<n&&(n-=12),o(n,2)),"%j":n=>{for(var h=0,Z=0;Z<=n.Sa-1;h+=(yI(n.Ja+1900)?Fg:Lg)[Z++]);return o(n.Va+h,3)},"%m":n=>o(n.Sa+1,2),"%M":n=>o(n.rb,2),"%n":()=>`
|
|
4
|
+
`,"%p":n=>0<=n.Ra&&12>n.Ra?"AM":"PM","%S":n=>o(n.sb,2),"%t":()=>" ","%u":n=>n.Ga||7,"%U":n=>o(Math.floor((n.Ia+7-n.Ga)/7),2),"%V":n=>{var h=Math.floor((n.Ia+7-(n.Ga+6)%7)/7);if(2>=(n.Ga+371-n.Ia-2)%7&&h++,h)h==53&&(Z=(n.Ga+371-n.Ia)%7,Z==4||Z==3&&yI(n.Ja)||(h=1));else {h=52;var Z=(n.Ga+7-n.Ia-1)%7;(Z==4||Z==5&&yI(n.Ja%400-1))&&h++;}return o(h,2)},"%w":n=>n.Ga,"%W":n=>o(Math.floor((n.Ia+7-(n.Ga+6)%7)/7),2),"%y":n=>(n.Ja+1900).toString().substring(2),"%Y":n=>n.Ja+1900,"%z":n=>{n=n.qb;var h=0<=n;return n=Math.abs(n)/60,(h?"+":"-")+("0000"+(n/60*100+n%60)).slice(-4)},"%Z":n=>n.tb,"%%":()=>"%"},A=A.replace(/%%/g,"\0\0");for(G in s)A.includes(G)&&(A=A.replace(new RegExp(G,"g"),s[G](e)));return A=A.replace(/\0\0/g,"%"),G=yC(A),G.length>g?0:(Q.set(G,I),G.length-1)};nI=i.InternalError=class extends Error{constructor(I){super(I),this.name="InternalError";}};for(var Ng=Array(256),KI=0;256>KI;++KI)Ng[KI]=String.fromCharCode(KI);pg=Ng,b=i.BindingError=class extends Error{constructor(I){super(I),this.name="BindingError";}},Object.assign(pI.prototype,{isAliasOf:function(I){if(!(this instanceof pI&&I instanceof pI))return !1;var g=this.ma.za.xa,A=this.ma.ya;I.ma=I.ma;var e=I.ma.za.xa;for(I=I.ma.ya;g.Ca;)A=g.Na(A),g=g.Ca;for(;e.Ca;)I=e.Na(I),e=e.Ca;return g===e&&A===I},clone:function(){if(this.ma.ya||kI(this),this.ma.Ma)return this.ma.count.value+=1,this;var I=dI,g=Object,A=g.create,e=Object.getPrototypeOf(this),t=this.ma;return I=I(A.call(g,e,{ma:{value:{count:t.count,Ka:t.Ka,Ma:t.Ma,ya:t.ya,za:t.za,Aa:t.Aa,Da:t.Da}}})),I.ma.count.value+=1,I.ma.Ka=!1,I},delete(){if(this.ma.ya||kI(this),this.ma.Ka&&!this.ma.Ma)throw new b("Object already scheduled for deletion");Yg(this);var I=this.ma;--I.count.value,I.count.value===0&&(I.Aa?I.Da.Fa(I.Aa):I.za.xa.Fa(I.ya)),this.ma.Ma||(this.ma.Aa=void 0,this.ma.ya=void 0);},isDeleted:function(){return !this.ma.ya},deleteLater:function(){if(this.ma.ya||kI(this),this.ma.Ka&&!this.ma.Ma)throw new b("Object already scheduled for deletion");return aI.push(this),aI.length===1&&lI&&lI(LI),this.ma.Ka=!0,this}}),i.getInheritedInstanceCount=()=>Object.keys(sI).length,i.getLiveInheritedInstances=()=>{var I=[],g;for(g in sI)sI.hasOwnProperty(g)&&I.push(sI[g]);return I},i.flushPendingDeletes=LI,i.setDelayFunction=I=>{lI=I,aI.length&&lI&&lI(LI);},Object.assign(GI.prototype,{eb(I){return this.Za&&(I=this.Za(I)),I},Xa(I){this.Fa?.(I);},argPackAdvance:8,readValueFromPointer:oI,fromWireType:function(I){function g(){return this.Qa?mI(this.xa.La,{za:this.jb,ya:A,Da:this,Aa:I}):mI(this.xa.La,{za:this,ya:I})}var A=this.eb(I);if(!A)return this.Xa(I),null;var e=CC(this.xa,A);if(e!==void 0)return e.ma.count.value===0?(e.ma.ya=A,e.ma.Aa=I,e.clone()):(e=e.clone(),this.Xa(I),e);if(e=this.xa.cb(A),e=yg[e],!e)return g.call(this);e=this.Pa?e.$a:e.pointerType;var t=Wg(A,this.xa,e.xa);return t===null?g.call(this):this.Qa?mI(e.xa.La,{za:e,ya:t,Da:this,Aa:I}):mI(e.xa.La,{za:e,ya:t})}}),Vg=i.UnboundTypeError=((I,g)=>{var A=cI(g,function(e){this.name=g,this.message=e,e=Error(e).stack,e!==void 0&&(this.stack=this.toString()+`
|
|
5
|
+
`+e.replace(/^Error(:[^\n]*)?\n/,""));});return A.prototype=Object.create(I.prototype),A.prototype.constructor=A,A.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},A})(Error,"UnboundTypeError"),E.push(0,1,void 0,1,null,1,!0,1,!1,1),i.count_emval_handles=()=>E.length/2-5-EI.length;var SC={c:(I,g,A,e)=>{bI(`Assertion failed: ${I?O(y,I):""}, at: `+[g?g?O(y,g):"":"unknown filename",A,e?e?O(y,e):"":"unknown function"]);},m:(I,g,A)=>{var e=new qg(I);throw W[e.ya+16>>2]=0,W[e.ya+4>>2]=g,W[e.ya+8>>2]=A,ug=I,ug},C:function(){return 0},Q:()=>{},N:()=>{},R:function(){return 0},O:()=>{},B:function(){},P:()=>{},v:I=>{var g=uI[I];delete uI[I];var A=g.Ua,e=g.Fa,t=g.Ya,o=t.map(l=>l.hb).concat(t.map(l=>l.nb));z([I],o,l=>{var a={};return t.forEach((c,s)=>{var G=l[s],u=c.fb,p=c.gb,n=l[s+t.length],h=c.mb,Z=c.ob;a[c.bb]={read:S=>G.fromWireType(u(p,S)),write:(S,U)=>{var R=[];h(Z,S,n.toWireType(R,U)),vI(R);}};}),[{name:g.name,fromWireType:c=>{var s={},G;for(G in a)s[G]=a[G].read(c);return e(c),s},toWireType:(c,s)=>{for(var G in a)if(!(G in s))throw new TypeError(`Missing field: "${G}"`);var u=A();for(G in a)a[G].write(u,s[G]);return c!==null&&c.push(e,u),u},argPackAdvance:8,readValueFromPointer:oI,Ea:e}]});},J:()=>{},Y:(I,g,A,e)=>{g=V(g),k(I,{name:g,fromWireType:function(t){return !!t},toWireType:function(t,o){return o?A:e},argPackAdvance:8,readValueFromPointer:function(t){return this.fromWireType(y[t])},Ea:null});},r:(I,g,A,e,t,o,l,a,c,s,G,u,p)=>{G=V(G),o=X(t,o),a&&(a=X(l,a)),s&&(s=X(c,s)),p=X(u,p);var n=AC(G);NI(n,function(){YI(`Cannot construct ${G} due to unbound types`,[e]);}),z([I,g,A],e?[e]:[],h=>{if(h=h[0],e)var Z=h.xa,S=Z.La;else S=pI.prototype;h=cI(G,function(...xI){if(Object.getPrototypeOf(this)!==U)throw new b("Use 'new' to construct "+G);if(R.Ha===void 0)throw new b(G+" has no accessible constructor");var Eg=R.Ha[xI.length];if(Eg===void 0)throw new b(`Tried to invoke ctor of ${G} with invalid number of parameters (${xI.length}) - expected (${Object.keys(R.Ha).toString()}) parameters instead!`);return Eg.apply(this,xI)});var U=Object.create(S,{constructor:{value:h}});h.prototype=U;var R=new iC(G,h,U,p,Z,o,a,s);if(R.Ca){var rI;(rI=R.Ca).Wa??(rI.Wa=[]),R.Ca.Wa.push(R);}return Z=new GI(G,R,!0,!1,!1),rI=new GI(G+"*",R,!1,!1,!1),S=new GI(G+" const*",R,!1,!0,!1),yg[I]={pointerType:rI,$a:S},Sg(n,h),[Z,rI,S]});},q:(I,g,A,e,t,o)=>{var l=JI(g,A);t=X(e,t),z([],[I],a=>{a=a[0];var c=`constructor ${a.name}`;if(a.xa.Ha===void 0&&(a.xa.Ha=[]),a.xa.Ha[g-1]!==void 0)throw new b(`Cannot register multiple constructors with identical number of parameters (${g-1}) for class '${a.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return a.xa.Ha[g-1]=()=>{YI(`Cannot construct ${a.name} due to unbound types`,l);},z([],l,s=>(s.splice(1,0,null),a.xa.Ha[g-1]=TI(c,s,null,t,o),[])),[]});},f:(I,g,A,e,t,o,l,a)=>{var c=JI(A,e);g=V(g),g=Xg(g),o=X(t,o),z([],[I],s=>{function G(){YI(`Cannot call ${u} due to unbound types`,c);}s=s[0];var u=`${s.name}.${g}`;g.startsWith("@@")&&(g=Symbol[g.substring(2)]),a&&s.xa.kb.push(g);var p=s.xa.La,n=p[g];return n===void 0||n.Ba===void 0&&n.className!==s.name&&n.Oa===A-2?(G.Oa=A-2,G.className=s.name,p[g]=G):(Kg(p,g,u),p[g].Ba[A-2]=G),z([],c,h=>(h=TI(u,h,s,o,l),p[g].Ba===void 0?(h.Oa=A-2,p[g]=h):p[g].Ba[A-2]=h,[])),[]});},X:I=>k(I,Rg),x:(I,g,A,e)=>{function t(){}g=V(g),t.values={},k(I,{name:g,constructor:t,fromWireType:function(o){return this.constructor.values[o]},toWireType:(o,l)=>l.value,argPackAdvance:8,readValueFromPointer:sC(g,A,e),Ea:null}),NI(g,t);},k:(I,g,A)=>{var e=MI(I,"enum");g=V(g),I=e.constructor,e=Object.create(e.constructor.prototype,{value:{value:A},constructor:{value:cI(`${e.name}_${g}`,function(){})}}),I.values[A]=e,I[g]=e;},D:(I,g,A)=>{g=V(g),k(I,{name:g,fromWireType:e=>e,toWireType:(e,t)=>t,argPackAdvance:8,readValueFromPointer:dC(g,A),Ea:null});},F:(I,g,A,e,t,o)=>{var l=JI(g,A);I=V(I),I=Xg(I),t=X(e,t),NI(I,function(){YI(`Cannot call ${I} due to unbound types`,l);},g-1),z([],l,a=>(Sg(I,TI(I,[a[0],null].concat(a.slice(1)),null,t,o),g-1),[]));},l:(I,g,A,e,t)=>{if(g=V(g),t===-1&&(t=4294967295),t=a=>a,e===0){var o=32-8*A;t=a=>a<<o>>>o;}var l=g.includes("unsigned")?function(a,c){return c>>>0}:function(a,c){return c};k(I,{name:g,fromWireType:t,toWireType:l,argPackAdvance:8,readValueFromPointer:cC(g,A,e!==0),Ea:null});},g:(I,g,A)=>{function e(o){return new t(Q.buffer,W[o+4>>2],W[o>>2])}var t=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][g];A=V(A),k(I,{name:A,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{ib:!0});},w:I=>{k(I,Rg);},ca:(I,g,A,e,t,o,l,a,c,s,G,u)=>{A=V(A),o=X(t,o),a=X(l,a),s=X(c,s),u=X(G,u),z([I],[g],p=>(p=p[0],[new GI(A,p.xa,!1,!1,!0,p,e,o,a,s,u)]));},E:(I,g)=>{g=V(g);var A=g==="std::string";k(I,{name:g,fromWireType:function(e){var t=W[e>>2],o=e+4;if(A)for(var l=o,a=0;a<=t;++a){var c=o+a;if(a==t||y[c]==0){if(l=l?O(y,l,c-l):"",s===void 0)var s=l;else s+="\0",s+=l;l=c+1;}}else {for(s=Array(t),a=0;a<t;++a)s[a]=String.fromCharCode(y[o+a]);s=s.join("");}return D(e),s},toWireType:function(e,t){t instanceof ArrayBuffer&&(t=new Uint8Array(t));var o=typeof t=="string";if(!(o||t instanceof Uint8Array||t instanceof Uint8ClampedArray||t instanceof Int8Array))throw new b("Cannot pass non-string to std::string");var l=A&&o?Bg(t):t.length,a=OI(4+l+1),c=a+4;if(W[a>>2]=l,A&&o)mg(t,y,c,l+1);else if(o)for(o=0;o<l;++o){var s=t.charCodeAt(o);if(255<s)throw D(c),new b("String has UTF-16 code units that do not fit in 8 bits");y[c+o]=s;}else for(o=0;o<l;++o)y[c+o]=t[o];return e!==null&&e.push(D,a),a},argPackAdvance:8,readValueFromPointer:oI,Ea(e){D(e);}});},u:(I,g,A)=>{if(A=V(A),g===2)var e=GC,t=rC,o=hC,l=a=>eI[a>>1];else g===4&&(e=ZC,t=bC,o=uC,l=a=>W[a>>2]);k(I,{name:A,fromWireType:a=>{for(var c=W[a>>2],s,G=a+4,u=0;u<=c;++u){var p=a+4+u*g;(u==c||l(p)==0)&&(G=e(G,p-G),s===void 0?s=G:(s+="\0",s+=G),G=p+g);}return D(a),s},toWireType:(a,c)=>{if(typeof c!="string")throw new b(`Cannot pass non-string to C++ string type ${A}`);var s=o(c),G=OI(4+s+g);return W[G>>2]=s/g,t(c,G+4,s+g),a!==null&&a.push(D,G),G},argPackAdvance:8,readValueFromPointer:oI,Ea(a){D(a);}});},s:(I,g,A,e,t,o)=>{uI[I]={name:V(g),Ua:X(A,e),Fa:X(t,o),Ya:[]};},j:(I,g,A,e,t,o,l,a,c,s)=>{uI[I].Ya.push({bb:V(g),hb:A,fb:X(e,t),gb:o,nb:l,mb:X(a,c),ob:s});},Z:(I,g)=>{g=V(g),k(I,{ub:!0,name:g,argPackAdvance:0,fromWireType:()=>{},toWireType:()=>{}});},K:()=>{throw 1/0},aa:(I,g,A,e)=>(I=UI[I],g=PI(g),I(null,g,A,e)),G:DI,$:(I,g,A)=>{var e=mC(I,g),t=e.shift();I--;var o=Array(I);return g=`methodCaller<(${e.map(l=>l.name).join(", ")}) => ${t.name}>`,BC(cI(g,(l,a,c,s)=>{for(var G=0,u=0;u<I;++u)o[u]=e[u].readValueFromPointer(s+G),G+=e[u].argPackAdvance;return a=A===1?pC(a,o):a.apply(l,o),l=[],a=t.toWireType(l,a),l.length&&(W[c>>2]=WI(l)),a}))},ba:I=>{9<I&&(E[I+1]+=1);},_:I=>{var g=PI(I);vI(g),DI(I);},o:(I,g)=>(I=MI(I,"_emval_take_value"),I=I.readValueFromPointer(g),WI(I)),W:()=>{bI("");},V:()=>performance.now(),M:I=>{var g=y.length;if(I>>>=0,2147483648<I)return !1;for(var A=1;4>=A;A*=2){var e=g*(1+.2/A);e=Math.min(e,I+100663296);var t=Math;e=Math.max(I,e);I:{t=(t.min.call(t,2147483648,e+(65536-e%65536)%65536)-ZI.buffer.byteLength+65535)/65536;try{ZI.grow(t),lg();var o=1;break I}catch{}o=void 0;}if(o)return !0}return !1},S:(I,g)=>{var A=0;return vg().forEach((e,t)=>{var o=g+A;for(t=W[I+4*t>>2]=o,o=0;o<e.length;++o)Q[t++]=e.charCodeAt(o);Q[t]=0,A+=e.length+1;}),0},T:(I,g)=>{var A=vg();W[I>>2]=A.length;var e=0;return A.forEach(t=>e+=t.length+1),W[g>>2]=e,0},t:()=>52,A:()=>52,I:function(){return 70},z:(I,g,A,e)=>{for(var t=0,o=0;o<A;o++){var l=W[g>>2],a=W[g+4>>2];g+=8;for(var c=0;c<a;c++){var s=y[l+c],G=YC[I];s===0||s===10?((I===1?$:q)(O(G,0)),G.length=0):G.push(s);}t+=a;}return W[e>>2]=t,0},U:(I,g)=>(kg(y.subarray(I,I+g)),0),i:HC,d:RC,e:XC,p:vC,y:LC,b:VC,a:wC,h:FC,n:kC,H:NC,L:(I,g,A,e)=>KC(I,g,A,e)},K=function(){function I(A){return K=A.exports,ZI=K.da,lg(),H=K.ha,dg.unshift(K.ea),j--,i.monitorRunDependencies?.(j),j==0&&(tI&&(A=tI,tI=null,A())),K}var g={a:SC};if(j++,i.monitorRunDependencies?.(j),i.instantiateWasm)try{return i.instantiateWasm(g,I)}catch(A){q(`Module.instantiateWasm callback failed with error: ${A}`),m(A);}return $g(g,function(A){I(A.instance);}).catch(m),{}}(),OI=I=>(OI=K.fa)(I),fg=I=>(fg=K.ga)(I),D=I=>(D=K.ia)(I),F=(I,g)=>(F=K.ja)(I,g),L=I=>(L=K.ka)(I),N=()=>(N=K.la)();i.dynCall_iijj=(I,g,A,e,t,o)=>(i.dynCall_iijj=K.na)(I,g,A,e,t,o),i.dynCall_vijj=(I,g,A,e,t,o)=>(i.dynCall_vijj=K.oa)(I,g,A,e,t,o),i.dynCall_jiii=(I,g,A,e)=>(i.dynCall_jiii=K.pa)(I,g,A,e),i.dynCall_jii=(I,g,A)=>(i.dynCall_jii=K.qa)(I,g,A);var Jg=i.dynCall_viiij=(I,g,A,e,t,o)=>(Jg=i.dynCall_viiij=K.ra)(I,g,A,e,t,o);i.dynCall_jiji=(I,g,A,e,t)=>(i.dynCall_jiji=K.sa)(I,g,A,e,t),i.dynCall_viijii=(I,g,A,e,t,o,l)=>(i.dynCall_viijii=K.ta)(I,g,A,e,t,o,l),i.dynCall_iiiiij=(I,g,A,e,t,o,l)=>(i.dynCall_iiiiij=K.ua)(I,g,A,e,t,o,l),i.dynCall_iiiiijj=(I,g,A,e,t,o,l,a,c)=>(i.dynCall_iiiiijj=K.va)(I,g,A,e,t,o,l,a,c),i.dynCall_iiiiiijj=(I,g,A,e,t,o,l,a,c,s)=>(i.dynCall_iiiiiijj=K.wa)(I,g,A,e,t,o,l,a,c,s);function VC(I,g){var A=N();try{H.get(I)(g);}catch(e){if(L(A),e!==e+0)throw e;F(1,0);}}function wC(I,g,A){var e=N();try{H.get(I)(g,A);}catch(t){if(L(e),t!==t+0)throw t;F(1,0);}}function XC(I,g,A,e){var t=N();try{return H.get(I)(g,A,e)}catch(o){if(L(t),o!==o+0)throw o;F(1,0);}}function RC(I,g,A){var e=N();try{return H.get(I)(g,A)}catch(t){if(L(e),t!==t+0)throw t;F(1,0);}}function HC(I,g){var A=N();try{return H.get(I)(g)}catch(e){if(L(A),e!==e+0)throw e;F(1,0);}}function vC(I,g,A,e,t,o){var l=N();try{return H.get(I)(g,A,e,t,o)}catch(a){if(L(l),a!==a+0)throw a;F(1,0);}}function kC(I,g,A,e,t){var o=N();try{H.get(I)(g,A,e,t);}catch(l){if(L(o),l!==l+0)throw l;F(1,0);}}function FC(I,g,A,e){var t=N();try{H.get(I)(g,A,e);}catch(o){if(L(t),o!==o+0)throw o;F(1,0);}}function LC(I){var g=N();try{H.get(I)();}catch(A){if(L(g),A!==A+0)throw A;F(1,0);}}function NC(I,g,A,e,t,o){var l=N();try{Jg(I,g,A,e,t,o);}catch(a){if(L(l),a!==a+0)throw a;F(1,0);}}var SI;tI=function I(){SI||Tg(),SI||(tI=I);};function Tg(){function I(){if(!SI&&(SI=!0,i.calledRun=!0,!og)){if(HI(dg),d(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;){var g=i.postRun.shift();cg.unshift(g);}HI(cg);}}if(!(0<j)){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)xg();HI(sg),0<j||(i.setStatus?(i.setStatus("Running..."),setTimeout(function(){setTimeout(function(){i.setStatus("");},1),I();},1)):I());}}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);0<i.preInit.length;)i.preInit.pop()();return Tg(),J}})(),Pg=TC;var _=class{constructor(){throw new Error("RendererLoader is a static class and cannot be instantiated.")}static async _tryLoad(C){return await Pg({locateFile:()=>C})}static async _loadWithBackup(){return this._ModulePromise||(this._ModulePromise=this._tryLoad(this._wasmURL).catch(async C=>{let i=`https://unpkg.com/${Ig}@${qI}/dist/dotlottie-player.wasm`;console.warn(`Primary WASM load failed from ${this._wasmURL}. Error: ${C.message}`),console.warn(`Attempting to load WASM from backup URL: ${i}`);try{return await this._tryLoad(i)}catch(d){throw console.error(`Primary WASM URL failed: ${C.message}`),console.error(`Backup WASM URL failed: ${d.message}`),new Error("WASM loading failed from all sources.")}})),this._ModulePromise}static async load(){return this._loadWithBackup()}static setWasmUrl(C){this._wasmURL=C,this._ModulePromise=null;}};B(_,"_ModulePromise",null),B(_,"_wasmURL",`https://cdn.jsdelivr.net/npm/${Ig}@${qI}/dist/dotlottie-player.wasm`);var AI=class{constructor(){B(this,"_eventListeners",new Map);}addEventListener(C,i){let d=this._eventListeners.get(C);d||(d=new Set,this._eventListeners.set(C,d)),d.add(i);}removeEventListener(C,i){let d=this._eventListeners.get(C);d&&(i?(d.delete(i),d.size===0&&this._eventListeners.delete(C)):this._eventListeners.delete(C));}dispatch(C){this._eventListeners.get(C.type)?.forEach(d=>d(C));}removeAllEventListeners(){this._eventListeners.clear();}};function EC(r){return /^#([\da-f]{6}|[\da-f]{8})$/iu.test(r)}function zg(r){if(!EC(r))return 0;let C=r.replace("#","");return C=C.length===6?`${C}ff`:C,parseInt(C,16)}function gg(r){if(r.byteLength<4)return !1;let C=new Uint8Array(r.slice(0,wI.byteLength));for(let i=0;i<wI.length;i+=1)if(wI[i]!==C[i])return !1;return !0}function Mg(r){return Dg.every(C=>Object.prototype.hasOwnProperty.call(r,C))}function Cg(r){if(typeof r=="string")try{return Mg(JSON.parse(r))}catch{return !1}else return Mg(r)}var Ag=(r,C)=>r==="reverse"?C.Mode.Reverse:r==="bounce"?C.Mode.Bounce:r==="reverse-bounce"?C.Mode.ReverseBounce:C.Mode.Forward,ig=(r,C)=>r==="contain"?C.Fit.Contain:r==="cover"?C.Fit.Cover:r==="fill"?C.Fit.Fill:r==="fit-height"?C.Fit.FitHeight:r==="fit-width"?C.Fit.FitWidth:C.Fit.None,eg=(r,C)=>{let i=new C.VectorFloat;return i.push_back(r[0]),i.push_back(r[1]),i},tg=(r,C)=>{let i=new C.VectorFloat;return r.length!==2||(i.push_back(r[0]),i.push_back(r[1])),i},Y=class Y{constructor(C){B(this,"_canvas");B(this,"_context",null);B(this,"_eventManager");B(this,"_animationFrameId",null);B(this,"_frameManager");B(this,"_dotLottieCore",null);B(this,"_renderConfig",{});B(this,"_isFrozen",!1);B(this,"_backgroundColor",null);this._canvas=C.canvas,this._context=this._canvas.getContext("2d"),this._eventManager=new AI,this._frameManager=new VI,this._renderConfig=C.renderConfig??{},_.load().then(i=>{Y._wasmModule=i,this._dotLottieCore=new i.DotLottiePlayer({autoplay:C.autoplay??!1,backgroundColor:0,loopAnimation:C.loop??!1,mode:Ag(C.mode??"forward",i),segment:tg(C.segment??[],i),speed:C.speed??1,useFrameInterpolation:C.useFrameInterpolation??!0,marker:C.marker??"",layout:C.layout?{align:eg(C.layout.align,i),fit:ig(C.layout.fit,i)}:i.createDefaultLayout()}),this._eventManager.dispatch({type:"ready"}),C.data?this._loadFromData(C.data):C.src&&this._loadFromSrc(C.src),C.backgroundColor&&this.setBackgroundColor(C.backgroundColor);}).catch(i=>{this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to load wasm module: ${i}`)});});}_dispatchError(C){console.error(C),this._eventManager.dispatch({type:"loadError",error:new Error(C)});}async _fetchData(C){let i=await fetch(C);if(!i.ok)throw new Error(`Failed to fetch animation data from URL: ${C}. ${i.status}: ${i.statusText}`);let d=await i.arrayBuffer();return gg(d)?d:new TextDecoder().decode(d)}_loadFromData(C){if(this._dotLottieCore===null)return;let i=this._canvas.width,d=this._canvas.height,m=!1;if(typeof C=="string"){if(!Cg(C)){this._dispatchError("Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.");return}m=this._dotLottieCore.loadAnimationData(C,i,d);}else if(C instanceof ArrayBuffer){if(!gg(C)){this._dispatchError("Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.");return}m=this._dotLottieCore.loadDotLottieData(C,i,d);}else if(typeof C=="object"){if(!Cg(C)){this._dispatchError("Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.");return}m=this._dotLottieCore.loadAnimationData(JSON.stringify(C),i,d);}else {this._dispatchError(`Unsupported data type for animation data. Expected:
|
|
12
6
|
- string (Lottie JSON),
|
|
13
7
|
- ArrayBuffer (dotLottie),
|
|
14
8
|
- object (Lottie JSON).
|
|
15
|
-
Received: ${typeof n}`);return}C?(this._eventManager.dispatch({type:"load"}),H&&this.resize(),this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._dotLottieCore.config().autoplay&&(this._dotLottieCore.play(),this._dotLottieCore.isPlaying()?(this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this))):console.error("something went wrong, the animation was suppose to autoplay"))):this._dispatchError("Failed to load animation data");}_loadFromSrc(n){this._fetchData(n).then(a=>this._loadFromData(a)).catch(a=>this._dispatchError(`Failed to load animation data from URL: ${n}. ${a}`));}get activeAnimationId(){return this._dotLottieCore?.activeAnimationId()}get activeThemeId(){return this._dotLottieCore?.activeThemeId()}get layout(){let n=this._dotLottieCore?.config().layout;if(n)return {align:[n.align.get(0),n.align.get(1)],fit:(()=>{switch(n.fit){case L._wasmModule?.Fit.Contain:return "contain";case L._wasmModule?.Fit.Cover:return "cover";case L._wasmModule?.Fit.Fill:return "fill";case L._wasmModule?.Fit.FitHeight:return "fit-height";case L._wasmModule?.Fit.FitWidth:return "fit-width";case L._wasmModule?.Fit.None:return "none";default:return "contain"}})()}}get marker(){return this._dotLottieCore?.config().marker}get manifest(){try{let n=this._dotLottieCore?.manifestString();if(this._dotLottieCore===null||!n)return null;let a=JSON.parse(n);return Object.keys(a).length===0?null:a}catch{return null}}get renderConfig(){return this._renderConfig}get segment(){let n=this._dotLottieCore?.config().segment;if(n&&n.size()===2)return [n.get(0),n.get(1)]}get loop(){return this._dotLottieCore?.config().loopAnimation??!1}get mode(){let n=this._dotLottieCore?.config().mode;return n===L._wasmModule?.Mode.Reverse?"reverse":n===L._wasmModule?.Mode.Bounce?"bounce":n===L._wasmModule?.Mode.ReverseBounce?"reverse-bounce":"forward"}get isFrozen(){return this._isFrozen}get backgroundColor(){return this._backgroundColor??""}get autoplay(){return this._dotLottieCore?.config().autoplay??!1}get useFrameInterpolation(){return this._dotLottieCore?.config().useFrameInterpolation??!1}get speed(){return this._dotLottieCore?.config().speed??0}get isReady(){return this._dotLottieCore!==null}get isLoaded(){return this._dotLottieCore?.isLoaded()??!1}get isPlaying(){return this._dotLottieCore?.isPlaying()??!1}get isPaused(){return this._dotLottieCore?.isPaused()??!1}get isStopped(){return this._dotLottieCore?.isStopped()??!1}get currentFrame(){return this._dotLottieCore?.currentFrame()??0}get loopCount(){return this._dotLottieCore?.loopCount()??0}get totalFrames(){return this._dotLottieCore?.totalFrames()??0}get duration(){return this._dotLottieCore?.duration()??0}get segmentDuration(){return this._dotLottieCore?.segmentDuration()??0}get canvas(){return this._canvas}load(n){this._dotLottieCore===null||L._wasmModule===null||(this._dotLottieCore.setConfig({autoplay:n.autoplay??!1,backgroundColor:0,loopAnimation:n.loop??!1,mode:tt(n.mode??"forward",L._wasmModule),segment:at(n.segment??[],L._wasmModule),speed:n.speed??1,useFrameInterpolation:n.useFrameInterpolation??!0,marker:n.marker??"",layout:n.layout?{align:rt(n.layout.align,L._wasmModule),fit:nt(n.layout.fit,L._wasmModule)}:L._wasmModule.createDefaultLayout()}),n.data?this._loadFromData(n.data):n.src&&this._loadFromSrc(n.src),this.setBackgroundColor(n.backgroundColor??""));}_render(){if(this._dotLottieCore===null||this._context===null)return !1;if(this._dotLottieCore.render()){let a=this._dotLottieCore.buffer(),h=new Uint8ClampedArray(a,0,this._canvas.width*this._canvas.height*4),C=null;return typeof ImageData>"u"?(C=this._context.createImageData(this._canvas.width,this._canvas.height),C.data.set(h)):C=new ImageData(h,this._canvas.width,this._canvas.height),this._context.putImageData(C,0,0),this._eventManager.dispatch({type:"render",currentFrame:this._dotLottieCore.currentFrame()}),!0}return !1}_draw(){if(this._dotLottieCore===null||this._context===null||!this._dotLottieCore.isPlaying())return;let n=this._dotLottieCore.requestFrame();this._dotLottieCore.setFrame(n)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render()&&this._dotLottieCore.isComplete()&&(this._dotLottieCore.config().loopAnimation?this._eventManager.dispatch({type:"loop",loopCount:this._dotLottieCore.loopCount()}):this._eventManager.dispatch({type:"complete"}))),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this));}play(){if(this._dotLottieCore===null)return;let n=this._dotLottieCore.play();this._isFrozen=!1,n&&(this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)));}pause(){if(this._dotLottieCore===null)return;this._dotLottieCore.pause()&&this._eventManager.dispatch({type:"pause"});}stop(){if(this._dotLottieCore===null)return;this._dotLottieCore.stop()&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._eventManager.dispatch({type:"stop"}));}setFrame(n){if(this._dotLottieCore===null||n<0||n>this._dotLottieCore.totalFrames())return;this._dotLottieCore.seek(n)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render());}setSpeed(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),speed:n});}setBackgroundColor(n){this._dotLottieCore!==null&&(H&&this._canvas instanceof HTMLCanvasElement?this._canvas.style.backgroundColor=n:this._dotLottieCore.setConfig({...this._dotLottieCore.config(),backgroundColor:Ht(n)}),this._backgroundColor=n);}setLoop(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),loopAnimation:n});}setUseFrameInterpolation(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),useFrameInterpolation:n});}addEventListener(n,a){this._eventManager.addEventListener(n,a);}removeEventListener(n,a){this._eventManager.removeEventListener(n,a);}destroy(){this._dotLottieCore?.delete(),this._dotLottieCore=null,this._context=null,this._eventManager.dispatch({type:"destroy"}),this._eventManager.removeAllEventListeners(),this._cleanupStateMachineListeners();}freeze(){this._animationFrameId!==null&&(this._frameManager.cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null,this._isFrozen=!0,this._eventManager.dispatch({type:"freeze"}));}unfreeze(){this._animationFrameId===null&&(this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)),this._isFrozen=!1,this._eventManager.dispatch({type:"unfreeze"}));}resize(){if(H&&this._canvas instanceof HTMLCanvasElement){let a=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,{height:h,width:C}=this._canvas.getBoundingClientRect();this._canvas.width=C*a,this._canvas.height=h*a;}this._dotLottieCore?.resize(this._canvas.width,this._canvas.height)&&this._render();}setSegment(n,a){this._dotLottieCore===null||L._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),segment:at([n,a],L._wasmModule)});}setMode(n){this._dotLottieCore===null||L._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),mode:tt(n,L._wasmModule)});}setRenderConfig(n){this._renderConfig=n;}loadAnimation(n){if(this._dotLottieCore===null||this._dotLottieCore.activeAnimationId()===n)return;this._dotLottieCore.loadAnimation(n,this._canvas.width,this._canvas.height)?(this._eventManager.dispatch({type:"load"}),this.resize()):this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to animation :${n}`)});}setMarker(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),marker:n});}markers(){let n=this._dotLottieCore?.markers();if(n){let a=[];for(let h=0;h<n.size();h+=1){let C=n.get(h);a.push({name:C.name,time:C.time,duration:C.duration});}return a}return []}loadTheme(n){if(this._dotLottieCore===null)return !1;let a=this._dotLottieCore.loadTheme(n);return this._render(),a}loadThemeData(n){if(this._dotLottieCore===null)return !1;let a=this._dotLottieCore.loadThemeData(n);return this._render(),a}setLayout(n){this._dotLottieCore===null||L._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),layout:{align:rt(n.align,L._wasmModule),fit:nt(n.fit,L._wasmModule)}});}setViewport(n,a,h,C){return this._dotLottieCore===null?!1:this._dotLottieCore.setViewport(n,a,h,C)}static setWasmUrl(n){X.setWasmUrl(n);}loadStateMachine(n){return this._dotLottieCore?.loadStateMachine(n)??!1}startStateMachine(){let n=this._dotLottieCore?.startStateMachine()??!1;return n&&this._setupStateMachineListeners(),n}stopStateMachine(){let n=this._dotLottieCore?.stopStateMachine()??!1;return n&&this._cleanupStateMachineListeners(),n}_getPointerPosition(n){let a=this._canvas.getBoundingClientRect(),h=this._canvas.width/a.width,C=this._canvas.height/a.height,j=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,N=(n.clientX-a.left)*h/j,z=(n.clientY-a.top)*C/j;return {x:N,y:z}}_onPointerUp(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerUp: ${a} ${h}`);}_onPointerDown(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerDown: ${a} ${h}`);}_onPointerMove(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerMove: ${a} ${h}`);}_onPointerEnter(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerEnter: ${a} ${h}`);}_onPointerLeave(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerExit: ${a} ${h}`);}_onComplete(){this.postStateMachineEvent("OnComplete");}postStateMachineEvent(n){return this._dotLottieCore?.postEventPayload(n)??!1}getStateMachineListeners(){if(!this._dotLottieCore)return [];let n=this._dotLottieCore.stateMachineFrameworkSetup(),a=[];for(let h=0;h<n.size();h+=1)a.push(n.get(h));return a}_setupStateMachineListeners(){if(H&&this._canvas instanceof HTMLCanvasElement&&this._dotLottieCore!==null&&this.isLoaded){let n=this.getStateMachineListeners();n.includes("PointerUp")&&this._canvas.addEventListener("pointerup",this._onPointerUp.bind(this)),n.includes("PointerDown")&&this._canvas.addEventListener("pointerdown",this._onPointerDown.bind(this)),n.includes("PointerMove")&&this._canvas.addEventListener("pointermove",this._onPointerMove.bind(this)),n.includes("PointerEnter")&&this._canvas.addEventListener("pointerenter",this._onPointerEnter.bind(this)),n.includes("PointerExit")&&this._canvas.addEventListener("pointerleave",this._onPointerLeave.bind(this)),n.includes("Complete")&&this.addEventListener("complete",this._onComplete.bind(this));}}_cleanupStateMachineListeners(){H&&this._canvas instanceof HTMLCanvasElement&&(this._canvas.removeEventListener("pointerup",this._onPointerUp.bind(this)),this._canvas.removeEventListener("pointerdown",this._onPointerDown.bind(this)),this._canvas.removeEventListener("pointermove",this._onPointerMove.bind(this)),this._canvas.removeEventListener("pointerenter",this._onPointerEnter.bind(this)),this._canvas.removeEventListener("pointerleave",this._onPointerLeave.bind(this)),this.removeEventListener("complete",this._onComplete.bind(this)));}loadStateMachineData(n){return this._dotLottieCore?.loadStateMachineData(n)??!1}animationSize(){let n=this._dotLottieCore?.animationSize().get(0)??0,a=this._dotLottieCore?.animationSize().get(1)??0;return {width:n,height:a}}setStateMachineBooleanContext(n,a){return this._dotLottieCore?.setStateMachineBooleanContext(n,a)??!1}setStateMachineNumericContext(n,a){return this._dotLottieCore?.setStateMachineNumericContext(n,a)??!1}setStateMachineStringContext(n,a){return this._dotLottieCore?.setStateMachineStringContext(n,a)??!1}};w(L,"_wasmModule",null);var Nt=L;var Vt='/**\n * This is a worker script for dotlottie.\n * Do not modify this file directly.\n * As it\'s generated by the build process.\n */\n \nvar $n=Object.defineProperty;var kn=(s,n,r)=>n in s?$n(s,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[n]=r;var I=(s,n,r)=>kn(s,typeof n!="symbol"?n+"":n,r);var Xe=class{requestAnimationFrame(n){return requestAnimationFrame(n)}cancelAnimationFrame(n){cancelAnimationFrame(n);}},Ze=class{constructor(){I(this,"_lastHandleId",0);I(this,"_lastImmediate",null);}requestAnimationFrame(n){return this._lastHandleId>=Number.MAX_SAFE_INTEGER&&(this._lastHandleId=0),this._lastHandleId+=1,this._lastImmediate=setImmediate(()=>{n(Date.now());}),this._lastHandleId}cancelAnimationFrame(n){this._lastImmediate&&clearImmediate(this._lastImmediate);}},Ie=class{constructor(){I(this,"_strategy");this._strategy=typeof requestAnimationFrame=="function"?new Xe:new Ze;}requestAnimationFrame(n){return this._strategy.requestAnimationFrame(n)}cancelAnimationFrame(n){this._strategy.cancelAnimationFrame(n);}};var te=typeof window<"u"&&typeof window.document<"u";var xe=new Uint8Array([80,75,3,4]),jt=["v","ip","op","layers","fr","w","h"];var fe={name:"@lottiefiles/dotlottie-web",version:"0.29.2",type:"module",description:"Lottie and DotLottie player for the web",repository:{type:"git",url:"git+https://github.com/LottieFiles/dotlottie-web.git",directory:"packages/web"},homepage:"https://github.com/LottieFiles/dotlottie-web#readme",bugs:"https://github.com/LottieFiles/dotlottie-web/issues",author:"LottieFiles",contributors:["Abdelrahman Ashraf <a.theashraf@gmail.com>"],license:"MIT",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",files:["dist"],keywords:["dotlottie","lottie","player","animation","web","canvas","javascript","thorvg"],scripts:{build:"tsup",dev:"tsup --watch",lint:"eslint --fix .","stats:eslint":"cross-env TIMING=1 eslint .","stats:ts":"tsc -p tsconfig.build.json --extendedDiagnostics",test:"vitest run --browser.headless","test:coverage":"vitest run --browser.headless --coverage","test:watch":"vitest","type-check":"tsc --noEmit"},devDependencies:{"@types/node":"^20.14.11","@vitest/browser":"^2.0.3","@vitest/coverage-istanbul":"^2.0.3","cross-env":"7.0.3",playwright:"^1.45.2",tsup:"8.1.0",typescript:"5.0.4",vitest:"^2.0.3"},publishConfig:{access:"public"}};var On=(()=>{var s=typeof document<"u"?document.currentScript?.src:void 0;return function(n={}){var r=n,c,_,$=new Promise((e,t)=>{c=e,_=t;}),U=Object.assign({},r),V="./this.program",j="";typeof document<"u"&&document.currentScript&&(j=document.currentScript.src),s&&(j=s),j.startsWith("blob:")?j="":j=j.substr(0,j.replace(/[?#].*/,"").lastIndexOf("/")+1);var Nt=r.print||console.log.bind(console),Z=r.printErr||console.error.bind(console);Object.assign(r,U),U=null,r.thisProgram&&(V=r.thisProgram);var ne;r.wasmBinary&&(ne=r.wasmBinary);var ve,at=!1,Y,b,Q,re,P,L,ot,it;function st(){var e=ve.buffer;r.HEAP8=Y=new Int8Array(e),r.HEAP16=Q=new Int16Array(e),r.HEAPU8=b=new Uint8Array(e),r.HEAPU16=re=new Uint16Array(e),r.HEAP32=P=new Int32Array(e),r.HEAPU32=L=new Uint32Array(e),r.HEAPF32=ot=new Float32Array(e),r.HEAPF64=it=new Float64Array(e);}var lt=[],dt=[],ct=[];function Vt(){var e=r.preRun.shift();lt.unshift(e);}var J=0,ae=null;function ye(e){throw r.onAbort?.(e),e="Aborted("+e+")",Z(e),at=!0,e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info."),_(e),e}var ut=e=>e.startsWith("data:application/octet-stream;base64,"),q;if(q="DotLottiePlayer.wasm",!ut(q)){var ht=q;q=r.locateFile?r.locateFile(ht,j):j+ht;}function pt(e){if(e==q&&ne)return new Uint8Array(ne);throw "both async and sync fetching of the wasm failed"}function Yt(e){return ne||typeof fetch!="function"?Promise.resolve().then(()=>pt(e)):fetch(e,{credentials:"same-origin"}).then(t=>{if(!t.ok)throw `failed to load wasm binary file at \'${e}\'`;return t.arrayBuffer()}).catch(()=>pt(e))}function ft(e,t,a){return Yt(e).then(o=>WebAssembly.instantiate(o,t)).then(a,o=>{Z(`failed to asynchronously prepare wasm: ${o}`),ye(o);})}function Jt(e,t){var a=q;return ne||typeof WebAssembly.instantiateStreaming!="function"||ut(a)||typeof fetch!="function"?ft(a,e,t):fetch(a,{credentials:"same-origin"}).then(o=>WebAssembly.instantiateStreaming(o,e).then(t,function(i){return Z(`wasm streaming compile failed: ${i}`),Z("falling back to ArrayBuffer instantiation"),ft(a,e,t)}))}var Te=e=>{for(;0<e.length;)e.shift()(r);},mt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,G=(e,t,a)=>{var o=t+a;for(a=t;e[a]&&!(a>=o);)++a;if(16<a-t&&e.buffer&&mt)return mt.decode(e.subarray(t,a));for(o="";t<a;){var i=e[t++];if(i&128){var l=e[t++]&63;if((i&224)==192)o+=String.fromCharCode((i&31)<<6|l);else {var h=e[t++]&63;i=(i&240)==224?(i&15)<<12|l<<6|h:(i&7)<<18|l<<12|h<<6|e[t++]&63,65536>i?o+=String.fromCharCode(i):(i-=65536,o+=String.fromCharCode(55296|i>>10,56320|i&1023));}}else o+=String.fromCharCode(i);}return o};class Gt{constructor(t){this.ya=t-24;}}var vt=0,yt=e=>{for(var t=0,a=0;a<e.length;++a){var o=e.charCodeAt(a);127>=o?t++:2047>=o?t+=2:55296<=o&&57343>=o?(t+=4,++a):t+=3;}return t},gt=(e,t,a,o)=>{if(0<o){o=a+o-1;for(var i=0;i<e.length;++i){var l=e.charCodeAt(i);if(55296<=l&&57343>=l){var h=e.charCodeAt(++i);l=65536+((l&1023)<<10)|h&1023;}if(127>=l){if(a>=o)break;t[a++]=l;}else {if(2047>=l){if(a+1>=o)break;t[a++]=192|l>>6;}else {if(65535>=l){if(a+2>=o)break;t[a++]=224|l>>12;}else {if(a+3>=o)break;t[a++]=240|l>>18,t[a++]=128|l>>12&63;}t[a++]=128|l>>6&63;}t[a++]=128|l&63;}}t[a]=0;}},ge={},Se=e=>{for(;e.length;){var t=e.pop();e.pop()(t);}};function oe(e){return this.fromWireType(L[e>>2])}var ee={},K={},we={},ie,H=(e,t,a)=>{function o(u){if(u=a(u),u.length!==e.length)throw new ie("Mismatched type converter count");for(var f=0;f<e.length;++f)k(e[f],u[f]);}e.forEach(function(u){we[u]=t;});var i=Array(t.length),l=[],h=0;t.forEach((u,f)=>{K.hasOwnProperty(u)?i[f]=K[u]:(l.push(u),ee.hasOwnProperty(u)||(ee[u]=[]),ee[u].push(()=>{i[f]=K[u],++h,h===l.length&&o(i);}));}),l.length===0&&o(i);},wt,A=e=>{for(var t="";b[e];)t+=wt[b[e++]];return t},g;function Xt(e,t,a={}){var o=t.name;if(!e)throw new g(`type "${o}" must have a positive integer typeid pointer`);if(K.hasOwnProperty(e)){if(a.ib)return;throw new g(`Cannot register type \'${o}\' twice`)}K[e]=t,delete we[e],ee.hasOwnProperty(e)&&(t=ee[e],delete ee[e],t.forEach(i=>i()));}function k(e,t,a={}){if(!("argPackAdvance"in t))throw new TypeError("registerType registeredInstance requires argPackAdvance");return Xt(e,t,a)}var Re=e=>{throw new g(e.ma.za.xa.name+" instance already deleted")},$e=!1,_t=()=>{},Et=(e,t,a)=>t===a?e:a.Ca===void 0?null:(e=Et(e,t,a.Ca),e===null?null:a.ab(e)),Ct={},se=[],ke=()=>{for(;se.length;){var e=se.pop();e.ma.Ka=!1,e.delete();}},le,de={},Zt=(e,t)=>{if(t===void 0)throw new g("ptr should not be undefined");for(;e.Ca;)t=e.Na(t),e=e.Ca;return de[t]},_e=(e,t)=>{if(!t.za||!t.ya)throw new ie("makeClassHandle requires ptr and ptrType");if(!!t.Da!=!!t.Aa)throw new ie("Both smartPtrType and smartPtr must be specified");return t.count={value:1},ce(Object.create(e,{ma:{value:t,writable:!0}}))},ce=e=>typeof FinalizationRegistry>"u"?(ce=t=>t,e):($e=new FinalizationRegistry(t=>{t=t.ma,--t.count.value,t.count.value===0&&(t.Aa?t.Da.Fa(t.Aa):t.za.xa.Fa(t.ya));}),ce=t=>{var a=t.ma;return a.Aa&&$e.register(t,{ma:a},t),t},_t=t=>{$e.unregister(t);},ce(e));function Ee(){}var ue=(e,t)=>Object.defineProperty(t,"name",{value:e}),Mt=(e,t,a)=>{if(e[t].Ba===void 0){var o=e[t];e[t]=function(...i){if(!e[t].Ba.hasOwnProperty(i.length))throw new g(`Function \'${a}\' called with an invalid number of arguments (${i.length}) - expects one of (${e[t].Ba})!`);return e[t].Ba[i.length].apply(this,i)},e[t].Ba=[],e[t].Ba[o.Oa]=o;}},De=(e,t,a)=>{if(r.hasOwnProperty(e)){if(a===void 0||r[e].Ba!==void 0&&r[e].Ba[a]!==void 0)throw new g(`Cannot register public name \'${e}\' twice`);if(Mt(r,e,e),r.hasOwnProperty(a))throw new g(`Cannot register multiple overloads of a function with the same number of arguments (${a})!`);r[e].Ba[a]=t;}else r[e]=t,a!==void 0&&(r[e].vb=a);},Qt=e=>{if(e===void 0)return "_unknown";e=e.replace(/[^a-zA-Z0-9_]/g,"$");var t=e.charCodeAt(0);return 48<=t&&57>=t?`_${e}`:e};function qt(e,t,a,o,i,l,h,u){this.name=e,this.constructor=t,this.La=a,this.Fa=o,this.Ca=i,this.cb=l,this.Na=h,this.ab=u,this.kb=[];}var Oe=(e,t,a)=>{for(;t!==a;){if(!t.Na)throw new g(`Expected null or instance of ${a.name}, got an instance of ${t.name}`);e=t.Na(e),t=t.Ca;}return e};function en(e,t){if(t===null){if(this.Ta)throw new g(`null is not a valid ${this.name}`);return 0}if(!t.ma)throw new g(`Cannot pass "${Ne(t)}" as a ${this.name}`);if(!t.ma.ya)throw new g(`Cannot pass deleted object as a pointer of type ${this.name}`);return Oe(t.ma.ya,t.ma.za.xa,this.xa)}function tn(e,t){if(t===null){if(this.Ta)throw new g(`null is not a valid ${this.name}`);if(this.Qa){var a=this.Ua();return e!==null&&e.push(this.Fa,a),a}return 0}if(!t||!t.ma)throw new g(`Cannot pass "${Ne(t)}" as a ${this.name}`);if(!t.ma.ya)throw new g(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Pa&&t.ma.za.Pa)throw new g(`Cannot convert argument of type ${t.ma.Da?t.ma.Da.name:t.ma.za.name} to parameter type ${this.name}`);if(a=Oe(t.ma.ya,t.ma.za.xa,this.xa),this.Qa){if(t.ma.Aa===void 0)throw new g("Passing raw pointer to smart pointer is illegal");switch(this.pb){case 0:if(t.ma.Da===this)a=t.ma.Aa;else throw new g(`Cannot convert argument of type ${t.ma.Da?t.ma.Da.name:t.ma.za.name} to parameter type ${this.name}`);break;case 1:a=t.ma.Aa;break;case 2:if(t.ma.Da===this)a=t.ma.Aa;else {var o=t.clone();a=this.lb(a,Me(()=>o.delete())),e!==null&&e.push(this.Fa,a);}break;default:throw new g("Unsupporting sharing policy")}}return a}function nn(e,t){if(t===null){if(this.Ta)throw new g(`null is not a valid ${this.name}`);return 0}if(!t.ma)throw new g(`Cannot pass "${Ne(t)}" as a ${this.name}`);if(!t.ma.ya)throw new g(`Cannot pass deleted object as a pointer of type ${this.name}`);if(t.ma.za.Pa)throw new g(`Cannot convert argument of type ${t.ma.za.name} to parameter type ${this.name}`);return Oe(t.ma.ya,t.ma.za.xa,this.xa)}function he(e,t,a,o,i,l,h,u,f,p,m){this.name=e,this.xa=t,this.Ta=a,this.Pa=o,this.Qa=i,this.jb=l,this.pb=h,this.Za=u,this.Ua=f,this.lb=p,this.Fa=m,i||t.Ca!==void 0?this.toWireType=tn:(this.toWireType=o?en:nn,this.Ea=null);}var Lt=(e,t,a)=>{if(!r.hasOwnProperty(e))throw new ie("Replacing nonexistent public symbol");r[e].Ba!==void 0&&a!==void 0?r[e].Ba[a]=t:(r[e]=t,r[e].Oa=a);},R,rn=(e,t,a=[])=>(e.includes("j")?(e=e.replace(/p/g,"i"),t=(0, r["dynCall_"+e])(t,...a)):t=R.get(t)(...a),t),an=(e,t)=>(...a)=>rn(e,t,a),T=(e,t)=>{e=A(e);var a=e.includes("j")?an(e,t):R.get(t);if(typeof a!="function")throw new g(`unknown function pointer with signature ${e}: ${t}`);return a},bt,Ft=e=>{e=kt(e);var t=A(e);return W(e),t},Ce=(e,t)=>{function a(l){i[l]||K[l]||(we[l]?we[l].forEach(a):(o.push(l),i[l]=!0));}var o=[],i={};throw t.forEach(a),new bt(`${e}: `+o.map(Ft).join([", "]))},ze=(e,t)=>{for(var a=[],o=0;o<e;o++)a.push(L[t+4*o>>2]);return a};function on(e){for(var t=1;t<e.length;++t)if(e[t]!==null&&e[t].Ea===void 0)return !0;return !1}function je(e,t,a,o,i){var l=t.length;if(2>l)throw new g("argTypes array size mismatch! Must at least get return value and \'this\' types!");var h=t[1]!==null&&a!==null,u=on(t),f=t[0].name!=="void",p=l-2,m=Array(p),w=[],C=[];return ue(e,function(...d){if(d.length!==p)throw new g(`function ${e} called with ${d.length} arguments, expected ${p}`);if(C.length=0,w.length=h?2:1,w[0]=i,h){var v=t[1].toWireType(C,this);w[1]=v;}for(var y=0;y<p;++y)m[y]=t[y+2].toWireType(C,d[y]),w.push(m[y]);if(d=o(...w),u)Se(C);else for(y=h?1:2;y<t.length;y++){var x=y===1?v:m[y-2];t[y].Ea!==null&&t[y].Ea(x);}return v=f?t[0].fromWireType(d):void 0,v})}var It=e=>{e=e.trim();let t=e.indexOf("(");return t!==-1?e.substr(0,t):e},Be=[],B=[],We=e=>{9<e&&--B[e+1]===0&&(B[e]=void 0,Be.push(e));},Ue=e=>{if(!e)throw new g("Cannot use deleted val. handle = "+e);return B[e]},Me=e=>{switch(e){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let t=Be.pop()||B.length;return B[t]=e,B[t+1]=1,t}},xt={name:"emscripten::val",fromWireType:e=>{var t=Ue(e);return We(e),t},toWireType:(e,t)=>Me(t),argPackAdvance:8,readValueFromPointer:oe,Ea:null},sn=(e,t,a)=>{switch(t){case 1:return a?function(o){return this.fromWireType(Y[o])}:function(o){return this.fromWireType(b[o])};case 2:return a?function(o){return this.fromWireType(Q[o>>1])}:function(o){return this.fromWireType(re[o>>1])};case 4:return a?function(o){return this.fromWireType(P[o>>2])}:function(o){return this.fromWireType(L[o>>2])};default:throw new TypeError(`invalid integer width (${t}): ${e}`)}},He=(e,t)=>{var a=K[e];if(a===void 0)throw e=`${t} has unknown type ${Ft(e)}`,new g(e);return a},Ne=e=>{if(e===null)return "null";var t=typeof e;return t==="object"||t==="array"||t==="function"?e.toString():""+e},ln=(e,t)=>{switch(t){case 4:return function(a){return this.fromWireType(ot[a>>2])};case 8:return function(a){return this.fromWireType(it[a>>3])};default:throw new TypeError(`invalid float width (${t}): ${e}`)}},dn=(e,t,a)=>{switch(t){case 1:return a?o=>Y[o]:o=>b[o];case 2:return a?o=>Q[o>>1]:o=>re[o>>1];case 4:return a?o=>P[o>>2]:o=>L[o>>2];default:throw new TypeError(`invalid integer width (${t}): ${e}`)}},At=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,cn=(e,t)=>{for(var a=e>>1,o=a+t/2;!(a>=o)&&re[a];)++a;if(a<<=1,32<a-e&&At)return At.decode(b.subarray(e,a));for(a="",o=0;!(o>=t/2);++o){var i=Q[e+2*o>>1];if(i==0)break;a+=String.fromCharCode(i);}return a},un=(e,t,a)=>{if(a??(a=2147483647),2>a)return 0;a-=2;var o=t;a=a<2*e.length?a/2:e.length;for(var i=0;i<a;++i)Q[t>>1]=e.charCodeAt(i),t+=2;return Q[t>>1]=0,t-o},hn=e=>2*e.length,pn=(e,t)=>{for(var a=0,o="";!(a>=t/4);){var i=P[e+4*a>>2];if(i==0)break;++a,65536<=i?(i-=65536,o+=String.fromCharCode(55296|i>>10,56320|i&1023)):o+=String.fromCharCode(i);}return o},fn=(e,t,a)=>{if(a??(a=2147483647),4>a)return 0;var o=t;a=o+a-4;for(var i=0;i<e.length;++i){var l=e.charCodeAt(i);if(55296<=l&&57343>=l){var h=e.charCodeAt(++i);l=65536+((l&1023)<<10)|h&1023;}if(P[t>>2]=l,t+=4,t+4>a)break}return P[t>>2]=0,t-o},mn=e=>{for(var t=0,a=0;a<e.length;++a){var o=e.charCodeAt(a);55296<=o&&57343>=o&&++a,t+=4;}return t},Ve=[],vn=e=>{var t=Ve.length;return Ve.push(e),t},yn=(e,t)=>{for(var a=Array(e),o=0;o<e;++o)a[o]=He(L[t+4*o>>2],"parameter "+o);return a},gn=Reflect.construct,Ye={},Pt=()=>{if(!Je){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:V||"./this.program"},t;for(t in Ye)Ye[t]===void 0?delete e[t]:e[t]=Ye[t];var a=[];for(t in e)a.push(`${t}=${e[t]}`);Je=a;}return Je},Je,wn=[null,[],[]],_n=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return e=>crypto.getRandomValues(e);ye("initRandomDevice");},Tt=e=>(Tt=_n())(e),Le=e=>e%4===0&&(e%100!==0||e%400===0),St=[31,29,31,30,31,30,31,31,30,31,30,31],Rt=[31,28,31,30,31,30,31,31,30,31,30,31];function En(e){var t=Array(yt(e)+1);return gt(e,t,0,t.length),t}var Cn=(e,t,a,o)=>{function i(d,v,y){for(d=typeof d=="number"?d.toString():d||"";d.length<v;)d=y[0]+d;return d}function l(d,v){return i(d,v,"0")}function h(d,v){function y(N){return 0>N?-1:0<N?1:0}var x;return (x=y(d.getFullYear()-v.getFullYear()))===0&&(x=y(d.getMonth()-v.getMonth()))===0&&(x=y(d.getDate()-v.getDate())),x}function u(d){switch(d.getDay()){case 0:return new Date(d.getFullYear()-1,11,29);case 1:return d;case 2:return new Date(d.getFullYear(),0,3);case 3:return new Date(d.getFullYear(),0,2);case 4:return new Date(d.getFullYear(),0,1);case 5:return new Date(d.getFullYear()-1,11,31);case 6:return new Date(d.getFullYear()-1,11,30)}}function f(d){var v=d.Ia;for(d=new Date(new Date(d.Ja+1900,0,1).getTime());0<v;){var y=d.getMonth(),x=(Le(d.getFullYear())?St:Rt)[y];if(v>x-d.getDate())v-=x-d.getDate()+1,d.setDate(1),11>y?d.setMonth(y+1):(d.setMonth(0),d.setFullYear(d.getFullYear()+1));else {d.setDate(d.getDate()+v);break}}return y=new Date(d.getFullYear()+1,0,4),v=u(new Date(d.getFullYear(),0,4)),y=u(y),0>=h(v,d)?0>=h(y,d)?d.getFullYear()+1:d.getFullYear():d.getFullYear()-1}var p=L[o+40>>2];o={sb:P[o>>2],rb:P[o+4>>2],Ra:P[o+8>>2],Va:P[o+12>>2],Sa:P[o+16>>2],Ja:P[o+20>>2],Ga:P[o+24>>2],Ia:P[o+28>>2],wb:P[o+32>>2],qb:P[o+36>>2],tb:p&&p?G(b,p):""},a=a?G(b,a):"",p={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var m in p)a=a.replace(new RegExp(m,"g"),p[m]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),C="January February March April May June July August September October November December".split(" ");p={"%a":d=>w[d.Ga].substring(0,3),"%A":d=>w[d.Ga],"%b":d=>C[d.Sa].substring(0,3),"%B":d=>C[d.Sa],"%C":d=>l((d.Ja+1900)/100|0,2),"%d":d=>l(d.Va,2),"%e":d=>i(d.Va,2," "),"%g":d=>f(d).toString().substring(2),"%G":f,"%H":d=>l(d.Ra,2),"%I":d=>(d=d.Ra,d==0?d=12:12<d&&(d-=12),l(d,2)),"%j":d=>{for(var v=0,y=0;y<=d.Sa-1;v+=(Le(d.Ja+1900)?St:Rt)[y++]);return l(d.Va+v,3)},"%m":d=>l(d.Sa+1,2),"%M":d=>l(d.rb,2),"%n":()=>`\n`,"%p":d=>0<=d.Ra&&12>d.Ra?"AM":"PM","%S":d=>l(d.sb,2),"%t":()=>" ","%u":d=>d.Ga||7,"%U":d=>l(Math.floor((d.Ia+7-d.Ga)/7),2),"%V":d=>{var v=Math.floor((d.Ia+7-(d.Ga+6)%7)/7);if(2>=(d.Ga+371-d.Ia-2)%7&&v++,v)v==53&&(y=(d.Ga+371-d.Ia)%7,y==4||y==3&&Le(d.Ja)||(v=1));else {v=52;var y=(d.Ga+7-d.Ia-1)%7;(y==4||y==5&&Le(d.Ja%400-1))&&v++;}return l(v,2)},"%w":d=>d.Ga,"%W":d=>l(Math.floor((d.Ia+7-(d.Ga+6)%7)/7),2),"%y":d=>(d.Ja+1900).toString().substring(2),"%Y":d=>d.Ja+1900,"%z":d=>{d=d.qb;var v=0<=d;return d=Math.abs(d)/60,(v?"+":"-")+("0000"+(d/60*100+d%60)).slice(-4)},"%Z":d=>d.tb,"%%":()=>"%"},a=a.replace(/%%/g,"\\0\\0");for(m in p)a.includes(m)&&(a=a.replace(new RegExp(m,"g"),p[m](o)));return a=a.replace(/\\0\\0/g,"%"),m=En(a),m.length>t?0:(Y.set(m,e),m.length-1)};ie=r.InternalError=class extends Error{constructor(e){super(e),this.name="InternalError";}};for(var $t=Array(256),be=0;256>be;++be)$t[be]=String.fromCharCode(be);wt=$t,g=r.BindingError=class extends Error{constructor(e){super(e),this.name="BindingError";}},Object.assign(Ee.prototype,{isAliasOf:function(e){if(!(this instanceof Ee&&e instanceof Ee))return !1;var t=this.ma.za.xa,a=this.ma.ya;e.ma=e.ma;var o=e.ma.za.xa;for(e=e.ma.ya;t.Ca;)a=t.Na(a),t=t.Ca;for(;o.Ca;)e=o.Na(e),o=o.Ca;return t===o&&a===e},clone:function(){if(this.ma.ya||Re(this),this.ma.Ma)return this.ma.count.value+=1,this;var e=ce,t=Object,a=t.create,o=Object.getPrototypeOf(this),i=this.ma;return e=e(a.call(t,o,{ma:{value:{count:i.count,Ka:i.Ka,Ma:i.Ma,ya:i.ya,za:i.za,Aa:i.Aa,Da:i.Da}}})),e.ma.count.value+=1,e.ma.Ka=!1,e},delete(){if(this.ma.ya||Re(this),this.ma.Ka&&!this.ma.Ma)throw new g("Object already scheduled for deletion");_t(this);var e=this.ma;--e.count.value,e.count.value===0&&(e.Aa?e.Da.Fa(e.Aa):e.za.xa.Fa(e.ya)),this.ma.Ma||(this.ma.Aa=void 0,this.ma.ya=void 0);},isDeleted:function(){return !this.ma.ya},deleteLater:function(){if(this.ma.ya||Re(this),this.ma.Ka&&!this.ma.Ma)throw new g("Object already scheduled for deletion");return se.push(this),se.length===1&&le&&le(ke),this.ma.Ka=!0,this}}),r.getInheritedInstanceCount=()=>Object.keys(de).length,r.getLiveInheritedInstances=()=>{var e=[],t;for(t in de)de.hasOwnProperty(t)&&e.push(de[t]);return e},r.flushPendingDeletes=ke,r.setDelayFunction=e=>{le=e,se.length&&le&&le(ke);},Object.assign(he.prototype,{eb(e){return this.Za&&(e=this.Za(e)),e},Xa(e){this.Fa?.(e);},argPackAdvance:8,readValueFromPointer:oe,fromWireType:function(e){function t(){return this.Qa?_e(this.xa.La,{za:this.jb,ya:a,Da:this,Aa:e}):_e(this.xa.La,{za:this,ya:e})}var a=this.eb(e);if(!a)return this.Xa(e),null;var o=Zt(this.xa,a);if(o!==void 0)return o.ma.count.value===0?(o.ma.ya=a,o.ma.Aa=e,o.clone()):(o=o.clone(),this.Xa(e),o);if(o=this.xa.cb(a),o=Ct[o],!o)return t.call(this);o=this.Pa?o.$a:o.pointerType;var i=Et(a,this.xa,o.xa);return i===null?t.call(this):this.Qa?_e(o.xa.La,{za:o,ya:i,Da:this,Aa:e}):_e(o.xa.La,{za:o,ya:i})}}),bt=r.UnboundTypeError=((e,t)=>{var a=ue(t,function(o){this.name=t,this.message=o,o=Error(o).stack,o!==void 0&&(this.stack=this.toString()+`\n`+o.replace(/^Error(:[^\\n]*)?\\n/,""));});return a.prototype=Object.create(e.prototype),a.prototype.constructor=a,a.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},a})(Error,"UnboundTypeError"),B.push(0,1,void 0,1,null,1,!0,1,!1,1),r.count_emval_handles=()=>B.length/2-5-Be.length;var Mn={c:(e,t,a,o)=>{ye(`Assertion failed: ${e?G(b,e):""}, at: `+[t?t?G(b,t):"":"unknown filename",a,o?o?G(b,o):"":"unknown function"]);},m:(e,t,a)=>{var o=new Gt(e);throw L[o.ya+16>>2]=0,L[o.ya+4>>2]=t,L[o.ya+8>>2]=a,vt=e,vt},B:function(){return 0},P:()=>{},M:()=>{},R:function(){return 0},N:()=>{},A:function(){},O:()=>{},v:e=>{var t=ge[e];delete ge[e];var a=t.Ua,o=t.Fa,i=t.Ya,l=i.map(h=>h.hb).concat(i.map(h=>h.nb));H([e],l,h=>{var u={};return i.forEach((f,p)=>{var m=h[p],w=f.fb,C=f.gb,d=h[p+i.length],v=f.mb,y=f.ob;u[f.bb]={read:x=>m.fromWireType(w(C,x)),write:(x,N)=>{var S=[];v(y,x,d.toWireType(S,N)),Se(S);}};}),[{name:t.name,fromWireType:f=>{var p={},m;for(m in u)p[m]=u[m].read(f);return o(f),p},toWireType:(f,p)=>{for(var m in u)if(!(m in p))throw new TypeError(`Missing field: "${m}"`);var w=a();for(m in u)u[m].write(w,p[m]);return f!==null&&f.push(o,w),w},argPackAdvance:8,readValueFromPointer:oe,Ea:o}]});},I:()=>{},Y:(e,t,a,o)=>{t=A(t),k(e,{name:t,fromWireType:function(i){return !!i},toWireType:function(i,l){return l?a:o},argPackAdvance:8,readValueFromPointer:function(i){return this.fromWireType(b[i])},Ea:null});},r:(e,t,a,o,i,l,h,u,f,p,m,w,C)=>{m=A(m),l=T(i,l),u&&(u=T(h,u)),p&&(p=T(f,p)),C=T(w,C);var d=Qt(m);De(d,function(){Ce(`Cannot construct ${m} due to unbound types`,[o]);}),H([e,t,a],o?[o]:[],v=>{if(v=v[0],o)var y=v.xa,x=y.La;else x=Ee.prototype;v=ue(m,function(...Ke){if(Object.getPrototypeOf(this)!==N)throw new g("Use \'new\' to construct "+m);if(S.Ha===void 0)throw new g(m+" has no accessible constructor");var zt=S.Ha[Ke.length];if(zt===void 0)throw new g(`Tried to invoke ctor of ${m} with invalid number of parameters (${Ke.length}) - expected (${Object.keys(S.Ha).toString()}) parameters instead!`);return zt.apply(this,Ke)});var N=Object.create(x,{constructor:{value:v}});v.prototype=N;var S=new qt(m,v,N,C,y,l,u,p);if(S.Ca){var pe;(pe=S.Ca).Wa??(pe.Wa=[]),S.Ca.Wa.push(S);}return y=new he(m,S,!0,!1,!1),pe=new he(m+"*",S,!1,!1,!1),x=new he(m+" const*",S,!1,!0,!1),Ct[e]={pointerType:pe,$a:x},Lt(d,v),[y,pe,x]});},q:(e,t,a,o,i,l)=>{var h=ze(t,a);i=T(o,i),H([],[e],u=>{u=u[0];var f=`constructor ${u.name}`;if(u.xa.Ha===void 0&&(u.xa.Ha=[]),u.xa.Ha[t-1]!==void 0)throw new g(`Cannot register multiple constructors with identical number of parameters (${t-1}) for class \'${u.name}\'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return u.xa.Ha[t-1]=()=>{Ce(`Cannot construct ${u.name} due to unbound types`,h);},H([],h,p=>(p.splice(1,0,null),u.xa.Ha[t-1]=je(f,p,null,i,l),[])),[]});},f:(e,t,a,o,i,l,h,u)=>{var f=ze(a,o);t=A(t),t=It(t),l=T(i,l),H([],[e],p=>{function m(){Ce(`Cannot call ${w} due to unbound types`,f);}p=p[0];var w=`${p.name}.${t}`;t.startsWith("@@")&&(t=Symbol[t.substring(2)]),u&&p.xa.kb.push(t);var C=p.xa.La,d=C[t];return d===void 0||d.Ba===void 0&&d.className!==p.name&&d.Oa===a-2?(m.Oa=a-2,m.className=p.name,C[t]=m):(Mt(C,t,w),C[t].Ba[a-2]=m),H([],f,v=>(v=je(w,v,p,l,h),C[t].Ba===void 0?(v.Oa=a-2,C[t]=v):C[t].Ba[a-2]=v,[])),[]});},X:e=>k(e,xt),x:(e,t,a,o)=>{function i(){}t=A(t),i.values={},k(e,{name:t,constructor:i,fromWireType:function(l){return this.constructor.values[l]},toWireType:(l,h)=>h.value,argPackAdvance:8,readValueFromPointer:sn(t,a,o),Ea:null}),De(t,i);},k:(e,t,a)=>{var o=He(e,"enum");t=A(t),e=o.constructor,o=Object.create(o.constructor.prototype,{value:{value:a},constructor:{value:ue(`${o.name}_${t}`,function(){})}}),e.values[a]=o,e[t]=o;},C:(e,t,a)=>{t=A(t),k(e,{name:t,fromWireType:o=>o,toWireType:(o,i)=>i,argPackAdvance:8,readValueFromPointer:ln(t,a),Ea:null});},E:(e,t,a,o,i,l)=>{var h=ze(t,a);e=A(e),e=It(e),i=T(o,i),De(e,function(){Ce(`Cannot call ${e} due to unbound types`,h);},t-1),H([],h,u=>(Lt(e,je(e,[u[0],null].concat(u.slice(1)),null,i,l),t-1),[]));},l:(e,t,a,o,i)=>{if(t=A(t),i===-1&&(i=4294967295),i=u=>u,o===0){var l=32-8*a;i=u=>u<<l>>>l;}var h=t.includes("unsigned")?function(u,f){return f>>>0}:function(u,f){return f};k(e,{name:t,fromWireType:i,toWireType:h,argPackAdvance:8,readValueFromPointer:dn(t,a,o!==0),Ea:null});},g:(e,t,a)=>{function o(l){return new i(Y.buffer,L[l+4>>2],L[l>>2])}var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][t];a=A(a),k(e,{name:a,fromWireType:o,argPackAdvance:8,readValueFromPointer:o},{ib:!0});},w:e=>{k(e,xt);},ca:(e,t,a,o,i,l,h,u,f,p,m,w)=>{a=A(a),l=T(i,l),u=T(h,u),p=T(f,p),w=T(m,w),H([e],[t],C=>(C=C[0],[new he(a,C.xa,!1,!1,!0,C,o,l,u,p,w)]));},D:(e,t)=>{t=A(t);var a=t==="std::string";k(e,{name:t,fromWireType:function(o){var i=L[o>>2],l=o+4;if(a)for(var h=l,u=0;u<=i;++u){var f=l+u;if(u==i||b[f]==0){if(h=h?G(b,h,f-h):"",p===void 0)var p=h;else p+="\\0",p+=h;h=f+1;}}else {for(p=Array(i),u=0;u<i;++u)p[u]=String.fromCharCode(b[l+u]);p=p.join("");}return W(o),p},toWireType:function(o,i){i instanceof ArrayBuffer&&(i=new Uint8Array(i));var l=typeof i=="string";if(!(l||i instanceof Uint8Array||i instanceof Uint8ClampedArray||i instanceof Int8Array))throw new g("Cannot pass non-string to std::string");var h=a&&l?yt(i):i.length,u=Ge(4+h+1),f=u+4;if(L[u>>2]=h,a&&l)gt(i,b,f,h+1);else if(l)for(l=0;l<h;++l){var p=i.charCodeAt(l);if(255<p)throw W(f),new g("String has UTF-16 code units that do not fit in 8 bits");b[f+l]=p;}else for(l=0;l<h;++l)b[f+l]=i[l];return o!==null&&o.push(W,u),u},argPackAdvance:8,readValueFromPointer:oe,Ea(o){W(o);}});},u:(e,t,a)=>{if(a=A(a),t===2)var o=cn,i=un,l=hn,h=u=>re[u>>1];else t===4&&(o=pn,i=fn,l=mn,h=u=>L[u>>2]);k(e,{name:a,fromWireType:u=>{for(var f=L[u>>2],p,m=u+4,w=0;w<=f;++w){var C=u+4+w*t;(w==f||h(C)==0)&&(m=o(m,C-m),p===void 0?p=m:(p+="\\0",p+=m),m=C+t);}return W(u),p},toWireType:(u,f)=>{if(typeof f!="string")throw new g(`Cannot pass non-string to C++ string type ${a}`);var p=l(f),m=Ge(4+p+t);return L[m>>2]=p/t,i(f,m+4,p+t),u!==null&&u.push(W,m),m},argPackAdvance:8,readValueFromPointer:oe,Ea(u){W(u);}});},s:(e,t,a,o,i,l)=>{ge[e]={name:A(t),Ua:T(a,o),Fa:T(i,l),Ya:[]};},j:(e,t,a,o,i,l,h,u,f,p)=>{ge[e].Ya.push({bb:A(t),hb:a,fb:T(o,i),gb:l,nb:h,mb:T(u,f),ob:p});},Z:(e,t)=>{t=A(t),k(e,{ub:!0,name:t,argPackAdvance:0,fromWireType:()=>{},toWireType:()=>{}});},J:()=>{throw 1/0},aa:(e,t,a,o)=>(e=Ve[e],t=Ue(t),e(null,t,a,o)),F:We,$:(e,t,a)=>{var o=yn(e,t),i=o.shift();e--;var l=Array(e);return t=`methodCaller<(${o.map(h=>h.name).join(", ")}) => ${i.name}>`,vn(ue(t,(h,u,f,p)=>{for(var m=0,w=0;w<e;++w)l[w]=o[w].readValueFromPointer(p+m),m+=o[w].argPackAdvance;return u=a===1?gn(u,l):u.apply(h,l),h=[],u=i.toWireType(h,u),h.length&&(L[f>>2]=Me(h)),u}))},ba:e=>{9<e&&(B[e+1]+=1);},_:e=>{var t=Ue(e);Se(t),We(e);},o:(e,t)=>(e=He(e,"_emval_take_value"),e=e.readValueFromPointer(t),Me(e)),W:()=>{ye("");},V:()=>performance.now(),L:e=>{var t=b.length;if(e>>>=0,2147483648<e)return !1;for(var a=1;4>=a;a*=2){var o=t*(1+.2/a);o=Math.min(o,e+100663296);var i=Math;o=Math.max(e,o);e:{i=(i.min.call(i,2147483648,o+(65536-o%65536)%65536)-ve.buffer.byteLength+65535)/65536;try{ve.grow(i),st();var l=1;break e}catch{}l=void 0;}if(l)return !0}return !1},S:(e,t)=>{var a=0;return Pt().forEach((o,i)=>{var l=t+a;for(i=L[e+4*i>>2]=l,l=0;l<o.length;++l)Y[i++]=o.charCodeAt(l);Y[i]=0,a+=o.length+1;}),0},T:(e,t)=>{var a=Pt();L[e>>2]=a.length;var o=0;return a.forEach(i=>o+=i.length+1),L[t>>2]=o,0},t:()=>52,z:()=>52,H:function(){return 70},Q:(e,t,a,o)=>{for(var i=0,l=0;l<a;l++){var h=L[t>>2],u=L[t+4>>2];t+=8;for(var f=0;f<u;f++){var p=b[h+f],m=wn[e];p===0||p===10?((e===1?Nt:Z)(G(m,0)),m.length=0):m.push(p);}i+=u;}return L[o>>2]=i,0},U:(e,t)=>(Tt(b.subarray(e,e+t)),0),i:xn,d:In,e:Fn,p:An,y:Sn,b:Ln,a:bn,h:Tn,n:Pn,G:Rn,K:(e,t,a,o)=>Cn(e,t,a,o)},F=function(){function e(a){return F=a.exports,ve=F.da,st(),R=F.ha,dt.unshift(F.ea),J--,r.monitorRunDependencies?.(J),J==0&&(ae&&(a=ae,ae=null,a())),F}var t={a:Mn};if(J++,r.monitorRunDependencies?.(J),r.instantiateWasm)try{return r.instantiateWasm(t,e)}catch(a){Z(`Module.instantiateWasm callback failed with error: ${a}`),_(a);}return Jt(t,function(a){e(a.instance);}).catch(_),{}}(),Ge=e=>(Ge=F.fa)(e),kt=e=>(kt=F.ga)(e),W=e=>(W=F.ia)(e),D=(e,t)=>(D=F.ja)(e,t),O=e=>(O=F.ka)(e),z=()=>(z=F.la)();r.dynCall_iijj=(e,t,a,o,i,l)=>(r.dynCall_iijj=F.na)(e,t,a,o,i,l),r.dynCall_vijj=(e,t,a,o,i,l)=>(r.dynCall_vijj=F.oa)(e,t,a,o,i,l),r.dynCall_jiii=(e,t,a,o)=>(r.dynCall_jiii=F.pa)(e,t,a,o),r.dynCall_jii=(e,t,a)=>(r.dynCall_jii=F.qa)(e,t,a);var Dt=r.dynCall_viiij=(e,t,a,o,i,l)=>(Dt=r.dynCall_viiij=F.ra)(e,t,a,o,i,l);r.dynCall_jiji=(e,t,a,o,i)=>(r.dynCall_jiji=F.sa)(e,t,a,o,i),r.dynCall_viijii=(e,t,a,o,i,l,h)=>(r.dynCall_viijii=F.ta)(e,t,a,o,i,l,h),r.dynCall_iiiiij=(e,t,a,o,i,l,h)=>(r.dynCall_iiiiij=F.ua)(e,t,a,o,i,l,h),r.dynCall_iiiiijj=(e,t,a,o,i,l,h,u,f)=>(r.dynCall_iiiiijj=F.va)(e,t,a,o,i,l,h,u,f),r.dynCall_iiiiiijj=(e,t,a,o,i,l,h,u,f,p)=>(r.dynCall_iiiiiijj=F.wa)(e,t,a,o,i,l,h,u,f,p);function Ln(e,t){var a=z();try{R.get(e)(t);}catch(o){if(O(a),o!==o+0)throw o;D(1,0);}}function bn(e,t,a){var o=z();try{R.get(e)(t,a);}catch(i){if(O(o),i!==i+0)throw i;D(1,0);}}function Fn(e,t,a,o){var i=z();try{return R.get(e)(t,a,o)}catch(l){if(O(i),l!==l+0)throw l;D(1,0);}}function In(e,t,a){var o=z();try{return R.get(e)(t,a)}catch(i){if(O(o),i!==i+0)throw i;D(1,0);}}function xn(e,t){var a=z();try{return R.get(e)(t)}catch(o){if(O(a),o!==o+0)throw o;D(1,0);}}function An(e,t,a,o,i,l){var h=z();try{return R.get(e)(t,a,o,i,l)}catch(u){if(O(h),u!==u+0)throw u;D(1,0);}}function Pn(e,t,a,o,i){var l=z();try{R.get(e)(t,a,o,i);}catch(h){if(O(l),h!==h+0)throw h;D(1,0);}}function Tn(e,t,a,o){var i=z();try{R.get(e)(t,a,o);}catch(l){if(O(i),l!==l+0)throw l;D(1,0);}}function Sn(e){var t=z();try{R.get(e)();}catch(a){if(O(t),a!==a+0)throw a;D(1,0);}}function Rn(e,t,a,o,i,l){var h=z();try{Dt(e,t,a,o,i,l);}catch(u){if(O(h),u!==u+0)throw u;D(1,0);}}var Fe;ae=function e(){Fe||Ot(),Fe||(ae=e);};function Ot(){function e(){if(!Fe&&(Fe=!0,r.calledRun=!0,!at)){if(Te(dt),c(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;){var t=r.postRun.shift();ct.unshift(t);}Te(ct);}}if(!(0<J)){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)Vt();Te(lt),0<J||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("");},1),e();},1)):e());}}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);0<r.preInit.length;)r.preInit.pop()();return Ot(),$}})(),Bt=On;var X=class{constructor(){throw new Error("RendererLoader is a static class and cannot be instantiated.")}static async _tryLoad(n){return await Bt({locateFile:()=>n})}static async _loadWithBackup(){return this._ModulePromise||(this._ModulePromise=this._tryLoad(this._wasmURL).catch(async n=>{let r=`https://unpkg.com/${fe.name}@${fe.version}/dist/dotlottie-player.wasm`;console.warn(`Primary WASM load failed from ${this._wasmURL}. Error: ${n.message}`),console.warn(`Attempting to load WASM from backup URL: ${r}`);try{return await this._tryLoad(r)}catch(c){throw console.error(`Primary WASM URL failed: ${n.message}`),console.error(`Backup WASM URL failed: ${c.message}`),new Error("WASM loading failed from all sources.")}})),this._ModulePromise}static async load(){return this._loadWithBackup()}static setWasmUrl(n){this._wasmURL=n,this._ModulePromise=null;}};I(X,"_ModulePromise",null),I(X,"_wasmURL",`https://cdn.jsdelivr.net/npm/${fe.name}@${fe.version}/dist/dotlottie-player.wasm`);var Ae=class{constructor(){I(this,"_eventListeners",new Map);}addEventListener(n,r){let c=this._eventListeners.get(n);c||(c=new Set,this._eventListeners.set(n,c)),c.add(r);}removeEventListener(n,r){let c=this._eventListeners.get(n);c&&(r?(c.delete(r),c.size===0&&this._eventListeners.delete(n)):this._eventListeners.delete(n));}dispatch(n){this._eventListeners.get(n.type)?.forEach(c=>c(n));}removeAllEventListeners(){this._eventListeners.clear();}};function zn(s){return /^#([\\da-f]{6}|[\\da-f]{8})$/iu.test(s)}function Ut(s){if(!zn(s))return 0;let n=s.replace("#","");return n=n.length===6?`${n}ff`:n,parseInt(n,16)}function Qe(s){if(s.byteLength<4)return !1;let n=new Uint8Array(s.slice(0,xe.byteLength));for(let r=0;r<xe.length;r+=1)if(xe[r]!==n[r])return !1;return !0}function Wt(s){return jt.every(n=>Object.prototype.hasOwnProperty.call(s,n))}function qe(s){if(typeof s=="string")try{return Wt(JSON.parse(s))}catch{return !1}else return Wt(s)}var et=(s,n)=>s==="reverse"?n.Mode.Reverse:s==="bounce"?n.Mode.Bounce:s==="reverse-bounce"?n.Mode.ReverseBounce:n.Mode.Forward,tt=(s,n)=>s==="contain"?n.Fit.Contain:s==="cover"?n.Fit.Cover:s==="fill"?n.Fit.Fill:s==="fit-height"?n.Fit.FitHeight:s==="fit-width"?n.Fit.FitWidth:n.Fit.None,nt=(s,n)=>{let r=new n.VectorFloat;return r.push_back(s[0]),r.push_back(s[1]),r},rt=(s,n)=>{let r=new n.VectorFloat;return s.length!==2||(r.push_back(s[0]),r.push_back(s[1])),r},M=class M{constructor(n){I(this,"_canvas");I(this,"_context",null);I(this,"_eventManager");I(this,"_animationFrameId",null);I(this,"_frameManager");I(this,"_dotLottieCore",null);I(this,"_renderConfig",{});I(this,"_isFrozen",!1);I(this,"_backgroundColor",null);this._canvas=n.canvas,this._context=this._canvas.getContext("2d"),this._eventManager=new Ae,this._frameManager=new Ie,this._renderConfig=n.renderConfig??{},X.load().then(r=>{M._wasmModule=r,this._dotLottieCore=new r.DotLottiePlayer({autoplay:n.autoplay??!1,backgroundColor:0,loopAnimation:n.loop??!1,mode:et(n.mode??"forward",r),segment:rt(n.segment??[],r),speed:n.speed??1,useFrameInterpolation:n.useFrameInterpolation??!0,marker:n.marker??"",layout:n.layout?{align:nt(n.layout.align,r),fit:tt(n.layout.fit,r)}:r.createDefaultLayout()}),this._eventManager.dispatch({type:"ready"}),n.data?this._loadFromData(n.data):n.src&&this._loadFromSrc(n.src),n.backgroundColor&&this.setBackgroundColor(n.backgroundColor);}).catch(r=>{this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to load wasm module: ${r}`)});});}_dispatchError(n){console.error(n),this._eventManager.dispatch({type:"loadError",error:new Error(n)});}async _fetchData(n){let r=await fetch(n);if(!r.ok)throw new Error(`Failed to fetch animation data from URL: ${n}. ${r.status}: ${r.statusText}`);let c=await r.arrayBuffer();return Qe(c)?c:new TextDecoder().decode(c)}_loadFromData(n){if(this._dotLottieCore===null)return;let r=this._canvas.width,c=this._canvas.height,_=!1;if(typeof n=="string"){if(!qe(n)){this._dispatchError("Invalid Lottie JSON string: The provided string does not conform to the Lottie JSON format.");return}_=this._dotLottieCore.loadAnimationData(n,r,c);}else if(n instanceof ArrayBuffer){if(!Qe(n)){this._dispatchError("Invalid dotLottie ArrayBuffer: The provided ArrayBuffer does not conform to the dotLottie format.");return}_=this._dotLottieCore.loadDotLottieData(n,r,c);}else if(typeof n=="object"){if(!qe(n)){this._dispatchError("Invalid Lottie JSON object: The provided object does not conform to the Lottie JSON format.");return}_=this._dotLottieCore.loadAnimationData(JSON.stringify(n),r,c);}else {this._dispatchError(`Unsupported data type for animation data. Expected: \n - string (Lottie JSON),\n - ArrayBuffer (dotLottie),\n - object (Lottie JSON). \n Received: ${typeof n}`);return}_?(this._eventManager.dispatch({type:"load"}),te&&this.resize(),this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._dotLottieCore.config().autoplay&&(this._dotLottieCore.play(),this._dotLottieCore.isPlaying()?(this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this))):console.error("something went wrong, the animation was suppose to autoplay"))):this._dispatchError("Failed to load animation data");}_loadFromSrc(n){this._fetchData(n).then(r=>this._loadFromData(r)).catch(r=>this._dispatchError(`Failed to load animation data from URL: ${n}. ${r}`));}get activeAnimationId(){return this._dotLottieCore?.activeAnimationId()}get activeThemeId(){return this._dotLottieCore?.activeThemeId()}get layout(){let n=this._dotLottieCore?.config().layout;if(n)return {align:[n.align.get(0),n.align.get(1)],fit:(()=>{switch(n.fit){case M._wasmModule?.Fit.Contain:return "contain";case M._wasmModule?.Fit.Cover:return "cover";case M._wasmModule?.Fit.Fill:return "fill";case M._wasmModule?.Fit.FitHeight:return "fit-height";case M._wasmModule?.Fit.FitWidth:return "fit-width";case M._wasmModule?.Fit.None:return "none";default:return "contain"}})()}}get marker(){return this._dotLottieCore?.config().marker}get manifest(){try{let n=this._dotLottieCore?.manifestString();if(this._dotLottieCore===null||!n)return null;let r=JSON.parse(n);return Object.keys(r).length===0?null:r}catch{return null}}get renderConfig(){return this._renderConfig}get segment(){let n=this._dotLottieCore?.config().segment;if(n&&n.size()===2)return [n.get(0),n.get(1)]}get loop(){return this._dotLottieCore?.config().loopAnimation??!1}get mode(){let n=this._dotLottieCore?.config().mode;return n===M._wasmModule?.Mode.Reverse?"reverse":n===M._wasmModule?.Mode.Bounce?"bounce":n===M._wasmModule?.Mode.ReverseBounce?"reverse-bounce":"forward"}get isFrozen(){return this._isFrozen}get backgroundColor(){return this._backgroundColor??""}get autoplay(){return this._dotLottieCore?.config().autoplay??!1}get useFrameInterpolation(){return this._dotLottieCore?.config().useFrameInterpolation??!1}get speed(){return this._dotLottieCore?.config().speed??0}get isReady(){return this._dotLottieCore!==null}get isLoaded(){return this._dotLottieCore?.isLoaded()??!1}get isPlaying(){return this._dotLottieCore?.isPlaying()??!1}get isPaused(){return this._dotLottieCore?.isPaused()??!1}get isStopped(){return this._dotLottieCore?.isStopped()??!1}get currentFrame(){return this._dotLottieCore?.currentFrame()??0}get loopCount(){return this._dotLottieCore?.loopCount()??0}get totalFrames(){return this._dotLottieCore?.totalFrames()??0}get duration(){return this._dotLottieCore?.duration()??0}get segmentDuration(){return this._dotLottieCore?.segmentDuration()??0}get canvas(){return this._canvas}load(n){this._dotLottieCore===null||M._wasmModule===null||(this._dotLottieCore.setConfig({autoplay:n.autoplay??!1,backgroundColor:0,loopAnimation:n.loop??!1,mode:et(n.mode??"forward",M._wasmModule),segment:rt(n.segment??[],M._wasmModule),speed:n.speed??1,useFrameInterpolation:n.useFrameInterpolation??!0,marker:n.marker??"",layout:n.layout?{align:nt(n.layout.align,M._wasmModule),fit:tt(n.layout.fit,M._wasmModule)}:M._wasmModule.createDefaultLayout()}),n.data?this._loadFromData(n.data):n.src&&this._loadFromSrc(n.src),this.setBackgroundColor(n.backgroundColor??""));}_render(){if(this._dotLottieCore===null||this._context===null)return !1;if(this._dotLottieCore.render()){let r=this._dotLottieCore.buffer(),c=new Uint8ClampedArray(r,0,this._canvas.width*this._canvas.height*4),_=null;return typeof ImageData>"u"?(_=this._context.createImageData(this._canvas.width,this._canvas.height),_.data.set(c)):_=new ImageData(c,this._canvas.width,this._canvas.height),this._context.putImageData(_,0,0),this._eventManager.dispatch({type:"render",currentFrame:this._dotLottieCore.currentFrame()}),!0}return !1}_draw(){if(this._dotLottieCore===null||this._context===null||!this._dotLottieCore.isPlaying())return;let n=this._dotLottieCore.requestFrame();this._dotLottieCore.setFrame(n)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render()&&this._dotLottieCore.isComplete()&&(this._dotLottieCore.config().loopAnimation?this._eventManager.dispatch({type:"loop",loopCount:this._dotLottieCore.loopCount()}):this._eventManager.dispatch({type:"complete"}))),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this));}play(){if(this._dotLottieCore===null)return;let n=this._dotLottieCore.play();this._isFrozen=!1,n&&(this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)));}pause(){if(this._dotLottieCore===null)return;this._dotLottieCore.pause()&&this._eventManager.dispatch({type:"pause"});}stop(){if(this._dotLottieCore===null)return;this._dotLottieCore.stop()&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._eventManager.dispatch({type:"stop"}));}setFrame(n){if(this._dotLottieCore===null||n<0||n>this._dotLottieCore.totalFrames())return;this._dotLottieCore.seek(n)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render());}setSpeed(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),speed:n});}setBackgroundColor(n){this._dotLottieCore!==null&&(te&&this._canvas instanceof HTMLCanvasElement?this._canvas.style.backgroundColor=n:this._dotLottieCore.setConfig({...this._dotLottieCore.config(),backgroundColor:Ut(n)}),this._backgroundColor=n);}setLoop(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),loopAnimation:n});}setUseFrameInterpolation(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),useFrameInterpolation:n});}addEventListener(n,r){this._eventManager.addEventListener(n,r);}removeEventListener(n,r){this._eventManager.removeEventListener(n,r);}destroy(){this._dotLottieCore?.delete(),this._dotLottieCore=null,this._context=null,this._eventManager.dispatch({type:"destroy"}),this._eventManager.removeAllEventListeners(),this._cleanupStateMachineListeners();}freeze(){this._animationFrameId!==null&&(this._frameManager.cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null,this._isFrozen=!0,this._eventManager.dispatch({type:"freeze"}));}unfreeze(){this._animationFrameId===null&&(this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)),this._isFrozen=!1,this._eventManager.dispatch({type:"unfreeze"}));}resize(){if(te&&this._canvas instanceof HTMLCanvasElement){let r=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,{height:c,width:_}=this._canvas.getBoundingClientRect();this._canvas.width=_*r,this._canvas.height=c*r;}this._dotLottieCore?.resize(this._canvas.width,this._canvas.height)&&this._render();}setSegment(n,r){this._dotLottieCore===null||M._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),segment:rt([n,r],M._wasmModule)});}setMode(n){this._dotLottieCore===null||M._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),mode:et(n,M._wasmModule)});}setRenderConfig(n){this._renderConfig=n;}loadAnimation(n){if(this._dotLottieCore===null||this._dotLottieCore.activeAnimationId()===n)return;this._dotLottieCore.loadAnimation(n,this._canvas.width,this._canvas.height)?(this._eventManager.dispatch({type:"load"}),this.resize()):this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to animation :${n}`)});}setMarker(n){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),marker:n});}markers(){let n=this._dotLottieCore?.markers();if(n){let r=[];for(let c=0;c<n.size();c+=1){let _=n.get(c);r.push({name:_.name,time:_.time,duration:_.duration});}return r}return []}loadTheme(n){if(this._dotLottieCore===null)return !1;let r=this._dotLottieCore.loadTheme(n);return this._render(),r}loadThemeData(n){if(this._dotLottieCore===null)return !1;let r=this._dotLottieCore.loadThemeData(n);return this._render(),r}setLayout(n){this._dotLottieCore===null||M._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),layout:{align:nt(n.align,M._wasmModule),fit:tt(n.fit,M._wasmModule)}});}setViewport(n,r,c,_){return this._dotLottieCore===null?!1:this._dotLottieCore.setViewport(n,r,c,_)}static setWasmUrl(n){X.setWasmUrl(n);}loadStateMachine(n){return this._dotLottieCore?.loadStateMachine(n)??!1}startStateMachine(){let n=this._dotLottieCore?.startStateMachine()??!1;return n&&this._setupStateMachineListeners(),n}stopStateMachine(){let n=this._dotLottieCore?.stopStateMachine()??!1;return n&&this._cleanupStateMachineListeners(),n}_getPointerPosition(n){let r=this._canvas.getBoundingClientRect(),c=this._canvas.width/r.width,_=this._canvas.height/r.height,$=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,U=(n.clientX-r.left)*c/$,V=(n.clientY-r.top)*_/$;return {x:U,y:V}}_onPointerUp(n){let{x:r,y:c}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerUp: ${r} ${c}`);}_onPointerDown(n){let{x:r,y:c}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerDown: ${r} ${c}`);}_onPointerMove(n){let{x:r,y:c}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerMove: ${r} ${c}`);}_onPointerEnter(n){let{x:r,y:c}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerEnter: ${r} ${c}`);}_onPointerLeave(n){let{x:r,y:c}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerExit: ${r} ${c}`);}_onComplete(){this.postStateMachineEvent("OnComplete");}postStateMachineEvent(n){return this._dotLottieCore?.postEventPayload(n)??!1}getStateMachineListeners(){if(!this._dotLottieCore)return [];let n=this._dotLottieCore.stateMachineFrameworkSetup(),r=[];for(let c=0;c<n.size();c+=1)r.push(n.get(c));return r}_setupStateMachineListeners(){if(te&&this._canvas instanceof HTMLCanvasElement&&this._dotLottieCore!==null&&this.isLoaded){let n=this.getStateMachineListeners();n.includes("PointerUp")&&this._canvas.addEventListener("pointerup",this._onPointerUp.bind(this)),n.includes("PointerDown")&&this._canvas.addEventListener("pointerdown",this._onPointerDown.bind(this)),n.includes("PointerMove")&&this._canvas.addEventListener("pointermove",this._onPointerMove.bind(this)),n.includes("PointerEnter")&&this._canvas.addEventListener("pointerenter",this._onPointerEnter.bind(this)),n.includes("PointerExit")&&this._canvas.addEventListener("pointerleave",this._onPointerLeave.bind(this)),n.includes("Complete")&&this.addEventListener("complete",this._onComplete.bind(this));}}_cleanupStateMachineListeners(){te&&this._canvas instanceof HTMLCanvasElement&&(this._canvas.removeEventListener("pointerup",this._onPointerUp.bind(this)),this._canvas.removeEventListener("pointerdown",this._onPointerDown.bind(this)),this._canvas.removeEventListener("pointermove",this._onPointerMove.bind(this)),this._canvas.removeEventListener("pointerenter",this._onPointerEnter.bind(this)),this._canvas.removeEventListener("pointerleave",this._onPointerLeave.bind(this)),this.removeEventListener("complete",this._onComplete.bind(this)));}loadStateMachineData(n){return this._dotLottieCore?.loadStateMachineData(n)??!1}animationSize(){let n=this._dotLottieCore?.animationSize().get(0)??0,r=this._dotLottieCore?.animationSize().get(1)??0;return {width:n,height:r}}setStateMachineBooleanContext(n,r){return this._dotLottieCore?.setStateMachineBooleanContext(n,r)??!1}setStateMachineNumericContext(n,r){return this._dotLottieCore?.setStateMachineNumericContext(n,r)??!1}setStateMachineStringContext(n,r){return this._dotLottieCore?.setStateMachineStringContext(n,r)??!1}};I(M,"_wasmModule",null);var me=M;var E=new Map,jn={ready:s=>n=>{let r={id:"",method:"onReady",result:{instanceId:s,event:n}};self.postMessage(r);},complete:s=>n=>{let r={id:"",method:"onComplete",result:{instanceId:s,event:n}};self.postMessage(r);},load:s=>n=>{let c={id:"",method:"onLoad",result:{instanceId:s,event:n}};self.postMessage(c);},loadError:s=>n=>{let c={id:"",method:"onLoadError",result:{instanceId:s,event:n}};self.postMessage(c);},loop:s=>n=>{let c={id:"",method:"onLoop",result:{instanceId:s,event:n}};self.postMessage(c);},play:s=>n=>{let c={id:"",method:"onPlay",result:{instanceId:s,event:n}};self.postMessage(c);},pause:s=>n=>{let c={id:"",method:"onPause",result:{instanceId:s,event:n}};self.postMessage(c);},stop:s=>n=>{let c={id:"",method:"onStop",result:{instanceId:s,event:n}};self.postMessage(c);},frame:s=>n=>{let c={id:"",method:"onFrame",result:{instanceId:s,event:n}};self.postMessage(c);},render:s=>n=>{let c={id:"",method:"onRender",result:{instanceId:s,event:n}};self.postMessage(c);},freeze:s=>n=>{let c={id:"",method:"onFreeze",result:{instanceId:s,event:n}};self.postMessage(c);},unfreeze:s=>n=>{let c={id:"",method:"onUnfreeze",result:{instanceId:s,event:n}};self.postMessage(c);},destroy:s=>n=>{let c={id:"",method:"onDestroy",result:{instanceId:s,event:n}};self.postMessage(c);}},Ht={getDotLottieInstanceState(s){let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return {state:{isLoaded:r.isLoaded,isPaused:r.isPaused,isPlaying:r.isPlaying,isStopped:r.isStopped,isFrozen:r.isFrozen,loop:r.loop,mode:r.mode,speed:r.speed,currentFrame:r.currentFrame,totalFrames:r.totalFrames,duration:r.duration,useFrameInterpolation:r.useFrameInterpolation,renderConfig:r.renderConfig,marker:r.marker,backgroundColor:r.backgroundColor,markers:r.markers(),activeAnimationId:r.activeAnimationId,activeThemeId:r.activeThemeId,autoplay:r.autoplay,segment:r.segment,layout:r.layout,segmentDuration:r.segmentDuration,isReady:r.isReady,manifest:r.manifest}}},setLayout(s){let n=s.params.instanceId,r=s.params.layout,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.setLayout(r),{success:!0}},getStateMachineListeners(s){let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return r.getStateMachineListeners()},postStateMachineEvent(s){let n=s.params.instanceId,r=s.params.event,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.postStateMachineEvent(r)},startStateMachine(s){let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return r.startStateMachine()},stopStateMachine(s){let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return r.stopStateMachine()},loadStateMachine(s){let n=s.params.instanceId,r=s.params.stateMachineId,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.loadStateMachine(r)},loadStateMachineData(s){let n=s.params.instanceId,r=s.params.stateMachineData,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.loadStateMachineData(r)},create:s=>{let n=s.params.instanceId,r=s.params.config,c=s.params.width,_=s.params.height;if(E.has(n))throw new Error(`Instance with id ${n} already exists.`);let $=new me(r);return $.canvas.height=_,$.canvas.width=c,E.set(n,$),["complete","frame","load","loadError","loop","pause","play","stop","destroy","freeze","unfreeze","render","ready"].forEach(V=>{$.addEventListener(V,jn[V](n));}),{instanceId:n}},destroy:s=>{let n=s.params.instanceId,r=E.get(n);r&&(r.destroy(),E.delete(n));},freeze:s=>{let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);r.freeze();},load:s=>{let n=s.params.instanceId,r=s.params.config,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.load(r);},loadAnimation:s=>{let n=s.params.instanceId,r=s.params.animationId,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.loadAnimation(r);},loadTheme:s=>{let n=s.params.instanceId,r=s.params.themeId,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.loadTheme(r)},loadThemeData:s=>{let n=s.params.instanceId,r=s.params.themeData,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.loadThemeData(r)},pause:s=>{let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return r.pause()},play:s=>{let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);return r.play()},resize:s=>{let n=s.params.instanceId,r=s.params.width,c=s.params.height,_=E.get(n);if(!_)throw new Error(`Instance with id ${n} does not exist.`);return _.canvas.height=c,_.canvas.width=r,_.resize(),{success:!0}},setBackgroundColor:s=>{let n=s.params.instanceId,r=s.params.backgroundColor,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setBackgroundColor(r);},setFrame:s=>{let n=s.params.instanceId,r=s.params.frame,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setFrame(r);},setMode:s=>{let n=s.params.instanceId,r=s.params.mode,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setMode(r);},setRenderConfig:s=>{let n=s.params.instanceId,r=s.params.renderConfig,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setRenderConfig(r);},setSegment:s=>{let n=s.params.instanceId,r=s.params.segment,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setSegment(r[0],r[1]);},setSpeed:s=>{let n=s.params.instanceId,r=s.params.speed,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setSpeed(r);},setUseFrameInterpolation:s=>{let n=s.params.instanceId,r=s.params.useFrameInterpolation,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);c.setUseFrameInterpolation(r);},setWasmUrl:s=>{me.setWasmUrl(s.params.url);},stop:s=>{let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);r.stop();},unfreeze:s=>{let n=s.params.instanceId,r=E.get(n);if(!r)throw new Error(`Instance with id ${n} does not exist.`);r.unfreeze();},setViewport(s){let n=s.params.instanceId,r=s.params.x,c=s.params.y,_=s.params.width,$=s.params.height,U=E.get(n);if(!U)throw new Error(`Instance with id ${n} does not exist.`);return U.setViewport(r,c,_,$)},setMarker(s){let n=s.params.instanceId,r=s.params.marker,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.setMarker(r),{success:!0}},setLoop(s){let n=s.params.instanceId,r=s.params.loop,c=E.get(n);if(!c)throw new Error(`Instance with id ${n} does not exist.`);return c.setLoop(r),{success:!0}}};function Bn(s){let n=s.method;if(typeof Ht[n]=="function")return Ht[n](s);throw new Error(`Method ${n} is not implemented in commands.`)}self.onmessage=s=>{try{let n=Bn(s.data),r={id:s.data.id,method:s.data.method,result:n};self.postMessage(r);}catch(n){let r={id:s.data.id,method:s.data.method,error:n.message};self.postMessage(r);}};var Wn="",fr=Wn;\n\nexport { fr as default };\n';var Ae=class{constructor(){w(this,"_workers",new Map);w(this,"_animationWorkerMap",new Map);}_createWorker(n){let a=new Blob([Vt],{type:"application/javascript"});return new Worker(URL.createObjectURL(a),{type:"module",name:n})}getWorker(n){return this._workers.has(n)||this._workers.set(n,this._createWorker(n)),this._workers.get(n)}assignAnimationToWorker(n,a){this._animationWorkerMap.set(n,a);}unassignAnimationFromWorker(n){this._animationWorkerMap.delete(n);}sendMessage(n,a,h){this.getWorker(n).postMessage(a,h||[]);}terminateWorker(n){let a=this._workers.get(n);a&&(a.terminate(),this._workers.delete(n));}};function Yt(f){if(f instanceof OffscreenCanvas)return {width:f.width,height:f.height};let{height:n,width:a}=f.getBoundingClientRect();return {width:a*window.devicePixelRatio,height:n*window.devicePixelRatio}}function Jt(){return Date.now().toString(36)+Math.random().toString(36).substr(2,9)}var W=class W{constructor(n){w(this,"_eventManager",new re);w(this,"_id");w(this,"_worker");w(this,"_canvas");w(this,"_dotLottieInstanceState",{markers:[],autoplay:!1,backgroundColor:"",currentFrame:0,duration:0,loop:!1,mode:"forward",segment:[0,0],segmentDuration:0,speed:1,totalFrames:0,isLoaded:!1,isPlaying:!1,isPaused:!1,isStopped:!0,isFrozen:!1,useFrameInterpolation:!1,renderConfig:{devicePixelRatio:window.devicePixelRatio},activeAnimationId:"",activeThemeId:"",layout:void 0,marker:void 0,isReady:!1,manifest:null});w(this,"_created",!1);this._canvas=n.canvas,this._id=`dotlottie-${Jt()}`;let a=n.workerId||"defaultWorker";this._worker=W._workerManager.getWorker(a),W._workerManager.assignAnimationToWorker(this._id,a),W._wasmUrl&&this._sendMessage("setWasmUrl",{url:W._wasmUrl}),this._create(n),this._worker.addEventListener("message",this._handleWorkerEvent.bind(this));}async _handleWorkerEvent(n){let a=n.data;a.id||(a.method==="onLoad"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onComplete"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onDestroy"&&a.result.instanceId===this._id&&this._eventManager.dispatch(a.result.event),a.method==="onUnfreeze"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._dotLottieInstanceState.isFrozen=!1,this._eventManager.dispatch(a.result.event)),a.method==="onFrame"&&a.result.instanceId===this._id&&(this._dotLottieInstanceState.currentFrame=a.result.event.currentFrame,this._eventManager.dispatch(a.result.event)),a.method==="onRender"&&a.result.instanceId===this._id&&this._eventManager.dispatch(a.result.event),a.method==="onFreeze"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onPause"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onPlay"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onStop"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onLoadError"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)),a.method==="onReady"&&a.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(a.result.event)));}async _create(n){let a;this._canvas instanceof HTMLCanvasElement?a=this._canvas.transferControlToOffscreen():a=this._canvas;let{instanceId:h}=await this._sendMessage("create",{instanceId:this._id,config:{...n,canvas:a},...Yt(this._canvas)},[a]);if(h!==this._id)throw new Error("Instance ID mismatch");this._created=!0,await this._updateDotLottieInstanceState();}get isLoaded(){return this._dotLottieInstanceState.isLoaded}get isPlaying(){return this._dotLottieInstanceState.isPlaying}get isPaused(){return this._dotLottieInstanceState.isPaused}get isStopped(){return this._dotLottieInstanceState.isStopped}get currentFrame(){return this._dotLottieInstanceState.currentFrame}get isFrozen(){return this._dotLottieInstanceState.isFrozen}get segmentDuration(){return this._dotLottieInstanceState.segmentDuration}get totalFrames(){return this._dotLottieInstanceState.totalFrames}get segment(){return this._dotLottieInstanceState.segment}get speed(){return this._dotLottieInstanceState.speed}get duration(){return this._dotLottieInstanceState.duration}get isReady(){return this._dotLottieInstanceState.isReady}get mode(){return this._dotLottieInstanceState.mode}get canvas(){return this._canvas}get autoplay(){return this._dotLottieInstanceState.autoplay}get backgroundColor(){return this._dotLottieInstanceState.backgroundColor}get loop(){return this._dotLottieInstanceState.loop}get useFrameInterpolation(){return this._dotLottieInstanceState.useFrameInterpolation}get renderConfig(){return this._dotLottieInstanceState.renderConfig}get manifest(){return this._dotLottieInstanceState.manifest}get activeAnimationId(){return this._dotLottieInstanceState.activeAnimationId}get marker(){return this._dotLottieInstanceState.marker}get activeThemeId(){return this._dotLottieInstanceState.activeThemeId}get layout(){return this._dotLottieInstanceState.layout}async play(){this._created&&(await this._sendMessage("play",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async pause(){this._created&&(await this._sendMessage("pause",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async stop(){this._created&&(await this._sendMessage("stop",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async setSpeed(n){this._created&&(await this._sendMessage("setSpeed",{instanceId:this._id,speed:n}),await this._updateDotLottieInstanceState());}async setMode(n){this._created&&(await this._sendMessage("setMode",{instanceId:this._id,mode:n}),await this._updateDotLottieInstanceState());}async setFrame(n){this._created&&(await this._sendMessage("setFrame",{frame:n,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setSegment(n,a){this._created&&(await this._sendMessage("setSegment",{instanceId:this._id,segment:[n,a]}),await this._updateDotLottieInstanceState());}async setRenderConfig(n){this._created&&(await this._sendMessage("setRenderConfig",{instanceId:this._id,renderConfig:n}),await this._updateDotLottieInstanceState());}async setUseFrameInterpolation(n){this._created&&(await this._sendMessage("setUseFrameInterpolation",{instanceId:this._id,useFrameInterpolation:n}),await this._updateDotLottieInstanceState());}async loadTheme(n){if(!this._created)return !1;let a=this._sendMessage("loadTheme",{instanceId:this._id,themeId:n});return await this._updateDotLottieInstanceState(),a}async load(n){this._created&&(await this._sendMessage("load",{config:n,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setLoop(n){this._created&&(await this._sendMessage("setLoop",{instanceId:this._id,loop:n}),await this._updateDotLottieInstanceState());}async resize(){if(!this._created)return;let{height:n,width:a}=Yt(this._canvas);this._canvas.width=a,this._canvas.height=n,await this._sendMessage("resize",{height:n,instanceId:this._id,width:a}),await this._updateDotLottieInstanceState();}async destroy(){this._created&&(this._created=!1,await this._sendMessage("destroy",{instanceId:this._id}),this._cleanupStateMachineListeners(),W._workerManager.unassignAnimationFromWorker(this._id),this._eventManager.removeAllEventListeners());}async freeze(){this._created&&(await this._sendMessage("freeze",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async unfreeze(){this._created&&(await this._sendMessage("unfreeze",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async setBackgroundColor(n){this._created&&(await this._sendMessage("setBackgroundColor",{instanceId:this._id,backgroundColor:n}),await this._updateDotLottieInstanceState());}async loadAnimation(n){this._created&&(await this._sendMessage("loadAnimation",{animationId:n,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setLayout(n){this._created&&(await this._sendMessage("setLayout",{instanceId:this._id,layout:n}),await this._updateDotLottieInstanceState());}async _updateDotLottieInstanceState(){if(!this._created)return;let n=await this._sendMessage("getDotLottieInstanceState",{instanceId:this._id});this._dotLottieInstanceState=n.state;}markers(){return this._dotLottieInstanceState.markers}async setMarker(n){this._created&&(await this._sendMessage("setMarker",{instanceId:this._id,marker:n}),await this._updateDotLottieInstanceState());}async loadThemeData(n){if(!this._created)return !1;let a=await this._sendMessage("loadThemeData",{instanceId:this._id,themeData:n});return await this._updateDotLottieInstanceState(),a}async setViewport(n,a,h,C){return this._created?this._sendMessage("setViewport",{x:n,y:a,width:h,height:C,instanceId:this._id}):!1}async _sendMessage(n,a,h){let C={id:`dotlottie-request-${Jt()}`,method:n,params:a};return this._worker.postMessage(C,h||[]),new Promise((j,N)=>{let z=k=>{let Z=k.data;Z.id===C.id&&(this._worker.removeEventListener("message",z),Z.error?N(new Error(`Failed to execute method ${n}: ${Z.error}`)):j(Z.result));};this._worker.addEventListener("message",z);})}addEventListener(n,a){this._eventManager.addEventListener(n,a);}removeEventListener(n,a){this._eventManager.removeEventListener(n,a);}static setWasmUrl(n){W._wasmUrl=n;}async loadStateMachine(n){if(!this._created)return !1;let a=await this._sendMessage("loadStateMachine",{instanceId:this._id,stateMachineId:n});return await this._updateDotLottieInstanceState(),a}async loadStateMachineData(n){if(!this._created)return !1;let a=await this._sendMessage("loadStateMachineData",{instanceId:this._id,stateMachineData:n});return await this._updateDotLottieInstanceState(),a}async startStateMachine(){if(!this._created)return !1;this._setupStateMachineListeners();let n=await this._sendMessage("startStateMachine",{instanceId:this._id});return await this._updateDotLottieInstanceState(),n}async stopStateMachine(){return this._created?(this._cleanupStateMachineListeners(),this._sendMessage("stopStateMachine",{instanceId:this._id})):!1}async postStateMachineEvent(n){return this._created?this._sendMessage("postStateMachineEvent",{event:n,instanceId:this._id}):!1}async getStateMachineListeners(){return this._created?this._sendMessage("getStateMachineListeners",{instanceId:this._id}):[]}_getPointerPosition(n){let a=this._canvas.getBoundingClientRect(),h=this._canvas.width/a.width,C=this._canvas.height/a.height,j=this._dotLottieInstanceState.renderConfig.devicePixelRatio||window.devicePixelRatio||1,N=(n.clientX-a.left)*h/j,z=(n.clientY-a.top)*C/j;return {x:N,y:z}}_onPointerUp(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerUp: ${a} ${h}`);}_onPointerDown(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerDown: ${a} ${h}`);}_onPointerMove(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerMove: ${a} ${h}`);}_onPointerEnter(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerEnter: ${a} ${h}`);}_onPointerLeave(n){let{x:a,y:h}=this._getPointerPosition(n);this.postStateMachineEvent(`OnPointerExit: ${a} ${h}`);}_onComplete(){this.postStateMachineEvent("OnComplete");}async _setupStateMachineListeners(){if(H&&this._canvas instanceof HTMLCanvasElement&&this.isLoaded){let n=await this._sendMessage("getStateMachineListeners",{instanceId:this._id});n.includes("PointerUp")&&this._canvas.addEventListener("pointerup",this._onPointerUp.bind(this)),n.includes("PointerDown")&&this._canvas.addEventListener("pointerdown",this._onPointerDown.bind(this)),n.includes("PointerMove")&&this._canvas.addEventListener("pointermove",this._onPointerMove.bind(this)),n.includes("PointerEnter")&&this._canvas.addEventListener("pointerenter",this._onPointerEnter.bind(this)),n.includes("PointerExit")&&this._canvas.addEventListener("pointerleave",this._onPointerLeave.bind(this)),n.includes("Complete")&&this.addEventListener("complete",this._onComplete.bind(this));}}_cleanupStateMachineListeners(){H&&this._canvas instanceof HTMLCanvasElement&&(this._canvas.removeEventListener("pointerup",this._onPointerUp.bind(this)),this._canvas.removeEventListener("pointerdown",this._onPointerDown.bind(this)),this._canvas.removeEventListener("pointermove",this._onPointerMove.bind(this)),this._canvas.removeEventListener("pointerenter",this._onPointerEnter.bind(this)),this._canvas.removeEventListener("pointerleave",this._onPointerLeave.bind(this)),this.removeEventListener("complete",this._onComplete.bind(this)));}};w(W,"_workerManager",new Ae),w(W,"_wasmUrl","");var Gt=W;
|
|
9
|
+
Received: ${typeof C}`);return}m?(this._eventManager.dispatch({type:"load"}),P&&this.resize(),this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._dotLottieCore.config().autoplay&&(this._dotLottieCore.play(),this._dotLottieCore.isPlaying()?(this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this))):console.error("something went wrong, the animation was suppose to autoplay"))):this._dispatchError("Failed to load animation data");}_loadFromSrc(C){this._fetchData(C).then(i=>this._loadFromData(i)).catch(i=>this._dispatchError(`Failed to load animation data from URL: ${C}. ${i}`));}get activeAnimationId(){return this._dotLottieCore?.activeAnimationId()}get activeThemeId(){return this._dotLottieCore?.activeThemeId()}get layout(){let C=this._dotLottieCore?.config().layout;if(C)return {align:[C.align.get(0),C.align.get(1)],fit:(()=>{switch(C.fit){case Y._wasmModule?.Fit.Contain:return "contain";case Y._wasmModule?.Fit.Cover:return "cover";case Y._wasmModule?.Fit.Fill:return "fill";case Y._wasmModule?.Fit.FitHeight:return "fit-height";case Y._wasmModule?.Fit.FitWidth:return "fit-width";case Y._wasmModule?.Fit.None:return "none";default:return "contain"}})()}}get marker(){return this._dotLottieCore?.config().marker}get manifest(){try{let C=this._dotLottieCore?.manifestString();if(this._dotLottieCore===null||!C)return null;let i=JSON.parse(C);return Object.keys(i).length===0?null:i}catch{return null}}get renderConfig(){return this._renderConfig}get segment(){let C=this._dotLottieCore?.config().segment;if(C&&C.size()===2)return [C.get(0),C.get(1)]}get loop(){return this._dotLottieCore?.config().loopAnimation??!1}get mode(){let C=this._dotLottieCore?.config().mode;return C===Y._wasmModule?.Mode.Reverse?"reverse":C===Y._wasmModule?.Mode.Bounce?"bounce":C===Y._wasmModule?.Mode.ReverseBounce?"reverse-bounce":"forward"}get isFrozen(){return this._isFrozen}get backgroundColor(){return this._backgroundColor??""}get autoplay(){return this._dotLottieCore?.config().autoplay??!1}get useFrameInterpolation(){return this._dotLottieCore?.config().useFrameInterpolation??!1}get speed(){return this._dotLottieCore?.config().speed??0}get isReady(){return this._dotLottieCore!==null}get isLoaded(){return this._dotLottieCore?.isLoaded()??!1}get isPlaying(){return this._dotLottieCore?.isPlaying()??!1}get isPaused(){return this._dotLottieCore?.isPaused()??!1}get isStopped(){return this._dotLottieCore?.isStopped()??!1}get currentFrame(){return this._dotLottieCore?.currentFrame()??0}get loopCount(){return this._dotLottieCore?.loopCount()??0}get totalFrames(){return this._dotLottieCore?.totalFrames()??0}get duration(){return this._dotLottieCore?.duration()??0}get segmentDuration(){return this._dotLottieCore?.segmentDuration()??0}get canvas(){return this._canvas}load(C){this._dotLottieCore===null||Y._wasmModule===null||(this._dotLottieCore.setConfig({autoplay:C.autoplay??!1,backgroundColor:0,loopAnimation:C.loop??!1,mode:Ag(C.mode??"forward",Y._wasmModule),segment:tg(C.segment??[],Y._wasmModule),speed:C.speed??1,useFrameInterpolation:C.useFrameInterpolation??!0,marker:C.marker??"",layout:C.layout?{align:eg(C.layout.align,Y._wasmModule),fit:ig(C.layout.fit,Y._wasmModule)}:Y._wasmModule.createDefaultLayout()}),C.data?this._loadFromData(C.data):C.src&&this._loadFromSrc(C.src),this.setBackgroundColor(C.backgroundColor??""));}_render(){if(this._dotLottieCore===null||this._context===null)return !1;if(this._dotLottieCore.render()){let i=this._dotLottieCore.buffer(),d=new Uint8ClampedArray(i,0,this._canvas.width*this._canvas.height*4),m=null;return typeof ImageData>"u"?(m=this._context.createImageData(this._canvas.width,this._canvas.height),m.data.set(d)):m=new ImageData(d,this._canvas.width,this._canvas.height),this._context.putImageData(m,0,0),this._eventManager.dispatch({type:"render",currentFrame:this._dotLottieCore.currentFrame()}),!0}return !1}_draw(){if(this._dotLottieCore===null||this._context===null||!this._dotLottieCore.isPlaying())return;let C=this._dotLottieCore.requestFrame();this._dotLottieCore.setFrame(C)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render()&&this._dotLottieCore.isComplete()&&(this._dotLottieCore.config().loopAnimation?this._eventManager.dispatch({type:"loop",loopCount:this._dotLottieCore.loopCount()}):this._eventManager.dispatch({type:"complete"}))),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this));}play(){if(this._dotLottieCore===null)return;(this._dotLottieCore.play()||this._dotLottieCore.isPlaying())&&(this._isFrozen=!1,this._eventManager.dispatch({type:"play"}),this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)));}pause(){if(this._dotLottieCore===null)return;(this._dotLottieCore.pause()||this._dotLottieCore.isPaused())&&this._eventManager.dispatch({type:"pause"});}stop(){if(this._dotLottieCore===null)return;this._dotLottieCore.stop()&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render(),this._eventManager.dispatch({type:"stop"}));}setFrame(C){if(this._dotLottieCore===null||C<0||C>this._dotLottieCore.totalFrames())return;this._dotLottieCore.seek(C)&&(this._eventManager.dispatch({type:"frame",currentFrame:this._dotLottieCore.currentFrame()}),this._render());}setSpeed(C){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),speed:C});}setBackgroundColor(C){this._dotLottieCore!==null&&(P&&this._canvas instanceof HTMLCanvasElement?this._canvas.style.backgroundColor=C:this._dotLottieCore.setConfig({...this._dotLottieCore.config(),backgroundColor:zg(C)}),this._backgroundColor=C);}setLoop(C){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),loopAnimation:C});}setUseFrameInterpolation(C){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),useFrameInterpolation:C});}addEventListener(C,i){this._eventManager.addEventListener(C,i);}removeEventListener(C,i){this._eventManager.removeEventListener(C,i);}destroy(){this._dotLottieCore?.delete(),this._dotLottieCore=null,this._context=null,this._eventManager.dispatch({type:"destroy"}),this._eventManager.removeAllEventListeners(),this._cleanupStateMachineListeners();}freeze(){this._animationFrameId!==null&&(this._frameManager.cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null,this._isFrozen=!0,this._eventManager.dispatch({type:"freeze"}));}unfreeze(){this._animationFrameId===null&&(this._animationFrameId=this._frameManager.requestAnimationFrame(this._draw.bind(this)),this._isFrozen=!1,this._eventManager.dispatch({type:"unfreeze"}));}resize(){if(P&&this._canvas instanceof HTMLCanvasElement){let i=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,{height:d,width:m}=this._canvas.getBoundingClientRect();this._canvas.width=m*i,this._canvas.height=d*i;}this._dotLottieCore?.resize(this._canvas.width,this._canvas.height)&&this._render();}setSegment(C,i){this._dotLottieCore===null||Y._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),segment:tg([C,i],Y._wasmModule)});}setMode(C){this._dotLottieCore===null||Y._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),mode:Ag(C,Y._wasmModule)});}setRenderConfig(C){this._renderConfig=C;}loadAnimation(C){if(this._dotLottieCore===null||this._dotLottieCore.activeAnimationId()===C)return;this._dotLottieCore.loadAnimation(C,this._canvas.width,this._canvas.height)?(this._eventManager.dispatch({type:"load"}),this.resize()):this._eventManager.dispatch({type:"loadError",error:new Error(`Failed to animation :${C}`)});}setMarker(C){this._dotLottieCore!==null&&this._dotLottieCore.setConfig({...this._dotLottieCore.config(),marker:C});}markers(){let C=this._dotLottieCore?.markers();if(C){let i=[];for(let d=0;d<C.size();d+=1){let m=C.get(d);i.push({name:m.name,time:m.time,duration:m.duration});}return i}return []}loadTheme(C){if(this._dotLottieCore===null)return !1;let i=this._dotLottieCore.loadTheme(C);return this._render(),i}loadThemeData(C){if(this._dotLottieCore===null)return !1;let i=this._dotLottieCore.loadThemeData(C);return this._render(),i}setLayout(C){this._dotLottieCore===null||Y._wasmModule===null||this._dotLottieCore.setConfig({...this._dotLottieCore.config(),layout:{align:eg(C.align,Y._wasmModule),fit:ig(C.fit,Y._wasmModule)}});}setViewport(C,i,d,m){return this._dotLottieCore===null?!1:this._dotLottieCore.setViewport(C,i,d,m)}static setWasmUrl(C){_.setWasmUrl(C);}loadStateMachine(C){return this._dotLottieCore?.loadStateMachine(C)??!1}startStateMachine(){let C=this._dotLottieCore?.startStateMachine()??!1;return C&&this._setupStateMachineListeners(),C}stopStateMachine(){let C=this._dotLottieCore?.stopStateMachine()??!1;return C&&this._cleanupStateMachineListeners(),C}_getPointerPosition(C){let i=this._canvas.getBoundingClientRect(),d=this._canvas.width/i.width,m=this._canvas.height/i.height,J=this._renderConfig.devicePixelRatio||window.devicePixelRatio||1,M=(C.clientX-i.left)*d/J,T=(C.clientY-i.top)*m/J;return {x:M,y:T}}_onPointerUp(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerUp: ${i} ${d}`);}_onPointerDown(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerDown: ${i} ${d}`);}_onPointerMove(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerMove: ${i} ${d}`);}_onPointerEnter(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerEnter: ${i} ${d}`);}_onPointerLeave(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerExit: ${i} ${d}`);}_onComplete(){this.postStateMachineEvent("OnComplete");}postStateMachineEvent(C){let i=this._dotLottieCore?.postEventPayload(C)??1;return i===2?this.play():i===3?this.pause():i===4&&this._render(),i}getStateMachineListeners(){if(!this._dotLottieCore)return [];let C=this._dotLottieCore.stateMachineFrameworkSetup(),i=[];for(let d=0;d<C.size();d+=1)i.push(C.get(d));return i}_setupStateMachineListeners(){if(P&&this._canvas instanceof HTMLCanvasElement&&this._dotLottieCore!==null&&this.isLoaded){let C=this.getStateMachineListeners();C.includes("PointerUp")&&this._canvas.addEventListener("pointerup",this._onPointerUp.bind(this)),C.includes("PointerDown")&&this._canvas.addEventListener("pointerdown",this._onPointerDown.bind(this)),C.includes("PointerMove")&&this._canvas.addEventListener("pointermove",this._onPointerMove.bind(this)),C.includes("PointerEnter")&&this._canvas.addEventListener("pointerenter",this._onPointerEnter.bind(this)),C.includes("PointerExit")&&this._canvas.addEventListener("pointerleave",this._onPointerLeave.bind(this)),C.includes("Complete")&&this.addEventListener("complete",this._onComplete.bind(this));}}_cleanupStateMachineListeners(){P&&this._canvas instanceof HTMLCanvasElement&&(this._canvas.removeEventListener("pointerup",this._onPointerUp.bind(this)),this._canvas.removeEventListener("pointerdown",this._onPointerDown.bind(this)),this._canvas.removeEventListener("pointermove",this._onPointerMove.bind(this)),this._canvas.removeEventListener("pointerenter",this._onPointerEnter.bind(this)),this._canvas.removeEventListener("pointerleave",this._onPointerLeave.bind(this)),this.removeEventListener("complete",this._onComplete.bind(this)));}loadStateMachineData(C){return this._dotLottieCore?.loadStateMachineData(C)??!1}animationSize(){let C=this._dotLottieCore?.animationSize().get(0)??0,i=this._dotLottieCore?.animationSize().get(1)??0;return {width:C,height:i}}setStateMachineBooleanContext(C,i){return this._dotLottieCore?.setStateMachineBooleanContext(C,i)??!1}setStateMachineNumericContext(C,i){return this._dotLottieCore?.setStateMachineNumericContext(C,i)??!1}setStateMachineStringContext(C,i){return this._dotLottieCore?.setStateMachineStringContext(C,i)??!1}};B(Y,"_wasmModule",null);var Ug=Y;var hI=class extends Worker{constructor(){super("data:application/javascript;base64,InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOwogIHZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gInN5bWJvbCIgPyBrZXkgKyAiIiA6IGtleSwgdmFsdWUpOwoKICAvLyBzcmMvYW5pbWF0aW9uLWZyYW1lLW1hbmFnZXIudHMKICB2YXIgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykgewogICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgIH0KICB9OwogIHZhciBOb2RlQW5pbWF0aW9uRnJhbWVTdHJhdGVneSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfbGFzdEhhbmRsZUlkIiwgMCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9sYXN0SW1tZWRpYXRlIiwgbnVsbCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgaWYgKHRoaXMuX2xhc3RIYW5kbGVJZCA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgewogICAgICAgIHRoaXMuX2xhc3RIYW5kbGVJZCA9IDA7CiAgICAgIH0KICAgICAgdGhpcy5fbGFzdEhhbmRsZUlkICs9IDE7CiAgICAgIHRoaXMuX2xhc3RJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGUoKCkgPT4gewogICAgICAgIGNhbGxiYWNrKERhdGUubm93KCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMuX2xhc3RIYW5kbGVJZDsKICAgIH0KICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF9pZCkgewogICAgICBpZiAodGhpcy5fbGFzdEltbWVkaWF0ZSkgewogICAgICAgIGNsZWFySW1tZWRpYXRlKHRoaXMuX2xhc3RJbW1lZGlhdGUpOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgQW5pbWF0aW9uRnJhbWVNYW5hZ2VyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9zdHJhdGVneSIpOwogICAgICB0aGlzLl9zdHJhdGVneSA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICJmdW5jdGlvbiIgPyBuZXcgV2ViQW5pbWF0aW9uRnJhbWVTdHJhdGVneSgpIDogbmV3IE5vZGVBbmltYXRpb25GcmFtZVN0cmF0ZWd5KCk7CiAgICB9CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHRoaXMuX3N0cmF0ZWd5LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7CiAgICB9CiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkgewogICAgICB0aGlzLl9zdHJhdGVneS5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICB9CiAgfTsKCiAgLy8gc3JjL2NvbnN0YW50cy50cwogIHZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gInVuZGVmaW5lZCI7CiAgdmFyIFpJUF9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbODAsIDc1LCAzLCA0XSk7CiAgdmFyIExPVFRJRV9KU09OX01BTkRBVE9SWV9GSUVMRFMgPSBbInYiLCAiaXAiLCAib3AiLCAibGF5ZXJzIiwgImZyIiwgInciLCAiaCJdOwogIHZhciBQQUNLQUdFX1ZFUlNJT04gPSAiMC4zMC4wIjsKICB2YXIgUEFDS0FHRV9OQU1FID0gIkBsb3R0aWVmaWxlcy9kb3Rsb3R0aWUtd2ViIjsKCiAgLy8gc3JjL2NvcmUvZG90bG90dGllLXBsYXllci5qcwogIHZhciBjcmVhdGVEb3RMb3R0aWVQbGF5ZXJNb2R1bGUgPSAoKCkgPT4gewogICAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT0gInVuZGVmaW5lZCIgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0Py5zcmMgOiB2b2lkIDA7CiAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHsKICAgICAgdmFyIGsgPSBtb2R1bGVBcmcsIGFhLCBiYSwgcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKGEsIGIpID0+IHsKICAgICAgICBhYSA9IGE7CiAgICAgICAgYmEgPSBiOwogICAgICB9KSwgY2EgPSBPYmplY3QuYXNzaWduKHt9LCBrKSwgZGEgPSAiLi90aGlzLnByb2dyYW0iLCB0ID0gIiI7CiAgICAgICJ1bmRlZmluZWQiICE9IHR5cGVvZiBkb2N1bWVudCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmICh0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpOwogICAgICBfc2NyaXB0RGlyICYmICh0ID0gX3NjcmlwdERpcik7CiAgICAgIHQuc3RhcnRzV2l0aCgiYmxvYjoiKSA/IHQgPSAiIiA6IHQgPSB0LnN1YnN0cigwLCB0LnJlcGxhY2UoL1s/I10uKi8sICIiKS5sYXN0SW5kZXhPZigiLyIpICsgMSk7CiAgICAgIHZhciBlYSA9IGsucHJpbnQgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKSwgdyA9IGsucHJpbnRFcnIgfHwgY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpOwogICAgICBPYmplY3QuYXNzaWduKGssIGNhKTsKICAgICAgY2EgPSBudWxsOwogICAgICBrLnRoaXNQcm9ncmFtICYmIChkYSA9IGsudGhpc1Byb2dyYW0pOwogICAgICB2YXIgeDsKICAgICAgay53YXNtQmluYXJ5ICYmICh4ID0gay53YXNtQmluYXJ5KTsKICAgICAgdmFyIGZhLCBoYSA9IGZhbHNlLCB5LCBBLCBCLCBDLCBFLCBGLCBqYSwga2E7CiAgICAgIGZ1bmN0aW9uIGxhKCkgewogICAgICAgIHZhciBhID0gZmEuYnVmZmVyOwogICAgICAgIGsuSEVBUDggPSB5ID0gbmV3IEludDhBcnJheShhKTsKICAgICAgICBrLkhFQVAxNiA9IEIgPSBuZXcgSW50MTZBcnJheShhKTsKICAgICAgICBrLkhFQVBVOCA9IEEgPSBuZXcgVWludDhBcnJheShhKTsKICAgICAgICBrLkhFQVBVMTYgPSBDID0gbmV3IFVpbnQxNkFycmF5KGEpOwogICAgICAgIGsuSEVBUDMyID0gRSA9IG5ldyBJbnQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUFUzMiA9IEYgPSBuZXcgVWludDMyQXJyYXkoYSk7CiAgICAgICAgay5IRUFQRjMyID0gamEgPSBuZXcgRmxvYXQzMkFycmF5KGEpOwogICAgICAgIGsuSEVBUEY2NCA9IGthID0gbmV3IEZsb2F0NjRBcnJheShhKTsKICAgICAgfQogICAgICB2YXIgbWEgPSBbXSwgbmEgPSBbXSwgb2EgPSBbXTsKICAgICAgZnVuY3Rpb24gcGEoKSB7CiAgICAgICAgdmFyIGEgPSBrLnByZVJ1bi5zaGlmdCgpOwogICAgICAgIG1hLnVuc2hpZnQoYSk7CiAgICAgIH0KICAgICAgdmFyIEcgPSAwLCBxYSA9IG51bGwsIEggPSBudWxsOwogICAgICBmdW5jdGlvbiByYShhKSB7CiAgICAgICAgay5vbkFib3J0Py4oYSk7CiAgICAgICAgYSA9ICJBYm9ydGVkKCIgKyBhICsgIikiOwogICAgICAgIHcoYSk7CiAgICAgICAgaGEgPSB0cnVlOwogICAgICAgIGEgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGEgKyAiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpOwogICAgICAgIGJhKGEpOwogICAgICAgIHRocm93IGE7CiAgICAgIH0KICAgICAgdmFyIHNhID0gKGEpID0+IGEuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpLCBJOwogICAgICBJID0gIkRvdExvdHRpZVBsYXllci53YXNtIjsKICAgICAgaWYgKCFzYShJKSkgewogICAgICAgIHZhciB0YSA9IEk7CiAgICAgICAgSSA9IGsubG9jYXRlRmlsZSA/IGsubG9jYXRlRmlsZSh0YSwgdCkgOiB0ICsgdGE7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdWEoYSkgewogICAgICAgIGlmIChhID09IEkgJiYgeCkgcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpOwogICAgICAgIHRocm93ICJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCI7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gdmEoYSkgewogICAgICAgIHJldHVybiB4IHx8ICJmdW5jdGlvbiIgIT0gdHlwZW9mIGZldGNoID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB1YShhKSkgOiBmZXRjaChhLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pLnRoZW4oKGIpID0+IHsKICAgICAgICAgIGlmICghYi5vaykgdGhyb3cgYGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7YX0nYDsKICAgICAgICAgIHJldHVybiBiLmFycmF5QnVmZmVyKCk7CiAgICAgICAgfSkuY2F0Y2goKCkgPT4gdWEoYSkpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHdhKGEsIGIsIGMpIHsKICAgICAgICByZXR1cm4gdmEoYSkudGhlbigoZCkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZCwgYikpLnRoZW4oYywgKGQpID0+IHsKICAgICAgICAgIHcoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7ZH1gKTsKICAgICAgICAgIHJhKGQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHhhKGEsIGIpIHsKICAgICAgICB2YXIgYyA9IEk7CiAgICAgICAgcmV0dXJuIHggfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgfHwgc2EoYykgfHwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgZmV0Y2ggPyB3YShjLCBhLCBiKSA6IGZldGNoKGMsIHsgY3JlZGVudGlhbHM6ICJzYW1lLW9yaWdpbiIgfSkudGhlbigKICAgICAgICAgIChkKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhkLCBhKS50aGVuKGIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdyhgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKTsKICAgICAgICAgICAgdygiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKTsKICAgICAgICAgICAgcmV0dXJuIHdhKGMsIGEsIGIpOwogICAgICAgICAgfSkKICAgICAgICApOwogICAgICB9CiAgICAgIHZhciB5YSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IDAgPCBhLmxlbmd0aDsgKSBhLnNoaWZ0KCkoayk7CiAgICAgIH0sIHphID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGY4IikgOiB2b2lkIDAsIEogPSAoYSwgYiwgYykgPT4gewogICAgICAgIHZhciBkID0gYiArIGM7CiAgICAgICAgZm9yIChjID0gYjsgYVtjXSAmJiAhKGMgPj0gZCk7ICkgKytjOwogICAgICAgIGlmICgxNiA8IGMgLSBiICYmIGEuYnVmZmVyICYmIHphKSByZXR1cm4gemEuZGVjb2RlKGEuc3ViYXJyYXkoYiwgYykpOwogICAgICAgIGZvciAoZCA9ICIiOyBiIDwgYzsgKSB7CiAgICAgICAgICB2YXIgZSA9IGFbYisrXTsKICAgICAgICAgIGlmIChlICYgMTI4KSB7CiAgICAgICAgICAgIHZhciBmID0gYVtiKytdICYgNjM7CiAgICAgICAgICAgIGlmICgxOTIgPT0gKGUgJiAyMjQpKSBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGUgJiAzMSkgPDwgNiB8IGYpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbCA9IGFbYisrXSAmIDYzOwogICAgICAgICAgICAgIGUgPSAyMjQgPT0gKGUgJiAyNDApID8gKGUgJiAxNSkgPDwgMTIgfCBmIDw8IDYgfCBsIDogKGUgJiA3KSA8PCAxOCB8IGYgPDwgMTIgfCBsIDw8IDYgfCBhW2IrK10gJiA2MzsKICAgICAgICAgICAgICA2NTUzNiA+IGUgPyBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSkgOiAoZSAtPSA2NTUzNiwgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2IHwgZSA+PiAxMCwgNTYzMjAgfCBlICYgMTAyMykpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZDsKICAgICAgfTsKICAgICAgY2xhc3MgQWEgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHRoaXMueWEgPSBhIC0gMjQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBCYSA9IDAsIENhID0gMCwgRGEgPSAoYSkgPT4gewogICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gMDsgYyA8IGEubGVuZ3RoOyArK2MpIHsKICAgICAgICAgIHZhciBkID0gYS5jaGFyQ29kZUF0KGMpOwogICAgICAgICAgMTI3ID49IGQgPyBiKysgOiAyMDQ3ID49IGQgPyBiICs9IDIgOiA1NTI5NiA8PSBkICYmIDU3MzQzID49IGQgPyAoYiArPSA0LCArK2MpIDogYiArPSAzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgRWEgPSAoYSwgYiwgYywgZCkgPT4gewogICAgICAgIGlmICgwIDwgZCkgewogICAgICAgICAgZCA9IGMgKyBkIC0gMTsKICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYS5sZW5ndGg7ICsrZSkgewogICAgICAgICAgICB2YXIgZiA9IGEuY2hhckNvZGVBdChlKTsKICAgICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICAgIHZhciBsID0gYS5jaGFyQ29kZUF0KCsrZSk7CiAgICAgICAgICAgICAgZiA9IDY1NTM2ICsgKChmICYgMTAyMykgPDwgMTApIHwgbCAmIDEwMjM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDEyNyA+PSBmKSB7CiAgICAgICAgICAgICAgaWYgKGMgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgYltjKytdID0gZjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoMjA0NyA+PSBmKSB7CiAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZCkgYnJlYWs7CiAgICAgICAgICAgICAgICBiW2MrK10gPSAxOTIgfCBmID4+IDY7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICg2NTUzNSA+PSBmKSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMiA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjI0IHwgZiA+PiAxMjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGlmIChjICsgMyA+PSBkKSBicmVhazsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMjQwIHwgZiA+PiAxODsKICAgICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiAxMiAmIDYzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYltjKytdID0gMTI4IHwgZiA+PiA2ICYgNjM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJbYysrXSA9IDEyOCB8IGYgJiA2MzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYltjXSA9IDA7CiAgICAgICAgfQogICAgICB9LCBGYSA9IHt9LCBHYSA9IChhKSA9PiB7CiAgICAgICAgZm9yICg7IGEubGVuZ3RoOyApIHsKICAgICAgICAgIHZhciBiID0gYS5wb3AoKTsKICAgICAgICAgIGEucG9wKCkoYik7CiAgICAgICAgfQogICAgICB9OwogICAgICBmdW5jdGlvbiBLKGEpIHsKICAgICAgICByZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRlthID4+IDJdKTsKICAgICAgfQogICAgICB2YXIgTCA9IHt9LCBNID0ge30sIEhhID0ge30sIElhLCBQID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBmdW5jdGlvbiBkKGgpIHsKICAgICAgICAgIGggPSBjKGgpOwogICAgICAgICAgaWYgKGgubGVuZ3RoICE9PSBhLmxlbmd0aCkgdGhyb3cgbmV3IElhKCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7CiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGEubGVuZ3RoOyArK24pIE8oYVtuXSwgaFtuXSk7CiAgICAgICAgfQogICAgICAgIGEuZm9yRWFjaChmdW5jdGlvbihoKSB7CiAgICAgICAgICBIYVtoXSA9IGI7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGUgPSBBcnJheShiLmxlbmd0aCksIGYgPSBbXSwgbCA9IDA7CiAgICAgICAgYi5mb3JFYWNoKChoLCBuKSA9PiB7CiAgICAgICAgICBNLmhhc093blByb3BlcnR5KGgpID8gZVtuXSA9IE1baF0gOiAoZi5wdXNoKGgpLCBMLmhhc093blByb3BlcnR5KGgpIHx8IChMW2hdID0gW10pLCBMW2hdLnB1c2goKCkgPT4gewogICAgICAgICAgICBlW25dID0gTVtoXTsKICAgICAgICAgICAgKytsOwogICAgICAgICAgICBsID09PSBmLmxlbmd0aCAmJiBkKGUpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pOwogICAgICAgIDAgPT09IGYubGVuZ3RoICYmIGQoZSk7CiAgICAgIH0sIEphLCBRID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gIiI7IEFbYV07ICkgYiArPSBKYVtBW2ErK11dOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBSOwogICAgICBmdW5jdGlvbiBLYShhLCBiLCBjID0ge30pIHsKICAgICAgICB2YXIgZCA9IGIubmFtZTsKICAgICAgICBpZiAoIWEpIHRocm93IG5ldyBSKGB0eXBlICIke2R9IiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyYCk7CiAgICAgICAgaWYgKE0uaGFzT3duUHJvcGVydHkoYSkpIHsKICAgICAgICAgIGlmIChjLmliKSByZXR1cm47CiAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJyR7ZH0nIHR3aWNlYCk7CiAgICAgICAgfQogICAgICAgIE1bYV0gPSBiOwogICAgICAgIGRlbGV0ZSBIYVthXTsKICAgICAgICBMLmhhc093blByb3BlcnR5KGEpICYmIChiID0gTFthXSwgZGVsZXRlIExbYV0sIGIuZm9yRWFjaCgoZSkgPT4gZSgpKSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gTyhhLCBiLCBjID0ge30pIHsKICAgICAgICBpZiAoISgiYXJnUGFja0FkdmFuY2UiIGluIGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7CiAgICAgICAgcmV0dXJuIEthKGEsIGIsIGMpOwogICAgICB9CiAgICAgIHZhciBMYSA9IChhKSA9PiB7CiAgICAgICAgdGhyb3cgbmV3IFIoYS5tYS56YS54YS5uYW1lICsgIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKTsKICAgICAgfSwgTWEgPSBmYWxzZSwgT2EgPSAoKSA9PiB7CiAgICAgIH0sIFBhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoYiA9PT0gYykgcmV0dXJuIGE7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYy5DYSkgcmV0dXJuIG51bGw7CiAgICAgICAgYSA9IFBhKGEsIGIsIGMuQ2EpOwogICAgICAgIHJldHVybiBudWxsID09PSBhID8gbnVsbCA6IGMuYWIoYSk7CiAgICAgIH0sIFFhID0ge30sIFJhID0gW10sIFNhID0gKCkgPT4gewogICAgICAgIGZvciAoOyBSYS5sZW5ndGg7ICkgewogICAgICAgICAgdmFyIGEgPSBSYS5wb3AoKTsKICAgICAgICAgIGEubWEuS2EgPSBmYWxzZTsKICAgICAgICAgIGFbImRlbGV0ZSJdKCk7CiAgICAgICAgfQogICAgICB9LCBUYSwgVWEgPSB7fSwgVmEgPSAoYSwgYikgPT4gewogICAgICAgIGlmICh2b2lkIDAgPT09IGIpIHRocm93IG5ldyBSKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTsKICAgICAgICBmb3IgKDsgYS5DYTsgKSBiID0gYS5OYShiKSwgYSA9IGEuQ2E7CiAgICAgICAgcmV0dXJuIFVhW2JdOwogICAgICB9LCBYYSA9IChhLCBiKSA9PiB7CiAgICAgICAgaWYgKCFiLnphIHx8ICFiLnlhKSB0aHJvdyBuZXcgSWEoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTsKICAgICAgICBpZiAoISFiLkRhICE9PSAhIWIuQWEpIHRocm93IG5ldyBJYSgiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIik7CiAgICAgICAgYi5jb3VudCA9IHsgdmFsdWU6IDEgfTsKICAgICAgICByZXR1cm4gV2EoT2JqZWN0LmNyZWF0ZShhLCB7IG1hOiB7IHZhbHVlOiBiLCB3cml0YWJsZTogdHJ1ZSB9IH0pKTsKICAgICAgfSwgV2EgPSAoYSkgPT4gewogICAgICAgIGlmICgidW5kZWZpbmVkIiA9PT0gdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5KSByZXR1cm4gV2EgPSAoYikgPT4gYiwgYTsKICAgICAgICBNYSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoYikgPT4gewogICAgICAgICAgYiA9IGIubWE7CiAgICAgICAgICAtLWIuY291bnQudmFsdWU7CiAgICAgICAgICAwID09PSBiLmNvdW50LnZhbHVlICYmIChiLkFhID8gYi5EYS5GYShiLkFhKSA6IGIuemEueGEuRmEoYi55YSkpOwogICAgICAgIH0pOwogICAgICAgIFdhID0gKGIpID0+IHsKICAgICAgICAgIHZhciBjID0gYi5tYTsKICAgICAgICAgIGMuQWEgJiYgTWEucmVnaXN0ZXIoYiwgeyBtYTogYyB9LCBiKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH07CiAgICAgICAgT2EgPSAoYikgPT4gewogICAgICAgICAgTWEudW5yZWdpc3RlcihiKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBXYShhKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gWWEoKSB7CiAgICAgIH0KICAgICAgdmFyIFphID0gKGEsIGIpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCAibmFtZSIsIHsgdmFsdWU6IGEgfSksICRhID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAodm9pZCAwID09PSBhW2JdLkJhKSB7CiAgICAgICAgICB2YXIgZCA9IGFbYl07CiAgICAgICAgICBhW2JdID0gZnVuY3Rpb24oLi4uZSkgewogICAgICAgICAgICBpZiAoIWFbYl0uQmEuaGFzT3duUHJvcGVydHkoZS5sZW5ndGgpKQogICAgICAgICAgICAgIHRocm93IG5ldyBSKAogICAgICAgICAgICAgICAgYEZ1bmN0aW9uICcke2N9JyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCR7ZS5sZW5ndGh9KSAtIGV4cGVjdHMgb25lIG9mICgke2FbYl0uQmF9KSFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGFbYl0uQmFbZS5sZW5ndGhdLmFwcGx5KHRoaXMsIGUpOwogICAgICAgICAgfTsKICAgICAgICAgIGFbYl0uQmEgPSBbXTsKICAgICAgICAgIGFbYl0uQmFbZC5PYV0gPSBkOwogICAgICAgIH0KICAgICAgfSwgYWIgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGEpKSB7CiAgICAgICAgICBpZiAodm9pZCAwID09PSBjIHx8IHZvaWQgMCAhPT0ga1thXS5CYSAmJiB2b2lkIDAgIT09IGtbYV0uQmFbY10pCiAgICAgICAgICAgIHRocm93IG5ldyBSKGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7YX0nIHR3aWNlYCk7CiAgICAgICAgICAkYShrLCBhLCBhKTsKICAgICAgICAgIGlmIChrLmhhc093blByb3BlcnR5KGMpKQogICAgICAgICAgICB0aHJvdyBuZXcgUihgQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHtjfSkhYCk7CiAgICAgICAgICBrW2FdLkJhW2NdID0gYjsKICAgICAgICB9IGVsc2Uga1thXSA9IGIsIHZvaWQgMCAhPT0gYyAmJiAoa1thXS52YiA9IGMpOwogICAgICB9LCBiYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gYSkgcmV0dXJuICJfdW5rbm93biI7CiAgICAgICAgYSA9IGEucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAiJCIpOwogICAgICAgIHZhciBiID0gYS5jaGFyQ29kZUF0KDApOwogICAgICAgIHJldHVybiA0OCA8PSBiICYmIDU3ID49IGIgPyBgXyR7YX1gIDogYTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gY2IoYSwgYiwgYywgZCwgZSwgZiwgbCwgaCkgewogICAgICAgIHRoaXMubmFtZSA9IGE7CiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGI7CiAgICAgICAgdGhpcy5MYSA9IGM7CiAgICAgICAgdGhpcy5GYSA9IGQ7CiAgICAgICAgdGhpcy5DYSA9IGU7CiAgICAgICAgdGhpcy5jYiA9IGY7CiAgICAgICAgdGhpcy5OYSA9IGw7CiAgICAgICAgdGhpcy5hYiA9IGg7CiAgICAgICAgdGhpcy5rYiA9IFtdOwogICAgICB9CiAgICAgIHZhciBkYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgZm9yICg7IGIgIT09IGM7ICkgewogICAgICAgICAgaWYgKCFiLk5hKSB0aHJvdyBuZXcgUihgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke2MubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke2IubmFtZX1gKTsKICAgICAgICAgIGEgPSBiLk5hKGEpOwogICAgICAgICAgYiA9IGIuQ2E7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBmdW5jdGlvbiBlYihhLCBiKSB7CiAgICAgICAgaWYgKG51bGwgPT09IGIpIHsKICAgICAgICAgIGlmICh0aGlzLlRhKSB0aHJvdyBuZXcgUihgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgcmV0dXJuIGRiKGIubWEueWEsIGIubWEuemEueGEsIHRoaXMueGEpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdiKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgaWYgKHRoaXMuUWEpIHsKICAgICAgICAgICAgdmFyIGMgPSB0aGlzLlVhKCk7CiAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoIWIgfHwgIWIubWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyAiJHtmYihiKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCFiLm1hLnlhKSB0aHJvdyBuZXcgUihgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7CiAgICAgICAgaWYgKCF0aGlzLlBhICYmIGIubWEuemEuUGEpCiAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICApOwogICAgICAgIGMgPSBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgICBpZiAodGhpcy5RYSkgewogICAgICAgICAgaWYgKHZvaWQgMCA9PT0gYi5tYS5BYSkgdGhyb3cgbmV3IFIoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIik7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGIpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmIChiLm1hLkRhID09PSB0aGlzKSBjID0gYi5tYS5BYTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLkRhID8gYi5tYS5EYS5uYW1lIDogYi5tYS56YS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBpZiAoYi5tYS5EYSA9PT0gdGhpcykgYyA9IGIubWEuQWE7CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IGIuY2xvbmUoKTsKICAgICAgICAgICAgICAgIGMgPSB0aGlzLmxiKAogICAgICAgICAgICAgICAgICBjLAogICAgICAgICAgICAgICAgICBoYigoKSA9PiBkWyJkZWxldGUiXSgpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG51bGwgIT09IGEgJiYgYS5wdXNoKHRoaXMuRmEsIGMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGliKGEsIGIpIHsKICAgICAgICBpZiAobnVsbCA9PT0gYikgewogICAgICAgICAgaWYgKHRoaXMuVGEpIHRocm93IG5ldyBSKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmICghYi5tYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBwYXNzICIke2ZiKGIpfSIgYXMgYSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoIWIubWEueWEpIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKTsKICAgICAgICBpZiAoYi5tYS56YS5QYSkgdGhyb3cgbmV3IFIoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtiLm1hLnphLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApOwogICAgICAgIHJldHVybiBkYihiLm1hLnlhLCBiLm1hLnphLnhhLCB0aGlzLnhhKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBqYihhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtLCBwKSB7CiAgICAgICAgdGhpcy5uYW1lID0gYTsKICAgICAgICB0aGlzLnhhID0gYjsKICAgICAgICB0aGlzLlRhID0gYzsKICAgICAgICB0aGlzLlBhID0gZDsKICAgICAgICB0aGlzLlFhID0gZTsKICAgICAgICB0aGlzLmpiID0gZjsKICAgICAgICB0aGlzLnBiID0gbDsKICAgICAgICB0aGlzLlphID0gaDsKICAgICAgICB0aGlzLlVhID0gbjsKICAgICAgICB0aGlzLmxiID0gbTsKICAgICAgICB0aGlzLkZhID0gcDsKICAgICAgICBlIHx8IHZvaWQgMCAhPT0gYi5DYSA/IHRoaXMudG9XaXJlVHlwZSA9IGdiIDogKHRoaXMudG9XaXJlVHlwZSA9IGQgPyBlYiA6IGliLCB0aGlzLkVhID0gbnVsbCk7CiAgICAgIH0KICAgICAgdmFyIGtiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBpZiAoIWsuaGFzT3duUHJvcGVydHkoYSkpIHRocm93IG5ldyBJYSgiUmVwbGFjaW5nIG5vbmV4aXN0ZW50IHB1YmxpYyBzeW1ib2wiKTsKICAgICAgICB2b2lkIDAgIT09IGtbYV0uQmEgJiYgdm9pZCAwICE9PSBjID8ga1thXS5CYVtjXSA9IGIgOiAoa1thXSA9IGIsIGtbYV0uT2EgPSBjKTsKICAgICAgfSwgUywgbGIgPSAoYSwgYiwgYyA9IFtdKSA9PiB7CiAgICAgICAgYS5pbmNsdWRlcygiaiIpID8gKGEgPSBhLnJlcGxhY2UoL3AvZywgImkiKSwgYiA9ICgwLCBrWyJkeW5DYWxsXyIgKyBhXSkoYiwgLi4uYykpIDogYiA9IFMuZ2V0KGIpKC4uLmMpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBtYiA9IChhLCBiKSA9PiAoLi4uYykgPT4gbGIoYSwgYiwgYyksIFQgPSAoYSwgYikgPT4gewogICAgICAgIGEgPSBRKGEpOwogICAgICAgIHZhciBjID0gYS5pbmNsdWRlcygiaiIpID8gbWIoYSwgYikgOiBTLmdldChiKTsKICAgICAgICBpZiAoImZ1bmN0aW9uIiAhPSB0eXBlb2YgYykgdGhyb3cgbmV3IFIoYHVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAke2F9OiAke2J9YCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIG5iLCBwYiA9IChhKSA9PiB7CiAgICAgICAgYSA9IG9iKGEpOwogICAgICAgIHZhciBiID0gUShhKTsKICAgICAgICBVKGEpOwogICAgICAgIHJldHVybiBiOwogICAgICB9LCBxYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gYyhmKSB7CiAgICAgICAgICBlW2ZdIHx8IE1bZl0gfHwgKEhhW2ZdID8gSGFbZl0uZm9yRWFjaChjKSA6IChkLnB1c2goZiksIGVbZl0gPSB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIHZhciBkID0gW10sIGUgPSB7fTsKICAgICAgICBiLmZvckVhY2goYyk7CiAgICAgICAgdGhyb3cgbmV3IG5iKGAke2F9OiBgICsgZC5tYXAocGIpLmpvaW4oWyIsICJdKSk7CiAgICAgIH0sIHJiID0gKGEsIGIpID0+IHsKICAgICAgICBmb3IgKHZhciBjID0gW10sIGQgPSAwOyBkIDwgYTsgZCsrKSBjLnB1c2goRltiICsgNCAqIGQgPj4gMl0pOwogICAgICAgIHJldHVybiBjOwogICAgICB9OwogICAgICBmdW5jdGlvbiBzYihhKSB7CiAgICAgICAgZm9yICh2YXIgYiA9IDE7IGIgPCBhLmxlbmd0aDsgKytiKSBpZiAobnVsbCAhPT0gYVtiXSAmJiB2b2lkIDAgPT09IGFbYl0uRWEpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmdW5jdGlvbiB0YihhLCBiLCBjLCBkLCBlKSB7CiAgICAgICAgdmFyIGYgPSBiLmxlbmd0aDsKICAgICAgICBpZiAoMiA+IGYpIHRocm93IG5ldyBSKCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyEiKTsKICAgICAgICB2YXIgbCA9IG51bGwgIT09IGJbMV0gJiYgbnVsbCAhPT0gYywgaCA9IHNiKGIpLCBuID0gInZvaWQiICE9PSBiWzBdLm5hbWUsIG0gPSBmIC0gMiwgcCA9IEFycmF5KG0pLCB1ID0gW10sIHYgPSBbXTsKICAgICAgICByZXR1cm4gWmEoYSwgZnVuY3Rpb24oLi4uZykgewogICAgICAgICAgaWYgKGcubGVuZ3RoICE9PSBtKSB0aHJvdyBuZXcgUihgZnVuY3Rpb24gJHthfSBjYWxsZWQgd2l0aCAke2cubGVuZ3RofSBhcmd1bWVudHMsIGV4cGVjdGVkICR7bX1gKTsKICAgICAgICAgIHYubGVuZ3RoID0gMDsKICAgICAgICAgIHUubGVuZ3RoID0gbCA/IDIgOiAxOwogICAgICAgICAgdVswXSA9IGU7CiAgICAgICAgICBpZiAobCkgewogICAgICAgICAgICB2YXIgcSA9IGJbMV0udG9XaXJlVHlwZSh2LCB0aGlzKTsKICAgICAgICAgICAgdVsxXSA9IHE7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IG07ICsrcikgcFtyXSA9IGJbciArIDJdLnRvV2lyZVR5cGUodiwgZ1tyXSksIHUucHVzaChwW3JdKTsKICAgICAgICAgIGcgPSBkKC4uLnUpOwogICAgICAgICAgaWYgKGgpIEdhKHYpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBmb3IgKHIgPSBsID8gMSA6IDI7IHIgPCBiLmxlbmd0aDsgcisrKSB7CiAgICAgICAgICAgICAgdmFyIHogPSAxID09PSByID8gcSA6IHBbciAtIDJdOwogICAgICAgICAgICAgIG51bGwgIT09IGJbcl0uRWEgJiYgYltyXS5FYSh6KTsKICAgICAgICAgICAgfQogICAgICAgICAgcSA9IG4gPyBiWzBdLmZyb21XaXJlVHlwZShnKSA6IHZvaWQgMDsKICAgICAgICAgIHJldHVybiBxOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHZhciB1YiA9IChhKSA9PiB7CiAgICAgICAgYSA9IGEudHJpbSgpOwogICAgICAgIGNvbnN0IGIgPSBhLmluZGV4T2YoIigiKTsKICAgICAgICByZXR1cm4gLTEgIT09IGIgPyBhLnN1YnN0cigwLCBiKSA6IGE7CiAgICAgIH0sIHZiID0gW10sIFYgPSBbXSwgd2IgPSAoYSkgPT4gewogICAgICAgIDkgPCBhICYmIDAgPT09IC0tVlthICsgMV0gJiYgKFZbYV0gPSB2b2lkIDAsIHZiLnB1c2goYSkpOwogICAgICB9LCB5YiA9IChhKSA9PiB7CiAgICAgICAgaWYgKCFhKSB0aHJvdyBuZXcgUigiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gIiArIGEpOwogICAgICAgIHJldHVybiBWW2FdOwogICAgICB9LCBoYiA9IChhKSA9PiB7CiAgICAgICAgc3dpdGNoIChhKSB7CiAgICAgICAgICBjYXNlIHZvaWQgMDoKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICBjYXNlIG51bGw6CiAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICByZXR1cm4gNjsKICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIHJldHVybiA4OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgY29uc3QgYiA9IHZiLnBvcCgpIHx8IFYubGVuZ3RoOwogICAgICAgICAgICBWW2JdID0gYTsKICAgICAgICAgICAgVltiICsgMV0gPSAxOwogICAgICAgICAgICByZXR1cm4gYjsKICAgICAgICB9CiAgICAgIH0sIHpiID0gewogICAgICAgIG5hbWU6ICJlbXNjcmlwdGVuOjp2YWwiLAogICAgICAgIGZyb21XaXJlVHlwZTogKGEpID0+IHsKICAgICAgICAgIHZhciBiID0geWIoYSk7CiAgICAgICAgICB3YihhKTsKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH0sCiAgICAgICAgdG9XaXJlVHlwZTogKGEsIGIpID0+IGhiKGIpLAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIEVhOiBudWxsCiAgICAgIH0sIEFiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBzd2l0Y2ggKGIpIHsKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHlbZF0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2RdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEJbZCA+PiAxXSk7CiAgICAgICAgICAgIH0gOiBmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKENbZCA+PiAxXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBjID8gZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShFW2QgPj4gMl0pOwogICAgICAgICAgICB9IDogZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShGW2QgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBpbnRlZ2VyIHdpZHRoICgke2J9KTogJHthfWApOwogICAgICAgIH0KICAgICAgfSwgQmIgPSAoYSwgYikgPT4gewogICAgICAgIHZhciBjID0gTVthXTsKICAgICAgICBpZiAodm9pZCAwID09PSBjKSB0aHJvdyBhID0gYCR7Yn0gaGFzIHVua25vd24gdHlwZSAke3BiKGEpfWAsIG5ldyBSKGEpOwogICAgICAgIHJldHVybiBjOwogICAgICB9LCBmYiA9IChhKSA9PiB7CiAgICAgICAgaWYgKG51bGwgPT09IGEpIHJldHVybiAibnVsbCI7CiAgICAgICAgdmFyIGIgPSB0eXBlb2YgYTsKICAgICAgICByZXR1cm4gIm9iamVjdCIgPT09IGIgfHwgImFycmF5IiA9PT0gYiB8fCAiZnVuY3Rpb24iID09PSBiID8gYS50b1N0cmluZygpIDogIiIgKyBhOwogICAgICB9LCBDYiA9IChhLCBiKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGphW2MgPj4gMl0pOwogICAgICAgICAgICB9OwogICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYykgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShrYVtjID4+IDNdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7Yn0pOiAke2F9YCk7CiAgICAgICAgfQogICAgICB9LCBEYiA9IChhLCBiLCBjKSA9PiB7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiBjID8gKGQpID0+IHlbZF0gOiAoZCkgPT4gQVtkXTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gQltkID4+IDFdIDogKGQpID0+IENbZCA+PiAxXTsKICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gRVtkID4+IDJdIDogKGQpID0+IEZbZCA+PiAyXTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtifSk6ICR7YX1gKTsKICAgICAgICB9CiAgICAgIH0sIEViID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFRleHREZWNvZGVyID8gbmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpIDogdm9pZCAwLCBGYiA9IChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBhID4+IDE7CiAgICAgICAgZm9yICh2YXIgZCA9IGMgKyBiIC8gMjsgIShjID49IGQpICYmIENbY107ICkgKytjOwogICAgICAgIGMgPDw9IDE7CiAgICAgICAgaWYgKDMyIDwgYyAtIGEgJiYgRWIpIHJldHVybiBFYi5kZWNvZGUoQS5zdWJhcnJheShhLCBjKSk7CiAgICAgICAgYyA9ICIiOwogICAgICAgIGZvciAoZCA9IDA7ICEoZCA+PSBiIC8gMik7ICsrZCkgewogICAgICAgICAgdmFyIGUgPSBCW2EgKyAyICogZCA+PiAxXTsKICAgICAgICAgIGlmICgwID09IGUpIGJyZWFrOwogICAgICAgICAgYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYzsKICAgICAgfSwgR2IgPSAoYSwgYiwgYykgPT4gewogICAgICAgIGMgPz8gKGMgPSAyMTQ3NDgzNjQ3KTsKICAgICAgICBpZiAoMiA+IGMpIHJldHVybiAwOwogICAgICAgIGMgLT0gMjsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGMgPCAyICogYS5sZW5ndGggPyBjIC8gMiA6IGEubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYzsgKytlKSBCW2IgPj4gMV0gPSBhLmNoYXJDb2RlQXQoZSksIGIgKz0gMjsKICAgICAgICBCW2IgPj4gMV0gPSAwOwogICAgICAgIHJldHVybiBiIC0gZDsKICAgICAgfSwgSGIgPSAoYSkgPT4gMiAqIGEubGVuZ3RoLCBJYiA9IChhLCBiKSA9PiB7CiAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSAiIjsgIShjID49IGIgLyA0KTsgKSB7CiAgICAgICAgICB2YXIgZSA9IEVbYSArIDQgKiBjID4+IDJdOwogICAgICAgICAgaWYgKDAgPT0gZSkgYnJlYWs7CiAgICAgICAgICArK2M7CiAgICAgICAgICA2NTUzNiA8PSBlID8gKGUgLT0gNjU1MzYsIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGUgPj4gMTAsIDU2MzIwIHwgZSAmIDEwMjMpKSA6IGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGQ7CiAgICAgIH0sIEpiID0gKGEsIGIsIGMpID0+IHsKICAgICAgICBjID8/IChjID0gMjE0NzQ4MzY0Nyk7CiAgICAgICAgaWYgKDQgPiBjKSByZXR1cm4gMDsKICAgICAgICB2YXIgZCA9IGI7CiAgICAgICAgYyA9IGQgKyBjIC0gNDsKICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IGEubGVuZ3RoOyArK2UpIHsKICAgICAgICAgIHZhciBmID0gYS5jaGFyQ29kZUF0KGUpOwogICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikgewogICAgICAgICAgICB2YXIgbCA9IGEuY2hhckNvZGVBdCgrK2UpOwogICAgICAgICAgICBmID0gNjU1MzYgKyAoKGYgJiAxMDIzKSA8PCAxMCkgfCBsICYgMTAyMzsKICAgICAgICAgIH0KICAgICAgICAgIEVbYiA+PiAyXSA9IGY7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgICBpZiAoYiArIDQgPiBjKSBicmVhazsKICAgICAgICB9CiAgICAgICAgRVtiID4+IDJdID0gMDsKICAgICAgICByZXR1cm4gYiAtIGQ7CiAgICAgIH0sIEtiID0gKGEpID0+IHsKICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IDA7IGMgPCBhLmxlbmd0aDsgKytjKSB7CiAgICAgICAgICB2YXIgZCA9IGEuY2hhckNvZGVBdChjKTsKICAgICAgICAgIDU1Mjk2IDw9IGQgJiYgNTczNDMgPj0gZCAmJiArK2M7CiAgICAgICAgICBiICs9IDQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiOwogICAgICB9LCBMYiA9IFtdLCBNYiA9IChhKSA9PiB7CiAgICAgICAgdmFyIGIgPSBMYi5sZW5ndGg7CiAgICAgICAgTGIucHVzaChhKTsKICAgICAgICByZXR1cm4gYjsKICAgICAgfSwgTmIgPSAoYSwgYikgPT4gewogICAgICAgIGZvciAodmFyIGMgPSBBcnJheShhKSwgZCA9IDA7IGQgPCBhOyArK2QpIGNbZF0gPSBCYihGW2IgKyA0ICogZCA+PiAyXSwgInBhcmFtZXRlciAiICsgZCk7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0sIE9iID0gUmVmbGVjdC5jb25zdHJ1Y3QsIFBiID0ge30sIFJiID0gKCkgPT4gewogICAgICAgIGlmICghUWIpIHsKICAgICAgICAgIHZhciBhID0gewogICAgICAgICAgICBVU0VSOiAid2ViX3VzZXIiLAogICAgICAgICAgICBMT0dOQU1FOiAid2ViX3VzZXIiLAogICAgICAgICAgICBQQVRIOiAiLyIsCiAgICAgICAgICAgIFBXRDogIi8iLAogICAgICAgICAgICBIT01FOiAiL2hvbWUvd2ViX3VzZXIiLAogICAgICAgICAgICBMQU5HOiAoIm9iamVjdCIgPT0gdHlwZW9mIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgIkMiKS5yZXBsYWNlKAogICAgICAgICAgICAgICItIiwKICAgICAgICAgICAgICAiXyIKICAgICAgICAgICAgKSArICIuVVRGLTgiLAogICAgICAgICAgICBfOiBkYSB8fCAiLi90aGlzLnByb2dyYW0iCiAgICAgICAgICB9LCBiOwogICAgICAgICAgZm9yIChiIGluIFBiKSB2b2lkIDAgPT09IFBiW2JdID8gZGVsZXRlIGFbYl0gOiBhW2JdID0gUGJbYl07CiAgICAgICAgICB2YXIgYyA9IFtdOwogICAgICAgICAgZm9yIChiIGluIGEpIGMucHVzaChgJHtifT0ke2FbYl19YCk7CiAgICAgICAgICBRYiA9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBRYjsKICAgICAgfSwgUWIsIFNiID0gW251bGwsIFtdLCBbXV0sIFRiID0gKCkgPT4gewogICAgICAgIGlmICgib2JqZWN0IiA9PSB0eXBlb2YgY3J5cHRvICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpCiAgICAgICAgICByZXR1cm4gKGEpID0+IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7CiAgICAgICAgcmEoImluaXRSYW5kb21EZXZpY2UiKTsKICAgICAgfSwgVWIgPSAoYSkgPT4gKFViID0gVGIoKSkoYSksIFZiID0gKGEpID0+IDAgPT09IGEgJSA0ICYmICgwICE9PSBhICUgMTAwIHx8IDAgPT09IGEgJSA0MDApLCBXYiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgWGIgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICAgIGZ1bmN0aW9uIFliKGEpIHsKICAgICAgICB2YXIgYiA9IEFycmF5KERhKGEpICsgMSk7CiAgICAgICAgRWEoYSwgYiwgMCwgYi5sZW5ndGgpOwogICAgICAgIHJldHVybiBiOwogICAgICB9CiAgICAgIHZhciBaYiA9IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgZnVuY3Rpb24gZShnLCBxLCByKSB7CiAgICAgICAgICBmb3IgKGcgPSAibnVtYmVyIiA9PSB0eXBlb2YgZyA/IGcudG9TdHJpbmcoKSA6IGcgfHwgIiI7IGcubGVuZ3RoIDwgcTsgKSBnID0gclswXSArIGc7CiAgICAgICAgICByZXR1cm4gZzsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZihnLCBxKSB7CiAgICAgICAgICByZXR1cm4gZShnLCBxLCAiMCIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBsKGcsIHEpIHsKICAgICAgICAgIGZ1bmN0aW9uIHIoTikgewogICAgICAgICAgICByZXR1cm4gMCA+IE4gPyAtMSA6IDAgPCBOID8gMSA6IDA7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgejsKICAgICAgICAgIDAgPT09ICh6ID0gcihnLmdldEZ1bGxZZWFyKCkgLSBxLmdldEZ1bGxZZWFyKCkpKSAmJiAwID09PSAoeiA9IHIoZy5nZXRNb250aCgpIC0gcS5nZXRNb250aCgpKSkgJiYgKHogPSByKGcuZ2V0RGF0ZSgpIC0gcS5nZXREYXRlKCkpKTsKICAgICAgICAgIHJldHVybiB6OwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBoKGcpIHsKICAgICAgICAgIHN3aXRjaCAoZy5nZXREYXkoKSkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAyOSk7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICByZXR1cm4gZzsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDMpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwgMCwgMik7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMzEpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAzMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG4oZykgewogICAgICAgICAgdmFyIHEgPSBnLklhOwogICAgICAgICAgZm9yIChnID0gbmV3IERhdGUobmV3IERhdGUoZy5KYSArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCBxOyApIHsKICAgICAgICAgICAgdmFyIHIgPSBnLmdldE1vbnRoKCksIHogPSAoVmIoZy5nZXRGdWxsWWVhcigpKSA/IFdiIDogWGIpW3JdOwogICAgICAgICAgICBpZiAocSA+IHogLSBnLmdldERhdGUoKSkKICAgICAgICAgICAgICBxIC09IHogLSBnLmdldERhdGUoKSArIDEsIGcuc2V0RGF0ZSgxKSwgMTEgPiByID8gZy5zZXRNb250aChyICsgMSkgOiAoZy5zZXRNb250aCgwKSwgZy5zZXRGdWxsWWVhcihnLmdldEZ1bGxZZWFyKCkgKyAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGcuc2V0RGF0ZShnLmdldERhdGUoKSArIHEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByID0gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpICsgMSwgMCwgNCk7CiAgICAgICAgICBxID0gaChuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIDAsIDQpKTsKICAgICAgICAgIHIgPSBoKHIpOwogICAgICAgICAgcmV0dXJuIDAgPj0gbChxLCBnKSA/IDAgPj0gbChyLCBnKSA/IGcuZ2V0RnVsbFllYXIoKSArIDEgOiBnLmdldEZ1bGxZZWFyKCkgOiBnLmdldEZ1bGxZZWFyKCkgLSAxOwogICAgICAgIH0KICAgICAgICB2YXIgbSA9IEZbZCArIDQwID4+IDJdOwogICAgICAgIGQgPSB7CiAgICAgICAgICBzYjogRVtkID4+IDJdLAogICAgICAgICAgcmI6IEVbZCArIDQgPj4gMl0sCiAgICAgICAgICBSYTogRVtkICsgOCA+PiAyXSwKICAgICAgICAgIFZhOiBFW2QgKyAxMiA+PiAyXSwKICAgICAgICAgIFNhOiBFW2QgKyAxNiA+PiAyXSwKICAgICAgICAgIEphOiBFW2QgKyAyMCA+PiAyXSwKICAgICAgICAgIEdhOiBFW2QgKyAyNCA+PiAyXSwKICAgICAgICAgIElhOiBFW2QgKyAyOCA+PiAyXSwKICAgICAgICAgIHdiOiBFW2QgKyAzMiA+PiAyXSwKICAgICAgICAgIHFiOiBFW2QgKyAzNiA+PiAyXSwKICAgICAgICAgIHRiOiBtID8gbSA/IEooQSwgbSkgOiAiIiA6ICIiCiAgICAgICAgfTsKICAgICAgICBjID0gYyA/IEooQSwgYykgOiAiIjsKICAgICAgICBtID0gewogICAgICAgICAgIiVjIjogIiVhICViICVkICVIOiVNOiVTICVZIiwKICAgICAgICAgICIlRCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJUYiOiAiJVktJW0tJWQiLAogICAgICAgICAgIiVoIjogIiViIiwKICAgICAgICAgICIlciI6ICIlSTolTTolUyAlcCIsCiAgICAgICAgICAiJVIiOiAiJUg6JU0iLAogICAgICAgICAgIiVUIjogIiVIOiVNOiVTIiwKICAgICAgICAgICIleCI6ICIlbS8lZC8leSIsCiAgICAgICAgICAiJVgiOiAiJUg6JU06JVMiLAogICAgICAgICAgIiVFYyI6ICIlYyIsCiAgICAgICAgICAiJUVDIjogIiVDIiwKICAgICAgICAgICIlRXgiOiAiJW0vJWQvJXkiLAogICAgICAgICAgIiVFWCI6ICIlSDolTTolUyIsCiAgICAgICAgICAiJUV5IjogIiV5IiwKICAgICAgICAgICIlRVkiOiAiJVkiLAogICAgICAgICAgIiVPZCI6ICIlZCIsCiAgICAgICAgICAiJU9lIjogIiVlIiwKICAgICAgICAgICIlT0giOiAiJUgiLAogICAgICAgICAgIiVPSSI6ICIlSSIsCiAgICAgICAgICAiJU9tIjogIiVtIiwKICAgICAgICAgICIlT00iOiAiJU0iLAogICAgICAgICAgIiVPUyI6ICIlUyIsCiAgICAgICAgICAiJU91IjogIiV1IiwKICAgICAgICAgICIlT1UiOiAiJVUiLAogICAgICAgICAgIiVPViI6ICIlViIsCiAgICAgICAgICAiJU93IjogIiV3IiwKICAgICAgICAgICIlT1ciOiAiJVciLAogICAgICAgICAgIiVPeSI6ICIleSIKICAgICAgICB9OwogICAgICAgIGZvciAodmFyIHAgaW4gbSkgYyA9IGMucmVwbGFjZShuZXcgUmVnRXhwKHAsICJnIiksIG1bcF0pOwogICAgICAgIHZhciB1ID0gIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5Ii5zcGxpdCgiICIpLCB2ID0gIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXIiLnNwbGl0KCIgIik7CiAgICAgICAgbSA9IHsKICAgICAgICAgICIlYSI6IChnKSA9PiB1W2cuR2FdLnN1YnN0cmluZygwLCAzKSwKICAgICAgICAgICIlQSI6IChnKSA9PiB1W2cuR2FdLAogICAgICAgICAgIiViIjogKGcpID0+IHZbZy5TYV0uc3Vic3RyaW5nKDAsIDMpLAogICAgICAgICAgIiVCIjogKGcpID0+IHZbZy5TYV0sCiAgICAgICAgICAiJUMiOiAoZykgPT4gZigoZy5KYSArIDE5MDApIC8gMTAwIHwgMCwgMiksCiAgICAgICAgICAiJWQiOiAoZykgPT4gZihnLlZhLCAyKSwKICAgICAgICAgICIlZSI6IChnKSA9PiBlKGcuVmEsIDIsICIgIiksCiAgICAgICAgICAiJWciOiAoZykgPT4gbihnKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwKICAgICAgICAgICIlRyI6IG4sCiAgICAgICAgICAiJUgiOiAoZykgPT4gZihnLlJhLCAyKSwKICAgICAgICAgICIlSSI6IChnKSA9PiB7CiAgICAgICAgICAgIGcgPSBnLlJhOwogICAgICAgICAgICAwID09IGcgPyBnID0gMTIgOiAxMiA8IGcgJiYgKGcgLT0gMTIpOwogICAgICAgICAgICByZXR1cm4gZihnLCAyKTsKICAgICAgICAgIH0sCiAgICAgICAgICAiJWoiOiAoZykgPT4gewogICAgICAgICAgICBmb3IgKHZhciBxID0gMCwgciA9IDA7IHIgPD0gZy5TYSAtIDE7IHEgKz0gKFZiKGcuSmEgKyAxOTAwKSA/IFdiIDogWGIpW3IrK10pIDsKICAgICAgICAgICAgcmV0dXJuIGYoZy5WYSArIHEsIDMpOwogICAgICAgICAgfSwKICAgICAgICAgICIlbSI6IChnKSA9PiBmKGcuU2EgKyAxLCAyKSwKICAgICAgICAgICIlTSI6IChnKSA9PiBmKGcucmIsIDIpLAogICAgICAgICAgIiVuIjogKCkgPT4gIlxuIiwKICAgICAgICAgICIlcCI6IChnKSA9PiAwIDw9IGcuUmEgJiYgMTIgPiBnLlJhID8gIkFNIiA6ICJQTSIsCiAgICAgICAgICAiJVMiOiAoZykgPT4gZihnLnNiLCAyKSwKICAgICAgICAgICIldCI6ICgpID0+ICIJIiwKICAgICAgICAgICIldSI6IChnKSA9PiBnLkdhIHx8IDcsCiAgICAgICAgICAiJVUiOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIGcuR2EpIC8gNyksIDIpLAogICAgICAgICAgIiVWIjogKGcpID0+IHsKICAgICAgICAgICAgdmFyIHEgPSBNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpOwogICAgICAgICAgICAyID49IChnLkdhICsgMzcxIC0gZy5JYSAtIDIpICUgNyAmJiBxKys7CiAgICAgICAgICAgIGlmIChxKSA1MyA9PSBxICYmIChyID0gKGcuR2EgKyAzNzEgLSBnLklhKSAlIDcsIDQgPT0gciB8fCAzID09IHIgJiYgVmIoZy5KYSkgfHwgKHEgPSAxKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHEgPSA1MjsKICAgICAgICAgICAgICB2YXIgciA9IChnLkdhICsgNyAtIGcuSWEgLSAxKSAlIDc7CiAgICAgICAgICAgICAgKDQgPT0gciB8fCA1ID09IHIgJiYgVmIoZy5KYSAlIDQwMCAtIDEpKSAmJiBxKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGYocSwgMik7CiAgICAgICAgICB9LAogICAgICAgICAgIiV3IjogKGcpID0+IGcuR2EsCiAgICAgICAgICAiJVciOiAoZykgPT4gZihNYXRoLmZsb29yKChnLklhICsgNyAtIChnLkdhICsgNikgJSA3KSAvIDcpLCAyKSwKICAgICAgICAgICIleSI6IChnKSA9PiAoZy5KYSArIDE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLAogICAgICAgICAgIiVZIjogKGcpID0+IGcuSmEgKyAxOTAwLAogICAgICAgICAgIiV6IjogKGcpID0+IHsKICAgICAgICAgICAgZyA9IGcucWI7CiAgICAgICAgICAgIHZhciBxID0gMCA8PSBnOwogICAgICAgICAgICBnID0gTWF0aC5hYnMoZykgLyA2MDsKICAgICAgICAgICAgcmV0dXJuIChxID8gIisiIDogIi0iKSArIFN0cmluZygiMDAwMCIgKyAoZyAvIDYwICogMTAwICsgZyAlIDYwKSkuc2xpY2UoLTQpOwogICAgICAgICAgfSwKICAgICAgICAgICIlWiI6IChnKSA9PiBnLnRiLAogICAgICAgICAgIiUlIjogKCkgPT4gIiUiCiAgICAgICAgfTsKICAgICAgICBjID0gYy5yZXBsYWNlKC8lJS9nLCAiXDBcMCIpOwogICAgICAgIGZvciAocCBpbiBtKSBjLmluY2x1ZGVzKHApICYmIChjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAocCwgImciKSwgbVtwXShkKSkpOwogICAgICAgIGMgPSBjLnJlcGxhY2UoL1wwXDAvZywgIiUiKTsKICAgICAgICBwID0gWWIoYyk7CiAgICAgICAgaWYgKHAubGVuZ3RoID4gYikgcmV0dXJuIDA7CiAgICAgICAgeS5zZXQocCwgYSk7CiAgICAgICAgcmV0dXJuIHAubGVuZ3RoIC0gMTsKICAgICAgfTsKICAgICAgSWEgPSBrLkludGVybmFsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihhKSB7CiAgICAgICAgICBzdXBlcihhKTsKICAgICAgICAgIHRoaXMubmFtZSA9ICJJbnRlcm5hbEVycm9yIjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGZvciAodmFyICRiID0gQXJyYXkoMjU2KSwgYWMgPSAwOyAyNTYgPiBhYzsgKythYykgJGJbYWNdID0gU3RyaW5nLmZyb21DaGFyQ29kZShhYyk7CiAgICAgIEphID0gJGI7CiAgICAgIFIgPSBrLkJpbmRpbmdFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKICAgICAgICAgIHN1cGVyKGEpOwogICAgICAgICAgdGhpcy5uYW1lID0gIkJpbmRpbmdFcnJvciI7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuYXNzaWduKFlhLnByb3RvdHlwZSwgewogICAgICAgIGlzQWxpYXNPZjogZnVuY3Rpb24oYSkgewogICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFlhICYmIGEgaW5zdGFuY2VvZiBZYSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHZhciBiID0gdGhpcy5tYS56YS54YSwgYyA9IHRoaXMubWEueWE7CiAgICAgICAgICBhLm1hID0gYS5tYTsKICAgICAgICAgIHZhciBkID0gYS5tYS56YS54YTsKICAgICAgICAgIGZvciAoYSA9IGEubWEueWE7IGIuQ2E7ICkgYyA9IGIuTmEoYyksIGIgPSBiLkNhOwogICAgICAgICAgZm9yICg7IGQuQ2E7ICkgYSA9IGQuTmEoYSksIGQgPSBkLkNhOwogICAgICAgICAgcmV0dXJuIGIgPT09IGQgJiYgYyA9PT0gYTsKICAgICAgICB9LAogICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoaXMubWEueWEgfHwgTGEodGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5tYS5NYSkgcmV0dXJuIHRoaXMubWEuY291bnQudmFsdWUgKz0gMSwgdGhpczsKICAgICAgICAgIHZhciBhID0gV2EsIGIgPSBPYmplY3QsIGMgPSBiLmNyZWF0ZSwgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSwgZSA9IHRoaXMubWE7CiAgICAgICAgICBhID0gYSgKICAgICAgICAgICAgYy5jYWxsKGIsIGQsIHsKICAgICAgICAgICAgICBtYTogeyB2YWx1ZTogeyBjb3VudDogZS5jb3VudCwgS2E6IGUuS2EsIE1hOiBlLk1hLCB5YTogZS55YSwgemE6IGUuemEsIEFhOiBlLkFhLCBEYTogZS5EYSB9IH0KICAgICAgICAgICAgfSkKICAgICAgICAgICk7CiAgICAgICAgICBhLm1hLmNvdW50LnZhbHVlICs9IDE7CiAgICAgICAgICBhLm1hLkthID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFsiZGVsZXRlIl0oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBPYSh0aGlzKTsKICAgICAgICAgIHZhciBhID0gdGhpcy5tYTsKICAgICAgICAgIC0tYS5jb3VudC52YWx1ZTsKICAgICAgICAgIDAgPT09IGEuY291bnQudmFsdWUgJiYgKGEuQWEgPyBhLkRhLkZhKGEuQWEpIDogYS56YS54YS5GYShhLnlhKSk7CiAgICAgICAgICB0aGlzLm1hLk1hIHx8ICh0aGlzLm1hLkFhID0gdm9pZCAwLCB0aGlzLm1hLnlhID0gdm9pZCAwKTsKICAgICAgICB9LAogICAgICAgIGlzRGVsZXRlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIXRoaXMubWEueWE7CiAgICAgICAgfSwKICAgICAgICBkZWxldGVMYXRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGlzLm1hLnlhIHx8IExhKHRoaXMpOwogICAgICAgICAgaWYgKHRoaXMubWEuS2EgJiYgIXRoaXMubWEuTWEpIHRocm93IG5ldyBSKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIik7CiAgICAgICAgICBSYS5wdXNoKHRoaXMpOwogICAgICAgICAgMSA9PT0gUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgICAgIHRoaXMubWEuS2EgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgay5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50ID0gKCkgPT4gT2JqZWN0LmtleXMoVWEpLmxlbmd0aDsKICAgICAgay5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzID0gKCkgPT4gewogICAgICAgIHZhciBhID0gW10sIGI7CiAgICAgICAgZm9yIChiIGluIFVhKSBVYS5oYXNPd25Qcm9wZXJ0eShiKSAmJiBhLnB1c2goVWFbYl0pOwogICAgICAgIHJldHVybiBhOwogICAgICB9OwogICAgICBrLmZsdXNoUGVuZGluZ0RlbGV0ZXMgPSBTYTsKICAgICAgay5zZXREZWxheUZ1bmN0aW9uID0gKGEpID0+IHsKICAgICAgICBUYSA9IGE7CiAgICAgICAgUmEubGVuZ3RoICYmIFRhICYmIFRhKFNhKTsKICAgICAgfTsKICAgICAgT2JqZWN0LmFzc2lnbihqYi5wcm90b3R5cGUsIHsKICAgICAgICBlYihhKSB7CiAgICAgICAgICB0aGlzLlphICYmIChhID0gdGhpcy5aYShhKSk7CiAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9LAogICAgICAgIFhhKGEpIHsKICAgICAgICAgIHRoaXMuRmE/LihhKTsKICAgICAgICB9LAogICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBLLAogICAgICAgIGZyb21XaXJlVHlwZTogZnVuY3Rpb24oYSkgewogICAgICAgICAgZnVuY3Rpb24gYigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuUWEgPyBYYSh0aGlzLnhhLkxhLCB7IHphOiB0aGlzLmpiLCB5YTogYywgRGE6IHRoaXMsIEFhOiBhIH0pIDogWGEodGhpcy54YS5MYSwgeyB6YTogdGhpcywgeWE6IGEgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYyA9IHRoaXMuZWIoYSk7CiAgICAgICAgICBpZiAoIWMpIHJldHVybiB0aGlzLlhhKGEpLCBudWxsOwogICAgICAgICAgdmFyIGQgPSBWYSh0aGlzLnhhLCBjKTsKICAgICAgICAgIGlmICh2b2lkIDAgIT09IGQpIHsKICAgICAgICAgICAgaWYgKDAgPT09IGQubWEuY291bnQudmFsdWUpIHJldHVybiBkLm1hLnlhID0gYywgZC5tYS5BYSA9IGEsIGQuY2xvbmUoKTsKICAgICAgICAgICAgZCA9IGQuY2xvbmUoKTsKICAgICAgICAgICAgdGhpcy5YYShhKTsKICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICB9CiAgICAgICAgICBkID0gdGhpcy54YS5jYihjKTsKICAgICAgICAgIGQgPSBRYVtkXTsKICAgICAgICAgIGlmICghZCkgcmV0dXJuIGIuY2FsbCh0aGlzKTsKICAgICAgICAgIGQgPSB0aGlzLlBhID8gZC4kYSA6IGQucG9pbnRlclR5cGU7CiAgICAgICAgICB2YXIgZSA9IFBhKGMsIHRoaXMueGEsIGQueGEpOwogICAgICAgICAgcmV0dXJuIG51bGwgPT09IGUgPyBiLmNhbGwodGhpcykgOiB0aGlzLlFhID8gWGEoZC54YS5MYSwgeyB6YTogZCwgeWE6IGUsIERhOiB0aGlzLCBBYTogYSB9KSA6IFhhKGQueGEuTGEsIHsgemE6IGQsIHlhOiBlIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG5iID0gay5VbmJvdW5kVHlwZUVycm9yID0gKChhLCBiKSA9PiB7CiAgICAgICAgdmFyIGMgPSBaYShiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICB0aGlzLm5hbWUgPSBiOwogICAgICAgICAgdGhpcy5tZXNzYWdlID0gZDsKICAgICAgICAgIGQgPSBFcnJvcihkKS5zdGFjazsKICAgICAgICAgIHZvaWQgMCAhPT0gZCAmJiAodGhpcy5zdGFjayA9IHRoaXMudG9TdHJpbmcoKSArICJcbiIgKyBkLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sICIiKSk7CiAgICAgICAgfSk7CiAgICAgICAgYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKTsKICAgICAgICBjLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGM7CiAgICAgICAgYy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IHRoaXMubWVzc2FnZSA/IHRoaXMubmFtZSA6IGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gYzsKICAgICAgfSkoRXJyb3IsICJVbmJvdW5kVHlwZUVycm9yIik7CiAgICAgIFYucHVzaCgwLCAxLCB2b2lkIDAsIDEsIG51bGwsIDEsIHRydWUsIDEsIGZhbHNlLCAxKTsKICAgICAgay5jb3VudF9lbXZhbF9oYW5kbGVzID0gKCkgPT4gVi5sZW5ndGggLyAyIC0gNSAtIHZiLmxlbmd0aDsKICAgICAgdmFyIG1jID0gewogICAgICAgIGM6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICByYSgKICAgICAgICAgICAgYEFzc2VydGlvbiBmYWlsZWQ6ICR7YSA/IEooQSwgYSkgOiAiIn0sIGF0OiBgICsgW2IgPyBiID8gSihBLCBiKSA6ICIiIDogInVua25vd24gZmlsZW5hbWUiLCBjLCBkID8gZCA/IEooQSwgZCkgOiAiIiA6ICJ1bmtub3duIGZ1bmN0aW9uIl0KICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgICBtOiAoYSwgYiwgYykgPT4gewogICAgICAgICAgdmFyIGQgPSBuZXcgQWEoYSk7CiAgICAgICAgICBGW2QueWEgKyAxNiA+PiAyXSA9IDA7CiAgICAgICAgICBGW2QueWEgKyA0ID4+IDJdID0gYjsKICAgICAgICAgIEZbZC55YSArIDggPj4gMl0gPSBjOwogICAgICAgICAgQmEgPSBhOwogICAgICAgICAgQ2ErKzsKICAgICAgICAgIHRocm93IEJhOwogICAgICAgIH0sCiAgICAgICAgQzogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFE6ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIE46ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIFI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICBPOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBCOiBmdW5jdGlvbigpIHsKICAgICAgICB9LAogICAgICAgIFA6ICgpID0+IHsKICAgICAgICB9LAogICAgICAgIHY6IChhKSA9PiB7CiAgICAgICAgICB2YXIgYiA9IEZhW2FdOwogICAgICAgICAgZGVsZXRlIEZhW2FdOwogICAgICAgICAgdmFyIGMgPSBiLlVhLCBkID0gYi5GYSwgZSA9IGIuWWEsIGYgPSBlLm1hcCgobCkgPT4gbC5oYikuY29uY2F0KGUubWFwKChsKSA9PiBsLm5iKSk7CiAgICAgICAgICBQKFthXSwgZiwgKGwpID0+IHsKICAgICAgICAgICAgdmFyIGggPSB7fTsKICAgICAgICAgICAgZS5mb3JFYWNoKChuLCBtKSA9PiB7CiAgICAgICAgICAgICAgdmFyIHAgPSBsW21dLCB1ID0gbi5mYiwgdiA9IG4uZ2IsIGcgPSBsW20gKyBlLmxlbmd0aF0sIHEgPSBuLm1iLCByID0gbi5vYjsKICAgICAgICAgICAgICBoW24uYmJdID0gewogICAgICAgICAgICAgICAgcmVhZDogKHopID0+IHAuZnJvbVdpcmVUeXBlKHUodiwgeikpLAogICAgICAgICAgICAgICAgd3JpdGU6ICh6LCBOKSA9PiB7CiAgICAgICAgICAgICAgICAgIHZhciBEID0gW107CiAgICAgICAgICAgICAgICAgIHEociwgeiwgZy50b1dpcmVUeXBlKEQsIE4pKTsKICAgICAgICAgICAgICAgICAgR2EoRCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogYi5uYW1lLAogICAgICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAobikgPT4gewogICAgICAgICAgICAgICAgICB2YXIgbSA9IHt9LCBwOwogICAgICAgICAgICAgICAgICBmb3IgKHAgaW4gaCkgbVtwXSA9IGhbcF0ucmVhZChuKTsKICAgICAgICAgICAgICAgICAgZChuKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG07CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdG9XaXJlVHlwZTogKG4sIG0pID0+IHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBoKSBpZiAoIShwIGluIG0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIGZpZWxkOiAiJHtwfSJgKTsKICAgICAgICAgICAgICAgICAgdmFyIHUgPSBjKCk7CiAgICAgICAgICAgICAgICAgIGZvciAocCBpbiBoKSBoW3BdLndyaXRlKHUsIG1bcF0pOwogICAgICAgICAgICAgICAgICBudWxsICE9PSBuICYmIG4ucHVzaChkLCB1KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYXJnUGFja0FkdmFuY2U6IDgsCiAgICAgICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgICAgIEVhOiBkCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBKOiAoKSA9PiB7CiAgICAgICAgfSwKICAgICAgICBZOiAoYSwgYiwgYywgZCkgPT4gewogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYiwKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgcmV0dXJuICEhZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogZnVuY3Rpb24oZSwgZikgewogICAgICAgICAgICAgIHJldHVybiBmID8gYyA6IGQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2VdKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRWE6IG51bGwKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgcjogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUsIHYpID0+IHsKICAgICAgICAgIHAgPSBRKHApOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoICYmIChoID0gVChsLCBoKSk7CiAgICAgICAgICBtICYmIChtID0gVChuLCBtKSk7CiAgICAgICAgICB2ID0gVCh1LCB2KTsKICAgICAgICAgIHZhciBnID0gYmIocCk7CiAgICAgICAgICBhYihnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtwfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIFtkXSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIFAoW2EsIGIsIGNdLCBkID8gW2RdIDogW10sIChxKSA9PiB7CiAgICAgICAgICAgIHEgPSBxWzBdOwogICAgICAgICAgICBpZiAoZCkgewogICAgICAgICAgICAgIHZhciByID0gcS54YTsKICAgICAgICAgICAgICB2YXIgeiA9IHIuTGE7CiAgICAgICAgICAgIH0gZWxzZSB6ID0gWWEucHJvdG90eXBlOwogICAgICAgICAgICBxID0gWmEocCwgZnVuY3Rpb24oLi4uTmEpIHsKICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBOKSB0aHJvdyBuZXcgUigiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiICsgcCk7CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gRC5IYSkgdGhyb3cgbmV3IFIocCArICIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgICB2YXIgeGIgPSBELkhhW05hLmxlbmd0aF07CiAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0geGIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgICAgYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7cH0gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke05hLmxlbmd0aH0pIC0gZXhwZWN0ZWQgKCR7T2JqZWN0LmtleXMoRC5IYSkudG9TdHJpbmcoKX0pIHBhcmFtZXRlcnMgaW5zdGVhZCFgCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIHJldHVybiB4Yi5hcHBseSh0aGlzLCBOYSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgTiA9IE9iamVjdC5jcmVhdGUoeiwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogcSB9IH0pOwogICAgICAgICAgICBxLnByb3RvdHlwZSA9IE47CiAgICAgICAgICAgIHZhciBEID0gbmV3IGNiKHAsIHEsIE4sIHYsIHIsIGYsIGgsIG0pOwogICAgICAgICAgICBpZiAoRC5DYSkgewogICAgICAgICAgICAgIHZhciBpYTsKICAgICAgICAgICAgICAoaWEgPSBELkNhKS5XYSA/PyAoaWEuV2EgPSBbXSk7CiAgICAgICAgICAgICAgRC5DYS5XYS5wdXNoKEQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHIgPSBuZXcgamIocCwgRCwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgaWEgPSBuZXcgamIocCArICIqIiwgRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIHogPSBuZXcgamIocCArICIgY29uc3QqIiwgRCwgZmFsc2UsIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgUWFbYV0gPSB7IHBvaW50ZXJUeXBlOiBpYSwgJGE6IHogfTsKICAgICAgICAgICAga2IoZywgcSk7CiAgICAgICAgICAgIHJldHVybiBbciwgaWEsIHpdOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBxOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGUgPSBUKGQsIGUpOwogICAgICAgICAgUChbXSwgW2FdLCAoaCkgPT4gewogICAgICAgICAgICBoID0gaFswXTsKICAgICAgICAgICAgdmFyIG4gPSBgY29uc3RydWN0b3IgJHtoLm5hbWV9YDsKICAgICAgICAgICAgdm9pZCAwID09PSBoLnhhLkhhICYmIChoLnhhLkhhID0gW10pOwogICAgICAgICAgICBpZiAodm9pZCAwICE9PSBoLnhhLkhhW2IgLSAxXSkKICAgICAgICAgICAgICB0aHJvdyBuZXcgUigKICAgICAgICAgICAgICAgIGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke2IgLSAxfSkgZm9yIGNsYXNzICcke2gubmFtZX0nISBPdmVybG9hZCByZXNvbHV0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHBlcmZvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVyIGNvdW50LCBub3QgYWN0dWFsIHR5cGUgaW5mbyFgCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSAoKSA9PiB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjb25zdHJ1Y3QgJHtoLm5hbWV9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCwgbCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIFAoW10sIGwsIChtKSA9PiB7CiAgICAgICAgICAgICAgbS5zcGxpY2UoMSwgMCwgbnVsbCk7CiAgICAgICAgICAgICAgaC54YS5IYVtiIC0gMV0gPSB0YihuLCBtLCBudWxsLCBlLCBmKTsKICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGY6IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoKSA9PiB7CiAgICAgICAgICB2YXIgbiA9IHJiKGMsIGQpOwogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBiID0gdWIoYik7CiAgICAgICAgICBmID0gVChlLCBmKTsKICAgICAgICAgIFAoW10sIFthXSwgKG0pID0+IHsKICAgICAgICAgICAgZnVuY3Rpb24gcCgpIHsKICAgICAgICAgICAgICBxYihgQ2Fubm90IGNhbGwgJHt1fSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsIG4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG0gPSBtWzBdOwogICAgICAgICAgICB2YXIgdSA9IGAke20ubmFtZX0uJHtifWA7CiAgICAgICAgICAgIGIuc3RhcnRzV2l0aCgiQEAiKSAmJiAoYiA9IFN5bWJvbFtiLnN1YnN0cmluZygyKV0pOwogICAgICAgICAgICBoICYmIG0ueGEua2IucHVzaChiKTsKICAgICAgICAgICAgdmFyIHYgPSBtLnhhLkxhLCBnID0gdltiXTsKICAgICAgICAgICAgdm9pZCAwID09PSBnIHx8IHZvaWQgMCA9PT0gZy5CYSAmJiBnLmNsYXNzTmFtZSAhPT0gbS5uYW1lICYmIGcuT2EgPT09IGMgLSAyID8gKHAuT2EgPSBjIC0gMiwgcC5jbGFzc05hbWUgPSBtLm5hbWUsIHZbYl0gPSBwKSA6ICgkYSh2LCBiLCB1KSwgdltiXS5CYVtjIC0gMl0gPSBwKTsKICAgICAgICAgICAgUChbXSwgbiwgKHEpID0+IHsKICAgICAgICAgICAgICBxID0gdGIodSwgcSwgbSwgZiwgbCk7CiAgICAgICAgICAgICAgdm9pZCAwID09PSB2W2JdLkJhID8gKHEuT2EgPSBjIC0gMiwgdltiXSA9IHEpIDogdltiXS5CYVtjIC0gMl0gPSBxOwogICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgWDogKGEpID0+IE8oYSwgemIpLAogICAgICAgIHg6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBlKCkgewogICAgICAgICAgfQogICAgICAgICAgYiA9IFEoYik7CiAgICAgICAgICBlLnZhbHVlcyA9IHt9OwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBlLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGYpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbZl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChmLCBsKSA9PiBsLnZhbHVlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEFiKGIsIGMsIGQpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgICBhYihiLCBlKTsKICAgICAgICB9LAogICAgICAgIGs6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IEJiKGEsICJlbnVtIik7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIGEgPSBkLmNvbnN0cnVjdG9yOwogICAgICAgICAgZCA9IE9iamVjdC5jcmVhdGUoZC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKICAgICAgICAgICAgdmFsdWU6IHsgdmFsdWU6IGMgfSwKICAgICAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IFphKGAke2QubmFtZX1fJHtifWAsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB9KSB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGEudmFsdWVzW2NdID0gZDsKICAgICAgICAgIGFbYl0gPSBkOwogICAgICAgIH0sCiAgICAgICAgRDogKGEsIGIsIGMpID0+IHsKICAgICAgICAgIGIgPSBRKGIpOwogICAgICAgICAgTyhhLCB7CiAgICAgICAgICAgIG5hbWU6IGIsCiAgICAgICAgICAgIGZyb21XaXJlVHlwZTogKGQpID0+IGQsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IChkLCBlKSA9PiBlLAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IENiKGIsIGMpLAogICAgICAgICAgICBFYTogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBGOiAoYSwgYiwgYywgZCwgZSwgZikgPT4gewogICAgICAgICAgdmFyIGwgPSByYihiLCBjKTsKICAgICAgICAgIGEgPSBRKGEpOwogICAgICAgICAgYSA9IHViKGEpOwogICAgICAgICAgZSA9IFQoZCwgZSk7CiAgICAgICAgICBhYigKICAgICAgICAgICAgYSwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcWIoYENhbm5vdCBjYWxsICR7YX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLCBsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYiAtIDEKICAgICAgICAgICk7CiAgICAgICAgICBQKFtdLCBsLCAoaCkgPT4gewogICAgICAgICAgICBrYihhLCB0YihhLCBbaFswXSwgbnVsbF0uY29uY2F0KGguc2xpY2UoMSkpLCBudWxsLCBlLCBmKSwgYiAtIDEpOwogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGw6IChhLCBiLCBjLCBkLCBlKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIC0xID09PSBlICYmIChlID0gNDI5NDk2NzI5NSk7CiAgICAgICAgICBlID0gKGgpID0+IGg7CiAgICAgICAgICBpZiAoMCA9PT0gZCkgewogICAgICAgICAgICB2YXIgZiA9IDMyIC0gOCAqIGM7CiAgICAgICAgICAgIGUgPSAoaCkgPT4gaCA8PCBmID4+PiBmOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGwgPSBiLmluY2x1ZGVzKCJ1bnNpZ25lZCIpID8gZnVuY3Rpb24oaCwgbikgewogICAgICAgICAgICByZXR1cm4gbiA+Pj4gMDsKICAgICAgICAgIH0gOiBmdW5jdGlvbihoLCBuKSB7CiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgfTsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGUsCiAgICAgICAgICAgIHRvV2lyZVR5cGU6IGwsCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogRGIoYiwgYywgMCAhPT0gZCksCiAgICAgICAgICAgIEVhOiBudWxsCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGc6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBmdW5jdGlvbiBkKGYpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBlKHkuYnVmZmVyLCBGW2YgKyA0ID4+IDJdLCBGW2YgPj4gMl0pOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGUgPSBbSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XVtiXTsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgTyhhLCB7IG5hbWU6IGMsIGZyb21XaXJlVHlwZTogZCwgYXJnUGFja0FkdmFuY2U6IDgsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBkIH0sIHsgaWI6IHRydWUgfSk7CiAgICAgICAgfSwKICAgICAgICB3OiAoYSkgPT4gewogICAgICAgICAgTyhhLCB6Yik7CiAgICAgICAgfSwKICAgICAgICBjYTogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0sIHAsIHUpID0+IHsKICAgICAgICAgIGMgPSBRKGMpOwogICAgICAgICAgZiA9IFQoZSwgZik7CiAgICAgICAgICBoID0gVChsLCBoKTsKICAgICAgICAgIG0gPSBUKG4sIG0pOwogICAgICAgICAgdSA9IFQocCwgdSk7CiAgICAgICAgICBQKFthXSwgW2JdLCAodikgPT4gewogICAgICAgICAgICB2ID0gdlswXTsKICAgICAgICAgICAgcmV0dXJuIFtuZXcgamIoYywgdi54YSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB2LCBkLCBmLCBoLCBtLCB1KV07CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIEU6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIHZhciBjID0gInN0ZDo6c3RyaW5nIiA9PT0gYjsKICAgICAgICAgIE8oYSwgewogICAgICAgICAgICBuYW1lOiBiLAogICAgICAgICAgICBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgICB2YXIgZSA9IEZbZCA+PiAyXSwgZiA9IGQgKyA0OwogICAgICAgICAgICAgIGlmIChjKQogICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IGYsIGggPSAwOyBoIDw9IGU7ICsraCkgewogICAgICAgICAgICAgICAgICB2YXIgbiA9IGYgKyBoOwogICAgICAgICAgICAgICAgICBpZiAoaCA9PSBlIHx8IDAgPT0gQVtuXSkgewogICAgICAgICAgICAgICAgICAgIGwgPSBsID8gSihBLCBsLCBuIC0gbCkgOiAiIjsKICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBtKSB2YXIgbSA9IGw7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gbDsKICAgICAgICAgICAgICAgICAgICBsID0gbiArIDE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG0gPSBBcnJheShlKTsKICAgICAgICAgICAgICAgIGZvciAoaCA9IDA7IGggPCBlOyArK2gpIG1baF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEFbZiArIGhdKTsKICAgICAgICAgICAgICAgIG0gPSBtLmpvaW4oIiIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICAgIHJldHVybiBtOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0b1dpcmVUeXBlOiBmdW5jdGlvbihkLCBlKSB7CiAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIChlID0gbmV3IFVpbnQ4QXJyYXkoZSkpOwogICAgICAgICAgICAgIHZhciBmID0gInN0cmluZyIgPT0gdHlwZW9mIGU7CiAgICAgICAgICAgICAgaWYgKCEoZiB8fCBlIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkgfHwgZSBpbnN0YW5jZW9mIEludDhBcnJheSkpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUigiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpOwogICAgICAgICAgICAgIHZhciBsID0gYyAmJiBmID8gRGEoZSkgOiBlLmxlbmd0aDsKICAgICAgICAgICAgICB2YXIgaCA9IGJjKDQgKyBsICsgMSksIG4gPSBoICsgNDsKICAgICAgICAgICAgICBGW2ggPj4gMl0gPSBsOwogICAgICAgICAgICAgIGlmIChjICYmIGYpIEVhKGUsIEEsIG4sIGwgKyAxKTsKICAgICAgICAgICAgICBlbHNlIGlmIChmKQogICAgICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgewogICAgICAgICAgICAgICAgICB2YXIgbSA9IGUuY2hhckNvZGVBdChmKTsKICAgICAgICAgICAgICAgICAgaWYgKDI1NSA8IG0pIHRocm93IFUobiksIG5ldyBSKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKTsKICAgICAgICAgICAgICAgICAgQVtuICsgZl0gPSBtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgZm9yIChmID0gMDsgZiA8IGw7ICsrZikgQVtuICsgZl0gPSBlW2ZdOwogICAgICAgICAgICAgIG51bGwgIT09IGQgJiYgZC5wdXNoKFUsIGgpOwogICAgICAgICAgICAgIHJldHVybiBoOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhcmdQYWNrQWR2YW5jZTogOCwKICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IEssCiAgICAgICAgICAgIEVhKGQpIHsKICAgICAgICAgICAgICBVKGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHU6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICBjID0gUShjKTsKICAgICAgICAgIGlmICgyID09PSBiKSB7CiAgICAgICAgICAgIHZhciBkID0gRmI7CiAgICAgICAgICAgIHZhciBlID0gR2I7CiAgICAgICAgICAgIHZhciBmID0gSGI7CiAgICAgICAgICAgIHZhciBsID0gKGgpID0+IENbaCA+PiAxXTsKICAgICAgICAgIH0gZWxzZSA0ID09PSBiICYmIChkID0gSWIsIGUgPSBKYiwgZiA9IEtiLCBsID0gKGgpID0+IEZbaCA+PiAyXSk7CiAgICAgICAgICBPKGEsIHsKICAgICAgICAgICAgbmFtZTogYywKICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiAoaCkgPT4gewogICAgICAgICAgICAgIGZvciAodmFyIG4gPSBGW2ggPj4gMl0sIG0sIHAgPSBoICsgNCwgdSA9IDA7IHUgPD0gbjsgKyt1KSB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IGggKyA0ICsgdSAqIGI7CiAgICAgICAgICAgICAgICBpZiAodSA9PSBuIHx8IDAgPT0gbCh2KSkKICAgICAgICAgICAgICAgICAgcCA9IGQocCwgdiAtIHApLCB2b2lkIDAgPT09IG0gPyBtID0gcCA6IChtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gcCksIHAgPSB2ICsgYjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgVShoKTsKICAgICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9XaXJlVHlwZTogKGgsIG4pID0+IHsKICAgICAgICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIG4pIHRocm93IG5ldyBSKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke2N9YCk7CiAgICAgICAgICAgICAgdmFyIG0gPSBmKG4pLCBwID0gYmMoNCArIG0gKyBiKTsKICAgICAgICAgICAgICBGW3AgPj4gMl0gPSBtIC8gYjsKICAgICAgICAgICAgICBlKG4sIHAgKyA0LCBtICsgYik7CiAgICAgICAgICAgICAgbnVsbCAhPT0gaCAmJiBoLnB1c2goVSwgcCk7CiAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LAogICAgICAgICAgICByZWFkVmFsdWVGcm9tUG9pbnRlcjogSywKICAgICAgICAgICAgRWEoaCkgewogICAgICAgICAgICAgIFUoaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgczogKGEsIGIsIGMsIGQsIGUsIGYpID0+IHsKICAgICAgICAgIEZhW2FdID0geyBuYW1lOiBRKGIpLCBVYTogVChjLCBkKSwgRmE6IFQoZSwgZiksIFlhOiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgajogKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgIEZhW2FdLllhLnB1c2goeyBiYjogUShiKSwgaGI6IGMsIGZiOiBUKGQsIGUpLCBnYjogZiwgbmI6IGwsIG1iOiBUKGgsIG4pLCBvYjogbSB9KTsKICAgICAgICB9LAogICAgICAgIFo6IChhLCBiKSA9PiB7CiAgICAgICAgICBiID0gUShiKTsKICAgICAgICAgIE8oYSwgeyB1YjogdHJ1ZSwgbmFtZTogYiwgYXJnUGFja0FkdmFuY2U6IDAsIGZyb21XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSwgdG9XaXJlVHlwZTogKCkgPT4gewogICAgICAgICAgfSB9KTsKICAgICAgICB9LAogICAgICAgIEs6ICgpID0+IHsKICAgICAgICAgIHRocm93IEluZmluaXR5OwogICAgICAgIH0sCiAgICAgICAgYWE6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBhID0gTGJbYV07CiAgICAgICAgICBiID0geWIoYik7CiAgICAgICAgICByZXR1cm4gYShudWxsLCBiLCBjLCBkKTsKICAgICAgICB9LAogICAgICAgIEc6IHdiLAogICAgICAgICQ6IChhLCBiLCBjKSA9PiB7CiAgICAgICAgICB2YXIgZCA9IE5iKGEsIGIpLCBlID0gZC5zaGlmdCgpOwogICAgICAgICAgYS0tOwogICAgICAgICAgdmFyIGYgPSBBcnJheShhKTsKICAgICAgICAgIGIgPSBgbWV0aG9kQ2FsbGVyPCgke2QubWFwKChsKSA9PiBsLm5hbWUpLmpvaW4oIiwgIil9KSA9PiAke2UubmFtZX0+YDsKICAgICAgICAgIHJldHVybiBNYigKICAgICAgICAgICAgWmEoYiwgKGwsIGgsIG4sIG0pID0+IHsKICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMCwgdSA9IDA7IHUgPCBhOyArK3UpIGZbdV0gPSBkW3VdLnJlYWRWYWx1ZUZyb21Qb2ludGVyKG0gKyBwKSwgcCArPSBkW3VdLmFyZ1BhY2tBZHZhbmNlOwogICAgICAgICAgICAgIGggPSAxID09PSBjID8gT2IoaCwgZikgOiBoLmFwcGx5KGwsIGYpOwogICAgICAgICAgICAgIGwgPSBbXTsKICAgICAgICAgICAgICBoID0gZS50b1dpcmVUeXBlKGwsIGgpOwogICAgICAgICAgICAgIGwubGVuZ3RoICYmIChGW24gPj4gMl0gPSBoYihsKSk7CiAgICAgICAgICAgICAgcmV0dXJuIGg7CiAgICAgICAgICAgIH0pCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICAgYmE6IChhKSA9PiB7CiAgICAgICAgICA5IDwgYSAmJiAoVlthICsgMV0gKz0gMSk7CiAgICAgICAgfSwKICAgICAgICBfOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSB5YihhKTsKICAgICAgICAgIEdhKGIpOwogICAgICAgICAgd2IoYSk7CiAgICAgICAgfSwKICAgICAgICBvOiAoYSwgYikgPT4gewogICAgICAgICAgYSA9IEJiKGEsICJfZW12YWxfdGFrZV92YWx1ZSIpOwogICAgICAgICAgYSA9IGEucmVhZFZhbHVlRnJvbVBvaW50ZXIoYik7CiAgICAgICAgICByZXR1cm4gaGIoYSk7CiAgICAgICAgfSwKICAgICAgICBXOiAoKSA9PiB7CiAgICAgICAgICByYSgiIik7CiAgICAgICAgfSwKICAgICAgICBWOiAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSwKICAgICAgICBNOiAoYSkgPT4gewogICAgICAgICAgdmFyIGIgPSBBLmxlbmd0aDsKICAgICAgICAgIGEgPj4+PSAwOwogICAgICAgICAgaWYgKDIxNDc0ODM2NDggPCBhKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBmb3IgKHZhciBjID0gMTsgNCA+PSBjOyBjICo9IDIpIHsKICAgICAgICAgICAgdmFyIGQgPSBiICogKDEgKyAwLjIgLyBjKTsKICAgICAgICAgICAgZCA9IE1hdGgubWluKGQsIGEgKyAxMDA2NjMyOTYpOwogICAgICAgICAgICB2YXIgZSA9IE1hdGg7CiAgICAgICAgICAgIGQgPSBNYXRoLm1heChhLCBkKTsKICAgICAgICAgICAgYTogewogICAgICAgICAgICAgIGUgPSAoZS5taW4uY2FsbChlLCAyMTQ3NDgzNjQ4LCBkICsgKDY1NTM2IC0gZCAlIDY1NTM2KSAlIDY1NTM2KSAtIGZhLmJ1ZmZlci5ieXRlTGVuZ3RoICsgNjU1MzUpIC8gNjU1MzY7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZhLmdyb3coZSk7CiAgICAgICAgICAgICAgICBsYSgpOwogICAgICAgICAgICAgICAgdmFyIGYgPSAxOwogICAgICAgICAgICAgICAgYnJlYWsgYTsKICAgICAgICAgICAgICB9IGNhdGNoIChsKSB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGYgPSB2b2lkIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGYpIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgUzogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gMDsKICAgICAgICAgIFJiKCkuZm9yRWFjaCgoZCwgZSkgPT4gewogICAgICAgICAgICB2YXIgZiA9IGIgKyBjOwogICAgICAgICAgICBlID0gRlthICsgNCAqIGUgPj4gMl0gPSBmOwogICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgZC5sZW5ndGg7ICsrZikgeVtlKytdID0gZC5jaGFyQ29kZUF0KGYpOwogICAgICAgICAgICB5W2VdID0gMDsKICAgICAgICAgICAgYyArPSBkLmxlbmd0aCArIDE7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0sCiAgICAgICAgVDogKGEsIGIpID0+IHsKICAgICAgICAgIHZhciBjID0gUmIoKTsKICAgICAgICAgIEZbYSA+PiAyXSA9IGMubGVuZ3RoOwogICAgICAgICAgdmFyIGQgPSAwOwogICAgICAgICAgYy5mb3JFYWNoKChlKSA9PiBkICs9IGUubGVuZ3RoICsgMSk7CiAgICAgICAgICBGW2IgPj4gMl0gPSBkOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSwKICAgICAgICB0OiAoKSA9PiA1MiwKICAgICAgICBBOiAoKSA9PiA1MiwKICAgICAgICBJOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiA3MDsKICAgICAgICB9LAogICAgICAgIHo6IChhLCBiLCBjLCBkKSA9PiB7CiAgICAgICAgICBmb3IgKHZhciBlID0gMCwgZiA9IDA7IGYgPCBjOyBmKyspIHsKICAgICAgICAgICAgdmFyIGwgPSBGW2IgPj4gMl0sIGggPSBGW2IgKyA0ID4+IDJdOwogICAgICAgICAgICBiICs9IDg7CiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgaDsgbisrKSB7CiAgICAgICAgICAgICAgdmFyIG0gPSBBW2wgKyBuXSwgcCA9IFNiW2FdOwogICAgICAgICAgICAgIDAgPT09IG0gfHwgMTAgPT09IG0gPyAoKDEgPT09IGEgPyBlYSA6IHcpKEoocCwgMCkpLCBwLmxlbmd0aCA9IDApIDogcC5wdXNoKG0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGUgKz0gaDsKICAgICAgICAgIH0KICAgICAgICAgIEZbZCA+PiAyXSA9IGU7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIFU6IChhLCBiKSA9PiB7CiAgICAgICAgICBVYihBLnN1YmFycmF5KGEsIGEgKyBiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIGk6IGNjLAogICAgICAgIGQ6IGRjLAogICAgICAgIGU6IGVjLAogICAgICAgIHA6IGZjLAogICAgICAgIHk6IGdjLAogICAgICAgIGI6IGhjLAogICAgICAgIGE6IGljLAogICAgICAgIGg6IGpjLAogICAgICAgIG46IGtjLAogICAgICAgIEg6IGxjLAogICAgICAgIEw6IChhLCBiLCBjLCBkKSA9PiBaYihhLCBiLCBjLCBkKQogICAgICB9LCBXID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gYShjKSB7CiAgICAgICAgICBXID0gYy5leHBvcnRzOwogICAgICAgICAgZmEgPSBXLmRhOwogICAgICAgICAgbGEoKTsKICAgICAgICAgIFMgPSBXLmhhOwogICAgICAgICAgbmEudW5zaGlmdChXLmVhKTsKICAgICAgICAgIEctLTsKICAgICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgICAgMCA9PSBHICYmIChudWxsICE9PSBxYSAmJiAoY2xlYXJJbnRlcnZhbChxYSksIHFhID0gbnVsbCksIEggJiYgKGMgPSBILCBIID0gbnVsbCwgYygpKSk7CiAgICAgICAgICByZXR1cm4gVzsKICAgICAgICB9CiAgICAgICAgdmFyIGIgPSB7IGE6IG1jIH07CiAgICAgICAgRysrOwogICAgICAgIGsubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKEcpOwogICAgICAgIGlmIChrLmluc3RhbnRpYXRlV2FzbSkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBrLmluc3RhbnRpYXRlV2FzbShiLCBhKTsKICAgICAgICAgIH0gY2F0Y2ggKGMpIHsKICAgICAgICAgICAgdyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtjfWApLCBiYShjKTsKICAgICAgICAgIH0KICAgICAgICB4YShiLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICBhKGMuaW5zdGFuY2UpOwogICAgICAgIH0pLmNhdGNoKGJhKTsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0oKSwgYmMgPSAoYSkgPT4gKGJjID0gVy5mYSkoYSksIG9iID0gKGEpID0+IChvYiA9IFcuZ2EpKGEpLCBVID0gKGEpID0+IChVID0gVy5pYSkoYSksIFggPSAoYSwgYikgPT4gKFggPSBXLmphKShhLCBiKSwgWSA9IChhKSA9PiAoWSA9IFcua2EpKGEpLCBaID0gKCkgPT4gKFogPSBXLmxhKSgpOwogICAgICBrLmR5bkNhbGxfaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoay5keW5DYWxsX2lpamogPSBXLm5hKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX3ZpamogPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKGsuZHluQ2FsbF92aWpqID0gVy5vYSkoYSwgYiwgYywgZCwgZSwgZik7CiAgICAgIGsuZHluQ2FsbF9qaWlpID0gKGEsIGIsIGMsIGQpID0+IChrLmR5bkNhbGxfamlpaSA9IFcucGEpKGEsIGIsIGMsIGQpOwogICAgICBrLmR5bkNhbGxfamlpID0gKGEsIGIsIGMpID0+IChrLmR5bkNhbGxfamlpID0gVy5xYSkoYSwgYiwgYyk7CiAgICAgIHZhciBuYyA9IGsuZHluQ2FsbF92aWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAobmMgPSBrLmR5bkNhbGxfdmlpaWogPSBXLnJhKShhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgay5keW5DYWxsX2ppamkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKGsuZHluQ2FsbF9qaWppID0gVy5zYSkoYSwgYiwgYywgZCwgZSk7CiAgICAgIGsuZHluQ2FsbF92aWlqaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgbCkgPT4gKGsuZHluQ2FsbF92aWlqaWkgPSBXLnRhKShhLCBiLCBjLCBkLCBlLCBmLCBsKTsKICAgICAgay5keW5DYWxsX2lpaWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsKSA9PiAoay5keW5DYWxsX2lpaWlpaiA9IFcudWEpKGEsIGIsIGMsIGQsIGUsIGYsIGwpOwogICAgICBrLmR5bkNhbGxfaWlpaWlqaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKSA9PiAoay5keW5DYWxsX2lpaWlpamogPSBXLnZhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuKTsKICAgICAgay5keW5DYWxsX2lpaWlpaWpqID0gKGEsIGIsIGMsIGQsIGUsIGYsIGwsIGgsIG4sIG0pID0+IChrLmR5bkNhbGxfaWlpaWlpamogPSBXLndhKShhLCBiLCBjLCBkLCBlLCBmLCBsLCBoLCBuLCBtKTsKICAgICAgZnVuY3Rpb24gaGMoYSwgYikgewogICAgICAgIHZhciBjID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaWMoYSwgYiwgYykgewogICAgICAgIHZhciBkID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBTLmdldChhKShiLCBjKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBZKGQpOwogICAgICAgICAgaWYgKGUgIT09IGUgKyAwKSB0aHJvdyBlOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZWMoYSwgYiwgYywgZCkgewogICAgICAgIHZhciBlID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGRjKGEsIGIsIGMpIHsKICAgICAgICB2YXIgZCA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIFMuZ2V0KGEpKGIsIGMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIFkoZCk7CiAgICAgICAgICBpZiAoZSAhPT0gZSArIDApIHRocm93IGU7CiAgICAgICAgICBYKDEsIDApOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBjYyhhLCBiKSB7CiAgICAgICAgdmFyIGMgPSBaKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBTLmdldChhKShiKTsKICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICBZKGMpOwogICAgICAgICAgaWYgKGQgIT09IGQgKyAwKSB0aHJvdyBkOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZmMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gUy5nZXQoYSkoYiwgYywgZCwgZSwgZik7CiAgICAgICAgfSBjYXRjaCAoaCkgewogICAgICAgICAgWShsKTsKICAgICAgICAgIGlmIChoICE9PSBoICsgMCkgdGhyb3cgaDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGtjKGEsIGIsIGMsIGQsIGUpIHsKICAgICAgICB2YXIgZiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCwgZSk7CiAgICAgICAgfSBjYXRjaCAobCkgewogICAgICAgICAgWShmKTsKICAgICAgICAgIGlmIChsICE9PSBsICsgMCkgdGhyb3cgbDsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGpjKGEsIGIsIGMsIGQpIHsKICAgICAgICB2YXIgZSA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoYiwgYywgZCk7CiAgICAgICAgfSBjYXRjaCAoZikgewogICAgICAgICAgWShlKTsKICAgICAgICAgIGlmIChmICE9PSBmICsgMCkgdGhyb3cgZjsKICAgICAgICAgIFgoMSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGdjKGEpIHsKICAgICAgICB2YXIgYiA9IFooKTsKICAgICAgICB0cnkgewogICAgICAgICAgUy5nZXQoYSkoKTsKICAgICAgICB9IGNhdGNoIChjKSB7CiAgICAgICAgICBZKGIpOwogICAgICAgICAgaWYgKGMgIT09IGMgKyAwKSB0aHJvdyBjOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbGMoYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgIHZhciBsID0gWigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBuYyhhLCBiLCBjLCBkLCBlLCBmKTsKICAgICAgICB9IGNhdGNoIChoKSB7CiAgICAgICAgICBZKGwpOwogICAgICAgICAgaWYgKGggIT09IGggKyAwKSB0aHJvdyBoOwogICAgICAgICAgWCgxLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIG9jOwogICAgICBIID0gZnVuY3Rpb24gcGMoKSB7CiAgICAgICAgb2MgfHwgcWMoKTsKICAgICAgICBvYyB8fCAoSCA9IHBjKTsKICAgICAgfTsKICAgICAgZnVuY3Rpb24gcWMoKSB7CiAgICAgICAgZnVuY3Rpb24gYSgpIHsKICAgICAgICAgIGlmICghb2MgJiYgKG9jID0gdHJ1ZSwgay5jYWxsZWRSdW4gPSB0cnVlLCAhaGEpKSB7CiAgICAgICAgICAgIHlhKG5hKTsKICAgICAgICAgICAgYWEoayk7CiAgICAgICAgICAgIGlmIChrLm9uUnVudGltZUluaXRpYWxpemVkKSBrLm9uUnVudGltZUluaXRpYWxpemVkKCk7CiAgICAgICAgICAgIGlmIChrLnBvc3RSdW4pCiAgICAgICAgICAgICAgZm9yICgiZnVuY3Rpb24iID09IHR5cGVvZiBrLnBvc3RSdW4gJiYgKGsucG9zdFJ1biA9IFtrLnBvc3RSdW5dKTsgay5wb3N0UnVuLmxlbmd0aDsgKSB7CiAgICAgICAgICAgICAgICB2YXIgYiA9IGsucG9zdFJ1bi5zaGlmdCgpOwogICAgICAgICAgICAgICAgb2EudW5zaGlmdChiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHlhKG9hKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEoMCA8IEcpKSB7CiAgICAgICAgICBpZiAoay5wcmVSdW4pIGZvciAoImZ1bmN0aW9uIiA9PSB0eXBlb2Ygay5wcmVSdW4gJiYgKGsucHJlUnVuID0gW2sucHJlUnVuXSk7IGsucHJlUnVuLmxlbmd0aDsgKSBwYSgpOwogICAgICAgICAgeWEobWEpOwogICAgICAgICAgMCA8IEcgfHwgKGsuc2V0U3RhdHVzID8gKGsuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgay5zZXRTdGF0dXMoIiIpOwogICAgICAgICAgICB9LCAxKTsKICAgICAgICAgICAgYSgpOwogICAgICAgICAgfSwgMSkpIDogYSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGsucHJlSW5pdCkKICAgICAgICBmb3IgKCJmdW5jdGlvbiIgPT0gdHlwZW9mIGsucHJlSW5pdCAmJiAoay5wcmVJbml0ID0gW2sucHJlSW5pdF0pOyAwIDwgay5wcmVJbml0Lmxlbmd0aDsgKSBrLnByZUluaXQucG9wKCkoKTsKICAgICAgcWMoKTsKICAgICAgcmV0dXJuIHJlYWR5UHJvbWlzZTsKICAgIH07CiAgfSkoKTsKICB2YXIgZG90bG90dGllX3BsYXllcl9kZWZhdWx0ID0gY3JlYXRlRG90TG90dGllUGxheWVyTW9kdWxlOwoKICAvLyBzcmMvY29yZS9kb3Rsb3R0aWUtd2FzbS1sb2FkZXIudHMKICB2YXIgRG90TG90dGllV2FzbUxvYWRlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyTG9hZGVyIGlzIGEgc3RhdGljIGNsYXNzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLiIpOwogICAgfQogICAgc3RhdGljIGFzeW5jIF90cnlMb2FkKHVybCkgewogICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBkb3Rsb3R0aWVfcGxheWVyX2RlZmF1bHQoeyBsb2NhdGVGaWxlOiAoKSA9PiB1cmwgfSk7CiAgICAgIHJldHVybiBtb2R1bGU7CiAgICB9CiAgICAvKioKICAgICAqIFRyaWVzIHRvIGxvYWQgdGhlIFdBU00gbW9kdWxlIGZyb20gdGhlIHByaW1hcnkgVVJMLCBmYWxsaW5nIGJhY2sgdG8gYSBiYWNrdXAgVVJMIGlmIG5lY2Vzc2FyeS4KICAgICAqIFRocm93cyBhbiBlcnJvciBpZiBib3RoIFVSTHMgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIF9sb2FkV2l0aEJhY2t1cCgpIHsKICAgICAgaWYgKCF0aGlzLl9Nb2R1bGVQcm9taXNlKSB7CiAgICAgICAgdGhpcy5fTW9kdWxlUHJvbWlzZSA9IHRoaXMuX3RyeUxvYWQodGhpcy5fd2FzbVVSTCkuY2F0Y2goYXN5bmMgKGluaXRpYWxFcnJvcikgPT4gewogICAgICAgICAgY29uc3QgYmFja3VwVXJsID0gYGh0dHBzOi8vdW5wa2cuY29tLyR7UEFDS0FHRV9OQU1FfUAke1BBQ0tBR0VfVkVSU0lPTn0vZGlzdC9kb3Rsb3R0aWUtcGxheWVyLndhc21gOwogICAgICAgICAgY29uc29sZS53YXJuKGBQcmltYXJ5IFdBU00gbG9hZCBmYWlsZWQgZnJvbSAke3RoaXMuX3dhc21VUkx9LiBFcnJvcjogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBsb2FkIFdBU00gZnJvbSBiYWNrdXAgVVJMOiAke2JhY2t1cFVybH1gKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl90cnlMb2FkKGJhY2t1cFVybCk7CiAgICAgICAgICB9IGNhdGNoIChiYWNrdXBFcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcmltYXJ5IFdBU00gVVJMIGZhaWxlZDogJHtpbml0aWFsRXJyb3IubWVzc2FnZX1gKTsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQmFja3VwIFdBU00gVVJMIGZhaWxlZDogJHtiYWNrdXBFcnJvci5tZXNzYWdlfWApOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldBU00gbG9hZGluZyBmYWlsZWQgZnJvbSBhbGwgc291cmNlcy4iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fTW9kdWxlUHJvbWlzZTsKICAgIH0KICAgIC8qKgogICAgICogUHVibGljIG1ldGhvZCB0byBsb2FkIHRoZSBXZWJBc3NlbWJseSBtb2R1bGUuCiAgICAgKiBVdGlsaXplcyBhIHByaW1hcnkgYW5kIGJhY2t1cCBVUkwgZm9yIHJvYnVzdG5lc3MuCiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1vZHVsZT4gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbG9hZGVkIG1vZHVsZS4KICAgICAqLwogICAgc3RhdGljIGFzeW5jIGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9sb2FkV2l0aEJhY2t1cCgpOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIGEgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZSBhbmQgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbW9kdWxlIHByb21pc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAtICBUaGUgbmV3IFVSTCBmb3IgdGhlIFdBU00gZmlsZS4KICAgICAqLwogICAgc3RhdGljIHNldFdhc21VcmwodXJsKSB7CiAgICAgIHRoaXMuX3dhc21VUkwgPSB1cmw7CiAgICAgIHRoaXMuX01vZHVsZVByb21pc2UgPSBudWxsOwogICAgfQogIH07CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbgogIF9fcHVibGljRmllbGQoRG90TG90dGllV2FzbUxvYWRlciwgIl9Nb2R1bGVQcm9taXNlIiwgbnVsbCk7CiAgLy8gVVJMIGZvciB0aGUgV0FTTSBmaWxlLCBjb25zdHJ1Y3RlZCB1c2luZyBwYWNrYWdlIGluZm9ybWF0aW9uCiAgX19wdWJsaWNGaWVsZChEb3RMb3R0aWVXYXNtTG9hZGVyLCAiX3dhc21VUkwiLCBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8ke1BBQ0tBR0VfTkFNRX1AJHtQQUNLQUdFX1ZFUlNJT059L2Rpc3QvZG90bG90dGllLXBsYXllci53YXNtYCk7CgogIC8vIHNyYy9ldmVudC1tYW5hZ2VyLnRzCiAgdmFyIEV2ZW50TWFuYWdlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRMaXN0ZW5lcnMiLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTsKICAgIH0KICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgICAgbGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldCh0eXBlKTsKICAgICAgaWYgKCFsaXN0ZW5lcnMpIHsKICAgICAgICBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnNldCh0eXBlLCBsaXN0ZW5lcnMpOwogICAgICB9CiAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwogICAgfQogICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikgewogICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudExpc3RlbmVycy5nZXQodHlwZSk7CiAgICAgIGlmICghbGlzdGVuZXJzKSByZXR1cm47CiAgICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpOwogICAgICAgIGlmIChsaXN0ZW5lcnMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZGVsZXRlKHR5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5kZWxldGUodHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGRpc3BhdGNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC50eXBlKTsKICAgICAgbGlzdGVuZXJzPy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoZXZlbnQpKTsKICAgIH0KICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgewogICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5jbGVhcigpOwogICAgfQogIH07CgogIC8vIHNyYy91dGlscy50cwogIGZ1bmN0aW9uIGlzSGV4Q29sb3IoY29sb3IpIHsKICAgIHJldHVybiAvXiMoW1xkYS1mXXs2fXxbXGRhLWZdezh9KSQvaXUudGVzdChjb2xvcik7CiAgfQogIGZ1bmN0aW9uIGhleFN0cmluZ1RvUkdCQUludChjb2xvckhleCkgewogICAgaWYgKCFpc0hleENvbG9yKGNvbG9ySGV4KSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxldCBoZXggPSBjb2xvckhleC5yZXBsYWNlKCIjIiwgIiIpOwogICAgaGV4ID0gaGV4Lmxlbmd0aCA9PT0gNiA/IGAke2hleH1mZmAgOiBoZXg7CiAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNik7CiAgfQogIGZ1bmN0aW9uIGlzRG90TG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAoZmlsZURhdGEuYnl0ZUxlbmd0aCA8IDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgZmlsZVNpZ25hdHVyZSA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLnNsaWNlKDAsIFpJUF9TSUdOQVRVUkUuYnl0ZUxlbmd0aCkpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBaSVBfU0lHTkFUVVJFLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgIGlmIChaSVBfU0lHTkFUVVJFW2ldICE9PSBmaWxlU2lnbmF0dXJlW2ldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gaXNMb3R0aWVKU09OKGpzb24pIHsKICAgIHJldHVybiBMT1RUSUVfSlNPTl9NQU5EQVRPUllfRklFTERTLmV2ZXJ5KChmaWVsZCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzb24sIGZpZWxkKSk7CiAgfQogIGZ1bmN0aW9uIGlzTG90dGllKGZpbGVEYXRhKSB7CiAgICBpZiAodHlwZW9mIGZpbGVEYXRhID09PSAic3RyaW5nIikgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBpc0xvdHRpZUpTT04oSlNPTi5wYXJzZShmaWxlRGF0YSkpOwogICAgICB9IGNhdGNoIChfZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzTG90dGllSlNPTihmaWxlRGF0YSk7CiAgICB9CiAgfQoKICAvLyBzcmMvZG90bG90dGllLnRzCiAgdmFyIGNyZWF0ZUNvcmVNb2RlID0gKG1vZGUsIG1vZHVsZSkgPT4gewogICAgaWYgKG1vZGUgPT09ICJyZXZlcnNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gImJvdW5jZSIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5Nb2RlLkJvdW5jZTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gInJldmVyc2UtYm91bmNlIikgewogICAgICByZXR1cm4gbW9kdWxlLk1vZGUuUmV2ZXJzZUJvdW5jZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuTW9kZS5Gb3J3YXJkOwogICAgfQogIH07CiAgdmFyIGNyZWF0ZUNvcmVGaXQgPSAoZml0LCBtb2R1bGUpID0+IHsKICAgIGlmIChmaXQgPT09ICJjb250YWluIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5Db250YWluOwogICAgfSBlbHNlIGlmIChmaXQgPT09ICJjb3ZlciIpIHsKICAgICAgcmV0dXJuIG1vZHVsZS5GaXQuQ292ZXI7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpbGwiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpbGw7CiAgICB9IGVsc2UgaWYgKGZpdCA9PT0gImZpdC1oZWlnaHQiKSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0LkZpdEhlaWdodDsKICAgIH0gZWxzZSBpZiAoZml0ID09PSAiZml0LXdpZHRoIikgewogICAgICByZXR1cm4gbW9kdWxlLkZpdC5GaXRXaWR0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtb2R1bGUuRml0Lk5vbmU7CiAgICB9CiAgfTsKICB2YXIgY3JlYXRlQ29yZUFsaWduID0gKGFsaWduLCBtb2R1bGUpID0+IHsKICAgIGNvbnN0IGNvcmVBbGlnbiA9IG5ldyBtb2R1bGUuVmVjdG9yRmxvYXQoKTsKICAgIGNvcmVBbGlnbi5wdXNoX2JhY2soYWxpZ25bMF0pOwogICAgY29yZUFsaWduLnB1c2hfYmFjayhhbGlnblsxXSk7CiAgICByZXR1cm4gY29yZUFsaWduOwogIH07CiAgdmFyIGNyZWF0ZUNvcmVTZWdtZW50ID0gKHNlZ21lbnQsIG1vZHVsZSkgPT4gewogICAgY29uc3QgY29yZXNlZ21lbnQgPSBuZXcgbW9kdWxlLlZlY3RvckZsb2F0KCk7CiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT09IDIpIHJldHVybiBjb3Jlc2VnbWVudDsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzBdKTsKICAgIGNvcmVzZWdtZW50LnB1c2hfYmFjayhzZWdtZW50WzFdKTsKICAgIHJldHVybiBjb3Jlc2VnbWVudDsKICB9OwogIHZhciBfRG90TG90dGllID0gY2xhc3MgX0RvdExvdHRpZSB7CiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2NhbnZhcyIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfY29udGV4dCIsIG51bGwpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfZXZlbnRNYW5hZ2VyIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9hbmltYXRpb25GcmFtZUlkIiwgbnVsbCk7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9mcmFtZU1hbmFnZXIiKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2RvdExvdHRpZUNvcmUiLCBudWxsKTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX3JlbmRlckNvbmZpZyIsIHt9KTsKICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2lzRnJvemVuIiwgZmFsc2UpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYmFja2dyb3VuZENvbG9yIiwgbnVsbCk7CiAgICAgIHRoaXMuX2NhbnZhcyA9IGNvbmZpZy5jYW52YXM7CiAgICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyID0gbmV3IEV2ZW50TWFuYWdlcigpOwogICAgICB0aGlzLl9mcmFtZU1hbmFnZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVNYW5hZ2VyKCk7CiAgICAgIHRoaXMuX3JlbmRlckNvbmZpZyA9IGNvbmZpZy5yZW5kZXJDb25maWcgPz8ge307CiAgICAgIERvdExvdHRpZVdhc21Mb2FkZXIubG9hZCgpLnRoZW4oKG1vZHVsZSkgPT4gewogICAgICAgIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUgPSBtb2R1bGU7CiAgICAgICAgdGhpcy5fZG90TG90dGllQ29yZSA9IG5ldyBtb2R1bGUuRG90TG90dGllUGxheWVyKHsKICAgICAgICAgIGF1dG9wbGF5OiBjb25maWcuYXV0b3BsYXkgPz8gZmFsc2UsCiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDAsCiAgICAgICAgICBsb29wQW5pbWF0aW9uOiBjb25maWcubG9vcCA/PyBmYWxzZSwKICAgICAgICAgIG1vZGU6IGNyZWF0ZUNvcmVNb2RlKGNvbmZpZy5tb2RlID8/ICJmb3J3YXJkIiwgbW9kdWxlKSwKICAgICAgICAgIHNlZ21lbnQ6IGNyZWF0ZUNvcmVTZWdtZW50KGNvbmZpZy5zZWdtZW50ID8/IFtdLCBtb2R1bGUpLAogICAgICAgICAgc3BlZWQ6IGNvbmZpZy5zcGVlZCA/PyAxLAogICAgICAgICAgdXNlRnJhbWVJbnRlcnBvbGF0aW9uOiBjb25maWcudXNlRnJhbWVJbnRlcnBvbGF0aW9uID8/IHRydWUsCiAgICAgICAgICBtYXJrZXI6IGNvbmZpZy5tYXJrZXIgPz8gIiIsCiAgICAgICAgICBsYXlvdXQ6IGNvbmZpZy5sYXlvdXQgPyB7CiAgICAgICAgICAgIGFsaWduOiBjcmVhdGVDb3JlQWxpZ24oY29uZmlnLmxheW91dC5hbGlnbiwgbW9kdWxlKSwKICAgICAgICAgICAgZml0OiBjcmVhdGVDb3JlRml0KGNvbmZpZy5sYXlvdXQuZml0LCBtb2R1bGUpCiAgICAgICAgICB9IDogbW9kdWxlLmNyZWF0ZURlZmF1bHRMYXlvdXQoKQogICAgICAgIH0pOwogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJyZWFkeSIgfSk7CiAgICAgICAgaWYgKGNvbmZpZy5kYXRhKSB7CiAgICAgICAgICB0aGlzLl9sb2FkRnJvbURhdGEoY29uZmlnLmRhdGEpOwogICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnNyYykgewogICAgICAgICAgdGhpcy5fbG9hZEZyb21TcmMoY29uZmlnLnNyYyk7CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWcuYmFja2dyb3VuZENvbG9yKSB7CiAgICAgICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcihjb25maWcuYmFja2dyb3VuZENvbG9yKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICB0eXBlOiAibG9hZEVycm9yIiwKICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHdhc20gbW9kdWxlOiAke2Vycm9yfWApCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgX2Rpc3BhdGNoRXJyb3IobWVzc2FnZSkgewogICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpOwogICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAibG9hZEVycm9yIiwgZXJyb3I6IG5ldyBFcnJvcihtZXNzYWdlKSB9KTsKICAgIH0KICAgIGFzeW5jIF9mZXRjaERhdGEoc3JjKSB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc3JjKTsKICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGFuaW1hdGlvbiBkYXRhIGZyb20gVVJMOiAke3NyY30uICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpOwogICAgICBpZiAoaXNEb3RMb3R0aWUoZGF0YSkpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpOwogICAgfQogICAgX2xvYWRGcm9tRGF0YShkYXRhKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fY2FudmFzLndpZHRoOwogICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9jYW52YXMuaGVpZ2h0OwogICAgICBsZXQgbG9hZGVkID0gZmFsc2U7CiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICBpZiAoIWlzTG90dGllKGRhdGEpKSB7CiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEVycm9yKAogICAgICAgICAgICAiSW52YWxpZCBMb3R0aWUgSlNPTiBzdHJpbmc6IFRoZSBwcm92aWRlZCBzdHJpbmcgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTG90dGllIEpTT04gZm9ybWF0LiIKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxvYWRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUubG9hZEFuaW1hdGlvbkRhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7CiAgICAgICAgaWYgKCFpc0RvdExvdHRpZShkYXRhKSkgewogICAgICAgICAgdGhpcy5fZGlzcGF0Y2hFcnJvcigKICAgICAgICAgICAgIkludmFsaWQgZG90TG90dGllIEFycmF5QnVmZmVyOiBUaGUgcHJvdmlkZWQgQXJyYXlCdWZmZXIgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZG90TG90dGllIGZvcm1hdC4iCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsb2FkZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvYWREb3RMb3R0aWVEYXRhKGRhdGEsIHdpZHRoLCBoZWlnaHQpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAib2JqZWN0IikgewogICAgICAgIGlmICghaXNMb3R0aWUoZGF0YSkpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXJyb3IoCiAgICAgICAgICAgICJJbnZhbGlkIExvdHRpZSBKU09OIG9iamVjdDogVGhlIHByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBMb3R0aWUgSlNPTiBmb3JtYXQuIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkQW5pbWF0aW9uRGF0YShKU09OLnN0cmluZ2lmeShkYXRhKSwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFcnJvcigKICAgICAgICAgIGBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgZm9yIGFuaW1hdGlvbiBkYXRhLiBFeHBlY3RlZDogCiAgICAgICAgICAtIHN0cmluZyAoTG90dGllIEpTT04pLAogICAgICAgICAgLSBBcnJheUJ1ZmZlciAoZG90TG90dGllKSwKICAgICAgICAgIC0gb2JqZWN0IChMb3R0aWUgSlNPTikuIAogICAgICAgICAgUmVjZWl2ZWQ6ICR7dHlwZW9mIGRhdGF9YAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChsb2FkZWQpIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAibG9hZCIgfSk7CiAgICAgICAgaWYgKElTX0JST1dTRVIpIHsKICAgICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICB0eXBlOiAiZnJhbWUiLAogICAgICAgICAgY3VycmVudEZyYW1lOiB0aGlzLl9kb3RMb3R0aWVDb3JlLmN1cnJlbnRGcmFtZSgpCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCkuYXV0b3BsYXkpIHsKICAgICAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUucGxheSgpOwogICAgICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUuaXNQbGF5aW5nKCkpIHsKICAgICAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInBsYXkiIH0pOwogICAgICAgICAgICB0aGlzLl9hbmltYXRpb25GcmFtZUlkID0gdGhpcy5fZnJhbWVNYW5hZ2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3LmJpbmQodGhpcykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigic29tZXRoaW5nIHdlbnQgd3JvbmcsIHRoZSBhbmltYXRpb24gd2FzIHN1cHBvc2UgdG8gYXV0b3BsYXkiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFcnJvcigiRmFpbGVkIHRvIGxvYWQgYW5pbWF0aW9uIGRhdGEiKTsKICAgICAgfQogICAgfQogICAgX2xvYWRGcm9tU3JjKHNyYykgewogICAgICB0aGlzLl9mZXRjaERhdGEoc3JjKS50aGVuKChkYXRhKSA9PiB0aGlzLl9sb2FkRnJvbURhdGEoZGF0YSkpLmNhdGNoKChlcnJvcikgPT4gdGhpcy5fZGlzcGF0Y2hFcnJvcihgRmFpbGVkIHRvIGxvYWQgYW5pbWF0aW9uIGRhdGEgZnJvbSBVUkw6ICR7c3JjfS4gJHtlcnJvcn1gKSk7CiAgICB9CiAgICBnZXQgYWN0aXZlQW5pbWF0aW9uSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5hY3RpdmVBbmltYXRpb25JZCgpOwogICAgfQogICAgZ2V0IGFjdGl2ZVRoZW1lSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5hY3RpdmVUaGVtZUlkKCk7CiAgICB9CiAgICBnZXQgbGF5b3V0KCkgewogICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5sYXlvdXQ7CiAgICAgIGlmIChsYXlvdXQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYWxpZ246IFtsYXlvdXQuYWxpZ24uZ2V0KDApLCBsYXlvdXQuYWxpZ24uZ2V0KDEpXSwKICAgICAgICAgIGZpdDogKCgpID0+IHsKICAgICAgICAgICAgc3dpdGNoIChsYXlvdXQuZml0KSB7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuQ29udGFpbjoKICAgICAgICAgICAgICAgIHJldHVybiAiY29udGFpbiI7CiAgICAgICAgICAgICAgY2FzZSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5GaXQuQ292ZXI6CiAgICAgICAgICAgICAgICByZXR1cm4gImNvdmVyIjsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5GaWxsOgogICAgICAgICAgICAgICAgcmV0dXJuICJmaWxsIjsKICAgICAgICAgICAgICBjYXNlIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGU/LkZpdC5GaXRIZWlnaHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gImZpdC1oZWlnaHQiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0LkZpdFdpZHRoOgogICAgICAgICAgICAgICAgcmV0dXJuICJmaXQtd2lkdGgiOwogICAgICAgICAgICAgIGNhc2UgX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uRml0Lk5vbmU6CiAgICAgICAgICAgICAgICByZXR1cm4gIm5vbmUiOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gImNvbnRhaW4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSgpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gdm9pZCAwOwogICAgfQogICAgZ2V0IG1hcmtlcigpIHsKICAgICAgY29uc3QgbWFya2VyID0gdGhpcy5fZG90TG90dGllQ29yZT8uY29uZmlnKCkubWFya2VyOwogICAgICByZXR1cm4gbWFya2VyOwogICAgfQogICAgZ2V0IG1hbmlmZXN0KCkgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5fZG90TG90dGllQ29yZT8ubWFuaWZlc3RTdHJpbmcoKTsKICAgICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCAhbWFuaWZlc3QpIHJldHVybiBudWxsOwogICAgICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IEpTT04ucGFyc2UobWFuaWZlc3QpOwogICAgICAgIGlmIChPYmplY3Qua2V5cyhtYW5pZmVzdEpzb24pLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIG1hbmlmZXN0SnNvbjsKICAgICAgfSBjYXRjaCAoX2VycikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBnZXQgcmVuZGVyQ29uZmlnKCkgewogICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQ29uZmlnOwogICAgfQogICAgZ2V0IHNlZ21lbnQoKSB7CiAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5zZWdtZW50OwogICAgICBpZiAoc2VnbWVudCAmJiBzZWdtZW50LnNpemUoKSA9PT0gMikgewogICAgICAgIHJldHVybiBbc2VnbWVudC5nZXQoMCksIHNlZ21lbnQuZ2V0KDEpXTsKICAgICAgfQogICAgICByZXR1cm4gdm9pZCAwOwogICAgfQogICAgZ2V0IGxvb3AoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5sb29wQW5pbWF0aW9uID8/IGZhbHNlOwogICAgfQogICAgZ2V0IG1vZGUoKSB7CiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5tb2RlOwogICAgICBpZiAobW9kZSA9PT0gX0RvdExvdHRpZS5fd2FzbU1vZHVsZT8uTW9kZS5SZXZlcnNlKSB7CiAgICAgICAgcmV0dXJuICJyZXZlcnNlIjsKICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5Nb2RlLkJvdW5jZSkgewogICAgICAgIHJldHVybiAiYm91bmNlIjsKICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBfRG90TG90dGllLl93YXNtTW9kdWxlPy5Nb2RlLlJldmVyc2VCb3VuY2UpIHsKICAgICAgICByZXR1cm4gInJldmVyc2UtYm91bmNlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gImZvcndhcmQiOwogICAgICB9CiAgICB9CiAgICBnZXQgaXNGcm96ZW4oKSB7CiAgICAgIHJldHVybiB0aGlzLl9pc0Zyb3plbjsKICAgIH0KICAgIGdldCBiYWNrZ3JvdW5kQ29sb3IoKSB7CiAgICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPz8gIiI7CiAgICB9CiAgICBnZXQgYXV0b3BsYXkoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5hdXRvcGxheSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCB1c2VGcmFtZUludGVycG9sYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS51c2VGcmFtZUludGVycG9sYXRpb24gPz8gZmFsc2U7CiAgICB9CiAgICBnZXQgc3BlZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5jb25maWcoKS5zcGVlZCA/PyAwOwogICAgfQogICAgZ2V0IGlzUmVhZHkoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlICE9PSBudWxsOwogICAgfQogICAgZ2V0IGlzTG9hZGVkKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uaXNMb2FkZWQoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBpc1BsYXlpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5pc1BsYXlpbmcoKSA/PyBmYWxzZTsKICAgIH0KICAgIGdldCBpc1BhdXNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmlzUGF1c2VkKCkgPz8gZmFsc2U7CiAgICB9CiAgICBnZXQgaXNTdG9wcGVkKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uaXNTdG9wcGVkKCkgPz8gZmFsc2U7CiAgICB9CiAgICBnZXQgY3VycmVudEZyYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uY3VycmVudEZyYW1lKCkgPz8gMDsKICAgIH0KICAgIGdldCBsb29wQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5sb29wQ291bnQoKSA/PyAwOwogICAgfQogICAgZ2V0IHRvdGFsRnJhbWVzKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8udG90YWxGcmFtZXMoKSA/PyAwOwogICAgfQogICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uZHVyYXRpb24oKSA/PyAwOwogICAgfQogICAgZ2V0IHNlZ21lbnREdXJhdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LnNlZ21lbnREdXJhdGlvbigpID8/IDA7CiAgICB9CiAgICBnZXQgY2FudmFzKCkgewogICAgICByZXR1cm4gdGhpcy5fY2FudmFzOwogICAgfQogICAgbG9hZChjb25maWcpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwgfHwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgYXV0b3BsYXk6IGNvbmZpZy5hdXRvcGxheSA/PyBmYWxzZSwKICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDAsCiAgICAgICAgbG9vcEFuaW1hdGlvbjogY29uZmlnLmxvb3AgPz8gZmFsc2UsCiAgICAgICAgbW9kZTogY3JlYXRlQ29yZU1vZGUoY29uZmlnLm1vZGUgPz8gImZvcndhcmQiLCBfRG90TG90dGllLl93YXNtTW9kdWxlKSwKICAgICAgICBzZWdtZW50OiBjcmVhdGVDb3JlU2VnbWVudChjb25maWcuc2VnbWVudCA/PyBbXSwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSksCiAgICAgICAgc3BlZWQ6IGNvbmZpZy5zcGVlZCA/PyAxLAogICAgICAgIHVzZUZyYW1lSW50ZXJwb2xhdGlvbjogY29uZmlnLnVzZUZyYW1lSW50ZXJwb2xhdGlvbiA/PyB0cnVlLAogICAgICAgIG1hcmtlcjogY29uZmlnLm1hcmtlciA/PyAiIiwKICAgICAgICBsYXlvdXQ6IGNvbmZpZy5sYXlvdXQgPyB7CiAgICAgICAgICBhbGlnbjogY3JlYXRlQ29yZUFsaWduKGNvbmZpZy5sYXlvdXQuYWxpZ24sIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpLAogICAgICAgICAgZml0OiBjcmVhdGVDb3JlRml0KGNvbmZpZy5sYXlvdXQuZml0LCBfRG90TG90dGllLl93YXNtTW9kdWxlKQogICAgICAgIH0gOiBfRG90TG90dGllLl93YXNtTW9kdWxlLmNyZWF0ZURlZmF1bHRMYXlvdXQoKQogICAgICB9KTsKICAgICAgaWYgKGNvbmZpZy5kYXRhKSB7CiAgICAgICAgdGhpcy5fbG9hZEZyb21EYXRhKGNvbmZpZy5kYXRhKTsKICAgICAgfSBlbHNlIGlmIChjb25maWcuc3JjKSB7CiAgICAgICAgdGhpcy5fbG9hZEZyb21TcmMoY29uZmlnLnNyYyk7CiAgICAgIH0KICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoY29uZmlnLmJhY2tncm91bmRDb2xvciA/PyAiIik7CiAgICB9CiAgICBfcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCB0aGlzLl9jb250ZXh0ID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IHJlbmRlcmVkID0gdGhpcy5fZG90TG90dGllQ29yZS5yZW5kZXIoKTsKICAgICAgaWYgKHJlbmRlcmVkKSB7CiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5fZG90TG90dGllQ29yZS5idWZmZXIoKTsKICAgICAgICBjb25zdCBjbGFtcGVkQnVmZmVyID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlciwgMCwgdGhpcy5fY2FudmFzLndpZHRoICogdGhpcy5fY2FudmFzLmhlaWdodCAqIDQpOwogICAgICAgIGxldCBpbWFnZURhdGEgPSBudWxsOwogICAgICAgIGlmICh0eXBlb2YgSW1hZ2VEYXRhID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgaW1hZ2VEYXRhID0gdGhpcy5fY29udGV4dC5jcmVhdGVJbWFnZURhdGEodGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgIGltYWdlRGF0YS5kYXRhLnNldChjbGFtcGVkQnVmZmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW1hZ2VEYXRhID0gbmV3IEltYWdlRGF0YShjbGFtcGVkQnVmZmVyLCB0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9jb250ZXh0LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApOwogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICB0eXBlOiAicmVuZGVyIiwKICAgICAgICAgIGN1cnJlbnRGcmFtZTogdGhpcy5fZG90TG90dGllQ29yZS5jdXJyZW50RnJhbWUoKQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9kcmF3KCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCB0aGlzLl9jb250ZXh0ID09PSBudWxsIHx8ICF0aGlzLl9kb3RMb3R0aWVDb3JlLmlzUGxheWluZygpKSByZXR1cm47CiAgICAgIGNvbnN0IG5leHRGcmFtZSA9IHRoaXMuX2RvdExvdHRpZUNvcmUucmVxdWVzdEZyYW1lKCk7CiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldEZyYW1lKG5leHRGcmFtZSk7CiAgICAgIGlmICh1cGRhdGVkKSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJmcmFtZSIsCiAgICAgICAgICBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZW5kZXJlZCA9IHRoaXMuX3JlbmRlcigpOwogICAgICAgIGlmIChyZW5kZXJlZCkgewogICAgICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUuaXNDb21wbGV0ZSgpKSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLmxvb3BBbmltYXRpb24pIHsKICAgICAgICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goewogICAgICAgICAgICAgICAgdHlwZTogImxvb3AiLAogICAgICAgICAgICAgICAgbG9vcENvdW50OiB0aGlzLl9kb3RMb3R0aWVDb3JlLmxvb3BDb3VudCgpCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImNvbXBsZXRlIiB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLl9hbmltYXRpb25GcmFtZUlkID0gdGhpcy5fZnJhbWVNYW5hZ2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3LmJpbmQodGhpcykpOwogICAgfQogICAgcGxheSgpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnBsYXkoKTsKICAgICAgaWYgKG9rIHx8IHRoaXMuX2RvdExvdHRpZUNvcmUuaXNQbGF5aW5nKCkpIHsKICAgICAgICB0aGlzLl9pc0Zyb3plbiA9IGZhbHNlOwogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJwbGF5IiB9KTsKICAgICAgICB0aGlzLl9hbmltYXRpb25GcmFtZUlkID0gdGhpcy5fZnJhbWVNYW5hZ2VyLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3LmJpbmQodGhpcykpOwogICAgICB9CiAgICB9CiAgICBwYXVzZSgpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgY29uc3Qgb2sgPSB0aGlzLl9kb3RMb3R0aWVDb3JlLnBhdXNlKCk7CiAgICAgIGlmIChvayB8fCB0aGlzLl9kb3RMb3R0aWVDb3JlLmlzUGF1c2VkKCkpIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAicGF1c2UiIH0pOwogICAgICB9CiAgICB9CiAgICBzdG9wKCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBvayA9IHRoaXMuX2RvdExvdHRpZUNvcmUuc3RvcCgpOwogICAgICBpZiAob2spIHsKICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGlzcGF0Y2goeyB0eXBlOiAiZnJhbWUiLCBjdXJyZW50RnJhbWU6IHRoaXMuX2RvdExvdHRpZUNvcmUuY3VycmVudEZyYW1lKCkgfSk7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogInN0b3AiIH0pOwogICAgICB9CiAgICB9CiAgICBzZXRGcmFtZShmcmFtZSkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoZnJhbWUgPCAwIHx8IGZyYW1lID4gdGhpcy5fZG90TG90dGllQ29yZS50b3RhbEZyYW1lcygpKSByZXR1cm47CiAgICAgIGNvbnN0IG9rID0gdGhpcy5fZG90TG90dGllQ29yZS5zZWVrKGZyYW1lKTsKICAgICAgaWYgKG9rKSB7CiAgICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRpc3BhdGNoKHsgdHlwZTogImZyYW1lIiwgY3VycmVudEZyYW1lOiB0aGlzLl9kb3RMb3R0aWVDb3JlLmN1cnJlbnRGcmFtZSgpIH0pOwogICAgICAgIHRoaXMuX3JlbmRlcigpOwogICAgICB9CiAgICB9CiAgICBzZXRTcGVlZChzcGVlZCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBzcGVlZAogICAgICB9KTsKICAgIH0KICAgIHNldEJhY2tncm91bmRDb2xvcihjb2xvcikgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoSVNfQlJPV1NFUiAmJiB0aGlzLl9jYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkgewogICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoZXhTdHJpbmdUb1JHQkFJbnQoY29sb3IpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiAgICB9CiAgICBzZXRMb29wKGxvb3ApIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5zZXRDb25maWcoewogICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgbG9vcEFuaW1hdGlvbjogbG9vcAogICAgICB9KTsKICAgIH0KICAgIHNldFVzZUZyYW1lSW50ZXJwb2xhdGlvbih1c2VGcmFtZUludGVycG9sYXRpb24pIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5zZXRDb25maWcoewogICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgdXNlRnJhbWVJbnRlcnBvbGF0aW9uCiAgICAgIH0pOwogICAgfQogICAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikgewogICAgICB0aGlzLl9ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7CiAgICB9CiAgICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmU/LmRlbGV0ZSgpOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlID0gbnVsbDsKICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgdHlwZTogImRlc3Ryb3kiCiAgICAgIH0pOwogICAgICB0aGlzLl9ldmVudE1hbmFnZXIucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgdGhpcy5fY2xlYW51cFN0YXRlTWFjaGluZUxpc3RlbmVycygpOwogICAgfQogICAgZnJlZXplKCkgewogICAgICBpZiAodGhpcy5fYW5pbWF0aW9uRnJhbWVJZCA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9mcmFtZU1hbmFnZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJZCk7CiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSBudWxsOwogICAgICB0aGlzLl9pc0Zyb3plbiA9IHRydWU7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJmcmVlemUiIH0pOwogICAgfQogICAgdW5mcmVlemUoKSB7CiAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZUlkICE9PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lSWQgPSB0aGlzLl9mcmFtZU1hbmFnZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcuYmluZCh0aGlzKSk7CiAgICAgIHRoaXMuX2lzRnJvemVuID0gZmFsc2U7CiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJ1bmZyZWV6ZSIgfSk7CiAgICB9CiAgICByZXNpemUoKSB7CiAgICAgIGlmIChJU19CUk9XU0VSICYmIHRoaXMuX2NhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7CiAgICAgICAgY29uc3QgZHByID0gdGhpcy5fcmVuZGVyQ29uZmlnLmRldmljZVBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTsKICAgICAgICBjb25zdCB7IGhlaWdodDogY2xpZW50SGVpZ2h0LCB3aWR0aDogY2xpZW50V2lkdGggfSA9IHRoaXMuX2NhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBjbGllbnRXaWR0aCAqIGRwcjsKICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gY2xpZW50SGVpZ2h0ICogZHByOwogICAgICB9CiAgICAgIGNvbnN0IG9rID0gdGhpcy5fZG90TG90dGllQ29yZT8ucmVzaXplKHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7CiAgICAgIGlmIChvaykgewogICAgICAgIHRoaXMuX3JlbmRlcigpOwogICAgICB9CiAgICB9CiAgICBzZXRTZWdtZW50KHN0YXJ0RnJhbWUsIGVuZEZyYW1lKSB7CiAgICAgIGlmICh0aGlzLl9kb3RMb3R0aWVDb3JlID09PSBudWxsIHx8IF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUgPT09IG51bGwpIHJldHVybjsKICAgICAgdGhpcy5fZG90TG90dGllQ29yZS5zZXRDb25maWcoewogICAgICAgIC4uLnRoaXMuX2RvdExvdHRpZUNvcmUuY29uZmlnKCksCiAgICAgICAgc2VnbWVudDogY3JlYXRlQ29yZVNlZ21lbnQoW3N0YXJ0RnJhbWUsIGVuZEZyYW1lXSwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSkKICAgICAgfSk7CiAgICB9CiAgICBzZXRNb2RlKG1vZGUpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwgfHwgX0RvdExvdHRpZS5fd2FzbU1vZHVsZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBtb2RlOiBjcmVhdGVDb3JlTW9kZShtb2RlLCBfRG90TG90dGllLl93YXNtTW9kdWxlKQogICAgICB9KTsKICAgIH0KICAgIHNldFJlbmRlckNvbmZpZyhjb25maWcpIHsKICAgICAgdGhpcy5fcmVuZGVyQ29uZmlnID0gY29uZmlnOwogICAgfQogICAgbG9hZEFuaW1hdGlvbihhbmltYXRpb25JZCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCB0aGlzLl9kb3RMb3R0aWVDb3JlLmFjdGl2ZUFuaW1hdGlvbklkKCkgPT09IGFuaW1hdGlvbklkKSByZXR1cm47CiAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmUubG9hZEFuaW1hdGlvbihhbmltYXRpb25JZCwgdGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTsKICAgICAgaWYgKGxvYWRlZCkgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7IHR5cGU6ICJsb2FkIiB9KTsKICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kaXNwYXRjaCh7CiAgICAgICAgICB0eXBlOiAibG9hZEVycm9yIiwKICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoYEZhaWxlZCB0byBhbmltYXRpb24gOiR7YW5pbWF0aW9uSWR9YCkKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgc2V0TWFya2VyKG1hcmtlcikgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCkgcmV0dXJuOwogICAgICB0aGlzLl9kb3RMb3R0aWVDb3JlLnNldENvbmZpZyh7CiAgICAgICAgLi4udGhpcy5fZG90TG90dGllQ29yZS5jb25maWcoKSwKICAgICAgICBtYXJrZXIKICAgICAgfSk7CiAgICB9CiAgICBtYXJrZXJzKCkgewogICAgICBjb25zdCBtYXJrZXJzID0gdGhpcy5fZG90TG90dGllQ29yZT8ubWFya2VycygpOwogICAgICBpZiAobWFya2VycykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7IGkgKz0gMSkgewogICAgICAgICAgY29uc3QgbWFya2VyID0gbWFya2Vycy5nZXQoaSk7CiAgICAgICAgICByZXN1bHQucHVzaCh7CiAgICAgICAgICAgIG5hbWU6IG1hcmtlci5uYW1lLAogICAgICAgICAgICB0aW1lOiBtYXJrZXIudGltZSwKICAgICAgICAgICAgZHVyYXRpb246IG1hcmtlci5kdXJhdGlvbgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgbG9hZFRoZW1lKHRoZW1lSWQpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkVGhlbWUodGhlbWVJZCk7CiAgICAgIHRoaXMuX3JlbmRlcigpOwogICAgICByZXR1cm4gbG9hZGVkOwogICAgfQogICAgbG9hZFRoZW1lRGF0YSh0aGVtZURhdGEpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5fZG90TG90dGllQ29yZS5sb2FkVGhlbWVEYXRhKHRoZW1lRGF0YSk7CiAgICAgIHRoaXMuX3JlbmRlcigpOwogICAgICByZXR1cm4gbG9hZGVkOwogICAgfQogICAgc2V0TGF5b3V0KGxheW91dCkgewogICAgICBpZiAodGhpcy5fZG90TG90dGllQ29yZSA9PT0gbnVsbCB8fCBfRG90TG90dGllLl93YXNtTW9kdWxlID09PSBudWxsKSByZXR1cm47CiAgICAgIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Q29uZmlnKHsKICAgICAgICAuLi50aGlzLl9kb3RMb3R0aWVDb3JlLmNvbmZpZygpLAogICAgICAgIGxheW91dDogewogICAgICAgICAgYWxpZ246IGNyZWF0ZUNvcmVBbGlnbihsYXlvdXQuYWxpZ24sIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpLAogICAgICAgICAgZml0OiBjcmVhdGVDb3JlRml0KGxheW91dC5maXQsIF9Eb3RMb3R0aWUuX3dhc21Nb2R1bGUpCiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgaWYgKHRoaXMuX2RvdExvdHRpZUNvcmUgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmUuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICB9CiAgICBzdGF0aWMgc2V0V2FzbVVybCh1cmwpIHsKICAgICAgRG90TG90dGllV2FzbUxvYWRlci5zZXRXYXNtVXJsKHVybCk7CiAgICB9CiAgICBsb2FkU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZUlkKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5sb2FkU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZUlkKSA/PyBmYWxzZTsKICAgIH0KICAgIHN0YXJ0U3RhdGVNYWNoaW5lKCkgewogICAgICBjb25zdCBzdGFydGVkID0gdGhpcy5fZG90TG90dGllQ29yZT8uc3RhcnRTdGF0ZU1hY2hpbmUoKSA/PyBmYWxzZTsKICAgICAgaWYgKHN0YXJ0ZWQpIHsKICAgICAgICB0aGlzLl9zZXR1cFN0YXRlTWFjaGluZUxpc3RlbmVycygpOwogICAgICB9CiAgICAgIHJldHVybiBzdGFydGVkOwogICAgfQogICAgc3RvcFN0YXRlTWFjaGluZSgpIHsKICAgICAgY29uc3Qgc3RvcHBlZCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LnN0b3BTdGF0ZU1hY2hpbmUoKSA/PyBmYWxzZTsKICAgICAgaWYgKHN0b3BwZWQpIHsKICAgICAgICB0aGlzLl9jbGVhbnVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0b3BwZWQ7CiAgICB9CiAgICBfZ2V0UG9pbnRlclBvc2l0aW9uKGV2ZW50KSB7CiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHNjYWxlWCA9IHRoaXMuX2NhbnZhcy53aWR0aCAvIHJlY3Qud2lkdGg7CiAgICAgIGNvbnN0IHNjYWxlWSA9IHRoaXMuX2NhbnZhcy5oZWlnaHQgLyByZWN0LmhlaWdodDsKICAgICAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IHRoaXMuX3JlbmRlckNvbmZpZy5kZXZpY2VQaXhlbFJhdGlvIHx8IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7CiAgICAgIGNvbnN0IHggPSAoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgKiBzY2FsZVggLyBkZXZpY2VQaXhlbFJhdGlvOwogICAgICBjb25zdCB5ID0gKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgKiBzY2FsZVkgLyBkZXZpY2VQaXhlbFJhdGlvOwogICAgICByZXR1cm4gewogICAgICAgIHgsCiAgICAgICAgeQogICAgICB9OwogICAgfQogICAgX29uUG9pbnRlclVwKGV2ZW50KSB7CiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uKGV2ZW50KTsKICAgICAgdGhpcy5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoYE9uUG9pbnRlclVwOiAke3h9ICR7eX1gKTsKICAgIH0KICAgIF9vblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uKGV2ZW50KTsKICAgICAgdGhpcy5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoYE9uUG9pbnRlckRvd246ICR7eH0gJHt5fWApOwogICAgfQogICAgX29uUG9pbnRlck1vdmUoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyTW92ZTogJHt4fSAke3l9YCk7CiAgICB9CiAgICBfb25Qb2ludGVyRW50ZXIoZXZlbnQpIHsKICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLl9nZXRQb2ludGVyUG9zaXRpb24oZXZlbnQpOwogICAgICB0aGlzLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChgT25Qb2ludGVyRW50ZXI6ICR7eH0gJHt5fWApOwogICAgfQogICAgX29uUG9pbnRlckxlYXZlKGV2ZW50KSB7CiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gdGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uKGV2ZW50KTsKICAgICAgdGhpcy5wb3N0U3RhdGVNYWNoaW5lRXZlbnQoYE9uUG9pbnRlckV4aXQ6ICR7eH0gJHt5fWApOwogICAgfQogICAgX29uQ29tcGxldGUoKSB7CiAgICAgIHRoaXMucG9zdFN0YXRlTWFjaGluZUV2ZW50KCJPbkNvbXBsZXRlIik7CiAgICB9CiAgICAvKioKICAgICAqIEBleHBlcmltZW50YWwKICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCB0byBiZSBwb3N0ZWQgdG8gdGhlIHN0YXRlIG1hY2hpbmUKICAgICAqIEByZXR1cm5zIGJvb2xlYW4gLSB0cnVlIGlmIHRoZSBldmVudCB3YXMgcG9zdGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHBvc3RTdGF0ZU1hY2hpbmVFdmVudChldmVudCkgewogICAgICBjb25zdCBydCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LnBvc3RFdmVudFBheWxvYWQoZXZlbnQpID8/IDE7CiAgICAgIGlmIChydCA9PT0gMikgewogICAgICAgIHRoaXMucGxheSgpOwogICAgICB9IGVsc2UgaWYgKHJ0ID09PSAzKSB7CiAgICAgICAgdGhpcy5wYXVzZSgpOwogICAgICB9IGVsc2UgaWYgKHJ0ID09PSA0KSB7CiAgICAgICAgdGhpcy5fcmVuZGVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJ0OwogICAgfQogICAgZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKCkgewogICAgICBpZiAoIXRoaXMuX2RvdExvdHRpZUNvcmUpIHJldHVybiBbXTsKICAgICAgY29uc3QgbGlzdGVuZXJzVmVjdG9yID0gdGhpcy5fZG90TG90dGllQ29yZS5zdGF0ZU1hY2hpbmVGcmFtZXdvcmtTZXR1cCgpOwogICAgICBjb25zdCBsaXN0ZW5lcnMgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0ZW5lcnNWZWN0b3Iuc2l6ZSgpOyBpICs9IDEpIHsKICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcnNWZWN0b3IuZ2V0KGkpKTsKICAgICAgfQogICAgICByZXR1cm4gbGlzdGVuZXJzOwogICAgfQogICAgX3NldHVwU3RhdGVNYWNoaW5lTGlzdGVuZXJzKCkgewogICAgICBpZiAoSVNfQlJPV1NFUiAmJiB0aGlzLl9jYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiB0aGlzLl9kb3RMb3R0aWVDb3JlICE9PSBudWxsICYmIHRoaXMuaXNMb2FkZWQpIHsKICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldFN0YXRlTWFjaGluZUxpc3RlbmVycygpOwogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJVcCIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5fb25Qb2ludGVyVXAuYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJEb3duIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsIHRoaXMuX29uUG9pbnRlckRvd24uYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJNb3ZlIikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuX29uUG9pbnRlck1vdmUuYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJFbnRlciIpKSB7CiAgICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmVudGVyIiwgdGhpcy5fb25Qb2ludGVyRW50ZXIuYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgICAgIGlmIChsaXN0ZW5lcnMuaW5jbHVkZXMoIlBvaW50ZXJFeGl0IikpIHsKICAgICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCB0aGlzLl9vblBvaW50ZXJMZWF2ZS5iaW5kKHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3RlbmVycy5pbmNsdWRlcygiQ29tcGxldGUiKSkgewogICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIHRoaXMuX29uQ29tcGxldGUuYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBfY2xlYW51cFN0YXRlTWFjaGluZUxpc3RlbmVycygpIHsKICAgICAgaWYgKElTX0JST1dTRVIgJiYgdGhpcy5fY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5fb25Qb2ludGVyVXAuYmluZCh0aGlzKSk7CiAgICAgICAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgdGhpcy5fb25Qb2ludGVyRG93bi5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLl9vblBvaW50ZXJNb3ZlLmJpbmQodGhpcykpOwogICAgICAgIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCB0aGlzLl9vblBvaW50ZXJFbnRlci5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgdGhpcy5fb25Qb2ludGVyTGVhdmUuYmluZCh0aGlzKSk7CiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIHRoaXMuX29uQ29tcGxldGUuYmluZCh0aGlzKSk7CiAgICAgIH0KICAgIH0KICAgIGxvYWRTdGF0ZU1hY2hpbmVEYXRhKHN0YXRlTWFjaGluZURhdGEpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvdExvdHRpZUNvcmU/LmxvYWRTdGF0ZU1hY2hpbmVEYXRhKHN0YXRlTWFjaGluZURhdGEpID8/IGZhbHNlOwogICAgfQogICAgYW5pbWF0aW9uU2l6ZSgpIHsKICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9kb3RMb3R0aWVDb3JlPy5hbmltYXRpb25TaXplKCkuZ2V0KDApID8/IDA7CiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2RvdExvdHRpZUNvcmU/LmFuaW1hdGlvblNpemUoKS5nZXQoMSkgPz8gMDsKICAgICAgcmV0dXJuIHsKICAgICAgICB3aWR0aCwKICAgICAgICBoZWlnaHQKICAgICAgfTsKICAgIH0KICAgIHNldFN0YXRlTWFjaGluZUJvb2xlYW5Db250ZXh0KG5hbWUsIHZhbHVlKSB7CiAgICAgIHJldHVybiB0aGlzLl9kb3RMb3R0aWVDb3JlPy5zZXRTdGF0ZU1hY2hpbmVCb29sZWFuQ29udGV4dChuYW1lLCB2YWx1ZSkgPz8gZmFsc2U7CiAgICB9CiAgICBzZXRTdGF0ZU1hY2hpbmVOdW1lcmljQ29udGV4dChuYW1lLCB2YWx1ZSkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2V0U3RhdGVNYWNoaW5lTnVtZXJpY0NvbnRleHQobmFtZSwgdmFsdWUpID8/IGZhbHNlOwogICAgfQogICAgc2V0U3RhdGVNYWNoaW5lU3RyaW5nQ29udGV4dChuYW1lLCB2YWx1ZSkgewogICAgICByZXR1cm4gdGhpcy5fZG90TG90dGllQ29yZT8uc2V0U3RhdGVNYWNoaW5lU3RyaW5nQ29udGV4dChuYW1lLCB2YWx1ZSkgPz8gZmFsc2U7CiAgICB9CiAgfTsKICBfX3B1YmxpY0ZpZWxkKF9Eb3RMb3R0aWUsICJfd2FzbU1vZHVsZSIsIG51bGwpOwogIHZhciBEb3RMb3R0aWUgPSBfRG90TG90dGllOwoKICAvLyBzcmMvd29ya2VyL2RvdGxvdHRpZS53b3JrZXIudHMKICB2YXIgaW5zdGFuY2VzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgZXZlbnRIYW5kbGVyTWFwID0gewogICAgcmVhZHk6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uUmVhZHkiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICBjb21wbGV0ZTogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25Db21wbGV0ZSIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGxvYWQ6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbG9hZEV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkxvYWQiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBsb2FkRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGxvYWRFcnJvcjogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBsb2FkRXJyb3JFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25Mb2FkRXJyb3IiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBsb2FkRXJyb3JFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgbG9vcDogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBsb29wRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uTG9vcCIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IGxvb3BFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgcGxheTogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBwbGF5RXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uUGxheSIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IHBsYXlFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgcGF1c2U6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcGF1c2VFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25QYXVzZSIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IHBhdXNlRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIHN0b3A6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgc3RvcEV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvblN0b3AiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBzdG9wRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGZyYW1lOiAoaW5zdGFuY2VJZCkgPT4gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGZyYW1lRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uRnJhbWUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBmcmFtZUV2ZW50CiAgICAgICAgfQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0sCiAgICByZW5kZXI6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgcmVuZGVyRXZlbnQgPSBldmVudDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6ICIiLAogICAgICAgIG1ldGhvZDogIm9uUmVuZGVyIiwKICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgIGluc3RhbmNlSWQsCiAgICAgICAgICBldmVudDogcmVuZGVyRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGZyZWV6ZTogKGluc3RhbmNlSWQpID0+IChldmVudCkgPT4gewogICAgICBjb25zdCBmcmVlemVFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25GcmVlemUiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBmcmVlemVFdmVudAogICAgICAgIH0KICAgICAgfTsKICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICB9LAogICAgdW5mcmVlemU6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdW5mcmVlemVFdmVudCA9IGV2ZW50OwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogIiIsCiAgICAgICAgbWV0aG9kOiAib25VbmZyZWV6ZSIsCiAgICAgICAgcmVzdWx0OiB7CiAgICAgICAgICBpbnN0YW5jZUlkLAogICAgICAgICAgZXZlbnQ6IHVuZnJlZXplRXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfSwKICAgIGRlc3Ryb3k6IChpbnN0YW5jZUlkKSA9PiAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZGVzdHJveUV2ZW50ID0gZXZlbnQ7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gewogICAgICAgIGlkOiAiIiwKICAgICAgICBtZXRob2Q6ICJvbkRlc3Ryb3kiLAogICAgICAgIHJlc3VsdDogewogICAgICAgICAgaW5zdGFuY2VJZCwKICAgICAgICAgIGV2ZW50OiBkZXN0cm95RXZlbnQKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgfQogIH07CiAgdmFyIGNvbW1hbmRzID0gewogICAgZ2V0RG90TG90dGllSW5zdGFuY2VTdGF0ZShyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBjb25zdCBzdGF0ZSA9IHsKICAgICAgICBpc0xvYWRlZDogaW5zdGFuY2UuaXNMb2FkZWQsCiAgICAgICAgaXNQYXVzZWQ6IGluc3RhbmNlLmlzUGF1c2VkLAogICAgICAgIGlzUGxheWluZzogaW5zdGFuY2UuaXNQbGF5aW5nLAogICAgICAgIGlzU3RvcHBlZDogaW5zdGFuY2UuaXNTdG9wcGVkLAogICAgICAgIGlzRnJvemVuOiBpbnN0YW5jZS5pc0Zyb3plbiwKICAgICAgICBsb29wOiBpbnN0YW5jZS5sb29wLAogICAgICAgIG1vZGU6IGluc3RhbmNlLm1vZGUsCiAgICAgICAgc3BlZWQ6IGluc3RhbmNlLnNwZWVkLAogICAgICAgIGN1cnJlbnRGcmFtZTogaW5zdGFuY2UuY3VycmVudEZyYW1lLAogICAgICAgIHRvdGFsRnJhbWVzOiBpbnN0YW5jZS50b3RhbEZyYW1lcywKICAgICAgICBkdXJhdGlvbjogaW5zdGFuY2UuZHVyYXRpb24sCiAgICAgICAgdXNlRnJhbWVJbnRlcnBvbGF0aW9uOiBpbnN0YW5jZS51c2VGcmFtZUludGVycG9sYXRpb24sCiAgICAgICAgcmVuZGVyQ29uZmlnOiBpbnN0YW5jZS5yZW5kZXJDb25maWcsCiAgICAgICAgbWFya2VyOiBpbnN0YW5jZS5tYXJrZXIsCiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpbnN0YW5jZS5iYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgbWFya2VyczogaW5zdGFuY2UubWFya2VycygpLAogICAgICAgIGFjdGl2ZUFuaW1hdGlvbklkOiBpbnN0YW5jZS5hY3RpdmVBbmltYXRpb25JZCwKICAgICAgICBhY3RpdmVUaGVtZUlkOiBpbnN0YW5jZS5hY3RpdmVUaGVtZUlkLAogICAgICAgIGF1dG9wbGF5OiBpbnN0YW5jZS5hdXRvcGxheSwKICAgICAgICBzZWdtZW50OiBpbnN0YW5jZS5zZWdtZW50LAogICAgICAgIGxheW91dDogaW5zdGFuY2UubGF5b3V0LAogICAgICAgIHNlZ21lbnREdXJhdGlvbjogaW5zdGFuY2Uuc2VnbWVudER1cmF0aW9uLAogICAgICAgIGlzUmVhZHk6IGluc3RhbmNlLmlzUmVhZHksCiAgICAgICAgbWFuaWZlc3Q6IGluc3RhbmNlLm1hbmlmZXN0CiAgICAgIH07CiAgICAgIHJldHVybiB7CiAgICAgICAgc3RhdGUKICAgICAgfTsKICAgIH0sCiAgICBzZXRMYXlvdXQocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgbGF5b3V0ID0gcmVxdWVzdC5wYXJhbXMubGF5b3V0OwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRMYXlvdXQobGF5b3V0KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgIH07CiAgICB9LAogICAgZ2V0U3RhdGVNYWNoaW5lTGlzdGVuZXJzKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRTdGF0ZU1hY2hpbmVMaXN0ZW5lcnMoKTsKICAgIH0sCiAgICBwb3N0U3RhdGVNYWNoaW5lRXZlbnQocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LnBhcmFtcy5ldmVudDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnBvc3RTdGF0ZU1hY2hpbmVFdmVudChldmVudCk7CiAgICB9LAogICAgc3RhcnRTdGF0ZU1hY2hpbmUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnN0YXJ0U3RhdGVNYWNoaW5lKCk7CiAgICB9LAogICAgc3RvcFN0YXRlTWFjaGluZShyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2Uuc3RvcFN0YXRlTWFjaGluZSgpOwogICAgfSwKICAgIGxvYWRTdGF0ZU1hY2hpbmUocmVxdWVzdCkgewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lSWQgPSByZXF1ZXN0LnBhcmFtcy5zdGF0ZU1hY2hpbmVJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lSWQpOwogICAgfSwKICAgIGxvYWRTdGF0ZU1hY2hpbmVEYXRhKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSByZXF1ZXN0LnBhcmFtcy5zdGF0ZU1hY2hpbmVEYXRhOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UubG9hZFN0YXRlTWFjaGluZURhdGEoc3RhdGVNYWNoaW5lRGF0YSk7CiAgICB9LAogICAgY3JlYXRlOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgY29uZmlnID0gcmVxdWVzdC5wYXJhbXMuY29uZmlnOwogICAgICBjb25zdCB3aWR0aCA9IHJlcXVlc3QucGFyYW1zLndpZHRoOwogICAgICBjb25zdCBoZWlnaHQgPSByZXF1ZXN0LnBhcmFtcy5oZWlnaHQ7CiAgICAgIGlmIChpbnN0YW5jZXNNYXAuaGFzKGluc3RhbmNlSWQpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gYWxyZWFkeSBleGlzdHMuYCk7CiAgICAgIH0KICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRG90TG90dGllKGNvbmZpZyk7CiAgICAgIGluc3RhbmNlLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGluc3RhbmNlLmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICBpbnN0YW5jZXNNYXAuc2V0KGluc3RhbmNlSWQsIGluc3RhbmNlKTsKICAgICAgY29uc3QgZXZlbnRzID0gWwogICAgICAgICJjb21wbGV0ZSIsCiAgICAgICAgImZyYW1lIiwKICAgICAgICAibG9hZCIsCiAgICAgICAgImxvYWRFcnJvciIsCiAgICAgICAgImxvb3AiLAogICAgICAgICJwYXVzZSIsCiAgICAgICAgInBsYXkiLAogICAgICAgICJzdG9wIiwKICAgICAgICAiZGVzdHJveSIsCiAgICAgICAgImZyZWV6ZSIsCiAgICAgICAgInVuZnJlZXplIiwKICAgICAgICAicmVuZGVyIiwKICAgICAgICAicmVhZHkiCiAgICAgIF07CiAgICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4gewogICAgICAgIGluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2ZW50SGFuZGxlck1hcFtldmVudF0oaW5zdGFuY2VJZCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBpbnN0YW5jZUlkCiAgICAgIH07CiAgICB9LAogICAgZGVzdHJveTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuOwogICAgICBpbnN0YW5jZS5kZXN0cm95KCk7CiAgICAgIGluc3RhbmNlc01hcC5kZWxldGUoaW5zdGFuY2VJZCk7CiAgICB9LAogICAgZnJlZXplOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UuZnJlZXplKCk7CiAgICB9LAogICAgbG9hZDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGNvbmZpZyA9IHJlcXVlc3QucGFyYW1zLmNvbmZpZzsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UubG9hZChjb25maWcpOwogICAgfSwKICAgIGxvYWRBbmltYXRpb246IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBhbmltYXRpb25JZCA9IHJlcXVlc3QucGFyYW1zLmFuaW1hdGlvbklkOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5sb2FkQW5pbWF0aW9uKGFuaW1hdGlvbklkKTsKICAgIH0sCiAgICBsb2FkVGhlbWU6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCB0aGVtZUlkID0gcmVxdWVzdC5wYXJhbXMudGhlbWVJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLmxvYWRUaGVtZSh0aGVtZUlkKTsKICAgIH0sCiAgICBsb2FkVGhlbWVEYXRhOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgdGhlbWVEYXRhID0gcmVxdWVzdC5wYXJhbXMudGhlbWVEYXRhOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFuY2UubG9hZFRoZW1lRGF0YSh0aGVtZURhdGEpOwogICAgfSwKICAgIHBhdXNlOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnBhdXNlKCk7CiAgICB9LAogICAgcGxheTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0YW5jZS5wbGF5KCk7CiAgICB9LAogICAgcmVzaXplOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3Qgd2lkdGggPSByZXF1ZXN0LnBhcmFtcy53aWR0aDsKICAgICAgY29uc3QgaGVpZ2h0ID0gcmVxdWVzdC5wYXJhbXMuaGVpZ2h0OwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBpbnN0YW5jZS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgaW5zdGFuY2UucmVzaXplKCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICB9OwogICAgfSwKICAgIHNldEJhY2tncm91bmRDb2xvcjogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHJlcXVlc3QucGFyYW1zLmJhY2tncm91bmRDb2xvcjsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0QmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7CiAgICB9LAogICAgc2V0RnJhbWU6IChyZXF1ZXN0KSA9PiB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBmcmFtZSA9IHJlcXVlc3QucGFyYW1zLmZyYW1lOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRGcmFtZShmcmFtZSk7CiAgICB9LAogICAgc2V0TW9kZTogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IG1vZGUgPSByZXF1ZXN0LnBhcmFtcy5tb2RlOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRNb2RlKG1vZGUpOwogICAgfSwKICAgIHNldFJlbmRlckNvbmZpZzogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHJlbmRlckNvbmZpZyA9IHJlcXVlc3QucGFyYW1zLnJlbmRlckNvbmZpZzsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0UmVuZGVyQ29uZmlnKHJlbmRlckNvbmZpZyk7CiAgICB9LAogICAgc2V0U2VnbWVudDogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHNlZ21lbnQgPSByZXF1ZXN0LnBhcmFtcy5zZWdtZW50OwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRTZWdtZW50KHNlZ21lbnRbMF0sIHNlZ21lbnRbMV0pOwogICAgfSwKICAgIHNldFNwZWVkOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3Qgc3BlZWQgPSByZXF1ZXN0LnBhcmFtcy5zcGVlZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0U3BlZWQoc3BlZWQpOwogICAgfSwKICAgIHNldFVzZUZyYW1lSW50ZXJwb2xhdGlvbjogKHJlcXVlc3QpID0+IHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IHVzZUZyYW1lSW50ZXJwb2xhdGlvbiA9IHJlcXVlc3QucGFyYW1zLnVzZUZyYW1lSW50ZXJwb2xhdGlvbjsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc2V0VXNlRnJhbWVJbnRlcnBvbGF0aW9uKHVzZUZyYW1lSW50ZXJwb2xhdGlvbik7CiAgICB9LAogICAgc2V0V2FzbVVybDogKHJlcXVlc3QpID0+IHsKICAgICAgRG90TG90dGllLnNldFdhc21VcmwocmVxdWVzdC5wYXJhbXMudXJsKTsKICAgIH0sCiAgICBzdG9wOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2Uuc3RvcCgpOwogICAgfSwKICAgIHVuZnJlZXplOiAocmVxdWVzdCkgPT4gewogICAgICBjb25zdCBpbnN0YW5jZUlkID0gcmVxdWVzdC5wYXJhbXMuaW5zdGFuY2VJZDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgaW5zdGFuY2UudW5mcmVlemUoKTsKICAgIH0sCiAgICBzZXRWaWV3cG9ydChyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCB4ID0gcmVxdWVzdC5wYXJhbXMueDsKICAgICAgY29uc3QgeSA9IHJlcXVlc3QucGFyYW1zLnk7CiAgICAgIGNvbnN0IHdpZHRoID0gcmVxdWVzdC5wYXJhbXMud2lkdGg7CiAgICAgIGNvbnN0IGhlaWdodCA9IHJlcXVlc3QucGFyYW1zLmhlaWdodDsKICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNNYXAuZ2V0KGluc3RhbmNlSWQpOwogICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN0YW5jZSB3aXRoIGlkICR7aW5zdGFuY2VJZH0gZG9lcyBub3QgZXhpc3QuYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbmNlLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgfSwKICAgIHNldE1hcmtlcihyZXF1ZXN0KSB7CiAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSByZXF1ZXN0LnBhcmFtcy5pbnN0YW5jZUlkOwogICAgICBjb25zdCBtYXJrZXIgPSByZXF1ZXN0LnBhcmFtcy5tYXJrZXI7CiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzTWFwLmdldChpbnN0YW5jZUlkKTsKICAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFuY2Ugd2l0aCBpZCAke2luc3RhbmNlSWR9IGRvZXMgbm90IGV4aXN0LmApOwogICAgICB9CiAgICAgIGluc3RhbmNlLnNldE1hcmtlcihtYXJrZXIpOwogICAgICByZXR1cm4gewogICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgfTsKICAgIH0sCiAgICBzZXRMb29wKHJlcXVlc3QpIHsKICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IHJlcXVlc3QucGFyYW1zLmluc3RhbmNlSWQ7CiAgICAgIGNvbnN0IGxvb3AgPSByZXF1ZXN0LnBhcmFtcy5sb29wOwogICAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc01hcC5nZXQoaW5zdGFuY2VJZCk7CiAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbmNlIHdpdGggaWQgJHtpbnN0YW5jZUlkfSBkb2VzIG5vdCBleGlzdC5gKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5zZXRMb29wKGxvb3ApOwogICAgICByZXR1cm4gewogICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgfTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGV4ZWN1dGVDb21tYW5kKHJwY1JlcXVlc3QpIHsKICAgIGNvbnN0IG1ldGhvZCA9IHJwY1JlcXVlc3QubWV0aG9kOwogICAgaWYgKHR5cGVvZiBjb21tYW5kc1ttZXRob2RdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBjb21tYW5kc1ttZXRob2RdKHJwY1JlcXVlc3QpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJHttZXRob2R9IGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBjb21tYW5kcy5gKTsKICAgIH0KICB9CiAgc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVDb21tYW5kKGV2ZW50LmRhdGEpOwogICAgICBjb25zdCByZXNwb25zZSA9IHsKICAgICAgICBpZDogZXZlbnQuZGF0YS5pZCwKICAgICAgICBtZXRob2Q6IGV2ZW50LmRhdGEubWV0aG9kLAogICAgICAgIHJlc3VsdAogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSB7CiAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsCiAgICAgICAgbWV0aG9kOiBldmVudC5kYXRhLm1ldGhvZCwKICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZQogICAgICB9OwogICAgICBzZWxmLnBvc3RNZXNzYWdlKGVycm9yUmVzcG9uc2UpOwogICAgfQogIH07CiAgdmFyIGR1bW15ID0gIiI7CiAgdmFyIGRvdGxvdHRpZV93b3JrZXJfZGVmYXVsdCA9IGR1bW15Owp9KSgpOwo=",{type:"classic"});}};var XI=class{constructor(){B(this,"_workers",new Map);B(this,"_animationWorkerMap",new Map);}getWorker(C){return this._workers.has(C)||this._workers.set(C,new hI),this._workers.get(C)}assignAnimationToWorker(C,i){this._animationWorkerMap.set(C,i);}unassignAnimationFromWorker(C){this._animationWorkerMap.delete(C);}sendMessage(C,i,d){this.getWorker(C).postMessage(i,d||[]);}terminateWorker(C){let i=this._workers.get(C);i&&(i.terminate(),this._workers.delete(C));}};function Qg(r){if(r instanceof OffscreenCanvas)return {width:r.width,height:r.height};let{height:C,width:i}=r.getBoundingClientRect();return {width:i*window.devicePixelRatio,height:C*window.devicePixelRatio}}function jg(){return Date.now().toString(36)+Math.random().toString(36).substr(2,9)}var f=class f{constructor(C){B(this,"_eventManager",new AI);B(this,"_id");B(this,"_worker");B(this,"_canvas");B(this,"_dotLottieInstanceState",{markers:[],autoplay:!1,backgroundColor:"",currentFrame:0,duration:0,loop:!1,mode:"forward",segment:[0,0],segmentDuration:0,speed:1,totalFrames:0,isLoaded:!1,isPlaying:!1,isPaused:!1,isStopped:!0,isFrozen:!1,useFrameInterpolation:!1,renderConfig:{devicePixelRatio:window.devicePixelRatio},activeAnimationId:"",activeThemeId:"",layout:void 0,marker:void 0,isReady:!1,manifest:null});B(this,"_created",!1);this._canvas=C.canvas,this._id=`dotlottie-${jg()}`;let i=C.workerId||"defaultWorker";this._worker=f._workerManager.getWorker(i),f._workerManager.assignAnimationToWorker(this._id,i),f._wasmUrl&&this._sendMessage("setWasmUrl",{url:f._wasmUrl}),this._create(C),this._worker.addEventListener("message",this._handleWorkerEvent.bind(this));}async _handleWorkerEvent(C){let i=C.data;i.id||(i.method==="onLoad"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onComplete"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onDestroy"&&i.result.instanceId===this._id&&this._eventManager.dispatch(i.result.event),i.method==="onUnfreeze"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._dotLottieInstanceState.isFrozen=!1,this._eventManager.dispatch(i.result.event)),i.method==="onFrame"&&i.result.instanceId===this._id&&(this._dotLottieInstanceState.currentFrame=i.result.event.currentFrame,this._eventManager.dispatch(i.result.event)),i.method==="onRender"&&i.result.instanceId===this._id&&this._eventManager.dispatch(i.result.event),i.method==="onFreeze"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onPause"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onPlay"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onStop"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onLoadError"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)),i.method==="onReady"&&i.result.instanceId===this._id&&(await this._updateDotLottieInstanceState(),this._eventManager.dispatch(i.result.event)));}async _create(C){let i;this._canvas instanceof HTMLCanvasElement?i=this._canvas.transferControlToOffscreen():i=this._canvas;let{instanceId:d}=await this._sendMessage("create",{instanceId:this._id,config:{...C,canvas:i},...Qg(this._canvas)},[i]);if(d!==this._id)throw new Error("Instance ID mismatch");this._created=!0,await this._updateDotLottieInstanceState();}get isLoaded(){return this._dotLottieInstanceState.isLoaded}get isPlaying(){return this._dotLottieInstanceState.isPlaying}get isPaused(){return this._dotLottieInstanceState.isPaused}get isStopped(){return this._dotLottieInstanceState.isStopped}get currentFrame(){return this._dotLottieInstanceState.currentFrame}get isFrozen(){return this._dotLottieInstanceState.isFrozen}get segmentDuration(){return this._dotLottieInstanceState.segmentDuration}get totalFrames(){return this._dotLottieInstanceState.totalFrames}get segment(){return this._dotLottieInstanceState.segment}get speed(){return this._dotLottieInstanceState.speed}get duration(){return this._dotLottieInstanceState.duration}get isReady(){return this._dotLottieInstanceState.isReady}get mode(){return this._dotLottieInstanceState.mode}get canvas(){return this._canvas}get autoplay(){return this._dotLottieInstanceState.autoplay}get backgroundColor(){return this._dotLottieInstanceState.backgroundColor}get loop(){return this._dotLottieInstanceState.loop}get useFrameInterpolation(){return this._dotLottieInstanceState.useFrameInterpolation}get renderConfig(){return this._dotLottieInstanceState.renderConfig}get manifest(){return this._dotLottieInstanceState.manifest}get activeAnimationId(){return this._dotLottieInstanceState.activeAnimationId}get marker(){return this._dotLottieInstanceState.marker}get activeThemeId(){return this._dotLottieInstanceState.activeThemeId}get layout(){return this._dotLottieInstanceState.layout}async play(){this._created&&(await this._sendMessage("play",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async pause(){this._created&&(await this._sendMessage("pause",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async stop(){this._created&&(await this._sendMessage("stop",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async setSpeed(C){this._created&&(await this._sendMessage("setSpeed",{instanceId:this._id,speed:C}),await this._updateDotLottieInstanceState());}async setMode(C){this._created&&(await this._sendMessage("setMode",{instanceId:this._id,mode:C}),await this._updateDotLottieInstanceState());}async setFrame(C){this._created&&(await this._sendMessage("setFrame",{frame:C,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setSegment(C,i){this._created&&(await this._sendMessage("setSegment",{instanceId:this._id,segment:[C,i]}),await this._updateDotLottieInstanceState());}async setRenderConfig(C){this._created&&(await this._sendMessage("setRenderConfig",{instanceId:this._id,renderConfig:C}),await this._updateDotLottieInstanceState());}async setUseFrameInterpolation(C){this._created&&(await this._sendMessage("setUseFrameInterpolation",{instanceId:this._id,useFrameInterpolation:C}),await this._updateDotLottieInstanceState());}async loadTheme(C){if(!this._created)return !1;let i=this._sendMessage("loadTheme",{instanceId:this._id,themeId:C});return await this._updateDotLottieInstanceState(),i}async load(C){this._created&&(await this._sendMessage("load",{config:C,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setLoop(C){this._created&&(await this._sendMessage("setLoop",{instanceId:this._id,loop:C}),await this._updateDotLottieInstanceState());}async resize(){if(!this._created)return;let{height:C,width:i}=Qg(this._canvas);this._canvas.width=i,this._canvas.height=C,await this._sendMessage("resize",{height:C,instanceId:this._id,width:i}),await this._updateDotLottieInstanceState();}async destroy(){this._created&&(this._created=!1,await this._sendMessage("destroy",{instanceId:this._id}),this._cleanupStateMachineListeners(),f._workerManager.unassignAnimationFromWorker(this._id),this._eventManager.removeAllEventListeners());}async freeze(){this._created&&(await this._sendMessage("freeze",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async unfreeze(){this._created&&(await this._sendMessage("unfreeze",{instanceId:this._id}),await this._updateDotLottieInstanceState());}async setBackgroundColor(C){this._created&&(await this._sendMessage("setBackgroundColor",{instanceId:this._id,backgroundColor:C}),await this._updateDotLottieInstanceState());}async loadAnimation(C){this._created&&(await this._sendMessage("loadAnimation",{animationId:C,instanceId:this._id}),await this._updateDotLottieInstanceState());}async setLayout(C){this._created&&(await this._sendMessage("setLayout",{instanceId:this._id,layout:C}),await this._updateDotLottieInstanceState());}async _updateDotLottieInstanceState(){if(!this._created)return;let C=await this._sendMessage("getDotLottieInstanceState",{instanceId:this._id});this._dotLottieInstanceState=C.state;}markers(){return this._dotLottieInstanceState.markers}async setMarker(C){this._created&&(await this._sendMessage("setMarker",{instanceId:this._id,marker:C}),await this._updateDotLottieInstanceState());}async loadThemeData(C){if(!this._created)return !1;let i=await this._sendMessage("loadThemeData",{instanceId:this._id,themeData:C});return await this._updateDotLottieInstanceState(),i}async setViewport(C,i,d,m){return this._created?this._sendMessage("setViewport",{x:C,y:i,width:d,height:m,instanceId:this._id}):!1}async _sendMessage(C,i,d){let m={id:`dotlottie-request-${jg()}`,method:C,params:i};return this._worker.postMessage(m,d||[]),new Promise((J,M)=>{let T=v=>{let $=v.data;$.id===m.id&&(this._worker.removeEventListener("message",T),$.error?M(new Error(`Failed to execute method ${C}: ${$.error}`)):J($.result));};this._worker.addEventListener("message",T);})}addEventListener(C,i){this._eventManager.addEventListener(C,i);}removeEventListener(C,i){this._eventManager.removeEventListener(C,i);}static setWasmUrl(C){f._wasmUrl=C;}async loadStateMachine(C){if(!this._created)return !1;let i=await this._sendMessage("loadStateMachine",{instanceId:this._id,stateMachineId:C});return await this._updateDotLottieInstanceState(),i}async loadStateMachineData(C){if(!this._created)return !1;let i=await this._sendMessage("loadStateMachineData",{instanceId:this._id,stateMachineData:C});return await this._updateDotLottieInstanceState(),i}async startStateMachine(){if(!this._created)return !1;this._setupStateMachineListeners();let C=await this._sendMessage("startStateMachine",{instanceId:this._id});return await this._updateDotLottieInstanceState(),C}async stopStateMachine(){return this._created?(this._cleanupStateMachineListeners(),this._sendMessage("stopStateMachine",{instanceId:this._id})):!1}async postStateMachineEvent(C){return this._created?this._sendMessage("postStateMachineEvent",{event:C,instanceId:this._id}):1}async getStateMachineListeners(){return this._created?this._sendMessage("getStateMachineListeners",{instanceId:this._id}):[]}_getPointerPosition(C){let i=this._canvas.getBoundingClientRect(),d=this._canvas.width/i.width,m=this._canvas.height/i.height,J=this._dotLottieInstanceState.renderConfig.devicePixelRatio||window.devicePixelRatio||1,M=(C.clientX-i.left)*d/J,T=(C.clientY-i.top)*m/J;return {x:M,y:T}}_onPointerUp(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerUp: ${i} ${d}`);}_onPointerDown(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerDown: ${i} ${d}`);}_onPointerMove(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerMove: ${i} ${d}`);}_onPointerEnter(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerEnter: ${i} ${d}`);}_onPointerLeave(C){let{x:i,y:d}=this._getPointerPosition(C);this.postStateMachineEvent(`OnPointerExit: ${i} ${d}`);}_onComplete(){this.postStateMachineEvent("OnComplete");}async _setupStateMachineListeners(){if(P&&this._canvas instanceof HTMLCanvasElement&&this.isLoaded){let C=await this._sendMessage("getStateMachineListeners",{instanceId:this._id});C.includes("PointerUp")&&this._canvas.addEventListener("pointerup",this._onPointerUp.bind(this)),C.includes("PointerDown")&&this._canvas.addEventListener("pointerdown",this._onPointerDown.bind(this)),C.includes("PointerMove")&&this._canvas.addEventListener("pointermove",this._onPointerMove.bind(this)),C.includes("PointerEnter")&&this._canvas.addEventListener("pointerenter",this._onPointerEnter.bind(this)),C.includes("PointerExit")&&this._canvas.addEventListener("pointerleave",this._onPointerLeave.bind(this)),C.includes("Complete")&&this.addEventListener("complete",this._onComplete.bind(this));}}_cleanupStateMachineListeners(){P&&this._canvas instanceof HTMLCanvasElement&&(this._canvas.removeEventListener("pointerup",this._onPointerUp.bind(this)),this._canvas.removeEventListener("pointerdown",this._onPointerDown.bind(this)),this._canvas.removeEventListener("pointermove",this._onPointerMove.bind(this)),this._canvas.removeEventListener("pointerenter",this._onPointerEnter.bind(this)),this._canvas.removeEventListener("pointerleave",this._onPointerLeave.bind(this)),this.removeEventListener("complete",this._onComplete.bind(this)));}};B(f,"_workerManager",new XI),B(f,"_wasmUrl","");var Og=f;
|
|
16
10
|
|
|
17
|
-
exports.DotLottie =
|
|
18
|
-
exports.DotLottieWorker =
|
|
19
|
-
//# sourceMappingURL=
|
|
11
|
+
exports.DotLottie = Ug;
|
|
12
|
+
exports.DotLottieWorker = Og;
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
20
14
|
//# sourceMappingURL=index.cjs.map
|